Behaviour

Searchable product promises from the wiki story catalogs and executable story coverage.

IDBehaviourSourceSeverityStatusTests
ADV-S1User pastes 1 MB of plain text into a single bullet
wiki/content/stories/USER-STORIES.md
user-storyAdversarialgreen1
ADV-S10Two agents enqueue same `request_id` concurrently — exactly one row created
wiki/content/stories/USER-STORIES.md
user-storyCriticalgreen13
ADV-S11URL hits free-tier CF quota mid-day — service degrades gracefully, not 1027
wiki/content/stories/USER-STORIES.md
user-storyHighgreen1
ADV-S12Hostile collaborator deletes the entire CV quarry from the link
wiki/content/stories/USER-STORIES.md
user-storyAdversarialgreen1
ADV-S13User attaches a malicious / corrupt PDF as a reference upload
wiki/content/stories/USER-STORIES.md
user-storyAdversarialgreen1
ADV-S14Agent floods workspace with 10k job.create ops
wiki/content/stories/USER-STORIES.md
user-storyAdversarialgreen1
ADV-S2User pastes HTML/script tags into description
wiki/content/stories/USER-STORIES.md
user-storyAdversarialgreen1
ADV-S3User submits a URL containing weird unicode
wiki/content/stories/USER-STORIES.md
user-storyAdversarialgreen1
ADV-S4LLM returns prompt-injection that tries to rewrite FIXED-tier name
wiki/content/stories/USER-STORIES.md
user-storyCriticalgreen1
ADV-S5Agent submits op with `kind` not in op catalog
wiki/content/stories/USER-STORIES.md
user-storyCriticalgreen1
ADV-S6Agent submits op with stale `OP_CATALOG_VERSION` — rejected with version mismatch
wiki/content/stories/USER-STORIES.md
user-storyHighgreen1
ADV-S7Agent retries a write 100× with same opId — only first commit lands; others dedupe
wiki/content/stories/USER-STORIES.md
user-storyCriticalgreen1
ADV-S8User opens a workspace ID that doesn't exist — clean error, no crash
wiki/content/stories/USER-STORIES.md
user-storyMediumgreen1
ADV-S9User opens a workspace with corrupted sub-doc bytes — graceful surface, doesn't poison healthy sub-docs
wiki/content/stories/USER-STORIES.md
user-storyHighgreen1
E1Default quality run spends no budget
wiki/content/stories/EFFICIENCY-STORIES.md
efficiency-storyHighgreen1
E2Fast checks stay fast enough for local loops
wiki/content/stories/EFFICIENCY-STORIES.md
efficiency-storyHighgreen1
E3Slow free checks stay repeatable
wiki/content/stories/EFFICIENCY-STORIES.md
efficiency-storyHighgreen1
E4Browser smoke proves the app without provider spend
wiki/content/stories/EFFICIENCY-STORIES.md
efficiency-storyHighgreen1
E5Release gate starts from zero-budget evidence
wiki/content/stories/EFFICIENCY-STORIES.md
efficiency-storyHighgreen1
E6Quality service rejects ambiguous spend
wiki/content/stories/EFFICIENCY-STORIES.md
efficiency-storyHighgreen1
E7Synthetic test data has a cleanup cost budget
wiki/content/stories/EFFICIENCY-STORIES.md
efficiency-storyHighgreen3
P1-G1-S1Acquire job (manual paste URL)
wiki/content/stories/USER-STORIES.md
user-storyCriticalgreen2
P1-G1-S2Acquire job (manual fields only, no URL)
wiki/content/stories/USER-STORIES.md
user-storyHighgreen1
P1-G1-S3Acquire job (malformed URL)
wiki/content/stories/USER-STORIES.md
user-storyAdversarialgreen1
P1-G1-S4Acquire job (URL points at non-job page)
wiki/content/stories/USER-STORIES.md
user-storyAdversarialgreen1
P1-G1-S5Acquire job (duplicate URL already in workspace)
wiki/content/stories/USER-STORIES.md
user-storyHighgreen1
P1-G1-S6Acquire job (URL with tracking parameters)
wiki/content/stories/USER-STORIES.md
user-storyMediumgreen1
P1-G10-S1Switch to read-only view link (sharing progress without edit risk)
wiki/content/stories/USER-STORIES.md
user-storyMediumgreen1
P1-G2-S1Extract job facts (happy path)
wiki/content/stories/USER-STORIES.md
user-storyCriticalgreen1
P1-G2-S2Extract job facts (LLM returns malformed JSON)
wiki/content/stories/USER-STORIES.md
user-storyHighgreen1
P1-G2-S3Extract job facts (provider rate-limited)
wiki/content/stories/USER-STORIES.md
user-storyCriticalgreen1
P1-G2-S4Extract job facts (no description scraped)
wiki/content/stories/USER-STORIES.md
user-storyHighgreen1
P1-G2-S5Extract job facts (industry not in user's enum)
wiki/content/stories/USER-STORIES.md
user-storyMediumgreen1
P1-G2-S6Extract job facts (salary not stated, enrichment falls back to LLM estimate)
wiki/content/stories/USER-STORIES.md
user-storyHighgreen1
P1-G3-S1Score job (default scoring config)
wiki/content/stories/USER-STORIES.md
user-storyCriticalgreen1
P1-G3-S2Score job (user customizes weights mid-flight)
wiki/content/stories/USER-STORIES.md
user-storyHighgreen1
P1-G3-S3Score job (knockout boolean triggers)
wiki/content/stories/USER-STORIES.md
user-storyHighgreen1
P1-G3-S4Score job (no description, scoring degrades gracefully)
wiki/content/stories/USER-STORIES.md
user-storyMediumgreen1
P1-G3-S5Score job (user adds custom column post-hoc, score recalculates)
wiki/content/stories/USER-STORIES.md
user-storyHighgreen2
P1-G4-S1Evaluate fit (commute calculated from home address)
wiki/content/stories/USER-STORIES.md
user-storyHighgreen1
P1-G4-S2Evaluate fit (home address missing — commute blocked)
wiki/content/stories/USER-STORIES.md
user-storyMediumgreen1
P1-G4-S3Evaluate fit (boolean criterion changes after eval — single-flight prevents re-eval)
wiki/content/stories/USER-STORIES.md
user-storyHighgreen1
P1-G5-S1Decide via kanban (drag job between columns)
wiki/content/stories/USER-STORIES.md
user-storyCriticalgreen1
P1-G5-S2Decide via custom view (group by score band)
wiki/content/stories/USER-STORIES.md
user-storyHighgreen1
P1-G5-S3Decide via sort (descending score)
wiki/content/stories/USER-STORIES.md
user-storyHighgreen1
P1-G5-S4Decide via reorder within group (manual position)
wiki/content/stories/USER-STORIES.md
user-storyMediumgreen1
P1-G6-S1Tailor CV (first time on a job)
wiki/content/stories/USER-STORIES.md
user-storyCriticalgreen22
P1-G6-S10Tailor (user promotes edit back to quarry as variant)
wiki/content/stories/USER-STORIES.md
user-storyHighgreen22
P1-G6-S11Tailor (re-tailor wipes previous snapshot but variants in quarry preserved)
wiki/content/stories/USER-STORIES.md
user-storyHighgreen1
P1-G6-S12Tailor (CV in language A, CL in language B — peer trees independent)
wiki/content/stories/USER-STORIES.md
user-storyMediumgreen1
P1-G6-S2Tailor CV (re-tailor on edits to quarry)
wiki/content/stories/USER-STORIES.md
user-storyHighgreen1
P1-G6-S3Tailor CV (FIXED identity preserved verbatim)
wiki/content/stories/USER-STORIES.md
user-storyCriticalgreen22
P1-G6-S4Tailor CV (HYBRID selects best-fit experience entries)
wiki/content/stories/USER-STORIES.md
user-storyHighgreen22
P1-G6-S5Tailor CV (OPEN summary generated, factually grounded)
wiki/content/stories/USER-STORIES.md
user-storyHighgreen22
P1-G6-S6Tailor CL (cover letter recipient, opening, closing per locale)
wiki/content/stories/USER-STORIES.md
user-storyHighgreen22
P1-G6-S7Tailor (provider 429 — cascade falls over)
wiki/content/stories/USER-STORIES.md
user-storyCriticalgreen22
P1-G6-S8Tailor (every provider in chain exhausted — clean failure surface)
wiki/content/stories/USER-STORIES.md
user-storyHighgreen1
P1-G6-S9Tailor (user edits the tailored copy, quarry untouched)
wiki/content/stories/USER-STORIES.md
user-storyHighgreen22
P1-G7-S1Render PDF (preview matches printed output, fits format.maxPages)
wiki/content/stories/USER-STORIES.md
user-storyCriticalgreen1
P1-G7-S2Render PDF (long header overflows — overflow indicator surfaces)
wiki/content/stories/USER-STORIES.md
user-storyMediumdebt1
P1-G7-S3Render PDF (Typst WASM bundle fails to load)
wiki/content/stories/USER-STORIES.md
user-storyAdversarialgreen1
P1-G7-S4Render PDF (font missing — falls back deterministically)
wiki/content/stories/USER-STORIES.md
user-storyMediumgreen1
P1-G7-S5Render PDF (locale resolved from job location, not workspace)
wiki/content/stories/USER-STORIES.md
user-storyHighgreen1
P1-G7-S6Render PDF (orthography ortho=ß→ss applied for de-CH)
wiki/content/stories/USER-STORIES.md
user-storyMediumgreen1
P1-G8-S1Apply (move job to "Applied" status, follow-up note saved)
wiki/content/stories/USER-STORIES.md
user-storyHighgreen2
P1-G8-S2Apply (rejected/offered terminal status — view auto-groups)
wiki/content/stories/USER-STORIES.md
user-storyMediumgreen1
P1-G9-S1Iterate profile (add personal-info field)
wiki/content/stories/USER-STORIES.md
user-storyHighgreen2
P1-G9-S2Iterate profile (add new experience as quarry node — does not auto-render)
wiki/content/stories/USER-STORIES.md
user-storyCriticalgreen1
P1-G9-S3Iterate profile (activate the new quarry node via selection.update)
wiki/content/stories/USER-STORIES.md
user-storyHighgreen1
P1-G9-S4Iterate profile (delete a variant — pool memory preserved unless explicit)
wiki/content/stories/USER-STORIES.md
user-storyHighgreen1
P1-G9-S5Iterate profile (add new language — full clone with translation)
wiki/content/stories/USER-STORIES.md
user-storyHighgreen1
P2-G1-S1Friend pastes a job URL — primary user sees it within 2 s
wiki/content/stories/USER-STORIES.md
user-storyCriticalgreen1
P2-G1-S2Friend pastes URL while primary is editing — both surfaces update
wiki/content/stories/USER-STORIES.md
user-storyHighgreen1
P2-G10-S1Friend joins via the link cold — sees current state on first paint
wiki/content/stories/USER-STORIES.md
user-storyCriticalgreen1
P2-G10-S2Friend leaves — presence count decrements within a couple seconds
wiki/content/stories/USER-STORIES.md
user-storyMediumgreen1
P2-G10-S3Solo + friend both go offline mid-edit — both reconnect, both see merged state
wiki/content/stories/USER-STORIES.md
user-storyCriticalgreen1
P2-G3-S1Friend toggles a knockout boolean — primary's score updates within 2 s
wiki/content/stories/USER-STORIES.md
user-storyCriticalgreen1
P2-G3-S2Friend changes scoring config — score recalculates everywhere
wiki/content/stories/USER-STORIES.md
user-storyHighgreen1
P2-G5-S1Friend reorders kanban — primary sees new order live
wiki/content/stories/USER-STORIES.md
user-storyCriticalgreen1
P2-G6-S1Friend edits one bullet, primary edits another — both keystrokes survive
wiki/content/stories/USER-STORIES.md
user-storyCriticalgreen1
P2-G6-S2Friend and primary type into the same bullet — character-level merge
wiki/content/stories/USER-STORIES.md
user-storyCriticalgreen1
P2-G6-S3Friend deletes a bullet primary just edited — last-writer-wins for whole-node delete
wiki/content/stories/USER-STORIES.md
user-storyHighgreen1
P2-G6-S4Friend marks bullet as locked — primary's edits still merge, agents are blocked (future)
wiki/content/stories/USER-STORIES.md
user-storyLowfuture1
P2-G6-S5Friend promotes a tailored edit to quarry while primary still tailoring same job
wiki/content/stories/USER-STORIES.md
user-storyHighgreen1
P2-G9-S1Friend adds a candidate variant for the quarry while primary edits
wiki/content/stories/USER-STORIES.md
user-storyHighgreen1
P3-G10-S1Five participants connected — presence indicator caps display but counts are accurate
wiki/content/stories/USER-STORIES.md
user-storyMediumgreen1
P3-G10-S2Mentor opens read-only view — cannot accidentally toggle selection
wiki/content/stories/USER-STORIES.md
user-storyMediumgreen1
P3-G3-S1Mentor disagrees with primary's knockout — both writes preserved on independent fields
wiki/content/stories/USER-STORIES.md
user-storyHighgreen1
P3-G4-S1Three actors evaluate same boolean criterion concurrently — first-write-wins is wrong; LWW per criterion key OK
wiki/content/stories/USER-STORIES.md
user-storyMediumgreen1
P3-G6-S1Three actors edit three different bullets in the same section — all preserved
wiki/content/stories/USER-STORIES.md
user-storyCriticalgreen1
P3-G6-S2Two actors edit the same bullet, third deletes the section — section delete wins, bullet edits lost (but auditable)
wiki/content/stories/USER-STORIES.md
user-storyHighgreen1
P3-G6-S3Mentor edits CV, primary tailors a job concurrently — tailored snapshot reflects state at snapshot time
wiki/content/stories/USER-STORIES.md
user-storyHighgreen1
P3-G9-S1Three actors add variants in parallel — all candidates land in pool, none lost
wiki/content/stories/USER-STORIES.md
user-storyCriticalgreen1
P4-G1-S1Agent imports a batch of jobs via MCP — user sees rows appear live
wiki/content/stories/USER-STORIES.md
user-storyCriticalgreen2
P4-G1-S2Agent imports same job twice — deduplicated by URL
wiki/content/stories/USER-STORIES.md
user-storyHighgreen1
P4-G1-S3Agent races with another agent on same URL — only one row, one process request
wiki/content/stories/USER-STORIES.md
user-storyCriticalgreen1
P4-G10-S1Agent presence visible alongside human presence (counts independent)
wiki/content/stories/USER-STORIES.md
user-storyHighgreen1
P4-G2-S1Agent extracts a job, user observes filled cells with agent origin tint
wiki/content/stories/USER-STORIES.md
user-storyCriticalgreen2
P4-G3-S1Agent evaluates a job, cell origin = agent:provider:model
wiki/content/stories/USER-STORIES.md
user-storyHighgreen1
P4-G3-S2Agent tries to overwrite a structured fact human just set — write rejected by protection gate
wiki/content/stories/USER-STORIES.md
user-storyCriticalgreen1
P4-G3-S3Agent uses `force: true` — overwrite proceeds, telemetry records preservation override
wiki/content/stories/USER-STORIES.md
user-storyHighgreen1
P4-G6-S1Agent creates a quarry candidate (inactive) — user toggles it active
wiki/content/stories/USER-STORIES.md
user-storyCriticalgreen1
P4-G6-S2Agent runs full tailor while user idle — completed snapshot visible on user's next paint
wiki/content/stories/USER-STORIES.md
user-storyHighgreen1
P4-G6-S3Agent violates selection cardinality (maxCount=1 with 2 actives) — rejected without `force: true`
wiki/content/stories/USER-STORIES.md
user-storyCriticalgreen1
P4-G6-S4Agent uses `force: true` to violate cardinality — allowed; UI displays current/bounds honestly
wiki/content/stories/USER-STORIES.md
user-storyMediumgreen1
P4-G6-S5Agent tries to delete a FIXED-tier personal-info node — write proceeds (FIXED is about LLM rewriting, not deletion)
wiki/content/stories/USER-STORIES.md
user-storyMediumgreen1
P4-G6-S6Agent tries to invent text on a FIXED node via the tailor path — blocked structurally; identity unchanged
wiki/content/stories/USER-STORIES.md
user-storyCriticalgreen1
P4-G9-S1Agent seeds a new language tree from agent-supplied content — translate op produces peer tree
wiki/content/stories/USER-STORIES.md
user-storyHighgreen1
P4-G9-S2Agent calls `cv_profile.replace` with a malformed tree — broker rejects, no partial state
wiki/content/stories/USER-STORIES.md
user-storyCriticalgreen1
P5-G1-S1Agent adds a job to a workspace with no browser tab open
wiki/content/stories/USER-STORIES.md
user-storyCriticalgreen1
P5-G2-S1Agent triggers extract via process_request — server fallback picks it up within ~60 s when no browser leader
wiki/content/stories/USER-STORIES.md
user-storyCriticalgreen1
P5-G2-S2Browser leader present — process_request claimed and run within ~2 s
wiki/content/stories/USER-STORIES.md
user-storyCriticalgreen1
P5-G6-S1Agent enqueues tailor by deterministic request_id — second concurrent call collapses on PK constraint
wiki/content/stories/USER-STORIES.md
user-storyCriticalgreen1
P5-G6-S2Agent tailors with no human ever opening the tab — final snapshot persists
wiki/content/stories/USER-STORIES.md
user-storyHighgreen1
P5-G8-S1Agent updates job status when user later opens dashboard, status matches
wiki/content/stories/USER-STORIES.md
user-storyHighgreen1
P6-G1-S1User adds a job on laptop, opens phone — job present immediately
wiki/content/stories/USER-STORIES.md
user-storyCriticalgreen2
P6-G10-S1Same person "looks like one user" or "two users" — presence rules consistent with awareness model
wiki/content/stories/USER-STORIES.md
user-storyMediumdebt1
P6-G5-S1User drags kanban on laptop, phone reflects within 2 s
wiki/content/stories/USER-STORIES.md
user-storyCriticalgreen1
P6-G6-S1User edits CV bullet on laptop, switches to tablet — pending optimistic edits survive tab close and replay
wiki/content/stories/USER-STORIES.md
user-storyCriticalgreen1
P6-G6-S2User has the same workspace open in two tabs on same browser — leader election prevents double-claim
wiki/content/stories/USER-STORIES.md
user-storyHighgreen1
P6-G6-S3User goes offline on laptop, makes edits, reconnects — pending op queue drains in order
wiki/content/stories/USER-STORIES.md
user-storyCriticalgreen1
P6-G6-S4User has both tabs open, kills primary tab — successor becomes leader within seconds
wiki/content/stories/USER-STORIES.md
user-storyHighgreen1
P6-G7-S1User renders PDF on laptop, opens phone — same Typst source produces matching layout
wiki/content/stories/USER-STORIES.md
user-storyMediumgreen1
P6-G9-S1User types into bullet on laptop, types into same bullet on phone — Y.Text merges character-by-character
wiki/content/stories/USER-STORIES.md
user-storyCriticalgreen1
P7-G1-S1New collaborator opens shared link cold — first paint includes current job list
wiki/content/stories/USER-STORIES.md
user-storyCriticalgreen1
P7-G10-S1New collaborator's first edit appears on creator's screen within 2 s
wiki/content/stories/USER-STORIES.md
user-storyCriticalgreen1
P7-G10-S2New collaborator joins, then leaves, then rejoins — state convergent, no duplicate identity
wiki/content/stories/USER-STORIES.md
user-storyMediumgreen1
P7-G10-S3Creator shares read-only link instead — new collaborator's UI is fully disabled for writes
wiki/content/stories/USER-STORIES.md
user-storyMediumgreen1
P7-G6-S1New collaborator inherits the quarry on first paint, sees variants and selections rendered correctly
wiki/content/stories/USER-STORIES.md
user-storyHighgreen1
REC-S1User kills tab mid-edit — pending ops in IDB replay on reopen
wiki/content/stories/USER-STORIES.md
user-storyCriticalgreen1
REC-S2Browser dies during tailor — re-opening shows tailor in-flight or completed
wiki/content/stories/USER-STORIES.md
user-storyHighgreen1
REC-S3Realtime DO hibernates — first interaction wakes it, state intact
wiki/content/stories/USER-STORIES.md
user-storyCriticalgreen1
REC-S4Edge cache stale after writes — clients refetch fresh sub-doc
wiki/content/stories/USER-STORIES.md
user-storyHighgreen1
REC-S5SSE stream disconnects mid-session — auto-reconnects within ~1.5 s, missed events caught up via since-cursor
wiki/content/stories/USER-STORIES.md
user-storyHighgreen1
REC-S6y-indexeddb DB corrupted — clean reset, no double-replay
wiki/content/stories/USER-STORIES.md
user-storyMediumgreen1
REC-S7User had unfinished tailor when laptop slept — on wake, optimistic pending op resumes
wiki/content/stories/USER-STORIES.md
user-storyMediumgreen1
S1Provider-neutral test execution
wiki/content/stories/SYSTEM-STORIES.md
system-storyHighgreen1
S2Provider failures are normalized
wiki/content/stories/SYSTEM-STORIES.md
system-storyHighgreen55
S3Synthetic workspace origin is explicit
wiki/content/stories/SYSTEM-STORIES.md
system-storyHighgreen1
S4Synthetic workspace cleanup is deterministic
wiki/content/stories/SYSTEM-STORIES.md
system-storyHighgreen1
S5Quality service is a product surface
wiki/content/stories/SYSTEM-STORIES.md
system-storyHighgreen1
S6Quality results are auditable
wiki/content/stories/SYSTEM-STORIES.md
system-storyHighgreen1
X-G10-S1Workspace settings save and job order save happen in same gesture — one atomic batch, peers see consistent state
wiki/content/stories/USER-STORIES.md
user-storyHighgreen1
X-G10-S2Workspace deletion is not user-facing — there is no destroy gesture; verify no UI exposes it
wiki/content/stories/USER-STORIES.md
user-storyLowgreen1
X-G2-S1User pastes URL, agent extracts in background, friend opens detail — all three see the final extracted fields
wiki/content/stories/USER-STORIES.md
user-storyHighgreen1
X-G3-S1Custom column added while two jobs are mid-score — both jobs re-score against new column once persisted
wiki/content/stories/USER-STORIES.md
user-storyMediumgreen1
X-G5-S1User changes active view while friend is dragging a job — friend's drag completes; group ID resolves under both views correctly
wiki/content/stories/USER-STORIES.md
user-storyMediumgreen1
X-G6-S1Tailor triggered while a friend is editing the source bullet — snapshot reflects tailor-time state
wiki/content/stories/USER-STORIES.md
user-storyHighgreen1
X-G6-S2Agent tailors while user offline; on reconnect, user sees agent's snapshot without losing in-flight local edits
wiki/content/stories/USER-STORIES.md
user-storyHighgreen1
X-G6-S3User adds new section while LLM tailor in flight — tailor uses pre-add tree (its snapshot was taken first)
wiki/content/stories/USER-STORIES.md
user-storyMediumgreen1
X-G6-S4Two browsers tailor the same job with same deterministic request_id — only one LLM call runs
wiki/content/stories/USER-STORIES.md
user-storyCriticalgreen1

151 behaviours