@iamu-dev/iamu 0.2.0-beta.1 → 0.2.0-beta.10

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -70,11 +70,9 @@ Continuity: steps form ONE ongoing monologue. From step 2 onward, don't restate
70
70
 
71
71
  ## Pacing
72
72
 
73
- **Aim for 10-20 steps.** Stop when the primary task verdict is clear — either the persona accomplished their goal or they hit friction that blocks them. A focused 12-step walkthrough with sharp findings is worth more than a 40-step exhaustive tour.
73
+ **Aim for 10-20 steps.** When evaluating a form or journey, inspect all relevant sections across the workflow (e.g., travel details, per diem, deductions, expenses). Do not abandon the walkthrough after logging a single defect — continue through the remaining sections to uncover all distinct compliance and usability gaps before completing. A complete walkthrough with sharp findings across all sections gives the team high-value signal.
74
74
 
75
- Do not try to complete every interaction. If a form has 15 fields, the observation is "this persona would give up at field 4" — note the finding and move on.
76
-
77
- Do try key interactions that reveal something: click the main CTA, open a dropdown, check what filters exist. These are cheap observations with high signal.
75
+ Do try key interactions that reveal something: click the main CTA, open a dropdown, check what options or deductions exist. These are cheap observations with high signal.
78
76
 
79
77
  Follow the persona's motivation. Spend time on what matters to them. When you have enough evidence to answer "would this person come back?" — you're done.
80
78
 
@@ -100,6 +98,20 @@ Your browser tooling has limitations that can look like product bugs. Before rec
100
98
 
101
99
  Do NOT silently suppress findings you suspect are tooling issues. Record them with the caveat — the human triaging can verify.
102
100
 
101
+ ## Expected state vs product bugs (Empty state & unseeded data)
102
+
103
+ When an environment is unseeded or test records are missing:
104
+ - An empty table or "No records found" screen is NOT automatically a product bug. If your scenario assumes existing data (e.g. reviewing past entries or auditing submitted claims), check whether the environment simply lacks seed data.
105
+ - If your persona role is a creator (e.g. employee or consultant creating an item), click the creation CTA (e.g. "+ Ny reseräkning", "+ New") and proceed with your task.
106
+ - If your persona role is read-only (e.g. an auditor or manager) and cannot create data, do NOT record false "missing data" bugs against the product. Conclude the walk noting that the environment lacks the required preconditions.
107
+
108
+ ## Semantic squinting (Adapting to environmental mismatch)
109
+
110
+ Your prompt may include an approximation strategy (e.g. "If Malmö is missing, choose Göteborg").
111
+ - **Squint at the closest match:** When the exact target name, category, or record described in your brief isn't available in this environment, pick the closest available alternative that allows testing the workflow.
112
+ - **Stay in the journey:** Approximation is bounded. Never drift to unrelated modules (e.g. settings, profile, admin panels) just because a specific test record was absent.
113
+ - **Log the approximation:** In your step note (`note`), state clearly that you chose the closest alternative according to your instructions.
114
+
103
115
  ## Portal-rendered UI
104
116
 
105
117
  Radix / Headless UI / Floating UI render dropdowns and listboxes into portals that do not appear in accessibility snapshots. If an expandable combobox looks empty after click, try: press ArrowDown then Enter, or evaluate a script in the page to probe the DOM. Take a fresh screenshot.
@@ -67,47 +67,63 @@ Filter to `triage_status: open`.
67
67
 
68
68
  A run that simply did not come across a finding proves nothing — never call a fix verified because it was not seen. After the list, if any fixes await a re-run, say how many and in which scenarios (`iamu status --json` → `rerun`, with `requests.open` for team requests), and offer `iamu-run <scenario>` for the first one.
69
69
 
70
- Group by `scenario` field and render as a severity-sorted table per scenario group (CRITICAL → MAJOR → MINOR → OBS; hinders and missing first, helps last):
70
+ Group by `scenario` field and render with an executive tally header, followed by a severity-sorted list per scenario group (CRITICAL → MAJOR → MINOR → OBS; hinders and missing first, helps last), including persona quotes, evidence, and clickable file links:
71
71
 
72
72
  ```
73
- Open findings (N total)
74
-
75
- ▼ maria-gomez--busy-shift (4 findings)
76
-
77
- | # | Severity | Type | Finding | Slug |
78
- |---|----------|---------|--------------------------------------------------|------------------------------------------------------------|
79
- | 1 | CRITICAL | hinders | Handoff list is cluttered | maria-gomez--busy-shift--handoff-list-cluttered-a1b2c3 |
80
- | 2 | MAJOR | missing | No visible confirmation after shift submit | maria-gomez--busy-shift--no-submit-confirmation-d4e5f6 |
81
- | 3 | MINOR | hinders | Timeout warning fires mid-input | maria-gomez--busy-shift--timeout-mid-input-g7h8i9 |
82
- | 4 | OBS | helps | Gesture hint at top of screen | maria-gomez--busy-shift--gesture-hint-j1k2l3 |
83
-
84
- ▼ dev-patel--checkout-abandon (3 findings)
85
-
86
- | # | Severity | Type | Finding | Slug |
87
- |---|----------|-----------|--------------------------------------------------|------------------------------------------------------------|
88
- | 5 | CRITICAL | incorrect | Cart total recalculates to wrong amount | dev-patel--checkout-abandon--cart-total-wrong-... |
89
- | 6 | MAJOR | missing | No save-for-later affordance | dev-patel--checkout-abandon--no-save-for-later-... |
90
- | 7 | MINOR | hinders | Auto-scroll on form error | dev-patel--checkout-abandon--auto-scroll-error-... |
73
+ Findings Tally: <N> Open (<C> Critical · <M> Major · <m> Minor) across <S> Scenarios
74
+ Awaiting verification: <K> addressed findings pending re-run
75
+
76
+ ▼ [<scenario>](iamu/scenarios/<scenario>.md) (4 findings)
77
+ 1. [CRITICAL · hinders] Handoff list is cluttered ([file](iamu/findings/<slug>.md))
78
+ • Persona: <Persona Name>: "<Persona reaction or consequence quote>"
79
+ • Evidence: Step <N> at <url>
80
+ • Recommendation: Add status filter chips
81
+
82
+ 2. [MAJOR · missing] No visible confirmation after shift submit ([file](iamu/findings/<slug>.md))
83
+ • Persona: <Persona Name>: "<Persona reaction or consequence quote>"
84
+ • Evidence: Step <N> at <url>
85
+ • Recommendation: Show inline success toast
91
86
  ```
92
87
 
93
- Ask the user which finding to triage (by number, slug, or "skip").
88
+ Ask the user how they would like to triage:
94
89
 
90
+ - **"walk through them"** → iterate through all open findings one-by-one in order with full context, code location, and triage choices (`[Fix now] [Skip / Dismiss] [Discuss] [Next]`).
95
91
  - **"all critical"** → iterate through all critical findings in order.
96
92
  - **Scenario group name** (e.g. "group 1") → iterate through that scenario's findings.
97
- - **Single number or slug** → single finding.
93
+ - **Single number or slug** → single finding (skip to step 3).
94
+ - **"fix 1 and 2"** → make code fixes and mark addressed immediately.
95
+ - **"skip 3" / "dismiss 3"** → dismiss with reason (`out_of_scope`, `not_relevant`, `walker_error`, `duplicate`).
96
+
97
+ **Interactive Triage Strategy:**
98
+ - If your environment provides an interactive user-prompt tool (e.g. `ask_question`, `ask_followup_question`), invoke it:
99
+ - Question: "How would you like to review these <N> open findings?"
100
+ - Options:
101
+ 1. "[Recommended] Walk through findings one by one"
102
+ 2. "Focus only on Critical findings (<C> items)"
103
+ 3. "Review by scenario group: <Top Scenario>"
104
+ - Otherwise (in CLI or text-only environments):
105
+
106
+ How would you like to triage these <N> open findings?
107
+ 1. [Recommended] Walk through findings one by one
108
+ 2. Focus only on Critical findings (<C> items)
109
+ 3. Review by scenario group: <Top Scenario>
110
+
111
+ Press Enter to walk through all [1], select 2-3, or enter a finding number/slug:
112
+ (Treat empty Enter as Option 1)
98
113
 
99
114
  ### 3. Direct triage: review one finding
100
115
 
101
- Read the finding file at `iamu/findings/<slug>.md`. Parse the YAML frontmatter and markdown body. Render full detail:
116
+ Read the finding file at `iamu/findings/<slug>.md`. Parse the YAML frontmatter and markdown body. Inspect the codebase to identify the source file and line responsible. Render full detail with clickable links and evidence:
102
117
 
103
118
  ```
104
- Finding: <title>
105
- Slug: <slug>
106
- Scenario: <scenario>
107
- Type: <type> Severity: <severity> Triage: <triage_status>
119
+ Finding: <title> ([file](iamu/findings/<slug>.md))
120
+ Scenario: [<scenario>](iamu/scenarios/<scenario>.md)
121
+ Severity: <severity> · Type: <type> · Status: <triage_status>
108
122
 
109
- UI fact: <ui_fact>
110
- Consequence: <consequence>
123
+ Persona Quote: "<persona_reaction_or_consequence>"
124
+ UI Fact: <ui_fact>
125
+ Evidence: Step <N> at <url> (Screenshot: [view](iamu/.runs/<run>/screenshots/<NNN>.png))
126
+ Source: <file:line path in repository, e.g. src/components/HandoffModal.tsx:42>
111
127
 
112
128
  Description:
113
129
  <markdown body above ## Recommendation>
@@ -115,16 +131,38 @@ Description:
115
131
  Recommendation:
116
132
  <## Recommendation section, or "none">
117
133
 
118
- Linked run: iamu/.runs/<run>/report.md
134
+ Report: [report.md](iamu/.runs/<run>/report.md)
119
135
  ```
120
136
 
121
137
  If the finding references a run directory, mention the report path for context. If the user wants to see the screenshot, read from `iamu/.runs/<run>/screenshots/`.
122
138
 
123
139
  ### 4. Prompt for triage action
124
140
 
125
- Ask: "What should happen with this finding?"
126
-
127
- Every finding must land on a decision — never silently skip. The six options below cover the real workflow: two that chain into code changes, one that parks with context, two that close with rationale (an accepted trade-off, or never a problem at all), one that leaves it for later review. Match the user's intent to the closest option; do not shoe-horn.
141
+ Every finding must land on a decision — never silently skip. Match the user's intent to the closest option.
142
+
143
+ **Interactive Triage Selection:**
144
+ *Contextual Recommendation Rule:*
145
+ - If finding is clear, localized, and has a straightforward fix → mark Option 1 as `[Recommended]`.
146
+ - If finding requires architectural touch or redesign → mark Option 2 as `[Recommended]`.
147
+ - If finding is a known trade-off or walker error → mark Option 4 as `[Recommended]`.
148
+
149
+ - If your environment provides an interactive user-prompt tool (e.g. `ask_question`, `ask_followup_question`), invoke it:
150
+ - Question: "Triage Finding: '<finding title>'?"
151
+ - Options:
152
+ 1. "<[Recommended] if localized> Fix now (apply inline code fix & verify)"
153
+ 2. "<[Recommended] if structural> Design change needed (open issue / design doc)"
154
+ 3. "Defer (revisit in later milestone)"
155
+ 4. "Dismiss / Won't fix (record reason & walker guidance rule)"
156
+ - Otherwise (in CLI or text-only environments):
157
+
158
+ Triage Finding: '<finding title>'
159
+ 1. Fix now (apply inline code fix & verify)
160
+ 2. Design change needed (open issue / design doc)
161
+ 3. Defer (revisit in later milestone)
162
+ 4. Dismiss / Won't fix (record reason & walker guidance rule)
163
+
164
+ Press Enter to accept recommendation [1], enter 2-4, or type custom triage note:
165
+ (Treat empty Enter as Option 1)
128
166
 
129
167
  Record the decision with `iamu triage` — it sets `triage_status` and `triage_note` in `iamu/findings/<slug>.md`, and for a dismissal it also teaches the next walk:
130
168
 
@@ -49,86 +49,143 @@ Determine the mode based on `$ARGUMENTS` and user intent:
49
49
  7. Run `iamu validate --all`.
50
50
  8. Summarize: persona created in `iamu/personas/<slug>.md`. Prompt user: "You can now pair `<slug>` with a scenario draft via `iamu-new`, or propose situations for them via `iamu-propose`." Stop here for standalone persona requests.
51
51
 
52
- - **Scenario mode** (e.g. `iamu-new "checkout friction"`, or no `$ARGUMENTS`):
53
- Proceed through steps 2–7 below.
54
- Inspect `iamu/personas/` (`iamu list personas`) first. If personas already exist in the casting panel (e.g. seeded during `iamu-setup`), deliberately frame scenario seeds around those existing cast members to build longitudinal test history, rather than inventing new personas.
52
+ - **Fast-Path Scenario mode** (when intent, topic, or a handoff candidate from `iamu-propose` is provided, e.g. `iamu-new "checkout friction"`, `iamu-new "Maria Gomez shift handoff"`):
53
+ Do NOT drag the user through multiple question modals. Skip Step 2 entirely!
54
+ Jump directly to Step 3 and present the **Complete Scenario Spec-Sheet** (Situation + Bound Persona + Preconditions + Evaluation Checkpoint + Walker Brief) for **1-click / 1-key acceptance**.
55
+
56
+ - **Exploratory Scenario mode** (no arguments or broad exploration):
57
+ Proceed through Step 2 (Propose complete scenario bundles) and Step 3.
58
+ Inspect `iamu/personas/` (`iamu list personas`) first. If personas already exist in the casting panel (e.g. seeded during `iamu-setup`), deliberately frame scenario proposals around those existing cast members to build longitudinal test history, rather than inventing new personas.
55
59
  If the user gives a direction, ground it in the codebase: what capabilities exist in this area? What flows are built? This helps you propose scenarios that test what's actually there, not what's imagined.
56
60
 
57
- ### 2. Propose scenario seeds
61
+ ### 2. Propose Complete Scenario Bundles (Exploratory Mode)
58
62
 
59
- Propose 2–3 scenario seeds in a compact comparison table fitting the terminal viewport. If personas exist in `iamu/personas/`, explicitly indicate which existing persona pairs with each seed concept. Do not write full paragraphs or full scenarios until a direction is picked.
63
+ Present 2–3 scannable scenario proposals. Each proposal MUST bundle the situation narrative, bound persona (prioritizing existing cast members), human evaluation checkpoint, and entry surface:
60
64
 
61
65
  ```
62
- | # | Seed Concept | Persona / Actor | Type | Human Situation & Core Tension | What It Stress-Tests |
63
- |---|--------------|-----------------|------|--------------------------------|----------------------|
64
- | 1 | <Short title> | <existing slug or role> | Routine | <1-2 sentences on who is doing what> | <What this tests> |
65
- | 2 | <Short title> | <existing slug or role> | Edge case | <1-2 sentences on uncommon situation> | <What this tests> |
66
- | 3 | <Short title> | <existing slug or role> | Tension | <1-2 sentences on conflicting needs> | <What this tests> |
66
+ 1. <Title> (<Primary Capability>)
67
+ • Persona: <Persona Name> (<Role>) — Reused from cast / New candidate
68
+ • Tension: <1 concise sentence on the human or organizational tension>
69
+ • Evaluation Checkpoint: "<Concrete binary yes/partial/no question>"
70
+ • Entry Surface: `<entry_path>` (Target: `<target_url>`)
71
+
72
+ 2. <Alternative Title> (<Capability>)
73
+ • Persona: <Alternative Persona Name> (<Role>)
74
+ • Tension: <1 concise sentence>
75
+ • Evaluation Checkpoint: "<Concrete binary question>"
76
+ • Entry Surface: `<entry_path>`
67
77
  ```
68
78
 
69
- Ask the user: "Which seed should we develop (1–3), or suggest another angle?"
79
+ **Interactive Decision:**
80
+ - If your environment provides an interactive user-prompt tool (e.g. `ask_question`, `ask_followup_question`), invoke it:
81
+ - Question: "Scaffold this scenario for walkthrough?"
82
+ - Options:
83
+ 1. "[Recommended] Scaffold '<Bundle 1 Title>' as <Persona 1 Name>"
84
+ 2. "Switch persona: Walk as <Alternative Persona Name> (<Role>)"
85
+ 3. "Select alternative: '<Bundle 2 Title>' as <Persona 2 Name>"
86
+ 4. "Customize situation, checkpoint, or preconditions"
87
+ - Otherwise (in CLI or text-only environments):
88
+
89
+ Scaffold this scenario for walkthrough?
90
+ 1. [Recommended] Scaffold '<Bundle 1 Title>' as <Persona 1 Name>
91
+ 2. Switch persona: Walk as <Alternative Persona Name> (<Role>)
92
+ 3. Select alternative: '<Bundle 2 Title>' as <Persona 2 Name>
93
+ 4. Customize situation, checkpoint, or preconditions
70
94
 
71
- ### 3. Develop the situation
95
+ Press Enter to scaffold [1], select 2-3, or type adjustments:
96
+ (Treat empty Enter or return as Option 1)
72
97
 
73
- Once the user picks a direction, draft the full situation:
98
+ *Execution Flow:*
99
+ - **Selecting Option 1 (or hitting Enter):** Proceed IMMEDIATELY to Step 6 (Persist everything). Zero intermediate question modals.
100
+ - **Selecting Option 2:** Present the persona switcher (Step 4) then persist.
101
+ - **Selecting Option 3:** Swap primary bundle and prompt to persist.
102
+ - **Selecting Option 4 / typing adjustments:** Expand into Step 3 to refine details before persisting.
74
103
 
75
- - **Narrative** (3–5 sentences) — mundane specifics, not abstract test language. Time pressure, competing priorities, real constraints. Write it as a human story.
76
- - **Tension** (usually null; set only when two legitimate needs genuinely collide — e.g., speed vs. thoroughness, privacy vs. transparency)
77
- - **Situation roles** (2–4 people with stakes) — each person should see the situation differently. Not conflict for drama — realistic tension like: one person wants to move on, another wants to investigate.
78
- - **Complexity level**
104
+ ### 3. Develop the situation (Scenario Spec-Sheet)
79
105
 
80
- **Before finalizing**, ask the user: "What should this walkthrough focus on?" This is the research question — what they want to learn. Examples: "Can a new admin onboard without training?", "Does the checkout flow work under time pressure?", "Is the reporting workflow accessible to non-technical users?"
106
+ In Fast-Path mode or when customizing, present the complete scenario as a structured, scannable Spec-Sheet before creating anything. Every field shown here is written verbatim to disk on confirmation:
81
107
 
82
- From their answer, derive ONE concrete human test — a specific yes/partial/no checkpoint the evaluation step will score. Suggest it and let the user refine:
108
+ Do NOT use markdown blockquote syntax (`>`), which renders as stray `|` pipe characters in terminal frontends. Keep the narrative capped at 2–3 punchy sentences (problem-space only, zero UI terms).
83
109
 
84
- > Focus: "Can a new admin onboard without training?"
85
- > Human test: "Could the admin complete employee bulk-import without consulting documentation?"
110
+ ```
111
+ ### Scenario Spec-Sheet: <Outline Title>
86
112
 
87
- The user's focus frames the overall assessment after the walkthrough. The human test is a concrete checkpoint that feeds into it.
113
+ Situation & Stakes:
114
+ Narrative: <2–3 sentences problem-space only, zero UI terms>
115
+ Tension: <Colliding needs in X vs Y format or "None">
116
+ Evaluation Checkpoint: <Concrete binary yes/partial/no question scored at evaluation>
88
117
 
89
- Present the draft to the user as a structured, scannable block **before creating anything**:
118
+ Roles with Stakes:
119
+ • <Role 1>: <Stake>
120
+ • <Role 2>: <Stake>
90
121
 
91
- ```
92
- ### Situation Draft: <Name>
122
+ Execution Preconditions (resolved at iamu-run):
123
+ • Assumed State: <What records/data should exist, e.g. "Department with existing risk register containing open hazards">
124
+ • Squint Guidance: <How the walker should approximate if exact records are missing, e.g. "If no packaging hazard exists, select any physical safety hazard and proceed with delegation">
125
+ • Reachable Surface: <Entry route matched against iamu/testability.md, e.g. "/incidents/new">
93
126
 
94
- > **Narrative:** <3–5 sentences describing the human situation without mentioning UI>
95
- >
96
- > **Tension:** <legitimate colliding needs or "None">
97
- > **Focus Question:** <user's research question>
98
- > **Human Checkpoint:** <derived checkpoint question>
127
+ Persona & Brief:
128
+ Persona: <Existing slug from panel OR new candidate: Name (Role)>
129
+ Friction: <Diagnostic friction trigger and bounce risk>
130
+ Walker Brief:
131
+ "<First-person brief in persona voice (2–3 sentences). Describes what they intend to achieve before touching the product. Written verbatim to scenario markdown body.>"
99
132
 
100
- **Roles with Stakes:**
101
- - **<role>**: <stake>
102
- - **<role>**: <stake>
133
+ If the situation requires an un-mocked endpoint or missing data fixture to be walkable, offer to scaffold the missing MSW handler (e.g. in `src/mocks/handlers.ts`) or fixture file directly in the codebase before finalizing.
103
134
  ```
104
135
 
105
- User approves, refines ("make it more time-pressured"), or rejects.
136
+ **Interactive Draft Confirmation:**
137
+ - If your environment provides an interactive user-prompt tool, invoke it:
138
+ - Question: "Scaffold scenario '<Outline Title>'?"
139
+ - Options:
140
+ 1. "[Recommended] Scaffold scenario and prepare walkthrough"
141
+ 2. "Switch persona: Walk as <Alternative Persona> (<Role>)"
142
+ 3. "Adjust checkpoint, preconditions, or surface"
143
+ - Otherwise (in CLI or text-only environments):
144
+
145
+ Scaffold scenario '<Outline Title>'?
146
+ 1. [Recommended] Scaffold scenario and prepare walkthrough
147
+ 2. Switch persona: Walk as <Alternative Persona> (<Role>)
148
+ 3. Adjust checkpoint, preconditions, or surface
149
+
150
+ Press Enter to scaffold [1], select 2, or type adjustments:
151
+ (Treat empty Enter or return as Option 1)
152
+
153
+ *Selecting Option 1 or hitting Enter proceeds IMMEDIATELY to Step 6 (Persist everything).*
106
154
 
107
- ### 4. Pick or propose personas
155
+ ### 4. Pick or swap personas (on demand)
156
+
157
+ Triggered only when the user selects "Switch persona", when exploring standalone personas, or when no existing persona fits:
108
158
 
109
159
  **Check existing personas first:**
110
160
  Inspect `iamu/personas/` (`iamu list personas`). If an existing persona in the casting panel is a natural fit for this situation, propose them first to build longitudinal test history:
111
161
  `Reusable from panel: <slug> (<role>) — <why they fit this situation>`
112
162
 
113
- If no existing persona fits, or if testing an uncovered perspective is needed, propose 2–3 persona candidates in a compact table:
114
-
115
- - Different roles (the manager vs. the field worker vs. the auditor)
116
- - Different dispositions (the patient learner vs. the harried pragmatist)
117
- - Different contexts (first time vs. experienced, desktop vs. mobile, fluent vs. second-language)
163
+ If no existing persona fits, or if testing an uncovered perspective is needed, propose 2–3 persona candidates as numbered cards (do NOT use a wide table):
118
164
 
119
165
  ```
120
- | # | Name | Role | Why this persona tests something different |
121
- |---|------|------|-------------------------------------------|
122
- | 1 | ... | ... | ... |
123
- | 2 | ... | ... | ... |
124
- | 3 | ... | ... | ... |
166
+ 1. <Name> (<Role>)
167
+ • Friction & Biases: <Specific friction triggers, skepticism, and bounce risks>
168
+ • Why this tests something different: <Unique perspective or workflow divergence>
169
+
170
+ 2. <Name> (<Role>)
171
+ • Friction & Biases: <Specific friction triggers, skepticism, and bounce risks>
172
+ • Why this tests something different: <Unique perspective or workflow divergence>
125
173
  ```
126
174
 
127
- The user picks one (or more — each becomes a separate scenario). "New" to propose different candidates. "Skip" to save as draft without a persona.
175
+ **Interactive Persona Selection:**
176
+ - If your environment provides an interactive user-prompt tool, invoke it with the candidates:
177
+ - Question: "Which persona should walk this scenario?"
178
+ - Options:
179
+ 1. "[Recommended] Bind existing persona: <slug> (<role>)" (if one fits)
180
+ 2. "Create candidate: <Name> (<Role>)"
181
+ 3. "Leave as draft (no persona bound yet)"
182
+ - Otherwise, prompt: "Pick a persona (1–N), 'new' to propose candidates, or 'skip' to save as draft without a persona."
128
183
 
129
184
  ### 5. Classify into capabilities
130
185
 
131
- Situations carry ONE primary capability (product area grouping) and optional secondary capabilities (cross-cutting tags). Read existing capabilities from `iamu/capabilities/`.
186
+ Situations carry ONE primary capability (product area grouping) and optional secondary capabilities (cross-cutting tags). Read existing capabilities directly from `iamu/capabilities/` or `iamu/context.yml`.
187
+
188
+ Do NOT execute interactive bash commands (like `iamu list capabilities`) during conversational turns; resolve capabilities silently from workspace files.
132
189
 
133
190
  - **High confidence match** → assign silently, one line: `Capability: <slug> (auto)`
134
191
  - **Low confidence or new** → ask: "Create new capability `<slug>`?"
@@ -148,18 +205,14 @@ iamu new capability --name "Incident Reporting" --description "What staff can do
148
205
 
149
206
  **2. Outline** (the situation — problem-space, no UI references):
150
207
  ```bash
151
- iamu new outline --name "Busy shift handoff" --json
152
- ```
153
- After creation, use Edit to add fields to the frontmatter: `primary_capability`, `narrative`, `tension`, `human_tests`, `situation_roles`. The outline body stays empty.
154
-
155
- Example frontmatter to add via Edit:
156
- ```yaml
157
- primary_capability: incident-reporting
158
- narrative: "A shift leader needs to hand off a set of open incidents..."
159
- human_tests:
160
- - id: ht-1
161
- question: "Could the incoming leader act immediately without asking clarifying questions?"
208
+ iamu new outline --name "Busy shift handoff" \
209
+ --capability incident-reporting \
210
+ --tension "Incident details are fragmented across multiple logs while shift time expires" \
211
+ --narrative "A shift leader needs to hand off a set of open incidents to the incoming supervisor." \
212
+ --human-test "Could the incoming leader act immediately without asking clarifying questions?" \
213
+ --json
162
214
  ```
215
+ The `--capability`, `--tension`, `--narrative`, and repeatable `--human-test` flags populate outline frontmatter directly. The outline body stays empty. If specialized fields like `situation_roles` are needed, edit the generated frontmatter.
163
216
 
164
217
  **3. Persona** (if user picked a new persona to scaffold):
165
218
  ```bash
@@ -169,21 +222,25 @@ The `--role` and `--disposition` flags populate frontmatter directly. If `iamu/c
169
222
 
170
223
  **4. Scenario** (the binding):
171
224
  ```bash
172
- iamu new scenario --name "maria-gomez--busy-shift-handoff" --outline busy-shift-handoff --persona maria-gomez --json
225
+ iamu new scenario --name "maria-gomez--busy-shift-handoff" --outline busy-shift-handoff --persona maria-gomez [--entry /path/on/the/product] [--state-description "<Assumed state description>"] [--state-approximation "<Squint guidance for walker>"] --body "<First-person brief in persona voice (3–5 sentences)>" --json
173
226
  ```
174
227
  When the situation begins on a specific page (the persona follows a link from a video, an email, a search result), add `--entry /path/on/the/product` — the run starts there instead of the home page.
175
- `--outline` is required. `--persona` is optional (omit for drafts). Write the first-person brief as the markdown body — 3–5 sentences in the persona's voice.
228
+ `--outline` is required. `--persona` is optional (omit for drafts). Pass `--state-description` and `--state-approximation` if preconditions were defined in step 3 to populate the scenario's `state:` frontmatter automatically.
176
229
 
177
- For drafts (no persona): omit `--persona`, omit the brief body.
230
+ For drafts (no persona): omit `--persona`, omit `--body`.
178
231
 
179
232
  ### 7. Summarize
180
233
 
234
+ Present the created entities with clickable file links and exact run commands:
235
+
181
236
  ```
182
- Scenario: <scenario-slug>
183
- Situation: <situation name>
184
- Persona: <persona-name> (or "draft — no persona yet")
237
+ Created Scenario: [<scenario-slug>](iamu/scenarios/<scenario-slug>.md)
238
+ • Situation: [<outline-slug>](iamu/outlines/<outline-slug>.md)
239
+ • Persona: [<persona-slug>](iamu/personas/<persona-slug>.md) (or "draft — no persona bound yet")
240
+ • Capability: <primary_capability>
185
241
 
186
- Run it: iamu-run <scenario-slug>
242
+ Next step:
243
+ iamu-run <scenario-slug> # Run walkthrough as <persona-name>
187
244
  ```
188
245
 
189
246
  Run `iamu validate --all` to verify all entities before reporting done.
@@ -203,4 +260,4 @@ Run `iamu validate --all` to verify all entities before reporting done.
203
260
  - **Capability is quiet.** High-confidence matches fire silently.
204
261
  - **Slug references are load-bearing.** Write referenced entities before the entities that reference them.
205
262
  - **Validate before done.** Always run `iamu validate --all` after writing entities.
206
- - **Use CLI for scaffolding.** `iamu new <type>` creates valid frontmatter with UUIDs. Use Edit to add additional fields and body content after scaffolding.
263
+ - **Use CLI for scaffolding.** `iamu new <type>` creates valid frontmatter with UUIDs. Pass flags (`--role`, `--disposition`, `--capability`, `--tension`, `--human-test`, `--state-description`) directly instead of manual YAML editing.
@@ -33,15 +33,19 @@ If context is thin (few actors, sparse notes), say so upfront — "your context
33
33
 
34
34
  ## Steps
35
35
 
36
- ### 1. Load domain context
36
+ ### 1. Load domain context & testability boundaries
37
37
 
38
38
  Read `iamu/context.yml`. Extract and hold:
39
39
  - **Domain + industry** — what world does this product operate in?
40
40
  - **Actors** — real roles with real responsibilities. These are scenario and persona seed material.
41
41
  - **Governed_by** — regulations and standards (if applicable). These create structural tensions in regulated domains.
42
- - **Glossary** — domain vocabulary. Scenarios and personas must use these terms, not generic UI words.
43
42
  - **Notes body** — extended context, often containing workflow descriptions, pain points, organizational dynamics.
44
43
 
44
+ Read `iamu/testability.md` (if present) to enforce execution boundaries:
45
+ - **Reachable surfaces:** Ground candidates in reachable routes. Avoid proposing scenarios for product areas with no navigable surfaces.
46
+ - **Untestable boundaries:** Strictly avoid proposing scenarios in flows documented as untestable (e.g. un-mocked live payment gateways, SMS dispatch, third-party SSO).
47
+ - **Mocks & Fixtures:** Note which candidates require existing database seeds or mock handlers.
48
+
45
49
  ### 2. Load existing coverage
46
50
 
47
51
  Read existing entities to understand what's already been tested:
@@ -61,46 +65,75 @@ Four entry paths based on `$ARGUMENTS`:
61
65
  - **Open-ended** (e.g. `iamu-propose`, `iamu-propose "what's missing?"`) — analyze coverage gaps across both scenarios and persona diversity. Prioritize uncovered capabilities and actors without personas.
62
66
  - **Specific tension** (e.g. `iamu-propose "what happens when the safety coordinator disagrees with HR?"`) — use as seed but ground in context. Verify the tension is real (do these actors and dynamics exist in the domain?).
63
67
 
64
- ### 4. Present candidates (Comparison Table)
68
+ ### 4. Present candidates (Numbered Cards)
65
69
 
66
- Present candidates in a single, high-contrast **Markdown comparison table** fitting the terminal viewport. Do NOT dump long paragraphs, full narratives, or regulatory citations upfront.
70
+ Present candidates as scannable numbered cards. Do NOT use multi-column markdown tables with full prose sentences (they wrap awkwardly and break borders in terminal viewports). Do NOT dump long paragraphs, full narratives, or regulatory citations upfront.
67
71
 
68
72
  #### A. When proposing Scenarios:
69
73
 
70
- Lead with a one-line summary of existing coverage, then render the table:
71
-
72
- ```
73
- Existing coverage: <N> scenarios (<list slugs>). Uncovered areas: <gaps>.
74
-
75
- | # | Situation | Role | Core Domain Tension | What It Stress-Tests |
76
- |---|-----------|------|---------------------|----------------------|
77
- | 1 | <Short situation name> | <Actor from context> | <1-line human/domain tension> | <What this reveals about the product> |
78
- | 2 | ... | ... | ... | ... |
79
- | 3 | ... | ... | ... | ... |
74
+ Lead with existing coverage using clickable links, then render the candidates:
80
75
 
81
- Pick a number (1–3) to draft via iamu-new, or refine (e.g. "make #2 more time-pressured", "none of these — explore <area>").
82
76
  ```
77
+ Existing coverage: <N> scenarios ([<slug1>](iamu/scenarios/<slug1>.md), ...). Uncovered areas: <gaps>.
78
+
79
+ 1. <Short situation name> (<Actor from context>)
80
+ • Tension: <1-line human/domain tension>
81
+ • Stress-tests: <What this reveals about the product>
82
+
83
+ 2. <Short situation name> (<Actor from context>)
84
+ • Tension: <1-line human/domain tension>
85
+ • Stress-tests: <What this reveals about the product>
86
+
87
+ 3. <Short situation name> (<Actor from context>)
88
+ • Tension: <1-line human/domain tension>
89
+ • Stress-tests: <What this reveals about the product>
90
+
91
+ **Interactive Candidate Selection:**
92
+ - If your environment provides an interactive user-prompt tool (e.g. `ask_question`, `ask_followup_question`), invoke it:
93
+ - Question: "Which scenario candidate would you like to scaffold?"
94
+ - Options:
95
+ 1. "[Recommended] Scaffold '<Candidate 1 Title>' (<Actor>)"
96
+ 2. "Scaffold '<Candidate 2 Title>' (<Actor>)"
97
+ 3. "Scaffold '<Candidate 3 Title>' (<Actor>)"
98
+ - Otherwise (in CLI or text-only environments):
99
+ Press Enter to scaffold [1], select 2-3, or describe adjustments:
100
+ (Treat empty Enter as Option 1)
83
101
 
84
102
  #### B. When proposing Personas:
85
103
 
86
- Lead with existing persona coverage and uncovered roles from `context.yml`:
104
+ Lead with existing persona coverage using clickable links and uncovered roles from `context.yml`:
87
105
 
88
106
  ```
89
- Existing personas: <list slugs>. Uncovered roles from context.yml: <roles>.
107
+ Existing personas: [<slug1>](iamu/personas/<slug1>.md), ... Uncovered roles from context.yml: <roles>.
108
+
109
+ 1. <Name> (<Actor role>)
110
+ • Friction & Biases: <Specific friction triggers, skepticism, and bounce risks>
111
+ • Key Expectations & Vocabulary: <Domain terms and spec requirements>
90
112
 
91
- | # | Persona Candidate | Domain Role | Diagnostic Friction & Biases | Key Expectations & Vocabulary |
92
- |---|-------------------|-------------|------------------------------|-------------------------------|
93
- | 1 | <Name> | <Actor role> | <Specific friction triggers, skepticism, and bounce risks> | <Domain terms and spec requirements> |
94
- | 2 | ... | ... | ... | ... |
95
- | 3 | ... | ... | ... | ... |
113
+ 2. <Name> (<Actor role>)
114
+ • Friction & Biases: <Specific friction triggers, skepticism, and bounce risks>
115
+ • Key Expectations & Vocabulary: <Domain terms and spec requirements>
96
116
 
97
- Pick a number (1–3) to draft via iamu-new (as a standalone persona or with a scenario), or refine.
117
+ 3. <Name> (<Actor role>)
118
+ • Friction & Biases: <Specific friction triggers, skepticism, and bounce risks>
119
+ • Key Expectations & Vocabulary: <Domain terms and spec requirements>
98
120
  ```
99
121
 
122
+ **Interactive Persona Selection:**
123
+ - If your environment provides an interactive user-prompt tool (e.g. `ask_question`, `ask_followup_question`), invoke it:
124
+ - Question: "Which persona would you like to add to the casting panel?"
125
+ - Options:
126
+ 1. "[Recommended] Add <Name 1> (<Actor role>)"
127
+ 2. "Add <Name 2> (<Actor role>)"
128
+ 3. "Add <Name 3> (<Actor role>)"
129
+ - Otherwise (in CLI or text-only environments):
130
+ Press Enter to add [1], select 2-3, or describe adjustments:
131
+ (Treat empty Enter as Option 1)
132
+
100
133
  Ground rules for generation:
101
134
 
102
135
  - **Start from the actor's week, not the feature list.** What does this person actually do on a Tuesday? What goes wrong? What requires judgment?
103
- - **Use domain vocabulary from the glossary.** If the glossary says "skyddsombud" not "safety representative," use "skyddsombud."
136
+ - **Use authentic domain vocabulary.** Speak in the language of the domain and the product UI (e.g., "skyddsombud" rather than generic "safety representative"), avoiding abstract test jargon.
104
137
  - **Prefer mundane frequency over dramatic edge cases.** The scenario that happens every week reveals more than the one that happens once a year.
105
138
  - **Structural tensions come from the domain, not from product limitations.** A real tension: "the regulation requires immediate reporting but the coordinator handles 3 sites." A fake tension: "the CSV upload has a 50-row limit."
106
139
  - **Never mention the product, its UI, its features, or its limitations.** The scenario exists in the domain. The product encounter happens during the walkthrough.
@@ -110,9 +143,9 @@ Ground rules for generation:
110
143
 
111
144
  ### 5. Selection and Handoff
112
145
 
113
- - **User picks a scenario candidate** → hand off to `iamu-new` with the selected candidate's situation as the intent seed. Provide the full context (actor, regulatory surface, why-interesting) so `iamu-new` can ground its outline generation.
114
- - **User picks a persona candidate** → hand off to `iamu-new` with candidate profile (name, role, disposition, vocabulary, friction triggers). `iamu-new` can scaffold the persona standalone into `iamu/personas/` or pair them with a situation draft.
115
- - **User refines** → regenerate or adjust the comparison table, re-applying the philosophy tests.
146
+ - **User picks a scenario candidate (e.g. "1" or Enter)** → Immediately invoke `iamu-new` in **Fast-Path Scenario Mode** passing the selected candidate title, actor, tension, and evaluation checkpoint as structured arguments. Do NOT allow `iamu-new` to restart seed brainstorming. It must present the single Scenario Spec-Sheet directly for instant 1-click persistence.
147
+ - **User picks a persona candidate** → Immediately invoke `iamu-new` in **Standalone Persona Mode** with the candidate's name, role, disposition, and friction triggers to scaffold directly into `iamu/personas/<slug>.md`.
148
+ - **User refines** → regenerate candidates applying the requested adjustments.
116
149
  - **User rejects all** → ask what domain area or actor they want to explore. Loop back to step 4.
117
150
 
118
151
  ## Guidelines