@iamu-dev/iamu 0.3.0-beta.1 → 0.3.0-beta.2
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 +76 -32
- package/dist/index.js +76 -32
- package/dist/templates/skills/iamu-findings.md +22 -58
- package/dist/templates/skills/iamu-new.md +10 -20
- package/dist/templates/skills/iamu-propose.md +4 -2
- package/dist/templates/skills/iamu-run.md +40 -75
- package/dist/templates/skills/iamu-setup.md +6 -28
- package/dist/templates/skills/iamu-stage.md +11 -0
- package/dist/templates/skills/iamu-status.md +1 -1
- package/dist/ui/symbols.d.ts +1 -0
- package/package.json +1 -1
package/dist/bin.js
CHANGED
|
@@ -13040,7 +13040,8 @@ var init_symbols = __esm({
|
|
|
13040
13040
|
add: chalk3.cyan("+"),
|
|
13041
13041
|
info: chalk3.blue(supportsUnicode ? "\u2139" : "i"),
|
|
13042
13042
|
dot: chalk3.dim(supportsUnicode ? "\u2022" : "*"),
|
|
13043
|
-
question: chalk3.yellow("?")
|
|
13043
|
+
question: chalk3.yellow("?"),
|
|
13044
|
+
step: chalk3.blue(supportsUnicode ? "\u25B6" : ">")
|
|
13044
13045
|
};
|
|
13045
13046
|
}
|
|
13046
13047
|
});
|
|
@@ -13646,8 +13647,8 @@ import { dirname as dirname3, join as join4, resolve as resolve2 } from "path";
|
|
|
13646
13647
|
import { fileURLToPath as fileURLToPath2 } from "url";
|
|
13647
13648
|
import chalk6 from "chalk";
|
|
13648
13649
|
function getVersion() {
|
|
13649
|
-
if ("0.3.0-beta.
|
|
13650
|
-
return "0.3.0-beta.
|
|
13650
|
+
if ("0.3.0-beta.2") {
|
|
13651
|
+
return "0.3.0-beta.2";
|
|
13651
13652
|
}
|
|
13652
13653
|
try {
|
|
13653
13654
|
const thisDir = dirname3(fileURLToPath2(import.meta.url));
|
|
@@ -16017,9 +16018,16 @@ async function report(scenario, opts) {
|
|
|
16017
16018
|
if (viewport) {
|
|
16018
16019
|
console.log(` ${chalk13.dim("device:")} ${formatViewport(viewport)}`);
|
|
16019
16020
|
}
|
|
16020
|
-
const
|
|
16021
|
-
if (
|
|
16022
|
-
|
|
16021
|
+
const config = await readConfig(projectRoot);
|
|
16022
|
+
if (config.cloud_linked && config.cloud_project_id) {
|
|
16023
|
+
const viewUrl = await pushedRunUrl(projectRoot, run.runId);
|
|
16024
|
+
if (viewUrl) {
|
|
16025
|
+
console.log(` ${chalk13.dim("view:")} ${chalk13.underline(viewUrl)}`);
|
|
16026
|
+
} else {
|
|
16027
|
+
console.log(
|
|
16028
|
+
` ${chalk13.dim("view:")} ${chalk13.dim("not synced yet")} ${chalk13.dim("(run `iamu sync` to view in cloud)")}`
|
|
16029
|
+
);
|
|
16030
|
+
}
|
|
16023
16031
|
}
|
|
16024
16032
|
if (c) {
|
|
16025
16033
|
const v = c.verification;
|
|
@@ -18700,23 +18708,38 @@ async function stepCommand(runArg, opts) {
|
|
|
18700
18708
|
);
|
|
18701
18709
|
return;
|
|
18702
18710
|
}
|
|
18703
|
-
|
|
18704
|
-
|
|
18705
|
-
|
|
18706
|
-
|
|
18707
|
-
|
|
18708
|
-
|
|
18709
|
-
|
|
18710
|
-
|
|
18711
|
-
|
|
18712
|
-
|
|
18713
|
-
|
|
18714
|
-
|
|
18711
|
+
const stepNumStr = String(res.step.step_number).padStart(2, "0");
|
|
18712
|
+
if (isVerbose()) {
|
|
18713
|
+
console.log();
|
|
18714
|
+
console.log(
|
|
18715
|
+
` ${symbols.success} Step ${chalk20.cyan(stepNumStr)} recorded: ${res.step.action}`
|
|
18716
|
+
);
|
|
18717
|
+
if (res.step.note) {
|
|
18718
|
+
console.log(` ${chalk20.dim("note:")} ${res.step.note}`);
|
|
18719
|
+
}
|
|
18720
|
+
if (res.step.url) {
|
|
18721
|
+
console.log(` ${chalk20.dim("url:")} ${res.step.url}`);
|
|
18722
|
+
}
|
|
18723
|
+
if (res.step.screenshot) {
|
|
18724
|
+
console.log(` ${chalk20.dim("shot:")} ${res.step.screenshot}`);
|
|
18725
|
+
}
|
|
18726
|
+
console.log(
|
|
18727
|
+
` ${chalk20.dim("file:")} ${path25.relative(projectRoot, res.stepPath)}`
|
|
18728
|
+
);
|
|
18729
|
+
console.log();
|
|
18730
|
+
} else {
|
|
18731
|
+
let route = "";
|
|
18732
|
+
if (res.step.url) {
|
|
18733
|
+
try {
|
|
18734
|
+
route = new URL(res.step.url).pathname;
|
|
18735
|
+
} catch {
|
|
18736
|
+
route = res.step.url;
|
|
18737
|
+
}
|
|
18738
|
+
}
|
|
18739
|
+
console.log(
|
|
18740
|
+
` ${symbols.step} Step ${chalk20.cyan(stepNumStr)} \xB7 ${chalk20.bold(res.step.action)}${route ? chalk20.dim(` \xB7 ${route}`) : ""}`
|
|
18741
|
+
);
|
|
18715
18742
|
}
|
|
18716
|
-
console.log(
|
|
18717
|
-
` ${chalk20.dim("file:")} ${path25.relative(projectRoot, res.stepPath)}`
|
|
18718
|
-
);
|
|
18719
|
-
console.log();
|
|
18720
18743
|
} catch (err) {
|
|
18721
18744
|
commandError(err.message, opts);
|
|
18722
18745
|
}
|
|
@@ -18727,6 +18750,7 @@ var init_step = __esm({
|
|
|
18727
18750
|
"use strict";
|
|
18728
18751
|
init_dist2();
|
|
18729
18752
|
init_dist();
|
|
18753
|
+
init_logger();
|
|
18730
18754
|
init_symbols();
|
|
18731
18755
|
init_context4();
|
|
18732
18756
|
init_live_run_client();
|
|
@@ -19311,16 +19335,34 @@ function printStep(opts, record, projectRoot, stagnationWarning, challengeWarnin
|
|
|
19311
19335
|
console.log(JSON.stringify(doc, null, 2));
|
|
19312
19336
|
return;
|
|
19313
19337
|
}
|
|
19314
|
-
|
|
19315
|
-
|
|
19316
|
-
|
|
19317
|
-
|
|
19318
|
-
|
|
19319
|
-
|
|
19320
|
-
|
|
19321
|
-
|
|
19322
|
-
|
|
19323
|
-
console.log(` ${chalk21.dim("
|
|
19338
|
+
const stepNumStr = String(step.step_number).padStart(2, "0");
|
|
19339
|
+
if (isVerbose()) {
|
|
19340
|
+
console.log(
|
|
19341
|
+
` ${symbols.success} Step ${chalk21.cyan(stepNumStr)} recorded: ${step.action}`
|
|
19342
|
+
);
|
|
19343
|
+
for (const w of warnings) {
|
|
19344
|
+
console.log(` ${symbols.warning} ${chalk21.yellow(w)}`);
|
|
19345
|
+
}
|
|
19346
|
+
if (step.note) console.log(` ${chalk21.dim("note:")} ${step.note}`);
|
|
19347
|
+
if (step.url) console.log(` ${chalk21.dim("url:")} ${step.url}`);
|
|
19348
|
+
if (step.screenshot) {
|
|
19349
|
+
console.log(` ${chalk21.dim("screenshot:")} ${step.screenshot}`);
|
|
19350
|
+
}
|
|
19351
|
+
} else {
|
|
19352
|
+
let route = "";
|
|
19353
|
+
if (step.url) {
|
|
19354
|
+
try {
|
|
19355
|
+
route = new URL(step.url).pathname;
|
|
19356
|
+
} catch {
|
|
19357
|
+
route = step.url;
|
|
19358
|
+
}
|
|
19359
|
+
}
|
|
19360
|
+
console.log(
|
|
19361
|
+
` ${symbols.step} Step ${chalk21.cyan(stepNumStr)} \xB7 ${chalk21.bold(step.action)}${route ? chalk21.dim(` \xB7 ${route}`) : ""}`
|
|
19362
|
+
);
|
|
19363
|
+
for (const w of warnings) {
|
|
19364
|
+
console.log(` ${symbols.warning} ${chalk21.yellow(w)}`);
|
|
19365
|
+
}
|
|
19324
19366
|
}
|
|
19325
19367
|
}
|
|
19326
19368
|
async function browseStep(args, opts, driver) {
|
|
@@ -19627,6 +19669,8 @@ var init_browse = __esm({
|
|
|
19627
19669
|
"use strict";
|
|
19628
19670
|
init_dist2();
|
|
19629
19671
|
init_dist();
|
|
19672
|
+
init_logger();
|
|
19673
|
+
init_symbols();
|
|
19630
19674
|
init_browse_actions();
|
|
19631
19675
|
init_browse_driver();
|
|
19632
19676
|
init_context4();
|
package/dist/index.js
CHANGED
|
@@ -12646,7 +12646,8 @@ var init_symbols = __esm({
|
|
|
12646
12646
|
add: chalk.cyan("+"),
|
|
12647
12647
|
info: chalk.blue(supportsUnicode ? "\u2139" : "i"),
|
|
12648
12648
|
dot: chalk.dim(supportsUnicode ? "\u2022" : "*"),
|
|
12649
|
-
question: chalk.yellow("?")
|
|
12649
|
+
question: chalk.yellow("?"),
|
|
12650
|
+
step: chalk.blue(supportsUnicode ? "\u25B6" : ">")
|
|
12650
12651
|
};
|
|
12651
12652
|
}
|
|
12652
12653
|
});
|
|
@@ -13591,8 +13592,8 @@ import { dirname as dirname3, join as join4, resolve as resolve2 } from "path";
|
|
|
13591
13592
|
import { fileURLToPath as fileURLToPath2 } from "url";
|
|
13592
13593
|
import chalk6 from "chalk";
|
|
13593
13594
|
function getVersion() {
|
|
13594
|
-
if ("0.3.0-beta.
|
|
13595
|
-
return "0.3.0-beta.
|
|
13595
|
+
if ("0.3.0-beta.2") {
|
|
13596
|
+
return "0.3.0-beta.2";
|
|
13596
13597
|
}
|
|
13597
13598
|
try {
|
|
13598
13599
|
const thisDir = dirname3(fileURLToPath2(import.meta.url));
|
|
@@ -15962,9 +15963,16 @@ async function report(scenario, opts) {
|
|
|
15962
15963
|
if (viewport) {
|
|
15963
15964
|
console.log(` ${chalk13.dim("device:")} ${formatViewport(viewport)}`);
|
|
15964
15965
|
}
|
|
15965
|
-
const
|
|
15966
|
-
if (
|
|
15967
|
-
|
|
15966
|
+
const config = await readConfig(projectRoot);
|
|
15967
|
+
if (config.cloud_linked && config.cloud_project_id) {
|
|
15968
|
+
const viewUrl = await pushedRunUrl(projectRoot, run.runId);
|
|
15969
|
+
if (viewUrl) {
|
|
15970
|
+
console.log(` ${chalk13.dim("view:")} ${chalk13.underline(viewUrl)}`);
|
|
15971
|
+
} else {
|
|
15972
|
+
console.log(
|
|
15973
|
+
` ${chalk13.dim("view:")} ${chalk13.dim("not synced yet")} ${chalk13.dim("(run `iamu sync` to view in cloud)")}`
|
|
15974
|
+
);
|
|
15975
|
+
}
|
|
15968
15976
|
}
|
|
15969
15977
|
if (c) {
|
|
15970
15978
|
const v = c.verification;
|
|
@@ -18645,23 +18653,38 @@ async function stepCommand(runArg, opts) {
|
|
|
18645
18653
|
);
|
|
18646
18654
|
return;
|
|
18647
18655
|
}
|
|
18648
|
-
|
|
18649
|
-
|
|
18650
|
-
|
|
18651
|
-
|
|
18652
|
-
|
|
18653
|
-
|
|
18654
|
-
|
|
18655
|
-
|
|
18656
|
-
|
|
18657
|
-
|
|
18658
|
-
|
|
18659
|
-
|
|
18656
|
+
const stepNumStr = String(res.step.step_number).padStart(2, "0");
|
|
18657
|
+
if (isVerbose()) {
|
|
18658
|
+
console.log();
|
|
18659
|
+
console.log(
|
|
18660
|
+
` ${symbols.success} Step ${chalk20.cyan(stepNumStr)} recorded: ${res.step.action}`
|
|
18661
|
+
);
|
|
18662
|
+
if (res.step.note) {
|
|
18663
|
+
console.log(` ${chalk20.dim("note:")} ${res.step.note}`);
|
|
18664
|
+
}
|
|
18665
|
+
if (res.step.url) {
|
|
18666
|
+
console.log(` ${chalk20.dim("url:")} ${res.step.url}`);
|
|
18667
|
+
}
|
|
18668
|
+
if (res.step.screenshot) {
|
|
18669
|
+
console.log(` ${chalk20.dim("shot:")} ${res.step.screenshot}`);
|
|
18670
|
+
}
|
|
18671
|
+
console.log(
|
|
18672
|
+
` ${chalk20.dim("file:")} ${path25.relative(projectRoot, res.stepPath)}`
|
|
18673
|
+
);
|
|
18674
|
+
console.log();
|
|
18675
|
+
} else {
|
|
18676
|
+
let route = "";
|
|
18677
|
+
if (res.step.url) {
|
|
18678
|
+
try {
|
|
18679
|
+
route = new URL(res.step.url).pathname;
|
|
18680
|
+
} catch {
|
|
18681
|
+
route = res.step.url;
|
|
18682
|
+
}
|
|
18683
|
+
}
|
|
18684
|
+
console.log(
|
|
18685
|
+
` ${symbols.step} Step ${chalk20.cyan(stepNumStr)} \xB7 ${chalk20.bold(res.step.action)}${route ? chalk20.dim(` \xB7 ${route}`) : ""}`
|
|
18686
|
+
);
|
|
18660
18687
|
}
|
|
18661
|
-
console.log(
|
|
18662
|
-
` ${chalk20.dim("file:")} ${path25.relative(projectRoot, res.stepPath)}`
|
|
18663
|
-
);
|
|
18664
|
-
console.log();
|
|
18665
18688
|
} catch (err) {
|
|
18666
18689
|
commandError(err.message, opts);
|
|
18667
18690
|
}
|
|
@@ -18672,6 +18695,7 @@ var init_step = __esm({
|
|
|
18672
18695
|
"use strict";
|
|
18673
18696
|
init_dist2();
|
|
18674
18697
|
init_dist();
|
|
18698
|
+
init_logger();
|
|
18675
18699
|
init_symbols();
|
|
18676
18700
|
init_context4();
|
|
18677
18701
|
init_live_run_client();
|
|
@@ -19256,16 +19280,34 @@ function printStep(opts, record, projectRoot, stagnationWarning, challengeWarnin
|
|
|
19256
19280
|
console.log(JSON.stringify(doc, null, 2));
|
|
19257
19281
|
return;
|
|
19258
19282
|
}
|
|
19259
|
-
|
|
19260
|
-
|
|
19261
|
-
|
|
19262
|
-
|
|
19263
|
-
|
|
19264
|
-
|
|
19265
|
-
|
|
19266
|
-
|
|
19267
|
-
|
|
19268
|
-
console.log(` ${chalk21.dim("
|
|
19283
|
+
const stepNumStr = String(step.step_number).padStart(2, "0");
|
|
19284
|
+
if (isVerbose()) {
|
|
19285
|
+
console.log(
|
|
19286
|
+
` ${symbols.success} Step ${chalk21.cyan(stepNumStr)} recorded: ${step.action}`
|
|
19287
|
+
);
|
|
19288
|
+
for (const w of warnings) {
|
|
19289
|
+
console.log(` ${symbols.warning} ${chalk21.yellow(w)}`);
|
|
19290
|
+
}
|
|
19291
|
+
if (step.note) console.log(` ${chalk21.dim("note:")} ${step.note}`);
|
|
19292
|
+
if (step.url) console.log(` ${chalk21.dim("url:")} ${step.url}`);
|
|
19293
|
+
if (step.screenshot) {
|
|
19294
|
+
console.log(` ${chalk21.dim("screenshot:")} ${step.screenshot}`);
|
|
19295
|
+
}
|
|
19296
|
+
} else {
|
|
19297
|
+
let route = "";
|
|
19298
|
+
if (step.url) {
|
|
19299
|
+
try {
|
|
19300
|
+
route = new URL(step.url).pathname;
|
|
19301
|
+
} catch {
|
|
19302
|
+
route = step.url;
|
|
19303
|
+
}
|
|
19304
|
+
}
|
|
19305
|
+
console.log(
|
|
19306
|
+
` ${symbols.step} Step ${chalk21.cyan(stepNumStr)} \xB7 ${chalk21.bold(step.action)}${route ? chalk21.dim(` \xB7 ${route}`) : ""}`
|
|
19307
|
+
);
|
|
19308
|
+
for (const w of warnings) {
|
|
19309
|
+
console.log(` ${symbols.warning} ${chalk21.yellow(w)}`);
|
|
19310
|
+
}
|
|
19269
19311
|
}
|
|
19270
19312
|
}
|
|
19271
19313
|
async function browseStep(args, opts, driver) {
|
|
@@ -19572,6 +19614,8 @@ var init_browse = __esm({
|
|
|
19572
19614
|
"use strict";
|
|
19573
19615
|
init_dist2();
|
|
19574
19616
|
init_dist();
|
|
19617
|
+
init_logger();
|
|
19618
|
+
init_symbols();
|
|
19575
19619
|
init_browse_actions();
|
|
19576
19620
|
init_browse_driver();
|
|
19577
19621
|
init_context4();
|
|
@@ -103,13 +103,8 @@ Ask the user how they would like to triage:
|
|
|
103
103
|
2. "Focus only on Critical findings (<C> items)"
|
|
104
104
|
3. "Review by scenario group: <Top Scenario>"
|
|
105
105
|
- Otherwise (in CLI or text-only environments):
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
1. [Recommended] Walk through findings one by one
|
|
109
|
-
2. Focus only on Critical findings (<C> items)
|
|
110
|
-
3. Review by scenario group: <Top Scenario>
|
|
111
|
-
|
|
112
|
-
Reply '1' to walk through all [default], select 2-3, or enter a finding number/slug:
|
|
106
|
+
How would you like to triage these <N> open findings? I recommend walking through findings one by one.
|
|
107
|
+
Proceeding with one-by-one triage. (Say "critical only", specify a scenario group, or enter a finding number/slug).
|
|
113
108
|
|
|
114
109
|
### 3. Direct triage: review one finding
|
|
115
110
|
|
|
@@ -122,7 +117,7 @@ Format the visible finding in chat:
|
|
|
122
117
|
```markdown
|
|
123
118
|
### Finding #<N>/<total> [<SEVERITY>] — <title>
|
|
124
119
|
> **Where:** `<Screen title or URL>` (Step <N>) · **Persona:** <Persona Name> (<Role>)
|
|
125
|
-
> **Evidence:**
|
|
120
|
+
> **Evidence:** [step-<N>.png](iamu/.runs/<run>/screenshots/step-<N>.png) · [View in Cloud Walkthrough](<url from iamu open <run-id> --print>)
|
|
126
121
|
|
|
127
122
|
**❌ Problem:**
|
|
128
123
|
<What went wrong on screen and why it hinders the persona (synthesizing ui_fact and consequence in 1–2 clear, direct sentences)>
|
|
@@ -130,8 +125,9 @@ Format the visible finding in chat:
|
|
|
130
125
|
**💡 Recommendation:**
|
|
131
126
|
<Concrete fix proposal from finding body>
|
|
132
127
|
```
|
|
128
|
+
*(For `type: "helps"` findings, omit `**❌ Problem:**` and `**💡 Recommendation:**`; render `**✓ Strength:** <Observation>`)*.
|
|
133
129
|
|
|
134
|
-
If the project is cloud-linked, include the link to the
|
|
130
|
+
If the project is cloud-linked, include the direct link to the walkthrough in Iamu Cloud (from `iamu open <run-id> --print`).
|
|
135
131
|
|
|
136
132
|
Emit this card visibly into the conversation.
|
|
137
133
|
|
|
@@ -139,47 +135,20 @@ Emit this card visibly into the conversation.
|
|
|
139
135
|
|
|
140
136
|
Every finding must land on a decision — never silently skip. Match the user's intent to the closest option.
|
|
141
137
|
|
|
142
|
-
**
|
|
143
|
-
|
|
138
|
+
**Dual-Surface Triage Prompting (Sequencing Rule):**
|
|
139
|
+
You MUST output the rich markdown finding card to the chat stream FIRST. In the SAME turn, invoke `ask_question`:
|
|
144
140
|
|
|
145
141
|
- If your environment provides an interactive user-prompt tool (e.g. `ask_question`, `ask_followup_question`), invoke it:
|
|
146
|
-
- **Question:**
|
|
147
|
-
"""
|
|
148
|
-
Finding #<N>/<total> [<SEVERITY>]: <title>
|
|
149
|
-
Where: <Screen title or URL, Step N> · Persona: <Persona Name> (<Role>)
|
|
150
|
-
|
|
151
|
-
❌ PROBLEM:
|
|
152
|
-
<What is broken or awkward on screen and why it hinders the persona in 1–2 direct sentences>
|
|
153
|
-
|
|
154
|
-
💡 RECOMMENDATION:
|
|
155
|
-
<Concrete fix proposal from finding body>
|
|
156
|
-
|
|
157
|
-
How should we triage this finding?
|
|
158
|
-
"""
|
|
142
|
+
- **Question:** "Finding #<N>/<total> [<SEVERITY>]: <title> on <Screen title or URL, Step N> — How to triage?"
|
|
159
143
|
- **Options:**
|
|
160
144
|
1. "[Recommended] Queue to fix (<brief 3-5 word fix summary>)"
|
|
161
|
-
2. "
|
|
162
|
-
3. "
|
|
163
|
-
4. "
|
|
164
|
-
5. "
|
|
165
|
-
- Otherwise (
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
Where: <Screen title or URL, Step N> · Persona: <Persona Name> (<Role>)
|
|
169
|
-
|
|
170
|
-
❌ PROBLEM:
|
|
171
|
-
<What went wrong and why it hinders the persona in 1–2 direct sentences>
|
|
172
|
-
|
|
173
|
-
💡 RECOMMENDATION:
|
|
174
|
-
<Concrete fix proposal>
|
|
175
|
-
|
|
176
|
-
1. [Recommended] Queue to fix (<brief 3-5 word fix summary>)
|
|
177
|
-
2. Dismiss / Skip (not relevant or walker error)
|
|
178
|
-
3. Discuss / Explore trade-offs
|
|
179
|
-
4. Fix immediately (leave triage now)
|
|
180
|
-
5. Next finding (keep open / defer)
|
|
181
|
-
|
|
182
|
-
Reply '1' to queue fix [default], enter 2-5, or describe your decision:
|
|
145
|
+
2. "Queue all remaining recommended fixes (batch accept)"
|
|
146
|
+
3. "Dismiss / Skip (<brief reason if obvious, e.g. keep current design>)"
|
|
147
|
+
4. "Discuss / Explore trade-offs"
|
|
148
|
+
5. "Fix immediately (leave triage now)"
|
|
149
|
+
- Otherwise (CLI / text-only conversational fallback):
|
|
150
|
+
> **Recommended Action:** Queue to fix (<brief 3-5 word fix summary>).
|
|
151
|
+
> Say **"queue"** (or **"queue all"**), **"dismiss"** (to teach a rule), or **"discuss"** to explore trade-offs.
|
|
183
152
|
|
|
184
153
|
Record the decision with `iamu triage` — it sets `triage_status` and `triage_note` in `iamu/findings/<slug>.md`, and for a dismissal it also teaches the next walk:
|
|
185
154
|
|
|
@@ -195,7 +164,8 @@ triage_note: "Made handoff notes optional on /sv/handoff; verified on screen."
|
|
|
195
164
|
```
|
|
196
165
|
|
|
197
166
|
- **Discuss / Explore trade-offs (Conversational Dialogue Mode — NO MODAL LOOPS)** → when the user chooses "Discuss", asks a question, or wants to explore architectural trade-offs:
|
|
198
|
-
**DO NOT invoke `ask_question` or present multiple-choice menus.** Stay in natural conversational chat as a senior pair programmer. Answer follow-up questions, inspect code, benchmark against competitors, and discuss options in plain markdown. Converse naturally back and forth until you reach a conclusion together.
|
|
167
|
+
**DO NOT invoke `ask_question` or present multiple-choice menus.** Stay in natural conversational chat as a senior pair programmer. Answer follow-up questions, inspect code, benchmark against competitors, and discuss options in plain markdown. Converse naturally back and forth until you reach a conclusion together.
|
|
168
|
+
Once the user says "queue it", "dismiss it", "fix it now", or "let's do that", execute `iamu triage`, confirm in 1 line: "✓ Decision recorded. Ready for finding #<N+1>?", and immediately emit Finding #<N+1> to chat with its triage prompt. Do NOT trap the user with modal dialogs after each conversational turn.
|
|
199
169
|
|
|
200
170
|
- **Queue to fix [Recommended in list-mode]** → add to the session's fix queue. Tell the user in 1 line: "✓ Queued for fix. Advancing to next finding..." and loop to the next finding. Complete the triage queue across all findings first.
|
|
201
171
|
|
|
@@ -262,10 +232,8 @@ If `<N> > 0` findings were queued for fix:
|
|
|
262
232
|
1. "[Recommended] Apply queued fixes in workspace now"
|
|
263
233
|
2. "Done for now (keep fixes open in iamu/findings/)"
|
|
264
234
|
- Otherwise (CLI / text-only):
|
|
265
|
-
|
|
266
|
-
|
|
267
|
-
2. Done for now (keep fixes open in iamu/findings/)
|
|
268
|
-
Reply '1' to apply fixes [default], or select 2:
|
|
235
|
+
Triage complete. I recommend: Apply queued fixes in workspace now.
|
|
236
|
+
Proceeding with code edits — say "done" to keep fixes open in iamu/findings/.
|
|
269
237
|
|
|
270
238
|
- **Executing the queued fixes:**
|
|
271
239
|
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>"`.
|
|
@@ -279,10 +247,8 @@ If `<N> > 0` findings were queued for fix:
|
|
|
279
247
|
1. "[Recommended] Re-run walkthrough for <scenario-slug> to verify fixes hold"
|
|
280
248
|
2. "Done for now (leave verification for later)"
|
|
281
249
|
- Otherwise (CLI / text-only):
|
|
282
|
-
|
|
283
|
-
|
|
284
|
-
2. Done for now (leave verification for later)
|
|
285
|
-
Reply '1' to re-run [default], or select 2:
|
|
250
|
+
Fixes applied and validated. I recommend: Re-run walkthrough for <scenario-slug> to verify fixes hold.
|
|
251
|
+
Proceeding with verification re-run — say "done" to leave verification for later.
|
|
286
252
|
|
|
287
253
|
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.
|
|
288
254
|
|
|
@@ -298,9 +264,7 @@ Report it in one line: `Synced <N> findings to Iamu Cloud.` If the result has `c
|
|
|
298
264
|
|
|
299
265
|
Then end with the dashboard link from `iamu open --print` (step replay, screenshots side by side, the team's view of the same findings):
|
|
300
266
|
|
|
301
|
-
|
|
302
|
-
Team view: <url>
|
|
303
|
-
```
|
|
267
|
+
> ☁️ **Cloud Walkthrough:** [Open in Iamu Cloud](<url from iamu open --print>)
|
|
304
268
|
|
|
305
269
|
In linked-no-credentials mode, end with `Decisions are local only — iamu auth login, then iamu sync, to share them.` Skip this section entirely in local-only mode. The terminal surface is complete.
|
|
306
270
|
|
|
@@ -85,26 +85,20 @@ Present 2–3 scannable scenario proposals. Each proposal MUST bundle the situat
|
|
|
85
85
|
3. "Select alternative: '<Bundle 2 Title>' as <Persona 2 Name>"
|
|
86
86
|
4. "Customize situation, checkpoint, or brief"
|
|
87
87
|
- Otherwise (in CLI or text-only environments):
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
1. [Recommended] Scaffold '<Bundle 1 Title>' as <Persona 1 Name>
|
|
91
|
-
2. Switch persona: Walk as <Alternative Persona Name> (<Role>)
|
|
92
|
-
3. Select alternative: '<Bundle 2 Title>' as <Persona 2 Name>
|
|
93
|
-
4. Customize situation, checkpoint, or brief
|
|
94
|
-
|
|
95
|
-
Reply '1' to scaffold [default], select 2-3, or type adjustments:
|
|
88
|
+
I recommend scaffolding '<Bundle 1 Title>' as <Persona 1 Name>.
|
|
89
|
+
Proceeding to scaffold scenario — say "switch persona", "select alternative", or describe adjustments to customize.
|
|
96
90
|
|
|
97
91
|
*Execution Flow:*
|
|
98
|
-
- **Selecting Option 1 (or
|
|
92
|
+
- **Selecting Option 1 (or conversational confirmation):** Proceed IMMEDIATELY to Step 6 (Persist everything). Zero intermediate question modals.
|
|
99
93
|
- **Selecting Option 2:** Present the persona switcher (Step 4) then persist.
|
|
100
94
|
- **Selecting Option 3:** Swap primary bundle and prompt to persist.
|
|
101
95
|
- **Selecting Option 4 / typing adjustments:** Expand into Step 3 to refine details before persisting.
|
|
102
96
|
|
|
103
97
|
### 3. Develop the situation (Scenario Spec-Sheet)
|
|
104
98
|
|
|
105
|
-
In Fast-Path mode or when customizing, present the complete scenario as a structured, scannable Spec-Sheet before creating anything. Every field shown here is written verbatim to disk on confirmation
|
|
99
|
+
In Fast-Path mode or when customizing, present the complete scenario as a structured, scannable Spec-Sheet before creating anything. Every field shown here is written verbatim to disk on confirmation.
|
|
106
100
|
|
|
107
|
-
|
|
101
|
+
Keep the narrative capped at 2–3 punchy sentences (problem-space only, zero UI terms). (Note: When passing text to modal prompt tools like `ask_question`, use plain text without header hashes or blockquotes; in normal chat output, format clearly with standard markdown).
|
|
108
102
|
|
|
109
103
|
```
|
|
110
104
|
Scenario Spec-Sheet: <Outline Title>
|
|
@@ -133,15 +127,10 @@ Persona & Brief:
|
|
|
133
127
|
2. "Switch persona: Walk as <Alternative Persona> (<Role>)"
|
|
134
128
|
3. "Adjust situation, checkpoint, or brief"
|
|
135
129
|
- Otherwise (in CLI or text-only environments):
|
|
130
|
+
I recommend scaffolding scenario '<Outline Title>' and preparing the walkthrough.
|
|
131
|
+
Proceeding to scaffold scenario — say "switch persona" or describe adjustments.
|
|
136
132
|
|
|
137
|
-
|
|
138
|
-
1. [Recommended] Scaffold scenario and prepare walkthrough
|
|
139
|
-
2. Switch persona: Walk as <Alternative Persona> (<Role>)
|
|
140
|
-
3. Adjust situation, checkpoint, or brief
|
|
141
|
-
|
|
142
|
-
Reply '1' to scaffold [default], select 2, or type adjustments:
|
|
143
|
-
|
|
144
|
-
*Selecting Option 1 or hitting Enter proceeds IMMEDIATELY to Step 6 (Persist everything).*
|
|
133
|
+
*Selecting Option 1 proceeds IMMEDIATELY to Step 6 (Persist everything).*
|
|
145
134
|
|
|
146
135
|
### 4. Pick or swap personas (on demand)
|
|
147
136
|
|
|
@@ -170,7 +159,8 @@ If no existing persona fits, or if testing an uncovered perspective is needed, p
|
|
|
170
159
|
1. "[Recommended] Bind existing persona: <slug> (<role>)" (if one fits)
|
|
171
160
|
2. "Create candidate: <Name> (<Role>)"
|
|
172
161
|
3. "Leave as draft (no persona bound yet)"
|
|
173
|
-
- Otherwise,
|
|
162
|
+
- Otherwise, state the recommended persona and conversational default:
|
|
163
|
+
"I recommend binding <slug> (<role>). Proceeding with this persona — name a candidate or say 'skip' to save as draft."
|
|
174
164
|
|
|
175
165
|
### 5. Classify into capabilities
|
|
176
166
|
|
|
@@ -96,7 +96,8 @@ Existing coverage: <N> scenarios ([<slug1>](iamu/scenarios/<slug1>.md), ...). Un
|
|
|
96
96
|
2. "Scaffold '<Candidate 2 Title>' (<Actor>)"
|
|
97
97
|
3. "Scaffold '<Candidate 3 Title>' (<Actor>)"
|
|
98
98
|
- Otherwise (in CLI or text-only environments):
|
|
99
|
-
|
|
99
|
+
I recommend scaffolding Candidate 1: '<Candidate 1 Title>' (<Actor>).
|
|
100
|
+
Proceeding to scaffold scenario — name another candidate or describe adjustments.
|
|
100
101
|
|
|
101
102
|
#### B. When proposing Personas:
|
|
102
103
|
|
|
@@ -126,7 +127,8 @@ Existing personas: [<slug1>](iamu/personas/<slug1>.md), ... Uncovered roles from
|
|
|
126
127
|
2. "Add <Name 2> (<Actor role>)"
|
|
127
128
|
3. "Add <Name 3> (<Actor role>)"
|
|
128
129
|
- Otherwise (in CLI or text-only environments):
|
|
129
|
-
|
|
130
|
+
I recommend adding Candidate 1: <Name 1> (<Actor role>).
|
|
131
|
+
Proceeding to add persona — name another candidate or describe adjustments.
|
|
130
132
|
|
|
131
133
|
Ground rules for generation:
|
|
132
134
|
|
|
@@ -57,8 +57,8 @@ When `$ARGUMENTS` is empty and no active scenario exists in context, check `iamu
|
|
|
57
57
|
1. "[Recommended] Ignore and continue with new run"
|
|
58
58
|
2. "Finish run `<run-id>`: Run post-walk assembly on existing steps"
|
|
59
59
|
3. "Discard empty unfinished runs"
|
|
60
|
-
- Otherwise (in text-only/conversational environments), state
|
|
61
|
-
"
|
|
60
|
+
- Otherwise (in text-only/conversational environments), state the recommended action and default:
|
|
61
|
+
"Found <N> unfinished walkthrough run(s). Proceeding with a new run. (Say 'finish <run-id>' or 'discard empty' to adjust)."
|
|
62
62
|
|
|
63
63
|
Do not block the new run on this, and do not ask again in the same session.
|
|
64
64
|
|
|
@@ -110,7 +110,8 @@ Omit the first group when `rerun` is empty. If `requests.open` in the status out
|
|
|
110
110
|
1. "[Recommended] <Slug or Title>" (e.g. top rerun needing proof, or primary ready scenario)
|
|
111
111
|
2. "<Alternative Scenario Slug or Title>"
|
|
112
112
|
3. "Draft a new scenario..."
|
|
113
|
-
- Otherwise,
|
|
113
|
+
- Otherwise, state the recommended scenario and conversational default:
|
|
114
|
+
"Recommended scenario: `<Slug or Title>`. Proceeding with this scenario — say '<Alternative Slug>' or describe a new intent to change course."
|
|
114
115
|
|
|
115
116
|
Drafts get a bind prompt before execution (step 2); ready-to-run scenarios skip to step 3.
|
|
116
117
|
|
|
@@ -125,7 +126,8 @@ If the resolved scenario has `persona: null`, prompt to bind before executing:
|
|
|
125
126
|
1. "[Recommended] <Existing Persona 1> (<Role>)"
|
|
126
127
|
2. "<Existing Persona 2> (<Role>)"
|
|
127
128
|
3. "Draft a new persona candidate"
|
|
128
|
-
- Otherwise,
|
|
129
|
+
- Otherwise, state the recommended persona and conversational default:
|
|
130
|
+
"This scenario is a draft with no persona bound. I recommend binding `<Existing Persona 1>` (<Role>). Proceeding with this persona — name another persona or type 'new' to propose candidates."
|
|
129
131
|
|
|
130
132
|
1. Read `iamu/personas/` directory or run `iamu list personas`; present as pickable list + "new" option.
|
|
131
133
|
2. Picked existing → bind that persona by updating the scenario file's `persona` field.
|
|
@@ -162,11 +164,8 @@ If the target is a local URL (e.g. `http://localhost:*`, `http://127.0.0.1:*`) a
|
|
|
162
164
|
2. "I will start the dev server manually (wait for port)"
|
|
163
165
|
3. "Specify a different target URL"
|
|
164
166
|
- Otherwise (CLI / text-only):
|
|
165
|
-
Target URL <url> is unreachable. Boot dev server
|
|
166
|
-
|
|
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:
|
|
167
|
+
Target URL <url> is unreachable. I recommend Option 1: Boot dev server in background (`<dev_command>`) and proceed.
|
|
168
|
+
Proceeding with dev server boot — say "wait" to start manually or provide a different target URL.
|
|
170
169
|
3. If Option 1 is chosen:
|
|
171
170
|
- Launch `<dev_command>` in the background as a managed daemon process.
|
|
172
171
|
- Poll `<url>` with HTTP requests until it responds (timeout: 30s).
|
|
@@ -432,23 +431,23 @@ Render results **inline** as a concise executive scorecard.
|
|
|
432
431
|
|
|
433
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.
|
|
434
433
|
|
|
435
|
-
Keep the presentation under 15 lines total:
|
|
434
|
+
Keep the presentation under 15 lines total. Output as rich Markdown (do NOT wrap the entire summary in a triple-backtick code block so links render as clickable):
|
|
436
435
|
|
|
437
|
-
|
|
438
|
-
|
|
439
|
-
|
|
440
|
-
Focus Checkpoint: "<human_tests[0].question>" → <No / Partial / Yes>: <1-sentence direct answer>
|
|
436
|
+
### Walkthrough Complete: [<scenario-slug>](iamu/scenarios/<scenario-slug>.md) ([<persona>](iamu/personas/<persona>.md))
|
|
437
|
+
**Verdict:** <FAIL / PARTIAL / PASS> · <N> Blockers (Critical) · <M> Friction points (Major/Minor) · <K> Helpers (<StepCount> steps)
|
|
438
|
+
**Checkpoint:** "<human_tests[0].question>" → <No / Partial / Yes>: <1-sentence direct answer>
|
|
441
439
|
|
|
442
|
-
Findings:
|
|
443
|
-
1. [
|
|
444
|
-
2. [
|
|
440
|
+
#### Findings:
|
|
441
|
+
1. **[CRITICAL]** · *<type>* · <Short title> (Step <N> at `<short_url_path>`)
|
|
442
|
+
2. **[MAJOR]** · *<type>* · <Short title> (Step <N> at `<short_url_path>`)
|
|
445
443
|
...
|
|
446
444
|
(Helps: • [helps] <short title> (Step <N>))
|
|
447
445
|
|
|
448
|
-
Cloud: <Shareable report: <url> | Local only>
|
|
449
|
-
```
|
|
450
|
-
|
|
451
446
|
(If canonical.json contains a `verification` section, include a 1-line delta: `Since last run: ✓ <N> fixed · ✗ <M> persist · + <K> new`.)
|
|
447
|
+
|
|
448
|
+
> ☁️ **Cloud Walkthrough:** [Open in Iamu Cloud](<url from iamu open <run-id> --print>)
|
|
449
|
+
*(If local-only, render instead: `> **Artifact:** [iamu/.runs/<run-id>/report.md](iamu/.runs/<run-id>/report.md) (Local only)`)*
|
|
450
|
+
|
|
452
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.
|
|
453
452
|
|
|
454
453
|
7. **Next actions (Interactive Triage Selection)**:
|
|
@@ -460,15 +459,9 @@ Do NOT output `### What Worked` paragraphs or lengthy bullet essays. Keep the en
|
|
|
460
459
|
2. "Apply fixes for all clear findings (batch fix)"
|
|
461
460
|
3. "Discuss findings and persona friction points"
|
|
462
461
|
4. "Re-run walkthrough to test changes"
|
|
463
|
-
|
|
464
|
-
|
|
465
|
-
|
|
466
|
-
1. [Recommended] Walk through findings one by one
|
|
467
|
-
2. Apply fixes for all clear findings (batch fix)
|
|
468
|
-
3. Discuss findings and persona friction points
|
|
469
|
-
4. Re-run walkthrough to test changes
|
|
470
|
-
|
|
471
|
-
Reply '1' to review findings [default], enter 2-4, or tell me how to proceed:
|
|
462
|
+
- Otherwise (in CLI or text-only environments):
|
|
463
|
+
Walkthrough complete: <F> findings reported. I recommend walking through findings one by one.
|
|
464
|
+
Proceeding with one-by-one triage. (Say "batch fix", "discuss", or "re-run" to change course).
|
|
472
465
|
|
|
473
466
|
### 6. Conversational Triage & Guided Review
|
|
474
467
|
|
|
@@ -483,7 +476,7 @@ When the user asks to review findings one by one:
|
|
|
483
476
|
```markdown
|
|
484
477
|
### Finding #<N>/<total> [<SEVERITY>] — <title>
|
|
485
478
|
> **Where:** `<Screen title or URL>` (Step <N>) · **Persona:** <Persona Name> (<Role>)
|
|
486
|
-
> **Evidence:**
|
|
479
|
+
> **Evidence:** [step-<N>.png](iamu/.runs/<run>/screenshots/step-<N>.png) · [View in Cloud Walkthrough](<url from iamu open <run-id> --print>)
|
|
487
480
|
|
|
488
481
|
**❌ Problem:**
|
|
489
482
|
<What went wrong on screen and why it hinders the persona (synthesizing ui_fact and consequence in 1–2 clear, direct sentences)>
|
|
@@ -491,49 +484,26 @@ When the user asks to review findings one by one:
|
|
|
491
484
|
**💡 Recommendation:**
|
|
492
485
|
<Concrete fix proposal from finding body>
|
|
493
486
|
```
|
|
494
|
-
|
|
487
|
+
*(For `type: "helps"` findings, omit `**❌ Problem:**` and `**💡 Recommendation:**`; render `**✓ Strength:** <Observation>`)*.
|
|
488
|
+
|
|
489
|
+
If the project is cloud-linked, include the direct link to the walkthrough in Iamu Cloud (from `iamu open <run-id> --print`).
|
|
495
490
|
|
|
496
491
|
Followed immediately by the decision prompt:
|
|
497
492
|
|
|
498
|
-
**
|
|
499
|
-
|
|
493
|
+
**Dual-Surface Triage Prompting (Sequencing Rule):**
|
|
494
|
+
You MUST output the rich markdown finding card to the chat stream FIRST. In the SAME turn, invoke `ask_question`:
|
|
500
495
|
|
|
501
496
|
- If interactive tool available (e.g. `ask_question`, `ask_followup_question`), invoke it:
|
|
502
|
-
- **Question:**
|
|
503
|
-
"""
|
|
504
|
-
Finding #<N>/<total> [<SEVERITY>]: <title>
|
|
505
|
-
Where: <Screen title or URL, Step N> · Persona: <Persona Name> (<Role>)
|
|
506
|
-
|
|
507
|
-
❌ PROBLEM:
|
|
508
|
-
<What is broken or awkward on screen and why it hinders the persona in 1–2 direct sentences>
|
|
509
|
-
|
|
510
|
-
💡 RECOMMENDATION:
|
|
511
|
-
<Concrete fix proposal from finding body>
|
|
512
|
-
|
|
513
|
-
How should we triage this finding?
|
|
514
|
-
"""
|
|
497
|
+
- **Question:** "Finding #<N>/<total> [<SEVERITY>]: <title> on <Screen title or URL, Step N> — How to triage?"
|
|
515
498
|
- **Options:**
|
|
516
499
|
1. "[Recommended] Queue to fix (<brief 3-5 word fix summary>)"
|
|
517
|
-
2. "
|
|
518
|
-
3. "
|
|
519
|
-
4. "
|
|
520
|
-
5. "
|
|
521
|
-
- Otherwise (CLI / text-only):
|
|
522
|
-
|
|
523
|
-
|
|
524
|
-
|
|
525
|
-
❌ PROBLEM:
|
|
526
|
-
<What went wrong and why it hinders the persona in 1–2 direct sentences>
|
|
527
|
-
|
|
528
|
-
💡 RECOMMENDATION:
|
|
529
|
-
<Concrete fix proposal>
|
|
530
|
-
|
|
531
|
-
1. [Recommended] Queue to fix (<brief 3-5 word fix summary>)
|
|
532
|
-
2. Dismiss / Skip (not relevant or walker error)
|
|
533
|
-
3. Discuss / Explore trade-offs
|
|
534
|
-
4. Fix immediately (leave triage now)
|
|
535
|
-
5. Next finding (keep open / defer)
|
|
536
|
-
Reply '1' to queue fix [default], select 2-5, or describe your decision:
|
|
500
|
+
2. "Queue all remaining recommended fixes (batch accept)"
|
|
501
|
+
3. "Dismiss / Skip (<brief reason if obvious, e.g. keep current design>)"
|
|
502
|
+
4. "Discuss / Explore trade-offs"
|
|
503
|
+
5. "Fix immediately (leave triage now)"
|
|
504
|
+
- Otherwise (CLI / text-only conversational fallback):
|
|
505
|
+
> **Recommended Action:** Queue to fix (<brief 3-5 word fix summary>).
|
|
506
|
+
> Say **"queue"** (or **"queue all"**), **"dismiss"** (to teach a rule), or **"discuss"** to explore trade-offs.
|
|
537
507
|
|
|
538
508
|
2. **Handle the user's decision**:
|
|
539
509
|
- **Queue to fix [Recommended]**:
|
|
@@ -584,11 +554,8 @@ When the user asks to review findings one by one:
|
|
|
584
554
|
2. "Re-run walkthrough to verify dismissed items first"
|
|
585
555
|
3. "Done for now (keep fixes open in iamu/findings/)"
|
|
586
556
|
- Otherwise (CLI / text-only):
|
|
587
|
-
Apply fixes for
|
|
588
|
-
|
|
589
|
-
2. Re-run walkthrough to verify dismissed items first
|
|
590
|
-
3. Done for now (keep fixes open in iamu/findings/)
|
|
591
|
-
Reply '1' to apply fixes [default], or select 2-3:
|
|
557
|
+
Triage complete. I recommend: Apply fixes for queued findings in workspace now.
|
|
558
|
+
Proceeding with code fixes — say "re-run first" or "done for now" to adjust.
|
|
592
559
|
|
|
593
560
|
- **Executing the queued fixes:**
|
|
594
561
|
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>"`.
|
|
@@ -604,10 +571,8 @@ When the user asks to review findings one by one:
|
|
|
604
571
|
1. "[Recommended] Re-run walkthrough to verify fixes hold"
|
|
605
572
|
2. "Done for now (leave verification for later)"
|
|
606
573
|
- Otherwise (CLI / text-only):
|
|
607
|
-
|
|
608
|
-
|
|
609
|
-
2. Done for now (leave verification for later)
|
|
610
|
-
Reply '1' to re-run [default], or select 2:
|
|
574
|
+
Fixes applied and validated. I recommend: Re-run walkthrough to verify fixes hold.
|
|
575
|
+
Proceeding with verification re-run — say "done" to leave verification for later.
|
|
611
576
|
|
|
612
577
|
When Option 1 is chosen:
|
|
613
578
|
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`.
|
|
@@ -99,15 +99,8 @@ Prompt the user to verify the safety boundary:
|
|
|
99
99
|
2. "Adjust boundaries (add forbidden external URLs, change dev command or port)"
|
|
100
100
|
3. "Skip safety fence for now"
|
|
101
101
|
- Otherwise (text-only/CLI):
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
Confirm safety fence and dev environment?
|
|
105
|
-
1. [Recommended] Safety boundaries look safe — save fence and proceed
|
|
106
|
-
2. Adjust boundaries (add forbidden external URLs, change dev command or port)
|
|
107
|
-
3. Skip safety fence for now
|
|
108
|
-
|
|
109
|
-
Reply '1' to accept [default], select 2-3, or tell me what to adjust:
|
|
110
|
-
```
|
|
102
|
+
Safety boundaries look safe. I recommend saving fence and proceeding.
|
|
103
|
+
Proceeding to save safety fence — say "adjust" to change boundaries or "skip" to defer.
|
|
111
104
|
|
|
112
105
|
**Action on confirmation (Option 1):**
|
|
113
106
|
Persist the safety fence using `iamu set testability` (never invoke host file creation or edit tools):
|
|
@@ -170,15 +163,8 @@ Prompt the user to verify the project description:
|
|
|
170
163
|
2. "Save project description only (skip scenario creation for now)"
|
|
171
164
|
3. "Adjust domain or description"
|
|
172
165
|
- Otherwise (text-only/CLI):
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
Confirm project domain & description?
|
|
176
|
-
1. [Recommended] Project description is accurate — proceed to design first test
|
|
177
|
-
2. Save project description only (skip scenario creation for now)
|
|
178
|
-
3. Adjust domain or description
|
|
179
|
-
|
|
180
|
-
Reply '1' to accept [default], select 2-3, or tell me what to adjust:
|
|
181
|
-
```
|
|
166
|
+
Project description is accurate. I recommend proceeding to design your first test.
|
|
167
|
+
Proceeding to first test design — say "save only" or describe adjustments to change course.
|
|
182
168
|
|
|
183
169
|
**Action on confirmation (Option 1):**
|
|
184
170
|
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`:
|
|
@@ -228,16 +214,8 @@ Prompt the user to verify the scenario and its auth precondition:
|
|
|
228
214
|
3. "Switch role / design a different scenario (write-in)"
|
|
229
215
|
4. "Skip scenario for now"
|
|
230
216
|
- Otherwise (text-only/CLI):
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
Scaffold this baseline journey?
|
|
234
|
-
1. [Recommended] Scaffold journey with <detected auth mechanism>
|
|
235
|
-
2. Use interactive human login handshake (pause browser for live login)
|
|
236
|
-
3. Switch role / design a different scenario
|
|
237
|
-
4. Skip scenario for now
|
|
238
|
-
|
|
239
|
-
Reply '1' to accept [default], select 2-4, or tell me what to adjust:
|
|
240
|
-
```
|
|
217
|
+
I recommend Option 1: Scaffold journey with <detected auth mechanism>.
|
|
218
|
+
Proceeding to scaffold baseline journey — say "interactive login", "switch role", or "skip" to adjust.
|
|
241
219
|
|
|
242
220
|
**Action on confirmation (Option 1 or Option 2):**
|
|
243
221
|
1. **Scaffold Primary Capability** (if not already existing):
|
|
@@ -105,6 +105,17 @@ Now present the **Strategic Fork** to the user. Do not be an unyielding bureaucr
|
|
|
105
105
|
- State: "This situation reads a public page and requires no pre-existing world state."
|
|
106
106
|
- Mark `--state-description "No particular data needed"`.
|
|
107
107
|
|
|
108
|
+
**Interactive Decision Gate:**
|
|
109
|
+
- If your environment provides an interactive user-prompt tool (e.g. `ask_question`, `ask_followup_question`), invoke it:
|
|
110
|
+
- Question: "How should we stage '<scenario-slug>' for walkthrough?"
|
|
111
|
+
- Options:
|
|
112
|
+
1. "[Recommended] Option A: Build Testability (<brief seed proposal>)"
|
|
113
|
+
2. "Option B: Semantic Squinting (test immediately against current dev database)"
|
|
114
|
+
3. "Option C: Zero Setup Needed (public or self-contained flow)"
|
|
115
|
+
- Otherwise (in CLI or text-only environments):
|
|
116
|
+
I recommend Option A: Build Testability (<brief seed proposal>).
|
|
117
|
+
Proceeding with testability setup — say "squint" for Option B, or "zero setup" for Option C to change course.
|
|
118
|
+
|
|
108
119
|
### 4. Apply & Persist Staging
|
|
109
120
|
|
|
110
121
|
Once the user chooses (or confirms):
|
|
@@ -57,7 +57,7 @@ The directory `iamu/.prompts/` contains internal prompt templates (`persona.md`,
|
|
|
57
57
|
|
|
58
58
|
For a project-status question, add one line on the cloud from `iamu status --json` (`mode`, `sync`, `requests`) and `iamu auth status --json` (`authenticated`):
|
|
59
59
|
|
|
60
|
-
- **Linked** → `Cloud: linked — <url from iamu open --print
|
|
60
|
+
- **Linked** → `Cloud: linked — [Open Project in Iamu Cloud](<url from iamu open --print>)`, then only what needs action: unpushed changes (`sync.pending_new` + `sync.pending_updates` + `walkthroughs.pending`, and `sync.local_deletions.count`) → `iamu sync`; `requests.open` above zero → `<N> team requests — iamu-findings`.
|
|
61
61
|
- **Linked, no credentials** → `Cloud: linked, but this machine has no credentials — iamu auth login.`
|
|
62
62
|
- **Local-only** → `Cloud: local-only.` Nothing more; no upgrade pitch.
|
|
63
63
|
|
package/dist/ui/symbols.d.ts
CHANGED