@iamu-dev/iamu 0.7.0-beta.0 → 0.8.0-beta.1
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 +3170 -990
- package/dist/commands/browse-actions.d.ts +1 -0
- package/dist/commands/browse-driver.d.ts +25 -5
- package/dist/commands/browse.d.ts +39 -1
- package/dist/commands/doctor-design.d.ts +9 -0
- package/dist/commands/doctor.d.ts +1 -1
- package/dist/commands/edit-entity.d.ts +3 -3
- package/dist/commands/finding-stability.d.ts +71 -0
- package/dist/commands/fix-brief.d.ts +6 -2
- package/dist/commands/init.d.ts +4 -4
- package/dist/commands/instructions-walk.d.ts +6 -0
- package/dist/commands/live-run-client.d.ts +1 -0
- package/dist/commands/preflight.d.ts +4 -2
- package/dist/commands/report-data.d.ts +2 -1
- package/dist/commands/set-entity.d.ts +7 -0
- package/dist/commands/step.d.ts +2 -0
- package/dist/commands/timings.d.ts +19 -0
- package/dist/commands/triage.d.ts +6 -0
- package/dist/index.js +3139 -984
- package/dist/templates/prompts/advise.md +1 -0
- package/dist/templates/prompts/complete.md +1 -1
- package/dist/templates/prompts/design-review.md +9 -0
- package/dist/templates/prompts/designer.md +2 -0
- package/dist/templates/prompts/walk.md +8 -5
- package/dist/templates/skills/iamu-design.md +30 -20
- package/dist/templates/skills/iamu-findings.md +24 -27
- package/dist/templates/skills/iamu-run.md +96 -71
- package/dist/templates/skills/iamu-setup.md +154 -75
- package/dist/templates/skills/iamu-stage.md +29 -23
- package/dist/templates/skills/iamu-status.md +2 -0
- package/dist/ui/report-view.d.ts +5 -0
- package/package.json +2 -2
|
@@ -66,6 +66,7 @@ Work in this order. Do not skip ahead to writing fixes.
|
|
|
66
66
|
- Recommendations, quick fixes and direction texts are prose for a product person and a developer reading together. Plain, specific, in the product's own words.
|
|
67
67
|
- **No file paths or code symbols in the prose.** They go in `builds_on` only. The prose is shown to a later walker who must stay outside the code.
|
|
68
68
|
- A recommendation says what the person would see and why it meets their need, then how it fits this product.
|
|
69
|
+
- **Titles** of directions and observations: A title is a headline someone scans in a list: what changes for the person (a direction) or what is missing or risky (an observation), in a few words. Aim for about 60 characters; the detail belongs in the fields below it. Meaning comes first: never drop a word that carries it just to be shorter. A clear title of 75 characters beats a cryptic one of 40. Too long: "The equipment picker has no mobile vehicles and its menu captures focus over the free-text field". Better: "Equipment list has no forklifts; open menu blocks free text".
|
|
69
70
|
|
|
70
71
|
## Answer
|
|
71
72
|
|
|
@@ -31,7 +31,7 @@ Write `iamu/.runs/<run-id>/canonical.json`:
|
|
|
31
31
|
"browser": "chrome-devtools"
|
|
32
32
|
},
|
|
33
33
|
"provenance": {
|
|
34
|
-
"walker_prompt": { "id": "walkthroughPhilosophy", "version": "
|
|
34
|
+
"walker_prompt": { "id": "walkthroughPhilosophy", "version": "<the walker prompt version; iamu complete records the current one>" },
|
|
35
35
|
"model": "unspecified",
|
|
36
36
|
"started_at": "<created_at from manifest>",
|
|
37
37
|
"completed_at": "<current ISO timestamp>"
|
|
@@ -16,17 +16,26 @@ You review one surface of the product: a page, its states, and the flows that pa
|
|
|
16
16
|
- **Name the rule.** When an issue breaks a rule in the design docs, give the rule's name exactly as the doc writes it (its heading, or the bold words that open it) as `rule`, and the entry it is in (from `design.files`) as `file`. When the same name occurs twice in one file, write `Section > Name`.
|
|
17
17
|
- **When a rule hurts a need, say so.** If following a rule is what fails a visitor (the rule keeps a caveat small and grey, and the person missed it), report a `conflict`: the rule and its file, the rule's text copied exactly from the doc as `before`, better wording as `after`, the evidence, and why. Do not silently break the rule or silently follow it. A person decides.
|
|
18
18
|
- **Prefer removing, merging and hiding by role to adding.** Every element must earn its place.
|
|
19
|
+
- **Confirm resolved problems.** When a problem in `problems` or an unverified fix in `fix_history` (`state: "awaiting_rerun"`, carrying a `ref` like `F1`, `F2`, ...) is now visibly fixed on the live surface, list it in `resolved` with its `ref` (`"F1"`) and one sentence (`how`) describing what on the live screen resolves the visitor's need. Never list the same ref in both `issues[].evidence` and `resolved`.
|
|
19
20
|
- **Be specific.** "The approve button and the reject link share one grey; the reject reads as disabled", not "improve hierarchy". Do not manufacture issues: a clean surface is a valid answer.
|
|
20
21
|
|
|
21
22
|
Severity: `critical` (broken, unreachable, unreadable), `major` (a visitor's need is not met, or the surface is clearly inconsistent), `minor` (polish), `nit` (preference).
|
|
22
23
|
|
|
23
24
|
## Answer
|
|
24
25
|
|
|
26
|
+
**Titles.** A title is a headline someone scans in a list: what is wrong and where, in a few words. Aim for about 60 characters; the detail belongs in `what` and `why`. Meaning comes first: never drop a word that carries it just to be shorter. A clear title of 75 characters beats a cryptic one of 40. Too long: "The equipment picker has no mobile vehicles and its menu captures focus over the free-text field". Better: "Equipment list has no forklifts; open menu blocks free text".
|
|
27
|
+
|
|
25
28
|
Reply with one JSON object and nothing else:
|
|
26
29
|
|
|
27
30
|
```json
|
|
28
31
|
{
|
|
29
32
|
"summary": "What this surface is for, for whom, and how well it serves them (two to four sentences).",
|
|
33
|
+
"resolved": [
|
|
34
|
+
{
|
|
35
|
+
"ref": "F1",
|
|
36
|
+
"how": "What on the live screen now resolves this visitor's need"
|
|
37
|
+
}
|
|
38
|
+
],
|
|
30
39
|
"issues": [
|
|
31
40
|
{
|
|
32
41
|
"title": "Short title",
|
|
@@ -50,6 +50,8 @@ A correct refusal whose reason is on the screen is not `critical`: the product i
|
|
|
50
50
|
|
|
51
51
|
## Answer
|
|
52
52
|
|
|
53
|
+
**Titles.** A title is a headline someone scans in a list: what is wrong and where, in a few words. Aim for about 60 characters; the detail belongs in `what` and `why`. Meaning comes first: never drop a word that carries it just to be shorter. A clear title of 75 characters beats a cryptic one of 40. Too long: "The equipment picker has no mobile vehicles and its menu captures focus over the free-text field". Better: "Equipment list has no forklifts; open menu blocks free text".
|
|
54
|
+
|
|
53
55
|
Reply with one JSON object and nothing else:
|
|
54
56
|
|
|
55
57
|
```json
|
|
@@ -172,10 +172,12 @@ Your walking prompt has an `## Access` section saying how to become this persona
|
|
|
172
172
|
|
|
173
173
|
- For `iamu browse`:
|
|
174
174
|
```bash
|
|
175
|
-
iamu browse step --run <run-id> --action "<action>" --note "<first-person monologue>" <command> [args...]
|
|
175
|
+
iamu browse step --run <run-id> --action "<action>" --note "<first-person monologue>" <command> [args...] [--then '<command> [args...]']
|
|
176
176
|
```
|
|
177
177
|
Commands: `click <role> "<name>"`, `click-text "<text>"`, `click-index <N>`, `fill <role> "<name>" "<text>"`, `fill-index <N> "<text>"`, `select <role> "<name>" "<val>"`, `upload <role> "<name>" "<file-path>"`, `upload-index <N> "<file-path>"`, `press <key>`, `scroll [px]`, `back`, `shot`, `wait [ms]`.
|
|
178
|
-
|
|
178
|
+
`iamu browse step` automatically saves the screenshot and prints the updated `[#N]` interactive elements and accessibility snapshot — do not run a separate `snapshot` command after `browse step`.
|
|
179
|
+
Chain consecutive form fills on the same screen into a single step using `--then '<command> [args...]'`.
|
|
180
|
+
Prefer driving via `click-index <N>`, `fill-index <N> "<text>"`, or `upload-index <N> "<file-path>"` using the `[#N]` numbers from the previous step's output.
|
|
179
181
|
When a link or button opens a new window/tab (`target="_blank"`), manage tabs via `tabs`, `switch-tab <index>`, and `close-tab [index]`.
|
|
180
182
|
- For other surfaces:
|
|
181
183
|
```bash
|
|
@@ -186,12 +188,13 @@ Your walking prompt has an `## Access` section saying how to become this persona
|
|
|
186
188
|
`note` is your internal first-person persona reaction in character.
|
|
187
189
|
The CLI automatically handles sequential numbering, timestamps, screenshot capture/linking, and live event streaming.
|
|
188
190
|
|
|
189
|
-
**Findings:** Always scaffold with the CLI — never create finding files by hand or call host Edit/Write tools:
|
|
191
|
+
**Findings:** Always scaffold with the CLI — never create finding files by hand or call host Edit/Write tools. When recording multiple findings, execute them together in a single shell command chained with `&&` rather than one turn per finding:
|
|
190
192
|
|
|
191
193
|
```bash
|
|
192
194
|
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 --need "What I needed at that moment" --description "What happened and why it mattered" --json
|
|
193
195
|
```
|
|
194
196
|
|
|
197
|
+
- `--title`: A title is a headline someone scans in a list: what goes wrong (or works) and where, in a few words. Aim for about 60 characters; the detail belongs in `--ui-fact`, `--consequence` and `--description`. Meaning comes first: never drop a word that carries it just to be shorter. A clear title of 75 characters beats a cryptic one of 40. Too long: "The equipment picker has no mobile vehicles and its menu captures focus over the free-text field". Better: "Equipment list has no forklifts; open menu blocks free text".
|
|
195
198
|
- `--type`: `helps | hinders | missing | irrelevant | incorrect`
|
|
196
199
|
- `--severity`: `critical | major | minor | nit`
|
|
197
200
|
- `--task-impact`: `blocks | impairs | slows | neutral | accelerates | enables`
|
|
@@ -203,7 +206,7 @@ iamu new-finding --scenario <slug> --run <run-id> --title "Short title" --type h
|
|
|
203
206
|
|
|
204
207
|
Leave `triage_status` alone; triage is not the walker's job.
|
|
205
208
|
|
|
206
|
-
**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.
|
|
209
|
+
**Screenshots:** Screenshots are captured automatically by `iamu browse step`. Do not read step screenshot PNGs with your file-reading tool after routine steps — use the returned accessibility snapshot unless checking a visual layout discrepancy. 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.
|
|
207
210
|
|
|
208
211
|
**Execution rule:** Execute everything via CLI commands in the shell. Never invoke host Edit or Write tools on files in the workspace.
|
|
209
212
|
|
|
@@ -221,4 +224,4 @@ iamu summary <run-id> --reached "Sent the request; it shows Pending with my mana
|
|
|
221
224
|
- `--question` — Questions for the product team: decisions the walk raised that the product does not settle and that you could not settle as the persona ("Should a reporter see the investigator's checklist at all?", "Is the 14-day notice rule enforced or only advised?"). Not doubts about the test itself.
|
|
222
225
|
- `--setup-note` — Doubts about the test setup, not the product: data that seemed missing or unrealistic, an account that could not see what the situation needs, a date the scenario assumes ("No absences are recorded for summer 2027, so 'nobody is away' may only mean no data"). These go to whoever stages the scenario.
|
|
223
226
|
|
|
224
|
-
Then
|
|
227
|
+
Then reply to the orchestrating agent with a concise one-line status (`Walk complete: <N> steps, <M> findings`) so it can run `iamu complete` and the evaluation stage — do not re-type your findings or synthesis into chat.
|
|
@@ -76,31 +76,41 @@ Run `iamu design proposals --json` and decide each open proposal exactly as the
|
|
|
76
76
|
|
|
77
77
|
## D. The fix loop
|
|
78
78
|
|
|
79
|
-
Fix by looking, not by hoping
|
|
79
|
+
Fix by looking, not by hoping:
|
|
80
80
|
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
4. If fix-brief says the finding has no known page, take the page from the finding's step and still screenshot it before you edit.
|
|
81
|
+
- **One finding:** `iamu fix-brief <finding> --json` (a slug, id, or `<run-id>#D<n>`).
|
|
82
|
+
- **One surface (all open findings on a page):** `iamu fix-brief /path --json` (e.g. `iamu fix-brief /approvals`).
|
|
83
|
+
- **A multi-scenario wave (all open surfaces in order):** `iamu fix-brief --wave --json`.
|
|
85
84
|
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
85
|
+
1. Run the matching `iamu fix-brief` command. It gives the **before** screenshots, what each visitor **needed**, the design rules tied to the findings with the file and line where each is now (`found: false` when the docs no longer have it), the design docs that apply (`design_files`), what the last design review said, the strengths on the page that must keep working (`protect`), fixes already tried there (`fix_history`, with `verified` patterns that held and `recurred` approaches that failed alongside what the post-fix walk still saw), where to save screenshots (`shots_dir`), and the **loop** itself.
|
|
86
|
+
2. Check `fix_history` before editing: never repeat a `recurred` approach, and keep the patterns from `verified` fixes intact.
|
|
87
|
+
3. Follow `loop` step by step. Save before and after screenshots in `shots_dir` and show their absolute paths when you report. When fixing a surface or a wave, use `iamu design review <path> --blind` as the fast designer inner check on the page, and batch persona walkthrough re-runs (`rerun` / `scenarios_to_rerun`) once at the end of the wave.
|
|
88
|
+
4. If the change that meets the need breaks a design rule, stop and report it (the rule, the need, both screenshots) and propose a challenge: never ship either side silently.
|
|
89
|
+
5. If fix-brief says a finding has no known page, take the page from the finding's step and still screenshot it before you edit.
|
|
89
90
|
|
|
90
|
-
|
|
91
|
-
2. **Fill it in with the user, one placeholder at a time.** Go through the `placeholders` in this order, one question per message, and edit the draft after each answer. Each question carries a suggested answer drawn from what is known: `iamu/context.yml`, the roles and situations, what runs and findings showed of the screens, the components and tokens. The user accepts it, changes it, or skips it (the placeholder stays; a decision still open also goes under Open Questions).
|
|
92
|
-
1. **Who it is for:** by role, and what they come to do. Suggest it from the roles and situations the Overview lists, then replace that list with the agreed words. Roles only, never a persona's name.
|
|
93
|
-
2. **How it should feel:** a few words (calm and plain, dense and fast). Suggest from the domain and the roles' dispositions.
|
|
94
|
-
3. **Accessibility target:** suggest WCAG 2.2 AA, or more when the domain asks for it (a public service, long reading).
|
|
95
|
-
4. **Look:** what each token group is for, and for each contrast clash, how to keep the two apart or where one may not be used.
|
|
96
|
-
5. **States:** how forms report errors, loading, failure, empty. Suggest from what the runs saw and the components that exist (an empty-state component, a field with an error prop). Only the states the product has.
|
|
97
|
-
6. **Content and voice:** the product's words for its things, tone by role, and date and number formats (suggest from the locale and what the screens show).
|
|
98
|
-
7. **Checks:** yes/no questions a reviewer answers by looking at one screen, where yes is a pass. Suggest them from the answers so far.
|
|
99
|
-
8. **Not in the library yet**, then **Open Questions:** components screens need that do not exist, and policy decisions still open.
|
|
91
|
+
## E. Start a design doc from the template
|
|
100
92
|
|
|
101
|
-
|
|
93
|
+
Only when no design doc is recorded: `iamu design template` refuses otherwise, and a recorded doc changes only through proposals (**C**). The template is filled in from the code, never by a model: the token values in the frontmatter (light theme), the token groups by name, the contrast clashes the tokens have, each component with the props it takes, and the roles people come in (from the personas and situations, never their names). Everything else starts as a `<placeholder>`. Auto-extract what the code and `iamu/context.yml` already answer, ask the user only for the qualitative intent and clash decisions that code cannot answer, and the result becomes the team's doc.
|
|
94
|
+
|
|
95
|
+
1. **Template & Auto-Extraction (0 questions to the user).** Run `iamu design template --out iamu/.analysis/design-draft.md --json`. It is for the app the recorded tokens and components apply to, else the root; add `--dir <app>` when the user names another app, and pass the same `--dir` to the later commands. If it answers `out_exists`, a draft is in progress: ask whether to continue it (step 2 with that file) or start over (delete the file and run it again). Tell the user in two lines what came from the code (`sources`, the components, `roles`, `clashes`) and where the doc will go (`target`).
|
|
96
|
+
Before asking the user anything, read the actual token files (`sources.tokens`), UI components (`sources.components`), page code, and `iamu/context.yml` (plus live rendered screens or recent runs if available), and pre-fill the code-evidenced placeholders in `iamu/.analysis/design-draft.md`:
|
|
97
|
+
- **Overview — Who it is for:** Synthesize who uses the product and what they come to do from `iamu/context.yml` and the roles and situations the Overview lists, then replace that list with the synthesized role-based words (roles only, never a persona's name or a single-scenario situation number).
|
|
98
|
+
- **Look — Token roles:** Fill in `<what each is for>` for each extracted token group from how stylesheets and components actually apply those tokens (always name tokens in backticks, never raw hex or px values in prose).
|
|
99
|
+
- **Interaction and States:** Extract how `Forms` (error reporting), `Loading`, `Failure`, and `Empty` states are actually implemented in `sources.components` and screens. Describe only the states the product has; missing state patterns go under `Not in the library yet` / `Open Questions`.
|
|
100
|
+
- **Content and Voice — Words & Formats:** Fill in the product's domain `Words` from product copy/`iamu/context.yml` and date/number `Formats` from formatters (`Intl`, `date-fns`, locale helpers) in the code.
|
|
101
|
+
2. **Interview for Qualitative Intent & Clashes (2–3 focused questions, one question per message).** Never ask the user an open-ended blank question or make them describe their own code: each question MUST carry 2–3 concrete options (with `[Recommended]` first) drawn from `iamu/context.yml` and the codebase. Ask at most 2–3 questions, one question per message, using `ask_question` when available, and update the draft after each answer:
|
|
102
|
+
1. **Creative North Star, Feel & Accessibility Target (`Overview` & `Tone`):**
|
|
103
|
+
Propose 2–3 options for the system's visual personality and feel—each pairing a named **Creative North Star** metaphor with mood/density adjectives (`How it should feel`, e.g., *"The Quiet Workbench — calm, dense, and keyboard-first"*), `Tone` by role, and `Accessibility target` (recommend `WCAG 2.2 AA`, or stricter when the domain requires it, such as a public service or clinical tool)—and ask if there is any visual anti-reference (what the UI must *never* feel like).
|
|
104
|
+
2. **Palette Character, Contrast Clashes & Component Feel (`Look` & `Components`):**
|
|
105
|
+
Briefly show the auto-extracted token roles and component/elevation feel (flat vs. tonal layering vs. lifted, button/input character), and ask for the decision code alone cannot make:
|
|
106
|
+
- **When `clashes` is non-empty:** for each measured contrast clash in `Look`, propose a concrete `[Recommended]` rule (how to keep the pair apart or where one may not be used, e.g., restricting a low-contrast token to borders/decorators or pairing it with a darker text token) and ask the user to confirm or adjust.
|
|
107
|
+
- **When `clashes` is empty:** confirm the primary/accent usage doctrine (e.g., a Named Rule like *"The One Accent Rule — primary accent reserved for the single primary action per view"*) and any missing primitives for `Not in the library yet`.
|
|
108
|
+
3. **Unresolved States or Policy Gaps (only if needed):**
|
|
109
|
+
Skip this question when the codebase already covers states and formats cleanly. Ask a 3rd question only if key state patterns (`Forms`, `Loading`, `Failure`, `Empty`) are missing or contradictory in code, or if an open domain policy question needs a decision (establish a rule now vs. leave under `## Open Questions`).
|
|
110
|
+
|
|
111
|
+
After the user's answers, synthesize `## Review Checklist` (concrete yes/no questions a reviewer answers by looking at one screen, where yes is a pass, derived from the confirmed rules and extracted states) and `## Open Questions` (components screens need that do not exist yet, and policy decisions still open). Write a policy value (a notice period, a limit, a percentage) only when the user gives it as the product's rule; otherwise it stays a `<placeholder>` and an open question. Name tokens, never raw colours or lengths.
|
|
102
112
|
3. **Check.** Run `iamu design draft-check --file iamu/.analysis/design-draft.md --json`. Fix each of its `errors` in the draft (a value or path the code does not have, a prop a component lacks, a persona's name) and check again; ask the user only when the fix is a choice.
|
|
103
|
-
4. **Show it once.** Show the whole draft,
|
|
113
|
+
4. **Show it once.** Show the whole draft, briefly highlight the non-obvious creative choices (North Star/feel, clash rules, review checks), and list the remaining `warnings` in one list (line and message). Ask once: **adopt it**, or **edit** (what to change; edit, check again, and show it once more).
|
|
104
114
|
5. **Adopt.** Run `iamu design adopt --file iamu/.analysis/design-draft.md --json` (`--to <path>` when the user wants it elsewhere). It refuses only when the target already exists: then ask for another path. It writes the doc and records it, with `applies_to` for its app. From then on it is the team's doc: iamu changes it only through proposals a person accepts.
|
|
105
115
|
6. Offer **A2** (point agents at the doc).
|
|
106
116
|
|
|
@@ -39,7 +39,7 @@ Follow this precedence cascade:
|
|
|
39
39
|
|
|
40
40
|
When `iamu/config.json` has `cloud_linked: true` and the `iamu_requests` tool is available, call it once before listing. If it returns `ok: false` (not linked, not authenticated, or `cloud_too_old`), skip this section silently.
|
|
41
41
|
|
|
42
|
-
If `count > 0`, show the requests first, before the findings
|
|
42
|
+
If `count > 0`, show the requests first, before the findings list:
|
|
43
43
|
|
|
44
44
|
```
|
|
45
45
|
Requests from the team (2)
|
|
@@ -53,7 +53,7 @@ Ask whether to pick one up. When the user picks a request:
|
|
|
53
53
|
|
|
54
54
|
1. Call `iamu_requests_claim` with its `id`. If it fails with `lease_held`, say who holds it and when the lease expires, and return to the list.
|
|
55
55
|
2. Follow `next` from the result:
|
|
56
|
-
- `fix` → go to step 4's **Fix
|
|
56
|
+
- `fix` → go to step 4's **Fix immediately** branch for the finding. The claim payload carries `canonical.findingIds`; open the matching `iamu/findings/*.md` (frontmatter `id`) for the walkthrough context. Use `canonical.uiFact` and `canonical.consequence` as the problem statement.
|
|
57
57
|
- `verify` or `run` → run `iamu-run <scenario.id>`; offer `scenario.targetUrl` as the target when present.
|
|
58
58
|
3. Tell the user the request closes itself on the next `iamu sync` — step 6 runs it.
|
|
59
59
|
|
|
@@ -61,7 +61,7 @@ Ask whether to pick one up. When the user picks a request:
|
|
|
61
61
|
|
|
62
62
|
### 2. List mode: present open findings grouped by scenario
|
|
63
63
|
|
|
64
|
-
Run `iamu findings --open --json`. Each finding carries `slug`, `source` (`persona` or `designer`), `basis` (the designer's: evidence, seen or taste), `design_causes` (how many designer findings explain it), `scenario`, `type`, `severity`, `title`, `where` (page and step), `recommendation` (the advisor's, or null) and `fix_state`. One list, worst first, with both sources:
|
|
64
|
+
Run `iamu findings --open --json`. Each finding carries `slug`, `source` (`persona` or `designer`), `basis` (the designer's: evidence, seen or taste), `design_causes` (how many designer findings explain it), `scenario`, `type`, `severity`, `title`, `where` (page and step), `recommendation` (the advisor's, or null) and `fix_state`. One list, worst first, with both sources: every line says who found it (the persona through its block, the designer on the line itself), never sum their counts into one number, and say "taste" plainly when a designer finding's basis is taste. A designer finding with no `scenario` came from a page review; group it under its page. For how each scenario is doing, run `iamu report --json` and keep the newest row per `scenario`: its `summary.verdict` (label, question, answer) is the scenario's current outcome.
|
|
65
65
|
|
|
66
66
|
Filter to `triage_status: open`.
|
|
67
67
|
|
|
@@ -85,39 +85,33 @@ A run that simply did not come across a finding proves nothing — never call a
|
|
|
85
85
|
|
|
86
86
|
When open findings span three or more scenarios and there are no open directions, or the user asks what to change first, offer a project synthesis: `iamu advise --project --json`, dispatch a thorough-tier subagent with `iamu/.analysis/advise_prompt.md` as its only context, and record its answer with `iamu advise-record --project --data '<json>'`. It proposes directions across every scenario.
|
|
87
87
|
|
|
88
|
-
Render it as Markdown, not inside a code fence, so the
|
|
88
|
+
Render it as Markdown, not inside a code fence. It is read in a terminal: no tables, one line per finding, so the list can be taken in at a glance. Start with a one-line tally, then one block per scenario, scenarios with the worst verdict first:
|
|
89
89
|
|
|
90
|
-
**<N> open problems**
|
|
90
|
+
**<N> open problems** · <counts by severity, only the ones above zero, e.g. "1 critical · 4 major · 4 minor"> · <S> scenarios · <K> fixes awaiting a re-run
|
|
91
91
|
|
|
92
92
|
### <persona> · <situation> — **<NO / PARTIAL / YES>**
|
|
93
|
-
<the scenario's latest `summary.verdict.answer`, first sentence
|
|
93
|
+
> <the scenario's latest `summary.verdict.answer`, its first sentence>
|
|
94
94
|
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
| 1 | <title> | **Critical** | <where> | <first sentence of recommendation, or — > |
|
|
95
|
+
1. **Critical** · <title> · <where>
|
|
96
|
+
2. **Major** · designer (seen) · <title> · <where>
|
|
98
97
|
|
|
99
|
-
|
|
98
|
+
A persona finding's line needs no name: the block's heading names the persona who found it. A designer finding's line says `designer (<basis>)` after the severity, and `designer (taste)` plainly when its basis is taste. Add ` ↳ design cause` to a persona finding the designer explained (`design_causes` above zero). A page-review designer finding with no `scenario` goes in a block headed `### <page> — page review`.
|
|
100
99
|
|
|
101
|
-
|
|
100
|
+
Number findings continuously across scenarios, so "fix 3" means one finding. Sort each block worst first (critical → major → minor → nit; incorrect, hinders and missing before irrelevant). Leave strengths (`helps`) out. No recommendation on the line: it belongs in the finding card (step 3). With more than 7 in a block, show the worst 7 and end it with `+<n> more (<counts by severity>)`.
|
|
102
101
|
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
102
|
+
End with the choices on one line, the recommended one first, and **stop**. Do not use a question tool here, since it covers the list:
|
|
103
|
+
|
|
104
|
+
`Next: **walk through** (one by one from #1) · **critical only** · **<persona> · <situation>** (one scenario) · **fix 3** · **dismiss 3**`
|
|
105
|
+
|
|
106
|
+
Recommend **walk through**; recommend a direction first when one is open (see "Directions before findings"). Then, on the user's word:
|
|
107
|
+
|
|
108
|
+
- **"walk through"** → iterate through all open findings one-by-one in order with compact card (`[Fix now] [Skip / Dismiss] [Discuss] [Next]`).
|
|
109
|
+
- **"critical only"** → iterate through all critical findings in order.
|
|
110
|
+
- **A scenario** (its heading, or "group 1") → iterate through that scenario's findings.
|
|
106
111
|
- **Single number or slug** → single finding (skip to step 3).
|
|
107
|
-
- **"fix 1 and 2"** →
|
|
112
|
+
- **"fix 1 and 2"** → the list shows no recommendations, so never fix from a number alone: show each named finding's card (step 3, without the decision prompt), then one line: `Fix <these N> as shown? Say "yes", or name the ones to leave out.` Only on a yes, fix each as step 4's **Fix immediately** branch does.
|
|
108
113
|
- **"skip 3" / "dismiss 3"** → dismiss with reason (`out_of_scope`, `not_relevant`, `walker_error`, `duplicate`).
|
|
109
114
|
|
|
110
|
-
**Interactive Triage Strategy:**
|
|
111
|
-
- If your environment provides an interactive user-prompt tool (e.g. `ask_question`, `ask_followup_question`), invoke it:
|
|
112
|
-
- Question: "How would you like to review these <N> open findings?"
|
|
113
|
-
- Options:
|
|
114
|
-
1. "[Recommended] Walk through findings one by one"
|
|
115
|
-
2. "Focus only on Critical findings (<C> items)"
|
|
116
|
-
3. "Review by scenario group: <Top Scenario>"
|
|
117
|
-
- Otherwise (in CLI or text-only environments):
|
|
118
|
-
How would you like to triage these <N> open findings? I recommend walking through findings one by one.
|
|
119
|
-
Proceeding with one-by-one triage. (Say "critical only", specify a scenario group, or enter a finding number/slug).
|
|
120
|
-
|
|
121
115
|
### 3. Direct triage: review one finding
|
|
122
116
|
|
|
123
117
|
Read the finding file at `iamu/findings/<slug>.md`. Parse the YAML frontmatter (`severity`, `type`, `title`, `ui_fact`, `consequence`, `persona`, `walkthrough_step_id`, `screen_title`, `page_url`, `run`) and markdown body (description and recommendation).
|
|
@@ -204,6 +198,9 @@ triage_note: "Made handoff notes optional on /sv/handoff; verified on screen."
|
|
|
204
198
|
Once the user provides their rationale:
|
|
205
199
|
- *Not relevant* (by design, out of scope): `iamu triage <slug> --status dismissed --reason not_relevant --note "<why it is not a problem>" --rule "<rule string>"`.
|
|
206
200
|
- *Walker error* (the walker misread the screen): `iamu triage <slug> --status dismissed --reason walker_error --note "<what it misread>" --rule "<rule string>"`.
|
|
201
|
+
- *Project-wide sweep ("we never want X" / "X is a test harness everywhere")*: When the user's intent applies across the entire product (including designer findings or other scenarios), pass `--sweep` (or `--sweep "<keyword>"`):
|
|
202
|
+
`iamu triage [slug] --status dismissed --note "<why>" --rule "Don't report: <X>" --sweep "<keyword>"`.
|
|
203
|
+
This sweeps and dismisses every matching open persona and designer finding across all scenarios and surfaces in one command, and records a project-wide guidance rule that the walker, matcher, judge, designer, and `fix-brief` all respect.
|
|
207
204
|
- *Duplicate* of another finding: `--reason duplicate --note "Duplicate of <slug>"` (no rule is written).
|
|
208
205
|
|
|
209
206
|
Not relevant and walker error write a **tester guidance rule** to `iamu/guidance/<slug>.md` that every later walker reads (and the matcher uses to flag repeats). The rule text defaults to "Don't report: <title>"; pass `--rule "<one sentence the walker can act on>"` when the title is too narrow or too broad. The rule applies to the whole project unless you pass `--scope outline` or `--scope capability` — narrow it when the finding is only irrelevant in this situation. Several findings dismissed for the same reason go in one call and share one rule. **Tell the user: "✓ Dismissed (<reason>) — Guidance rule taught to future walks in iamu/guidance/<slug>.md: '<rule string>'."** One-word notes ("nope") degrade future runs — capture the user's specific rationale.
|
|
@@ -254,7 +251,7 @@ If `<N> > 0` findings were queued for fix:
|
|
|
254
251
|
Proceeding with code edits — say "done" to keep fixes open in iamu/findings/.
|
|
255
252
|
|
|
256
253
|
- **Executing the queued fixes:**
|
|
257
|
-
When Option 1 is chosen,
|
|
254
|
+
When Option 1 is chosen, findings on the same page go together as one coherent change to that surface (`iamu fix-brief /path --json` for one page, or `iamu fix-brief --wave --json` across multiple pages/scenarios; `iamu fix-brief <slug>` for a single isolated finding). Check `fix_history` first so you never repeat a `recurred` approach, and keep every strength in `protect` intact. Save before and after screenshots in `shots_dir`, use `iamu design review <path> --blind` as a fast inner check when a surface has multiple or structural edits, and do not re-run persona walkthroughs between individual findings. Verify once at the end (run test/typecheck suite). Update each fixed finding with `iamu triage <slug...> --status addressed --note "<summary of fix>"`.
|
|
258
255
|
Run `iamu validate --all` to verify all entities before reporting done.
|
|
259
256
|
|
|
260
257
|
- **Closed-Loop Regression Verification (1-Click):**
|