@iamu-dev/iamu 0.2.0-beta.1 → 0.2.0-beta.11
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.
- package/dist/bin.js +2817 -618
- package/dist/commands/browse.d.ts +14 -0
- package/dist/commands/complete.d.ts +1 -0
- package/dist/commands/credentials.d.ts +1 -1
- package/dist/commands/doctor.d.ts +11 -2
- package/dist/commands/evaluate.d.ts +2 -0
- package/dist/commands/explore-crawl.d.ts +67 -0
- package/dist/commands/explore.d.ts +52 -0
- package/dist/commands/init.d.ts +7 -0
- package/dist/commands/instructions-walk.d.ts +11 -1
- package/dist/commands/live-run-client.d.ts +127 -0
- package/dist/commands/match.d.ts +1 -0
- package/dist/commands/new-entity.d.ts +13 -0
- package/dist/commands/start-run.d.ts +7 -2
- package/dist/commands/step.d.ts +1 -0
- package/dist/eval/gemini-eval-cli.d.ts +10 -0
- package/dist/eval/gemini-eval-cli.js +976 -0
- package/dist/eval/gemini-walker.d.ts +46 -0
- package/dist/eval/walkthrough-evaluator.d.ts +61 -0
- package/dist/index.js +3003 -804
- package/dist/templates/prompts/walk.md +18 -4
- package/dist/templates/skills/iamu-findings.md +70 -32
- package/dist/templates/skills/iamu-new.md +123 -66
- package/dist/templates/skills/iamu-propose.md +60 -27
- package/dist/templates/skills/iamu-run.md +193 -61
- package/dist/templates/skills/iamu-setup.md +269 -125
- package/dist/templates/skills/iamu-status.md +21 -14
- package/package.json +7 -4
|
@@ -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.**
|
|
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
|
|
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
|
|
|
@@ -82,6 +80,8 @@ Follow the persona's motivation. Spend time on what matters to them. When you ha
|
|
|
82
80
|
|
|
83
81
|
Browser failures — blank page, stuck spinner, cryptic error, 404 — are signal, not noise. Screenshot the failure state, record it as a finding, move on. Do not retry silently or open developer tools: the persona cannot.
|
|
84
82
|
|
|
83
|
+
If a step command fails with `The user stopped this run from the live viewer. End the walk now.`, do not retry or continue: stop the walkthrough immediately and proceed to Synthesis with what you observed so far.
|
|
84
|
+
|
|
85
85
|
## Tooling limitations vs product bugs
|
|
86
86
|
|
|
87
87
|
Your browser tooling has limitations that can look like product bugs. Before recording a finding, ask: "Is this a real product issue, or is my tooling failing?"
|
|
@@ -100,6 +100,20 @@ Your browser tooling has limitations that can look like product bugs. Before rec
|
|
|
100
100
|
|
|
101
101
|
Do NOT silently suppress findings you suspect are tooling issues. Record them with the caveat — the human triaging can verify.
|
|
102
102
|
|
|
103
|
+
## Expected state vs product bugs (Empty state & unseeded data)
|
|
104
|
+
|
|
105
|
+
When an environment is unseeded or test records are missing:
|
|
106
|
+
- 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.
|
|
107
|
+
- 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.
|
|
108
|
+
- 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.
|
|
109
|
+
|
|
110
|
+
## Semantic squinting (Adapting to environmental mismatch)
|
|
111
|
+
|
|
112
|
+
Your prompt may include an approximation strategy (e.g. "If Malmö is missing, choose Göteborg").
|
|
113
|
+
- **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.
|
|
114
|
+
- **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.
|
|
115
|
+
- **Log the approximation:** In your step note (`note`), state clearly that you chose the closest alternative according to your instructions.
|
|
116
|
+
|
|
103
117
|
## Portal-rendered UI
|
|
104
118
|
|
|
105
119
|
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
|
|
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
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
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
|
|
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
|
-
|
|
106
|
-
|
|
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
|
-
|
|
110
|
-
|
|
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
|
-
|
|
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
|
-
|
|
126
|
-
|
|
127
|
-
|
|
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"`,
|
|
53
|
-
|
|
54
|
-
|
|
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
|
|
61
|
+
### 2. Propose Complete Scenario Bundles (Exploratory Mode)
|
|
58
62
|
|
|
59
|
-
|
|
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
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
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
|
-
|
|
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
|
-
|
|
95
|
+
Press Enter to scaffold [1], select 2-3, or type adjustments:
|
|
96
|
+
(Treat empty Enter or return as Option 1)
|
|
72
97
|
|
|
73
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
85
|
-
|
|
110
|
+
```
|
|
111
|
+
### Scenario Spec-Sheet: <Outline Title>
|
|
86
112
|
|
|
87
|
-
|
|
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
|
-
|
|
118
|
+
Roles with Stakes:
|
|
119
|
+
• <Role 1>: <Stake>
|
|
120
|
+
• <Role 2>: <Stake>
|
|
90
121
|
|
|
91
|
-
|
|
92
|
-
|
|
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
|
-
|
|
95
|
-
>
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
|
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
|
|
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
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
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
|
-
|
|
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"
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
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).
|
|
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
|
|
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: <
|
|
184
|
-
Persona: <persona-
|
|
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
|
-
|
|
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.
|
|
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 (
|
|
68
|
+
### 4. Present candidates (Numbered Cards)
|
|
65
69
|
|
|
66
|
-
Present candidates
|
|
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
|
|
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: <
|
|
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
|
-
|
|
92
|
-
|
|
93
|
-
|
|
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
|
-
|
|
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
|
|
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** →
|
|
114
|
-
- **User picks a persona candidate** →
|
|
115
|
-
- **User refines** → regenerate
|
|
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
|