@iamu-dev/iamu 0.0.0-stage → 0.2.0-beta.10
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +9 -0
- package/README.md +103 -2
- package/dist/adapters/claude-plugin.d.ts +13 -0
- package/dist/adapters/registry.d.ts +6 -0
- package/dist/adapters/types.d.ts +19 -0
- package/dist/bin.d.ts +2 -0
- package/dist/bin.js +22853 -0
- package/dist/build-info.d.ts +53 -0
- package/dist/cloud-url.d.ts +19 -0
- package/dist/commands/auth-http.d.ts +37 -0
- package/dist/commands/auth-project-choice.d.ts +74 -0
- package/dist/commands/auth-token-input.d.ts +21 -0
- package/dist/commands/auth.d.ts +84 -0
- package/dist/commands/browse-actions.d.ts +56 -0
- package/dist/commands/browse-driver.d.ts +117 -0
- package/dist/commands/browse.d.ts +170 -0
- package/dist/commands/cloud-push.d.ts +27 -0
- package/dist/commands/complete.d.ts +132 -0
- package/dist/commands/completion.d.ts +2 -0
- package/dist/commands/context.d.ts +58 -0
- package/dist/commands/credentials.d.ts +144 -0
- package/dist/commands/diff-filter.d.ts +11 -0
- package/dist/commands/doctor.d.ts +33 -0
- package/dist/commands/evaluate.d.ts +32 -0
- package/dist/commands/explore-crawl.d.ts +67 -0
- package/dist/commands/explore.d.ts +52 -0
- package/dist/commands/findings.d.ts +7 -0
- package/dist/commands/init.d.ts +16 -0
- package/dist/commands/instructions-walk.d.ts +69 -0
- package/dist/commands/list.d.ts +5 -0
- package/dist/commands/match.d.ts +13 -0
- package/dist/commands/mcp-config.d.ts +10 -0
- package/dist/commands/new-entity.d.ts +28 -0
- package/dist/commands/new-finding.d.ts +19 -0
- package/dist/commands/open.d.ts +8 -0
- package/dist/commands/port.d.ts +17 -0
- package/dist/commands/prune.d.ts +11 -0
- package/dist/commands/pull.d.ts +5 -0
- package/dist/commands/register-cloud.d.ts +5 -0
- package/dist/commands/register-findings.d.ts +5 -0
- package/dist/commands/register-project.d.ts +5 -0
- package/dist/commands/register-walkthrough.d.ts +5 -0
- package/dist/commands/register.d.ts +10 -0
- package/dist/commands/report.d.ts +3 -0
- package/dist/commands/serve.d.ts +11 -0
- package/dist/commands/skills.d.ts +34 -0
- package/dist/commands/start-run.d.ts +54 -0
- package/dist/commands/status.d.ts +3 -0
- package/dist/commands/step-numbering.d.ts +87 -0
- package/dist/commands/step.d.ts +95 -0
- package/dist/commands/sync.d.ts +6 -0
- package/dist/commands/triage.d.ts +21 -0
- package/dist/commands/update.d.ts +4 -0
- package/dist/commands/validate.d.ts +8 -0
- package/dist/commands/view-results.d.ts +9 -0
- package/dist/eval/gemini-eval-cli.d.ts +10 -0
- package/dist/eval/gemini-eval-cli.js +976 -0
- package/dist/eval/gemini-walker.d.ts +46 -0
- package/dist/eval/walkthrough-evaluator.d.ts +61 -0
- package/dist/index.d.ts +9 -0
- package/dist/index.js +22700 -0
- package/dist/sync-mcp/fatal.d.ts +42 -0
- package/dist/sync-mcp/server.d.ts +1 -0
- package/dist/sync-mcp/tools.d.ts +12 -0
- package/dist/templates/prompts/combine.md +69 -0
- package/dist/templates/prompts/complete.md +132 -0
- package/dist/templates/prompts/evaluate.md +64 -0
- package/dist/templates/prompts/outline.md +54 -0
- package/dist/templates/prompts/persona.md +40 -0
- package/dist/templates/prompts/walk.md +179 -0
- package/dist/templates/skills/iamu-findings.md +266 -0
- package/dist/templates/skills/iamu-new.md +263 -0
- package/dist/templates/skills/iamu-propose.md +157 -0
- package/dist/templates/skills/iamu-run.md +520 -0
- package/dist/templates/skills/iamu-setup.md +270 -0
- package/dist/templates/skills/iamu-status.md +71 -0
- package/dist/templates.d.ts +10 -0
- package/dist/ui/journey-diff.d.ts +3 -0
- package/dist/ui/json.d.ts +6 -0
- package/dist/ui/logger.d.ts +5 -0
- package/dist/ui/panic.d.ts +11 -0
- package/dist/ui/symbols.d.ts +11 -0
- package/dist/ui/table.d.ts +20 -0
- package/dist/ui/update-check.d.ts +6 -0
- package/dist/worktree-state.d.ts +49 -0
- package/package.json +72 -3
|
@@ -0,0 +1,266 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: iamu-findings
|
|
3
|
+
description: Triage findings from past walkthroughs — list open findings, review one in depth, act on them (keep / fix / dismiss / rescope). Terminal-complete; dashboard optional.
|
|
4
|
+
generatedBy: __IAMU_VERSION__
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
Review and triage findings from past walkthroughs. No-arg opens the full list grouped by scenario. With a finding slug or UUID, opens direct triage for that one.
|
|
8
|
+
|
|
9
|
+
Everything happens in the terminal — no dashboard required. Cloud-linked users get a footer link for rich UI review (step replay, screenshot side-by-side), but quick triage works entirely in chat.
|
|
10
|
+
|
|
11
|
+
$ARGUMENTS
|
|
12
|
+
|
|
13
|
+
## Prerequisites
|
|
14
|
+
|
|
15
|
+
Before starting, check that `iamu/` exists with findings to review. If `iamu/` does not exist, run `iamu init` and then `iamu-setup` first. If no findings exist yet, run a walkthrough first via `iamu-run`.
|
|
16
|
+
|
|
17
|
+
## Steps
|
|
18
|
+
|
|
19
|
+
### 1. Resolve the argument
|
|
20
|
+
|
|
21
|
+
Two paths based on `$ARGUMENTS`:
|
|
22
|
+
|
|
23
|
+
- **Finding slug or UUID** → skip to step 3 (direct triage).
|
|
24
|
+
- **No arg** → continue to step 2 (list mode).
|
|
25
|
+
|
|
26
|
+
**Cloud state** (either path). Run `iamu auth status --json` once:
|
|
27
|
+
|
|
28
|
+
- **Linked** (`cloud_linked` and `authenticated` both true) → `iamu pull --json` before reading any finding, so teammates' triage decisions are current. Triaging a finding a teammate already closed wastes the session and ends in a sync conflict. Pull never overwrites a local edit (`diverged` lists those — mention them, never `--force`). If pull fails, say so in one line and triage locally.
|
|
29
|
+
- **Linked, no credentials** → say once that decisions stay local until `iamu auth login`, and continue.
|
|
30
|
+
- **Local-only** → nothing to do.
|
|
31
|
+
|
|
32
|
+
### 1b. Requests from the team (cloud-linked only)
|
|
33
|
+
|
|
34
|
+
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.
|
|
35
|
+
|
|
36
|
+
If `count > 0`, show the requests first, before the findings tables:
|
|
37
|
+
|
|
38
|
+
```
|
|
39
|
+
Requests from the team (2)
|
|
40
|
+
1. Fix Checkout button unlabeled Olivia Owner · 3h ago
|
|
41
|
+
2. Verify Password reset on mobile Eddie Editor · 20m ago · claimed by you
|
|
42
|
+
```
|
|
43
|
+
|
|
44
|
+
One line per request: kind, summary, requester, age, and `claimed by you` / `claimed by <name>` when `status` is `claimed`. Include `note` as an indented second line when present.
|
|
45
|
+
|
|
46
|
+
Ask whether to pick one up. When the user picks a request:
|
|
47
|
+
|
|
48
|
+
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.
|
|
49
|
+
2. Follow `next` from the result:
|
|
50
|
+
- `fix` → go to step 4's **Fix now** 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.
|
|
51
|
+
- `verify` or `run` → run `iamu-run <scenario.id>`; offer `scenario.targetUrl` as the target when present.
|
|
52
|
+
3. Tell the user the request closes itself on the next `iamu sync` — step 6 runs it.
|
|
53
|
+
|
|
54
|
+
**Linked, but the tool is missing** (the iamu-sync server is not registered, or the session started before it was): if `iamu status --json` shows `requests.open` above zero, say `<N> team requests are waiting — run iamu auth login (it registers the iamu-sync server), then restart this session to pick them up here.` Local-only projects have no requests; do not mention them.
|
|
55
|
+
|
|
56
|
+
### 2. List mode: present open findings grouped by scenario
|
|
57
|
+
|
|
58
|
+
Read all `.md` files in `iamu/findings/` directory. Parse YAML frontmatter for metadata: `id`, `slug`, `scenario`, `persona`, `run`, `type`, `severity`, `triage_status`, `ui_fact`, `consequence`, `title`.
|
|
59
|
+
|
|
60
|
+
Filter to `triage_status: open`.
|
|
61
|
+
|
|
62
|
+
**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:
|
|
63
|
+
|
|
64
|
+
- `awaiting_rerun` — no later run of the scenario has re-checked it. Shown as "awaiting re-run".
|
|
65
|
+
- `verified` — a run that started after the fix saw it working (the since-last-run delta's "Resolved", backed by steps).
|
|
66
|
+
- `recurred` — a run after the fix recorded it again: the fix did not hold. Reopen it (`iamu triage <slug> --status open`).
|
|
67
|
+
|
|
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
|
+
|
|
70
|
+
Group by `scenario` field and render with an executive tally header, followed by a severity-sorted list per scenario group (CRITICAL → MAJOR → MINOR → OBS; hinders and missing first, helps last), including persona quotes, evidence, and clickable file links:
|
|
71
|
+
|
|
72
|
+
```
|
|
73
|
+
Findings Tally: <N> Open (<C> Critical · <M> Major · <m> Minor) across <S> Scenarios
|
|
74
|
+
Awaiting verification: <K> addressed findings pending re-run
|
|
75
|
+
|
|
76
|
+
▼ [<scenario>](iamu/scenarios/<scenario>.md) (4 findings)
|
|
77
|
+
1. [CRITICAL · hinders] Handoff list is cluttered ([file](iamu/findings/<slug>.md))
|
|
78
|
+
• Persona: <Persona Name>: "<Persona reaction or consequence quote>"
|
|
79
|
+
• Evidence: Step <N> at <url>
|
|
80
|
+
• Recommendation: Add status filter chips
|
|
81
|
+
|
|
82
|
+
2. [MAJOR · missing] No visible confirmation after shift submit ([file](iamu/findings/<slug>.md))
|
|
83
|
+
• Persona: <Persona Name>: "<Persona reaction or consequence quote>"
|
|
84
|
+
• Evidence: Step <N> at <url>
|
|
85
|
+
• Recommendation: Show inline success toast
|
|
86
|
+
```
|
|
87
|
+
|
|
88
|
+
Ask the user how they would like to triage:
|
|
89
|
+
|
|
90
|
+
- **"walk through them"** → iterate through all open findings one-by-one in order with full context, code location, and triage choices (`[Fix now] [Skip / Dismiss] [Discuss] [Next]`).
|
|
91
|
+
- **"all critical"** → iterate through all critical findings in order.
|
|
92
|
+
- **Scenario group name** (e.g. "group 1") → iterate through that scenario's findings.
|
|
93
|
+
- **Single number or slug** → single finding (skip to step 3).
|
|
94
|
+
- **"fix 1 and 2"** → make code fixes and mark addressed immediately.
|
|
95
|
+
- **"skip 3" / "dismiss 3"** → dismiss with reason (`out_of_scope`, `not_relevant`, `walker_error`, `duplicate`).
|
|
96
|
+
|
|
97
|
+
**Interactive Triage Strategy:**
|
|
98
|
+
- If your environment provides an interactive user-prompt tool (e.g. `ask_question`, `ask_followup_question`), invoke it:
|
|
99
|
+
- Question: "How would you like to review these <N> open findings?"
|
|
100
|
+
- Options:
|
|
101
|
+
1. "[Recommended] Walk through findings one by one"
|
|
102
|
+
2. "Focus only on Critical findings (<C> items)"
|
|
103
|
+
3. "Review by scenario group: <Top Scenario>"
|
|
104
|
+
- Otherwise (in CLI or text-only environments):
|
|
105
|
+
|
|
106
|
+
How would you like to triage these <N> open findings?
|
|
107
|
+
1. [Recommended] Walk through findings one by one
|
|
108
|
+
2. Focus only on Critical findings (<C> items)
|
|
109
|
+
3. Review by scenario group: <Top Scenario>
|
|
110
|
+
|
|
111
|
+
Press Enter to walk through all [1], select 2-3, or enter a finding number/slug:
|
|
112
|
+
(Treat empty Enter as Option 1)
|
|
113
|
+
|
|
114
|
+
### 3. Direct triage: review one finding
|
|
115
|
+
|
|
116
|
+
Read the finding file at `iamu/findings/<slug>.md`. Parse the YAML frontmatter and markdown body. Inspect the codebase to identify the source file and line responsible. Render full detail with clickable links and evidence:
|
|
117
|
+
|
|
118
|
+
```
|
|
119
|
+
Finding: <title> ([file](iamu/findings/<slug>.md))
|
|
120
|
+
Scenario: [<scenario>](iamu/scenarios/<scenario>.md)
|
|
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))
|
|
126
|
+
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)
|
|
135
|
+
```
|
|
136
|
+
|
|
137
|
+
If the finding references a run directory, mention the report path for context. If the user wants to see the screenshot, read from `iamu/.runs/<run>/screenshots/`.
|
|
138
|
+
|
|
139
|
+
### 4. Prompt for triage action
|
|
140
|
+
|
|
141
|
+
Every finding must land on a decision — never silently skip. Match the user's intent to the closest option.
|
|
142
|
+
|
|
143
|
+
**Interactive Triage Selection:**
|
|
144
|
+
*Contextual Recommendation Rule:*
|
|
145
|
+
- If finding is clear, localized, and has a straightforward fix → mark Option 1 as `[Recommended]`.
|
|
146
|
+
- If finding requires architectural touch or redesign → mark Option 2 as `[Recommended]`.
|
|
147
|
+
- If finding is a known trade-off or walker error → mark Option 4 as `[Recommended]`.
|
|
148
|
+
|
|
149
|
+
- If your environment provides an interactive user-prompt tool (e.g. `ask_question`, `ask_followup_question`), invoke it:
|
|
150
|
+
- Question: "Triage Finding: '<finding title>'?"
|
|
151
|
+
- Options:
|
|
152
|
+
1. "<[Recommended] if localized> Fix now (apply inline code fix & verify)"
|
|
153
|
+
2. "<[Recommended] if structural> Design change needed (open issue / design doc)"
|
|
154
|
+
3. "Defer (revisit in later milestone)"
|
|
155
|
+
4. "Dismiss / Won't fix (record reason & walker guidance rule)"
|
|
156
|
+
- Otherwise (in CLI or text-only environments):
|
|
157
|
+
|
|
158
|
+
Triage Finding: '<finding title>'
|
|
159
|
+
1. Fix now (apply inline code fix & verify)
|
|
160
|
+
2. Design change needed (open issue / design doc)
|
|
161
|
+
3. Defer (revisit in later milestone)
|
|
162
|
+
4. Dismiss / Won't fix (record reason & walker guidance rule)
|
|
163
|
+
|
|
164
|
+
Press Enter to accept recommendation [1], enter 2-4, or type custom triage note:
|
|
165
|
+
(Treat empty Enter as Option 1)
|
|
166
|
+
|
|
167
|
+
Record the decision with `iamu triage` — it sets `triage_status` and `triage_note` in `iamu/findings/<slug>.md`, and for a dismissal it also teaches the next walk:
|
|
168
|
+
|
|
169
|
+
```bash
|
|
170
|
+
iamu triage <slug> --status addressed --note "Made handoff notes optional on /sv/handoff; verified on screen."
|
|
171
|
+
```
|
|
172
|
+
|
|
173
|
+
The resulting frontmatter:
|
|
174
|
+
|
|
175
|
+
```yaml
|
|
176
|
+
triage_status: addressed
|
|
177
|
+
triage_note: "Made handoff notes optional on /sv/handoff; verified on screen."
|
|
178
|
+
```
|
|
179
|
+
|
|
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 update frontmatter: `triage_status: addressed` with a one-line change summary in `triage_note`. 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
|
+
|
|
182
|
+
- **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
|
+
|
|
184
|
+
- **Defer** → the finding is real but not urgent. Set `triage_status: deferred` with an explicit `triage_note` naming the condition to revisit: `"Defer: revisit after <trigger, e.g. Q3 mobile release / next round of persona feedback>."`.
|
|
185
|
+
|
|
186
|
+
- **Won't fix (accepted trade-off)** → the problem is real but the team accepts it. `iamu triage <slug> --status wont_fix --note "<the trade-off>"`. It stays out of future walks' dismissed list only as a known issue — no guidance rule is written.
|
|
187
|
+
|
|
188
|
+
- **Not relevant / walker got it wrong** → the finding should never have been reported. Ask which, because they teach different things:
|
|
189
|
+
- *Not relevant* (by design, out of scope): `iamu triage <slug> --status dismissed --reason not_relevant --note "<why it is not a problem>"`.
|
|
190
|
+
- *Walker error* (the walker misread the screen): `iamu triage <slug> --status dismissed --reason walker_error --note "<what it misread>"`.
|
|
191
|
+
- *Duplicate* of another finding: `--reason duplicate --note "Duplicate of <slug>"` (no rule is written).
|
|
192
|
+
|
|
193
|
+
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 — future walkthroughs are told not to report this"** and name the rule file. One-word notes ("nope") degrade future runs — name the reason specifically.
|
|
194
|
+
|
|
195
|
+
- **Keep (no decision yet)** → rare. Use only when the reviewer genuinely needs more information. Leave `triage_status: open` and add a `triage_note` noting what you are waiting for: `"Waiting on <thing> before triage."`.
|
|
196
|
+
|
|
197
|
+
Report back with the action taken:
|
|
198
|
+
|
|
199
|
+
```
|
|
200
|
+
addressed (fix now): <finding-slug>
|
|
201
|
+
Change: made handoff notes optional on /sv/handoff
|
|
202
|
+
|
|
203
|
+
deferred: <finding-slug>
|
|
204
|
+
Note: revisit after Q3 mobile release
|
|
205
|
+
|
|
206
|
+
dismissed (duplicate): <finding-slug>
|
|
207
|
+
Reason: duplicates frontline-worker--incident-report-overwhelm-a7b2c1
|
|
208
|
+
|
|
209
|
+
dismissed (not_relevant): <finding-slug>
|
|
210
|
+
Reason: the beta badge is intentional until launch
|
|
211
|
+
Guidance: iamu/guidance/dont-report-the-beta-badge.md (whole project)
|
|
212
|
+
```
|
|
213
|
+
|
|
214
|
+
### 5. Continue or close
|
|
215
|
+
|
|
216
|
+
If the user is in list-mode iteration (picked "all critical" or a scenario group), loop to step 3 for the next finding in the queue. Otherwise close.
|
|
217
|
+
|
|
218
|
+
Summary at the end (list-mode only):
|
|
219
|
+
|
|
220
|
+
```
|
|
221
|
+
Triage complete.
|
|
222
|
+
Fixed: <N>
|
|
223
|
+
Dismissed: <N>
|
|
224
|
+
Rescoped (design change / defer): <N>
|
|
225
|
+
Kept open: <N>
|
|
226
|
+
|
|
227
|
+
<X> findings remain open. Use iamu-findings to resume later.
|
|
228
|
+
```
|
|
229
|
+
|
|
230
|
+
Run `iamu validate --all` to verify all entities before reporting done.
|
|
231
|
+
|
|
232
|
+
### 6. Publish and link (linked mode only)
|
|
233
|
+
|
|
234
|
+
Triage decisions are team state: until they sync, teammates still see these findings as open and a request for them stays open. If any finding changed this session, run once at the end — not after every decision:
|
|
235
|
+
|
|
236
|
+
```bash
|
|
237
|
+
iamu sync --json
|
|
238
|
+
```
|
|
239
|
+
|
|
240
|
+
Report it in one line: `Synced <N> findings to Iamu Cloud.` If the result has `conflicts`, a teammate changed the same finding: name it and give the resolution (`iamu pull --force` to take theirs after copying your edits aside, or `iamu sync --keep-mine` to keep yours). If it has `pending_deletes`, list them and tell the user to run `iamu sync --confirm-deletes` after checking. Never run `--keep-mine` or `--confirm-deletes` yourself — only the user decides to overwrite or delete team data.
|
|
241
|
+
|
|
242
|
+
Then end with the dashboard link from `iamu open --print` (step replay, screenshots side by side, the team's view of the same findings):
|
|
243
|
+
|
|
244
|
+
```
|
|
245
|
+
Team view: <url>
|
|
246
|
+
```
|
|
247
|
+
|
|
248
|
+
In linked-no-credentials mode, end with `Decisions are local only — iamu auth login, then iamu sync, to share them.` Skip this section entirely in local-only mode. The terminal surface is complete.
|
|
249
|
+
|
|
250
|
+
## Guidelines
|
|
251
|
+
|
|
252
|
+
- **Terminal-complete.** Everything the user needs to triage fits in chat. Citations, recommendations, linked steps, screenshots (as paths the agent can read if it has image support). Dashboard is nice-to-have, not required.
|
|
253
|
+
- **Group by scenario, not by type.** Findings aggregate around scenarios. When reviewing, the context of "what happened in Maria's shift handoff?" matters before deciding on each finding — not seeing all severity:critical across projects.
|
|
254
|
+
- **Severity-sorted within each group.** Within a scenario group, sort CRITICAL → MAJOR → MINOR → OBS. Within the same severity, show hinders/missing/incorrect before helps.
|
|
255
|
+
- **Screenshot paths over inline images.** Skill prints `iamu/.runs/<run>/screenshots/step-<N>.png` paths. Agents with image-capable read can open them on request.
|
|
256
|
+
- **Every finding gets a decision — none disappear silently.** Fix now, design change, defer, won't fix, or explicit "waiting on X". No finding exits triage unreviewed. This discipline is load-bearing: silent skips degrade the signal the next walkthrough depends on.
|
|
257
|
+
- **Bias toward small, direct fixes.** If something can be fixed in five minutes without risk, do not create a design process for it — fix it now and triage as addressed with a one-line change summary.
|
|
258
|
+
- **Design change for anything that needs thinking.** Multiple files, API contracts, flow restructuring, new capability — do NOT fix inline. Pre-fill the proposal with the finding's persona + scenario context so the human thread survives the handoff from walkthrough to PR.
|
|
259
|
+
- **Required note on dismiss.** Do not let findings disappear without a reason captured. The note becomes the reason on the tester guidance rule future walkers read. One-word dismissals ("nope", "invalid") are anti-signal — name the reason specifically: duplicate of `<slug>`, not in scope for `<release>`, persona mismatch, known limitation tracked elsewhere, etc.
|
|
260
|
+
- **Match the note to the action.** Fix-now notes describe what changed. Design change notes name the reference. Defer notes name the revisit condition. Won't-fix notes name the reason. Do not reuse "LGTM" or "done" — the next triager reads these out of context months later.
|
|
261
|
+
- **Local-only users get parity.** No dashboard mention, no "upgrade" prompts. Full workflow in chat.
|
|
262
|
+
- **`iamu triage` is the triage path.** It validates the status and reason, keeps the body, and writes the guidance rule. Edit the finding file by hand only for fields it does not set. Rules in `iamu/guidance/` are plain markdown: edit the text, or set `status: retired` to stop a rule without deleting its history.
|
|
263
|
+
- **Deleting is a cloud act too.** Deleting a finding file (or a run directory) that this machine synced deletes it on the cloud at the next `iamu sync`; a run whose findings are still in `iamu/findings/` is kept. Triage (`dismissed`, `wont_fix`) keeps the history — prefer it. When many are deleted at once, sync lists them and waits for `iamu sync --confirm-deletes`, which only the user runs.
|
|
264
|
+
- **New findings during triage.** If triage reveals a new issue, use `iamu new-finding` to scaffold it with valid frontmatter — do not manually create finding files.
|
|
265
|
+
- **Validate before done.** Always run `iamu validate --all` after editing findings to catch any issues. For legacy files that fail on schema drift, `iamu validate --all --fix` (preview with `--dry-run`) repairs the mechanical part; never hand-fill a missing `run`, `scenario`, or `persona` with a guess.
|
|
266
|
+
- **Requests are dispatch records, not tickets.** Never ask the user to update one; the cloud closes it from the synced finding or run.
|
|
@@ -0,0 +1,263 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: iamu-new
|
|
3
|
+
description: Draft a scenario or standalone persona from a specific intent — create the situation + persona + brief, or scaffold a standalone persona into the casting panel. Use when the user already knows WHAT or WHO to test. If they're exploring what or who to test or need suggestions, use iamu-propose first.
|
|
4
|
+
generatedBy: __IAMU_VERSION__
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
You are a brainstorming partner, not a form filler. Your job is to help the user discover scenarios that will stress-test their product in ways they haven't thought of.
|
|
8
|
+
|
|
9
|
+
**You bring:**
|
|
10
|
+
- Understanding of the domain from `iamu/context.yml` (actors, jurisdiction, regulations if applicable)
|
|
11
|
+
- Knowledge of the codebase from prior exploration (what features exist, what flows are built)
|
|
12
|
+
- Awareness of the gap between "what the product supports" and "what real users actually need to do"
|
|
13
|
+
|
|
14
|
+
**The user brings:**
|
|
15
|
+
- Knowledge of which area they want to test (or nothing — you propose)
|
|
16
|
+
- Judgment on what feels realistic vs. contrived
|
|
17
|
+
|
|
18
|
+
Scenarios are written in **problem-space only** — they describe human situations, not UI flows. No screen references, no button names, no feature names. The scenario says "a shift leader needs to hand off open incidents under time pressure" — the walkthrough discovers whether the product supports that.
|
|
19
|
+
|
|
20
|
+
**Methodology prompts:** Before drafting, read the methodology files. These contain the quality standards for each artifact:
|
|
21
|
+
- `iamu/.prompts/persona.md` — how to write a durable persona
|
|
22
|
+
- `iamu/.prompts/outline.md` — how to write a situation outline
|
|
23
|
+
- `iamu/.prompts/combine.md` — how to combine persona + outline into a scenario with emergent test questions
|
|
24
|
+
|
|
25
|
+
Follow these methodologies. They define what quality looks like.
|
|
26
|
+
|
|
27
|
+
$ARGUMENTS
|
|
28
|
+
|
|
29
|
+
## Prerequisites
|
|
30
|
+
|
|
31
|
+
Before starting, check that `iamu/context.yml` exists and has `domain` filled in. If it is missing or empty, run the `iamu-setup` skill first — context grounds every scenario draft and walkthrough downstream. If `iamu/` does not exist at all, run `iamu init` first.
|
|
32
|
+
|
|
33
|
+
## Steps
|
|
34
|
+
|
|
35
|
+
### 1. Understand what to test or draft
|
|
36
|
+
|
|
37
|
+
Determine the mode based on `$ARGUMENTS` and user intent:
|
|
38
|
+
|
|
39
|
+
- **Standalone Persona mode** (e.g. `iamu-new "persona Maria Gomez"`, `iamu-new "Maria Gomez"`, or when the user wants to add an actor/tester to the casting panel):
|
|
40
|
+
1. Ground in `iamu/context.yml` actors, domain, and jurisdiction.
|
|
41
|
+
2. Define role, disposition, key biases, friction triggers, and domain vocabulary.
|
|
42
|
+
3. Propose the persona candidate to the user (name, role, disposition, expectations).
|
|
43
|
+
4. Once confirmed, scaffold the persona into `iamu/personas/`:
|
|
44
|
+
```bash
|
|
45
|
+
iamu new persona --name "<Name>" --role "<Role>" --disposition "<Disposition>" --json
|
|
46
|
+
```
|
|
47
|
+
5. Write the persona's background narrative and test expectations as the markdown body.
|
|
48
|
+
6. If `iamu/context.yml` has an `access` mechanism, set the persona's `access` field to match an existing product account/role.
|
|
49
|
+
7. Run `iamu validate --all`.
|
|
50
|
+
8. Summarize: persona created in `iamu/personas/<slug>.md`. Prompt user: "You can now pair `<slug>` with a scenario draft via `iamu-new`, or propose situations for them via `iamu-propose`." Stop here for standalone persona requests.
|
|
51
|
+
|
|
52
|
+
- **Fast-Path Scenario mode** (when intent, topic, or a handoff candidate from `iamu-propose` is provided, e.g. `iamu-new "checkout friction"`, `iamu-new "Maria Gomez shift handoff"`):
|
|
53
|
+
Do NOT drag the user through multiple question modals. Skip Step 2 entirely!
|
|
54
|
+
Jump directly to Step 3 and present the **Complete Scenario Spec-Sheet** (Situation + Bound Persona + Preconditions + Evaluation Checkpoint + Walker Brief) for **1-click / 1-key acceptance**.
|
|
55
|
+
|
|
56
|
+
- **Exploratory Scenario mode** (no arguments or broad exploration):
|
|
57
|
+
Proceed through Step 2 (Propose complete scenario bundles) and Step 3.
|
|
58
|
+
Inspect `iamu/personas/` (`iamu list personas`) first. If personas already exist in the casting panel (e.g. seeded during `iamu-setup`), deliberately frame scenario proposals around those existing cast members to build longitudinal test history, rather than inventing new personas.
|
|
59
|
+
If the user gives a direction, ground it in the codebase: what capabilities exist in this area? What flows are built? This helps you propose scenarios that test what's actually there, not what's imagined.
|
|
60
|
+
|
|
61
|
+
### 2. Propose Complete Scenario Bundles (Exploratory Mode)
|
|
62
|
+
|
|
63
|
+
Present 2–3 scannable scenario proposals. Each proposal MUST bundle the situation narrative, bound persona (prioritizing existing cast members), human evaluation checkpoint, and entry surface:
|
|
64
|
+
|
|
65
|
+
```
|
|
66
|
+
1. <Title> (<Primary Capability>)
|
|
67
|
+
• Persona: <Persona Name> (<Role>) — Reused from cast / New candidate
|
|
68
|
+
• Tension: <1 concise sentence on the human or organizational tension>
|
|
69
|
+
• Evaluation Checkpoint: "<Concrete binary yes/partial/no question>"
|
|
70
|
+
• Entry Surface: `<entry_path>` (Target: `<target_url>`)
|
|
71
|
+
|
|
72
|
+
2. <Alternative Title> (<Capability>)
|
|
73
|
+
• Persona: <Alternative Persona Name> (<Role>)
|
|
74
|
+
• Tension: <1 concise sentence>
|
|
75
|
+
• Evaluation Checkpoint: "<Concrete binary question>"
|
|
76
|
+
• Entry Surface: `<entry_path>`
|
|
77
|
+
```
|
|
78
|
+
|
|
79
|
+
**Interactive Decision:**
|
|
80
|
+
- If your environment provides an interactive user-prompt tool (e.g. `ask_question`, `ask_followup_question`), invoke it:
|
|
81
|
+
- Question: "Scaffold this scenario for walkthrough?"
|
|
82
|
+
- Options:
|
|
83
|
+
1. "[Recommended] Scaffold '<Bundle 1 Title>' as <Persona 1 Name>"
|
|
84
|
+
2. "Switch persona: Walk as <Alternative Persona Name> (<Role>)"
|
|
85
|
+
3. "Select alternative: '<Bundle 2 Title>' as <Persona 2 Name>"
|
|
86
|
+
4. "Customize situation, checkpoint, or preconditions"
|
|
87
|
+
- Otherwise (in CLI or text-only environments):
|
|
88
|
+
|
|
89
|
+
Scaffold this scenario for walkthrough?
|
|
90
|
+
1. [Recommended] Scaffold '<Bundle 1 Title>' as <Persona 1 Name>
|
|
91
|
+
2. Switch persona: Walk as <Alternative Persona Name> (<Role>)
|
|
92
|
+
3. Select alternative: '<Bundle 2 Title>' as <Persona 2 Name>
|
|
93
|
+
4. Customize situation, checkpoint, or preconditions
|
|
94
|
+
|
|
95
|
+
Press Enter to scaffold [1], select 2-3, or type adjustments:
|
|
96
|
+
(Treat empty Enter or return as Option 1)
|
|
97
|
+
|
|
98
|
+
*Execution Flow:*
|
|
99
|
+
- **Selecting Option 1 (or hitting Enter):** Proceed IMMEDIATELY to Step 6 (Persist everything). Zero intermediate question modals.
|
|
100
|
+
- **Selecting Option 2:** Present the persona switcher (Step 4) then persist.
|
|
101
|
+
- **Selecting Option 3:** Swap primary bundle and prompt to persist.
|
|
102
|
+
- **Selecting Option 4 / typing adjustments:** Expand into Step 3 to refine details before persisting.
|
|
103
|
+
|
|
104
|
+
### 3. Develop the situation (Scenario Spec-Sheet)
|
|
105
|
+
|
|
106
|
+
In Fast-Path mode or when customizing, present the complete scenario as a structured, scannable Spec-Sheet before creating anything. Every field shown here is written verbatim to disk on confirmation:
|
|
107
|
+
|
|
108
|
+
Do NOT use markdown blockquote syntax (`>`), which renders as stray `|` pipe characters in terminal frontends. Keep the narrative capped at 2–3 punchy sentences (problem-space only, zero UI terms).
|
|
109
|
+
|
|
110
|
+
```
|
|
111
|
+
### Scenario Spec-Sheet: <Outline Title>
|
|
112
|
+
|
|
113
|
+
Situation & Stakes:
|
|
114
|
+
Narrative: <2–3 sentences problem-space only, zero UI terms>
|
|
115
|
+
Tension: <Colliding needs in X vs Y format or "None">
|
|
116
|
+
Evaluation Checkpoint: <Concrete binary yes/partial/no question scored at evaluation>
|
|
117
|
+
|
|
118
|
+
Roles with Stakes:
|
|
119
|
+
• <Role 1>: <Stake>
|
|
120
|
+
• <Role 2>: <Stake>
|
|
121
|
+
|
|
122
|
+
Execution Preconditions (resolved at iamu-run):
|
|
123
|
+
• Assumed State: <What records/data should exist, e.g. "Department with existing risk register containing open hazards">
|
|
124
|
+
• Squint Guidance: <How the walker should approximate if exact records are missing, e.g. "If no packaging hazard exists, select any physical safety hazard and proceed with delegation">
|
|
125
|
+
• Reachable Surface: <Entry route matched against iamu/testability.md, e.g. "/incidents/new">
|
|
126
|
+
|
|
127
|
+
Persona & Brief:
|
|
128
|
+
Persona: <Existing slug from panel OR new candidate: Name (Role)>
|
|
129
|
+
Friction: <Diagnostic friction trigger and bounce risk>
|
|
130
|
+
Walker Brief:
|
|
131
|
+
"<First-person brief in persona voice (2–3 sentences). Describes what they intend to achieve before touching the product. Written verbatim to scenario markdown body.>"
|
|
132
|
+
|
|
133
|
+
If the situation requires an un-mocked endpoint or missing data fixture to be walkable, offer to scaffold the missing MSW handler (e.g. in `src/mocks/handlers.ts`) or fixture file directly in the codebase before finalizing.
|
|
134
|
+
```
|
|
135
|
+
|
|
136
|
+
**Interactive Draft Confirmation:**
|
|
137
|
+
- If your environment provides an interactive user-prompt tool, invoke it:
|
|
138
|
+
- Question: "Scaffold scenario '<Outline Title>'?"
|
|
139
|
+
- Options:
|
|
140
|
+
1. "[Recommended] Scaffold scenario and prepare walkthrough"
|
|
141
|
+
2. "Switch persona: Walk as <Alternative Persona> (<Role>)"
|
|
142
|
+
3. "Adjust checkpoint, preconditions, or surface"
|
|
143
|
+
- Otherwise (in CLI or text-only environments):
|
|
144
|
+
|
|
145
|
+
Scaffold scenario '<Outline Title>'?
|
|
146
|
+
1. [Recommended] Scaffold scenario and prepare walkthrough
|
|
147
|
+
2. Switch persona: Walk as <Alternative Persona> (<Role>)
|
|
148
|
+
3. Adjust checkpoint, preconditions, or surface
|
|
149
|
+
|
|
150
|
+
Press Enter to scaffold [1], select 2, or type adjustments:
|
|
151
|
+
(Treat empty Enter or return as Option 1)
|
|
152
|
+
|
|
153
|
+
*Selecting Option 1 or hitting Enter proceeds IMMEDIATELY to Step 6 (Persist everything).*
|
|
154
|
+
|
|
155
|
+
### 4. Pick or swap personas (on demand)
|
|
156
|
+
|
|
157
|
+
Triggered only when the user selects "Switch persona", when exploring standalone personas, or when no existing persona fits:
|
|
158
|
+
|
|
159
|
+
**Check existing personas first:**
|
|
160
|
+
Inspect `iamu/personas/` (`iamu list personas`). If an existing persona in the casting panel is a natural fit for this situation, propose them first to build longitudinal test history:
|
|
161
|
+
`Reusable from panel: <slug> (<role>) — <why they fit this situation>`
|
|
162
|
+
|
|
163
|
+
If no existing persona fits, or if testing an uncovered perspective is needed, propose 2–3 persona candidates as numbered cards (do NOT use a wide table):
|
|
164
|
+
|
|
165
|
+
```
|
|
166
|
+
1. <Name> (<Role>)
|
|
167
|
+
• Friction & Biases: <Specific friction triggers, skepticism, and bounce risks>
|
|
168
|
+
• Why this tests something different: <Unique perspective or workflow divergence>
|
|
169
|
+
|
|
170
|
+
2. <Name> (<Role>)
|
|
171
|
+
• Friction & Biases: <Specific friction triggers, skepticism, and bounce risks>
|
|
172
|
+
• Why this tests something different: <Unique perspective or workflow divergence>
|
|
173
|
+
```
|
|
174
|
+
|
|
175
|
+
**Interactive Persona Selection:**
|
|
176
|
+
- If your environment provides an interactive user-prompt tool, invoke it with the candidates:
|
|
177
|
+
- Question: "Which persona should walk this scenario?"
|
|
178
|
+
- Options:
|
|
179
|
+
1. "[Recommended] Bind existing persona: <slug> (<role>)" (if one fits)
|
|
180
|
+
2. "Create candidate: <Name> (<Role>)"
|
|
181
|
+
3. "Leave as draft (no persona bound yet)"
|
|
182
|
+
- Otherwise, prompt: "Pick a persona (1–N), 'new' to propose candidates, or 'skip' to save as draft without a persona."
|
|
183
|
+
|
|
184
|
+
### 5. Classify into capabilities
|
|
185
|
+
|
|
186
|
+
Situations carry ONE primary capability (product area grouping) and optional secondary capabilities (cross-cutting tags). Read existing capabilities directly from `iamu/capabilities/` or `iamu/context.yml`.
|
|
187
|
+
|
|
188
|
+
Do NOT execute interactive bash commands (like `iamu list capabilities`) during conversational turns; resolve capabilities silently from workspace files.
|
|
189
|
+
|
|
190
|
+
- **High confidence match** → assign silently, one line: `Capability: <slug> (auto)`
|
|
191
|
+
- **Low confidence or new** → ask: "Create new capability `<slug>`?"
|
|
192
|
+
|
|
193
|
+
Don't let capability selection derail the conversation. It's a label, not a design decision.
|
|
194
|
+
|
|
195
|
+
### 6. Persist everything
|
|
196
|
+
|
|
197
|
+
Use CLI commands to scaffold entities with valid frontmatter. The CLI generates UUIDs and validates against schemas.
|
|
198
|
+
|
|
199
|
+
**Order matters** — write referenced entities first:
|
|
200
|
+
|
|
201
|
+
**1. Capability** (only if new):
|
|
202
|
+
```bash
|
|
203
|
+
iamu new capability --name "Incident Reporting" --description "What staff can do when something goes wrong on shift" --json
|
|
204
|
+
```
|
|
205
|
+
|
|
206
|
+
**2. Outline** (the situation — problem-space, no UI references):
|
|
207
|
+
```bash
|
|
208
|
+
iamu new outline --name "Busy shift handoff" \
|
|
209
|
+
--capability incident-reporting \
|
|
210
|
+
--tension "Incident details are fragmented across multiple logs while shift time expires" \
|
|
211
|
+
--narrative "A shift leader needs to hand off a set of open incidents to the incoming supervisor." \
|
|
212
|
+
--human-test "Could the incoming leader act immediately without asking clarifying questions?" \
|
|
213
|
+
--json
|
|
214
|
+
```
|
|
215
|
+
The `--capability`, `--tension`, `--narrative`, and repeatable `--human-test` flags populate outline frontmatter directly. The outline body stays empty. If specialized fields like `situation_roles` are needed, edit the generated frontmatter.
|
|
216
|
+
|
|
217
|
+
**3. Persona** (if user picked a new persona to scaffold):
|
|
218
|
+
```bash
|
|
219
|
+
iamu new persona --name "Maria Gomez" --role "Site Safety Coordinator" --disposition "Time-pressured, prefers physical paper over complex forms" --json
|
|
220
|
+
```
|
|
221
|
+
The `--role` and `--disposition` flags populate frontmatter directly. If `iamu/context.yml` has an `access` mechanism, also set the persona's `access` to the account, role, or switcher key that matches this persona in the product — check what users the product actually has rather than inventing one; leave it out if nothing fits and say so. Write the persona's background narrative and test expectations as the markdown body.
|
|
222
|
+
|
|
223
|
+
**4. Scenario** (the binding):
|
|
224
|
+
```bash
|
|
225
|
+
iamu new scenario --name "maria-gomez--busy-shift-handoff" --outline busy-shift-handoff --persona maria-gomez [--entry /path/on/the/product] [--state-description "<Assumed state description>"] [--state-approximation "<Squint guidance for walker>"] --body "<First-person brief in persona voice (3–5 sentences)>" --json
|
|
226
|
+
```
|
|
227
|
+
When the situation begins on a specific page (the persona follows a link from a video, an email, a search result), add `--entry /path/on/the/product` — the run starts there instead of the home page.
|
|
228
|
+
`--outline` is required. `--persona` is optional (omit for drafts). Pass `--state-description` and `--state-approximation` if preconditions were defined in step 3 to populate the scenario's `state:` frontmatter automatically.
|
|
229
|
+
|
|
230
|
+
For drafts (no persona): omit `--persona`, omit `--body`.
|
|
231
|
+
|
|
232
|
+
### 7. Summarize
|
|
233
|
+
|
|
234
|
+
Present the created entities with clickable file links and exact run commands:
|
|
235
|
+
|
|
236
|
+
```
|
|
237
|
+
Created Scenario: [<scenario-slug>](iamu/scenarios/<scenario-slug>.md)
|
|
238
|
+
• Situation: [<outline-slug>](iamu/outlines/<outline-slug>.md)
|
|
239
|
+
• Persona: [<persona-slug>](iamu/personas/<persona-slug>.md) (or "draft — no persona bound yet")
|
|
240
|
+
• Capability: <primary_capability>
|
|
241
|
+
|
|
242
|
+
Next step:
|
|
243
|
+
iamu-run <scenario-slug> # Run walkthrough as <persona-name>
|
|
244
|
+
```
|
|
245
|
+
|
|
246
|
+
Run `iamu validate --all` to verify all entities before reporting done.
|
|
247
|
+
|
|
248
|
+
**Cloud-linked projects** (`iamu auth status --json` → `cloud_linked` and `authenticated` both true): after validation, run `iamu sync --json` so teammates see the new scenario and personas, and add one line to the summary: `Shared with your team on Iamu Cloud.` A draft (no persona) does not push until a persona is bound — say so instead (`draftsSkipped` in the result). On conflicts or errors, report them in one line and leave resolution to the user. Local-only projects: nothing.
|
|
249
|
+
|
|
250
|
+
## Guidelines
|
|
251
|
+
|
|
252
|
+
- **Brainstorm, don't fill forms.** Propose varied seeds. Challenge assumptions. The best scenarios are ones the user hadn't considered.
|
|
253
|
+
- **Problem-space only.** Scenarios describe human situations — never UI, screens, buttons, or features. The walkthrough discovers whether the product supports the situation.
|
|
254
|
+
- **Ground in the codebase.** Use your knowledge of what the product actually does to propose scenarios that stress-test real capabilities. But keep the scenario language product-agnostic.
|
|
255
|
+
- **Present before creating.** Show situation, personas, and capability to the user before writing files.
|
|
256
|
+
- **Scenario vocabulary.** Say "scenario" in output, never "outline" or "capability."
|
|
257
|
+
- **Multiple personas surface different problems.** A manager, a field worker, and an auditor will find completely different issues in the same situation. Propose personas that test the product differently, not personas that are cosmetically varied.
|
|
258
|
+
- **Personas are durable cast members.** Personas live in `iamu/personas/` and can be tested across multiple scenarios over time. When creating new personas, define realistic friction, biases, and domain vocabulary—not generic marketing fluff. Prioritize reusing existing personas before minting new ones.
|
|
259
|
+
- **Draft mode is a real option.** Users who want to think about persona later should get it.
|
|
260
|
+
- **Capability is quiet.** High-confidence matches fire silently.
|
|
261
|
+
- **Slug references are load-bearing.** Write referenced entities before the entities that reference them.
|
|
262
|
+
- **Validate before done.** Always run `iamu validate --all` after writing entities.
|
|
263
|
+
- **Use CLI for scaffolding.** `iamu new <type>` creates valid frontmatter with UUIDs. Pass flags (`--role`, `--disposition`, `--capability`, `--tension`, `--human-test`, `--state-description`) directly instead of manual YAML editing.
|