@iamu-dev/iamu 0.2.0-beta.16 → 0.2.0-beta.17

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.
@@ -226,9 +226,22 @@ If `<N> > 0` findings were queued for fix:
226
226
 
227
227
  - **Executing the queued fixes:**
228
228
  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>"`.
229
- Tell the user: "✓ Applied fixes for <N> findings. All marked addressed."
229
+ Run `iamu validate --all` to verify all entities before reporting done.
230
230
 
231
- Run `iamu validate --all` to verify all entities before reporting done.
231
+ - **Closed-Loop Regression Verification (1-Click):**
232
+ If the addressed findings belong to a known scenario:
233
+ - If interactive tool available:
234
+ - Question: "Fixes applied and validated. Verify them now with a walkthrough re-run?"
235
+ - Options:
236
+ 1. "[Recommended] Re-run walkthrough for <scenario-slug> to verify fixes hold"
237
+ 2. "Done for now (leave verification for later)"
238
+ - Otherwise (CLI / text-only):
239
+ Verify fixes now?
240
+ 1. [Recommended] Re-run walkthrough for <scenario-slug> to verify fixes hold
241
+ 2. Done for now (leave verification for later)
242
+ Press Enter to re-run [1], select 2:
243
+
244
+ When Option 1 is chosen, hand off to `iamu-run <scenario-slug>` to re-run the walkthrough, visit the revisit places, verify resolutions in `canonical.json`, and report the verified delta.
232
245
 
233
246
  ### 6. Publish and link (linked mode only)
234
247
 
@@ -200,19 +200,24 @@ Use CLI commands to scaffold entities with valid frontmatter. The CLI generates
200
200
 
201
201
  **1. Capability** (only if new):
202
202
  ```bash
203
- iamu new capability --name "Incident Reporting" --description "What staff can do when something goes wrong on shift" --json
203
+ iamu new capability --name "Incident Reporting" \
204
+ --description "What staff can do when something goes wrong on shift" \
205
+ --paths "/incidents" \
206
+ --area "Operations" \
207
+ --json
204
208
  ```
205
209
 
206
210
  **2. Outline** (the situation — problem-space, no UI references):
207
211
  ```bash
208
212
  iamu new outline --name "Busy shift handoff" \
209
213
  --capability incident-reporting \
214
+ --additional-capabilities team-access \
210
215
  --tension "Incident details are fragmented across multiple logs while shift time expires" \
211
216
  --narrative "A shift leader needs to hand off a set of open incidents to the incoming supervisor." \
212
217
  --human-test "Could the incoming leader act immediately without asking clarifying questions?" \
213
218
  --json
214
219
  ```
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.
220
+ The `--capability`, `--additional-capabilities`, `--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
221
 
217
222
  **3. Persona** (if user picked a new persona to scaffold):
218
223
  ```bash
@@ -52,7 +52,16 @@ Read existing entities to understand what's already been tested:
52
52
  - `iamu/scenarios/` — what's already bound to personas?
53
53
  - `iamu/personas/` — who do we already have in our casting panel?
54
54
 
55
- Build a coverage picture: which capabilities have scenarios? Which actors from `context.yml` lack personas? Where are the gaps?
55
+ **Check Live Product Map Coverage:**
56
+ Inspect live surface coverage by checking `iamu status --json` (`explore`) or running `iamu explore coverage --json`:
57
+ - **When an explore map exists:**
58
+ Extract unreached surfaces (`unreached` array) and `run_only_places`.
59
+ - **Grounding proposals in unreached topology:** Prioritize proposing scenarios that enter through or traverse these unreached surfaces, pairing them with actors from `context.yml` who have domain tension in those areas.
60
+ - Set each proposed scenario's `Reachable Surface` and entry route to the unreached surface path.
61
+ - **When no explore map exists:**
62
+ Proceed with domain context grounding. Note: `Tip: run iamu explore <target_url> to map live surfaces so proposals target real unreached routes.`
63
+
64
+ Build a coverage picture: which capabilities have scenarios? Which actors from `context.yml` lack personas? Which discovered surfaces have 0 walkthrough coverage? Where are the gaps?
56
65
 
57
66
  ### 3. Determine focus
58
67
 
@@ -60,7 +69,7 @@ Four entry paths based on `$ARGUMENTS`:
60
69
 
61
70
  - **Persona / Tester panel** (e.g. `iamu-propose "personas"`, `"who else should we test with?"`, `"propose new personas"`) — analyze which actors from `context.yml` lack personas in `iamu/personas/`. Focus proposals on creating durable, diagnostically biased personas for uncovered roles.
62
71
  - **Area or capability** (e.g. `iamu-propose "employee provisioning"`) — focus proposals on this area. Match against capabilities and context actors/workflows.
63
- - **Open-ended** (e.g. `iamu-propose`, `iamu-propose "what's missing?"`) — analyze coverage gaps across both scenarios and persona diversity. Prioritize uncovered capabilities and actors without personas.
72
+ - **Open-ended** (e.g. `iamu-propose`, `iamu-propose "what's missing?"`) — analyze coverage gaps across scenarios, persona diversity, and unreached surfaces from `iamu explore coverage`. Prioritize uncovered capabilities, actors without personas, and unreached live surfaces.
64
73
  - **Specific tension** (e.g. `iamu-propose "what happens when the safety coordinator disagrees with HR?"`) — use as seed but ground in context. Verify the tension is real (do these actors and dynamics exist in the domain?).
65
74
 
66
75
  ### 4. Present candidates (Numbered Cards)
@@ -73,16 +82,23 @@ Lead with existing coverage using clickable links, then render the candidates:
73
82
 
74
83
  ```
75
84
  Existing coverage: <N> scenarios ([<slug1>](iamu/scenarios/<slug1>.md), ...). Uncovered areas: <gaps>.
85
+ Product map: <R>/<T> surfaces reached · <U> unreached ([view](iamu explore coverage)).
76
86
 
77
87
  1. <Short situation name> (<Actor from context>)
88
+ • Capability: <Capability slug, e.g. billing-invoicing>
89
+ • Entry route: <Unreached route from map, e.g. /billing/invoices/new>
78
90
  • Tension: <1-line human/domain tension>
79
91
  • Stress-tests: <What this reveals about the product>
80
92
 
81
93
  2. <Short situation name> (<Actor from context>)
94
+ • Capability: <Capability slug, e.g. team-access>
95
+ • Entry route: <Unreached route from map, e.g. /team/roles/custom>
82
96
  • Tension: <1-line human/domain tension>
83
97
  • Stress-tests: <What this reveals about the product>
84
98
 
85
99
  3. <Short situation name> (<Actor from context>)
100
+ • Capability: <Capability slug, e.g. incident-response>
101
+ • Entry route: <Unreached route from map, e.g. /incidents/export>
86
102
  • Tension: <1-line human/domain tension>
87
103
  • Stress-tests: <What this reveals about the product>
88
104
 
@@ -141,7 +157,7 @@ Ground rules for generation:
141
157
 
142
158
  ### 5. Selection and Handoff
143
159
 
144
- - **User picks a scenario candidate (e.g. "1" or Enter)** → Immediately invoke `iamu-new` in **Fast-Path Scenario Mode** passing the selected candidate title, actor, tension, and evaluation checkpoint as structured arguments. Do NOT allow `iamu-new` to restart seed brainstorming. It must present the single Scenario Spec-Sheet directly for instant 1-click persistence.
160
+ - **User picks a scenario candidate (e.g. "1" or Enter)** → Immediately invoke `iamu-new` in **Fast-Path Scenario Mode** passing the selected candidate title, actor, primary capability slug (`--capability`), entry path (`--entry`), tension, and evaluation checkpoint as structured arguments. Do NOT allow `iamu-new` to restart seed brainstorming. It must present the single Scenario Spec-Sheet directly for instant 1-click persistence.
145
161
  - **User picks a persona candidate** → Immediately invoke `iamu-new` in **Standalone Persona Mode** with the candidate's name, role, disposition, and friction triggers to scaffold directly into `iamu/personas/<slug>.md`.
146
162
  - **User refines** → regenerate candidates applying the requested adjustments.
147
163
  - **User rejects all** → ask what domain area or actor they want to explore. Loop back to step 4.
@@ -144,7 +144,27 @@ After bind + brief, the scenario is ready to execute. Continue to step 3.
144
144
  1. If the user passed an explicit target or the scenario has `target_url`, use that.
145
145
  2. Otherwise, check `iamu/testability.md` for `target_url`.
146
146
  3. If still unconfigured, prompt the user for the target URL (live product, staging, or localhost).
147
- Verify target reachability and dev server health with `iamu doctor --target <url>` before launching. If `localhost` is unreachable, prompt the user to boot their dev server (e.g. `npm run dev`) or ask before launching it, so the walker does not fail against an unstarted port.
147
+ **Dev Server Preflight Check:**
148
+ Verify target reachability before launching the walker with `iamu doctor --target <url>` (or a fast HTTP probe).
149
+ If the target is a local URL (e.g. `http://localhost:*`, `http://127.0.0.1:*`) and is unreachable:
150
+ 1. Inspect `iamu/testability.md` for `Command:` under `## Target & Run Instructions` (or check `package.json` for a `dev` or `start` script).
151
+ 2. Prompt the user:
152
+ - If interactive tool available:
153
+ - Question: "Target URL <url> is unreachable. Boot dev server now?"
154
+ - Options:
155
+ 1. "[Recommended] Boot dev server in background (`<dev_command>`) and proceed"
156
+ 2. "I will start the dev server manually (wait for port)"
157
+ 3. "Specify a different target URL"
158
+ - Otherwise (CLI / text-only):
159
+ Target URL <url> is unreachable. Boot dev server now?
160
+ 1. [Recommended] Boot dev server in background (`<dev_command>`) and proceed
161
+ 2. I will start the dev server manually (wait for port)
162
+ 3. Specify a different target URL
163
+ Press Enter to boot dev server [1], select 2-3:
164
+ 3. If Option 1 is chosen:
165
+ - Launch `<dev_command>` in the background as a managed daemon process.
166
+ - Poll `<url>` with HTTP requests until it responds (timeout: 30s).
167
+ - Once reachable, proceed immediately to the walkthrough.
148
168
 
149
169
  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 `entry_path` in the scenario frontmatter first (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.
150
170
 
@@ -512,8 +532,34 @@ When the user asks to review findings one by one:
512
532
  Tell the user: "✓ Applied fixes for <K> findings. All marked addressed."
513
533
 
514
534
  - Run `iamu validate --all`.
515
- - In linked mode, run `iamu sync --json` once so teammates see the triage decisions.
516
- - Suggest re-running the walkthrough: `iamu-run <scenario-slug>` to verify fixes.
535
+
536
+ - **Closed-Loop Regression Verification (1-Click):**
537
+ Immediately prompt the user to verify the fixes hold in practice:
538
+ - If interactive tool available:
539
+ - Question: "Fixes applied and validated. Verify them now with a walkthrough re-run?"
540
+ - Options:
541
+ 1. "[Recommended] Re-run walkthrough to verify fixes hold"
542
+ 2. "Done for now (leave verification for later)"
543
+ - Otherwise (CLI / text-only):
544
+ Verify fixes now?
545
+ 1. [Recommended] Re-run walkthrough to verify fixes hold
546
+ 2. Done for now (leave verification for later)
547
+ Press Enter to re-run [1], select 2:
548
+
549
+ When Option 1 is chosen:
550
+ 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`.
551
+ 2. Walk through the scenario, ensuring the persona visits the revisit places.
552
+ 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`).
553
+ 4. Report the verification verdict:
554
+ ```text
555
+ Verification Complete:
556
+ Scenario: <scenario-slug>
557
+ Baseline run: <baseline_run_id>
558
+ Verified fixes: ✓ <N> resolved
559
+ Regressions: 0 new findings
560
+ ```
561
+ 5. If any finding persists or a regression occurred, present only the remaining items for follow-up triage.
562
+ 6. In linked mode, run `iamu sync --json` once so teammates see the verified decisions.
517
563
 
518
564
  #### B. Direct Batch Actions ("fix 1 and 2", "fix all critical")
519
565
  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`.
@@ -29,6 +29,7 @@ When the user asks for project status, lead with an executive tally banner, foll
29
29
 
30
30
  ```
31
31
  Project Status: <P> Personas · <S> Scenarios (<R> Tested, <U> Untested) · <F> Open Findings · <C> Capabilities
32
+ Product Map: <T> Surfaces (<R> Reached · <U> Unreached) [if explore map exists]
32
33
  ```
33
34
 
34
35
  **Personas:**
@@ -40,6 +41,14 @@ Project Status: <P> Personas · <S> Scenarios (<R> Tested, <U> Untested) · <F>
40
41
  **Findings:**
41
42
  • `1` [CRITICAL · hinders] Submit fails opaquely on empty field — [`view`](iamu/findings/<slug>.md)
42
43
 
44
+ **Awaiting Verification (Needs a Re-run):**
45
+ If `iamu status` reports fixes awaiting a re-run:
46
+ • [`<scenario-slug>`](iamu/scenarios/<scenario-slug>.md) — <N> fixes awaiting verification from a re-run (`iamu-run <scenario-slug>`)
47
+
48
+ **Product Map & Unreached Surfaces:**
49
+ If `iamu status --json` has `explore` data:
50
+ • <T> surfaces mapped (<R> reached, <U> unreached) — run `iamu explore coverage` to inspect blind spots or `/iamu:propose` to target unreached surfaces.
51
+
43
52
  ### 3. Ignore internal templates
44
53
 
45
54
  The directory `iamu/.prompts/` contains internal prompt templates (`persona.md`, `outline.md`, etc.). These are NOT project entities. Never list them or explain them to the user.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@iamu-dev/iamu",
3
- "version": "0.2.0-beta.16",
3
+ "version": "0.2.0-beta.17",
4
4
  "type": "module",
5
5
  "description": "Test your product as realistic personas — scenario-driven development CLI",
6
6
  "license": "UNLICENSED",
@@ -43,16 +43,6 @@
43
43
  "engines": {
44
44
  "node": ">=22"
45
45
  },
46
- "scripts": {
47
- "build": "tsup && tsc -b --force tsconfig.build.json --emitDeclarationOnly && node scripts/copy-assets.mjs",
48
- "clean": "node -e \"fs.rmSync('dist', { recursive: true, force: true }); fs.rmSync('tsconfig.tsbuildinfo', { force: true }); fs.rmSync('tsconfig.build.tsbuildinfo', { force: true })\"",
49
- "typecheck": "tsc --noEmit",
50
- "test": "vitest run",
51
- "test:coverage": "vitest run --coverage",
52
- "eval:walkthroughs": "vitest run --config vitest.benchmark.config.ts",
53
- "eval:gemini": "node dist/eval/gemini-eval-cli.js",
54
- "pack:dry-run": "npm pack --dry-run"
55
- },
56
46
  "dependencies": {
57
47
  "@clack/prompts": "^1.8.1",
58
48
  "@modelcontextprotocol/sdk": "^1.26.0",
@@ -62,14 +52,24 @@
62
52
  "zod": "^3.25.0"
63
53
  },
64
54
  "devDependencies": {
65
- "@iamu-dev/local-store": "workspace:*",
66
- "@iamu-dev/protocol": "workspace:*",
67
- "@iamu/tsconfig": "workspace:*",
68
55
  "@types/node": "^22.0.0",
69
56
  "@vitest/coverage-v8": "^4.1.11",
70
57
  "google-auth-library": "^11.1.0",
71
58
  "tsup": "^8.5.1",
72
59
  "typescript": "^5.8.0",
73
- "vitest": "^4.1.11"
60
+ "vitest": "^4.1.11",
61
+ "@iamu-dev/local-store": "0.1.0",
62
+ "@iamu-dev/protocol": "0.1.0",
63
+ "@iamu/tsconfig": "0.1.0"
64
+ },
65
+ "scripts": {
66
+ "build": "tsup && tsc -b --force tsconfig.build.json --emitDeclarationOnly && node scripts/copy-assets.mjs",
67
+ "clean": "node -e \"fs.rmSync('dist', { recursive: true, force: true }); fs.rmSync('tsconfig.tsbuildinfo', { force: true }); fs.rmSync('tsconfig.build.tsbuildinfo', { force: true })\"",
68
+ "typecheck": "tsc --noEmit",
69
+ "test": "vitest run",
70
+ "test:coverage": "vitest run --coverage",
71
+ "eval:walkthroughs": "vitest run --config vitest.benchmark.config.ts",
72
+ "eval:gemini": "node dist/eval/gemini-eval-cli.js",
73
+ "pack:dry-run": "npm pack --dry-run"
74
74
  }
75
- }
75
+ }