@aperant/framework 0.11.0 → 0.12.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (147) hide show
  1. package/CHANGELOG.md +213 -30
  2. package/agents/apt-planner.md +15 -0
  3. package/agents/apt-verifier.md +15 -10
  4. package/bin/apt-proof-video.mjs +256 -76
  5. package/dist/cli/commands/apply-recipe.d.mts +6 -0
  6. package/dist/cli/commands/apply-recipe.d.mts.map +1 -0
  7. package/dist/cli/commands/apply-recipe.mjs +98 -0
  8. package/dist/cli/commands/apply-recipe.mjs.map +1 -0
  9. package/dist/cli/commands/mobile-prepare.d.mts +53 -0
  10. package/dist/cli/commands/mobile-prepare.d.mts.map +1 -0
  11. package/dist/cli/commands/mobile-prepare.mjs +139 -0
  12. package/dist/cli/commands/mobile-prepare.mjs.map +1 -0
  13. package/dist/cli/commands/recipe-diff.d.mts +6 -0
  14. package/dist/cli/commands/recipe-diff.d.mts.map +1 -0
  15. package/dist/cli/commands/recipe-diff.mjs +75 -0
  16. package/dist/cli/commands/recipe-diff.mjs.map +1 -0
  17. package/dist/cli/commands/roadmap.d.mts.map +1 -1
  18. package/dist/cli/commands/roadmap.mjs +53 -0
  19. package/dist/cli/commands/roadmap.mjs.map +1 -1
  20. package/dist/cli/commands/validate-evidence.d.mts +1 -1
  21. package/dist/cli/commands/verify-sandbox.d.mts +6 -0
  22. package/dist/cli/commands/verify-sandbox.d.mts.map +1 -0
  23. package/dist/cli/commands/verify-sandbox.mjs +200 -0
  24. package/dist/cli/commands/verify-sandbox.mjs.map +1 -0
  25. package/dist/cli/consistency/parse-qa.d.mts.map +1 -1
  26. package/dist/cli/consistency/parse-qa.mjs +18 -4
  27. package/dist/cli/consistency/parse-qa.mjs.map +1 -1
  28. package/dist/cli/consistency/rules/r5-verdict-consistency.d.mts.map +1 -1
  29. package/dist/cli/consistency/rules/r5-verdict-consistency.mjs +11 -10
  30. package/dist/cli/consistency/rules/r5-verdict-consistency.mjs.map +1 -1
  31. package/dist/cli/coverage-check/user-outcomes.d.mts +7 -2
  32. package/dist/cli/coverage-check/user-outcomes.d.mts.map +1 -1
  33. package/dist/cli/coverage-check/user-outcomes.mjs +50 -17
  34. package/dist/cli/coverage-check/user-outcomes.mjs.map +1 -1
  35. package/dist/cli/design/frontmatter-schema.d.mts +8 -8
  36. package/dist/cli/dispatch.d.mts.map +1 -1
  37. package/dist/cli/dispatch.mjs +28 -0
  38. package/dist/cli/dispatch.mjs.map +1 -1
  39. package/dist/cli/gate/gates/verify-approved.d.mts +0 -48
  40. package/dist/cli/gate/gates/verify-approved.d.mts.map +1 -1
  41. package/dist/cli/gate/gates/verify-approved.mjs +23 -80
  42. package/dist/cli/gate/gates/verify-approved.mjs.map +1 -1
  43. package/dist/cli/install/mcp-server-specs.d.mts +6 -5
  44. package/dist/cli/install/mcp-server-specs.d.mts.map +1 -1
  45. package/dist/cli/install/mcp-server-specs.mjs +22 -4
  46. package/dist/cli/install/mcp-server-specs.mjs.map +1 -1
  47. package/dist/cli/personas/sidecar.d.mts +1 -1
  48. package/dist/cli/roadmap/backend-adapter.d.mts +43 -0
  49. package/dist/cli/roadmap/backend-adapter.d.mts.map +1 -0
  50. package/dist/cli/roadmap/backend-adapter.mjs +222 -0
  51. package/dist/cli/roadmap/backend-adapter.mjs.map +1 -0
  52. package/dist/cli/roadmap/lifecycle.d.mts +1 -1
  53. package/dist/cli/roadmap/rollup.d.mts +2 -2
  54. package/dist/cli/util/runtime-capabilities.d.mts +7 -0
  55. package/dist/cli/util/runtime-capabilities.d.mts.map +1 -1
  56. package/dist/cli/util/runtime-capabilities.mjs +65 -0
  57. package/dist/cli/util/runtime-capabilities.mjs.map +1 -1
  58. package/dist/cli/verify-proof/manifest-validator.mjs +13 -0
  59. package/dist/cli/verify-proof/manifest-validator.mjs.map +1 -1
  60. package/dist/cli/verify-proof/resolver.d.mts +10 -7
  61. package/dist/cli/verify-proof/resolver.d.mts.map +1 -1
  62. package/dist/cli/verify-proof/resolver.mjs +28 -7
  63. package/dist/cli/verify-proof/resolver.mjs.map +1 -1
  64. package/dist/cli/verify-proof/sandbox/apply.d.mts +64 -0
  65. package/dist/cli/verify-proof/sandbox/apply.d.mts.map +1 -0
  66. package/dist/cli/verify-proof/sandbox/apply.mjs +379 -0
  67. package/dist/cli/verify-proof/sandbox/apply.mjs.map +1 -0
  68. package/dist/cli/verify-proof/sandbox/gate-predicate.d.mts +63 -0
  69. package/dist/cli/verify-proof/sandbox/gate-predicate.d.mts.map +1 -0
  70. package/dist/cli/verify-proof/sandbox/gate-predicate.mjs +115 -0
  71. package/dist/cli/verify-proof/sandbox/gate-predicate.mjs.map +1 -0
  72. package/dist/cli/verify-proof/sandbox/pattern-matcher.d.mts +57 -0
  73. package/dist/cli/verify-proof/sandbox/pattern-matcher.d.mts.map +1 -0
  74. package/dist/cli/verify-proof/sandbox/pattern-matcher.mjs +124 -0
  75. package/dist/cli/verify-proof/sandbox/pattern-matcher.mjs.map +1 -0
  76. package/dist/cli/verify-proof/sandbox/recipe-diff.d.mts +28 -0
  77. package/dist/cli/verify-proof/sandbox/recipe-diff.d.mts.map +1 -0
  78. package/dist/cli/verify-proof/sandbox/recipe-diff.mjs +190 -0
  79. package/dist/cli/verify-proof/sandbox/recipe-diff.mjs.map +1 -0
  80. package/dist/cli/verify-proof/sandbox/sandbox-config.d.mts +25 -0
  81. package/dist/cli/verify-proof/sandbox/sandbox-config.d.mts.map +1 -0
  82. package/dist/cli/verify-proof/sandbox/sandbox-config.mjs +85 -0
  83. package/dist/cli/verify-proof/sandbox/sandbox-config.mjs.map +1 -0
  84. package/dist/cli/verify-proof/sandbox/self-test.d.mts +39 -0
  85. package/dist/cli/verify-proof/sandbox/self-test.d.mts.map +1 -0
  86. package/dist/cli/verify-proof/sandbox/self-test.mjs +248 -0
  87. package/dist/cli/verify-proof/sandbox/self-test.mjs.map +1 -0
  88. package/dist/plugin/.claude-plugin/plugin.json +1 -1
  89. package/dist/plugin/agents/apt-planner.md +15 -0
  90. package/dist/plugin/agents/apt-verifier.md +15 -10
  91. package/dist/plugin/skills/apt-plan/SKILL.md +23 -0
  92. package/dist/plugin/skills/apt-run/SKILL.md +1 -1
  93. package/dist/plugin/skills/apt-setup/SKILL.md +56 -0
  94. package/dist/plugin/skills/apt-verify/SKILL.md +20 -15
  95. package/dist/plugin/skills/apt-verify-proof/SKILL.md +146 -11
  96. package/dist/proof-report.d.ts.map +1 -1
  97. package/dist/proof-report.js +4 -1
  98. package/dist/proof-report.js.map +1 -1
  99. package/dist/types/config.d.ts +42 -4
  100. package/dist/types/config.d.ts.map +1 -1
  101. package/dist/types/qa-scoring.d.ts +45 -9
  102. package/dist/types/qa-scoring.d.ts.map +1 -1
  103. package/dist/types/qa-scoring.js +34 -13
  104. package/dist/types/qa-scoring.js.map +1 -1
  105. package/dist/types/state.d.ts +7 -2
  106. package/dist/types/state.d.ts.map +1 -1
  107. package/dist/types/task-record.d.ts +10 -2
  108. package/dist/types/task-record.d.ts.map +1 -1
  109. package/drivers/mobile/README.md +40 -0
  110. package/drivers/mobile/driver.mjs +106 -0
  111. package/drivers/mobile/manifest.json +49 -0
  112. package/package.json +138 -138
  113. package/prompts/inbox-clarification.md +11 -0
  114. package/prompts/inbox-triage.md +20 -0
  115. package/prompts/qa_orchestrator_agentic.md +18 -17
  116. package/prompts/qa_reviewer.md +17 -15
  117. package/skills/apt-plan/SKILL.md +23 -0
  118. package/skills/apt-run/SKILL.md +1 -1
  119. package/skills/apt-setup/SKILL.md +56 -0
  120. package/skills/apt-verifier.md +7 -4
  121. package/skills/apt-verify/SKILL.md +20 -15
  122. package/skills/apt-verify-proof/SKILL.md +146 -11
  123. package/src/cli/commands/apply-recipe.mjs +105 -0
  124. package/src/cli/commands/mobile-prepare.mjs +151 -0
  125. package/src/cli/commands/recipe-diff.mjs +81 -0
  126. package/src/cli/commands/roadmap.mjs +54 -0
  127. package/src/cli/commands/verify-sandbox.mjs +231 -0
  128. package/src/cli/consistency/parse-qa.mjs +20 -4
  129. package/src/cli/consistency/rules/r5-verdict-consistency.mjs +11 -13
  130. package/src/cli/coverage-check/user-outcomes.mjs +52 -17
  131. package/src/cli/dispatch.mjs +27 -0
  132. package/src/cli/gate/gates/verify-approved.mjs +22 -81
  133. package/src/cli/install/mcp-server-specs.mjs +24 -4
  134. package/src/cli/roadmap/backend-adapter.mjs +231 -0
  135. package/src/cli/util/runtime-capabilities.mjs +67 -0
  136. package/src/cli/verify-proof/manifest-validator.mjs +15 -0
  137. package/src/cli/verify-proof/resolver.mjs +27 -7
  138. package/src/cli/verify-proof/sandbox/apply.mjs +401 -0
  139. package/src/cli/verify-proof/sandbox/gate-predicate.mjs +126 -0
  140. package/src/cli/verify-proof/sandbox/pattern-matcher.mjs +127 -0
  141. package/src/cli/verify-proof/sandbox/recipe-diff.mjs +208 -0
  142. package/src/cli/verify-proof/sandbox/sandbox-config.mjs +82 -0
  143. package/src/cli/verify-proof/sandbox/sandbox-schema.json +33 -0
  144. package/src/cli/verify-proof/sandbox/self-test.mjs +265 -0
  145. package/templates/config.json +10 -1
  146. package/templates/proof-verification.md +27 -8
  147. package/workflows/verify-proof.md +376 -302
@@ -0,0 +1,200 @@
1
+ /**
2
+ * commands/verify-sandbox.mjs — `apt-tools verify-sandbox <projectDir>`.
3
+ *
4
+ * Drives runSelfTest() then atomically writes
5
+ * .aperant/state/verify-proof-sandbox-verified.json with the v2-shaped
6
+ * verdict envelope. On win32, short-circuits to a platform_unsupported
7
+ * verdict WITHOUT spawning child processes (ID-06 v1 supported floor =
8
+ * darwin + linux).
9
+ *
10
+ * The state file is written for BOTH verified-true and verified-false
11
+ * outcomes (ID-02 — no silent state mutation). The sandbox gate at
12
+ * apt-verify-proof/SKILL.md Step 2c (subtask 5.1) reads this file.
13
+ */
14
+ import { join, resolve } from 'node:path';
15
+ import { atomicWriteJson } from '../util/atomic-write.mjs';
16
+ import { withFileLock } from '../util/fs-lock.mjs';
17
+ import { err, exitWith, ok } from '../util/result.mjs';
18
+ import { loadRuntimeCapabilities } from '../util/runtime-capabilities.mjs';
19
+ import { matchPatternForProject } from '../verify-proof/sandbox/pattern-matcher.mjs';
20
+ import { discoverBundledRecipes, readSandboxConfig, } from '../verify-proof/sandbox/sandbox-config.mjs';
21
+ import { runSelfTest } from '../verify-proof/sandbox/self-test.mjs';
22
+ /**
23
+ * @param {string} projectDir
24
+ * @param {string[]} [extra]
25
+ */
26
+ export async function cmdVerifySandbox(projectDir, _extra = []) {
27
+ if (!projectDir)
28
+ return err('Usage: apt-tools verify-sandbox <project-dir>');
29
+ const target = resolve(projectDir);
30
+ const platform = process.platform;
31
+ const statePath = join(target, '.aperant', 'state', 'verify-proof-sandbox-verified.json');
32
+ const at = new Date().toISOString();
33
+ const host = {
34
+ platform,
35
+ arch: process.arch,
36
+ nodeVersion: process.version,
37
+ };
38
+ // Resolve recipeId from config or runtime detection.
39
+ const sandboxCfg = readSandboxConfig(target);
40
+ const recipes = discoverBundledRecipes();
41
+ let recipeId = sandboxCfg?.recipeId ?? null;
42
+ let recipeVersion = sandboxCfg?.recipeVersion ?? null;
43
+ if (!recipeId) {
44
+ const runtime = loadRuntimeCapabilities(target);
45
+ const match = matchPatternForProject(target, runtime, recipes);
46
+ recipeId = match.recipeId;
47
+ }
48
+ // Always populate recipeVersion from bundled recipes when absent — covers
49
+ // the case where config pins recipeId but omits recipeVersion (LOG-003).
50
+ if (recipeId && !recipeVersion) {
51
+ recipeVersion = recipes.find((r) => r.recipeId === recipeId)?.recipeVersion ?? null;
52
+ }
53
+ // win32 short-circuit (AC12, ID-06 v1 floor).
54
+ if (platform === 'win32') {
55
+ const envelope = {
56
+ verified: false,
57
+ verdict: 'needs_human',
58
+ reason: 'platform_unsupported',
59
+ recipeId,
60
+ recipeVersion,
61
+ verifiedAt: at,
62
+ host,
63
+ };
64
+ const writeErr = writeStateFile(statePath, envelope);
65
+ if (writeErr) {
66
+ return exitWith({
67
+ status: 'error',
68
+ command: 'verify-sandbox',
69
+ code: 'E_STATE_WRITE_FAILED',
70
+ verdict: 'needs_human',
71
+ reason: 'state_write_failed',
72
+ cause: writeErr.message,
73
+ project_dir: target,
74
+ state_path: statePath,
75
+ }, 1);
76
+ }
77
+ return ok({
78
+ status: 'ok',
79
+ command: 'verify-sandbox',
80
+ project_dir: target,
81
+ state_path: statePath,
82
+ ...envelope,
83
+ });
84
+ }
85
+ if (!recipeId) {
86
+ const envelope = {
87
+ verified: false,
88
+ verdict: 'needs_human',
89
+ reason: 'no_recipe_available',
90
+ recipeId: null,
91
+ recipeVersion: null,
92
+ verifiedAt: at,
93
+ host,
94
+ };
95
+ const writeErr = writeStateFile(statePath, envelope);
96
+ if (writeErr) {
97
+ return exitWith({
98
+ status: 'error',
99
+ command: 'verify-sandbox',
100
+ code: 'E_STATE_WRITE_FAILED',
101
+ verdict: 'needs_human',
102
+ reason: 'state_write_failed',
103
+ cause: writeErr.message,
104
+ project_dir: target,
105
+ state_path: statePath,
106
+ }, 1);
107
+ }
108
+ return exitWith({
109
+ status: 'error',
110
+ command: 'verify-sandbox',
111
+ code: 'E_NO_RECIPE',
112
+ project_dir: target,
113
+ state_path: statePath,
114
+ ...envelope,
115
+ }, 1);
116
+ }
117
+ let result;
118
+ try {
119
+ result = await runSelfTest({ projectDir: target, recipeId, recipes });
120
+ }
121
+ catch (e) {
122
+ const envelope = {
123
+ verified: false,
124
+ verdict: 'needs_human',
125
+ reason: 'self_test_failed_app_init_timeout',
126
+ recipeId,
127
+ recipeVersion,
128
+ verifiedAt: at,
129
+ host,
130
+ error: e?.message ?? String(e),
131
+ };
132
+ const writeErr = writeStateFile(statePath, envelope);
133
+ if (writeErr) {
134
+ return exitWith({
135
+ status: 'error',
136
+ command: 'verify-sandbox',
137
+ code: 'E_STATE_WRITE_FAILED',
138
+ verdict: 'needs_human',
139
+ reason: 'state_write_failed',
140
+ cause: writeErr.message,
141
+ project_dir: target,
142
+ state_path: statePath,
143
+ }, 1);
144
+ }
145
+ return exitWith({
146
+ status: 'error',
147
+ command: 'verify-sandbox',
148
+ project_dir: target,
149
+ state_path: statePath,
150
+ ...envelope,
151
+ }, 1);
152
+ }
153
+ const envelope = {
154
+ verified: result.verified,
155
+ verdict: result.verdict,
156
+ reason: result.reason,
157
+ recipeId,
158
+ recipeVersion,
159
+ verifiedAt: at,
160
+ host,
161
+ durationMs: result.durationMs,
162
+ };
163
+ const writeErr = writeStateFile(statePath, envelope);
164
+ if (writeErr) {
165
+ return exitWith({
166
+ status: 'error',
167
+ command: 'verify-sandbox',
168
+ code: 'E_STATE_WRITE_FAILED',
169
+ verdict: 'needs_human',
170
+ reason: 'state_write_failed',
171
+ cause: writeErr.message,
172
+ project_dir: target,
173
+ state_path: statePath,
174
+ }, 1);
175
+ }
176
+ const exitCode = result.verified ? 0 : 1;
177
+ return exitWith({
178
+ status: result.verified ? 'ok' : 'error',
179
+ command: 'verify-sandbox',
180
+ project_dir: target,
181
+ state_path: statePath,
182
+ ...envelope,
183
+ }, exitCode);
184
+ }
185
+ /**
186
+ * Write the verdict envelope to the state file under a file lock.
187
+ * Returns null on success, or an Error if the lock or write fails.
188
+ */
189
+ function writeStateFile(statePath, envelope) {
190
+ try {
191
+ withFileLock(statePath, () => {
192
+ atomicWriteJson(statePath, envelope);
193
+ });
194
+ return null;
195
+ }
196
+ catch (e) {
197
+ return e instanceof Error ? e : new Error(String(e));
198
+ }
199
+ }
200
+ //# sourceMappingURL=verify-sandbox.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"verify-sandbox.mjs","sourceRoot":"","sources":["../../../src/cli/commands/verify-sandbox.mjs"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"parse-qa.d.mts","sourceRoot":"","sources":["../../../src/cli/consistency/parse-qa.mjs"],"names":[],"mappings":"AA4BA;;GAEG;AACH,mCAFW,MAAM,GAAG,IAAI,GAAG,SAAS;;;;;;;;EAsBnC"}
1
+ {"version":3,"file":"parse-qa.d.mts","sourceRoot":"","sources":["../../../src/cli/consistency/parse-qa.mjs"],"names":[],"mappings":"AAgCA;;GAEG;AACH,mCAFW,MAAM,GAAG,IAAI,GAAG,SAAS;;;;;;;;EAsBnC"}
@@ -7,12 +7,16 @@
7
7
  * - flat findings: findings: [{severity}]
8
8
  * - legacy `issues: [{severity}]`
9
9
  *
10
- * Verdict closed set: {approved, approved-with-notes, rejected, needs-changes}.
11
- * Anything else -> 'unknown'. Accepts legacy `status` as a fallback field name.
10
+ * v0.9.0 (verify-proof-v2-outcome-walker_27-05-26) verdict closed set is
11
+ * `{approved, rejected, needs_human, needs-changes}`. `approved_with_notes`
12
+ * is DELETED (no shim) — reading a legacy `approved_with_notes` /
13
+ * `approved-with-notes` value throws a clear migration error pointing at
14
+ * the framework CHANGELOG entry. Anything else maps to `'unknown'`.
15
+ * Accepts legacy `status` as a fallback field name.
12
16
  *
13
17
  * Output: {verdict, findings: [{severity, title, status, file}]}
14
18
  */
15
- const KNOWN_VERDICTS = new Set(['approved', 'approved-with-notes', 'rejected', 'needs-changes']);
19
+ const KNOWN_VERDICTS = new Set(['approved', 'rejected', 'needs-human', 'needs-changes']);
16
20
  const SEVERITY_MAP = {
17
21
  critical: 'critical',
18
22
  blocker: 'critical',
@@ -55,7 +59,17 @@ function normalizeVerdict(v) {
55
59
  const k = v.toLowerCase().trim();
56
60
  // normalize common spellings
57
61
  const canonical = k.replace(/_/g, '-');
58
- return KNOWN_VERDICTS.has(canonical) ? canonical : 'unknown';
62
+ // v0.9.0 migration: approved_with_notes / approved-with-notes is
63
+ // DELETED with no shim. Crash loudly so the consumer task is
64
+ // re-run, not silently re-mapped to `approved`.
65
+ if (canonical === 'approved-with-notes') {
66
+ throw new Error("qa_signoff.json carries the legacy verdict 'approved_with_notes' (or 'approved-with-notes'). " +
67
+ "This verdict is removed in framework v0.9.0+ (see packages/framework/CHANGELOG.md :: 'verify-proof v2 — outcome walker + two-gate verdict'). " +
68
+ 'Re-run verify-proof on this task to mint a fresh qa_signoff.json with the new {approved, rejected, needs_human} enum.');
69
+ }
70
+ // Accept both snake_case and kebab-case for needs_human.
71
+ const needsHuman = canonical === 'needs-human' ? 'needs-human' : canonical;
72
+ return KNOWN_VERDICTS.has(needsHuman) ? needsHuman : 'unknown';
59
73
  }
60
74
  function collectRaw(qa) {
61
75
  const out = [];
@@ -1 +1 @@
1
- {"version":3,"file":"parse-qa.mjs","sourceRoot":"","sources":["../../../src/cli/consistency/parse-qa.mjs"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"parse-qa.mjs","sourceRoot":"","sources":["../../../src/cli/consistency/parse-qa.mjs"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"r5-verdict-consistency.d.mts","sourceRoot":"","sources":["../../../../src/cli/consistency/rules/r5-verdict-consistency.mjs"],"names":[],"mappings":";;;;;;IAuBC;;;;;;;;;;OAmDC"}
1
+ {"version":3,"file":"r5-verdict-consistency.d.mts","sourceRoot":"","sources":["../../../../src/cli/consistency/rules/r5-verdict-consistency.mjs"],"names":[],"mappings":";;;;;;IAyBC;;;;;;;;;;OA+CC"}
@@ -3,13 +3,15 @@
3
3
  * consistency/rules/r5-verdict-consistency.mjs — R5 (C15).
4
4
  *
5
5
  * Fails when:
6
- * - qa.verdict === 'approved' or 'approved-with-notes' AND review has >=1
7
- * unresolved critical or major finding
8
- * - qa.verdict === 'rejected' AND qa has no findings at all AND review has
9
- * zero unresolved findings (rejected-without-evidence)
6
+ * - qa.verdict === 'approved' AND review has >=1 unresolved critical or
7
+ * major finding.
8
+ * - qa.verdict === 'rejected' AND qa has no findings at all AND review
9
+ * has zero unresolved findings (rejected-without-evidence).
10
10
  *
11
- * `approved-with-notes` no longer escapes unresolved critical or major
12
- * findings (G42 Phase 1). It still passes for lower-severity issues.
11
+ * v0.9.0 (verify-proof-v2-outcome-walker_27-05-26) the legacy
12
+ * `approved-with-notes` branch is REMOVED. The verdict enum is the closed
13
+ * set `{approved, rejected, needs_human}`. Reading a legacy verdict
14
+ * crashes in parseQaSignoff before this rule executes.
13
15
  *
14
16
  * Severity: error. Stages: verify, ship.
15
17
  */
@@ -26,8 +28,7 @@ const rule = {
26
28
  const verdict = parsed.qa.verdict ?? 'unknown';
27
29
  const reviewFindings = parsed?.review?.findings ?? [];
28
30
  const unresolvedBlocking = reviewFindings.filter((f) => (f.severity === 'critical' || f.severity === 'major') && f.status !== 'fixed');
29
- if ((verdict === 'approved' || verdict === 'approved-with-notes') &&
30
- unresolvedBlocking.length > 0) {
31
+ if (verdict === 'approved' && unresolvedBlocking.length > 0) {
31
32
  return {
32
33
  status: 'fail',
33
34
  drift: [
@@ -37,10 +38,10 @@ const rule = {
37
38
  id: f.id,
38
39
  title: f.title,
39
40
  })),
40
- reason: 'approved/approved-with-notes verdict with unresolved critical or major finding(s) (G42 Phase 1)',
41
+ reason: 'approved verdict with unresolved critical or major finding(s) (G42 Phase 1)',
41
42
  },
42
43
  ],
43
- reason: `approved/approved-with-notes verdict contradicts ${unresolvedBlocking.length} unresolved critical/major finding(s)`,
44
+ reason: `approved verdict contradicts ${unresolvedBlocking.length} unresolved critical/major finding(s)`,
44
45
  };
45
46
  }
46
47
  if (verdict === 'rejected') {
@@ -1 +1 @@
1
- {"version":3,"file":"r5-verdict-consistency.mjs","sourceRoot":"","sources":["../../../../src/cli/consistency/rules/r5-verdict-consistency.mjs"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAEH,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAA;AAE9C,MAAM,IAAI,GAAG;IACZ,EAAE,EAAE,wBAAwB;IAC5B,QAAQ,EAAE,OAAO;IACjB,MAAM,EAAE,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,WAAW,EAAE,wDAAwD;IACrE,KAAK,CAAC,KAAK,CAAC,EAAE,MAAM,EAAE;QACrB,IAAI,CAAC,MAAM,EAAE,EAAE,EAAE,OAAO,EAAE,CAAC;YAC1B,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,EAAE,EAAE,MAAM,EAAE,6BAA6B,EAAE,CAAA;QAC5E,CAAC;QACD,MAAM,OAAO,GAAG,MAAM,CAAC,EAAE,CAAC,OAAO,IAAI,SAAS,CAAA;QAC9C,MAAM,cAAc,GAAG,MAAM,EAAE,MAAM,EAAE,QAAQ,IAAI,EAAE,CAAA;QACrD,MAAM,kBAAkB,GAAG,cAAc,CAAC,MAAM,CAC/C,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,QAAQ,KAAK,UAAU,IAAI,CAAC,CAAC,QAAQ,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC,MAAM,KAAK,OAAO,CACpF,CAAA;QACD,IACC,CAAC,OAAO,KAAK,UAAU,IAAI,OAAO,KAAK,qBAAqB,CAAC;YAC7D,kBAAkB,CAAC,MAAM,GAAG,CAAC,EAC5B,CAAC;YACF,OAAO;gBACN,MAAM,EAAE,MAAM;gBACd,KAAK,EAAE;oBACN;wBACC,OAAO;wBACP,QAAQ,EAAE,kBAAkB,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;4BACxC,EAAE,EAAE,CAAC,CAAC,EAAE;4BACR,KAAK,EAAE,CAAC,CAAC,KAAK;yBACd,CAAC,CAAC;wBACH,MAAM,EACL,iGAAiG;qBAClG;iBACD;gBACD,MAAM,EAAE,oDAAoD,kBAAkB,CAAC,MAAM,uCAAuC;aAC5H,CAAA;QACF,CAAC;QACD,IAAI,OAAO,KAAK,UAAU,EAAE,CAAC;YAC5B,MAAM,UAAU,GAAG,MAAM,CAAC,EAAE,CAAC,QAAQ,IAAI,EAAE,CAAA;YAC3C,MAAM,mBAAmB,GAAG,cAAc,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,KAAK,OAAO,CAAC,CAAA;YAC5E,IAAI,UAAU,CAAC,MAAM,KAAK,CAAC,IAAI,CAAC,mBAAmB,EAAE,CAAC;gBACrD,OAAO;oBACN,MAAM,EAAE,MAAM;oBACd,KAAK,EAAE;wBACN;4BACC,OAAO;4BACP,QAAQ,EAAE,EAAE;4BACZ,MAAM,EAAE,6CAA6C;yBACrD;qBACD;oBACD,MAAM,EAAE,6CAA6C;iBACrD,CAAA;YACF,CAAC;QACF,CAAC;QACD,OAAO;YACN,MAAM,EAAE,MAAM;YACd,KAAK,EAAE,EAAE;YACT,MAAM,EAAE,WAAW,OAAO,qCAAqC;SAC/D,CAAA;IACF,CAAC;CACD,CAAA;AAED,YAAY,CAAC,IAAI,CAAC,CAAA;AAClB,eAAe,IAAI,CAAA"}
1
+ {"version":3,"file":"r5-verdict-consistency.mjs","sourceRoot":"","sources":["../../../../src/cli/consistency/rules/r5-verdict-consistency.mjs"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAEH,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAA;AAE9C,MAAM,IAAI,GAAG;IACZ,EAAE,EAAE,wBAAwB;IAC5B,QAAQ,EAAE,OAAO;IACjB,MAAM,EAAE,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,WAAW,EAAE,wDAAwD;IACrE,KAAK,CAAC,KAAK,CAAC,EAAE,MAAM,EAAE;QACrB,IAAI,CAAC,MAAM,EAAE,EAAE,EAAE,OAAO,EAAE,CAAC;YAC1B,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,EAAE,EAAE,MAAM,EAAE,6BAA6B,EAAE,CAAA;QAC5E,CAAC;QACD,MAAM,OAAO,GAAG,MAAM,CAAC,EAAE,CAAC,OAAO,IAAI,SAAS,CAAA;QAC9C,MAAM,cAAc,GAAG,MAAM,EAAE,MAAM,EAAE,QAAQ,IAAI,EAAE,CAAA;QACrD,MAAM,kBAAkB,GAAG,cAAc,CAAC,MAAM,CAC/C,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,QAAQ,KAAK,UAAU,IAAI,CAAC,CAAC,QAAQ,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC,MAAM,KAAK,OAAO,CACpF,CAAA;QACD,IAAI,OAAO,KAAK,UAAU,IAAI,kBAAkB,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC7D,OAAO;gBACN,MAAM,EAAE,MAAM;gBACd,KAAK,EAAE;oBACN;wBACC,OAAO;wBACP,QAAQ,EAAE,kBAAkB,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;4BACxC,EAAE,EAAE,CAAC,CAAC,EAAE;4BACR,KAAK,EAAE,CAAC,CAAC,KAAK;yBACd,CAAC,CAAC;wBACH,MAAM,EAAE,6EAA6E;qBACrF;iBACD;gBACD,MAAM,EAAE,gCAAgC,kBAAkB,CAAC,MAAM,uCAAuC;aACxG,CAAA;QACF,CAAC;QACD,IAAI,OAAO,KAAK,UAAU,EAAE,CAAC;YAC5B,MAAM,UAAU,GAAG,MAAM,CAAC,EAAE,CAAC,QAAQ,IAAI,EAAE,CAAA;YAC3C,MAAM,mBAAmB,GAAG,cAAc,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,KAAK,OAAO,CAAC,CAAA;YAC5E,IAAI,UAAU,CAAC,MAAM,KAAK,CAAC,IAAI,CAAC,mBAAmB,EAAE,CAAC;gBACrD,OAAO;oBACN,MAAM,EAAE,MAAM;oBACd,KAAK,EAAE;wBACN;4BACC,OAAO;4BACP,QAAQ,EAAE,EAAE;4BACZ,MAAM,EAAE,6CAA6C;yBACrD;qBACD;oBACD,MAAM,EAAE,6CAA6C;iBACrD,CAAA;YACF,CAAC;QACF,CAAC;QACD,OAAO;YACN,MAAM,EAAE,MAAM;YACd,KAAK,EAAE,EAAE;YACT,MAAM,EAAE,WAAW,OAAO,qCAAqC;SAC/D,CAAA;IACF,CAAC;CACD,CAAA;AAED,YAAY,CAAC,IAAI,CAAC,CAAA;AAClB,eAAe,IAAI,CAAA"}
@@ -1,8 +1,9 @@
1
1
  /**
2
2
  * @typedef {Object} UserOutcome
3
3
  * @property {string} id — synthesized positional ID (O1, O2, ...)
4
- * @property {('electron'|'web'|'cli'|'api'|'electron+web')} surface
4
+ * @property {('electron'|'web'|'cli'|'api'|'mobile'|'electron+web')} surface
5
5
  * @property {string} text — outcome prose (sans the surface tag and requires suffix)
6
+ * @property {string[]} inferred — v0.9.0 — indented child bullets under the parent outcome (raw prose, no further parsing). Defaults to [] when no children are present.
6
7
  * @property {number} [requires] — the digit captured from `*(requires ON N)*`, when present and valid
7
8
  */
8
9
  /**
@@ -49,11 +50,15 @@ export type UserOutcome = {
49
50
  * — synthesized positional ID (O1, O2, ...)
50
51
  */
51
52
  id: string;
52
- surface: ("electron" | "web" | "cli" | "api" | "electron+web");
53
+ surface: ("electron" | "web" | "cli" | "api" | "mobile" | "electron+web");
53
54
  /**
54
55
  * — outcome prose (sans the surface tag and requires suffix)
55
56
  */
56
57
  text: string;
58
+ /**
59
+ * — v0.9.0 — indented child bullets under the parent outcome (raw prose, no further parsing). Defaults to [] when no children are present.
60
+ */
61
+ inferred: string[];
57
62
  /**
58
63
  * — the digit captured from `*(requires ON N)*`, when present and valid
59
64
  */
@@ -1 +1 @@
1
- {"version":3,"file":"user-outcomes.d.mts","sourceRoot":"","sources":["../../../src/cli/coverage-check/user-outcomes.mjs"],"names":[],"mappings":"AA4CA;;;;;;GAMG;AAEH;;;;;;GAMG;AAEH;;;;;;;GAOG;AAEH;;;;;GAKG;AACH,+CAHW,MAAM,GACJ,uBAAuB,CAwJnC;AAED;;;;;;;;;;;;;;;GAeG;AACH,+CAJW,uBAAuB,oBACvB,MAAM,GACJ,CAAC,MAAM,GAAC,MAAM,GAAC,OAAO,CAAC,CAiBnC;;;;;QApNa,MAAM;aACN,CAAC,UAAU,GAAC,KAAK,GAAC,KAAK,GAAC,KAAK,GAAC,cAAc,CAAC;;;;UAC7C,MAAM;;;;;;;UAMN,yBAAyB;;;;gBACzB,MAAM;;;;cACN,MAAM;;;;YACN,MAAM;;;oBAKN,OAAO;eACP,CAAC,QAAQ,GAAC,OAAO,GAAC,iBAAiB,GAAC,UAAU,CAAC;;cAE/C,WAAW,EAAE"}
1
+ {"version":3,"file":"user-outcomes.d.mts","sourceRoot":"","sources":["../../../src/cli/coverage-check/user-outcomes.mjs"],"names":[],"mappings":"AA4CA;;;;;;;GAOG;AAEH;;;;;;GAMG;AAEH;;;;;;;GAOG;AAEH;;;;;GAKG;AACH,+CAHW,MAAM,GACJ,uBAAuB,CA0LnC;AAED;;;;;;;;;;;;;;;GAeG;AACH,+CAJW,uBAAuB,oBACvB,MAAM,GACJ,CAAC,MAAM,GAAC,MAAM,GAAC,OAAO,CAAC,CAiBnC;;;;;QAvPa,MAAM;aACN,CAAC,UAAU,GAAC,KAAK,GAAC,KAAK,GAAC,KAAK,GAAC,QAAQ,GAAC,cAAc,CAAC;;;;UACtD,MAAM;;;;cACN,MAAM,EAAE;;;;;;;UAMR,yBAAyB;;;;gBACzB,MAAM;;;;cACN,MAAM;;;;YACN,MAAM;;;oBAKN,OAAO;eACP,CAAC,QAAQ,GAAC,OAAO,GAAC,iBAAiB,GAAC,UAAU,CAAC;;cAE/C,WAAW,EAAE"}
@@ -32,17 +32,18 @@
32
32
  * See packages/framework/skills/apt-plan/SKILL.md Section 5.B for the
33
33
  * authoring contract.
34
34
  */
35
- const VALID_SURFACES = new Set(['electron', 'web', 'cli', 'api', 'electron+web']);
35
+ const VALID_SURFACES = new Set(['electron', 'web', 'cli', 'api', 'mobile', 'electron+web']);
36
36
  const HEADING_RE = /^(#{1,6})\s+(.*)$/;
37
37
  const USER_OUTCOMES_HEADING_RE = /^user\s+outcomes\s*$/i;
38
38
  const EPIC_RE = /^\*\*Epic:\*\*\s+(.+)$/;
39
39
  const EMPTY_WITH_NOTE_RE = /^_No user-observable changes — pure refactor\._\s*$/;
40
- const OUTCOME_RE = /^-\s+\*\*ON\*\*\s+\[(electron|web|cli|api|electron\+web)\]:\s+(.+?)(\s+\*\(requires\s+ON\s+(\d+)\)\*)?\s*$/;
40
+ const OUTCOME_RE = /^-\s+\*\*ON\*\*\s+\[(electron|web|cli|api|mobile|electron\+web)\]:\s+(.+?)(\s+\*\(requires\s+ON\s+(\d+)\)\*)?\s*$/;
41
41
  /**
42
42
  * @typedef {Object} UserOutcome
43
43
  * @property {string} id — synthesized positional ID (O1, O2, ...)
44
- * @property {('electron'|'web'|'cli'|'api'|'electron+web')} surface
44
+ * @property {('electron'|'web'|'cli'|'api'|'mobile'|'electron+web')} surface
45
45
  * @property {string} text — outcome prose (sans the surface tag and requires suffix)
46
+ * @property {string[]} inferred — v0.9.0 — indented child bullets under the parent outcome (raw prose, no further parsing). Defaults to [] when no children are present.
46
47
  * @property {number} [requires] — the digit captured from `*(requires ON N)*`, when present and valid
47
48
  */
48
49
  /**
@@ -151,26 +152,58 @@ export function parseUserOutcomes(specContent) {
151
152
  result.epic = epic;
152
153
  return result;
153
154
  }
154
- // Parse outcome rows in document order. Skip non-matching lines (e.g.
155
- // stray prose between outcomes) they don't count as outcomes.
155
+ // Parse outcome rows in document order. v0.9.0 walk the raw body lines
156
+ // (not the trimmed `outcomeLines`) so we preserve indentation of child
157
+ // bullets. A `**ON**` parent row is followed by zero or more indented
158
+ // child bullets (lines starting with at least 2 spaces + `- `); those
159
+ // children attach to the parent as `inferred: string[]` (raw prose, no
160
+ // further parsing). The children block ends at the next `**ON**` row,
161
+ // a non-indented line, or a section terminator (blank line followed by
162
+ // another non-bullet non-blank line is fine; the next `**ON**` always
163
+ // resets ownership).
156
164
  /** @type {UserOutcome[]} */
157
165
  const outcomes = [];
158
166
  const rawRequires = [];
159
- for (const line of outcomeLines) {
160
- const m = line.match(OUTCOME_RE);
161
- if (!m)
167
+ const CHILD_RE = /^(?: {2}|\t)+- (.+)$/;
168
+ let currentOutcomeIndex = -1;
169
+ for (let i = 0; i < bodyLines.length; i++) {
170
+ const rawLine = bodyLines[i];
171
+ const trimmed = rawLine.trim();
172
+ if (trimmed.length === 0) {
173
+ // Blank lines don't close the parent — children may resume after
174
+ // a blank line (loose-list markdown). The next non-blank line
175
+ // decides ownership.
162
176
  continue;
163
- const surface = /** @type {UserOutcome['surface']} */ (m[1]);
164
- if (!VALID_SURFACES.has(surface))
177
+ }
178
+ const onMatch = trimmed.match(OUTCOME_RE);
179
+ if (onMatch) {
180
+ const surface = /** @type {UserOutcome['surface']} */ (onMatch[1]);
181
+ if (!VALID_SURFACES.has(surface)) {
182
+ currentOutcomeIndex = -1;
183
+ continue;
184
+ }
185
+ const text = onMatch[2].trim();
186
+ const id = 'O' + (outcomes.length + 1);
187
+ const outcome = /** @type {UserOutcome} */ ({ id, surface, text, inferred: [] });
188
+ if (onMatch[4]) {
189
+ const n = Number.parseInt(onMatch[4], 10);
190
+ rawRequires.push({ outcomeIndex: outcomes.length, requires: n });
191
+ }
192
+ outcomes.push(outcome);
193
+ currentOutcomeIndex = outcomes.length - 1;
194
+ continue;
195
+ }
196
+ // Non-`**ON**` non-blank line. If it's an indented child bullet AND
197
+ // we have a current outcome, attach it. Otherwise (e.g. Epic line,
198
+ // sentinel, stray prose), drop ownership.
199
+ const childMatch = rawLine.match(CHILD_RE);
200
+ if (childMatch && currentOutcomeIndex >= 0) {
201
+ outcomes[currentOutcomeIndex].inferred.push(childMatch[1].trim());
165
202
  continue;
166
- const text = m[2].trim();
167
- const id = 'O' + (outcomes.length + 1);
168
- const outcome = /** @type {UserOutcome} */ ({ id, surface, text });
169
- if (m[4]) {
170
- const n = Number.parseInt(m[4], 10);
171
- rawRequires.push({ outcomeIndex: outcomes.length, requires: n });
172
203
  }
173
- outcomes.push(outcome);
204
+ // Non-indented, non-`**ON**` line — closes the current outcome's
205
+ // child block. (The next `**ON**` will start a new block.)
206
+ currentOutcomeIndex = -1;
174
207
  }
175
208
  if (outcomes.length === 0) {
176
209
  // Header present, prose present, but no parseable `**ON**` rows —
@@ -1 +1 @@
1
- {"version":3,"file":"user-outcomes.mjs","sourceRoot":"","sources":["../../../src/cli/coverage-check/user-outcomes.mjs"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"user-outcomes.mjs","sourceRoot":"","sources":["../../../src/cli/coverage-check/user-outcomes.mjs"],"names":[],"mappings":"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"}
@@ -82,21 +82,21 @@ export const TokensSchema: z.ZodObject<{
82
82
  }, z.core.$loose>;
83
83
  export const ComponentsSchema: z.ZodRecord<z.ZodString, z.ZodRecord<z.ZodString, z.ZodUnknown>>;
84
84
  export const AntiPatternCategorySchema: z.ZodEnum<{
85
+ content: "content";
85
86
  color: "color";
86
87
  typography: "typography";
87
- motion: "motion";
88
88
  layout: "layout";
89
- content: "content";
89
+ motion: "motion";
90
90
  interaction: "interaction";
91
91
  }>;
92
92
  export const AntiPatternSchema: z.ZodObject<{
93
93
  id: z.ZodString;
94
94
  category: z.ZodEnum<{
95
+ content: "content";
95
96
  color: "color";
96
97
  typography: "typography";
97
- motion: "motion";
98
98
  layout: "layout";
99
- content: "content";
99
+ motion: "motion";
100
100
  interaction: "interaction";
101
101
  }>;
102
102
  pattern: z.ZodString;
@@ -106,11 +106,11 @@ export const AntiPatternSchema: z.ZodObject<{
106
106
  export const AntiPatternsSchema: z.ZodArray<z.ZodObject<{
107
107
  id: z.ZodString;
108
108
  category: z.ZodEnum<{
109
+ content: "content";
109
110
  color: "color";
110
111
  typography: "typography";
111
- motion: "motion";
112
112
  layout: "layout";
113
- content: "content";
113
+ motion: "motion";
114
114
  interaction: "interaction";
115
115
  }>;
116
116
  pattern: z.ZodString;
@@ -162,11 +162,11 @@ export const DesignFrontmatterSchema: z.ZodObject<{
162
162
  antiPatterns: z.ZodOptional<z.ZodArray<z.ZodObject<{
163
163
  id: z.ZodString;
164
164
  category: z.ZodEnum<{
165
+ content: "content";
165
166
  color: "color";
166
167
  typography: "typography";
167
- motion: "motion";
168
168
  layout: "layout";
169
- content: "content";
169
+ motion: "motion";
170
170
  interaction: "interaction";
171
171
  }>;
172
172
  pattern: z.ZodString;
@@ -1 +1 @@
1
- {"version":3,"file":"dispatch.d.mts","sourceRoot":"","sources":["../../src/cli/dispatch.mjs"],"names":[],"mappings":"AAgHA;;;;;;GAMG;AACH,uCAFa,CAAC,GAAG,IAAI,EAAE,OAAO,EAAE,KAAK,OAAO,CAAC,IAAI,CAAC,CA+DjD;AAMD,gEAAgE;AAChE,uBADW,MAAM,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC,CAmJ3D"}
1
+ {"version":3,"file":"dispatch.d.mts","sourceRoot":"","sources":["../../src/cli/dispatch.mjs"],"names":[],"mappings":"AAoHA;;;;;;GAMG;AACH,uCAFa,CAAC,GAAG,IAAI,EAAE,OAAO,EAAE,KAAK,OAAO,CAAC,IAAI,CAAC,CA+DjD;AAMD,gEAAgE;AAChE,uBADW,MAAM,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC,CA0K3D"}
@@ -35,6 +35,7 @@
35
35
  */
36
36
  import { cmdActive } from './commands/active.mjs';
37
37
  import { cmdAdr } from './commands/adr.mjs';
38
+ // cmdApplyRecipe — loaded lazily in the dispatch handler (Fast Path PRF-001)
38
39
  import { cmdAudit } from './commands/audit.mjs';
39
40
  import { cmdAuthorSkill } from './commands/author-skill.mjs';
40
41
  import { cmdBootstrap } from './commands/bootstrap.mjs';
@@ -69,12 +70,14 @@ import { cmdInitState } from './commands/init-state.mjs';
69
70
  import { cmdInstallFromSource } from './commands/install-from-source.mjs';
70
71
  import { cmdLock } from './commands/lock.mjs';
71
72
  import { cmdMigratePrReviews } from './commands/migrate-pr-reviews.mjs';
73
+ import { cmdMobilePrepare } from './commands/mobile-prepare.mjs';
72
74
  import { cmdPersonas } from './commands/personas.mjs';
73
75
  import { cmdPlanApproval } from './commands/plan-approval.mjs';
74
76
  import { cmdPrReview } from './commands/pr-review.mjs';
75
77
  import { cmdPrecompactHook } from './commands/precompact-hook.mjs';
76
78
  import { cmdProductContext } from './commands/product-context.mjs';
77
79
  import { cmdProfile } from './commands/profile.mjs';
80
+ // cmdRecipeDiff — loaded lazily in the dispatch handler (Fast Path PRF-001)
78
81
  import { cmdReleaseNotes } from './commands/release-notes.mjs';
79
82
  import { cmdRiskCheck } from './commands/risk-check.mjs';
80
83
  import { cmdRoadmap } from './commands/roadmap.mjs';
@@ -97,6 +100,7 @@ import { cmdValidateEvidence } from './commands/validate-evidence.mjs';
97
100
  import { cmdVariantGallery } from './commands/variant-gallery.mjs';
98
101
  import { cmdVariantPick } from './commands/variant-pick.mjs';
99
102
  import { cmdVariantPool } from './commands/variant-pool.mjs';
103
+ // cmdVerifySandbox — loaded lazily in the dispatch handler (Fast Path PRF-001)
100
104
  import { cmdVitestDoctor } from './commands/vitest-doctor.mjs';
101
105
  import { cmdWave } from './commands/wave.mjs';
102
106
  import { cmdWfrun } from './commands/wfrun.mjs';
@@ -207,6 +211,18 @@ export const DISPATCH = {
207
211
  'state-artifacts': (args) => wrap(cmdStateArtifacts)(args[1], args.slice(2)),
208
212
  'detect-project': (args) => wrap(cmdDetectProject)(args[1]),
209
213
  'detect-runtime': (args) => wrap(cmdDetectRuntime)(args[1], args.slice(2)),
214
+ 'recipe-diff': async (args) => {
215
+ const { cmdRecipeDiff } = await import('./commands/recipe-diff.mjs');
216
+ return wrap(cmdRecipeDiff)(args[1], args.slice(2));
217
+ },
218
+ 'apply-recipe': async (args) => {
219
+ const { cmdApplyRecipe } = await import('./commands/apply-recipe.mjs');
220
+ return wrap(cmdApplyRecipe)(args[1], args.slice(2));
221
+ },
222
+ 'verify-sandbox': async (args) => {
223
+ const { cmdVerifySandbox } = await import('./commands/verify-sandbox.mjs');
224
+ return wrap(cmdVerifySandbox)(args[1], args.slice(2));
225
+ },
210
226
  driver: (args) => {
211
227
  // `apt-tools driver doctor <project-dir>` — only subcommand for now.
212
228
  if (args[1] === 'doctor')
@@ -219,6 +235,18 @@ export const DISPATCH = {
219
235
  exitCode: 1,
220
236
  }))();
221
237
  },
238
+ mobile: (args) => {
239
+ // `apt-tools mobile prepare <project-dir> --platform <ios|android> [--mode <expo|native>] [--device <id>]`
240
+ if (args[1] === 'prepare')
241
+ return wrap(cmdMobilePrepare)(args[2], args.slice(3));
242
+ return wrap(() => ({
243
+ envelope: {
244
+ status: 'error',
245
+ error: `Usage: apt-tools mobile prepare <project-dir> --platform <ios|android>. Unknown subcommand: ${args[1] ?? '(none)'}`,
246
+ },
247
+ exitCode: 1,
248
+ }))();
249
+ },
222
250
  'features-audit': (args) => wrap(cmdFeaturesAudit)(args[1], args.slice(2)),
223
251
  'init-state': (args) => wrap(cmdInitState)(args[1], args.slice(2)),
224
252
  'risk-check': (args) => wrap(cmdRiskCheck)(args[1], args.slice(2)),