@aperant/framework 0.8.4 → 0.8.6

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 (108) hide show
  1. package/CHANGELOG.md +156 -0
  2. package/agents/apt-planner.md +34 -3
  3. package/dist/cli/commands/coverage-check.d.mts.map +1 -1
  4. package/dist/cli/commands/coverage-check.mjs +74 -7
  5. package/dist/cli/commands/coverage-check.mjs.map +1 -1
  6. package/dist/cli/commands/detect-runtime.d.mts.map +1 -1
  7. package/dist/cli/commands/detect-runtime.mjs +18 -12
  8. package/dist/cli/commands/detect-runtime.mjs.map +1 -1
  9. package/dist/cli/coverage-check/user-outcomes.d.mts +84 -0
  10. package/dist/cli/coverage-check/user-outcomes.d.mts.map +1 -0
  11. package/dist/cli/coverage-check/user-outcomes.mjs +265 -0
  12. package/dist/cli/coverage-check/user-outcomes.mjs.map +1 -0
  13. package/dist/cli/host/detect.mjs +1 -1
  14. package/dist/cli/host/detect.mjs.map +1 -1
  15. package/dist/cli/install/install-from-source.mjs +3 -3
  16. package/dist/cli/install/legacy-paths.d.mts.map +1 -1
  17. package/dist/cli/install/legacy-paths.mjs +2 -0
  18. package/dist/cli/install/legacy-paths.mjs.map +1 -1
  19. package/dist/cli/verify-proof/idl/index.d.mts +1 -1
  20. package/dist/cli/verify-proof/idl/index.mjs +7 -8
  21. package/dist/cli/verify-proof/idl/index.mjs.map +1 -1
  22. package/dist/cli/verify-proof/idl/types.d.ts +5 -4
  23. package/dist/cli/verify-proof/idl/types.d.ts.map +1 -1
  24. package/dist/cli/verify-proof/idl/types.js +4 -3
  25. package/dist/cli/verify-proof/idl/types.js.map +1 -1
  26. package/dist/cli/verify-proof/resolver.d.mts +63 -1
  27. package/dist/cli/verify-proof/resolver.d.mts.map +1 -1
  28. package/dist/cli/verify-proof/resolver.mjs +164 -4
  29. package/dist/cli/verify-proof/resolver.mjs.map +1 -1
  30. package/dist/cli/verify-proof/runtime-detect.d.mts +6 -3
  31. package/dist/cli/verify-proof/runtime-detect.d.mts.map +1 -1
  32. package/dist/cli/verify-proof/runtime-detect.mjs +104 -11
  33. package/dist/cli/verify-proof/runtime-detect.mjs.map +1 -1
  34. package/dist/cli/verify-proof/trust.d.mts +1 -1
  35. package/dist/cli/verify-proof/trust.d.mts.map +1 -1
  36. package/dist/cli/verify-proof/trust.mjs +1 -1
  37. package/dist/driver-sdk/conformance.d.ts +41 -0
  38. package/dist/driver-sdk/conformance.d.ts.map +1 -0
  39. package/dist/driver-sdk/conformance.js +123 -0
  40. package/dist/driver-sdk/conformance.js.map +1 -0
  41. package/dist/driver-sdk/errors.d.ts +75 -0
  42. package/dist/driver-sdk/errors.d.ts.map +1 -0
  43. package/dist/driver-sdk/errors.js +80 -0
  44. package/dist/driver-sdk/errors.js.map +1 -0
  45. package/dist/driver-sdk/idl.d.ts +221 -0
  46. package/dist/driver-sdk/idl.d.ts.map +1 -0
  47. package/dist/driver-sdk/idl.js +140 -0
  48. package/dist/driver-sdk/idl.js.map +1 -0
  49. package/dist/driver-sdk/index.d.ts +28 -0
  50. package/dist/driver-sdk/index.d.ts.map +1 -0
  51. package/dist/driver-sdk/index.js +28 -0
  52. package/dist/driver-sdk/index.js.map +1 -0
  53. package/dist/driver-sdk/manifest.d.ts +93 -0
  54. package/dist/driver-sdk/manifest.d.ts.map +1 -0
  55. package/dist/driver-sdk/manifest.js +12 -0
  56. package/dist/driver-sdk/manifest.js.map +1 -0
  57. package/dist/driver-sdk/retry.d.ts +33 -0
  58. package/dist/driver-sdk/retry.d.ts.map +1 -0
  59. package/dist/driver-sdk/retry.js +50 -0
  60. package/dist/driver-sdk/retry.js.map +1 -0
  61. package/dist/plugin/.claude-plugin/plugin.json +2 -1
  62. package/dist/plugin/agents/apt-planner.md +34 -3
  63. package/dist/plugin/skills/apt-plan/SKILL.md +50 -0
  64. package/dist/plugin/skills/apt-pr-review/SKILL.md +1 -1
  65. package/dist/plugin/skills/apt-research/SKILL.md +526 -0
  66. package/dist/plugin/skills/apt-research/appendices/budget-loop.md +397 -0
  67. package/dist/plugin/skills/apt-research/appendices/claim-graph-schema.md +206 -0
  68. package/dist/plugin/skills/apt-research/appendices/domain-tools.md +236 -0
  69. package/dist/plugin/skills/apt-spar/SKILL.md +19 -7
  70. package/dist/plugin/skills/apt-verify-proof/SKILL.md +41 -2
  71. package/dist/schemas/quick-task.d.ts +17 -17
  72. package/drivers/.gitkeep +0 -0
  73. package/drivers/api/README.md +40 -0
  74. package/drivers/api/driver.mjs +59 -0
  75. package/drivers/api/manifest.json +26 -0
  76. package/drivers/browser/README.md +105 -0
  77. package/drivers/browser/driver.mjs +134 -0
  78. package/drivers/browser/manifest.json +35 -0
  79. package/drivers/cli/README.md +44 -0
  80. package/drivers/cli/driver.mjs +62 -0
  81. package/drivers/cli/manifest.json +28 -0
  82. package/drivers/electron/README.md +64 -0
  83. package/drivers/electron/driver.mjs +87 -0
  84. package/drivers/electron/manifest.json +37 -0
  85. package/package.json +7 -3
  86. package/skills/apt-plan/SKILL.md +50 -0
  87. package/skills/apt-planner.md +16 -0
  88. package/skills/apt-pr-review/SKILL.md +1 -1
  89. package/skills/apt-research/SKILL.md +526 -0
  90. package/skills/apt-research/appendices/budget-loop.md +397 -0
  91. package/skills/apt-research/appendices/claim-graph-schema.md +206 -0
  92. package/skills/apt-research/appendices/domain-tools.md +236 -0
  93. package/skills/apt-spar/SKILL.md +19 -7
  94. package/skills/apt-verify-proof/SKILL.md +41 -2
  95. package/src/cli/commands/coverage-check.mjs +126 -44
  96. package/src/cli/commands/detect-runtime.mjs +23 -14
  97. package/src/cli/coverage-check/user-outcomes.mjs +273 -0
  98. package/src/cli/host/detect.mjs +1 -1
  99. package/src/cli/install/install-from-source.mjs +3 -3
  100. package/src/cli/install/legacy-paths.mjs +2 -0
  101. package/src/cli/verify-proof/idl/index.mjs +7 -8
  102. package/src/cli/verify-proof/idl/types.ts +5 -4
  103. package/src/cli/verify-proof/manifest-schema.json +2 -1
  104. package/src/cli/verify-proof/resolver.mjs +171 -4
  105. package/src/cli/verify-proof/runtime-detect.mjs +99 -10
  106. package/src/cli/verify-proof/trust.mjs +1 -1
  107. package/templates/proof-verification.md +32 -3
  108. package/workflows/verify-proof.md +78 -9
package/CHANGELOG.md CHANGED
@@ -3,6 +3,162 @@
3
3
  All notable changes to `@aperant/framework` are documented here. See
4
4
  [`VERSIONING.md`](VERSIONING.md) for the per-tier contract.
5
5
 
6
+ ## 0.8.6 — 2026-05-24 — Outcome-first verify-proof contract + driver-sdk inline (recovery from 0.8.4 npm 404)
7
+
8
+ > **Migration window.** This release introduces a new `## User Outcomes`
9
+ > section that becomes the verify-proof input contract. Specs WITHOUT
10
+ > the section emit a `coverage-check` **warning** on v0.8.x and a
11
+ > **HARD BLOCK** starting v0.9.0. Refactor-only specs SHOULD use the
12
+ > empty-with-note escape (`_No user-observable changes — pure
13
+ > refactor._`) to declare absence-of-outcomes deliberately. See spec
14
+ > §ID-07 of `verify-proof-monorepo-contract` for the gate table.
15
+
16
+ > **Recovery.** 0.8.4 shipped with `@aperant/driver-sdk: 0.1.0` as a
17
+ > direct dep, but the driver-sdk package was never published — every
18
+ > `npm install @aperant/framework@0.8.4` since 2026-05-22 failed with
19
+ > a 404 on the transitive dep. 0.8.6 inlines the 875-LOC zero-dep SDK
20
+ > into the framework tarball, removing the broken dep. Users on 0.8.4
21
+ > MUST upgrade to 0.8.6 to install successfully.
22
+
23
+ ### Fixed
24
+
25
+ - **`@aperant/driver-sdk` inlined into framework src** (recovery from
26
+ the 0.8.4 npm 404). The SDK lived at `packages/framework-driver-sdk/`
27
+ with the contract that third-party driver authors would `pnpm add
28
+ @aperant/driver-sdk` and avoid pulling all of framework. The SDK
29
+ was never published; pnpm's `workspace:*` rewrite baked an
30
+ unresolvable `0.1.0` spec into framework's published `package.json`.
31
+ Fix: 875 LOC of zero-runtime-dep SDK moved to
32
+ `packages/framework/src/driver-sdk/`, framework imports rewritten to
33
+ relative paths, the `import-direction.test.ts` invariant repurposed
34
+ from a package boundary to a subdirectory boundary so re-extraction
35
+ stays mechanical if a real third-party driver author ever asks for a
36
+ standalone install. The `@aperant/driver-sdk` npm package remains
37
+ unpublished — no consumers existed to migrate.
38
+
39
+ ### Added
40
+
41
+ - **`## User Outcomes` PRD section** — verify-proof's input contract.
42
+ STANDARD/DEEP specs ship a section between `## Solution` and
43
+ `## Implementation Decisions` carrying one `**Epic:**` headline + N
44
+ atomic outcomes tagged by surface (`electron | web | cli | api |
45
+ electron+web`). Authors write the literal `**ON**` token; IDs are
46
+ POSITIONAL and synthesized by the parser (O1, O2, …). Optional
47
+ cross-refs via `*(requires ON N)*`. Empty-with-note refactor escape
48
+ for non-UX tasks. QUICK track is hard-exempt per the Fast Path
49
+ Guarantee (ID-05).
50
+ - **`drivers/browser/manifest.json:transport.skill_id = "agent-browser"`**
51
+ — second transport option alongside `mcp_server_id: "puppeteer"`.
52
+ On Claude Code / OpenCode hosts the workflow runner dispatches via
53
+ `Skill({skill: "agent-browser", args: ...})` (one fewer external
54
+ dep — no Puppeteer MCP install needed); on legacy hosts the MCP
55
+ path is preserved. `chooseTransport({has_skill_tool})` helper.
56
+ - **`resolveDriversForOutcomes(opts)`** — new resolver entrypoint that
57
+ returns one entry per (outcome, surface) pair. For `[electron+web]`
58
+ outcomes emits TWO entries with the same `outcome_id` and different
59
+ drivers. Delegates to existing `resolveDriver()` for scoring.
60
+ - **`verification.monorepo_globs: string[]`** config key (default
61
+ `["apps/*"]`) — `loadRuntimeCapabilities` walks each glob match's
62
+ `package.json` and OR-merges its capabilities with the root.
63
+ Disable the walk entirely with `monorepo_globs: []`.
64
+ - **`transport` field on `verification.json:tests[]`** — `skill | mcp
65
+ | binary | http`. Populated by the workflow runner from the
66
+ dispatcher's directive (Step 7a). Documented in
67
+ `templates/proof-verification.md`.
68
+ - **`surface` field on `verification.json:tests[]`** — `electron | web
69
+ | cli | api`. Drives the per-surface screenshot path and the
70
+ `coverage.by_surface` rollup. Cross-surface outcomes produce TWO
71
+ test entries sharing the same `outcome_id`.
72
+
73
+ ### Changed
74
+
75
+ - **`apt-tools detect-runtime`** — now walks `apps/*/package.json` by
76
+ default. Fixes the canonical Aperant monorepo defect (root
77
+ package.json with no Electron dep + `apps/desktop/package.json`
78
+ carrying Electron previously returned `is_electron: false` because
79
+ the detector only read the root). No user-visible config change
80
+ needed; opt out via `verification.monorepo_globs: []`.
81
+ - **`apt-tools coverage-check validate`** — payload gains a
82
+ `user_outcomes` block when the plan is STANDARD/DEEP. Block carries
83
+ `header_present`, `body_kind` (`empty | empty-with-note | outcomes
84
+ | absent`), `outcomes_count`, `validation_warnings?`, and
85
+ `gate_result` (`pass | warn | block`). QUICK plans omit the block
86
+ entirely per Fast Path Guarantee.
87
+ - **`workflows/verify-proof.md` Step 7** — dispatches per outcome via
88
+ `resolveDriversForOutcomes()` instead of a single per-run
89
+ `resolveDriver()` call. Writes screenshots under
90
+ `${PROOF_DIR}/${surface}/screenshots/${outcome-id}.png` (per-surface
91
+ split tree). Step 7a gains the MUST-invoke Skill directive
92
+ (TD-08 grep guard pins the language).
93
+
94
+ ### Deprecated
95
+
96
+ - **Specs without `## User Outcomes` (STANDARD/DEEP only).** v0.8.x
97
+ emits a `coverage-check` **warning** with a `migration_deadline`
98
+ string referencing v0.9.0. v0.9.0 will **HARD BLOCK** specs that
99
+ lack the section. Refactor-only specs SHOULD use the
100
+ empty-with-note escape (`_No user-observable changes — pure
101
+ refactor._`, italic underscores + em dash + period required) to
102
+ declare absence-of-outcomes deliberately. QUICK-track plans are
103
+ hard-exempt at every version.
104
+
105
+ ### v0.9.0 telegraph (one-minor window)
106
+
107
+ The v0.9.0 cutover lands the hard-block on missing `## User Outcomes`
108
+ in STANDARD/DEEP specs. Adopters should retrofit specs in the v0.8.x
109
+ window OR adopt the empty-with-note escape for refactor specs. No
110
+ silent migration of existing specs is provided — the migration is
111
+ deliberate per author.
112
+
113
+ ### Out-of-scope (deferred follow-ups)
114
+
115
+ - **`verify-proof-executable-runner`** — the v1 verify-proof runner is
116
+ the host LLM (Claude Code / Codex / OpenCode / Gemini) following
117
+ `workflows/verify-proof.md` as a prose recipe. The framework does
118
+ NOT ship an executable `apt-tools verify-proof` command in 0.8.6.
119
+ The `transport` field, per-outcome dispatch, and MUST-invoke
120
+ directive are LLM-honored conventions enforced via grep guards on
121
+ workflow text (TD-08) and schema assertions on `verification.json`
122
+ shape (AC23). Follow-up `verify-proof-executable-runner` task is
123
+ deferred per spec §Out of Scope; the triggers that would promote
124
+ Path B → Path A are documented there.
125
+ - **`apt-tools outcomes lint`** — sentence-shape lint for User
126
+ Outcomes (catches squishy outcomes, validates surface tags).
127
+ Deferred to a follow-up framework task.
128
+
129
+ ## 0.8.5 — 2026-05-22 — `/apt:verify-proof` driver layer fixes (bundled drivers + hard override precedence)
130
+
131
+ ### Fixed
132
+
133
+ - **`drivers/` missing from published tarball.** `packages/framework/package.json:files`
134
+ did not include `drivers/`, so the four bundled IDL drivers (`browser`,
135
+ `electron`, `cli`, `api` — each with `manifest.json` + `driver.mjs` +
136
+ `README.md`) were stripped at `pnpm pack` / `npm publish` time. Downstream
137
+ effect: `apt-tools detect-runtime` returned `discovered_drivers: []` and
138
+ `selected_driver_id: null` for every installed kernel, which made the
139
+ strict `/apt:verify-proof` IDL path unusable (resolver throws
140
+ `unsatisfied_required_capability`). Fix is a one-line `files` entry —
141
+ re-pack now ships 4 manifests + 4 driver modules. Self-host installs
142
+ fix automatically on the next `/apt:update --from-source`; npm-install
143
+ consumers fix on the next published version bump.
144
+
145
+ - **`verification.runtimes[]` override was decorative.** The resolver
146
+ in `packages/framework/src/cli/verify-proof/resolver.mjs` placed
147
+ override-listed drivers first in the candidate list but then sorted
148
+ the list by score, wiping the override order. With a Next.js root
149
+ `package.json` (e.g. a monorepo where Electron lives at `apps/desktop`),
150
+ forcing `verification.runtimes: ["electron"]` still selected `browser`
151
+ because the latter had higher `priority` (100 vs 90). The override
152
+ docstring promised "explicit driverId precedence" but delivered a
153
+ tie-breaker. Fix: override is now **hard precedence** — listed
154
+ drivers are tried in override order, first one satisfying every
155
+ required capability wins regardless of score; non-matching override
156
+ entries are recorded in `fallback_attempts` with reason
157
+ `override-listed but missing required capabilities: ...` and the
158
+ resolver then falls through to the score-based pick on remaining
159
+ drivers. Two test cases in `verify-proof-resolver.test.ts` lock the
160
+ new contract (force-pick + fall-through).
161
+
6
162
  ## 0.8.4 — 2026-05-22 — `/apt:update` polish + `apt:handoff`, `apt:caveman` skills + `apt:resume` HANDOFF discovery
7
163
 
8
164
  Bundled release: five `/apt:update` fix bundles (converged from a 3-round
@@ -240,6 +240,11 @@ survives the task as a second-consumer document.
240
240
 
241
241
  ### 4.B. STANDARD / DEEP / COMPLEX — PRD-shaped spec.md
242
242
 
243
+ **Three orthogonal user-facing sections — keep them distinct.** User
244
+ Stories (motivation prose), User Outcomes (verify-proof input contract),
245
+ and Acceptance Criteria (code-level invariants) serve distinct
246
+ purposes. Do NOT collapse them — STANDARD/DEEP specs carry all three.
247
+
243
248
  ```markdown
244
249
  # Spec: {task title}
245
250
 
@@ -257,6 +262,22 @@ survives the task as a second-consumer document.
257
262
  {One **US-NN (persona).** story per user-value slice. Stories map 1:1
258
263
  onto subtasks in implementation_plan.json.}
259
264
 
265
+ ## User Outcomes
266
+ {Verify-proof input contract. One bolded `**Epic:**` headline + N
267
+ atomic outcomes. Authors write the LITERAL string `**ON**` — IDs are
268
+ POSITIONAL and synthesized by the parser (first row becomes O1, second
269
+ O2, ...). Closed surface set: `electron | web | cli | api | electron+web`.
270
+ Optional cross-refs via `*(requires ON N)*`. Refactor-only specs MAY
271
+ use the empty-with-note escape (verbatim string,
272
+ italic underscores + em dash + period required):}
273
+
274
+ `_No user-observable changes — pure refactor._`
275
+
276
+ **Epic:** {one-sentence user-facing capability headline}
277
+
278
+ - **ON** [surface]: {user does X; system shows/does Y}
279
+ - **ON** [surface]: {user does X; system shows/does Y} *(requires ON 1)*
280
+
260
281
  ## Implementation Decisions
261
282
  {Load-bearing principles carried into every subtask. Format:
262
283
  "### ID-NN: {title}" + rationale + practical consequence.}
@@ -279,9 +300,19 @@ reference these IDs via the per-subtask `acceptance_criteria` field.}
279
300
  ```
280
301
 
281
302
  **PRD section ordering is load-bearing.** `apt-tools coverage-check
282
- validate` greps `## Acceptance Criteria`; `apt-tools consistency check`
283
- greps `## Solution` and `## User Stories`. Renaming or reordering these
284
- sections breaks downstream tooling and the C15 consistency rules.
303
+ validate` greps `## Acceptance Criteria` AND `## User Outcomes`;
304
+ `apt-tools consistency check` greps `## Solution` and `## User Stories`.
305
+ Renaming or reordering these sections breaks downstream tooling and the
306
+ C15 consistency rules.
307
+
308
+ **`## User Outcomes` synthesis directive.** Outcomes are
309
+ user-observable (a user does X; the system shows/does Y); Acceptance
310
+ Criteria are code-level invariants (a function returns X; a config key
311
+ exists). Do NOT collapse them — they parse through different gates and
312
+ serve different consumers. STANDARD/DEEP specs carry both sections in
313
+ parallel. IDs are POSITIONAL: the parser counts outcome rows in
314
+ document order and synthesizes `O1`, `O2`, ... — authors MUST write
315
+ the literal `**ON**` token, never `**O1**`/`**O2**`.
285
316
 
286
317
  **Do NOT interview the user.** The PRD is synthesized from the task
287
318
  description + codebase investigation + AGENTS.md, not from a clarifying
@@ -1 +1 @@
1
- {"version":3,"file":"coverage-check.d.mts","sourceRoot":"","sources":["../../../src/cli/commands/coverage-check.mjs"],"names":[],"mappings":"AASA,+HAkPC"}
1
+ {"version":3,"file":"coverage-check.d.mts","sourceRoot":"","sources":["../../../src/cli/commands/coverage-check.mjs"],"names":[],"mappings":"AAmBA,+HA6RC"}
@@ -1,9 +1,19 @@
1
1
  /**
2
2
  * commands/coverage-check.mjs — plan-to-spec verification coverage validator (C29).
3
+ *
4
+ * v0.8.6 adds a second gate: `## User Outcomes` parsing + gate (see
5
+ * coverage-check/user-outcomes.mjs). The new gate is ADDITIVE — it does
6
+ * NOT change the existing AC parsing branch and does NOT block when
7
+ * only Acceptance Criteria are present (outcomes and ACs are
8
+ * independent concerns per spec §ID-01). QUICK-track plans
9
+ * (`complexity: "simple"` OR no `vertical_slice_schema_version`) skip
10
+ * the User Outcomes branch entirely per Fast Path Guarantee (ID-08).
3
11
  */
4
12
  import { existsSync, readFileSync } from 'node:fs';
5
- import { join, resolve } from 'node:path';
13
+ import { dirname, join, resolve } from 'node:path';
14
+ import { fileURLToPath } from 'node:url';
6
15
  import { parseAcceptanceCriteria, resolveSpecPath } from '../config/coverage-ac.mjs';
16
+ import { parseUserOutcomes, userOutcomesGateResult } from '../coverage-check/user-outcomes.mjs';
7
17
  import { err, ok } from '../util/result.mjs';
8
18
  export function cmdCoverageCheck(subcommand, projectDir, extraArgs) {
9
19
  if (!subcommand)
@@ -113,12 +123,40 @@ export function cmdCoverageCheck(subcommand, projectDir, extraArgs) {
113
123
  /* use default */
114
124
  }
115
125
  }
126
+ // Build the User Outcomes payload — additive, ID-08 QUICK-exempt.
127
+ // Plans with `complexity: "simple"` OR no
128
+ // `vertical_slice_schema_version` are QUICK-track per the Fast
129
+ // Path Guarantee — skip the gate entirely (the payload's
130
+ // `user_outcomes` key is OMITTED).
131
+ const isQuickTrack = plan.complexity === 'simple' || !plan.vertical_slice_schema_version;
132
+ let userOutcomesPayload = null;
133
+ if (!isQuickTrack && resolvedSpec.path) {
134
+ const specContentForOutcomes = readFileSync(resolvedSpec.path, 'utf-8');
135
+ const parsedOutcomes = parseUserOutcomes(specContentForOutcomes);
136
+ const frameworkVersion = readFrameworkVersion();
137
+ const gateResult = userOutcomesGateResult(parsedOutcomes, frameworkVersion);
138
+ userOutcomesPayload = {
139
+ header_present: parsedOutcomes.header_present,
140
+ body_kind: parsedOutcomes.body_kind,
141
+ outcomes_count: parsedOutcomes.outcomes.length,
142
+ gate_result: gateResult,
143
+ };
144
+ if (parsedOutcomes.epic)
145
+ userOutcomesPayload.epic = parsedOutcomes.epic;
146
+ if (parsedOutcomes.validation_warnings && parsedOutcomes.validation_warnings.length > 0) {
147
+ userOutcomesPayload.validation_warnings = parsedOutcomes.validation_warnings;
148
+ }
149
+ if (gateResult === 'warn') {
150
+ userOutcomesPayload.migration_deadline =
151
+ '## User Outcomes section becomes a hard block in v0.9.0 — add it now, or use the empty-with-note escape (`_No user-observable changes — pure refactor._`) for refactor-only specs.';
152
+ }
153
+ }
116
154
  // Zero-criteria guard — do NOT silently report ok when there is
117
155
  // nothing to verify. This is the motivating bug: zero criteria
118
156
  // trivially pass unmapped.length === 0, which produced a false
119
157
  // green signal. Treat it as incomplete with an explicit reason.
120
158
  if (criteria.length === 0) {
121
- return ok({
159
+ return ok(withUserOutcomes({
122
160
  status: 'incomplete',
123
161
  command: 'coverage-validate',
124
162
  criteria_count: 0,
@@ -136,7 +174,7 @@ export function cmdCoverageCheck(subcommand, projectDir, extraArgs) {
136
174
  sources_checked: sourcesChecked,
137
175
  spec_path: resolvedSpec.path,
138
176
  autonomy_action: autonomyLevelEarly <= 1 ? 'stop-and-ask' : 'generate-stubs',
139
- });
177
+ }, userOutcomesPayload));
140
178
  }
141
179
  // Classify verification methods for each subtask (D-19)
142
180
  function classifyVerification(verification) {
@@ -206,7 +244,7 @@ export function cmdCoverageCheck(subcommand, projectDir, extraArgs) {
206
244
  }
207
245
  }
208
246
  if (unmapped.length > 0) {
209
- return ok({
247
+ return ok(withUserOutcomes({
210
248
  status: 'incomplete',
211
249
  command: 'coverage-validate',
212
250
  criteria_count: criteria.length,
@@ -218,9 +256,9 @@ export function cmdCoverageCheck(subcommand, projectDir, extraArgs) {
218
256
  autonomy_action: autonomyLevel <= 1 ? 'stop-and-ask' : 'generate-stubs',
219
257
  spec_path: resolvedSpec.path,
220
258
  sources_checked: sourcesChecked,
221
- });
259
+ }, userOutcomesPayload));
222
260
  }
223
- return ok({
261
+ return ok(withUserOutcomes({
224
262
  status: 'ok',
225
263
  command: 'coverage-validate',
226
264
  criteria_count: criteria.length,
@@ -229,10 +267,39 @@ export function cmdCoverageCheck(subcommand, projectDir, extraArgs) {
229
267
  subtask_verifications: subtaskVerifications,
230
268
  spec_path: resolvedSpec.path,
231
269
  sources_checked: sourcesChecked,
232
- });
270
+ }, userOutcomesPayload));
233
271
  }
234
272
  default:
235
273
  return err(`Unknown coverage-check subcommand: ${subcommand}. Available: validate`);
236
274
  }
237
275
  }
276
+ /**
277
+ * Attach the `user_outcomes` payload to a coverage-check envelope when
278
+ * present (i.e. STANDARD/DEEP plan with a spec on disk). QUICK plans
279
+ * pass `null` and the key is OMITTED from the envelope entirely — Fast
280
+ * Path Guarantee (ID-08).
281
+ */
282
+ function withUserOutcomes(envelope, userOutcomesPayload) {
283
+ if (userOutcomesPayload === null)
284
+ return envelope;
285
+ return { ...envelope, user_outcomes: userOutcomesPayload };
286
+ }
287
+ /**
288
+ * Read the running kernel's framework version from its own package.json.
289
+ * Used to gate the `## User Outcomes` missing-header behavior — warn in
290
+ * v0.8.x, hard-block from v0.9.0 forward. Returns `'0.0.0'` on failure
291
+ * so the gate fails-soft to warn (callers treat unknown version as
292
+ * pre-0.9.0).
293
+ */
294
+ function readFrameworkVersion() {
295
+ try {
296
+ const here = dirname(fileURLToPath(import.meta.url));
297
+ const pkgPath = resolve(here, '..', '..', '..', 'package.json');
298
+ const pkg = JSON.parse(readFileSync(pkgPath, 'utf-8'));
299
+ return typeof pkg.version === 'string' ? pkg.version : '0.0.0';
300
+ }
301
+ catch {
302
+ return '0.0.0';
303
+ }
304
+ }
238
305
  //# sourceMappingURL=coverage-check.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"coverage-check.mjs","sourceRoot":"","sources":["../../../src/cli/commands/coverage-check.mjs"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,SAAS,CAAA;AAClD,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AACzC,OAAO,EAAE,uBAAuB,EAAE,eAAe,EAAE,MAAM,2BAA2B,CAAA;AACpF,OAAO,EAAE,GAAG,EAAE,EAAE,EAAE,MAAM,oBAAoB,CAAA;AAE5C,MAAM,UAAU,gBAAgB,CAAC,UAAU,EAAE,UAAU,EAAE,SAAS;IACjE,IAAI,CAAC,UAAU;QACd,OAAO,GAAG,CAAC,0EAA0E,CAAC,CAAA;IAEvF,QAAQ,UAAU,EAAE,CAAC;QACpB,KAAK,UAAU,CAAC,CAAC,CAAC;YACjB,IAAI,CAAC,UAAU;gBACd,OAAO,GAAG,CACT,wFAAwF,CACxF,CAAA;YACF,MAAM,SAAS,GAAG,OAAO,CAAC,UAAU,CAAC,CAAA;YAErC,sBAAsB;YACtB,MAAM,OAAO,GAAG,SAAS,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAA;YAC3C,MAAM,QAAQ,GACb,OAAO,IAAI,CAAC,IAAI,SAAS,CAAC,OAAO,GAAG,CAAC,CAAC;gBACrC,CAAC,CAAC,OAAO,CAAC,SAAS,CAAC,OAAO,GAAG,CAAC,CAAC,CAAC;gBACjC,CAAC,CAAC,IAAI,CAAC,SAAS,EAAE,0BAA0B,CAAC,CAAA;YAE/C,4CAA4C;YAC5C,MAAM,WAAW,GAAG,SAAS,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAA;YAC/C,MAAM,gBAAgB,GACrB,WAAW,IAAI,CAAC,IAAI,SAAS,CAAC,WAAW,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,WAAW,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAA;YAEnF,wCAAwC;YACxC,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC;gBAAE,OAAO,GAAG,CAAC,wBAAwB,QAAQ,EAAE,CAAC,CAAA;YACzE,IAAI,IAAI,CAAA;YACR,IAAI,CAAC;gBACJ,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC,CAAA;YACnD,CAAC;YAAC,OAAO,CAAC,EAAE,CAAC;gBACZ,OAAO,GAAG,CAAC,8BAA8B,CAAC,CAAC,OAAO,EAAE,CAAC,CAAA;YACtD,CAAC;YAED,IAAI,CAAC,IAAI,CAAC,QAAQ,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC;gBACrD,OAAO,GAAG,CAAC,sCAAsC,CAAC,CAAA;YACnD,CAAC;YAED,oDAAoD;YACpD,MAAM,QAAQ,GAAG,EAAE,CAAA;YAEnB,qDAAqD;YACrD,MAAM,YAAY,GAAG,eAAe,CAAC,SAAS,EAAE,QAAQ,EAAE,gBAAgB,CAAC,CAAA;YAC3E,MAAM,cAAc,GAAG,EAAE,CAAA;YACzB,IAAI,YAAY,CAAC,IAAI,EAAE,CAAC;gBACvB,MAAM,WAAW,GAAG,YAAY,CAAC,YAAY,CAAC,IAAI,EAAE,OAAO,CAAC,CAAA;gBAC5D,MAAM,MAAM,GAAG,uBAAuB,CAAC,WAAW,CAAC,CAAA;gBACnD,KAAK,MAAM,CAAC,IAAI,MAAM,EAAE,CAAC;oBACxB,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC;wBAAE,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;gBAC5C,CAAC;gBACD,6DAA6D;gBAC7D,4CAA4C;gBAC5C,KAAK,MAAM,KAAK,IAAI,YAAY,CAAC,OAAO,EAAE,CAAC;oBAC1C,cAAc,CAAC,IAAI,CAAC;wBACnB,IAAI,EAAE,KAAK,CAAC,IAAI;wBAChB,OAAO,EAAE,KAAK,CAAC,OAAO;wBACtB,MAAM,EAAE,KAAK,CAAC,MAAM;wBACpB,cAAc,EAAE,KAAK,CAAC,IAAI,KAAK,YAAY,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;qBACpE,CAAC,CAAA;gBACH,CAAC;YACF,CAAC;iBAAM,CAAC;gBACP,KAAK,MAAM,KAAK,IAAI,YAAY,CAAC,OAAO,EAAE,CAAC;oBAC1C,cAAc,CAAC,IAAI,CAAC;wBACnB,IAAI,EAAE,KAAK,CAAC,IAAI;wBAChB,OAAO,EAAE,KAAK,CAAC,OAAO;wBACtB,MAAM,EAAE,KAAK,CAAC,MAAM;wBACpB,cAAc,EAAE,CAAC;qBACjB,CAAC,CAAA;gBACH,CAAC;YACF,CAAC;YAED,2CAA2C;YAC3C,IAAI,cAAc,GAAG,CAAC,CAAA;YACtB,IAAI,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,mBAAmB,CAAC,EAAE,CAAC;gBAC7C,KAAK,MAAM,CAAC,IAAI,IAAI,CAAC,mBAAmB,EAAE,CAAC;oBAC1C,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC;wBAC3B,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;wBAChB,cAAc,EAAE,CAAA;oBACjB,CAAC;gBACF,CAAC;YACF,CAAC;YACD,cAAc,CAAC,IAAI,CAAC;gBACnB,IAAI,EAAE,QAAQ;gBACd,OAAO,EAAE,IAAI;gBACb,MAAM,EAAE,0BAA0B;gBAClC,cAAc,EAAE,cAAc;aAC9B,CAAC,CAAA;YAEF,4CAA4C;YAC5C,IAAI,iBAAiB,GAAG,CAAC,CAAA;YACzB,KAAK,MAAM,EAAE,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC;gBAChC,IAAI,KAAK,CAAC,OAAO,CAAC,EAAE,CAAC,mBAAmB,CAAC,EAAE,CAAC;oBAC3C,KAAK,MAAM,CAAC,IAAI,EAAE,CAAC,mBAAmB,EAAE,CAAC;wBACxC,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC;4BAC3B,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;4BAChB,iBAAiB,EAAE,CAAA;wBACpB,CAAC;oBACF,CAAC;gBACF,CAAC;YACF,CAAC;YACD,cAAc,CAAC,IAAI,CAAC;gBACnB,IAAI,EAAE,QAAQ;gBACd,OAAO,EAAE,IAAI;gBACb,MAAM,EAAE,qCAAqC;gBAC7C,cAAc,EAAE,iBAAiB;aACjC,CAAC,CAAA;YAEF,0EAA0E;YAC1E,IAAI,kBAAkB,GAAG,CAAC,CAAA;YAC1B,MAAM,eAAe,GAAG,IAAI,CAAC,SAAS,EAAE,UAAU,EAAE,aAAa,CAAC,CAAA;YAClE,IAAI,UAAU,CAAC,eAAe,CAAC,EAAE,CAAC;gBACjC,IAAI,CAAC;oBACJ,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,eAAe,EAAE,OAAO,CAAC,CAAC,CAAA;oBAC9D,kBAAkB,GAAG,GAAG,EAAE,QAAQ,EAAE,OAAO,IAAI,CAAC,CAAA;gBACjD,CAAC;gBAAC,MAAM,CAAC;oBACR,iBAAiB;gBAClB,CAAC;YACF,CAAC;YAED,gEAAgE;YAChE,+DAA+D;YAC/D,+DAA+D;YAC/D,gEAAgE;YAChE,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;gBAC3B,OAAO,EAAE,CAAC;oBACT,MAAM,EAAE,YAAY;oBACpB,OAAO,EAAE,mBAAmB;oBAC5B,cAAc,EAAE,CAAC;oBACjB,YAAY,EAAE,CAAC;oBACf,iBAAiB,EAAE,EAAE;oBACrB,QAAQ,EAAE,EAAE;oBACZ,qBAAqB,EAAE,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC;wBACjD,EAAE,EAAE,EAAE,CAAC,EAAE;wBACT,KAAK,EAAE,EAAE,CAAC,KAAK,IAAI,EAAE,CAAC,EAAE;wBACxB,YAAY,EAAE,EAAE,CAAC,YAAY,IAAI,EAAE;wBACnC,mBAAmB,EAAE,EAAE,CAAC,mBAAmB,IAAI,EAAE;qBACjD,CAAC,CAAC;oBACH,MAAM,EAAE,mBAAmB;oBAC3B,UAAU,EACT,8HAA8H;oBAC/H,eAAe,EAAE,cAAc;oBAC/B,SAAS,EAAE,YAAY,CAAC,IAAI;oBAC5B,eAAe,EAAE,kBAAkB,IAAI,CAAC,CAAC,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC,gBAAgB;iBAC5E,CAAC,CAAA;YACH,CAAC;YAED,wDAAwD;YACxD,SAAS,oBAAoB,CAAC,YAAY;gBACzC,IAAI,CAAC,YAAY,IAAI,YAAY,CAAC,IAAI,EAAE,KAAK,EAAE;oBAAE,OAAO,UAAU,CAAA;gBAClE,MAAM,CAAC,GAAG,YAAY,CAAC,WAAW,EAAE,CAAA;gBACpC,IAAI,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC;oBAC9C,IAAI,CAAC,CAAC,QAAQ,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC;wBAAE,OAAO,kBAAkB,CAAA;oBAC7E,OAAO,WAAW,CAAA;gBACnB,CAAC;gBACD,IAAI,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC;oBAAE,OAAO,cAAc,CAAA;gBAC1F,IACC,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC;oBAClB,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC;oBAClB,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC;oBACnB,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC;oBACnB,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC;oBAClB,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC;oBAElB,OAAO,YAAY,CAAA;gBACpB,+FAA+F;gBAC/F,IAAI,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,MAAM,GAAG,GAAG;oBAAE,OAAO,YAAY,CAAA;gBAC9E,OAAO,QAAQ,CAAA;YAChB,CAAC;YAED,MAAM,oBAAoB,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC;gBACvD,EAAE,EAAE,EAAE,CAAC,EAAE;gBACT,KAAK,EAAE,EAAE,CAAC,KAAK,IAAI,EAAE,CAAC,EAAE;gBACxB,YAAY,EAAE,EAAE,CAAC,YAAY,IAAI,EAAE;gBACnC,IAAI,EAAE,oBAAoB,CAAC,EAAE,CAAC,YAAY,CAAC;gBAC3C,mBAAmB,EAAE,EAAE,CAAC,mBAAmB,IAAI,EAAE;aACjD,CAAC,CAAC,CAAA;YAEH,0EAA0E;YAC1E,MAAM,QAAQ,GAAG,QAAQ,CAAC,GAAG,CAAC,CAAC,SAAS,EAAE,EAAE;gBAC3C,MAAM,cAAc,GAAG,SAAS,CAAC,WAAW,EAAE,CAAA;gBAC9C,MAAM,cAAc,GAAG,oBAAoB,CAAC,MAAM,CAAC,CAAC,EAAE,EAAE,EAAE;oBACzD,gEAAgE;oBAChE,IAAI,EAAE,CAAC,mBAAmB,CAAC,IAAI,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,WAAW,EAAE,KAAK,cAAc,CAAC;wBAAE,OAAO,IAAI,CAAA;oBACzF,0EAA0E;oBAC1E,MAAM,cAAc,GAAG,cAAc,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,CAAA;oBAC9E,MAAM,UAAU,GAAG,EAAE,CAAC,KAAK,CAAC,WAAW,EAAE,CAAA;oBACzC,MAAM,UAAU,GAAG,cAAc,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAA;oBAC9E,IAAI,UAAU,IAAI,CAAC,IAAI,CAAC,cAAc,CAAC,MAAM,IAAI,CAAC,IAAI,UAAU,IAAI,CAAC,CAAC;wBAAE,OAAO,IAAI,CAAA;oBACnF,OAAO,KAAK,CAAA;gBACb,CAAC,CAAC,CAAA;gBAEF,OAAO;oBACN,SAAS;oBACT,MAAM,EAAE,cAAc,CAAC,MAAM,GAAG,CAAC;oBACjC,QAAQ,EAAE,cAAc,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC;oBAC3C,kBAAkB,EAAE,CAAC,GAAG,IAAI,GAAG,CAAC,cAAc,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC;iBACrE,CAAA;YACF,CAAC,CAAC,CAAA;YAEF,MAAM,QAAQ,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAA;YAClD,MAAM,WAAW,GAAG,QAAQ,CAAC,MAAM,GAAG,QAAQ,CAAC,MAAM,CAAA;YAErD,kCAAkC;YAClC,IAAI,aAAa,GAAG,CAAC,CAAA;YACrB,MAAM,UAAU,GAAG,IAAI,CAAC,SAAS,EAAE,UAAU,EAAE,aAAa,CAAC,CAAA;YAC7D,IAAI,UAAU,CAAC,UAAU,CAAC,EAAE,CAAC;gBAC5B,IAAI,CAAC;oBACJ,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC,CAAA;oBAC5D,aAAa,GAAG,MAAM,EAAE,QAAQ,EAAE,OAAO,IAAI,CAAC,CAAA;gBAC/C,CAAC;gBAAC,MAAM,CAAC;oBACR,iBAAiB;gBAClB,CAAC;YACF,CAAC;YAED,IAAI,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBACzB,OAAO,EAAE,CAAC;oBACT,MAAM,EAAE,YAAY;oBACpB,OAAO,EAAE,mBAAmB;oBAC5B,cAAc,EAAE,QAAQ,CAAC,MAAM;oBAC/B,YAAY,EAAE,WAAW;oBACzB,iBAAiB,EAAE,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC;oBACnD,QAAQ;oBACR,qBAAqB,EAAE,oBAAoB;oBAC3C,UAAU,EAAE,qBAAqB;oBACjC,eAAe,EAAE,aAAa,IAAI,CAAC,CAAC,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC,gBAAgB;oBACvE,SAAS,EAAE,YAAY,CAAC,IAAI;oBAC5B,eAAe,EAAE,cAAc;iBAC/B,CAAC,CAAA;YACH,CAAC;YACD,OAAO,EAAE,CAAC;gBACT,MAAM,EAAE,IAAI;gBACZ,OAAO,EAAE,mBAAmB;gBAC5B,cAAc,EAAE,QAAQ,CAAC,MAAM;gBAC/B,YAAY,EAAE,WAAW;gBACzB,QAAQ;gBACR,qBAAqB,EAAE,oBAAoB;gBAC3C,SAAS,EAAE,YAAY,CAAC,IAAI;gBAC5B,eAAe,EAAE,cAAc;aAC/B,CAAC,CAAA;QACH,CAAC;QACD;YACC,OAAO,GAAG,CAAC,sCAAsC,UAAU,uBAAuB,CAAC,CAAA;IACrF,CAAC;AACF,CAAC"}
1
+ {"version":3,"file":"coverage-check.mjs","sourceRoot":"","sources":["../../../src/cli/commands/coverage-check.mjs"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"detect-runtime.d.mts","sourceRoot":"","sources":["../../../src/cli/commands/detect-runtime.mjs"],"names":[],"mappings":"AAqEA;;;GAGG;AACH,6CAHW,MAAM,WACN,MAAM,EAAE,8CA8DlB"}
1
+ {"version":3,"file":"detect-runtime.d.mts","sourceRoot":"","sources":["../../../src/cli/commands/detect-runtime.mjs"],"names":[],"mappings":"AAqEA;;;GAGG;AACH,6CAHW,MAAM,WACN,MAAM,EAAE,8CAuElB"}
@@ -78,23 +78,16 @@ export function cmdDetectRuntime(projectDir, _extra = []) {
78
78
  if (!projectDir)
79
79
  return err('Usage: apt-tools detect-runtime <project-dir>');
80
80
  const target = resolve(projectDir);
81
- // Detect runtime capabilities from project's package.json.
82
- const runtime = loadRuntimeCapabilities(target);
83
- // Discover bundled + user drivers.
84
- // __dirname-equivalent under ESM: walk up from this file to the framework
85
- // package root. fileURLToPath is portable across POSIX + Windows;
86
- // new URL(...).pathname returns '/C:/...' on Windows which resolve()
87
- // does not handle correctly.
88
- const frameworkRoot = fileURLToPath(new URL('../../..', import.meta.url));
89
- const bundled = discoverBundledDrivers(frameworkRoot);
90
- const user = discoverUserDrivers(target);
91
- const drivers = [...bundled, ...user];
92
- // Read user override from .aperant/config.json:verification.runtimes[].
81
+ // Read user config (used both for the monorepo walk + override).
82
+ let monorepoGlobs;
93
83
  let override = [];
94
84
  const configPath = join(target, '.aperant/config.json');
95
85
  if (existsSync(configPath)) {
96
86
  try {
97
87
  const cfg = JSON.parse(readFileSync(configPath, 'utf-8'));
88
+ if (Array.isArray(cfg?.verification?.monorepo_globs)) {
89
+ monorepoGlobs = cfg.verification.monorepo_globs.filter((x) => typeof x === 'string');
90
+ }
98
91
  if (Array.isArray(cfg?.verification?.runtimes)) {
99
92
  override = cfg.verification.runtimes.filter((x) => typeof x === 'string');
100
93
  }
@@ -103,6 +96,19 @@ export function cmdDetectRuntime(projectDir, _extra = []) {
103
96
  /* malformed config — ignore */
104
97
  }
105
98
  }
99
+ // Detect runtime capabilities from project's package.json + (optionally)
100
+ // monorepo `apps/*` walk. Default behaviour matches the canonical
101
+ // Aperant layout — adopters opt out via verification.monorepo_globs: [].
102
+ const runtime = loadRuntimeCapabilities(target, monorepoGlobs !== undefined ? { monorepo_globs: monorepoGlobs } : undefined);
103
+ // Discover bundled + user drivers.
104
+ // __dirname-equivalent under ESM: walk up from this file to the framework
105
+ // package root. fileURLToPath is portable across POSIX + Windows;
106
+ // new URL(...).pathname returns '/C:/...' on Windows which resolve()
107
+ // does not handle correctly.
108
+ const frameworkRoot = fileURLToPath(new URL('../../..', import.meta.url));
109
+ const bundled = discoverBundledDrivers(frameworkRoot);
110
+ const user = discoverUserDrivers(target);
111
+ const drivers = [...bundled, ...user];
106
112
  // Try resolving with the default minimum required capability.
107
113
  let selected = null;
108
114
  let fallback_attempts = [];
@@ -1 +1 @@
1
- {"version":3,"file":"detect-runtime.mjs","sourceRoot":"","sources":["../../../src/cli/commands/detect-runtime.mjs"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"detect-runtime.mjs","sourceRoot":"","sources":["../../../src/cli/commands/detect-runtime.mjs"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,OAAO,EAAE,UAAU,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,SAAS,CAAA;AAC/D,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AACzC,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAA;AACxC,OAAO,EAAE,GAAG,EAAE,EAAE,EAAE,MAAM,oBAAoB,CAAA;AAC5C,OAAO,EAAE,aAAa,EAAE,MAAM,8BAA8B,CAAA;AAC5D,OAAO,EAAE,uBAAuB,EAAE,MAAM,oCAAoC,CAAA;AAE5E,uFAAuF;AACvF,MAAM,6BAA6B,GAAG,CAAC,YAAY,CAAC,CAAA;AAEpD;;;;GAIG;AACH,SAAS,sBAAsB,CAAC,aAAa;IAC5C,MAAM,GAAG,GAAG,IAAI,CAAC,aAAa,EAAE,SAAS,CAAC,CAAA;IAC1C,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC;QAAE,OAAO,EAAE,CAAA;IAC/B,MAAM,SAAS,GAAG,EAAE,CAAA;IACpB,KAAK,MAAM,KAAK,IAAI,WAAW,CAAC,GAAG,EAAE,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC,EAAE,CAAC;QAC/D,IAAI,CAAC,KAAK,CAAC,WAAW,EAAE;YAAE,SAAQ;QAClC,MAAM,YAAY,GAAG,IAAI,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,EAAE,eAAe,CAAC,CAAA;QAC3D,IAAI,CAAC,UAAU,CAAC,YAAY,CAAC;YAAE,SAAQ;QACvC,IAAI,CAAC;YACJ,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,YAAY,EAAE,OAAO,CAAC,CAAC,CAAA;YAC9D,SAAS,CAAC,IAAI,CAAC,EAAE,GAAG,MAAM,EAAE,QAAQ,EAAE,SAAS,EAAE,CAAC,CAAA;QACnD,CAAC;QAAC,MAAM,CAAC;YACR,8BAA8B;QAC/B,CAAC;IACF,CAAC;IACD,OAAO,SAAS,CAAA;AACjB,CAAC;AAED;;;;GAIG;AACH,SAAS,mBAAmB,CAAC,UAAU;IACtC,MAAM,GAAG,GAAG,IAAI,CAAC,UAAU,EAAE,kBAAkB,CAAC,CAAA;IAChD,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC;QAAE,OAAO,EAAE,CAAA;IAC/B,MAAM,SAAS,GAAG,EAAE,CAAA;IACpB,KAAK,MAAM,KAAK,IAAI,WAAW,CAAC,GAAG,EAAE,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC,EAAE,CAAC;QAC/D,IAAI,CAAC,KAAK,CAAC,WAAW,EAAE;YAAE,SAAQ;QAClC,MAAM,YAAY,GAAG,IAAI,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,EAAE,eAAe,CAAC,CAAA;QAC3D,IAAI,CAAC,UAAU,CAAC,YAAY,CAAC;YAAE,SAAQ;QACvC,IAAI,CAAC;YACJ,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,YAAY,EAAE,OAAO,CAAC,CAAC,CAAA;YAC9D,SAAS,CAAC,IAAI,CAAC,EAAE,GAAG,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,CAAC,CAAA;QAChD,CAAC;QAAC,MAAM,CAAC;YACR,8BAA8B;QAC/B,CAAC;IACF,CAAC;IACD,OAAO,SAAS,CAAA;AACjB,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,gBAAgB,CAAC,UAAU,EAAE,MAAM,GAAG,EAAE;IACvD,IAAI,CAAC,UAAU;QAAE,OAAO,GAAG,CAAC,+CAA+C,CAAC,CAAA;IAC5E,MAAM,MAAM,GAAG,OAAO,CAAC,UAAU,CAAC,CAAA;IAElC,iEAAiE;IACjE,IAAI,aAAa,CAAA;IACjB,IAAI,QAAQ,GAAG,EAAE,CAAA;IACjB,MAAM,UAAU,GAAG,IAAI,CAAC,MAAM,EAAE,sBAAsB,CAAC,CAAA;IACvD,IAAI,UAAU,CAAC,UAAU,CAAC,EAAE,CAAC;QAC5B,IAAI,CAAC;YACJ,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC,CAAA;YACzD,IAAI,KAAK,CAAC,OAAO,CAAC,GAAG,EAAE,YAAY,EAAE,cAAc,CAAC,EAAE,CAAC;gBACtD,aAAa,GAAG,GAAG,CAAC,YAAY,CAAC,cAAc,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,OAAO,CAAC,KAAK,QAAQ,CAAC,CAAA;YACrF,CAAC;YACD,IAAI,KAAK,CAAC,OAAO,CAAC,GAAG,EAAE,YAAY,EAAE,QAAQ,CAAC,EAAE,CAAC;gBAChD,QAAQ,GAAG,GAAG,CAAC,YAAY,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,OAAO,CAAC,KAAK,QAAQ,CAAC,CAAA;YAC1E,CAAC;QACF,CAAC;QAAC,MAAM,CAAC;YACR,+BAA+B;QAChC,CAAC;IACF,CAAC;IAED,yEAAyE;IACzE,kEAAkE;IAClE,yEAAyE;IACzE,MAAM,OAAO,GAAG,uBAAuB,CACtC,MAAM,EACN,aAAa,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,cAAc,EAAE,aAAa,EAAE,CAAC,CAAC,CAAC,SAAS,CAC3E,CAAA;IAED,mCAAmC;IACnC,0EAA0E;IAC1E,kEAAkE;IAClE,qEAAqE;IACrE,6BAA6B;IAC7B,MAAM,aAAa,GAAG,aAAa,CAAC,IAAI,GAAG,CAAC,UAAU,EAAE,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAA;IACzE,MAAM,OAAO,GAAG,sBAAsB,CAAC,aAAa,CAAC,CAAA;IACrD,MAAM,IAAI,GAAG,mBAAmB,CAAC,MAAM,CAAC,CAAA;IACxC,MAAM,OAAO,GAAG,CAAC,GAAG,OAAO,EAAE,GAAG,IAAI,CAAC,CAAA;IAErC,8DAA8D;IAC9D,IAAI,QAAQ,GAAG,IAAI,CAAA;IACnB,IAAI,iBAAiB,GAAG,EAAE,CAAA;IAC1B,IAAI,CAAC;QACJ,MAAM,MAAM,GAAG,aAAa,CAAC;YAC5B,OAAO;YACP,OAAO;YACP,qBAAqB,EAAE,6BAA6B;YACpD,QAAQ;SACR,CAAC,CAAA;QACF,QAAQ,GAAG,MAAM,CAAC,QAAQ,CAAC,QAAQ,CAAA;QACnC,iBAAiB,GAAG,MAAM,CAAC,iBAAiB,CAAA;IAC7C,CAAC;IAAC,OAAO,UAAU,EAAE,CAAC;QACrB,iBAAiB,GAAG,UAAU,IAAI,KAAK,CAAC,OAAO,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAA;IAChG,CAAC;IAED,OAAO,EAAE,CAAC;QACT,MAAM,EAAE,IAAI;QACZ,OAAO,EAAE,gBAAgB;QACzB,UAAU,EAAE,MAAM;QAClB,OAAO;QACP,kBAAkB,EAAE,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;YACvC,QAAQ,EAAE,CAAC,CAAC,QAAQ;YACpB,OAAO,EAAE,CAAC,CAAC,OAAO;YAClB,QAAQ,EAAE,CAAC,CAAC,QAAQ;SACpB,CAAC,CAAC;QACH,kBAAkB,EAAE,QAAQ;QAC5B,iBAAiB;KACjB,CAAC,CAAA;AACH,CAAC"}
@@ -0,0 +1,84 @@
1
+ /**
2
+ * @typedef {Object} UserOutcome
3
+ * @property {string} id — synthesized positional ID (O1, O2, ...)
4
+ * @property {('electron'|'web'|'cli'|'api'|'electron+web')} surface
5
+ * @property {string} text — outcome prose (sans the surface tag and requires suffix)
6
+ * @property {number} [requires] — the digit captured from `*(requires ON N)*`, when present and valid
7
+ */
8
+ /**
9
+ * @typedef {Object} ValidationWarning
10
+ * @property {'unknown_requires_target'} kind
11
+ * @property {string} outcome_id — synthesized ID of the outcome carrying the bad `requires`
12
+ * @property {number} requires — the offending digit
13
+ * @property {string} reason — human-readable explanation
14
+ */
15
+ /**
16
+ * @typedef {Object} UserOutcomesParseResult
17
+ * @property {boolean} header_present
18
+ * @property {('absent'|'empty'|'empty-with-note'|'outcomes')} body_kind
19
+ * @property {string} [epic]
20
+ * @property {UserOutcome[]} outcomes
21
+ * @property {ValidationWarning[]} [validation_warnings]
22
+ */
23
+ /**
24
+ * Parse the `## User Outcomes` section from a spec.md string.
25
+ *
26
+ * @param {string} specContent
27
+ * @returns {UserOutcomesParseResult}
28
+ */
29
+ export function parseUserOutcomes(specContent: string): UserOutcomesParseResult;
30
+ /**
31
+ * Compute the coverage-check gate result for a parsed user-outcomes
32
+ * envelope. Per §ID-07 table — warn-not-block in v0.8.x, hard-block in
33
+ * v0.9.0.
34
+ *
35
+ * | header_present | body_kind | v0.8.x | v0.9.0 |
36
+ * |----------------|-------------------|--------|--------|
37
+ * | false | — | warn | block |
38
+ * | true | empty-with-note | pass | pass |
39
+ * | true | outcomes (≥1) | pass | pass |
40
+ * | true | empty | block | block |
41
+ *
42
+ * @param {UserOutcomesParseResult} parsed
43
+ * @param {string} frameworkVersion — semver string from the kernel's package.json (e.g. "0.8.6")
44
+ * @returns {('pass'|'warn'|'block')}
45
+ */
46
+ export function userOutcomesGateResult(parsed: UserOutcomesParseResult, frameworkVersion: string): ("pass" | "warn" | "block");
47
+ export type UserOutcome = {
48
+ /**
49
+ * — synthesized positional ID (O1, O2, ...)
50
+ */
51
+ id: string;
52
+ surface: ("electron" | "web" | "cli" | "api" | "electron+web");
53
+ /**
54
+ * — outcome prose (sans the surface tag and requires suffix)
55
+ */
56
+ text: string;
57
+ /**
58
+ * — the digit captured from `*(requires ON N)*`, when present and valid
59
+ */
60
+ requires?: number | undefined;
61
+ };
62
+ export type ValidationWarning = {
63
+ kind: "unknown_requires_target";
64
+ /**
65
+ * — synthesized ID of the outcome carrying the bad `requires`
66
+ */
67
+ outcome_id: string;
68
+ /**
69
+ * — the offending digit
70
+ */
71
+ requires: number;
72
+ /**
73
+ * — human-readable explanation
74
+ */
75
+ reason: string;
76
+ };
77
+ export type UserOutcomesParseResult = {
78
+ header_present: boolean;
79
+ body_kind: ("absent" | "empty" | "empty-with-note" | "outcomes");
80
+ epic?: string | undefined;
81
+ outcomes: UserOutcome[];
82
+ validation_warnings?: ValidationWarning[] | undefined;
83
+ };
84
+ //# sourceMappingURL=user-outcomes.d.mts.map
@@ -0,0 +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"}