@iamu-dev/iamu 0.5.0-beta.0 → 0.6.0-beta.0
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 +9590 -4938
- package/dist/commands/advise.d.ts +1 -1
- package/dist/commands/complete.d.ts +11 -8
- package/dist/commands/design-check.d.ts +5 -0
- package/dist/commands/design-decide.d.ts +5 -0
- package/dist/commands/design-docs.d.ts +19 -0
- package/dist/commands/design-output.d.ts +33 -0
- package/dist/commands/design-prompt.d.ts +4 -0
- package/dist/commands/design.d.ts +10 -25
- package/dist/commands/designer.d.ts +25 -0
- package/dist/commands/findings.d.ts +2 -0
- package/dist/commands/fix-brief.d.ts +6 -0
- package/dist/commands/live-run-client.d.ts +3 -3
- package/dist/commands/register-design.d.ts +2 -1
- package/dist/commands/register-walkthrough.d.ts +2 -2
- package/dist/commands/summary.d.ts +10 -0
- package/dist/index.js +8944 -4261
- package/dist/templates/prompts/advise.md +34 -23
- package/dist/templates/prompts/design-draft.md +64 -26
- package/dist/templates/prompts/design-review-match.md +30 -0
- package/dist/templates/prompts/design-review.md +22 -16
- package/dist/templates/prompts/designer.md +93 -0
- package/dist/templates/prompts/walk.md +22 -5
- package/dist/templates/skills/iamu-design.md +37 -42
- package/dist/templates/skills/iamu-findings.md +14 -6
- package/dist/templates/skills/iamu-run.md +49 -9
- package/dist/templates/skills/iamu-setup.md +14 -9
- package/dist/templates.d.ts +7 -1
- package/dist/ui/html-report.d.ts +9 -1
- package/dist/ui/report-view.d.ts +7 -0
- package/package.json +13 -3
|
@@ -1,89 +1,83 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: iamu-design
|
|
3
|
-
description: Use when
|
|
3
|
+
description: Use when recording where the project's design docs are, reviewing the design of a page (interaction, layout, look and feel), deciding proposed edits to the design docs, pointing agents at the docs, or fixing a finding with a visual check.
|
|
4
4
|
generatedBy: __IAMU_VERSION__
|
|
5
5
|
---
|
|
6
6
|
|
|
7
|
-
Help the product's design: its interaction design at the level of one control and of a whole flow, and its look and feel.
|
|
7
|
+
Help the product's design: its interaction design at the level of one control and of a whole flow, and its look and feel.
|
|
8
8
|
|
|
9
|
-
|
|
9
|
+
The design docs belong to the team. They can be in any format and at any path (a `DESIGN.md`, a section of `CLAUDE.md`, a brand guide). Iamu records which files they are, cites their rules by the names the docs give them (a heading, or the bold words that open a rule), and changes a doc only when a person accepts an exact Before → After proposal. Personas experience; they do not design. Their walks are evidence for those proposals.
|
|
10
|
+
|
|
11
|
+
*The designer's review of a run looks at the screens one run's persona saw, after every run; a designer's review of a page looks at one page live, across all its visitors, when asked.*
|
|
10
12
|
|
|
11
13
|
$ARGUMENTS
|
|
12
14
|
|
|
13
15
|
## 0. Where things stand
|
|
14
16
|
|
|
15
|
-
Run `iamu design status --json`. It
|
|
17
|
+
Run `iamu design status --json`. It lists the recorded design files (`files`, each with `kind`, `applies_to` and whether it `exists`), a legacy `iamu/design.md` not yet migrated (`legacy.doc` with no `legacy.migrated_at`), the open proposals (`proposals.open`, with the `stale` and `legacy` ones), and each rule anything cites, with how many runs cited it (`rules[].cited_by_runs`).
|
|
16
18
|
|
|
17
19
|
Pick the mode from the user's words, or from the status when they asked generally:
|
|
18
20
|
|
|
19
|
-
- no
|
|
21
|
+
- no files recorded → **A. Record the design docs**;
|
|
22
|
+
- a legacy `iamu/design.md` not yet migrated → **A3. Migrate the legacy doc** (offer it once);
|
|
20
23
|
- "review this page / the request form / this finding's page / this direction" → **B. Review a surface**;
|
|
21
|
-
- open proposals, or "what should change in our design
|
|
24
|
+
- open proposals, or "what should change in our design docs" → **C. Decide proposed edits**;
|
|
25
|
+
- "point the agents at the design docs" → **A2. Point agents at the docs**;
|
|
22
26
|
- "fix this finding" → **D. The fix loop**.
|
|
23
27
|
|
|
24
|
-
## A.
|
|
25
|
-
|
|
26
|
-
### A1. Record what the project already has
|
|
28
|
+
## A. Record the design docs
|
|
27
29
|
|
|
28
|
-
|
|
30
|
+
### A1. Detect, confirm once, record
|
|
29
31
|
|
|
30
|
-
|
|
32
|
+
Run `iamu design detect --json`. It finds design docs in any format (`DESIGN.md`, design-system, brand, voice and interaction docs, also in a hidden folder at the top), `PRODUCT.md`, token sources and component libraries, each with a reason.
|
|
31
33
|
|
|
32
|
-
|
|
34
|
+
Show the candidates once as a short list (kind, path, why) and ask once which to record; the user may drop some or add others. Record the chosen ones with `iamu design sources <path…>` (it adds to what is recorded):
|
|
33
35
|
|
|
34
|
-
|
|
36
|
+
- a section of a bigger file: `iamu design sources 'CLAUDE.md#Dashboard design'`;
|
|
37
|
+
- a kind detection got wrong: `--kind design | product | tokens | components`;
|
|
38
|
+
- in a monorepo, the part of the product a doc covers: `--applies-to /app` (URL path prefixes) or `--applies-to apps/dashboard` (an app's folder). Runs, reviews and fixes then use the right doc.
|
|
35
39
|
|
|
36
|
-
|
|
40
|
+
If nothing is found, say so in one line. Walks and reviews run without design docs; iamu does not write one for the team.
|
|
37
41
|
|
|
38
|
-
|
|
39
|
-
2. Ask the five intent questions, one at a time, each with a suggested answer you derive from the bundle (the domain, who the people are, what the tokens and components already say). The user accepts, edits or skips each:
|
|
40
|
-
- What should using the product feel like, and for whom?
|
|
41
|
-
- Products whose look or way of working you want to be close to.
|
|
42
|
-
- Products, patterns or a look you never want.
|
|
43
|
-
- How dense and how plain-spoken, and does it differ by role?
|
|
44
|
-
- What must never happen to a person using it?
|
|
45
|
-
3. Run `iamu design draft --answers '<json with keys feel, aim_for, avoid, density, never>' --json`. Dispatch a subagent (thorough tier) with the prompt file `prompt_file_abs` as its only context. It answers with the Markdown doc.
|
|
46
|
-
4. Write the answer to `answer_file_abs` (from the draft result) and record it: `iamu design record --file <answer_file_abs>`. If it reports problems (a rule under an unknown heading, a missing `Source:` or `Test:`, wrong numbering), send the errors back to the writer once and record again.
|
|
47
|
-
5. Show the result: the opening statement, then one line per rule (`P1 Nobody should feel stupid · intent`), grouped by layer. Every rule is `intent` until walks back or challenge it.
|
|
42
|
+
### A2. Point agents at the docs
|
|
48
43
|
|
|
49
|
-
|
|
44
|
+
Offer `iamu design link-agents` (adds a short block to `CLAUDE.md` listing the recorded docs; `--file AGENTS.md` for other agents). Only with the user's yes. When the file already has an older design block, `iamu design link-agents --refresh` rewrites it, again only with a yes.
|
|
50
45
|
|
|
51
|
-
|
|
46
|
+
### A3. Migrate the legacy doc
|
|
52
47
|
|
|
53
|
-
|
|
48
|
+
A project set up with an earlier version keeps its rules in `iamu/design.md`, with ids (`P4`) and field lines. It keeps working as it is. Offer the move once:
|
|
54
49
|
|
|
55
|
-
|
|
50
|
+
1. Run `iamu design migrate --move-to DESIGN.md --json` (or the path the user prefers). It changes nothing and prints the plan: the files it would record, the old ids it keeps so older proposals still resolve, and the plain doc it would write (no iamu field lines or ids, the rules' checks gathered into a Review Checklist).
|
|
51
|
+
2. Show the plan in a few lines and ask: **move it** to a plain doc the team owns, **keep** `iamu/design.md` as it is, or **later**.
|
|
52
|
+
- Move: `iamu design migrate --move-to <path> --apply`. It refuses a target that already exists.
|
|
53
|
+
- Keep: `iamu design migrate --apply`. It records the decision, so the offer is not repeated.
|
|
54
|
+
- Later: do nothing.
|
|
56
55
|
|
|
57
56
|
## B. Review a surface
|
|
58
57
|
|
|
59
58
|
A surface is a page with its states and the flows through it. Review a surface, not a single finding: a page that collected eight separate fixes needs to be seen whole.
|
|
60
59
|
|
|
61
|
-
1. Run `iamu design review <target> --json`. The target is a path (`/request`), a finding (its page), or a direction slug (the pages its findings are on). It writes a prompt with the surface's dossier: who passes through and what they said there, open problems with each person's need, strengths, fixes already tried and whether they held, what was dismissed, and the design
|
|
62
|
-
2.
|
|
63
|
-
3. Write the answer to `answer_file_abs` (from the review result) and record it: `iamu design review-record <target> --file <answer_file_abs>`. Show anything it reports as `rejected` or in `warnings` (a dropped proposal,
|
|
60
|
+
1. Run `iamu design review <target> --json`. The target is a path (`/request`), a finding (its page), or a direction slug (the pages its findings are on). It writes a prompt with the surface's dossier: who passes through and what they said there, open problems with each person's need, strengths, fixes already tried and whether they held, what was dismissed, and the design docs that apply to the page. If it returns `warnings` (an installed prompt that differs from the shipped one), show them.
|
|
61
|
+
2. Tell the user in a line or two what the reviewer looks at, from the result: the surface and its `paths`, how many visitors, open problems and strengths it weighs, and whether there are design docs to judge against. Then dispatch a subagent (thorough tier) **with browser access** and the prompt file (`prompt_file_abs`) as its only context. It opens `target_url` + the path, signs in as the testability notes say, opens menus and states, compares with the walks' screenshots, and answers with JSON. Run it in the foreground where your host allows, so its progress shows. If it runs in the background, say what it is doing while you wait, and do not end your turn with only a wait notice.
|
|
62
|
+
3. Write the answer to `answer_file_abs` (from the review result) and record it: `iamu design review-record <target> --file <answer_file_abs>`. Show anything it reports as `rejected` or in `warnings` (a dropped proposal, a rule not found): never let it disappear silently.
|
|
64
63
|
4. Present, in this order:
|
|
65
64
|
- the summary (what the surface is for, for whom, how well it serves them);
|
|
66
|
-
- issues as a table: severity · title · evidence,
|
|
65
|
+
- issues as a table: severity · title · evidence, seen or taste · where · rule it breaks. Taste is labelled as taste, never mixed with evidence;
|
|
67
66
|
- **Keep** and **Change** from the brief, with whom each change serves;
|
|
68
|
-
- conflicts between a rule and a person's need, and proposed
|
|
67
|
+
- conflicts between a rule and a person's need, and proposed doc edits (they are now in `iamu design proposals`; offer **C**).
|
|
69
68
|
5. Offer the fix loop (D) for the changes, starting with the one that serves the most people.
|
|
70
69
|
|
|
71
70
|
The review file is `iamu/design/reviews/<surface>.md`. Its issues do not count toward any scenario's verdict.
|
|
72
71
|
|
|
73
72
|
## C. Decide proposed edits
|
|
74
73
|
|
|
75
|
-
Run `iamu design proposals --json
|
|
76
|
-
|
|
77
|
-
- `iamu design accept <slug>` applies it to `iamu/design.md`: a backed rule becomes `evidence`, a challenged rule is marked `challenged` with the reason and a proposed wording, a new rule is added as `evidence`.
|
|
78
|
-
- `iamu design reject <slug>`: it is not proposed again.
|
|
79
|
-
|
|
80
|
-
Accepting a **challenge** marks the rule `challenged`, with the reason and the proposed wording; the rule stays in force until a person rewrites it. Right after accepting one, show the proposed wording and offer to apply it now: edit the rule in `iamu/design.md` (new wording and test, `Source: intent`, remove the `Challenged:` and `Proposed:` lines), then record it with `iamu design record --file <project root>/iamu/design.md`.
|
|
74
|
+
Run `iamu design proposals --json` and decide each open proposal exactly as the `iamu-findings` skill describes under "Then the proposed edits to the design docs": show its Why, the rule and file it changes, the findings it rests on, and Before → After, then ask accept, edit After then accept, reject, or later. It lists open proposals first, then stale ones (with why: the Before is gone, or occurs on several lines), then legacy ones; `--all` adds decided ones.
|
|
81
75
|
|
|
82
76
|
## D. The fix loop
|
|
83
77
|
|
|
84
78
|
Fix by looking, not by hoping. For one finding:
|
|
85
79
|
|
|
86
|
-
1. `iamu fix-brief <finding> --json` (a slug, id, or id prefix). It gives the **before** (page, step and screenshot where the persona hit it), what they **needed**, the full recommendation, the design rules tied to this finding with
|
|
80
|
+
1. `iamu fix-brief <finding> --json` (a slug, id, or id prefix). It gives the **before** (page, step and screenshot where the persona hit it), what they **needed**, the full recommendation, the design rules tied to this finding by name 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 about it, the strengths on the same page that must keep working, other open problems there, fixes already tried there, the direction it belongs to, where to save screenshots (`shots_dir`), and the **loop** itself.
|
|
87
81
|
2. Follow `loop` step by step. Save before and after screenshots in `shots_dir` and show their absolute paths when you report.
|
|
88
82
|
3. 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
83
|
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.
|
|
@@ -91,7 +85,8 @@ Fix by looking, not by hoping. For one finding:
|
|
|
91
85
|
## Guidelines
|
|
92
86
|
|
|
93
87
|
- **Links a terminal can open.** Terminals open only what they can see. Write web addresses in full (`https://…`), never hidden behind link text, and files as absolute paths (the project root plus the path), never relative. Name scenarios, personas and findings by slug in backticks; they need no link.
|
|
94
|
-
- **The project's
|
|
95
|
-
- **
|
|
88
|
+
- **The project's docs come first,** then platform conventions and accessibility, then general craft. Never invent a style the team has not chosen.
|
|
89
|
+
- **The docs are the team's.** Change one only through an accepted proposal, never by hand on iamu's initiative.
|
|
90
|
+
- **Evidence and taste stay labelled.** Both are useful; only evidence proposes a change to the docs.
|
|
96
91
|
- **A rule that hurts someone is reported, not silently broken or silently followed.** A person decides.
|
|
97
92
|
- **Prefer removing, merging and hiding by role to adding.**
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: iamu-findings
|
|
3
|
-
description: Use when triaging, reviewing, listing, or resolving findings, bugs,
|
|
3
|
+
description: Use when triaging, reviewing, listing, or resolving findings (what personas experienced and what the designer saw), bugs, friction, or issues discovered during walkthroughs, or when the user asks "what broke?", "show findings", or "review issues".
|
|
4
4
|
generatedBy: __IAMU_VERSION__
|
|
5
5
|
---
|
|
6
6
|
|
|
@@ -61,21 +61,27 @@ 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`, `scenario`, `type`, `severity`, `title`, `where` (page and step), `recommendation` (the advisor's, or null) and `fix_state`. 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.
|
|
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: say on every row who found it ("Ana found" / "the designer found (seen)"), 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
|
|
|
68
68
|
**Fixed is not proven.** `triage_status: addressed` means a fix was applied. `iamu findings --json` adds `fix_state` to each addressed finding, derived from local runs:
|
|
69
69
|
|
|
70
|
-
- `awaiting_rerun` — no later run of the scenario has re-checked it. Shown as "awaiting re-run".
|
|
70
|
+
- `awaiting_rerun` — a persona finding: no later run of the scenario has re-checked it. Shown as "awaiting re-run".
|
|
71
|
+
- `awaiting_review` — a designer finding: no designer's review of its page since the fix. A re-run's designer's review checks it, or a page check (below).
|
|
71
72
|
- `verified` — a run that started after the fix saw it working (the since-last-run delta's "Resolved", backed by steps).
|
|
72
73
|
- `recurred` — a run after the fix recorded it again: the fix did not hold. Reopen it (`iamu triage <slug> --status open`).
|
|
73
74
|
|
|
74
|
-
A run that simply did not come across a finding proves nothing — never call a fix verified because it was not seen.
|
|
75
|
+
A run that simply did not come across a finding proves nothing — never call a fix verified because it was not seen. The eye that raised a finding confirms it: a re-run confirms the persona's findings, a designer's review the designer's; never the other way round.
|
|
76
|
+
|
|
77
|
+
**Checking whether something is fixed, on request.** When the user asks in plain words ("is the pending colour fixed?", "check the approvals page"), find the findings meant and route by `source`:
|
|
78
|
+
- **A designer finding:** check its page. Run `iamu design review <page> --blind` and have a fresh reviewer with a browser answer it (it is not told which findings were open: the check is blind), record it with `iamu design review-record <page> --file <answer>`, then `iamu design review-match <page> --json`; give its prompt to a fresh agent and record with `iamu design review-match-record <page> --file <answer>` (when it says `nothing_new`, record `--data '{"matches":[]}'`). Report what is still there and what was not seen again. While the result says `provisional: true`, say "not seen again (provisional)" and never "fixed": the check is not trusted yet.
|
|
79
|
+
- **A persona finding:** a screenshot cannot say whether the person still gets stuck. Offer a re-run of the scenario that raised it (`iamu-run <scenario>`).
|
|
80
|
+
- **A persona finding with design causes:** the re-run decides; a page check of its design cause is supporting evidence only. 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.
|
|
75
81
|
|
|
76
82
|
**Directions before findings.** Run `iamu directions --json`. Directions are structural changes the advisor proposed after a walk, each absorbing several findings (sometimes across scenarios), with the people it could hurt and the scenarios to re-run. If any are `proposed` or `accepted`, show them above the tally, one line each: `◆ <title> (<size>, <status>) · absorbs <N> findings in <S> scenarios · could hurt: <scenarios or "none predicted">`. Offer them first: taking a direction fixes its findings together, which beats patching them one by one. For each the user can **take it** (`iamu directions set <slug> --status accepted`, then implement it, or hand it to planning when it is `large`), take **only the local fixes** (leave it `proposed`, triage its findings below), **defer**, or **reject** (`--status rejected`; it is never proposed again). When a taken direction is implemented, mark it `done` and offer `iamu-run` for every scenario in its `verify` list. Reach is a prediction: say "likely" and "could", never "will".
|
|
77
83
|
|
|
78
|
-
**Design
|
|
84
|
+
**Design doc proposals.** Run `iamu design proposals --json` and note the open ones: edits the advisor, the designer (after a run, or reviewing a page) or a design review proposed to the project's design docs (a rule whose application hurt someone, or something the docs do not cover). They are decided after the findings (step 5), next to the evidence that raised them. When several open findings sit on one page, offer a design review of that page (`iamu-design`, review a surface) before fixing them one by one. *The designer's review of a run looks at the screens one run's persona saw, after every run; a designer's review of a page looks at one page live, across all its visitors, when asked.*
|
|
79
85
|
|
|
80
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.
|
|
81
87
|
|
|
@@ -90,7 +96,7 @@ Render it as Markdown, not inside a code fence, so the tables render. Start with
|
|
|
90
96
|
|---|---|---|---|---|
|
|
91
97
|
| 1 | <title> | **Critical** | <where> | <first sentence of recommendation, or — > |
|
|
92
98
|
|
|
93
|
-
Number findings continuously across scenarios, so "fix 3" means one finding. Sort each table worst first (critical → major → minor →
|
|
99
|
+
Number findings continuously across scenarios, so "fix 3" means one finding. Sort each table worst first (critical → major → minor → nit; incorrect, hinders and missing before irrelevant). Leave strengths (`helps`) out of the tables. Keep the "What to do" cell to one sentence: the full recommendation belongs in the finding card (step 3).
|
|
94
100
|
|
|
95
101
|
Ask the user how they would like to triage:
|
|
96
102
|
|
|
@@ -234,6 +240,8 @@ When all findings in the queue are triaged, present what was decided, one row pe
|
|
|
234
240
|
| 3 | <title> | Defer | Revisit after the next run |
|
|
235
241
|
| 4 | <title> | Dismissed | <reason>; guidance `<slug>` taught to future walks |
|
|
236
242
|
|
|
243
|
+
**Then the proposed edits to the design docs.** For each open proposal from `iamu design proposals --json`, show its Why, the rule and file it changes, the findings it rests on, and the change as two short `text` blocks, Before then After. Ask: **accept** (`iamu design accept <slug>`: it replaces exactly the Before in the doc with the After), **edit After then accept** (change the After block in `iamu/design/proposals/<slug>.md` to the user's wording first), **reject** (`iamu design reject <slug>`), or **later**. A `stale` proposal, or an accept that stops with `before_not_found`, is offered only as edit (rewrite its Before to the doc's current text and its After to match, then accept) or reject. One marked as legacy (the earlier format) can only be rejected, or left for a later run to raise again. Never accept one on the user's behalf.
|
|
244
|
+
|
|
237
245
|
If `<N> > 0` findings were queued for fix:
|
|
238
246
|
- Prompt the user:
|
|
239
247
|
- If interactive tool available:
|
|
@@ -12,6 +12,8 @@ This skill resolves what scenario to run following a clear **Target Scenario Res
|
|
|
12
12
|
2. **Active conversational context:** When `$ARGUMENTS` is empty or generic (e.g. "it", "that", "this", "run it", "walk it", "go"), and a scenario was created, modified, staged, or discussed in the active session — immediately resolve to that active scenario without prompting or re-scanning.
|
|
13
13
|
3. **No argument & No active session scenario:** Check unfinished runs, then present a prioritized pickable list (reruns needing proof first, then drafts and ready-to-run).
|
|
14
14
|
|
|
15
|
+
**`--no-ux`:** when `$ARGUMENTS` contains `--no-ux`, take it out before resolving the scenario and skip the designer's review (step C3) for this run only: after A, record `iamu designer-record <run-id> --skipped "--no-ux"` so the report says it was skipped. There is no project setting for it: every other run gets a designer's review.
|
|
16
|
+
|
|
15
17
|
$ARGUMENTS
|
|
16
18
|
|
|
17
19
|
## Prerequisites
|
|
@@ -264,7 +266,7 @@ The result's `walker_prompt` is the walker's entire prompt (also persisted at `w
|
|
|
264
266
|
|
|
265
267
|
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.
|
|
266
268
|
|
|
267
|
-
**Subagent
|
|
269
|
+
**Subagent capability fencing:**
|
|
268
270
|
- **Tool Whitelist:** If the host allows tool restriction, grant the walker ONLY the browser driving tools (`iamu browse` or browser MCP) and read-only inspection.
|
|
269
271
|
- **Tool Blacklist:** Strictly strip file write/edit tools (`write_to_file`, `replace_file_content`, patch/edit tools, and source git commits). The walker is an observer, never a developer.
|
|
270
272
|
- **Child Session Suppression:** The walker must never execute parent workflow routines (`iamu init`, `iamu triage`, `iamu new`). All steps, findings, and summaries are recorded atomically via `iamu browse step`, `iamu new-finding`, and `iamu summary`.
|
|
@@ -338,7 +340,7 @@ iamu new-finding --scenario <slug> --run <run-id> --title "Short title" --type h
|
|
|
338
340
|
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.
|
|
339
341
|
|
|
340
342
|
Valid `--type` values: `helps`, `hinders`, `missing`, `irrelevant`, `incorrect`.
|
|
341
|
-
Valid `--severity` values: `critical`, `major`, `minor`, `
|
|
343
|
+
Valid `--severity` values: `critical`, `major`, `minor`, `nit`.
|
|
342
344
|
Valid `--task-impact` values (effect on the persona's task): `blocks`, `impairs`, `slows`, `neutral`, `accelerates`, `enables`. A `helps` finding is never `blocks`/`impairs`/`slows`; a problem is never `accelerates`/`enables`.
|
|
343
345
|
Valid `--confidence` values: `high`, `medium`, `low` (use `low` when it may be a tooling limitation).
|
|
344
346
|
|
|
@@ -354,7 +356,7 @@ iamu summary <run-id> --worked "What worked 1" --worked "What worked 2" --questi
|
|
|
354
356
|
|
|
355
357
|
**Post-walk pipeline (MANDATORY — do NOT skip any step):**
|
|
356
358
|
|
|
357
|
-
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.
|
|
359
|
+
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; the designer's review (C3) starts right after A and runs beside them.
|
|
358
360
|
|
|
359
361
|
> **CRITICAL EXECUTION RULE (Zero Host File Tools):**
|
|
360
362
|
> Never invoke host edit or write tools (`write_to_file`, `create_file`, `replace_file_content`, etc.) on any files in `iamu/` (including run artifacts, steps, findings, outlines, personas, scenarios, or guidance). All files in `iamu/` must be generated and modified exclusively via `iamu` CLI commands (`iamu new`, `iamu set`, `iamu step`, `iamu new-finding`, `iamu evaluate-record`, `iamu match-record`, etc.). If an entity needs a field updated (e.g. adding a capability to an outline), run `iamu set <type> <slug> ...` instead of editing files by hand. Record subagent JSON outputs directly through the CLI using `--data '<json>'` (or pipe via stdin).
|
|
@@ -413,6 +415,22 @@ Each entry is checked on its own. Entries that come back rejected (an invented f
|
|
|
413
415
|
|
|
414
416
|
The judge (C) and the advisor (C2) are independent, so their subagents may run in parallel, but run `evaluate-record` and `advise-record` one after the other: both rewrite finding files. On a host without subagents, run the advise prompt yourself inline and record it the same way.
|
|
415
417
|
|
|
418
|
+
**C3. Designer's review.** For every run (unless `--no-ux` was given), start it as soon as A is done:
|
|
419
|
+
|
|
420
|
+
```bash
|
|
421
|
+
iamu designer <run-id> --json
|
|
422
|
+
```
|
|
423
|
+
|
|
424
|
+
If `needed` is `false` (`reason` is `blocked`, `no_screens` or `already_recorded`), skip it. Otherwise dispatch a fresh subagent that can look at images (the **thorough** model tier) with `iamu/.runs/<run-id>/designer_prompt.md` as its only context, alongside the matcher (B), the judge (C) and the advisor (C2) where the host allows. It reviews the screens the persona saw as the product's designer would: against the project's design docs when they apply to this run (`judged_against: design-docs`), else against general craft, across the whole screen. What it finds are designer findings: judgement, never the persona's experience, and never counted with the persona's findings or in the verdict.
|
|
425
|
+
|
|
426
|
+
Nothing waits for it: the advisor never waits for the designer, and D and E go ahead without it. When its answer arrives, record it:
|
|
427
|
+
|
|
428
|
+
```bash
|
|
429
|
+
iamu designer-record <run-id> --data '<raw_designer_json>'
|
|
430
|
+
```
|
|
431
|
+
|
|
432
|
+
Never run two record commands at the same time: `match-record`, `evaluate-record` and `advise-record` keep their order, and `designer-record` runs between them when its answer arrives. It re-derives the report and never touches the persona's finding files. If the subagent fails or its answer is rejected, retry once, then continue without it and record `iamu designer-record <run-id> --skipped "the designer failed"`. If `designer-record` says `rederive_failed`, run the `fix` it prints. On a host without subagents, answer the prompt yourself after C2 and record with `iamu designer-record <run-id> --by-orchestrator --data '<raw_designer_json>'`; the report then says the review was not written by a separate agent. Keep the result's `proposals` for step 5.
|
|
433
|
+
|
|
416
434
|
**D. Read the completed canonical.** Read `iamu/.runs/<run-id>/canonical.json` for the final data including the verification delta (if a prior run exists) and `analysis.directions` (if the advisor ran). Use this for step 5 presentation.
|
|
417
435
|
|
|
418
436
|
**E. Publish (linked mode only).** Upload the completed run, screenshots, verdicts, and findings in one atomic sync:
|
|
@@ -431,7 +449,7 @@ It prints the URL only if the run is on the cloud; otherwise it exits 1 and says
|
|
|
431
449
|
|
|
432
450
|
In linked-no-credentials or local-only mode, skip E.
|
|
433
451
|
|
|
434
|
-
Only after A→E (with C2) are complete, proceed to step 5.
|
|
452
|
+
Only after A→E (with C2) are complete, proceed to step 5. If the designer has returned by then, record it first; if not, present without it and add the designer's review when it lands. If it lands after E, run `iamu sync --json` once more so the cloud report carries it.
|
|
435
453
|
|
|
436
454
|
### 4a. Walk methodology summary
|
|
437
455
|
|
|
@@ -473,7 +491,7 @@ For a persisting finding, put its qualifiers in brackets: the `shift` ("less sev
|
|
|
473
491
|
|---|---|---|---|---|
|
|
474
492
|
| 1 | <title> | **Major** | <where> | <first sentence or two of recommendation, or — > |
|
|
475
493
|
|
|
476
|
-
Mark a finding that persists from the last run with `(persists)` after its title. Strengths go on one line under the table: `✓ Strengths: <title>; <title>`.
|
|
494
|
+
Mark a finding that persists from the last run with `(persists)` after its title. When the designer gave a finding's design cause (a `summary.designer.issues` entry whose `design_cause_of` is that finding's `id`), add it under the row as `↳ Design cause (designer, <basis>): <what>`. Strengths go on one line under the table: `✓ Strengths: <title>; <title>`.
|
|
477
495
|
|
|
478
496
|
If `summary.directions` is non-empty:
|
|
479
497
|
|
|
@@ -485,9 +503,14 @@ If `summary.directions` is non-empty:
|
|
|
485
503
|
|
|
486
504
|
Reach is a prediction until those scenarios run again.
|
|
487
505
|
|
|
488
|
-
If `summary.
|
|
506
|
+
If `summary.designer` is set, add the **Designer's review**: the designer's judgement of these screens, never the persona's experience. Give its count apart from the persona's ("2 designer findings"), never one total.
|
|
507
|
+
- One line on what it was judged against: the design docs in `summary.designer.design_files`, or, when `judged_against` is `general-craft`, `Judged against general craft: recording the project's design docs makes this review sharper`, followed by the `hint` command `iamu designer` printed. Say so when `dispatch` is `inline` ("written by the orchestrator, less independent").
|
|
508
|
+
- The rule breaks (`summary.designer.rules_broken`), one line each: `"<rule>" (<file>) on <screen>, step <n>`, then `<rules_held> rules held`.
|
|
509
|
+
- The major and critical designer findings that are not a design cause (`summary.designer.issues` with no `design_cause_of`), one line each: `<id> · designer · <severity> · <basis> · <screen> · <title>`, with `breaks "<rule>"` when it breaks one; then the count of minor and nit ones in one line.
|
|
510
|
+
|
|
511
|
+
If `summary.observations` is non-empty, end with **Also worth knowing** (the advisor's notes): one bullet each, `Not walked: <title>` (coverage_gap) or `Feature risk: <title>` (feature_risk).
|
|
489
512
|
|
|
490
|
-
If the advise step proposed design
|
|
513
|
+
If the advise step or the designer proposed design doc edits (`design_proposals` in the advise result, `proposals` in the designer result), add one line: `Design docs: <N> proposed edits — decided after the findings`. They wait for a person; never apply them yourself.
|
|
491
514
|
|
|
492
515
|
If `summary.setupNotes` is non-empty, add **Test setup** with one bullet each. These are doubts about the test, not the product (missing data, an account that cannot see enough, a date the scenario assumes). Offer the `iamu-stage` skill to fix the setup before the next run; a finding that rests on a setup doubt may not be real.
|
|
493
516
|
|
|
@@ -498,7 +521,7 @@ Do NOT prompt the user with a generic "How would you like to proceed?" multiple-
|
|
|
498
521
|
|
|
499
522
|
- **If `summary.findings` is empty (no problems):**
|
|
500
523
|
Output: "No problems found in this run." The verdict above still stands on its own: a run without findings can still answer NO.
|
|
501
|
-
Do not enter triage.
|
|
524
|
+
Do not enter finding triage for the persona; when the designer's review has major or critical designer findings, triage those (step 6 lists them the same way), then the proposed design doc edits.
|
|
502
525
|
|
|
503
526
|
- **If `summary.findings` is not empty:**
|
|
504
527
|
Output the Executive Scorecard above to chat FIRST, and advance IMMEDIATELY to triage on **Finding #1 of <total>** (Step 6 below) in the same turn. The user can choose to queue to fix, queue all remaining fixes (batch accept), dismiss, or discuss directly from Finding #1.
|
|
@@ -513,6 +536,8 @@ The conversation is the triage surface. Do NOT eject the user to manual CLI comm
|
|
|
513
536
|
- **Defer** (leave `proposed`) or **reject** (`iamu directions set <slug> --status rejected`; it will not be proposed again).
|
|
514
537
|
After a taken direction lands, mark it `done` and re-run the scenarios in its `verify` list, not only this one.
|
|
515
538
|
|
|
539
|
+
**One list, worst first.** Triage goes through one list: every persona problem finding, and the designer findings at `major` or above that are not a design cause, ordered by severity (critical, major, minor, nit), persona before designer at equal severity. A persona finding and its design causes are one card and one decision. Number the cards across the whole list ("#3/7"). Every card opens with whose finding it is: "**Ana found:**" for a persona finding, "**The designer found (<basis>):**" for a designer finding. Severity means harm to the person for both.
|
|
540
|
+
|
|
516
541
|
#### A. Guided One-by-One Review ("walk through them" / "review one by one")
|
|
517
542
|
When the user asks to review findings one by one:
|
|
518
543
|
1. **Present Finding #N in a scannable format (High Visual Hierarchy):**
|
|
@@ -532,6 +557,18 @@ When the user asks to review findings one by one:
|
|
|
532
557
|
```
|
|
533
558
|
*(For `type: "helps"` findings, omit `**❌ Problem:**` and `**💡 Recommendation:**`; render `**✓ Strength:** <Observation>`)*.
|
|
534
559
|
|
|
560
|
+
When the persona finding has design causes, add under the problem: `**↳ Design cause** (<id>, the designer, <basis>): <what> <why>` and `breaks "<rule>"` when it breaks one. It is decided with the finding.
|
|
561
|
+
|
|
562
|
+
A designer finding's card:
|
|
563
|
+
```markdown
|
|
564
|
+
### Finding #<N>/<total> [<SEVERITY>] — <title> · designer
|
|
565
|
+
> **The designer found (<basis>):** on `<screen>` (Step <N>) · <breaks "<rule>" (<file>) when set>
|
|
566
|
+
> **Evidence:** <run_dir>/screenshots/step-<N>.png
|
|
567
|
+
|
|
568
|
+
**What the designer saw:** <what> <why>
|
|
569
|
+
```
|
|
570
|
+
Never write it in the persona's voice, never quote the persona for it, and say "taste" plainly when its basis is taste.
|
|
571
|
+
|
|
535
572
|
If the project is cloud-linked, include the direct link to the walkthrough in Iamu Cloud (from `iamu open <run-id> --print`).
|
|
536
573
|
|
|
537
574
|
Followed immediately by the decision prompt:
|
|
@@ -591,6 +628,9 @@ When the user asks to review findings one by one:
|
|
|
591
628
|
```text
|
|
592
629
|
Triage Complete: <K> queued for fix, <D> dismissed, <O> kept open/deferred.
|
|
593
630
|
```
|
|
631
|
+
A designer finding is decided with the same choices: **queue to fix** (fixed from `iamu fix-brief <run-id>#D<n> --json` and its `loop`; the next designer's review of that screen shows whether it held), **dismiss** (`iamu designer-dismiss <run-id> D<n> --reason "<why>"`: later reviews do not raise it again unless it gets worse, and no rule is taught to the walker), or **later** (record nothing; it stays in the report). Minor and nit designer findings stay in the report and are not offered.
|
|
632
|
+
|
|
633
|
+
**Then the proposed edits to the design docs**, before any fixes: decide each open one exactly as the `iamu-findings` skill describes under "Then the proposed edits to the design docs" (Why, the rule and file, the findings, Before → After; accept, edit After then accept, reject, or later). Never accept one on the user's behalf.
|
|
594
634
|
If `<K> > 0` (findings are queued for fix):
|
|
595
635
|
- Prompt the user to execute the batch:
|
|
596
636
|
- If interactive tool available:
|
|
@@ -604,7 +644,7 @@ When the user asks to review findings one by one:
|
|
|
604
644
|
Proceeding with code fixes — say "re-run first" or "done for now" to adjust.
|
|
605
645
|
|
|
606
646
|
- **Executing the queued fixes:**
|
|
607
|
-
When Option 1 is chosen, fix each queued finding in turn with the fix loop (`iamu fix-brief <slug>`, before and after screenshots of its page, helped / hurt / no visible change); findings on the same page go together as one change. Verify once at the end (run test/typecheck suite). Update each finding with `iamu triage <slug> --status addressed --note "<summary of fix>"`.
|
|
647
|
+
When Option 1 is chosen, fix each queued finding in turn with the fix loop (`iamu fix-brief <slug>`, before and after screenshots of its page, helped / hurt / no visible change); findings on the same page go together as one change. Queued designer findings are fixed the same way from `iamu fix-brief <run-id>#D<n>`; mark each by the `finding.slug` its brief gives (a later designer's review of that screen confirms it, not the re-run). Verify once at the end (run test/typecheck suite). Update each finding with `iamu triage <slug> --status addressed --note "<summary of fix>"`.
|
|
608
648
|
Tell the user: "✓ Applied fixes for <K> findings. All marked addressed."
|
|
609
649
|
|
|
610
650
|
- Run `iamu validate --all`.
|
|
@@ -14,7 +14,7 @@ What this skill does, end to end:
|
|
|
14
14
|
- **Understand** — read the repo automatically to detect dev server, mock fixtures, external boundaries, domain stakes, and user roles.
|
|
15
15
|
- **Step 1: Safety & Testability Fence** — agree on the sandbox boundaries (`iamu/testability.md`) so the autonomous browser agent never leaks data or hits real external services.
|
|
16
16
|
- **Step 2: Project Domain & Description** — verify domain context and project description (`iamu/context.yml`) to ground UX evaluations.
|
|
17
|
-
- **Design
|
|
17
|
+
- **Design docs (skippable)** — record where the project's own design docs are (`iamu/design/sources.json`).
|
|
18
18
|
- **Step 3: Co-Design First Journey** — co-create a high-friction scenario, verify auth preconditions (`personas/`, `outlines/`, `scenarios/`), and validate.
|
|
19
19
|
- **Next Action** — copy-pasteable command to launch your first walkthrough.
|
|
20
20
|
- **Cloud (optional)** — link to Iamu Cloud if you want to share findings with your team.
|
|
@@ -162,6 +162,10 @@ Explain the purpose of project context: traditional tests only assert button cli
|
|
|
162
162
|
|
|
163
163
|
Present the discovered domain and project description. Do NOT introduce or ask the user to approve personas or roles at this stage — personas are cast later when designing specific test journeys.
|
|
164
164
|
|
|
165
|
+
**Describe the product, not the environment you explored.** Persona drafting and the advisor read these fields and the description as the truth about the product. Write them as the product its people use in their real work. Leave out everything about how this copy runs, because Step 1 already recorded it in `testability.md`:
|
|
166
|
+
- **Data and build:** seeded, mocked, fixture, sample or fake data; demo, prototype or staging status; where data is stored; frontend or backend architecture; dev servers.
|
|
167
|
+
- **Seed numbers:** headcounts, named teams, stores or sites, and record counts taken from seed or fixture files describe the test data, not the customers. Say who the product is for in general terms ("small and mid-sized companies"). Rules and policies the code enforces (a notice period, an approval threshold) are product behaviour; keep them.
|
|
168
|
+
|
|
165
169
|
**Dual-Surface Prompting (Sequencing Rule):**
|
|
166
170
|
You MUST output the domain context and project description to the chat stream FIRST. In the SAME turn, invoke `ask_question` with the complete substantive project description embedded in the `question` argument so the reviewer can read the full text directly within the dialog modal:
|
|
167
171
|
|
|
@@ -220,7 +224,7 @@ Persist the domain context using `iamu set context` (never invoke host file crea
|
|
|
220
224
|
iamu set context \
|
|
221
225
|
--domain "<domain>" \
|
|
222
226
|
[--industry "<industry>"] \
|
|
223
|
-
--body "<The
|
|
227
|
+
--body "<The 1-paragraph project description, as confirmed>" \
|
|
224
228
|
--json
|
|
225
229
|
```
|
|
226
230
|
|
|
@@ -229,14 +233,15 @@ iamu set context \
|
|
|
229
233
|
|
|
230
234
|
---
|
|
231
235
|
|
|
232
|
-
### 4b. Optional: design
|
|
236
|
+
### 4b. Optional: design docs (quick, skippable)
|
|
233
237
|
|
|
234
|
-
|
|
238
|
+
The team's design docs are part of the product's context, like the domain. Iamu reads them wherever they are and never edits them on its own. Run `iamu design detect --json`.
|
|
235
239
|
|
|
236
|
-
- **Found
|
|
237
|
-
- **
|
|
240
|
+
- **Found docs** (a `DESIGN.md` in any format, design-system, brand, voice or interaction docs, design sections of `CLAUDE.md` or `AGENTS.md` shown as `CLAUDE.md#<heading>`, a `PRODUCT.md`, token files, a component library): list them once, one line each (kind, path). Show a candidate with a `note` (tokens in a template, export or fixture folder) with its note, unticked. Ask once whether to record them; the user may drop some or add others. On yes, `iamu design sources <paths…>` (in a monorepo, `--applies-to` with the URL prefix or the app's folder each doc covers).
|
|
241
|
+
- **A legacy `iamu/design.md`** (`iamu design status --json` shows `legacy.doc` and no `legacy.migrated_at`): fold it into the same single question. Run `iamu design migrate --json` first, and offer three answers next to the files: **move it** to a plain `DESIGN.md` the team owns (`iamu design migrate --move-to DESIGN.md --apply`), **keep** `iamu/design.md` as it is (`iamu design migrate --apply`, which records the choice so it is not offered again), or **not now** (run nothing; it is offered again next time). Only an explicit "keep" runs `--apply` without a move.
|
|
242
|
+
- **Nothing found:** say so in one line and continue. Walks run without design docs.
|
|
238
243
|
|
|
239
|
-
|
|
244
|
+
Do not assess or draft design docs here. Never block setup on this step.
|
|
240
245
|
|
|
241
246
|
---
|
|
242
247
|
|
|
@@ -337,7 +342,7 @@ Render the output:
|
|
|
337
342
|
iamu/
|
|
338
343
|
├── testability.md [safety fence active: <target_url>]
|
|
339
344
|
├── context.yml [domain: <domain>]
|
|
340
|
-
├── design.
|
|
345
|
+
├── design/sources.json [<N> design docs] (only when recorded)
|
|
341
346
|
├── personas/
|
|
342
347
|
│ └── <persona-slug>.md
|
|
343
348
|
├── outlines/
|
|
@@ -353,7 +358,7 @@ Next step:
|
|
|
353
358
|
Other commands when you're ready:
|
|
354
359
|
• iamu-new Draft a scenario for a different product flow
|
|
355
360
|
• iamu-propose Brainstorm high-risk workflows and blind spots
|
|
356
|
-
• iamu-design
|
|
361
|
+
• iamu-design Record the project's design docs, review a page, decide proposed edits
|
|
357
362
|
• iamu doctor Diagnose test environment and target health
|
|
358
363
|
<If cloud_linked: true>
|
|
359
364
|
• iamu sync Sync completed runs and findings to Iamu Cloud
|
package/dist/templates.d.ts
CHANGED
|
@@ -9,9 +9,15 @@ export declare function getTemplatesRoot(): string;
|
|
|
9
9
|
export declare function getTemplateDir(subdir: "skills" | "prompts"): string;
|
|
10
10
|
export declare function getTemplateFile(subdir: "skills" | "prompts", filename: string): string;
|
|
11
11
|
/** Prompt templates `iamu init` installs and `iamu update` refreshes in `iamu/.prompts/`. */
|
|
12
|
-
export declare const PROMPT_FILES: readonly ["walk.md", "persona.md", "outline.md", "combine.md", "complete.md", "evaluate.md", "advise.md", "design-draft.md", "design-review.md"];
|
|
12
|
+
export declare const PROMPT_FILES: readonly ["walk.md", "persona.md", "outline.md", "combine.md", "complete.md", "evaluate.md", "advise.md", "design-draft.md", "design-review.md", "design-review-match.md", "designer.md"];
|
|
13
13
|
/**
|
|
14
14
|
* A prompt as the project has it: its `iamu/.prompts/<name>` copy (which
|
|
15
15
|
* a team may tune), else the bundled template.
|
|
16
16
|
*/
|
|
17
17
|
export declare function readInstalledPrompt(projectRoot: string, name: (typeof PROMPT_FILES)[number]): string;
|
|
18
|
+
/**
|
|
19
|
+
* A warning when the project's `iamu/.prompts/<name>` differs from the
|
|
20
|
+
* bundled template: answers written from an older method may cite rules
|
|
21
|
+
* by id or propose in an old format. Null when it matches or is absent.
|
|
22
|
+
*/
|
|
23
|
+
export declare function installedPromptWarning(projectRoot: string, name: (typeof PROMPT_FILES)[number]): string | null;
|
package/dist/ui/html-report.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { type CheckOutcome, type RunChecks } from "@iamu-dev/local-store";
|
|
1
|
+
import { type CheckOutcome, type RunChecks, type CanonicalAnalysis, type CanonicalDesigner } from "@iamu-dev/local-store";
|
|
2
2
|
export interface HtmlReportHighlight {
|
|
3
3
|
targetBox: {
|
|
4
4
|
x: number;
|
|
@@ -38,6 +38,10 @@ export interface HtmlReportFinding {
|
|
|
38
38
|
title: string;
|
|
39
39
|
type: string;
|
|
40
40
|
severity?: string | null;
|
|
41
|
+
/** What the walker filed, when the advisor's check changed the severity. */
|
|
42
|
+
filedSeverity?: string | null;
|
|
43
|
+
/** Why the advisor changed it. */
|
|
44
|
+
severityWhy?: string | null;
|
|
41
45
|
uiFact?: string | null;
|
|
42
46
|
consequence?: string | null;
|
|
43
47
|
recommendation?: string | null;
|
|
@@ -102,6 +106,10 @@ export interface HtmlReportData {
|
|
|
102
106
|
}>;
|
|
103
107
|
directions: string[];
|
|
104
108
|
} | null;
|
|
109
|
+
/** The designer's review; never counted with the persona's findings. */
|
|
110
|
+
designer?: CanonicalDesigner | null;
|
|
111
|
+
/** The advisor's directions and notes, when the run was advised. */
|
|
112
|
+
analysis?: CanonicalAnalysis | null;
|
|
105
113
|
}
|
|
106
114
|
export declare function generateHtmlReport(data: HtmlReportData): string;
|
|
107
115
|
/**
|
package/dist/ui/report-view.d.ts
CHANGED
|
@@ -1,9 +1,12 @@
|
|
|
1
|
+
import { type CanonicalDesigner } from "@iamu-dev/local-store";
|
|
1
2
|
export type VerdictLabel = "YES" | "PARTIAL" | "NO" | "PENDING" | "BLOCKED";
|
|
2
3
|
export interface RunFindingRow {
|
|
3
4
|
id: string;
|
|
4
5
|
/** Finding file slug, for `iamu triage <slug>`; null when the file is gone. */
|
|
5
6
|
slug: string | null;
|
|
6
7
|
severity: string | null;
|
|
8
|
+
/** What the walker filed, when the advisor's check changed the severity. */
|
|
9
|
+
filedSeverity?: string | null;
|
|
7
10
|
type: string;
|
|
8
11
|
title: string;
|
|
9
12
|
where: string | null;
|
|
@@ -18,6 +21,8 @@ export interface RunView {
|
|
|
18
21
|
situation: string;
|
|
19
22
|
completedAt: string | null;
|
|
20
23
|
steps: number;
|
|
24
|
+
/** How the walk ended (reached the goal, or stopped and why); null when blocked. */
|
|
25
|
+
ending?: string | null;
|
|
21
26
|
targetUrl: string | null;
|
|
22
27
|
/** Cloud link, or a note that the run is not synced; null when not linked. */
|
|
23
28
|
cloud: string | null;
|
|
@@ -69,6 +74,8 @@ export interface RunView {
|
|
|
69
74
|
} | null;
|
|
70
75
|
/** The walker's doubts about the test setup. */
|
|
71
76
|
setupNotes: string[];
|
|
77
|
+
/** The designer's review; null or absent without one. Never counted with findings. */
|
|
78
|
+
designer?: CanonicalDesigner | null;
|
|
72
79
|
}
|
|
73
80
|
export interface OverviewRun {
|
|
74
81
|
completedAt: string | null;
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@iamu-dev/iamu",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.6.0-beta.0",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"description": "Test your product as realistic personas — scenario-driven development CLI",
|
|
6
6
|
"license": "UNLICENSED",
|
|
@@ -68,8 +68,18 @@
|
|
|
68
68
|
"typecheck": "tsc --noEmit",
|
|
69
69
|
"test": "vitest run",
|
|
70
70
|
"test:coverage": "vitest run --coverage",
|
|
71
|
-
"eval:walkthroughs": "vitest run --config vitest.benchmark.config.ts",
|
|
72
|
-
"eval:gemini": "node .eval-dist/gemini-eval-cli.js",
|
|
71
|
+
"eval:walkthroughs": "node ../../scripts/paid-eval-guard.mjs && vitest run --config vitest.benchmark.config.ts",
|
|
72
|
+
"eval:gemini": "node ../../scripts/paid-eval-guard.mjs && node .eval-dist/gemini-eval-cli.js",
|
|
73
|
+
"eval:setup-context": "node ../../scripts/paid-eval-guard.mjs && npx -y promptfoo@0.124.1 eval -c evals/setup-context.yaml --no-cache --repeat 3",
|
|
74
|
+
"eval:design-draft": "node ../../scripts/paid-eval-guard.mjs && npx -y promptfoo@0.124.1 eval -c evals/design-draft.yaml --no-cache --repeat 2",
|
|
75
|
+
"eval:walker-severity": "node ../../scripts/paid-eval-guard.mjs && npx -y promptfoo@0.124.1 eval -c evals/walker-severity.yaml --no-cache --repeat 3",
|
|
76
|
+
"eval:design-guide-apply": "node ../../scripts/paid-eval-guard.mjs && npx -y promptfoo@0.124.1 eval -c evals/design-guide-apply.yaml --no-cache --repeat 3",
|
|
77
|
+
"eval:advisor-check": "node ../../scripts/paid-eval-guard.mjs && npx -y promptfoo@0.124.1 eval -c evals/advisor-check.yaml --no-cache --repeat 2",
|
|
78
|
+
"eval:ux-judge": "node ../../scripts/paid-eval-guard.mjs && npx -y promptfoo@0.124.1 eval -c evals/ux-judge.yaml --no-cache --repeat 10",
|
|
79
|
+
"eval:ux-judge-heldout": "node ../../scripts/paid-eval-guard.mjs && npx -y promptfoo@0.124.1 eval -c evals/ux-judge-heldout.yaml --no-cache --repeat 5",
|
|
80
|
+
"eval:ux-judge-counter": "node ../../scripts/paid-eval-guard.mjs && npx -y promptfoo@0.124.1 eval -c evals/ux-judge-counter.yaml --no-cache --repeat 5",
|
|
81
|
+
"eval:ux-judge-ablations": "node ../../scripts/paid-eval-guard.mjs && npx -y promptfoo@0.124.1 eval -c evals/ux-judge-ablations.yaml --no-cache --repeat 5",
|
|
82
|
+
"eval:designer-check": "node ../../scripts/paid-eval-guard.mjs && npx -y promptfoo@0.124.1 eval -c evals/designer-check.yaml --no-cache --repeat 10",
|
|
73
83
|
"pack:dry-run": "npm pack --dry-run"
|
|
74
84
|
}
|
|
75
85
|
}
|