@iamu-dev/iamu 0.2.0-beta.11 → 0.2.0-beta.13
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 +330 -149
- package/dist/commands/evaluate.d.ts +5 -3
- package/dist/commands/match.d.ts +6 -4
- package/dist/commands/new-finding.d.ts +6 -0
- package/dist/commands/summary.d.ts +14 -0
- package/dist/index.js +326 -145
- package/dist/templates/prompts/walk.md +32 -34
- package/dist/templates/skills/iamu-findings.md +13 -28
- package/dist/templates/skills/iamu-run.md +56 -76
- package/package.json +1 -1
|
@@ -131,51 +131,49 @@ Your walking prompt has an `## Access` section saying how to become this persona
|
|
|
131
131
|
|
|
132
132
|
## Recording
|
|
133
133
|
|
|
134
|
-
**Steps:**
|
|
135
|
-
|
|
136
|
-
Path: `iamu/.runs/<run-id>/steps/<NNN>.json` (zero-padded, e.g., `001.json`, `002.json`)
|
|
137
|
-
|
|
138
|
-
```json
|
|
139
|
-
{
|
|
140
|
-
"step_number": 1,
|
|
141
|
-
"timestamp": "2026-04-27T10:00:00Z",
|
|
142
|
-
"action": "Opened dashboard",
|
|
143
|
-
"note": "First thing I see is...",
|
|
144
|
-
"screenshot": "screenshots/step-1.png",
|
|
145
|
-
"url": "https://app.example.com/dashboard",
|
|
146
|
-
"surface": "dashboard overview"
|
|
147
|
-
}
|
|
148
|
-
```
|
|
149
|
-
|
|
150
|
-
`url` is the page you are on when the step ends — copy it from your driving surface (`iamu browse` prints it after every action), never reconstruct it. Record it on every step; it is how findings are grouped by page. Only a native app with no URL leaves it out.
|
|
134
|
+
**Steps:** Record each step atomically via the CLI — never hand-craft raw JSON step files with custom scripts or host Write tools:
|
|
151
135
|
|
|
152
|
-
|
|
136
|
+
- For `iamu browse`:
|
|
137
|
+
```bash
|
|
138
|
+
iamu browse step --run <run-id> --action "<action>" --note "<first-person monologue>" <command> [args...]
|
|
139
|
+
```
|
|
140
|
+
- For other surfaces:
|
|
141
|
+
```bash
|
|
142
|
+
iamu step --run <run-id> --action "<action>" --note "<first-person monologue>" [--shot <screenshot-path>] [--url <url>]
|
|
143
|
+
```
|
|
153
144
|
|
|
154
|
-
`
|
|
145
|
+
`action` is what you did (e.g. "Clicked Checkout button").
|
|
146
|
+
`note` is your internal first-person persona reaction in character.
|
|
147
|
+
The CLI automatically handles sequential numbering, timestamps, screenshot capture/linking, and live event streaming.
|
|
155
148
|
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
**Findings:** Always scaffold with the CLI — never create a finding file by hand, never invent an id:
|
|
149
|
+
**Findings:** Always scaffold with the CLI — never create finding files by hand or call host Edit/Write tools:
|
|
159
150
|
|
|
160
151
|
```bash
|
|
161
|
-
iamu new-finding --scenario <slug> --run <run-id> --title "Short title" --type hinders --severity major --ui-fact "What the UI showed" --consequence "Impact on persona" --task-impact impairs --confidence high --json
|
|
152
|
+
iamu new-finding --scenario <slug> --run <run-id> --title "Short title" --type hinders --severity major --ui-fact "What the UI showed" --consequence "Impact on persona" --task-impact impairs --confidence high --description "Detailed markdown description of the issue" --recommendation "Concrete fix proposal" --json
|
|
162
153
|
```
|
|
163
154
|
|
|
164
|
-
`--type
|
|
165
|
-
|
|
166
|
-
|
|
155
|
+
- `--type`: `helps | hinders | missing | irrelevant | incorrect`
|
|
156
|
+
- `--severity`: `critical | major | minor | observation`
|
|
157
|
+
- `--task-impact`: `blocks | impairs | slows | neutral | accelerates | enables`
|
|
158
|
+
- `--confidence`: `high | medium | low`
|
|
159
|
+
- `--description`: markdown body describing what happened and why
|
|
160
|
+
- `--recommendation`: concrete suggestion for how to improve or fix the issue
|
|
167
161
|
|
|
168
|
-
|
|
169
|
-
- `--confidence` — how sure you are this is real for this persona: `high` (you saw it on screen, clearly), `medium` (you saw it, but the persona might read it differently), `low` (it may be your tooling — say so in `consequence`). Then use the Edit tool to add the description and a `## Recommendation` section below the frontmatter. Leave `triage_status` alone; triage is not the walker's job.
|
|
162
|
+
Leave `triage_status` alone; triage is not the walker's job.
|
|
170
163
|
|
|
171
|
-
**Screenshots:**
|
|
164
|
+
**Screenshots:** Screenshots are captured automatically by `iamu browse step`. If driving manually, save to `iamu/.runs/<run-id>/screenshots/step-<N>.png` before recording each step. Screenshots are optional — if the browser tool disconnects or screenshots fail, use accessibility snapshots instead and continue walking.
|
|
172
165
|
|
|
173
|
-
|
|
166
|
+
**Execution rule:** Execute everything via CLI commands in the shell. Never invoke host Edit or Write tools on files in the workspace.
|
|
174
167
|
|
|
175
168
|
## Synthesis
|
|
176
169
|
|
|
177
|
-
After walking,
|
|
178
|
-
|
|
179
|
-
|
|
170
|
+
After walking, record your synthesis using the CLI:
|
|
171
|
+
|
|
172
|
+
```bash
|
|
173
|
+
iamu summary <run-id> --worked "What worked well 1" --worked "What worked well 2" --question "Open question 1"
|
|
174
|
+
```
|
|
175
|
+
|
|
176
|
+
- `--worked` — Things the system did well for this persona. Important to preserve.
|
|
177
|
+
- `--question` — Questions that arose that need discussion.
|
|
180
178
|
|
|
181
|
-
Then return your summary
|
|
179
|
+
Then return your final summary to the orchestrating agent so it can run `iamu complete` and the evaluation stage.
|
|
@@ -67,27 +67,22 @@ 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 with an executive tally header, followed by a severity-sorted list per
|
|
70
|
+
Group by `scenario` field and render with an executive tally header, followed by a compact, severity-sorted 1-line list per finding (CRITICAL → MAJOR → MINOR → OBS; hinders and missing first, helps last):
|
|
71
71
|
|
|
72
72
|
```
|
|
73
73
|
Findings Tally: <N> Open (<C> Critical · <M> Major · <m> Minor) across <S> Scenarios
|
|
74
74
|
Awaiting verification: <K> addressed findings pending re-run
|
|
75
75
|
|
|
76
76
|
▼ [<scenario>](iamu/scenarios/<scenario>.md) (4 findings)
|
|
77
|
-
1. [CRITICAL · hinders] Handoff list is cluttered (
|
|
78
|
-
|
|
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
|
|
77
|
+
1. [CRITICAL · hinders] Handoff list is cluttered (Step <N>)
|
|
78
|
+
2. [MAJOR · missing] No visible confirmation after shift submit (Step <N>)
|
|
86
79
|
```
|
|
87
80
|
|
|
81
|
+
**ANTI-BLOAT DIRECTIVE:** Do NOT dump persona quotes, evidence URLs, or recommendations into the overview tally. Keep it strictly 1 line per finding so the user can scan it in 3 seconds.
|
|
82
|
+
|
|
88
83
|
Ask the user how they would like to triage:
|
|
89
84
|
|
|
90
|
-
- **"walk through them"** → iterate through all open findings one-by-one in order with
|
|
85
|
+
- **"walk through them"** → iterate through all open findings one-by-one in order with compact card (`[Fix now] [Skip / Dismiss] [Discuss] [Next]`).
|
|
91
86
|
- **"all critical"** → iterate through all critical findings in order.
|
|
92
87
|
- **Scenario group name** (e.g. "group 1") → iterate through that scenario's findings.
|
|
93
88
|
- **Single number or slug** → single finding (skip to step 3).
|
|
@@ -113,27 +108,17 @@ Press Enter to walk through all [1], select 2-3, or enter a finding number/slug:
|
|
|
113
108
|
|
|
114
109
|
### 3. Direct triage: review one finding
|
|
115
110
|
|
|
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
|
|
111
|
+
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 a compact, 4-line triage card:
|
|
117
112
|
|
|
118
113
|
```
|
|
119
|
-
Finding: <title> ([file](iamu/findings/<slug>.md))
|
|
120
|
-
|
|
121
|
-
Severity: <severity> · Type: <type> · Status: <triage_status>
|
|
122
|
-
|
|
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))
|
|
114
|
+
Finding: [<SEVERITY> · <type>] <title> ([file](iamu/findings/<slug>.md))
|
|
115
|
+
Friction: <Persona Name>: "<1-sentence reaction or consequence quote>"
|
|
126
116
|
Source: <file:line path in repository, e.g. src/components/HandoffModal.tsx:42>
|
|
127
|
-
|
|
128
|
-
Description:
|
|
129
|
-
<markdown body above ## Recommendation>
|
|
130
|
-
|
|
131
|
-
Recommendation:
|
|
132
|
-
<## Recommendation section, or "none">
|
|
133
|
-
|
|
134
|
-
Report: [report.md](iamu/.runs/<run>/report.md)
|
|
117
|
+
Proposal: <1-sentence concrete fix recommendation>
|
|
135
118
|
```
|
|
136
119
|
|
|
120
|
+
Do NOT dump raw markdown bodies, multi-paragraph descriptions, or file link lists. Keep the triage card under 5 lines so the decision prompt is immediately visible without scrolling.
|
|
121
|
+
|
|
137
122
|
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/`.
|
|
138
123
|
|
|
139
124
|
### 4. Prompt for triage action
|
|
@@ -177,7 +162,7 @@ triage_status: addressed
|
|
|
177
162
|
triage_note: "Made handoff notes optional on /sv/handoff; verified on screen."
|
|
178
163
|
```
|
|
179
164
|
|
|
180
|
-
- **Fix now** → the change is small, one-or-two files, no architectural decision needed (label, field made optional, filter added, typo). Make the edit, verify it loads (if a dev server is running, open the affected screen and check), then
|
|
165
|
+
- **Fix now** → the change is small, one-or-two files, no architectural decision needed (label, field made optional, filter added, typo). Make the edit, verify it loads (if a dev server is running, open the affected screen and check), then record: `iamu triage <slug> --status addressed --note "<one-line change summary>"`. Do not close a finding as addressed before the change lands and is inspected. Tell the user the fix now awaits a re-run: only a later walkthrough of the scenario turns it verified.
|
|
181
166
|
|
|
182
167
|
- **Design change needed** → the change requires design thinking (restructuring a flow, new capability, API contract touch, multiple files). Do NOT fix inline. Use the project's own change process if it has one — check the agent docs and the repo for it (an `openspec/` directory and its change skills, an ADR or RFC folder, an issue tracker the docs name) and start the change there with the finding's persona + scenario context pre-filled. Only if the project has none, draft a short design doc. Then leave the finding `open` until the change ships. Attach the change reference in `triage_note`: `"Design change: <reference>. Re-triage when the change ships."`.
|
|
183
168
|
|
|
@@ -229,7 +229,7 @@ The result's `walker_prompt` is the walker's entire prompt. Pass it verbatim —
|
|
|
229
229
|
|
|
230
230
|
**CRITICAL: Dispatch the walker as an isolated subagent.** Spawn a fresh subagent using your host editor's subagent mechanism (e.g. `Agent(...)` in Claude Code, `invoke_subagent` in Antigravity, or host-native subagent launcher). The subagent gets ONLY the walking prompt (`walker_prompt`) — no prior conversation history.
|
|
231
231
|
|
|
232
|
-
A fresh subagent is NOT blind by default. On most hosts it still loads the project's agent instructions and can read files in the repo, so it may know the domain model, the route table, and why a screen was built the way it was — none of which the persona knows. The methodology's "Stay outside the product" rule is what keeps it honest; it is part of `walker_prompt` — never remove or soften it. If the host lets you restrict a subagent's tools, give the walker only the driving surface
|
|
232
|
+
A fresh subagent is NOT blind by default. On most hosts it still loads the project's agent instructions and can read files in the repo, so it may know the domain model, the route table, and why a screen was built the way it was — none of which the persona knows. The methodology's "Stay outside the product" rule is what keeps it honest; it is part of `walker_prompt` — never remove or soften it. If the host lets you restrict a subagent's tools, give the walker only the driving surface and a shell for `iamu` commands. The walker never needs direct host file-editing tools: all steps, findings, and summaries are recorded atomically via CLI commands.
|
|
233
233
|
|
|
234
234
|
**Model tiering & subagent dispatch:**
|
|
235
235
|
- **Walker (Browser Navigation):** High turn count, mechanical tool-use. Use the **fast** model tier (`flash` or `haiku`) by default to cut walk time by ~60% and conserve session quota.
|
|
@@ -291,15 +291,13 @@ Step files live at `iamu/.runs/<run-id>/steps/<NNN>.json`. The CLI manages monot
|
|
|
291
291
|
|
|
292
292
|
**Recording findings:**
|
|
293
293
|
|
|
294
|
-
Use the CLI to create findings with valid frontmatter, UUID, and
|
|
294
|
+
Use the CLI to create findings with valid frontmatter, UUID, slug, description, and recommendation in one atomic call:
|
|
295
295
|
|
|
296
296
|
```bash
|
|
297
|
-
iamu new-finding --scenario <slug> --run <run-id> --title "Short title" --type hinders --severity major --ui-fact "What the UI showed" --consequence "Impact on persona" --task-impact impairs --confidence high --json
|
|
297
|
+
iamu new-finding --scenario <slug> --run <run-id> --title "Short title" --type hinders --severity major --ui-fact "What the UI showed" --consequence "Impact on persona" --task-impact impairs --confidence high --description "Detailed markdown description" --recommendation "Concrete fix proposal" --json
|
|
298
298
|
```
|
|
299
299
|
|
|
300
|
-
This generates a valid UUID, derives the slug from the title, and writes
|
|
301
|
-
|
|
302
|
-
After the CLI scaffolds the file, edit the file to add the finding body (description + recommendation) below the frontmatter.
|
|
300
|
+
This generates a valid UUID, derives the slug from the title, and writes the complete finding file to `iamu/findings/<slug>.md`. Returns `{ "slug": "...", "path": "...", "id": "..." }`. Never invoke host Edit or Write tools.
|
|
303
301
|
|
|
304
302
|
Valid `--type` values: `helps`, `hinders`, `missing`, `irrelevant`, `incorrect`.
|
|
305
303
|
Valid `--severity` values: `critical`, `major`, `minor`, `observation`.
|
|
@@ -310,6 +308,12 @@ Findings never name a human test: the walker does not see them. The judge links
|
|
|
310
308
|
|
|
311
309
|
**DEPTH GATE:** Both `--ui-fact` and `--consequence` should be provided. If you cannot articulate both, record as a step note instead — do not create a finding file.
|
|
312
310
|
|
|
311
|
+
**Closing Synthesis:**
|
|
312
|
+
Before finishing the walk, record persona synthesis using `iamu summary`:
|
|
313
|
+
```bash
|
|
314
|
+
iamu summary <run-id> --worked "What worked well 1" --worked "What worked well 2" --question "Open question 1"
|
|
315
|
+
```
|
|
316
|
+
|
|
313
317
|
**Post-walk pipeline (MANDATORY — do NOT skip any step):**
|
|
314
318
|
|
|
315
319
|
After the walker returns, you MUST complete ALL of the following before presenting findings to the user. Do NOT present findings early. Do NOT ask the user anything. Execute steps A→B→C→D→E in order.
|
|
@@ -328,10 +332,11 @@ This reads all steps, findings, and entity files, assembles `canonical.json`, ge
|
|
|
328
332
|
iamu match <run-id> --json
|
|
329
333
|
```
|
|
330
334
|
|
|
331
|
-
If `needed` is `false` (no earlier findings for this scenario, or none this run), skip to C. Otherwise, read the prompt from `iamu/.runs/<run-id>/match_prompt.md` directly and dispatch a matcher subagent with it as its only context (use the **thorough** model tier, e.g. `Model="pro"` in Antigravity, to accurately evaluate semantic equivalence).
|
|
335
|
+
If `needed` is `false` (no earlier findings for this scenario, or none this run), skip to C. Otherwise, read the prompt from `iamu/.runs/<run-id>/match_prompt.md` directly and dispatch a matcher subagent with it as its only context (use the **thorough** model tier, e.g. `Model="pro"` in Antigravity, to accurately evaluate semantic equivalence). Record its JSON answer via `--data` (or `--file`):
|
|
332
336
|
|
|
333
337
|
```bash
|
|
334
|
-
iamu match-record <run-id> --
|
|
338
|
+
iamu match-record <run-id> --data '<matches.json>'
|
|
339
|
+
# or: iamu match-record <run-id> --file <matches.json>
|
|
335
340
|
```
|
|
336
341
|
|
|
337
342
|
This links recurrences to their earlier canonical finding, marks earlier findings the run's steps show fixed (only with cited steps), and re-derives the delta and report. If the matcher's output is rejected, show the error to the matcher once and retry; if it fails again, continue without it — the exact-text delta from A stands.
|
|
@@ -342,10 +347,11 @@ This links recurrences to their earlier canonical finding, marks earlier finding
|
|
|
342
347
|
iamu evaluate <run-id> --json
|
|
343
348
|
```
|
|
344
349
|
|
|
345
|
-
Read the evaluation prompt from `iamu/.runs/<run-id>/judge_prompt.md` directly. Dispatch the evaluator as a subagent with that prompt (use the **thorough** model tier, e.g. `Model="pro"` in Antigravity, to prevent severity inflation). After the evaluator returns verdicts, record them locally with `--no-push
|
|
350
|
+
Read the evaluation prompt from `iamu/.runs/<run-id>/judge_prompt.md` directly. Dispatch the evaluator as a subagent with that prompt (use the **thorough** model tier, e.g. `Model="pro"` in Antigravity, to prevent severity inflation). After the evaluator returns verdicts, record them locally with `--no-push` via `--data` (or `--file`):
|
|
346
351
|
|
|
347
352
|
```bash
|
|
348
|
-
iamu evaluate-record <run-id> --
|
|
353
|
+
iamu evaluate-record <run-id> --data '<verdicts.json>' --no-prompt --no-push
|
|
354
|
+
# or: iamu evaluate-record <run-id> --file <verdicts.json> --no-prompt --no-push
|
|
349
355
|
```
|
|
350
356
|
|
|
351
357
|
This links findings to human tests (`human_test_id`) and updates the report with judge verdicts.
|
|
@@ -380,59 +386,28 @@ The `walker_prompt` from `iamu instructions walk` is the source of truth and con
|
|
|
380
386
|
|
|
381
387
|
### 5. Present assessment — stay in the conversation
|
|
382
388
|
|
|
383
|
-
Render results **inline**
|
|
384
|
-
|
|
385
|
-
1. **Executive Summary Banner & Focus Checkpoint**
|
|
386
|
-
|
|
387
|
-
Read the outline's `human_tests[0].question` and answer it directly. Use the evaluation verdict if available:
|
|
388
|
-
|
|
389
|
-
```
|
|
390
|
-
Walkthrough: [<scenario-slug>](iamu/scenarios/<scenario-slug>.md) ([<persona>](iamu/personas/<persona>.md))
|
|
391
|
-
Verdict: <FAIL / PARTIAL / PASS> · <N> Blockers (Critical) · <M> Friction points (Major/Minor) · <K> Helpers (Steps: <N>)
|
|
392
|
-
Focus Checkpoint: "<human_tests[0].question>" → <No / Partial / Yes>: <1-2 sentence direct answer explaining why>
|
|
393
|
-
```
|
|
394
|
-
|
|
395
|
-
2. **Progress since last run** (only when canonical.json contains a `verification` section). Present the delta:
|
|
396
|
-
|
|
397
|
-
```
|
|
398
|
-
Since this scenario's last run:
|
|
399
|
-
✓ 1 fixed, re-checked (handoff note saves — step 6)
|
|
400
|
-
✗ 1 persists (timeout warning)
|
|
401
|
-
○ 2 not seen this run (handoff list filtering, submit confirmation)
|
|
402
|
-
+ 1 new since that run (date picker locale)
|
|
403
|
-
```
|
|
404
|
-
|
|
405
|
-
`resolved` means the matcher saw this run's steps do the thing the finding said failed — say which step. `not_observed` means only that this walk did not record the finding again. Never present it as fixed: the walker may have stopped before that screen or taken another route. Say which ones were not seen and, if the walk plainly never reached the screen they live on, say that too.
|
|
406
|
-
|
|
407
|
-
3. **Findings** — severity-first (CRITICAL → MAJOR → MINOR), grouped by type (hinders and missing first, helps at the bottom). For each finding, include the **persona reaction**, **evidence citation**, and **clickable link**:
|
|
408
|
-
|
|
409
|
-
**Hinders / Missing** (act on these):
|
|
410
|
-
|
|
411
|
-
1. [CRITICAL · hinders] Submit fails opaquely when required field empty ([file](iamu/findings/<slug>.md))
|
|
412
|
-
• Persona: <Persona Name>: "<Persona reaction quote or consequence showing real human friction>"
|
|
413
|
-
• Evidence: Step <N> at <url> (Screenshot: [view](iamu/.runs/<run-id>/screenshots/<NNN>.png))
|
|
414
|
-
• Recommendation: <Concrete recommendation from finding>
|
|
389
|
+
Render results **inline** as a concise executive scorecard.
|
|
415
390
|
|
|
416
|
-
|
|
417
|
-
• Persona: <Persona Name>: "<Persona reaction quote or consequence>"
|
|
418
|
-
• Evidence: Step <N> at <url>
|
|
419
|
-
• Recommendation: <Concrete recommendation from finding>
|
|
391
|
+
**ANTI-BLOAT DIRECTIVE:** Terminal viewports are small. Never output multi-screen walls of markdown text. The overview exists only to present the top-line score and orient the user for triage. Do NOT dump long quotes, recommendations, full descriptions, or "What Worked" essays here — those belong in the interactive triage step below.
|
|
420
392
|
|
|
421
|
-
|
|
393
|
+
Keep the presentation under 15 lines total:
|
|
422
394
|
|
|
423
|
-
|
|
395
|
+
```
|
|
396
|
+
Walkthrough: [<scenario-slug>](iamu/scenarios/<scenario-slug>.md) ([<persona>](iamu/personas/<persona>.md))
|
|
397
|
+
Verdict: <FAIL / PARTIAL / PASS> · <N> Blockers (Critical) · <M> Friction points (Major/Minor) · <K> Helpers (Steps: <N>)
|
|
398
|
+
Focus Checkpoint: "<human_tests[0].question>" → <No / Partial / Yes>: <1-sentence direct answer>
|
|
424
399
|
|
|
425
|
-
|
|
400
|
+
Findings:
|
|
401
|
+
1. [<CRITICAL|MAJOR|MINOR> · <type>] <Short title> (Step <N> at <short_url_path>)
|
|
402
|
+
2. [<CRITICAL|MAJOR|MINOR> · <type>] <Short title> (Step <N> at <short_url_path>)
|
|
403
|
+
...
|
|
404
|
+
(Helps: • [helps] <short title> (Step <N>))
|
|
426
405
|
|
|
427
|
-
|
|
428
|
-
|
|
429
|
-
- Adjacent untested scenario in the same capability
|
|
430
|
-
- Nothing (if coverage is good)
|
|
406
|
+
Cloud: <Shareable report: <url> | Local only>
|
|
407
|
+
```
|
|
431
408
|
|
|
432
|
-
|
|
433
|
-
|
|
434
|
-
- **Linked, run not on the cloud** → the reason from step E and its remedy, e.g. `Cloud: queued — retries on the next iamu sync`.
|
|
435
|
-
- **Local-only** → on first completed run: `Want a link to share this report? iamu auth login connects to Iamu Cloud — optional, everything keeps working locally.`
|
|
409
|
+
(If canonical.json contains a `verification` section, include a 1-line delta: `Since last run: ✓ <N> fixed · ✗ <M> persist · + <K> new`.)
|
|
410
|
+
Do NOT output `### What Worked` paragraphs or lengthy bullet essays. Keep the entire summary under 15 lines, then immediately present the triage prompt below.
|
|
436
411
|
|
|
437
412
|
7. **Next actions (Interactive Triage Selection)**:
|
|
438
413
|
When the walkthrough completes and yields findings:
|
|
@@ -460,20 +435,21 @@ The conversation is the triage surface. Do NOT eject the user to manual CLI comm
|
|
|
460
435
|
|
|
461
436
|
#### A. Guided One-by-One Review ("walk through them" / "review one by one")
|
|
462
437
|
When the user asks to review findings one by one:
|
|
463
|
-
1. **Present Finding #N in
|
|
464
|
-
|
|
465
|
-
|
|
466
|
-
|
|
467
|
-
|
|
468
|
-
-
|
|
469
|
-
|
|
470
|
-
|
|
471
|
-
|
|
472
|
-
|
|
473
|
-
|
|
474
|
-
|
|
475
|
-
|
|
476
|
-
|
|
438
|
+
1. **Present Finding #N in a compact card (maximum 4 lines):**
|
|
439
|
+
```
|
|
440
|
+
Finding <N>/<total>: [<SEVERITY> · <type>] <title>
|
|
441
|
+
Friction: <Persona Name>: "<1-sentence reaction quote>"
|
|
442
|
+
Location: <file:line path in repository, e.g. frontend/src/components/Form.tsx:309>
|
|
443
|
+
Proposal: <1-sentence concrete fix recommendation>
|
|
444
|
+
```
|
|
445
|
+
Followed immediately by the decision prompt:
|
|
446
|
+
- If interactive tool available:
|
|
447
|
+
- Question: "Triage Finding #<N>: '<finding title>'?"
|
|
448
|
+
- Options:
|
|
449
|
+
1. "[Recommended] Fix now (apply inline code fix & verify)"
|
|
450
|
+
2. "Dismiss / Skip (not relevant or walker error)"
|
|
451
|
+
3. "Discuss / Explore trade-offs"
|
|
452
|
+
4. "Next finding (keep open)"
|
|
477
453
|
- Otherwise (CLI / text-only):
|
|
478
454
|
Triage Finding #<N>: '<finding title>'
|
|
479
455
|
1. [Recommended] Fix now (apply inline code fix & verify)
|
|
@@ -485,8 +461,8 @@ When the user asks to review findings one by one:
|
|
|
485
461
|
|
|
486
462
|
2. **Handle the user's decision**:
|
|
487
463
|
- **Fix now**:
|
|
488
|
-
Make the code edit, verify it loads (or check local tests/types), update the finding
|
|
489
|
-
Tell the user
|
|
464
|
+
Make the code edit, verify it loads (or check local tests/types), update the finding with `iamu triage <slug> --status addressed --note "<summary of fix>"`.
|
|
465
|
+
Tell the user in 1 line: "✓ Applied fix to `<file>:<line>`. Finding #<N> marked addressed." and ask: "Ready for finding #<N+1>?".
|
|
490
466
|
- **Skip / Dismiss**:
|
|
491
467
|
If reason is not specified, ask or infer the appropriate category:
|
|
492
468
|
- `out_of_scope`: Not relevant to this project/flow scope.
|
|
@@ -494,10 +470,14 @@ When the user asks to review findings one by one:
|
|
|
494
470
|
- `walker_error`: Walker misread the screen or made a navigational error.
|
|
495
471
|
- `duplicate`: Duplicate of another finding.
|
|
496
472
|
Execute: `iamu triage <slug> --status dismissed --reason <reason> --note "<why>"`.
|
|
497
|
-
Tell the user: "Dismissed as `<reason>` —
|
|
473
|
+
Tell the user in 1 line: "✓ Dismissed as `<reason>` — guidance rule recorded."
|
|
498
474
|
Then advance to finding #<N+1>.
|
|
499
|
-
- **Discuss / Why**:
|
|
500
|
-
|
|
475
|
+
- **Discuss / Why (STRICT CONSTRAINT: maximum 3-4 concise bullets, under 80 words total)**:
|
|
476
|
+
Never write multi-section essays, markdown headers (`### Trade-off Analysis`, `#### 1. Why it was built this way`, `#### 2. The Operational Failure`), or ASCII/markdown tables. Deliver a direct, surgical 3-bullet answer:
|
|
477
|
+
• **Root Cause:** 1 sentence on why the code does this (`file:line`).
|
|
478
|
+
• **Persona Friction:** 1 sentence on the practical operational consequence.
|
|
479
|
+
• **Recommended Fix & Trade-off:** 1-2 sentences with concrete code approach and any trade-off.
|
|
480
|
+
Immediately re-prompt the triage decision.
|
|
501
481
|
- **Next**:
|
|
502
482
|
Leave open (or set `triage_status: deferred` with note) and advance to finding #<N+1>.
|
|
503
483
|
|