@iamu-dev/iamu 0.8.0-beta.0 → 0.8.0-beta.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/bin.js +878 -227
- package/dist/commands/browse-actions.d.ts +1 -0
- package/dist/commands/browse-driver.d.ts +25 -5
- package/dist/commands/browse.d.ts +21 -1
- package/dist/commands/edit-entity.d.ts +3 -3
- package/dist/commands/init.d.ts +4 -4
- package/dist/commands/instructions-walk.d.ts +6 -0
- package/dist/commands/preflight.d.ts +4 -2
- package/dist/commands/step.d.ts +2 -0
- package/dist/index.js +878 -227
- package/dist/templates/prompts/walk.md +7 -5
- package/dist/templates/skills/iamu-design.md +20 -15
- package/dist/templates/skills/iamu-run.md +40 -16
- package/dist/templates/skills/iamu-setup.md +154 -75
- package/dist/templates/skills/iamu-stage.md +29 -23
- package/dist/templates/skills/iamu-status.md +2 -0
- package/package.json +3 -3
|
@@ -172,10 +172,12 @@ Your walking prompt has an `## Access` section saying how to become this persona
|
|
|
172
172
|
|
|
173
173
|
- For `iamu browse`:
|
|
174
174
|
```bash
|
|
175
|
-
iamu browse step --run <run-id> --action "<action>" --note "<first-person monologue>" <command> [args...]
|
|
175
|
+
iamu browse step --run <run-id> --action "<action>" --note "<first-person monologue>" <command> [args...] [--then '<command> [args...]']
|
|
176
176
|
```
|
|
177
177
|
Commands: `click <role> "<name>"`, `click-text "<text>"`, `click-index <N>`, `fill <role> "<name>" "<text>"`, `fill-index <N> "<text>"`, `select <role> "<name>" "<val>"`, `upload <role> "<name>" "<file-path>"`, `upload-index <N> "<file-path>"`, `press <key>`, `scroll [px]`, `back`, `shot`, `wait [ms]`.
|
|
178
|
-
|
|
178
|
+
`iamu browse step` automatically saves the screenshot and prints the updated `[#N]` interactive elements and accessibility snapshot — do not run a separate `snapshot` command after `browse step`.
|
|
179
|
+
Chain consecutive form fills on the same screen into a single step using `--then '<command> [args...]'`.
|
|
180
|
+
Prefer driving via `click-index <N>`, `fill-index <N> "<text>"`, or `upload-index <N> "<file-path>"` using the `[#N]` numbers from the previous step's output.
|
|
179
181
|
When a link or button opens a new window/tab (`target="_blank"`), manage tabs via `tabs`, `switch-tab <index>`, and `close-tab [index]`.
|
|
180
182
|
- For other surfaces:
|
|
181
183
|
```bash
|
|
@@ -186,7 +188,7 @@ Your walking prompt has an `## Access` section saying how to become this persona
|
|
|
186
188
|
`note` is your internal first-person persona reaction in character.
|
|
187
189
|
The CLI automatically handles sequential numbering, timestamps, screenshot capture/linking, and live event streaming.
|
|
188
190
|
|
|
189
|
-
**Findings:** Always scaffold with the CLI — never create finding files by hand or call host Edit/Write tools:
|
|
191
|
+
**Findings:** Always scaffold with the CLI — never create finding files by hand or call host Edit/Write tools. When recording multiple findings, execute them together in a single shell command chained with `&&` rather than one turn per finding:
|
|
190
192
|
|
|
191
193
|
```bash
|
|
192
194
|
iamu new-finding --scenario <slug> --run <run-id> --title "Short title" --type hinders --severity major --ui-fact "What the UI showed" --consequence "Impact on persona" --task-impact impairs --confidence high --need "What I needed at that moment" --description "What happened and why it mattered" --json
|
|
@@ -204,7 +206,7 @@ iamu new-finding --scenario <slug> --run <run-id> --title "Short title" --type h
|
|
|
204
206
|
|
|
205
207
|
Leave `triage_status` alone; triage is not the walker's job.
|
|
206
208
|
|
|
207
|
-
**Screenshots:** Screenshots are captured automatically by `iamu browse step`. If driving manually, save to `iamu/.runs/<run-id>/screenshots/step-<N>.png` before recording each step. Screenshots are optional — if the browser tool disconnects or screenshots fail, use accessibility snapshots instead and continue walking.
|
|
209
|
+
**Screenshots:** Screenshots are captured automatically by `iamu browse step`. Do not read step screenshot PNGs with your file-reading tool after routine steps — use the returned accessibility snapshot unless checking a visual layout discrepancy. If driving manually, save to `iamu/.runs/<run-id>/screenshots/step-<N>.png` before recording each step. Screenshots are optional — if the browser tool disconnects or screenshots fail, use accessibility snapshots instead and continue walking.
|
|
208
210
|
|
|
209
211
|
**Execution rule:** Execute everything via CLI commands in the shell. Never invoke host Edit or Write tools on files in the workspace.
|
|
210
212
|
|
|
@@ -222,4 +224,4 @@ iamu summary <run-id> --reached "Sent the request; it shows Pending with my mana
|
|
|
222
224
|
- `--question` — Questions for the product team: decisions the walk raised that the product does not settle and that you could not settle as the persona ("Should a reporter see the investigator's checklist at all?", "Is the 14-day notice rule enforced or only advised?"). Not doubts about the test itself.
|
|
223
225
|
- `--setup-note` — Doubts about the test setup, not the product: data that seemed missing or unrealistic, an account that could not see what the situation needs, a date the scenario assumes ("No absences are recorded for summer 2027, so 'nobody is away' may only mean no data"). These go to whoever stages the scenario.
|
|
224
226
|
|
|
225
|
-
Then
|
|
227
|
+
Then reply to the orchestrating agent with a concise one-line status (`Walk complete: <N> steps, <M> findings`) so it can run `iamu complete` and the evaluation stage — do not re-type your findings or synthesis into chat.
|
|
@@ -90,22 +90,27 @@ Fix by looking, not by hoping:
|
|
|
90
90
|
|
|
91
91
|
## E. Start a design doc from the template
|
|
92
92
|
|
|
93
|
-
Only when no design doc is recorded: `iamu design template` refuses otherwise, and a recorded doc changes only through proposals (**C**). The template is filled in from the code, never by a model: the token values in the frontmatter (light theme), the token groups by name, the contrast clashes the tokens have, each component with the props it takes, and the roles people come in (from the personas and situations, never their names). Everything
|
|
94
|
-
|
|
95
|
-
1. **Template.** Run `iamu design template --out iamu/.analysis/design-draft.md --json`. It is for the app the recorded tokens and components apply to, else the root; add `--dir <app>` when the user names another app, and pass the same `--dir` to the later commands. If it answers `out_exists`, a draft is in progress: ask whether to continue it (step 2 with that file) or start over (delete the file and run it again). Tell the user in two lines what came from the code (`sources`, the components, `roles`, `clashes`) and where the doc will go (`target`).
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
93
|
+
Only when no design doc is recorded: `iamu design template` refuses otherwise, and a recorded doc changes only through proposals (**C**). The template is filled in from the code, never by a model: the token values in the frontmatter (light theme), the token groups by name, the contrast clashes the tokens have, each component with the props it takes, and the roles people come in (from the personas and situations, never their names). Everything else starts as a `<placeholder>`. Auto-extract what the code and `iamu/context.yml` already answer, ask the user only for the qualitative intent and clash decisions that code cannot answer, and the result becomes the team's doc.
|
|
94
|
+
|
|
95
|
+
1. **Template & Auto-Extraction (0 questions to the user).** Run `iamu design template --out iamu/.analysis/design-draft.md --json`. It is for the app the recorded tokens and components apply to, else the root; add `--dir <app>` when the user names another app, and pass the same `--dir` to the later commands. If it answers `out_exists`, a draft is in progress: ask whether to continue it (step 2 with that file) or start over (delete the file and run it again). Tell the user in two lines what came from the code (`sources`, the components, `roles`, `clashes`) and where the doc will go (`target`).
|
|
96
|
+
Before asking the user anything, read the actual token files (`sources.tokens`), UI components (`sources.components`), page code, and `iamu/context.yml` (plus live rendered screens or recent runs if available), and pre-fill the code-evidenced placeholders in `iamu/.analysis/design-draft.md`:
|
|
97
|
+
- **Overview — Who it is for:** Synthesize who uses the product and what they come to do from `iamu/context.yml` and the roles and situations the Overview lists, then replace that list with the synthesized role-based words (roles only, never a persona's name or a single-scenario situation number).
|
|
98
|
+
- **Look — Token roles:** Fill in `<what each is for>` for each extracted token group from how stylesheets and components actually apply those tokens (always name tokens in backticks, never raw hex or px values in prose).
|
|
99
|
+
- **Interaction and States:** Extract how `Forms` (error reporting), `Loading`, `Failure`, and `Empty` states are actually implemented in `sources.components` and screens. Describe only the states the product has; missing state patterns go under `Not in the library yet` / `Open Questions`.
|
|
100
|
+
- **Content and Voice — Words & Formats:** Fill in the product's domain `Words` from product copy/`iamu/context.yml` and date/number `Formats` from formatters (`Intl`, `date-fns`, locale helpers) in the code.
|
|
101
|
+
2. **Interview for Qualitative Intent & Clashes (2–3 focused questions, one question per message).** Never ask the user an open-ended blank question or make them describe their own code: each question MUST carry 2–3 concrete options (with `[Recommended]` first) drawn from `iamu/context.yml` and the codebase. Ask at most 2–3 questions, one question per message, using `ask_question` when available, and update the draft after each answer:
|
|
102
|
+
1. **Creative North Star, Feel & Accessibility Target (`Overview` & `Tone`):**
|
|
103
|
+
Propose 2–3 options for the system's visual personality and feel—each pairing a named **Creative North Star** metaphor with mood/density adjectives (`How it should feel`, e.g., *"The Quiet Workbench — calm, dense, and keyboard-first"*), `Tone` by role, and `Accessibility target` (recommend `WCAG 2.2 AA`, or stricter when the domain requires it, such as a public service or clinical tool)—and ask if there is any visual anti-reference (what the UI must *never* feel like).
|
|
104
|
+
2. **Palette Character, Contrast Clashes & Component Feel (`Look` & `Components`):**
|
|
105
|
+
Briefly show the auto-extracted token roles and component/elevation feel (flat vs. tonal layering vs. lifted, button/input character), and ask for the decision code alone cannot make:
|
|
106
|
+
- **When `clashes` is non-empty:** for each measured contrast clash in `Look`, propose a concrete `[Recommended]` rule (how to keep the pair apart or where one may not be used, e.g., restricting a low-contrast token to borders/decorators or pairing it with a darker text token) and ask the user to confirm or adjust.
|
|
107
|
+
- **When `clashes` is empty:** confirm the primary/accent usage doctrine (e.g., a Named Rule like *"The One Accent Rule — primary accent reserved for the single primary action per view"*) and any missing primitives for `Not in the library yet`.
|
|
108
|
+
3. **Unresolved States or Policy Gaps (only if needed):**
|
|
109
|
+
Skip this question when the codebase already covers states and formats cleanly. Ask a 3rd question only if key state patterns (`Forms`, `Loading`, `Failure`, `Empty`) are missing or contradictory in code, or if an open domain policy question needs a decision (establish a rule now vs. leave under `## Open Questions`).
|
|
110
|
+
|
|
111
|
+
After the user's answers, synthesize `## Review Checklist` (concrete yes/no questions a reviewer answers by looking at one screen, where yes is a pass, derived from the confirmed rules and extracted states) and `## Open Questions` (components screens need that do not exist yet, and policy decisions still open). Write a policy value (a notice period, a limit, a percentage) only when the user gives it as the product's rule; otherwise it stays a `<placeholder>` and an open question. Name tokens, never raw colours or lengths.
|
|
107
112
|
3. **Check.** Run `iamu design draft-check --file iamu/.analysis/design-draft.md --json`. Fix each of its `errors` in the draft (a value or path the code does not have, a prop a component lacks, a persona's name) and check again; ask the user only when the fix is a choice.
|
|
108
|
-
4. **Show it once.** Show the whole draft,
|
|
113
|
+
4. **Show it once.** Show the whole draft, briefly highlight the non-obvious creative choices (North Star/feel, clash rules, review checks), and list the remaining `warnings` in one list (line and message). Ask once: **adopt it**, or **edit** (what to change; edit, check again, and show it once more).
|
|
109
114
|
5. **Adopt.** Run `iamu design adopt --file iamu/.analysis/design-draft.md --json` (`--to <path>` when the user wants it elsewhere). It refuses only when the target already exists: then ask for another path. It writes the doc and records it, with `applies_to` for its app. From then on it is the team's doc: iamu changes it only through proposals a person accepts.
|
|
110
115
|
6. Offer **A2** (point agents at the doc).
|
|
111
116
|
|
|
@@ -12,6 +12,8 @@ This skill resolves what scenario to run following a clear **Target Scenario Res
|
|
|
12
12
|
2. **Active conversational context:** When `$ARGUMENTS` is empty or generic (e.g. "it", "that", "this", "run it", "walk it", "go"), and a scenario was created, modified, staged, or discussed in the active session — immediately resolve to that active scenario without prompting or re-scanning.
|
|
13
13
|
3. **No argument & No active session scenario:** Check unfinished runs, then present a prioritized pickable list (reruns needing proof first, then drafts and ready-to-run).
|
|
14
14
|
|
|
15
|
+
**`--target <url>` (or a bare `http(s)://...` URL in `$ARGUMENTS`):** when `$ARGUMENTS` contains `--target <url>` or a URL, take it out before resolving the scenario and persist it immediately with `iamu set testability --target <url>` (and if the resolved scenario had its own `target_url` override that was shadowing the project target, clear it with `iamu set scenario <slug> --no-target` unless the user asked for a scenario-only URL).
|
|
16
|
+
|
|
15
17
|
**`--no-ux`:** when `$ARGUMENTS` contains `--no-ux`, take it out before resolving the scenario and skip the designer's review (step C3) for this run only: after A, record `iamu designer-record <run-id> --skipped "--no-ux"` so the report says it was skipped. There is no project setting for it: every other run gets a designer's review.
|
|
16
18
|
|
|
17
19
|
**`--critic`:** when `$ARGUMENTS` contains `--critic`, take it out before resolving the scenario. This run is one critic pass in a builder ↔ critic loop (a gauntlet loop) the user orchestrates: the builder needs the verdict and the findings fast, not fixes or a design review. Skip the advisor (C2) entirely and skip the designer's review (C3): after A, record `iamu designer-record <run-id> --skipped "critic mode"`. Run A, B, C, D (and E in linked mode) as usual. In step 5, present the glance without the Advisor and Designer lines, and do not offer **directions** or **designer**. Per invocation only, like `--no-ux`. When the loop looks converged (every human test passes, or no open major or critical findings), add one line: `Loop looks converged: run once without --critic for the advisor's and designer's review.`
|
|
@@ -22,8 +24,6 @@ $ARGUMENTS
|
|
|
22
24
|
|
|
23
25
|
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.
|
|
24
26
|
|
|
25
|
-
**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.
|
|
26
|
-
|
|
27
27
|
## Steps
|
|
28
28
|
|
|
29
29
|
### 0. Verify a driving surface
|
|
@@ -152,14 +152,26 @@ After bind + brief, the scenario is ready to execute. Continue to step 3.
|
|
|
152
152
|
|
|
153
153
|
### 3. Target
|
|
154
154
|
|
|
155
|
-
**Web** — determine the target URL:
|
|
156
|
-
1. If the user passed
|
|
157
|
-
2. Otherwise, check `iamu/testability.md` for `target_url`.
|
|
158
|
-
3. If
|
|
155
|
+
**Web** — determine and confirm the target URL:
|
|
156
|
+
1. If the user passed `--target <url>` (or a URL in `$ARGUMENTS`), persist it with `iamu set testability --target <url>` (and clear any stale scenario override with `iamu set scenario <slug> --no-target`) and use that.
|
|
157
|
+
2. Otherwise, check the scenario's `target_url`, then check `iamu/testability.md` for `target_url` and `status`.
|
|
158
|
+
3. **Unverified or missing target gate:** If `iamu/testability.md` is missing, has no `target_url`, or has `status: draft` (an unverified guess from `iamu init`), do NOT blindly trust the guess. Ask one focused question to confirm the Target URL and Dev Command before probing or booting:
|
|
159
|
+
- If your environment provides an interactive user-prompt tool (e.g. `ask_question`, `ask_followup_question`), invoke it:
|
|
160
|
+
- Question: "Target URL & Dev Command: Where does this app run locally?"
|
|
161
|
+
- Options:
|
|
162
|
+
1. "[Recommended] Use `<detected_url>` (`<dev_command>`)"
|
|
163
|
+
2. "Same command (`<dev_command>`), different port or URL — tell me the URL"
|
|
164
|
+
3. "Use a staging or remote URL — tell me the URL"
|
|
165
|
+
- Otherwise, state the detected URL and command and ask the user to confirm or provide the right URL.
|
|
166
|
+
- Persist the confirmed target immediately so `iamu/testability.md` is marked `status: verified`:
|
|
167
|
+
```bash
|
|
168
|
+
iamu set testability --target <url> --dev-command "<dev_command>"
|
|
169
|
+
```
|
|
170
|
+
|
|
159
171
|
**Dev Server Preflight Check:**
|
|
160
172
|
Verify target reachability before launching the walker with `iamu doctor --target <url>` (or a fast HTTP probe).
|
|
161
173
|
If the target is a local URL (e.g. `http://localhost:*`, `http://127.0.0.1:*`) and is unreachable:
|
|
162
|
-
1. Inspect `iamu/testability.md` for `Command:` under `## Target & Run Instructions
|
|
174
|
+
1. Inspect `iamu/testability.md` for `dev_command` (or `Command:` under `## Target & Run Instructions`, or `package.json` for a `dev` or `start` script).
|
|
163
175
|
2. Prompt the user:
|
|
164
176
|
- If interactive tool available:
|
|
165
177
|
- Question: "Target URL <url> is unreachable. Boot dev server now?"
|
|
@@ -172,8 +184,11 @@ If the target is a local URL (e.g. `http://localhost:*`, `http://127.0.0.1:*`) a
|
|
|
172
184
|
Proceeding with dev server boot — say "wait" to start manually or provide a different target URL.
|
|
173
185
|
3. If Option 1 is chosen:
|
|
174
186
|
- Launch `<dev_command>` in the background as a managed daemon process.
|
|
175
|
-
-
|
|
187
|
+
- Inspect the dev server stdout for the actual listening URL/port (e.g. if Vite or Next.js switches from `:5173` to `:5174`). If the actual URL differs from `<url>`, persist it immediately with `iamu set testability --target <actual_url>` and note the port change in one line.
|
|
188
|
+
- Poll the target URL with HTTP requests until it responds (timeout: 30s).
|
|
176
189
|
- Once reachable, proceed immediately to the walkthrough.
|
|
190
|
+
4. If Option 3 ("Specify a different target URL") is chosen:
|
|
191
|
+
- Ask for the URL and **persist it to disk** with `iamu set testability --target <new_url>` (and if the scenario had a stale `target_url` override, clear it with `iamu set scenario <slug> --no-target`) so future runs use the corrected URL automatically.
|
|
177
192
|
|
|
178
193
|
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.
|
|
179
194
|
|
|
@@ -209,18 +224,27 @@ Staging adds to a scenario and never changes what it is about: do not edit the n
|
|
|
209
224
|
- `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.
|
|
210
225
|
- `access.persona` — from the persona file's `access`: WHICH user this persona is (an account name, a role, a switcher key).
|
|
211
226
|
|
|
212
|
-
**
|
|
213
|
-
|
|
227
|
+
**Confirm Login & Auth When Unconfigured:**
|
|
228
|
+
Never silently guess login credentials or auth strategy without confirming with the user. If `iamu/testability.md` has no `auth_strategy` / `access` configured (or is still `status: draft`) and the scenario requires a signed-in persona:
|
|
229
|
+
1. Check the codebase and agent docs (`CLAUDE.md`, `AGENTS.md`, seed files, auth routes) to see if a dev login mechanism exists so you can pre-fill a recommendation.
|
|
230
|
+
2. Ask one focused question:
|
|
231
|
+
- If your environment provides an interactive user-prompt tool (e.g. `ask_question`, `ask_followup_question`), invoke it:
|
|
232
|
+
- Question: "Login & Auth for `<persona.name>` (`<persona.role>`): How should Iamu sign in as this persona?"
|
|
233
|
+
- Options:
|
|
234
|
+
1. "[Recommended] <Detected mechanism from codebase/docs, or 'Interactive login in Chrome' if none detected>"
|
|
235
|
+
2. "Use a dev switcher, header, storage key, or seeded test account — tell me how"
|
|
236
|
+
3. "Interactive login in Chrome (SSO / 2FA / manual sign-in)"
|
|
237
|
+
4. "No login needed (public / unauthenticated)"
|
|
238
|
+
- Otherwise, state the recommended login mechanism and ask the user to confirm or specify how to log in.
|
|
239
|
+
3. Persist what the user confirmed: the project mechanism into `iamu/testability.md` via `iamu set testability --auth-strategy <strategy> --access "<mechanism>"`, and the persona's own account/role 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.
|
|
240
|
+
|
|
241
|
+
**Interactive Auth Handshake (for `interactive_browser`, enterprise auth, SSO, 2FA, BankID):**
|
|
242
|
+
If `auth_strategy` is `interactive_browser` or the product is behind enterprise login where automated dev persona switching is not configured:
|
|
214
243
|
1. Open the browser to the target URL (`iamu browse start --run <run-id>` or browser tool).
|
|
215
244
|
2. Prompt the human user:
|
|
216
245
|
> 👉 **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...
|
|
217
246
|
3. Wait for the user to confirm, then let the walker drive the authenticated session.
|
|
218
247
|
|
|
219
|
-
If automated switching exists:
|
|
220
|
-
1. Check the project's own agent docs (`CLAUDE.md`, `AGENTS.md`) for a documented way to switch user or role.
|
|
221
|
-
2. Map the persona to the closest account or role the product actually has. If nothing fits, say so.
|
|
222
|
-
3. Persist what you learned: the mechanism into `iamu/testability.md` via `iamu set testability --access "<key>"`, 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.
|
|
223
|
-
|
|
224
248
|
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.
|
|
225
249
|
|
|
226
250
|
### 4. Execute the walkthrough
|
|
@@ -505,7 +529,7 @@ Then, one short line each, only the ones that apply. These are counts; the detai
|
|
|
505
529
|
- Design docs: `Design docs: <N> proposed edits — decided after the findings` (`design_proposals` from C2, `proposals` from C3). They wait for a person; never apply them yourself.
|
|
506
530
|
- ⚠ Test setup (`summary.setupNotes`): `⚠ Test setup: <n> doubts about the test, not the product. A finding resting on one may not be real.` Never fold this one away.
|
|
507
531
|
- Sync (E): `⚠ Sync: <n> findings changed by a teammate too` when the result has `conflicts`: name them and give the resolution (`iamu pull --force` to take theirs after copying your edits aside, or `iamu sync --keep-mine` to keep yours). When it has `pending_deletes`: `<n> deletions wait for you: check them, then run iamu sync --confirm-deletes`. Never run either yourself.
|
|
508
|
-
- Design doc offer: only when the designer's result (C3) had `offer_template: true`: `No design doc yet: say "start it" and I'll draft one from your code with you, or "no" and I won't offer again.` On "start it", after triage, follow the `iamu-design` skill, mode E. On "no", run `iamu design template --decline`.
|
|
532
|
+
- Design doc offer: only when the designer's result (C3) had `offer_template: true`: `No design doc yet (designer judged by general craft only — Iamu gets much sharper when it checks your own tokens, components, and rules): say "start it" (or run iamu-design) and I'll draft one from your code with you, or "no" and I won't offer again.` On "start it", after triage, follow the `iamu-design` skill, mode E. On "no", run `iamu design template --decline`.
|
|
509
533
|
|
|
510
534
|
Then the link to the full walkthrough, which shows the persona's reasoning beside each screenshot:
|
|
511
535
|
|
|
@@ -78,70 +78,108 @@ No local codebase detected. To seed context, provide one of:
|
|
|
78
78
|
|
|
79
79
|
### 3. Step 1/3: Establish the Safety Fence (`iamu/testability.md`)
|
|
80
80
|
|
|
81
|
-
|
|
81
|
+
Never dump the target URL, dev command, login mechanism, and untestable boundaries into a single "take-it-or-leave-it" blob. Walk through them **one focused question at a time**, using what you found in the codebase to pre-fill the recommended choice and persisting each answer immediately with `iamu set testability`.
|
|
82
82
|
|
|
83
|
-
|
|
84
|
-
|
|
83
|
+
#### Step 1a: Target URL & Dev Command (1 question)
|
|
84
|
+
|
|
85
|
+
Before asking, check whether a server is already responding on the detected port (`curl -I` or `iamu doctor --target <url> --json`). If this is a monorepo with multiple runnable apps (`apps/*`, `packages/*`), list each detected app and its URL as selectable options.
|
|
86
|
+
|
|
87
|
+
Output the detected target briefly to chat first, then invoke `ask_question` in the same turn:
|
|
85
88
|
|
|
86
89
|
```text
|
|
87
|
-
Step
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
Detected Environment:
|
|
91
|
-
Target URL: <target_url, e.g. http://localhost:5173>
|
|
92
|
-
Dev Command: <dev_command, e.g. ./dev or pnpm dev>
|
|
93
|
-
Safe Fixtures: <detected seed scripts or mock handlers, e.g. organization_realistic_seed.sql, MSW>
|
|
94
|
-
DO NOT WALK: <detected external services, e.g. Arbetsmiljöverket external submission portal (anmalarbetsskada.se), Real SMS/Email gateways, Real OIDC Keycloak>
|
|
90
|
+
Step 1a: Target URL & Dev Server
|
|
91
|
+
Detected URL: <target_url, e.g. http://localhost:5173> (<currently running | not running>)
|
|
92
|
+
Dev Command: <dev_command, e.g. pnpm dev>
|
|
95
93
|
```
|
|
96
94
|
|
|
97
|
-
**Interactive Decision Gate:**
|
|
98
|
-
Prompt the user to verify the safety boundary:
|
|
99
95
|
- If interactive user-prompt tools exist (`ask_question`, `ask_followup_question`), invoke it:
|
|
100
96
|
- **Question:**
|
|
101
97
|
"""
|
|
102
|
-
Step
|
|
98
|
+
Step 1a: Where should Iamu run browser tests against your app?
|
|
99
|
+
|
|
100
|
+
Detected URL: <target_url> (<currently running | not running>)
|
|
101
|
+
Dev Command: <dev_command>
|
|
102
|
+
"""
|
|
103
|
+
- **Options:**
|
|
104
|
+
1. "(Recommended) Use <target_url> (start with `<dev_command>`)"
|
|
105
|
+
2. "<Second detected workspace app URL + dev command, if monorepo; otherwise omit>"
|
|
106
|
+
3. "Use a different target URL or port"
|
|
107
|
+
4. "Change the dev startup command"
|
|
108
|
+
- Otherwise (text-only/CLI):
|
|
109
|
+
Ask: `Where should Iamu test your app? Detected <target_url> (start command: <dev_command>). Reply to confirm, or give the right URL / dev command.`
|
|
110
|
+
|
|
111
|
+
**If the user picks Option 3 or Option 4 (or writes in a correction):**
|
|
112
|
+
- Ask for the exact URL (e.g. `http://localhost:4000` or a staging URL) and/or dev command, and wait for their reply before proceeding.
|
|
113
|
+
|
|
114
|
+
**Persist immediately:**
|
|
115
|
+
```bash
|
|
116
|
+
iamu set testability \
|
|
117
|
+
--target "<confirmed_target_url>" \
|
|
118
|
+
--dev-command "<confirmed_dev_command>" \
|
|
119
|
+
--json
|
|
120
|
+
```
|
|
103
121
|
|
|
104
|
-
|
|
105
|
-
Dev Command: <dev_command>
|
|
106
|
-
Safe Fixtures: <detected seed scripts or mock handlers>
|
|
122
|
+
#### Step 1b: How Tests Log In / Switch Users (1 question)
|
|
107
123
|
|
|
108
|
-
|
|
109
|
-
<detected external services, real SMS/email gateways, external submission portals>
|
|
124
|
+
Next, ask **specifically** how the browser walker should log in or switch roles during tests. Never guess and save `--auth-strategy` or `--access` silently.
|
|
110
125
|
|
|
111
|
-
|
|
126
|
+
Output what you found in the codebase first, then invoke `ask_question` in the same turn:
|
|
127
|
+
|
|
128
|
+
```text
|
|
129
|
+
Step 1b: Test Login & User Switching
|
|
130
|
+
Detected Auth: <What code inspection found, e.g. "Dev switcher via localStorage.sf_dev_persona", "Seeded test accounts in prisma/seed.ts (coordinator@site-a.test)", "Login form at /login (no seeded account found)", or "Public routes — no auth guard detected">
|
|
131
|
+
```
|
|
132
|
+
|
|
133
|
+
- If interactive user-prompt tools exist (`ask_question`, `ask_followup_question`), invoke it:
|
|
134
|
+
- **Question:**
|
|
135
|
+
"""
|
|
136
|
+
Step 1b: How should Iamu log in or switch users when running tests?
|
|
137
|
+
|
|
138
|
+
Detected in codebase: <concise summary of detected auth guard / switcher / seed accounts>
|
|
112
139
|
"""
|
|
113
140
|
- **Options:**
|
|
114
|
-
1. "
|
|
115
|
-
2. "
|
|
116
|
-
3. "
|
|
141
|
+
1. "(Recommended) <Specific mechanism detected in code, e.g. 'Use seeded test account (coordinator@site-a.test)' or 'Use dev persona switcher' or 'No login needed (public app)'>"
|
|
142
|
+
2. "Interactive login — open Chrome and let me log in manually before the test starts"
|
|
143
|
+
3. "Use specific test credentials or login instructions (I'll provide them)"
|
|
144
|
+
4. "No login needed (test public pages only)"
|
|
117
145
|
- Otherwise (text-only/CLI):
|
|
118
|
-
|
|
119
|
-
Target URL: <target_url>
|
|
120
|
-
Dev Command: <dev_command>
|
|
121
|
-
Safe Fixtures: <detected seed scripts or mock handlers>
|
|
122
|
-
DO NOT WALK: <detected external services>
|
|
146
|
+
Ask: `How should Iamu log in for tests? Detected: <summary>. Reply to confirm, say "interactive" to log in manually in Chrome, or tell me how to sign in.`
|
|
123
147
|
|
|
124
|
-
|
|
125
|
-
|
|
148
|
+
**If the user picks Option 3 (or wants to specify how login works):**
|
|
149
|
+
- Ask: *"Which test account, login URL, or dev bypass should the walker use? (For passwords or tokens, name the environment variable or dev seed rather than pasting production secrets.)"*
|
|
150
|
+
- Wait for their answer before proceeding.
|
|
126
151
|
|
|
127
|
-
**
|
|
128
|
-
Persist the safety fence using `iamu set testability` (never invoke host file creation or edit tools):
|
|
152
|
+
**Persist immediately:**
|
|
129
153
|
```bash
|
|
130
154
|
iamu set testability \
|
|
131
|
-
--target "<target_url>" \
|
|
132
|
-
--dev-command "<dev_command>" \
|
|
133
155
|
--auth-strategy "<dev_switcher | interactive | test_accounts | public>" \
|
|
134
|
-
[--access "<
|
|
156
|
+
[--access "<confirmed login or user-switching instructions>"] \
|
|
157
|
+
--json
|
|
158
|
+
```
|
|
159
|
+
|
|
160
|
+
#### Step 1c: Untestable Boundaries (only when external side-effects exist)
|
|
161
|
+
|
|
162
|
+
If code inspection found un-mocked external services or side-effect boundaries (e.g., Stripe checkout, real SMS/email gateways, external government submission portals, live production OAuth), ask one short question to confirm the `DO NOT WALK` fence:
|
|
163
|
+
- Show the detected external boundaries and ask whether to block the walker from touching them (or add others).
|
|
164
|
+
- If no external side-effect integrations exist, do not ask an extra question.
|
|
165
|
+
|
|
166
|
+
Persist the complete testability summary body via `iamu set testability` (never invoke host file creation or edit tools):
|
|
167
|
+
```bash
|
|
168
|
+
iamu set testability \
|
|
169
|
+
--target "<confirmed_target_url>" \
|
|
170
|
+
--dev-command "<confirmed_dev_command>" \
|
|
171
|
+
--auth-strategy "<confirmed_auth_strategy>" \
|
|
172
|
+
[--access "<confirmed_access_mechanism>"] \
|
|
135
173
|
[--harnesses "<detected harness 1>, <detected harness 2>"] \
|
|
136
174
|
[--untestable-boundaries "<external dependency 1>, <external dependency 2>"] \
|
|
137
175
|
--body "# Project Testability & Environment
|
|
138
176
|
|
|
139
177
|
## Target & Run Instructions
|
|
140
|
-
- Command: <
|
|
141
|
-
- Base URL: <
|
|
178
|
+
- Command: <confirmed_dev_command>
|
|
179
|
+
- Base URL: <confirmed_target_url>
|
|
142
180
|
|
|
143
181
|
## Auth & Access Boundary
|
|
144
|
-
- <
|
|
182
|
+
- <confirmed_access_mechanism>
|
|
145
183
|
|
|
146
184
|
## Reachable Surfaces
|
|
147
185
|
- <List discovered routes/entry points>
|
|
@@ -162,6 +200,8 @@ Explain the purpose of project context: traditional tests only assert button cli
|
|
|
162
200
|
|
|
163
201
|
Present the discovered domain and project description. Do NOT introduce or ask the user to approve personas or roles at this stage — personas are cast later when designing specific test journeys.
|
|
164
202
|
|
|
203
|
+
**Treat codebase evidence as a hypothesis, not user approval.** Scan the repo so the user never has to repeat obvious facts, but if the codebase leaves a material gap (who the real primary users are, what high-stakes workflow matters most, or what real-world constraints apply), call out that gap explicitly in your question rather than inventing domain stakes.
|
|
204
|
+
|
|
165
205
|
**Describe the product, not the environment you explored.** Persona drafting and the advisor read these fields and the description as the truth about the product. Write them as the product its people use in their real work. Leave out everything about how this copy runs, because Step 1 already recorded it in `testability.md`:
|
|
166
206
|
- **Data and build:** seeded, mocked, fixture, sample or fake data; demo, prototype or staging status; where data is stored; frontend or backend architecture; dev servers.
|
|
167
207
|
- **Seed numbers:** headcounts, named teams, stores or sites, and record counts taken from seed or fixture files describe the test data, not the customers. Say who the product is for in general terms ("small and mid-sized companies"). Rules and policies the code enforces (a notice period, an approval threshold) are product behaviour; keep them.
|
|
@@ -202,7 +242,7 @@ Host interactive tools (`ask_question`, `ask_followup_question`) render a modal
|
|
|
202
242
|
Confirm project domain & description?
|
|
203
243
|
"""
|
|
204
244
|
- **Options:**
|
|
205
|
-
1. "
|
|
245
|
+
1. "(Recommended) Project description is accurate — proceed to design first test"
|
|
206
246
|
2. "Save project description only (skip scenario creation for now)"
|
|
207
247
|
3. "Adjust domain or description"
|
|
208
248
|
- Otherwise (text-only/CLI):
|
|
@@ -215,10 +255,12 @@ Host interactive tools (`ask_question`, `ask_followup_question`) render a modal
|
|
|
215
255
|
Project Description:
|
|
216
256
|
<1 cohesive paragraph>
|
|
217
257
|
|
|
218
|
-
|
|
219
|
-
|
|
258
|
+
Reply to confirm this project description, say "save only" to skip scenario creation, or tell me what to adjust.
|
|
259
|
+
|
|
260
|
+
**If the user chooses Option 3 (Adjust domain or description):**
|
|
261
|
+
- Ask what is inaccurate or missing, revise the domain fields and paragraph accordingly, and confirm before saving.
|
|
220
262
|
|
|
221
|
-
**Action on confirmation (Option 1):**
|
|
263
|
+
**Action on confirmation (Option 1 or after adjustment):**
|
|
222
264
|
Persist the domain context using `iamu set context` (never invoke host file creation or edit tools). Put structured fields in frontmatter and the project description in the markdown body below the `---` via `--body`:
|
|
223
265
|
```bash
|
|
224
266
|
iamu set context \
|
|
@@ -235,12 +277,25 @@ iamu set context \
|
|
|
235
277
|
|
|
236
278
|
### 4b. Design docs (quick; the user may skip it, you may not)
|
|
237
279
|
|
|
238
|
-
The team's design docs are part of the product's context, like the domain
|
|
280
|
+
The team's design docs are part of the product's context, like the domain—and **Iamu gets significantly sharper when it has them**. Without a design doc (`DESIGN.md`), Iamu's designer can only judge screens by generic UI craft; with a recorded `DESIGN.md`, every walkthrough checks your actual token roles, component contracts, form/loading/empty states, and contrast rules, links persona friction to broken rules, and proposes grounded `Before → After` edits when a rule hurts a user.
|
|
281
|
+
|
|
282
|
+
Iamu reads design docs wherever they are and never edits them on its own. Run `iamu design detect --json` and always show the user its result, even when every candidate looks unrelated. Never drop a candidate yourself: one in a spike, sandbox or example folder is listed with that note, unticked, and the user decides.
|
|
239
283
|
|
|
240
284
|
- **Found docs** (a `DESIGN.md` in any format, design-system, brand, voice or interaction docs, design sections of `CLAUDE.md` or `AGENTS.md` shown as `CLAUDE.md#<heading>`, a `PRODUCT.md`, token files, a component library): list them once, one line each (kind, path). Show a candidate with a `note` (anything in a sample, export, fixture or spike folder) with its note, unticked. Ask once whether to record them; the user may drop some or add others. On yes, `iamu design sources <paths…>` (in a monorepo, `--applies-to` with the URL prefix or the app's folder each doc covers).
|
|
241
285
|
- **A legacy `iamu/design.md`** (`iamu design status --json` shows `legacy.doc` and no `legacy.migrated_at`): fold it into the same single question. Run `iamu design migrate --json` first, and offer three answers next to the files: **move it** to a plain `DESIGN.md` the team owns (`iamu design migrate --move-to DESIGN.md --apply`), **keep** `iamu/design.md` as it is (`iamu design migrate --apply`, which records the choice so it is not offered again), or **not now** (run nothing; it is offered again next time). Only an explicit "keep" runs `--apply` without a move.
|
|
242
|
-
- **Nothing found:** say so in one line: "No design docs found. The designer reviews each run by general craft until you record some (`iamu-design`)."
|
|
243
|
-
- **No written design doc** (detection found only tokens or components, or nothing, and no design doc is recorded): after the question above, or in its place when there was nothing to record,
|
|
286
|
+
- **Nothing found:** say so in one line: "No design docs found. The designer reviews each run by general craft until you record some (`iamu-design`) — strongly recommended so runs check your own tokens, components, and rules."
|
|
287
|
+
- **No written design doc** (detection found only tokens or components, or nothing, and no design doc is recorded): after the question above, or in its place when there was nothing to record, explain in one sentence why a design doc makes Iamu much stronger (*"With a `DESIGN.md`, Iamu's designer checks your own tokens, components, states, and rules on every run instead of only general craft"*), and ask one question the user may skip:
|
|
288
|
+
- If interactive user-prompt tools exist (`ask_question`, `ask_followup_question`), invoke it:
|
|
289
|
+
- **Question:** "There is no `DESIGN.md` yet. Iamu gets much sharper with one (every run checks your own tokens, components, states, and rules instead of generic craft). Start one from your code now?"
|
|
290
|
+
- **Options:**
|
|
291
|
+
1. "(Recommended) Yes — start `DESIGN.md` from my code now (auto-extracts tokens, components, states & formats, then asks 2–3 quick intent questions)"
|
|
292
|
+
2. "Not now — finish setup first (keep reminding me to run `iamu-design`)"
|
|
293
|
+
3. "No — review by general craft only and stop offering `DESIGN.md`"
|
|
294
|
+
- Otherwise (text-only/CLI):
|
|
295
|
+
"There is no design doc yet, and Iamu gets much sharper with one (checking your own tokens, components, and rules on every run). Shall I start one from your code? I auto-extract your tokens, components, states, formats and contrast clashes from code, then ask 2–3 quick questions on feel and clash rules. **Yes** (recommended) / **not now** (keep recommending `iamu-design`) / **no**."
|
|
296
|
+
- **Yes:** follow the `iamu-design` skill, mode E, then carry on with setup.
|
|
297
|
+
- **Not now:** run nothing; it stays recommended at the end of setup, in `iamu status`, and after runs until a design doc is recorded.
|
|
298
|
+
- **No:** run `iamu design template --decline`, so runs stop offering it.
|
|
244
299
|
|
|
245
300
|
Do not assess design docs here, and never write one without the user filling it in (mode E). Never block setup on this step.
|
|
246
301
|
|
|
@@ -250,16 +305,16 @@ Do not assess design docs here, and never write one without the user filling it
|
|
|
250
305
|
|
|
251
306
|
Explain the journey model: an Iamu test binds a **Persona** (with habits, pressures, and impatience) to a **Situation** (a realistic high-stakes problem) with an **Evaluation Checkpoint** (a concrete binary question for the AI judge).
|
|
252
307
|
|
|
253
|
-
|
|
308
|
+
Split this into two quick questions: first agree on **who and what situation** to test (Step 3a), then confirm **which route and account** the walk starts with (Step 3b).
|
|
254
309
|
|
|
255
|
-
|
|
256
|
-
You MUST output the baseline test proposal to the chat stream FIRST. In the SAME turn, invoke `ask_question` with the full journey spec embedded in the `question` argument:
|
|
310
|
+
#### Step 3a: Persona & Situation (Baseline Test Proposal)
|
|
257
311
|
|
|
258
|
-
|
|
259
|
-
Step 3/3: Co-Design Your First Test Journey
|
|
260
|
-
Why this matters: Validates whether a real human with specific operational pressures can complete a critical task without getting blocked or frustrated.
|
|
312
|
+
Identify the top 2–3 high-stakes user workflows in the codebase. Lead with the strongest one in full detail as the recommended `Baseline Test Proposal`, and offer the other 1–2 discovered workflows as direct selectable options in the prompt so the user can switch flows in one click if they want to start elsewhere.
|
|
261
313
|
|
|
262
|
-
|
|
314
|
+
Output the proposed journey to the chat stream first, then invoke `ask_question` in the same turn:
|
|
315
|
+
|
|
316
|
+
```text
|
|
317
|
+
Step 3a: Baseline Test Proposal
|
|
263
318
|
Capability: <Capability Name> (<What staff can do in this area>)
|
|
264
319
|
Persona: <Name> (<Role / Title>)
|
|
265
320
|
• Reality: <Working context, physical habits, tenure, pressures>
|
|
@@ -267,40 +322,64 @@ Baseline Test Proposal (WYSIWGW Spec-Sheet):
|
|
|
267
322
|
Situation: <Outline Title>
|
|
268
323
|
• Tension: <Core problem-space tension in X vs Y format — no UI button names>
|
|
269
324
|
• Evaluation: <Concrete binary yes/partial/no question for evaluator>
|
|
270
|
-
Walk Surface: Entry: `<entry_path>` | Target: `<target_url>`
|
|
271
|
-
Auth Precondition: <Detected auth mechanism, e.g. "Dev persona switcher (localStorage.sf_dev_persona = 'anna')" or "Public">
|
|
272
325
|
Walker Brief: "<2–3 sentence first-person test brief that will be written verbatim to disk. States immediate intent and constraints before opening tool. Zero UI terminology.>"
|
|
273
326
|
```
|
|
274
327
|
|
|
275
|
-
**CRITICAL: Embed Journey Spec in Interactive Prompt Modal:**
|
|
276
328
|
- If interactive user-prompt tools exist (`ask_question`, `ask_followup_question`), invoke it:
|
|
277
329
|
- **Question:**
|
|
278
330
|
"""
|
|
279
|
-
Step
|
|
331
|
+
Step 3a: Confirm First Test Scenario
|
|
280
332
|
|
|
281
|
-
|
|
282
|
-
|
|
283
|
-
|
|
284
|
-
|
|
285
|
-
Evaluation Check: <Concrete binary yes/partial/no question for evaluator>
|
|
286
|
-
Walk Surface: Entry: `<entry_path>` | Target: `<target_url>`
|
|
287
|
-
Auth Precondition: <Detected auth mechanism>
|
|
333
|
+
Persona: <Name> (<Role / Title>) — Friction: <Diagnostic friction trigger>
|
|
334
|
+
Situation: <Outline Title> (<Capability Name>)
|
|
335
|
+
Core Tension: <Core problem-space tension in X vs Y format>
|
|
336
|
+
Evaluation Check: <Concrete binary yes/partial/no question for evaluator>
|
|
288
337
|
|
|
289
338
|
WALKER BRIEF:
|
|
290
339
|
"<2–3 sentence first-person test brief>"
|
|
291
340
|
|
|
292
|
-
|
|
341
|
+
Test this persona and situation first?
|
|
293
342
|
"""
|
|
294
343
|
- **Options:**
|
|
295
|
-
1. "
|
|
296
|
-
2. "
|
|
297
|
-
3. "
|
|
298
|
-
4. "Skip scenario for now"
|
|
344
|
+
1. "(Recommended) Yes — test <Name> in '<Outline Title>'"
|
|
345
|
+
2. "Test another flow instead: <Candidate Flow 2 — Role & Situation from codebase>"
|
|
346
|
+
3. "Test a different user role or workflow (I'll describe it)"
|
|
347
|
+
4. "Skip scenario creation for now"
|
|
299
348
|
- Otherwise (text-only/CLI):
|
|
300
|
-
|
|
301
|
-
|
|
349
|
+
Ask whether to use `<Name>` and `<Outline Title>`, pick `<Candidate Flow 2>`, or describe another role/situation to test first.
|
|
350
|
+
|
|
351
|
+
**If Option 2 or Option 3 is chosen:** draft the persona and situation for the chosen flow and confirm before continuing to Step 3b.
|
|
352
|
+
|
|
353
|
+
#### Step 3b: Confirm Starting Route & Persona Login (`entry_path` & `persona.access`)
|
|
354
|
+
|
|
355
|
+
Now verify the exact landing route and user account for `<Name>` (using the login method established in Step 1b):
|
|
356
|
+
|
|
357
|
+
```text
|
|
358
|
+
Step 3b: Walk Surface & Persona Login
|
|
359
|
+
Walk Surface: Entry: `<entry_path>` | Target: `<confirmed_target_url>`
|
|
360
|
+
Auth Precondition: <Specific account/role for <Name> using Step 1b's auth strategy, e.g. "coordinator@site-a.test" or "Interactive manual login" or "Public">
|
|
361
|
+
```
|
|
362
|
+
|
|
363
|
+
- If interactive user-prompt tools exist (`ask_question`, `ask_followup_question`), invoke it:
|
|
364
|
+
- **Question:**
|
|
365
|
+
"""
|
|
366
|
+
Step 3b: Confirm Starting Route & Account for <Name>
|
|
367
|
+
|
|
368
|
+
Starting URL: <confirmed_target_url><entry_path> (entry path: `<entry_path>`)
|
|
369
|
+
Auth Precondition: <Specific account/role for <Name>, or "Interactive login" / "Public">
|
|
370
|
+
|
|
371
|
+
Where should <Name>'s walkthrough start, and as which user?
|
|
372
|
+
"""
|
|
373
|
+
- **Options:**
|
|
374
|
+
1. "(Recommended) Start at `<entry_path>` (<confirmed_target_url><entry_path>) as <persona account or auth mode>"
|
|
375
|
+
2. "Start on a different route (e.g. `/` or `/login`)"
|
|
376
|
+
3. "Use a different account or role for <Name>"
|
|
377
|
+
- Otherwise (text-only/CLI):
|
|
378
|
+
Ask: `Start <Name> at <confirmed_target_url><entry_path> as <account/auth>? Reply to confirm, or give the entry path / account to use.`
|
|
379
|
+
|
|
380
|
+
**If Option 2 or Option 3 is chosen:** ask for the entry path (must start with `/`, e.g. `/dashboard`) or the account/role identifier for `<Name>`, and use their answer below.
|
|
302
381
|
|
|
303
|
-
**
|
|
382
|
+
**Scaffold & Persist Entities:**
|
|
304
383
|
1. **Scaffold Primary Capability** (if not already existing):
|
|
305
384
|
```bash
|
|
306
385
|
iamu new capability --name "<Capability Name>" --description "<What staff can do in this area>" --json
|
|
@@ -311,11 +390,11 @@ Baseline Test Proposal (WYSIWGW Spec-Sheet):
|
|
|
311
390
|
```
|
|
312
391
|
3. **Scaffold Persona**:
|
|
313
392
|
```bash
|
|
314
|
-
iamu new persona --name "<Name>" --role "<Role>" --disposition "<Disposition>" --body "<2-4 sentence narrative detailing technical habits, patience level, and specific friction triggers>" [--access "<account-or-role>"] --json
|
|
393
|
+
iamu new persona --name "<Name>" --role "<Role>" --disposition "<Disposition>" --body "<2-4 sentence narrative detailing technical habits, patience level, and specific friction triggers>" [--access "<confirmed-account-or-role>"] --json
|
|
315
394
|
```
|
|
316
395
|
4. **Scaffold Bound Scenario**:
|
|
317
396
|
```bash
|
|
318
|
-
iamu new scenario --name "<persona-slug>--<outline-slug>" --outline "<outline-slug>" --persona "<persona-slug>" --entry "<
|
|
397
|
+
iamu new scenario --name "<persona-slug>--<outline-slug>" --outline "<outline-slug>" --persona "<persona-slug>" --entry "<confirmed_entry_path>" --body "<Persona's first-person test brief describing what they intend to achieve>" --json
|
|
319
398
|
```
|
|
320
399
|
5. **Validate all entities**:
|
|
321
400
|
```bash
|
|
@@ -343,7 +422,7 @@ Render the output:
|
|
|
343
422
|
iamu/
|
|
344
423
|
├── testability.md [safety fence active: <target_url>]
|
|
345
424
|
├── context.yml [domain: <domain>]
|
|
346
|
-
├── design/sources.json [<N> design docs] (
|
|
425
|
+
├── design/sources.json [<N> design docs] (when recorded; if no DESIGN.md yet and not declined: [no DESIGN.md yet — run iamu-design to unlock project rule reviews])
|
|
347
426
|
├── personas/
|
|
348
427
|
│ └── <persona-slug>.md
|
|
349
428
|
├── outlines/
|
|
@@ -357,9 +436,9 @@ Next step:
|
|
|
357
436
|
iamu-run <persona-slug>--<outline-slug>
|
|
358
437
|
|
|
359
438
|
Other commands when you're ready:
|
|
439
|
+
• iamu-design Create or record DESIGN.md from your code (strongly recommended if not set yet: makes every run check your own tokens, components, and rules instead of general craft)
|
|
360
440
|
• iamu-new Draft a scenario for a different product flow
|
|
361
441
|
• iamu-propose Brainstorm high-risk workflows and blind spots
|
|
362
|
-
• iamu-design Record the project's design docs, review a page, decide proposed edits
|
|
363
442
|
• iamu doctor Diagnose test environment and target health
|
|
364
443
|
<If cloud_linked: true>
|
|
365
444
|
• iamu sync Sync completed runs and findings to Iamu Cloud
|