@iamu-dev/iamu 0.2.0-beta.7 → 0.3.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/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 +6660 -1556
- 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 +61 -0
- package/dist/commands/browse-driver.d.ts +121 -0
- package/dist/commands/browse.d.ts +195 -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 +81 -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/edit-entity.d.ts +8 -0
- package/dist/commands/evaluate.d.ts +34 -0
- package/dist/commands/explore-crawl.d.ts +67 -0
- package/dist/commands/explore.d.ts +53 -0
- package/dist/commands/findings.d.ts +7 -0
- package/dist/commands/init.d.ts +27 -0
- package/dist/commands/instructions-walk.d.ts +69 -0
- package/dist/commands/instructions.d.ts +30 -0
- package/dist/commands/list.d.ts +5 -0
- package/dist/commands/live-run-client.d.ts +127 -0
- package/dist/commands/match.d.ts +15 -0
- package/dist/commands/mcp-config.d.ts +10 -0
- package/dist/commands/new-entity.d.ts +34 -0
- package/dist/commands/new-finding.d.ts +25 -0
- package/dist/commands/open.d.ts +8 -0
- package/dist/commands/port.d.ts +17 -0
- package/dist/commands/preflight.d.ts +26 -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/set-entity.d.ts +46 -0
- package/dist/commands/skills.d.ts +34 -0
- package/dist/commands/start-run.d.ts +56 -0
- package/dist/commands/status.d.ts +3 -0
- package/dist/commands/step-numbering.d.ts +87 -0
- package/dist/commands/step.d.ts +96 -0
- package/dist/commands/summary.d.ts +20 -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 +11 -0
- package/dist/commands/view-results.d.ts +9 -0
- package/dist/index.d.ts +9 -0
- package/dist/index.js +6617 -1559
- 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/walk.md +62 -37
- package/dist/templates/skills/iamu-findings.md +118 -42
- package/dist/templates/skills/iamu-new.md +107 -58
- package/dist/templates/skills/iamu-propose.md +36 -20
- package/dist/templates/skills/iamu-run.md +277 -114
- package/dist/templates/skills/iamu-setup.md +259 -150
- package/dist/templates/skills/iamu-stage.md +164 -0
- package/dist/templates/skills/iamu-status.md +16 -11
- 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 +8 -8
- package/dist/eval/gemini-eval-cli.js +0 -976
|
@@ -1,16 +1,16 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: iamu-run
|
|
3
|
-
description:
|
|
3
|
+
description: Use when executing a persona walkthrough, running or testing a scenario, driving the browser against the product, verifying fixes, or when the user says "run it", "test it", or "walk through the app".
|
|
4
4
|
generatedBy: __IAMU_VERSION__
|
|
5
5
|
---
|
|
6
6
|
|
|
7
7
|
Run a scenario against a running product. The walkthrough executes in your agent session using a driving surface you control — a browser MCP for a web product, or the iOS Simulator for a native app — no separate Iamu runner involved for local flows.
|
|
8
8
|
|
|
9
|
-
This skill resolves what
|
|
9
|
+
This skill resolves what scenario to run following a clear **Target Scenario Resolution Precedence**:
|
|
10
10
|
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
11
|
+
1. **Explicit argument (`$ARGUMENTS`):** Exact slug / UUID, fuzzy slug match, or free-form intent (which chains into `iamu-new`).
|
|
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
|
+
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
15
|
$ARGUMENTS
|
|
16
16
|
|
|
@@ -18,6 +18,8 @@ $ARGUMENTS
|
|
|
18
18
|
|
|
19
19
|
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 walkthrough. If `iamu/` does not exist at all, run `iamu init` first.
|
|
20
20
|
|
|
21
|
+
**Fast Preflight Type/Lint Gate:** Run `iamu preflight` before booting dev servers or walkers. If syntax, typecheck, or lint checks fail, halt immediately with the compiler diagnostic and fix them before launching the browser. Never burn minutes on a browser session against code that will not compile.
|
|
22
|
+
|
|
21
23
|
## Steps
|
|
22
24
|
|
|
23
25
|
### 0. Verify a driving surface
|
|
@@ -41,16 +43,22 @@ Tell the user in one line which one you picked and why. If the project's own age
|
|
|
41
43
|
A native app has no URL, and a browser tool is not a substitute for one. If the product is native, the target is a device plus a build (step 3).
|
|
42
44
|
|
|
43
45
|
If no surface is available, stop and tell the user:
|
|
44
|
-
|
|
45
|
-
> A walkthrough needs a driving surface. For a web product, `iamu browse` works wherever Chrome or Chromium is installed (or set `IAMU_BROWSER`); a browser-driving MCP that attaches to Chrome also works — restart your agent session after installing one and re-run `iamu-run`. For a native iOS app, a simulator control tool must be available in this session.
|
|
46
|
+
"A walkthrough needs a driving surface. For a web product, `iamu browse` works wherever Chrome or Chromium is installed (or set `IAMU_BROWSER`); a browser-driving MCP that attaches to Chrome also works — restart your agent session after installing one and re-run `iamu-run`. For a native iOS app, a simulator control tool must be available in this session."
|
|
46
47
|
|
|
47
48
|
Do NOT proceed to step 1 before a driving surface is confirmed.
|
|
48
49
|
|
|
49
|
-
**Unfinished runs.**
|
|
50
|
+
**Unfinished runs.** Only check and offer when `iamu-run` has no explicit argument AND no active scenario exists in the session context. If an explicit scenario slug or intent was passed, OR if an active scenario is resolved from the conversation context, do NOT block execution with this prompt — log at most a single line (`Note: <N> unfinished run(s) pending — use iamu status to inspect`) and proceed directly to step 1.
|
|
51
|
+
|
|
52
|
+
When `$ARGUMENTS` is empty and no active scenario exists in context, check `iamu status --json` for `runs.incomplete`. If any exist, offer once:
|
|
50
53
|
|
|
51
|
-
-
|
|
52
|
-
-
|
|
53
|
-
-
|
|
54
|
+
- If your environment provides an interactive user-prompt tool (e.g. `ask_question`, `ask_followup_question`), invoke it:
|
|
55
|
+
- Question: "Found <N> unfinished walkthrough run(s). How would you like to handle them?"
|
|
56
|
+
- Options:
|
|
57
|
+
1. "[Recommended] Ignore and continue with new run"
|
|
58
|
+
2. "Finish run `<run-id>`: Run post-walk assembly on existing steps"
|
|
59
|
+
3. "Discard empty unfinished runs"
|
|
60
|
+
- Otherwise (in text-only/conversational environments), state that you are proceeding with Option 1 by default:
|
|
61
|
+
"Note: Found <N> unfinished walkthrough run(s). Proceeding with a new run [1]. (Reply 2 to finish run `<run-id>` or 3 to discard empty runs)."
|
|
54
62
|
|
|
55
63
|
Do not block the new run on this, and do not ask again in the same session.
|
|
56
64
|
|
|
@@ -60,17 +68,23 @@ Do not block the new run on this, and do not ask again in the same session.
|
|
|
60
68
|
- **Linked, no credentials** (`cloud_linked` true, `authenticated` false) → say once: "This project is cloud-linked, but this machine has no credentials — the run stays local until `iamu auth login`." Continue.
|
|
61
69
|
- **Local-only** → nothing to do here.
|
|
62
70
|
|
|
63
|
-
### 1. Resolve the
|
|
71
|
+
### 1. Resolve the target scenario
|
|
64
72
|
|
|
65
|
-
|
|
73
|
+
Follow this precedence cascade:
|
|
66
74
|
|
|
67
|
-
|
|
75
|
+
#### Path 1: Explicit Argument (`$ARGUMENTS` is provided)
|
|
76
|
+
- **UUID or exact slug match** → Read scenario files from `iamu/scenarios/` directory, or run `iamu list scenarios --json`, and match. Load and skip to step 3.
|
|
77
|
+
- **Slug-like arg with no exact match** → Run fuzzy match against existing scenario slugs (simple substring / levenshtein — the agent should judge similarity). If the best match is obviously close (shared two or more tokens), confirm with the user: "Did you mean `<slug>`?" Accept / correct / treat as free-form intent.
|
|
78
|
+
- **Free-form intent string** (quoted or multi-word, no match) → Chain into `iamu-new` with the intent as seed. After `iamu-new` completes and returns a scenario slug, continue here with that slug.
|
|
68
79
|
|
|
69
|
-
|
|
80
|
+
#### Path 2: Active Session Context (Conversational Anaphora & Recency)
|
|
81
|
+
When `$ARGUMENTS` is empty, generic (e.g. "it", "that", "this", "run", "go"), or the user says "run it" / "walk through it" / "let's test that" / triggers `iamu-run` right after scenario creation, staging, or discussion:
|
|
82
|
+
- **Immediately bind to the active scenario** created, modified, staged, or discussed in the current conversation turn or session.
|
|
83
|
+
- **Do NOT prompt the user or show a selection menu.** State the binding in one sentence (e.g. `Running active scenario maria-gomez--busy-shift...`) and proceed directly to Step 3 (or Step 2 if unbonded draft).
|
|
70
84
|
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
85
|
+
#### Path 3: No Argument & No Active Session Scenario (Global Selection)
|
|
86
|
+
When `$ARGUMENTS` is empty and no specific scenario is active in the conversation:
|
|
87
|
+
- Run `iamu status --json` and `iamu list scenarios --json` (or read `iamu/scenarios/`). `rerun` in the status output lists scenarios holding fixes that no later run has proven yet — a fix counts only once a re-run of its scenario shows it working. Present that group first, most awaiting fixes first, with its `reason`; then drafts and ready-to-run (a scenario in the first group is not repeated below):
|
|
74
88
|
|
|
75
89
|
```
|
|
76
90
|
Needs a re-run (fixes awaiting proof):
|
|
@@ -84,15 +98,34 @@ Ready to run:
|
|
|
84
98
|
4. dev-patel--checkout-abandon — Abandoned cart x Dev Patel
|
|
85
99
|
```
|
|
86
100
|
|
|
87
|
-
Omit the first group when `rerun` is empty.
|
|
101
|
+
Omit the first group when `rerun` is empty. If `requests.open` in the status output is above zero, put one line above the list: `Team requests: <N> waiting — iamu-findings picks them up.` Teammates queued those in Iamu Cloud; a verify or run request names the scenario to walk.
|
|
102
|
+
|
|
103
|
+
- **Single-Entity Auto-Selection (Zero-Prompt Fast Path):**
|
|
104
|
+
If only one runnable scenario exists in the project (or only one scenario needs a re-run), do NOT present a selection menu or ask for confirmation. Immediately state: `Using scenario: <slug> (sole scenario in project. Override with iamu-run <other>)` and advance directly to Step 3 (or Step 2 if unbonded draft).
|
|
88
105
|
|
|
89
|
-
|
|
106
|
+
**Interactive Scenario Selection:**
|
|
107
|
+
- If your environment provides an interactive user-prompt tool (e.g. `ask_question`, `ask_followup_question`), invoke it with the top prioritized candidates as selectable options:
|
|
108
|
+
- Question: "Which scenario would you like to run?"
|
|
109
|
+
- Options:
|
|
110
|
+
1. "[Recommended] <Slug or Title>" (e.g. top rerun needing proof, or primary ready scenario)
|
|
111
|
+
2. "<Alternative Scenario Slug or Title>"
|
|
112
|
+
3. "Draft a new scenario..."
|
|
113
|
+
- Otherwise, prompt: "Pick a scenario number (1–N), enter a slug, or type an intent to draft a new one."
|
|
114
|
+
|
|
115
|
+
Drafts get a bind prompt before execution (step 2); ready-to-run scenarios skip to step 3.
|
|
90
116
|
|
|
91
117
|
### 2. Bind persona (draft path only)
|
|
92
118
|
|
|
93
119
|
If the resolved scenario has `persona: null`, prompt to bind before executing:
|
|
94
120
|
|
|
95
|
-
|
|
121
|
+
**Interactive Persona Binding:**
|
|
122
|
+
- If your environment provides an interactive user-prompt tool (e.g. `ask_question`, `ask_followup_question`), invoke it:
|
|
123
|
+
- Question: "This scenario is a draft with no persona bound. Which persona should walk it?"
|
|
124
|
+
- Options:
|
|
125
|
+
1. "[Recommended] <Existing Persona 1> (<Role>)"
|
|
126
|
+
2. "<Existing Persona 2> (<Role>)"
|
|
127
|
+
3. "Draft a new persona candidate"
|
|
128
|
+
- Otherwise, ask: "This scenario is a draft — no persona bound. Pick an existing persona (1–N), or type 'new' to propose candidates."
|
|
96
129
|
|
|
97
130
|
1. Read `iamu/personas/` directory or run `iamu list personas`; present as pickable list + "new" option.
|
|
98
131
|
2. Picked existing → bind that persona by updating the scenario file's `persona` field.
|
|
@@ -113,9 +146,33 @@ After bind + brief, the scenario is ready to execute. Continue to step 3.
|
|
|
113
146
|
|
|
114
147
|
### 3. Target
|
|
115
148
|
|
|
116
|
-
**Web** —
|
|
117
|
-
|
|
118
|
-
|
|
149
|
+
**Web** — determine the target URL:
|
|
150
|
+
1. If the user passed an explicit target or the scenario has `target_url`, use that.
|
|
151
|
+
2. Otherwise, check `iamu/testability.md` for `target_url`.
|
|
152
|
+
3. If still unconfigured, prompt the user for the target URL (live product, staging, or localhost).
|
|
153
|
+
**Dev Server Preflight Check:**
|
|
154
|
+
Verify target reachability before launching the walker with `iamu doctor --target <url>` (or a fast HTTP probe).
|
|
155
|
+
If the target is a local URL (e.g. `http://localhost:*`, `http://127.0.0.1:*`) and is unreachable:
|
|
156
|
+
1. Inspect `iamu/testability.md` for `Command:` under `## Target & Run Instructions` (or check `package.json` for a `dev` or `start` script).
|
|
157
|
+
2. Prompt the user:
|
|
158
|
+
- If interactive tool available:
|
|
159
|
+
- Question: "Target URL <url> is unreachable. Boot dev server now?"
|
|
160
|
+
- Options:
|
|
161
|
+
1. "[Recommended] Boot dev server in background (`<dev_command>`) and proceed"
|
|
162
|
+
2. "I will start the dev server manually (wait for port)"
|
|
163
|
+
3. "Specify a different target URL"
|
|
164
|
+
- Otherwise (CLI / text-only):
|
|
165
|
+
Target URL <url> is unreachable. Boot dev server now?
|
|
166
|
+
1. [Recommended] Boot dev server in background (`<dev_command>`) and proceed
|
|
167
|
+
2. I will start the dev server manually (wait for port)
|
|
168
|
+
3. Specify a different target URL
|
|
169
|
+
Reply '1' to boot dev server [default], select 2-3, or provide target URL:
|
|
170
|
+
3. If Option 1 is chosen:
|
|
171
|
+
- Launch `<dev_command>` in the background as a managed daemon process.
|
|
172
|
+
- Poll `<url>` with HTTP requests until it responds (timeout: 30s).
|
|
173
|
+
- Once reachable, proceed immediately to the walkthrough.
|
|
174
|
+
|
|
175
|
+
Where the walk *starts* is part of the situation, not of the environment: a persona arriving from a video, an email or a search result lands on a specific page, not the home page. If the scenario has `entry_path`, `iamu start-run` resolves it against the target — pass the product's base URL as `--target`. If it has none but the situation clearly begins on a particular page, set it first with `iamu set scenario <slug> --entry <path>` (a path like `/en/episodes/1`, never a full URL), so this run and every later one start there. A walk started on the wrong page reports the detour as a finding.
|
|
119
176
|
|
|
120
177
|
**Native iOS** — the target is a device plus a build. Establish three things:
|
|
121
178
|
|
|
@@ -127,30 +184,39 @@ Record it as a target string the run can carry, for example `sim://<device-name>
|
|
|
127
184
|
|
|
128
185
|
**Then verify the starting state before spawning anyone.** Launch the app and take ONE screenshot confirming the product is where the scenario assumes it starts. Wait a few seconds after launch first: a screen rendered before its state lands shows the wrong thing, and verifying too early makes the verification itself lie — in the direction of "the harness is broken", which costs a debugging detour or, worse, waves a real seeding bug through.
|
|
129
186
|
|
|
187
|
+
**Stage the starting state — first run of a scenario.** Drafting a scenario deliberately leaves out the product's code, pages and data, so its first run is where it gets staged. If the scenario has no `state` yet, invoke the `iamu-stage` skill (or stage inline):
|
|
188
|
+
|
|
189
|
+
1. From the outline, persona and brief, say in plain words what the world must contain for the situation to play out (which records, how old, in what condition, who else is involved) and who the persona must be signed in as.
|
|
190
|
+
2. Check what the project already has to produce that world: seed scripts, fixtures, factories, mock handlers. `iamu/testability.md` lists the known ones; the codebase has the rest.
|
|
191
|
+
3. Show the user each requirement and whether it is met, then agree how to get there: an existing seed, a change to a seed script or mock handler (propose it as a diff for the user to apply), data the user creates by hand, or letting the walker approximate.
|
|
192
|
+
4. Record the outcome on the scenario so later runs do not ask again: `iamu set scenario <slug> --state-description "<the world, in domain words>" --state-approximation "<how the walker picks the closest record when the exact one is missing>"`. When the situation needs no particular data (a visitor reading a public page), record that too: `--state-description "No particular data needed"`. Project-wide facts learned on the way ("the seed needs Docker running") go in the `iamu/testability.md` body.
|
|
193
|
+
|
|
194
|
+
Staging adds to a scenario and never changes what it is about: do not edit the narrative, tension, human tests or brief; if one looks wrong, tell the user. When the product cannot support the situation, walk it anyway — the persona hitting that wall is the finding. Stop only when the walk itself cannot be set up: the persona's account cannot be reached, the data cannot be produced, or the situation crosses an untestable boundary.
|
|
195
|
+
|
|
130
196
|
**Expected State & Semantic Squinting — verify environment before walking.** A scenario testing triage, review, or audits requires a populated, realistic system.
|
|
131
197
|
1. **Expected State:** If the scenario defines `state.description`, verify the landing screen matches what the persona expects to see (e.g. populated register, open incidents). If the screen is completely blank and the persona cannot self-seed, stop early and report the run as blocked by missing preconditions rather than logging false product bugs.
|
|
132
198
|
2. **Data Squinting & Approximation:** If the exact record described in the narrative is absent (e.g. no "damaged conveyor belt" hazard), the walker must follow `state.approximation` — "squint" at the real data, pick the closest plausible record (e.g. an active mechanical or safety hazard), and proceed with the evaluation/delegation workflow.
|
|
133
199
|
- **Squinting Guardrail:** Squinting is bounded to semantically related items within the same domain workflow. It does NOT permit drifting to unrelated modules (e.g. switching from risk assessment to user profile settings). If no plausible record exists, declare the run blocked.
|
|
134
200
|
3. **Empty State Fallback:**
|
|
135
201
|
- If the database is empty and the persona role has creation rights (e.g. Manager or Reporter), the persona may create the minimal viable record in-character to proceed with the core test.
|
|
136
|
-
- If the persona role is read-only or subordinate (cannot self-seed), stop and report the run as blocked by preconditions.
|
|
202
|
+
- If the persona role is read-only or subordinate (cannot self-seed), stop and report the run as blocked by preconditions (`iamu summary <run-id> --blocked "<what was missing>"`).
|
|
137
203
|
|
|
138
204
|
**Access — how the walker becomes this persona.** A walk as a forklift driver that runs with an administrator's session reports nothing true about what the driver can see or reach. Access is recorded in two places, and `iamu instructions walk` (step 4) returns both as `access`:
|
|
139
205
|
|
|
140
|
-
- `access.project` — from `iamu/
|
|
206
|
+
- `access.project` — from `iamu/testability.md` `access` (older projects: `iamu/context.yml`): HOW switching user is done in this product (a dev persona switcher, a storage key, seeded test accounts, a login form). Written once per project.
|
|
141
207
|
- `access.persona` — from the persona file's `access`: WHICH user this persona is (an account name, a role, a switcher key).
|
|
142
208
|
|
|
143
209
|
**Interactive Auth Handshake (for enterprise auth, SSO, 2FA, BankID):**
|
|
144
210
|
If the product is behind enterprise login where automated dev persona switching is not configured:
|
|
145
211
|
1. Open the browser to the target URL (`iamu browse start --run <run-id>` or browser tool).
|
|
146
212
|
2. Prompt the human user:
|
|
147
|
-
> 👉 **Please log in as `<persona.role>` (`<persona.name>`) in the opened browser window.**
|
|
213
|
+
> 👉 **Please log in as `<persona.role>` (`<persona.name>`) in the opened browser window.** Tell me once you reach the dashboard (e.g. "I'm logged in") to hand control to the walker...
|
|
148
214
|
3. Wait for the user to confirm, then let the walker drive the authenticated session.
|
|
149
215
|
|
|
150
216
|
If automated switching exists:
|
|
151
217
|
1. Check the project's own agent docs (`CLAUDE.md`, `AGENTS.md`) for a documented way to switch user or role.
|
|
152
218
|
2. Map the persona to the closest account or role the product actually has. If nothing fits, say so.
|
|
153
|
-
3. Write what you learned: the mechanism into `iamu/
|
|
219
|
+
3. Write what you learned: the mechanism into the `iamu/testability.md` frontmatter as `access:` (it is test setup, so it does not belong in `context.yml`, which holds the domain; if `iamu doctor` finds it there, move it), and the persona's own key with `iamu set persona <slug> --access <key>`. Passwords and tokens never go in either — name where they live (an env var, a vault entry) instead.
|
|
154
220
|
|
|
155
221
|
Carry the result into the walking prompt as the `## Access` section: the exact steps to become the persona, with the instruction to do them BEFORE the first recorded step.
|
|
156
222
|
|
|
@@ -164,13 +230,16 @@ iamu start-run <scenario-slug> --target <target> --json
|
|
|
164
230
|
|
|
165
231
|
This creates the run directory, writes `walkthrough.json` with resolved persona/outline slugs and the build under test (git SHA and branch, whether there are uncommitted changes outside `iamu/` with a fingerprint of them, CI run when in CI), and returns:
|
|
166
232
|
```json
|
|
167
|
-
{ "run_id": "...", "path": "...", "scenario_slug": "...", "target_url": "...", "persona_slug": "...", "outline_slug": "...", "build": { "git_sha": "...", "git_branch": "...", "git_dirty": false }, "environment": "https://staging.example.com" }
|
|
233
|
+
{ "run_id": "...", "path": "...", "scenario_slug": "...", "target_url": "...", "live_viewer_url": "https://app.iamu.dev/projects/.../live/...", "persona_slug": "...", "outline_slug": "...", "build": { "git_sha": "...", "git_branch": "...", "git_dirty": false }, "environment": "https://staging.example.com" }
|
|
168
234
|
```
|
|
169
235
|
|
|
170
236
|
Pass `--build <label>` to name the build (a version or release tag) and `--env <name>` to name the environment (`staging`, `production`); without `--env` the environment is the target URL's origin. Neither is needed for a local walk.
|
|
171
237
|
|
|
172
238
|
Use the returned `run_id` and `path` for all subsequent operations.
|
|
173
239
|
|
|
240
|
+
**If `live_viewer_url` is returned**, immediately output it to the user so the operator can follow along live in their browser:
|
|
241
|
+
🔴 **Live stream:** `<live_viewer_url>`
|
|
242
|
+
|
|
174
243
|
**Size the browser for this persona** (`iamu browse` only), every run — also when a browser is already open from an earlier run:
|
|
175
244
|
|
|
176
245
|
```bash
|
|
@@ -190,11 +259,16 @@ iamu instructions walk --scenario <scenario-slug> --run <run-id> --surface brows
|
|
|
190
259
|
The result's `walker_prompt` is the walker's entire prompt. Pass it verbatim — do not rewrite, summarize or trim it. The prompt already carries the dismissed findings, the active tester guidance rules (`iamu/guidance/`) for this scenario, and — when fixes await a re-run — the places they were seen (places only, never what was wrong; the list is in `revisit`). The rest of the bundle (`persona`, `outline`, `access`, `dismissed_findings`, `tester_guidance`, …) is there for you, not the walker. If `access` is missing a half, fill it in first (step 3) and re-run this command.
|
|
191
260
|
|
|
192
261
|
**Preflight: Unattended execution check.** A walkthrough executes 15–30 terminal commands sequentially (`iamu browse step`, `iamu new-finding`). If your agent host requires manual confirmation for terminal/shell commands (standard interactive mode in Claude Code, Cursor, Antigravity, Cline, Windsurf, etc.), the walker subagent will stall waiting for approval on every step. Before dispatching, verify that command auto-approval / unattended execution is enabled in your environment, or warn the user once:
|
|
193
|
-
|
|
262
|
+
"Autonomous walkthroughs require auto-approving terminal commands so the walker can drive the product unattended. If command approvals are prompted, please enable auto-approval or expect to approve steps manually."
|
|
194
263
|
|
|
195
264
|
**CRITICAL: Dispatch the walker as an isolated subagent.** Spawn a fresh subagent using your host editor's subagent mechanism (e.g. `Agent(...)` in Claude Code, `invoke_subagent` in Antigravity, or host-native subagent launcher). The subagent gets ONLY the walking prompt (`walker_prompt`) — no prior conversation history.
|
|
196
265
|
|
|
197
|
-
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
|
+
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.
|
|
267
|
+
|
|
268
|
+
**Subagent Capability Fencing (Superpowers Pattern):**
|
|
269
|
+
- **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.
|
|
270
|
+
- **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.
|
|
271
|
+
- **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`.
|
|
198
272
|
|
|
199
273
|
**Model tiering & subagent dispatch:**
|
|
200
274
|
- **Walker (Browser Navigation):** High turn count, mechanical tool-use. Use the **fast** model tier (`flash` or `haiku`) by default to cut walk time by ~60% and conserve session quota.
|
|
@@ -221,6 +295,15 @@ The subagent inherits the driving-surface tools and drives the product independe
|
|
|
221
295
|
|
|
222
296
|
After the walker returns, continue to the post-walk pipeline below.
|
|
223
297
|
|
|
298
|
+
**Live progress reporting (terminal monitoring):**
|
|
299
|
+
While the walker subagent executes, maintain visible feedback in the terminal:
|
|
300
|
+
- At start (if cloud-linked): output the live dashboard viewer link: `Live stream: <viewer_url>`
|
|
301
|
+
- As progress occurs (on subagent notifications or milestone steps): output a concise single-line progress update:
|
|
302
|
+
`step <N> · <action/surface> · <F> finding(s)`
|
|
303
|
+
This gives the terminal operator immediate real-time visibility into the persona's progress.
|
|
304
|
+
- If the walker stops because the user pressed Stop in the viewer (`The user stopped this run from the live viewer. End the walk now.`), respect the cancellation and proceed to post-walk assembly with existing steps.
|
|
305
|
+
- Once the walker finishes, announce completion and proceed immediately to the post-walk pipeline.
|
|
306
|
+
|
|
224
307
|
**Recording steps:**
|
|
225
308
|
|
|
226
309
|
Use atomic CLI commands to drive and record in one step — do NOT manually author JSON files:
|
|
@@ -247,15 +330,13 @@ Step files live at `iamu/.runs/<run-id>/steps/<NNN>.json`. The CLI manages monot
|
|
|
247
330
|
|
|
248
331
|
**Recording findings:**
|
|
249
332
|
|
|
250
|
-
Use the CLI to create findings with valid frontmatter, UUID, and
|
|
333
|
+
Use the CLI to create findings with valid frontmatter, UUID, slug, description, and recommendation in one atomic call:
|
|
251
334
|
|
|
252
335
|
```bash
|
|
253
|
-
iamu new-finding --scenario <slug> --run <run-id> --title "Short title" --type hinders --severity major --ui-fact "What the UI showed" --consequence "Impact on persona" --task-impact impairs --confidence high --json
|
|
336
|
+
iamu new-finding --scenario <slug> --run <run-id> --title "Short title" --type hinders --severity major --ui-fact "What the UI showed" --consequence "Impact on persona" --task-impact impairs --confidence high --description "Detailed markdown description" --recommendation "Concrete fix proposal" --json
|
|
254
337
|
```
|
|
255
338
|
|
|
256
|
-
This generates a valid UUID, derives the slug from the title, and writes
|
|
257
|
-
|
|
258
|
-
After the CLI scaffolds the file, edit the file to add the finding body (description + recommendation) below the frontmatter.
|
|
339
|
+
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.
|
|
259
340
|
|
|
260
341
|
Valid `--type` values: `helps`, `hinders`, `missing`, `irrelevant`, `incorrect`.
|
|
261
342
|
Valid `--severity` values: `critical`, `major`, `minor`, `observation`.
|
|
@@ -266,6 +347,12 @@ Findings never name a human test: the walker does not see them. The judge links
|
|
|
266
347
|
|
|
267
348
|
**DEPTH GATE:** Both `--ui-fact` and `--consequence` should be provided. If you cannot articulate both, record as a step note instead — do not create a finding file.
|
|
268
349
|
|
|
350
|
+
**Closing Synthesis:**
|
|
351
|
+
Before finishing the walk, record persona synthesis using `iamu summary`:
|
|
352
|
+
```bash
|
|
353
|
+
iamu summary <run-id> --worked "What worked well 1" --worked "What worked well 2" --question "Open question 1"
|
|
354
|
+
```
|
|
355
|
+
|
|
269
356
|
**Post-walk pipeline (MANDATORY — do NOT skip any step):**
|
|
270
357
|
|
|
271
358
|
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.
|
|
@@ -278,16 +365,19 @@ iamu complete <run-id> --no-prompt --no-push --json
|
|
|
278
365
|
|
|
279
366
|
This reads all steps, findings, and entity files, assembles `canonical.json`, generates `report.md`, and computes the delta against prior runs.
|
|
280
367
|
|
|
368
|
+
**If the result has `blocked`**, the walker could not start the walk as it was set up (`iamu summary --blocked`): it could not become the persona, or the world the situation needs was not there. That is a setup problem, not a product finding. Skip B and C — a blocked run is never compared with earlier runs and never counts as a re-run. Tell the user in one line what was missing (`blocked.reason`), then run the `iamu-stage` skill with that reason as the starting point: fix the scenario's `state`, the persona's access, or the seed, and offer to run the scenario again. Findings the walker recorded before it stopped stay as they are. E still runs in linked mode; the report says the run was blocked.
|
|
369
|
+
|
|
281
370
|
**B. Match findings to earlier runs.** Get the matcher bundle:
|
|
282
371
|
|
|
283
372
|
```bash
|
|
284
373
|
iamu match <run-id> --json
|
|
285
374
|
```
|
|
286
375
|
|
|
287
|
-
If `needed` is `false` (no earlier findings for this scenario, or none this run), skip to C. Otherwise, read the prompt from `iamu/.runs/<run-id>/match_prompt.md` directly and dispatch a matcher subagent with it as its only context (use the **thorough** model tier, e.g. `Model="pro"` in Antigravity, to accurately evaluate semantic equivalence).
|
|
376
|
+
If `needed` is `false` (no earlier findings for this scenario, or none this run), skip to C. Otherwise, read the prompt from `iamu/.runs/<run-id>/match_prompt.md` directly and dispatch a matcher subagent with it as its only context (use the **thorough** model tier, e.g. `Model="pro"` in Antigravity, to accurately evaluate semantic equivalence). Record its JSON answer via `--data` (or `--file`):
|
|
288
377
|
|
|
289
378
|
```bash
|
|
290
|
-
iamu match-record <run-id> --
|
|
379
|
+
iamu match-record <run-id> --data '<matches.json>'
|
|
380
|
+
# or: iamu match-record <run-id> --file <matches.json>
|
|
291
381
|
```
|
|
292
382
|
|
|
293
383
|
This links recurrences to their earlier canonical finding, marks earlier findings the run's steps show fixed (only with cited steps), and re-derives the delta and report. If the matcher's output is rejected, show the error to the matcher once and retry; if it fails again, continue without it — the exact-text delta from A stands.
|
|
@@ -298,10 +388,11 @@ This links recurrences to their earlier canonical finding, marks earlier finding
|
|
|
298
388
|
iamu evaluate <run-id> --json
|
|
299
389
|
```
|
|
300
390
|
|
|
301
|
-
Read the evaluation prompt from `iamu/.runs/<run-id>/judge_prompt.md` directly. Dispatch the evaluator as a subagent with that prompt (use the **thorough** model tier, e.g. `Model="pro"` in Antigravity, to prevent severity inflation). After the evaluator returns verdicts, record them locally with `--no-push
|
|
391
|
+
Read the evaluation prompt from `iamu/.runs/<run-id>/judge_prompt.md` directly. Dispatch the evaluator as a subagent with that prompt (use the **thorough** model tier, e.g. `Model="pro"` in Antigravity, to prevent severity inflation). After the evaluator returns verdicts, record them locally with `--no-push` via `--data` (or `--file`):
|
|
302
392
|
|
|
303
393
|
```bash
|
|
304
|
-
iamu evaluate-record <run-id> --
|
|
394
|
+
iamu evaluate-record <run-id> --data '<verdicts.json>' --no-prompt --no-push
|
|
395
|
+
# or: iamu evaluate-record <run-id> --file <verdicts.json> --no-prompt --no-push
|
|
305
396
|
```
|
|
306
397
|
|
|
307
398
|
This links findings to human tests (`human_test_id`) and updates the report with judge verdicts.
|
|
@@ -336,72 +427,47 @@ The `walker_prompt` from `iamu instructions walk` is the source of truth and con
|
|
|
336
427
|
|
|
337
428
|
### 5. Present assessment — stay in the conversation
|
|
338
429
|
|
|
339
|
-
Render results **inline**
|
|
340
|
-
|
|
341
|
-
1. **Executive Summary Banner & Focus Checkpoint**
|
|
342
|
-
|
|
343
|
-
Read the outline's `human_tests[0].question` and answer it directly. Use the evaluation verdict if available:
|
|
430
|
+
Render results **inline** as a concise executive scorecard.
|
|
344
431
|
|
|
345
|
-
|
|
346
|
-
Walkthrough: [<scenario-slug>](iamu/scenarios/<scenario-slug>.md) ([<persona>](iamu/personas/<persona>.md))
|
|
347
|
-
Verdict: <FAIL / PARTIAL / PASS> · <N> Blockers (Critical) · <M> Friction points (Major/Minor) · <K> Helpers (Steps: <N>)
|
|
348
|
-
Focus Checkpoint: "<human_tests[0].question>" → <No / Partial / Yes>: <1-2 sentence direct answer explaining why>
|
|
349
|
-
```
|
|
350
|
-
|
|
351
|
-
2. **Progress since last run** (only when canonical.json contains a `verification` section). Present the delta:
|
|
352
|
-
|
|
353
|
-
```
|
|
354
|
-
Since this scenario's last run:
|
|
355
|
-
✓ 1 fixed, re-checked (handoff note saves — step 6)
|
|
356
|
-
✗ 1 persists (timeout warning)
|
|
357
|
-
○ 2 not seen this run (handoff list filtering, submit confirmation)
|
|
358
|
-
+ 1 new since that run (date picker locale)
|
|
359
|
-
```
|
|
360
|
-
|
|
361
|
-
`resolved` means the matcher saw this run's steps do the thing the finding said failed — say which step. `not_observed` means only that this walk did not record the finding again. Never present it as fixed: the walker may have stopped before that screen or taken another route. Say which ones were not seen and, if the walk plainly never reached the screen they live on, say that too.
|
|
362
|
-
|
|
363
|
-
3. **Findings** — severity-first (CRITICAL → MAJOR → MINOR), grouped by type (hinders and missing first, helps at the bottom). For each finding, include the **persona reaction**, **evidence citation**, and **clickable link**:
|
|
364
|
-
|
|
365
|
-
**Hinders / Missing** (act on these):
|
|
366
|
-
|
|
367
|
-
1. [CRITICAL · hinders] Submit fails opaquely when required field empty ([file](iamu/findings/<slug>.md))
|
|
368
|
-
• Persona: <Persona Name>: "<Persona reaction quote or consequence showing real human friction>"
|
|
369
|
-
• Evidence: Step <N> at <url> (Screenshot: [view](iamu/.runs/<run-id>/screenshots/<NNN>.png))
|
|
370
|
-
• Recommendation: <Concrete recommendation from finding>
|
|
432
|
+
**ANTI-BLOAT DIRECTIVE:** Terminal viewports are small. Never output multi-screen walls of markdown text. The overview exists only to present the top-line score and orient the user for triage. Do NOT dump long quotes, recommendations, full descriptions, or "What Worked" essays here — those belong in the interactive triage step below.
|
|
371
433
|
|
|
372
|
-
|
|
373
|
-
• Persona: <Persona Name>: "<Persona reaction quote or consequence>"
|
|
374
|
-
• Evidence: Step <N> at <url>
|
|
375
|
-
• Recommendation: <Concrete recommendation from finding>
|
|
434
|
+
Keep the presentation under 15 lines total:
|
|
376
435
|
|
|
377
|
-
|
|
378
|
-
|
|
379
|
-
|
|
436
|
+
```
|
|
437
|
+
Walkthrough: [<scenario-slug>](iamu/scenarios/<scenario-slug>.md) ([<persona>](iamu/personas/<persona>.md))
|
|
438
|
+
Verdict: <FAIL / PARTIAL / PASS> · <N> Blockers (Critical) · <M> Friction points (Major/Minor) · <K> Helpers (Steps: <N>)
|
|
439
|
+
Focus Checkpoint: "<human_tests[0].question>" → <No / Partial / Yes>: <1-sentence direct answer>
|
|
380
440
|
|
|
381
|
-
|
|
441
|
+
Findings:
|
|
442
|
+
1. [<CRITICAL|MAJOR|MINOR> · <type>] <Short title> (Step <N> at <short_url_path>)
|
|
443
|
+
2. [<CRITICAL|MAJOR|MINOR> · <type>] <Short title> (Step <N> at <short_url_path>)
|
|
444
|
+
...
|
|
445
|
+
(Helps: • [helps] <short title> (Step <N>))
|
|
382
446
|
|
|
383
|
-
|
|
384
|
-
|
|
385
|
-
- Adjacent untested scenario in the same capability
|
|
386
|
-
- Nothing (if coverage is good)
|
|
447
|
+
Cloud: <Shareable report: <url> | Local only>
|
|
448
|
+
```
|
|
387
449
|
|
|
388
|
-
|
|
389
|
-
|
|
390
|
-
- **Linked, run not on the cloud** → the reason from step E and its remedy, e.g. `Cloud: queued — retries on the next iamu sync`.
|
|
391
|
-
- **Local-only** → on first completed run: `Want a link to share this report? iamu auth login connects to Iamu Cloud — optional, everything keeps working locally.`
|
|
450
|
+
(If canonical.json contains a `verification` section, include a 1-line delta: `Since last run: ✓ <N> fixed · ✗ <M> persist · + <K> new`.)
|
|
451
|
+
Do NOT output `### What Worked` paragraphs or lengthy bullet essays. Keep the entire summary under 15 lines, then immediately present the triage prompt below.
|
|
392
452
|
|
|
393
|
-
7. **Next actions (
|
|
453
|
+
7. **Next actions (Interactive Triage Selection)**:
|
|
454
|
+
When the walkthrough completes and yields findings:
|
|
455
|
+
- If your environment provides an interactive user-prompt tool (e.g. `ask_question`, `ask_followup_question`), invoke it:
|
|
456
|
+
- Question: "Walkthrough complete: <F> findings reported. How would you like to proceed?"
|
|
457
|
+
- Options:
|
|
458
|
+
1. "[Recommended] Walk through findings one by one"
|
|
459
|
+
2. "Apply fixes for all clear findings (batch fix)"
|
|
460
|
+
3. "Discuss findings and persona friction points"
|
|
461
|
+
4. "Re-run walkthrough to test changes"
|
|
462
|
+
- Otherwise (in CLI or text-only environments):
|
|
394
463
|
|
|
395
|
-
|
|
464
|
+
Walkthrough complete: <F> findings reported.
|
|
465
|
+
1. [Recommended] Walk through findings one by one
|
|
466
|
+
2. Apply fixes for all clear findings (batch fix)
|
|
467
|
+
3. Discuss findings and persona friction points
|
|
468
|
+
4. Re-run walkthrough to test changes
|
|
396
469
|
|
|
397
|
-
|
|
398
|
-
What would you like to do?
|
|
399
|
-
• "walk through them" → Review findings one by one with persona context & code location
|
|
400
|
-
• "fix 1 and 2" → Have me implement code fixes directly
|
|
401
|
-
• "discuss 2" → Ask why the persona hit this friction or explore trade-offs
|
|
402
|
-
• "skip 3" / "dismiss 3" → Dismiss finding (out of scope, intended, or walker error)
|
|
403
|
-
• "re-run" → Re-run walkthrough to verify fixes
|
|
404
|
-
```
|
|
470
|
+
Reply '1' to review findings [default], enter 2-4, or tell me how to proceed:
|
|
405
471
|
|
|
406
472
|
### 6. Conversational Triage & Guided Review
|
|
407
473
|
|
|
@@ -409,19 +475,59 @@ The conversation is the triage surface. Do NOT eject the user to manual CLI comm
|
|
|
409
475
|
|
|
410
476
|
#### A. Guided One-by-One Review ("walk through them" / "review one by one")
|
|
411
477
|
When the user asks to review findings one by one:
|
|
412
|
-
1. **Present Finding #N in
|
|
413
|
-
|
|
414
|
-
|
|
415
|
-
|
|
416
|
-
|
|
417
|
-
|
|
418
|
-
|
|
419
|
-
|
|
478
|
+
1. **Present Finding #N in a comprehensive, dashboard-aligned summary:**
|
|
479
|
+
Do NOT force an artificial single `Location: file:line` (UX friction and user blockers often span entire flows, API errors, or policy). Instead, present:
|
|
480
|
+
```
|
|
481
|
+
Finding <N>/<total>: [<SEVERITY> · <type>] <title>
|
|
482
|
+
• Persona: <Persona Name> (<Role>) · <Screen title or URL, Step N>
|
|
483
|
+
• UI Fact: <What the UI showed or did (ui_fact)>
|
|
484
|
+
• Consequence: <Impact on the persona completing their task (consequence)>
|
|
485
|
+
• Agent Insight: <1–2 plain-language sentences synthesizing why this happens and what it means in context>
|
|
486
|
+
• Recommendation: <Concrete fix proposal from finding body>
|
|
487
|
+
• Evidence: <iamu/.runs/<run>/screenshots/step-<N>.png> [Dashboard](<url if cloud_linked>)
|
|
488
|
+
```
|
|
489
|
+
If the project is cloud-linked, include the link to the finding in Iamu Cloud (from `iamu open --print`).
|
|
490
|
+
|
|
491
|
+
Followed immediately by the decision prompt:
|
|
492
|
+
|
|
493
|
+
**CRITICAL: Embed Full Context in Interactive Prompt Modals:**
|
|
494
|
+
Host interactive tools (e.g. `ask_question`, `ask_followup_question`) render a modal that obscures the terminal and displays ONLY the tool's `question` argument. **You must embed the complete finding summary inside the `question` argument** so the reviewer has full context directly in the dialog without having to close the modal.
|
|
495
|
+
|
|
496
|
+
- If interactive tool available (e.g. `ask_question`, `ask_followup_question`), invoke it:
|
|
497
|
+
- **Question:**
|
|
498
|
+
"""
|
|
499
|
+
Finding #<N>/<total>: <title>
|
|
500
|
+
|
|
501
|
+
• Impact: [<SEVERITY> · <type>]
|
|
502
|
+
• Persona: <Persona Name> (<Role>) · <Screen title or URL, Step N>
|
|
503
|
+
• UI Fact: <ui_fact>
|
|
504
|
+
• Consequence: <consequence>
|
|
505
|
+
• Agent Insight: <1–2 sentences explaining why this happens in simple terms>
|
|
506
|
+
• Recommendation: <concrete recommendation>
|
|
507
|
+
• Evidence: <screenshot path, local file link, and cloud dashboard link if linked>
|
|
508
|
+
|
|
509
|
+
How should we triage this finding?
|
|
510
|
+
"""
|
|
511
|
+
- **Options:**
|
|
512
|
+
1. "[Recommended] Queue to fix (mark for fix & continue triage)"
|
|
513
|
+
2. "Dismiss / Skip (not relevant or walker error)"
|
|
514
|
+
3. "Discuss / Explore trade-offs"
|
|
515
|
+
4. "Fix immediately (leave triage now)"
|
|
516
|
+
5. "Next finding (keep open / defer)"
|
|
517
|
+
- Otherwise (CLI / text-only):
|
|
518
|
+
Triage Finding #<N>/<total>: '<finding title>'
|
|
519
|
+
1. [Recommended] Queue to fix (mark for fix & continue triage)
|
|
520
|
+
2. Dismiss / Skip (not relevant or walker error)
|
|
521
|
+
3. Discuss / Explore trade-offs
|
|
522
|
+
4. Fix immediately (leave triage now)
|
|
523
|
+
5. Next finding (keep open / defer)
|
|
524
|
+
Reply '1' to queue fix [default], select 2-5, or describe your decision:
|
|
420
525
|
|
|
421
526
|
2. **Handle the user's decision**:
|
|
422
|
-
- **
|
|
423
|
-
|
|
424
|
-
Tell the user
|
|
527
|
+
- **Queue to fix [Recommended]**:
|
|
528
|
+
Add finding to the session's fix queue.
|
|
529
|
+
Tell the user in 1 line: "✓ Queued for fix. Ready for finding #<N+1>?" and advance immediately.
|
|
530
|
+
Do NOT edit code or leave triage yet — complete triage across all findings first.
|
|
425
531
|
- **Skip / Dismiss**:
|
|
426
532
|
If reason is not specified, ask or infer the appropriate category:
|
|
427
533
|
- `out_of_scope`: Not relevant to this project/flow scope.
|
|
@@ -429,17 +535,74 @@ When the user asks to review findings one by one:
|
|
|
429
535
|
- `walker_error`: Walker misread the screen or made a navigational error.
|
|
430
536
|
- `duplicate`: Duplicate of another finding.
|
|
431
537
|
Execute: `iamu triage <slug> --status dismissed --reason <reason> --note "<why>"`.
|
|
432
|
-
Tell the user: "Dismissed as `<reason>` —
|
|
538
|
+
Tell the user in 1 line: "✓ Dismissed as `<reason>` — guidance rule recorded."
|
|
433
539
|
Then advance to finding #<N+1>.
|
|
434
|
-
- **Discuss / Why**:
|
|
435
|
-
|
|
436
|
-
|
|
540
|
+
- **Discuss / Why (STRICT CONSTRAINT: maximum 3-4 concise bullets, under 80 words total)**:
|
|
541
|
+
Never write multi-section essays, markdown headers (`### Trade-off Analysis`, `#### 1. Why it was built this way`, `#### 2. The Operational Failure`), or ASCII/markdown tables. Deliver a direct, surgical 3-bullet answer:
|
|
542
|
+
• **Root Cause:** 1 sentence on why the UI or workflow behaves this way (and source file if known).
|
|
543
|
+
• **Persona Friction:** 1 sentence on the practical operational consequence.
|
|
544
|
+
• **Recommended Fix & Trade-off:** 1-2 sentences with concrete approach and any trade-offs.
|
|
545
|
+
Immediately re-prompt the triage decision for finding #<N>.
|
|
546
|
+
- **Fix immediately (leave triage now)**:
|
|
547
|
+
If the user explicitly chooses to drop out of triage and fix right now:
|
|
548
|
+
Make the code edit, verify it loads (or check local tests/types), update the finding with `iamu triage <slug> --status addressed --note "<summary of fix>"`.
|
|
549
|
+
Tell the user in 1 line: "✓ Applied fix. Finding #<N> marked addressed."
|
|
550
|
+
- **Next finding (keep open / defer)**:
|
|
437
551
|
Leave open (or set `triage_status: deferred` with note) and advance to finding #<N+1>.
|
|
438
552
|
|
|
439
553
|
3. **Wrap up after all findings are reviewed**:
|
|
554
|
+
Report the triage recap in 1-2 lines:
|
|
555
|
+
```text
|
|
556
|
+
Triage Complete: <K> queued for fix, <D> dismissed, <O> kept open/deferred.
|
|
557
|
+
```
|
|
558
|
+
If `<K> > 0` (findings are queued for fix):
|
|
559
|
+
- Prompt the user to execute the batch:
|
|
560
|
+
- If interactive tool available:
|
|
561
|
+
- Question: "Triage complete. Apply fixes for the <K> queued findings now?"
|
|
562
|
+
- Options:
|
|
563
|
+
1. "[Recommended] Apply fixes for queued findings in workspace now"
|
|
564
|
+
2. "Re-run walkthrough to verify dismissed items first"
|
|
565
|
+
3. "Done for now (keep fixes open in iamu/findings/)"
|
|
566
|
+
- Otherwise (CLI / text-only):
|
|
567
|
+
Apply fixes for the <K> queued findings now?
|
|
568
|
+
1. [Recommended] Apply fixes for queued findings in workspace now
|
|
569
|
+
2. Re-run walkthrough to verify dismissed items first
|
|
570
|
+
3. Done for now (keep fixes open in iamu/findings/)
|
|
571
|
+
Reply '1' to apply fixes [default], or select 2-3:
|
|
572
|
+
|
|
573
|
+
- **Executing the queued fixes:**
|
|
574
|
+
When Option 1 is chosen, apply code edits for each queued finding sequentially in the workspace. Verify the changes once (run test/typecheck suite). Update each finding with `iamu triage <slug> --status addressed --note "<summary of fix>"`.
|
|
575
|
+
Tell the user: "✓ Applied fixes for <K> findings. All marked addressed."
|
|
576
|
+
|
|
440
577
|
- Run `iamu validate --all`.
|
|
441
|
-
|
|
442
|
-
-
|
|
578
|
+
|
|
579
|
+
- **Closed-Loop Regression Verification (1-Click):**
|
|
580
|
+
Immediately prompt the user to verify the fixes hold in practice:
|
|
581
|
+
- If interactive tool available:
|
|
582
|
+
- Question: "Fixes applied and validated. Verify them now with a walkthrough re-run?"
|
|
583
|
+
- Options:
|
|
584
|
+
1. "[Recommended] Re-run walkthrough to verify fixes hold"
|
|
585
|
+
2. "Done for now (leave verification for later)"
|
|
586
|
+
- Otherwise (CLI / text-only):
|
|
587
|
+
Verify fixes now?
|
|
588
|
+
1. [Recommended] Re-run walkthrough to verify fixes hold
|
|
589
|
+
2. Done for now (leave verification for later)
|
|
590
|
+
Reply '1' to re-run [default], or select 2:
|
|
591
|
+
|
|
592
|
+
When Option 1 is chosen:
|
|
593
|
+
1. Start the verification run: `iamu start-run <scenario-slug> --target <target> --json`. Note: `start-run` automatically pulls all awaiting findings into `revisit` places in `walkthrough.json`.
|
|
594
|
+
2. Walk through the scenario, ensuring the persona visits the revisit places.
|
|
595
|
+
3. Assemble the run with `iamu complete <run-id> --json`. The canonical assembly compares against the baseline run and outputs `verification` (`resolved`, `persists`, `new_findings`).
|
|
596
|
+
4. Report the verification verdict:
|
|
597
|
+
```text
|
|
598
|
+
Verification Complete:
|
|
599
|
+
Scenario: <scenario-slug>
|
|
600
|
+
Baseline run: <baseline_run_id>
|
|
601
|
+
Verified fixes: ✓ <N> resolved
|
|
602
|
+
Regressions: 0 new findings
|
|
603
|
+
```
|
|
604
|
+
5. If any finding persists or a regression occurred, present only the remaining items for follow-up triage.
|
|
605
|
+
6. In linked mode, run `iamu sync --json` once so teammates see the verified decisions.
|
|
443
606
|
|
|
444
607
|
#### B. Direct Batch Actions ("fix 1 and 2", "fix all critical")
|
|
445
608
|
Read the finding details from the canonical JSON (already in context), inspect the code, make the edits, and update frontmatter to `triage_status: addressed` with `triage_note`.
|