@slowcook-ai/cli 0.21.1 → 0.22.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 (69) hide show
  1. package/AGENTS.md +5 -0
  2. package/README.md +8 -4
  3. package/dist/cli.js +7 -0
  4. package/dist/cli.js.map +1 -1
  5. package/dist/commands/brand/index.d.ts.map +1 -1
  6. package/dist/commands/brand/index.js +18 -8
  7. package/dist/commands/brand/index.js.map +1 -1
  8. package/dist/commands/eye/index.d.ts.map +1 -1
  9. package/dist/commands/eye/index.js +16 -6
  10. package/dist/commands/eye/index.js.map +1 -1
  11. package/dist/commands/eye/plan.d.ts +41 -6
  12. package/dist/commands/eye/plan.d.ts.map +1 -1
  13. package/dist/commands/eye/plan.js +52 -9
  14. package/dist/commands/eye/plan.js.map +1 -1
  15. package/dist/commands/eye/run.d.ts +17 -1
  16. package/dist/commands/eye/run.d.ts.map +1 -1
  17. package/dist/commands/eye/run.js +38 -6
  18. package/dist/commands/eye/run.js.map +1 -1
  19. package/dist/commands/greenfield/index.d.ts.map +1 -1
  20. package/dist/commands/greenfield/index.js +33 -3
  21. package/dist/commands/greenfield/index.js.map +1 -1
  22. package/dist/commands/greenfield/status.d.ts +26 -5
  23. package/dist/commands/greenfield/status.d.ts.map +1 -1
  24. package/dist/commands/greenfield/status.js +28 -9
  25. package/dist/commands/greenfield/status.js.map +1 -1
  26. package/dist/commands/menu/assemble.d.ts.map +1 -1
  27. package/dist/commands/menu/assemble.js +6 -0
  28. package/dist/commands/menu/assemble.js.map +1 -1
  29. package/dist/commands/menu/index.d.ts.map +1 -1
  30. package/dist/commands/menu/index.js +42 -14
  31. package/dist/commands/menu/index.js.map +1 -1
  32. package/dist/commands/reconcile/index.d.ts +2 -0
  33. package/dist/commands/reconcile/index.d.ts.map +1 -0
  34. package/dist/commands/reconcile/index.js +171 -0
  35. package/dist/commands/reconcile/index.js.map +1 -0
  36. package/dist/commands/refine/spec-yaml.d.ts +26 -0
  37. package/dist/commands/refine/spec-yaml.d.ts.map +1 -1
  38. package/dist/commands/refine/spec-yaml.js +64 -3
  39. package/dist/commands/refine/spec-yaml.js.map +1 -1
  40. package/dist/commands/trace/check.d.ts +116 -0
  41. package/dist/commands/trace/check.d.ts.map +1 -1
  42. package/dist/commands/trace/check.js +135 -0
  43. package/dist/commands/trace/check.js.map +1 -1
  44. package/dist/commands/trace/index.d.ts +5 -0
  45. package/dist/commands/trace/index.d.ts.map +1 -1
  46. package/dist/commands/trace/index.js +273 -12
  47. package/dist/commands/trace/index.js.map +1 -1
  48. package/dist/commands/upsert-agent-docs.d.ts.map +1 -1
  49. package/dist/commands/upsert-agent-docs.js +11 -0
  50. package/dist/commands/upsert-agent-docs.js.map +1 -1
  51. package/dist/commands/vibe/app-gen.d.ts +43 -0
  52. package/dist/commands/vibe/app-gen.d.ts.map +1 -0
  53. package/dist/commands/vibe/app-gen.js +512 -0
  54. package/dist/commands/vibe/app-gen.js.map +1 -0
  55. package/dist/commands/vibe/index.d.ts.map +1 -1
  56. package/dist/commands/vibe/index.js +287 -2
  57. package/dist/commands/vibe/index.js.map +1 -1
  58. package/dist/commands/vibe/lcr-plan.d.ts +125 -0
  59. package/dist/commands/vibe/lcr-plan.d.ts.map +1 -0
  60. package/dist/commands/vibe/lcr-plan.js +155 -0
  61. package/dist/commands/vibe/lcr-plan.js.map +1 -0
  62. package/dist/commands/vibe/schema-gen.d.ts +52 -0
  63. package/dist/commands/vibe/schema-gen.d.ts.map +1 -0
  64. package/dist/commands/vibe/schema-gen.js +205 -0
  65. package/dist/commands/vibe/schema-gen.js.map +1 -0
  66. package/dist/commands.manifest.d.ts.map +1 -1
  67. package/dist/commands.manifest.js +10 -4
  68. package/dist/commands.manifest.js.map +1 -1
  69. package/package.json +8 -8
@@ -0,0 +1,171 @@
1
+ /**
2
+ * `slowcook reconcile` — the LLM half of PRD↔spec interdependency. When `trace
3
+ * impact` / `trace check` flags a spec as stale (its PRD section moved), reconcile
4
+ * takes that one spec + the changed PRD section and PROPOSES a corrected spec —
5
+ * the side-effects audit lifted from issue→test (refine) to PRD→spec.
6
+ *
7
+ * slowcook reconcile --story 019 [--prd docs/PRD.md] [--apply] [--dry-run]
8
+ *
9
+ * Contract (docs/plans/prd-stories-interdependency.md):
10
+ * - PROPOSE, don't apply. Default writes `specs/story-<id>.reconcile.yaml`
11
+ * (a proposal) + prints the contradictions; `--apply` accepts it.
12
+ * - ONE HOP. Reconciles this spec against its PRD section only; cross-impact
13
+ * on the PRD / other stories is reported, never acted on.
14
+ */
15
+ import { existsSync, readFileSync, writeFileSync } from "node:fs";
16
+ import { join, resolve } from "node:path";
17
+ import YAML from "yaml";
18
+ import { AnthropicClient, RECONCILE_SYSTEM, formatCostFooter } from "@slowcook-ai/llm-anthropic";
19
+ import { listActiveSpecs, SPECS_DIR, schemas, normalizeScenarioArrays } from "../refine/spec-yaml.js";
20
+ import { parsePrdInitiatives } from "../menu/prd.js";
21
+ import { anchorHash } from "../trace/check.js";
22
+ import { setPrdSha } from "../trace/index.js";
23
+ const DEFAULT_MODEL = "claude-opus-4-7";
24
+ function val(args, flag) {
25
+ const i = args.indexOf(flag);
26
+ return i >= 0 ? args[i + 1] : undefined;
27
+ }
28
+ const has = (args, flag) => args.includes(flag);
29
+ function parseOutput(raw) {
30
+ const stripped = raw.replace(/```json\s*|\s*```/g, "");
31
+ const first = stripped.indexOf("{");
32
+ if (first === -1)
33
+ throw new Error("reconcile: no JSON object in model response");
34
+ const parsed = JSON.parse(stripped.slice(first));
35
+ return {
36
+ contradictions: Array.isArray(parsed.contradictions) ? parsed.contradictions : [],
37
+ cross_impact: Array.isArray(parsed.cross_impact) ? parsed.cross_impact : [],
38
+ updated_spec_yaml: typeof parsed.updated_spec_yaml === "string" ? parsed.updated_spec_yaml : "",
39
+ };
40
+ }
41
+ export async function reconcile(argv, _cliVersion) {
42
+ const cwd = resolve(val(argv, "--cwd") ?? ".");
43
+ const storyId = val(argv, "--story")?.replace(/^story-/, "");
44
+ const prdRel = val(argv, "--prd") ?? "docs/PRD.md";
45
+ const apply = has(argv, "--apply");
46
+ const dryRun = has(argv, "--dry-run");
47
+ const model = val(argv, "--model") ?? DEFAULT_MODEL;
48
+ if (!storyId) {
49
+ console.error("usage: slowcook reconcile --story <id> [--prd <path>] [--apply] [--dry-run]");
50
+ process.exit(64);
51
+ }
52
+ const spec = listActiveSpecs(cwd).find((s) => s.story_id === storyId);
53
+ if (!spec) {
54
+ console.error(`reconcile: no active spec story-${storyId} in ${SPECS_DIR}/`);
55
+ process.exit(1);
56
+ }
57
+ const anchor = spec.prd_ref?.anchor;
58
+ if (!anchor) {
59
+ console.error(`reconcile: story-${storyId} has no prd_ref.anchor — nothing to reconcile against.`);
60
+ process.exit(1);
61
+ }
62
+ const prdAbs = resolve(cwd, prdRel);
63
+ if (!existsSync(prdAbs)) {
64
+ console.error(`reconcile: no PRD at ${prdRel}.`);
65
+ process.exit(1);
66
+ }
67
+ const init = parsePrdInitiatives(readFileSync(prdAbs, "utf8")).find((i) => i.anchor === anchor);
68
+ if (!init) {
69
+ console.error(`reconcile: PRD has no section §${anchor} (dangling prd_ref).`);
70
+ process.exit(1);
71
+ }
72
+ const specPath = join(resolve(cwd, SPECS_DIR), `story-${storyId}.yaml`);
73
+ const specText = readFileSync(specPath, "utf8");
74
+ const userMessage = [
75
+ `## Changed PRD section`,
76
+ `anchor: ${anchor}`,
77
+ `title: ${init.title}`,
78
+ "",
79
+ init.body,
80
+ "",
81
+ `## Spec to reconcile (story-${storyId})`,
82
+ "```yaml",
83
+ specText,
84
+ "```",
85
+ "",
86
+ "Reconcile per the system prompt; emit a single JSON object.",
87
+ ].join("\n");
88
+ console.log(`reconcile: story-${storyId} ← §${anchor} (model ${model})`);
89
+ if (dryRun) {
90
+ console.log("[dry-run] would call the model; skipping.");
91
+ return;
92
+ }
93
+ const apiKey = process.env["ANTHROPIC_API_KEY"];
94
+ if (!apiKey) {
95
+ console.error("reconcile: ANTHROPIC_API_KEY not set (or pass --dry-run).");
96
+ process.exit(1);
97
+ }
98
+ const llm = new AnthropicClient(apiKey);
99
+ const res = await llm.complete({
100
+ system: RECONCILE_SYSTEM,
101
+ cacheSystem: false,
102
+ model,
103
+ messages: [{ role: "user", content: userMessage }],
104
+ maxTokens: 8192,
105
+ });
106
+ let out;
107
+ try {
108
+ out = parseOutput(res.text);
109
+ }
110
+ catch (e) {
111
+ console.error(`reconcile: couldn't parse model output — ${e.message}`);
112
+ process.exit(1);
113
+ }
114
+ // Report — the contradictions are the "what changed", reviewable before apply.
115
+ if (out.contradictions.length === 0) {
116
+ console.log("\n no contradictions — the PRD change doesn't touch this spec's concerns.");
117
+ }
118
+ else {
119
+ console.log(`\n ${out.contradictions.length} contradiction(s):`);
120
+ for (const c of out.contradictions) {
121
+ console.log(` [${c.change ?? "?"}] ${c.path ?? "(?)"} — ${c.issue ?? ""}`);
122
+ if (c.current)
123
+ console.log(` was: ${String(c.current).slice(0, 160)}`);
124
+ }
125
+ }
126
+ if (out.cross_impact.length) {
127
+ console.log(`\n cross-impact (notes only — one hop, not acted on):`);
128
+ for (const n of out.cross_impact)
129
+ console.log(` → ${n}`);
130
+ }
131
+ console.log("\n" + formatCostFooter(res.costUsd, []));
132
+ if (!out.updated_spec_yaml.trim()) {
133
+ console.error("\nreconcile: model returned no updated spec — nothing to write.");
134
+ process.exit(1);
135
+ }
136
+ // Validate the proposed spec against the schema before doing anything with it.
137
+ let parsedDoc;
138
+ try {
139
+ parsedDoc = normalizeScenarioArrays(YAML.parse(out.updated_spec_yaml));
140
+ }
141
+ catch (e) {
142
+ console.error(`\nreconcile: proposed spec isn't valid YAML — ${e.message}`);
143
+ process.exit(1);
144
+ }
145
+ const check = schemas.Spec.safeParse(parsedDoc);
146
+ if (!check.success) {
147
+ console.error(`\nreconcile: proposed spec fails the spec schema (not applying):`);
148
+ console.error(" " + check.error.issues.slice(0, 5).map((i) => `${i.path.join(".")}: ${i.message}`).join("\n "));
149
+ // Still write it as a proposal so a human can fix it.
150
+ }
151
+ // Re-stamp the freshness fingerprint so an accepted spec is born fresh.
152
+ const stamped = setPrdSha(out.updated_spec_yaml, anchorHash(init.body));
153
+ if (apply) {
154
+ if (!check.success) {
155
+ console.error("\nreconcile: refusing to --apply an invalid spec. Proposal written instead.");
156
+ const proposalPath = join(resolve(cwd, SPECS_DIR), `story-${storyId}.reconcile.yaml`);
157
+ writeFileSync(proposalPath, stamped);
158
+ console.error(` proposal: ${SPECS_DIR}/story-${storyId}.reconcile.yaml`);
159
+ process.exit(1);
160
+ }
161
+ writeFileSync(specPath, stamped);
162
+ console.log(`\n✓ applied → ${SPECS_DIR}/story-${storyId}.yaml (re-stamped fresh). Review the diff before committing.`);
163
+ }
164
+ else {
165
+ const proposalPath = join(resolve(cwd, SPECS_DIR), `story-${storyId}.reconcile.yaml`);
166
+ writeFileSync(proposalPath, stamped);
167
+ console.log(`\n proposal written → ${SPECS_DIR}/story-${storyId}.reconcile.yaml`);
168
+ console.log(` review it, then: \`slowcook reconcile --story ${storyId} --apply\` (or diff & hand-merge).`);
169
+ }
170
+ }
171
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/commands/reconcile/index.ts"],"names":[],"mappings":"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"}
@@ -154,6 +154,14 @@ export declare function readIndex(repoRoot: string): SpecIndex;
154
154
  export declare function writeIndex(repoRoot: string, index: SpecIndex): void;
155
155
  export declare function readSpec(repoRoot: string, storyId: string): Spec;
156
156
  export declare function writeSpec(repoRoot: string, spec: Spec): string;
157
+ /**
158
+ * Coerce "helpfully structured" array entries back to strings, matching the
159
+ * Spec schema (acceptance_scenarios et al. are `string[]`). Agents — menu AND
160
+ * refine — emit a {given,when,then} BDD object for an entry even when told to
161
+ * emit strings; normalise at ingestion. Shared so both producers agree.
162
+ * Non-breaking: well-formed string entries pass through unchanged.
163
+ */
164
+ export declare function normalizeScenarioArrays<T extends Record<string, unknown>>(doc: T): T;
157
165
  export declare function listActiveSpecs(repoRoot: string): Spec[];
158
166
  /**
159
167
  * Allocate the next unused story ID (zero-padded 3 digits).
@@ -217,9 +225,27 @@ export declare const schemas: {
217
225
  fidelity: z.ZodOptional<z.ZodObject<{
218
226
  modes: z.ZodArray<z.ZodString>;
219
227
  }, z.core.$strip>>;
228
+ epic: z.ZodOptional<z.ZodString>;
229
+ persona: z.ZodOptional<z.ZodObject<{
230
+ id: z.ZodString;
231
+ label: z.ZodOptional<z.ZodString>;
232
+ chrome: z.ZodOptional<z.ZodEnum<{
233
+ member: "member";
234
+ public: "public";
235
+ admin: "admin";
236
+ }>>;
237
+ }, z.core.$strip>>;
238
+ surfaces: z.ZodOptional<z.ZodArray<z.ZodObject<{
239
+ route: z.ZodString;
240
+ name: z.ZodOptional<z.ZodString>;
241
+ persona: z.ZodOptional<z.ZodString>;
242
+ home: z.ZodOptional<z.ZodBoolean>;
243
+ states: z.ZodOptional<z.ZodArray<z.ZodString>>;
244
+ }, z.core.$strip>>>;
220
245
  prd_ref: z.ZodOptional<z.ZodObject<{
221
246
  file: z.ZodString;
222
247
  anchor: z.ZodString;
248
+ sha: z.ZodOptional<z.ZodString>;
223
249
  }, z.core.$strip>>;
224
250
  data_contract: z.ZodOptional<z.ZodObject<{
225
251
  entities: z.ZodOptional<z.ZodArray<z.ZodObject<{
@@ -1 +1 @@
1
- {"version":3,"file":"spec-yaml.d.ts","sourceRoot":"","sources":["../../../src/commands/refine/spec-yaml.ts"],"names":[],"mappings":"AASA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAEL,KAAK,IAAI,EACT,KAAK,SAAS,EACd,KAAK,cAAc,EACnB,KAAK,YAAY,EAClB,MAAM,mBAAmB,CAAC;AAE3B,+CAA+C;AAC/C,eAAO,MAAM,SAAS,UAAU,CAAC;AACjC,eAAO,MAAM,UAAU,QAAiC,CAAC;AAoCzD,eAAO,MAAM,mBAAmB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBA4E9B,CAAC;AA0EH,wBAAgB,SAAS,CAAC,QAAQ,EAAE,MAAM,GAAG,SAAS,CAWrD;AAED,wBAAgB,UAAU,CAAC,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE,SAAS,GAAG,IAAI,CAQnE;AAED,wBAAgB,QAAQ,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,IAAI,CAUhE;AAED,wBAAgB,SAAS,CAAC,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,GAAG,MAAM,CAK9D;AAED,wBAAgB,eAAe,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI,EAAE,CAiBxD;AAED;;;;;;;;;;GAUG;AACH,wBAAsB,WAAW,CAC/B,QAAQ,EAAE,MAAM,EAChB,KAAK,CAAC,EAAE,YAAY,GACnB,OAAO,CAAC,MAAM,CAAC,CAsBjB;AAED,kCAAkC;AAClC,eAAO,MAAM,OAAO;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAInB,CAAC;AAEF,0EAA0E;AAC1E,wBAAgB,aAAa,CAAC,IAAI,EAAE,IAAI,GAAG,cAAc,CASxD"}
1
+ {"version":3,"file":"spec-yaml.d.ts","sourceRoot":"","sources":["../../../src/commands/refine/spec-yaml.ts"],"names":[],"mappings":"AASA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAEL,KAAK,IAAI,EACT,KAAK,SAAS,EACd,KAAK,cAAc,EACnB,KAAK,YAAY,EAClB,MAAM,mBAAmB,CAAC;AAE3B,+CAA+C;AAC/C,eAAO,MAAM,SAAS,UAAU,CAAC;AACjC,eAAO,MAAM,UAAU,QAAiC,CAAC;AAoCzD,eAAO,MAAM,mBAAmB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBA4E9B,CAAC;AA0GH,wBAAgB,SAAS,CAAC,QAAQ,EAAE,MAAM,GAAG,SAAS,CAWrD;AAED,wBAAgB,UAAU,CAAC,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE,SAAS,GAAG,IAAI,CAQnE;AAED,wBAAgB,QAAQ,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,IAAI,CAUhE;AAED,wBAAgB,SAAS,CAAC,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,GAAG,MAAM,CAK9D;AAED;;;;;;GAMG;AACH,wBAAgB,uBAAuB,CAAC,CAAC,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,GAAG,EAAE,CAAC,GAAG,CAAC,CAkBpF;AAED,wBAAgB,eAAe,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI,EAAE,CAmBxD;AAED;;;;;;;;;;GAUG;AACH,wBAAsB,WAAW,CAC/B,QAAQ,EAAE,MAAM,EAChB,KAAK,CAAC,EAAE,YAAY,GACnB,OAAO,CAAC,MAAM,CAAC,CAsBjB;AAED,kCAAkC;AAClC,eAAO,MAAM,OAAO;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAInB,CAAC;AAEF,0EAA0E;AAC1E,wBAAgB,aAAa,CAAC,IAAI,EAAE,IAAI,GAAG,cAAc,CASxD"}
@@ -128,10 +128,40 @@ const SpecSchema = z.object({
128
128
  // Dimension-value tokens (light|dark|mobile|desktop); the eye expands them to
129
129
  // the (declared-or-full) product. Absent = eye uses its full default matrix.
130
130
  fidelity: z.object({ modes: z.array(z.string()) }).optional(),
131
+ // GUCDI — the primary persona this story serves in the whole-app LCR, and the
132
+ // UI surfaces (routes) it contributes. `menu` emits these; the LCR plan
133
+ // compiles them into the app's persona registry + navigation, and the
134
+ // persona-surface trace lint checks each route resolves to a real router path.
135
+ // GUCDI — the product THEME this story belongs to (an Epic in the EPSS test
136
+ // matrix). Groups acceptance-scenario test cases across personas — e.g. "Founder
137
+ // onboarding" spanning founder + operator. Absent = the LCR derives a label from
138
+ // the prd_ref anchor.
139
+ epic: z.string().optional(),
140
+ persona: z
141
+ .object({ id: z.string(), label: z.string().optional(), chrome: z.enum(["member", "public", "admin"]).optional() })
142
+ .optional(),
143
+ surfaces: z
144
+ .array(z.object({
145
+ route: z.string(),
146
+ name: z.string().optional(),
147
+ persona: z.string().optional(),
148
+ home: z.boolean().optional(),
149
+ states: z.array(z.string()).optional(),
150
+ }))
151
+ .optional(),
131
152
  // GUCDI — provenance anchor to a PRD initiative (greenfield only). OPTIONAL:
132
153
  // brownfield specs trace via source_issue instead, and `trace check` NEVER
133
154
  // demands a prd_ref (provenance is the union {issue|prd|convention|craft}).
134
- prd_ref: z.object({ file: z.string(), anchor: z.string() }).optional(),
155
+ prd_ref: z
156
+ .object({
157
+ file: z.string(),
158
+ anchor: z.string(),
159
+ /** Fingerprint of the anchor's PRD body at stamp time (`trace stamp`).
160
+ * Lets `trace check` detect when the PRD section moved out from under the
161
+ * spec. Absent = never stamped. See trace/check.ts `anchorHash`. */
162
+ sha: z.string().optional(),
163
+ })
164
+ .optional(),
135
165
  // GUCDI — the data contract this story needs, baked into the LCR's SQLite+ORM
136
166
  // schema and inherited by the backend (mock→prod becomes a data-source swap).
137
167
  data_contract: z
@@ -205,6 +235,35 @@ export function writeSpec(repoRoot, spec) {
205
235
  writeFileSync(path, YAML.stringify(spec, { lineWidth: 0 }), "utf8");
206
236
  return path;
207
237
  }
238
+ /**
239
+ * Coerce "helpfully structured" array entries back to strings, matching the
240
+ * Spec schema (acceptance_scenarios et al. are `string[]`). Agents — menu AND
241
+ * refine — emit a {given,when,then} BDD object for an entry even when told to
242
+ * emit strings; normalise at ingestion. Shared so both producers agree.
243
+ * Non-breaking: well-formed string entries pass through unchanged.
244
+ */
245
+ export function normalizeScenarioArrays(doc) {
246
+ if (!doc || typeof doc !== "object")
247
+ return doc;
248
+ const out = { ...doc };
249
+ for (const key of ["acceptance_scenarios", "preconditions", "invariants", "non_goals"]) {
250
+ const val = out[key];
251
+ if (!Array.isArray(val))
252
+ continue;
253
+ out[key] = val.map((entry) => {
254
+ if (typeof entry === "string")
255
+ return entry;
256
+ if (entry && typeof entry === "object") {
257
+ const o = entry;
258
+ const given = o.given ?? o.Given, when = o.when ?? o.When, then = o.then ?? o.Then;
259
+ if (typeof given === "string" && typeof when === "string" && typeof then === "string")
260
+ return `Given ${given}, When ${when}, Then ${then}`;
261
+ }
262
+ return `[NORMALIZED_OBJECT] ${JSON.stringify(entry)}`;
263
+ });
264
+ }
265
+ return out;
266
+ }
208
267
  export function listActiveSpecs(repoRoot) {
209
268
  const dir = join(repoRoot, SPECS_DIR);
210
269
  if (!existsSync(dir))
@@ -218,8 +277,10 @@ export function listActiveSpecs(repoRoot) {
218
277
  if (s.status === "active")
219
278
  specs.push(s);
220
279
  }
221
- catch {
222
- // ignore invalid specs; surface them elsewhere
280
+ catch (e) {
281
+ // (c) Don't silently swallow a dropped spec that looks like "0 stories"
282
+ // is a lie that costs hours. Surface it so the operator sees the real cause.
283
+ console.warn(` ⚠ skipping invalid spec ${f}: ${e instanceof Error ? e.message : String(e)}`);
223
284
  }
224
285
  }
225
286
  return specs;
@@ -1 +1 @@
1
- {"version":3,"file":"spec-yaml.js","sourceRoot":"","sources":["../../../src/commands/refine/spec-yaml.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,YAAY,EACZ,aAAa,EACb,UAAU,EACV,WAAW,EACX,SAAS,GACV,MAAM,SAAS,CAAC;AACjB,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAC1C,OAAO,IAAI,MAAM,MAAM,CAAC;AACxB,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EACL,cAAc,GAKf,MAAM,mBAAmB,CAAC;AAE3B,+CAA+C;AAC/C,MAAM,CAAC,MAAM,SAAS,GAAG,OAAO,CAAC;AACjC,MAAM,CAAC,MAAM,UAAU,GAAG,IAAI,CAAC,SAAS,EAAE,aAAa,CAAC,CAAC;AAEzD,MAAM,gBAAgB,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,OAAO,EAAE,QAAQ,EAAE,YAAY,CAAC,CAAC,CAAC;AAEnE,MAAM,oBAAoB,GAAG,CAAC,CAAC,MAAM,CAAC;IACpC,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE;IACjB,MAAM,EAAE,gBAAgB;IACxB,YAAY,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IACnC,IAAI,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,QAAQ,EAAE;IACpC,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAC9B,UAAU,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,QAAQ,EAAE;IAC1C,aAAa,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,QAAQ,EAAE;CAC1D,CAAC,CAAC;AAEH,MAAM,eAAe,GAAG,CAAC,CAAC,MAAM,CAAC;IAC/B,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAC9B,cAAc,EAAE,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC;IAC5B,OAAO,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,EAAE,EAAE,oBAAoB,CAAC;CACpD,CAAC,CAAC;AAEH,MAAM,oBAAoB,GAAG,CAAC,CAAC,IAAI,CAAC;IAClC,SAAS;IACT,UAAU;IACV,UAAU;IACV,UAAU;IACV,0BAA0B;CAC3B,CAAC,CAAC;AAEH,MAAM,kBAAkB,GAAG,CAAC,CAAC,MAAM,CAAC;IAClC,MAAM,EAAE,oBAAoB;IAC5B,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE;IACvB,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAClC,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAClC,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;CACjC,CAAC,CAAC;AAEH,MAAM,CAAC,MAAM,mBAAmB,GAAG,CAAC,CAAC,MAAM,CAAC;IAC1C,MAAM,EAAE,kBAAkB,CAAC,MAAM,CAAC,EAAE,GAAG,EAAE,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,QAAQ,EAAE;IACjE,SAAS,EAAE,kBAAkB,CAAC,MAAM,CAAC;QACnC,iBAAiB,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,QAAQ,EAAE;QACjD,mBAAmB,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,QAAQ,EAAE;QACnD,eAAe,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,QAAQ,EAAE;QAC/C,aAAa,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,QAAQ,EAAE;KAC9C,CAAC,CAAC,QAAQ,EAAE;IACb,MAAM,EAAE,kBAAkB,CAAC,MAAM,CAAC;QAChC,KAAK,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;KACjE,CAAC,CAAC,QAAQ,EAAE;IACb,IAAI,EAAE,kBAAkB,CAAC,MAAM,CAAC;QAC9B,YAAY,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,QAAQ,EAAE;KAC7C,CAAC,CAAC,QAAQ,EAAE;IACb,WAAW,EAAE,kBAAkB,CAAC,MAAM,CAAC;QACrC,OAAO,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,QAAQ,EAAE;KACrD,CAAC,CAAC,QAAQ,EAAE;IACb,aAAa,EAAE,kBAAkB,CAAC,MAAM,CAAC;QACvC,UAAU,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,QAAQ,EAAE;QAC1C,OAAO,EAAE,CAAC;aACP,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;aACvD,QAAQ,EAAE;KACd,CAAC,CAAC,QAAQ,EAAE;IACb,KAAK,EAAE,kBAAkB,CAAC,MAAM,CAAC;QAC/B,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;QAC9B,aAAa,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;QACpC,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;KAC7B,CAAC,CAAC,QAAQ,EAAE;IACb,SAAS,EAAE,kBAAkB,CAAC,MAAM,CAAC;QACnC,SAAS,EAAE,CAAC;aACT,KAAK,CACJ,CAAC,CAAC,MAAM,CAAC;YACP,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE;YAClB,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE;YAChB,cAAc,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE;YACtC,SAAS,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC,QAAQ,EAAE;SACxD,CAAC,CACH;aACA,QAAQ,EAAE;KACd,CAAC,CAAC,QAAQ,EAAE;IACb;;;;;;;;;;;;;;;;;;;;;;;;;OAyBG;IACH,QAAQ,EAAE,kBAAkB,CAAC,MAAM,CAAC;QAClC,SAAS,EAAE,CAAC;aACT,MAAM,CACL,CAAC,CAAC,MAAM,EAAE,EACV,CAAC,CAAC,MAAM,CAAC;YACP,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC;SACxC,CAAC,CACH;aACA,QAAQ,EAAE;KACd,CAAC,CAAC,QAAQ,EAAE;CACd,CAAC,CAAC;AAEH,MAAM,UAAU,GAAG,CAAC,CAAC,MAAM,CAAC;IAC1B,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAC9B,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE;IACpB,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE;IACjB,MAAM,EAAE,gBAAgB;IACxB,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE;IACtB,UAAU,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC;IAC/B,aAAa,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC;IAC9C,gBAAgB,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IACvC,QAAQ,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,OAAO,EAAE,QAAQ,EAAE,OAAO,CAAC,CAAC,CAAC,QAAQ,EAAE;IACzD,YAAY,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IACnC,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IACjC,MAAM,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,EAAE,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC;IAC7E,aAAa,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC;IAClC,UAAU,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC;IAC/B,YAAY,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC,QAAQ,EAAE;IAC7C,WAAW,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,QAAQ,EAAE;IACxD,6EAA6E;IAC7E,8EAA8E;IAC9E,6EAA6E;IAC7E,QAAQ,EAAE,CAAC,CAAC,MAAM,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,EAAE,CAAC,CAAC,QAAQ,EAAE;IAC7D,6EAA6E;IAC7E,2EAA2E;IAC3E,4EAA4E;IAC5E,OAAO,EAAE,CAAC,CAAC,MAAM,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,EAAE,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,QAAQ,EAAE;IACtE,8EAA8E;IAC9E,8EAA8E;IAC9E,aAAa,EAAE,CAAC;SACb,MAAM,CAAC;QACN,QAAQ,EAAE,CAAC;aACR,KAAK,CACJ,CAAC,CAAC,MAAM,CAAC;YACP,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE;YAChB,MAAM,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,EAAE;YAC5E,SAAS,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,QAAQ,EAAE;SAC1C,CAAC,CACH;aACA,QAAQ,EAAE;QACb,GAAG,EAAE,CAAC;aACH,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC;aACtF,QAAQ,EAAE;KACd,CAAC;SACD,QAAQ,EAAE;IACb,0EAA0E;IAC1E,gFAAgF;IAChF,cAAc,EAAE,CAAC;SACd,MAAM,CAAC,EAAE,WAAW,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,EAAE,QAAQ,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,EAAE,CAAC;SAC3E,QAAQ,EAAE;IACb,oBAAoB,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC;IACzC,SAAS,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC;IAC9B,aAAa,EAAE,CAAC;SACb,KAAK,CACJ,CAAC,CAAC,MAAM,CAAC;QACP,EAAE,EAAE,CAAC,CAAC,MAAM,EAAE;QACd,YAAY,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,SAAS,EAAE,SAAS,EAAE,YAAY,CAAC,CAAC;QAC1D,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;KAC5B,CAAC,CACH;SACA,QAAQ,EAAE;IACb,SAAS,EAAE,mBAAmB,CAAC,QAAQ,EAAE;IACzC;;;;;OAKG;IACH,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC;QACb,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE;QACrB,YAAY,EAAE,CAAC,CAAC,MAAM,EAAE;KACzB,CAAC,CAAC,QAAQ,EAAE;CACd,CAAC,CAAC;AAEH,MAAM,UAAU,SAAS,CAAC,QAAgB;IACxC,MAAM,IAAI,GAAG,IAAI,CAAC,QAAQ,EAAE,UAAU,CAAC,CAAC;IACxC,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC;QAAE,OAAO,cAAc,EAAE,CAAC;IAC/C,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC,CAAC;IACnD,MAAM,MAAM,GAAG,eAAe,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC;IAC9C,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;QACpB,MAAM,IAAI,KAAK,CACb,WAAW,UAAU,KAAK,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CACjF,CAAC;IACJ,CAAC;IACD,OAAO,MAAM,CAAC,IAAI,CAAC;AACrB,CAAC;AAED,MAAM,UAAU,UAAU,CAAC,QAAgB,EAAE,KAAgB;IAC3D,MAAM,IAAI,GAAG,IAAI,CAAC,QAAQ,EAAE,UAAU,CAAC,CAAC;IACxC,SAAS,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAC9C,aAAa,CACX,IAAI,EACJ,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,EAAE,SAAS,EAAE,CAAC,EAAE,CAAC,EACvC,MAAM,CACP,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,QAAQ,CAAC,QAAgB,EAAE,OAAe;IACxD,MAAM,IAAI,GAAG,IAAI,CAAC,QAAQ,EAAE,SAAS,EAAE,SAAS,OAAO,OAAO,CAAC,CAAC;IAChE,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC,CAAC;IACnD,MAAM,MAAM,GAAG,UAAU,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC;IACzC,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;QACpB,MAAM,IAAI,KAAK,CACb,mBAAmB,IAAI,KAAK,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CACnF,CAAC;IACJ,CAAC;IACD,OAAO,MAAM,CAAC,IAAY,CAAC;AAC7B,CAAC;AAED,MAAM,UAAU,SAAS,CAAC,QAAgB,EAAE,IAAU;IACpD,MAAM,IAAI,GAAG,IAAI,CAAC,QAAQ,EAAE,SAAS,EAAE,SAAS,IAAI,CAAC,QAAQ,OAAO,CAAC,CAAC;IACtE,SAAS,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAC9C,aAAa,CAAC,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,EAAE,SAAS,EAAE,CAAC,EAAE,CAAC,EAAE,MAAM,CAAC,CAAC;IACpE,OAAO,IAAI,CAAC;AACd,CAAC;AAED,MAAM,UAAU,eAAe,CAAC,QAAgB;IAC9C,MAAM,GAAG,GAAG,IAAI,CAAC,QAAQ,EAAE,SAAS,CAAC,CAAC;IACtC,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC;QAAE,OAAO,EAAE,CAAC;IAChC,MAAM,KAAK,GAAG,WAAW,CAAC,GAAG,CAAC,CAAC,MAAM,CACnC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,UAAU,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,CACrD,CAAC;IACF,MAAM,KAAK,GAAW,EAAE,CAAC;IACzB,KAAK,MAAM,CAAC,IAAI,KAAK,EAAE,CAAC;QACtB,MAAM,EAAE,GAAG,CAAC,CAAC,OAAO,CAAC,SAAS,EAAE,EAAE,CAAC,CAAC,OAAO,CAAC,SAAS,EAAE,EAAE,CAAC,CAAC;QAC3D,IAAI,CAAC;YACH,MAAM,CAAC,GAAG,QAAQ,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC;YACjC,IAAI,CAAC,CAAC,MAAM,KAAK,QAAQ;gBAAE,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAC3C,CAAC;QAAC,MAAM,CAAC;YACP,+CAA+C;QACjD,CAAC;IACH,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAED;;;;;;;;;;GAUG;AACH,MAAM,CAAC,KAAK,UAAU,WAAW,CAC/B,QAAgB,EAChB,KAAoB;IAEpB,MAAM,KAAK,GAAG,SAAS,CAAC,QAAQ,CAAC,CAAC;IAClC,MAAM,SAAS,GAAG,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC;SACzC,GAAG,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,QAAQ,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC;SAC7B,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;IAE5B,IAAI,YAAY,GAAa,EAAE,CAAC;IAChC,IAAI,KAAK,EAAE,CAAC;QACV,IAAI,CAAC;YACH,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,oBAAoB,CAAC,sBAAsB,CAAC,CAAC;YAC1E,YAAY,GAAG,QAAQ;iBACpB,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,yBAAyB,EAAE,EAAE,CAAC,CAAC;iBACpD,GAAG,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,QAAQ,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC;iBAC7B,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;QAC9B,CAAC;QAAC,MAAM,CAAC;YACP,qEAAqE;YACrE,+DAA+D;QACjE,CAAC;IACH,CAAC;IAED,MAAM,GAAG,GAAG,CAAC,GAAG,SAAS,EAAE,GAAG,YAAY,EAAE,CAAC,CAAC,CAAC;IAC/C,OAAO,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;AACvD,CAAC;AAED,kCAAkC;AAClC,MAAM,CAAC,MAAM,OAAO,GAAG;IACrB,SAAS,EAAE,eAAe;IAC1B,IAAI,EAAE,UAAU;IAChB,cAAc,EAAE,oBAAoB;CACrC,CAAC;AAEF,0EAA0E;AAC1E,MAAM,UAAU,aAAa,CAAC,IAAU;IACtC,OAAO;QACL,KAAK,EAAE,IAAI,CAAC,KAAK;QACjB,MAAM,EAAE,IAAI,CAAC,MAAM;QACnB,YAAY,EAAE,IAAI,CAAC,YAAY;QAC/B,OAAO,EAAE,IAAI,CAAC,oBAAoB,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC;QACpD,UAAU,EAAE,IAAI,CAAC,UAAU;QAC3B,aAAa,EAAE,IAAI,CAAC,aAAa;KAClC,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"spec-yaml.js","sourceRoot":"","sources":["../../../src/commands/refine/spec-yaml.ts"],"names":[],"mappings":"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"}
@@ -58,6 +58,122 @@ export interface TraceResult {
58
58
  * // @craft <rationale> (or // craft: <rationale>)
59
59
  */
60
60
  export declare function parseLcrProvenance(source: string): LcrProvenance[];
61
+ /**
62
+ * COVERAGE — the inverse of provenance. Provenance asks "does every surface
63
+ * trace UP to a story?"; coverage asks "does every story trace DOWN to a
64
+ * surface?". A story with zero LCR surfaces is either a real gap (a persona /
65
+ * requirement the mock forgot to build) or a legitimately surface-less backend
66
+ * story (DB schema, CI). The lint can't tell those apart on its own, so it
67
+ * REPORTS uncovered stories and only FAILS when the caller opts in
68
+ * (`--coverage`), or when a spec marks itself surface-bearing (future
69
+ * `expects_surface`). This is the dogfood fix for "the mock covered only one
70
+ * persona" — every story now gets checked for a home.
71
+ */
72
+ export interface CoverageResult {
73
+ /** story ids (story-NNN) that no LCR file references. */
74
+ uncovered: string[];
75
+ coveredCount: number;
76
+ totalStories: number;
77
+ ok: boolean;
78
+ }
79
+ export declare function checkCoverage(input: {
80
+ specs: SpecNode[];
81
+ lcrNodes: LcrNode[];
82
+ }): CoverageResult;
83
+ export interface SpecSurface {
84
+ storyId: string;
85
+ persona: string;
86
+ route: string;
87
+ home?: boolean;
88
+ }
89
+ /** A concrete surface route is satisfied by a router path when every segment
90
+ * matches — a param segment (`:slug`) matches anything. e.g. `/u/:handle`
91
+ * satisfies `/u/you`. */
92
+ export declare function routeSatisfies(routerPath: string, surfaceRoute: string): boolean;
93
+ export interface SurfaceResult {
94
+ /** declared surfaces whose route resolves to no real router path. */
95
+ dangling: SpecSurface[];
96
+ /** personas whose declared home route doesn't resolve (an unreachable persona). */
97
+ unreachablePersonas: string[];
98
+ surfaceCount: number;
99
+ ok: boolean;
100
+ }
101
+ export declare function checkSurfaces(input: {
102
+ surfaces: SpecSurface[];
103
+ routes: string[];
104
+ }): SurfaceResult;
105
+ /** Normalise an anchor body so cosmetic reflow (trailing ws, blank-line runs)
106
+ * doesn't churn the fingerprint — only semantic edits move it. */
107
+ export declare function normalizeAnchorBody(body: string): string;
108
+ /** Dependency-free FNV-1a (64-bit) content hash → 16-hex. Not cryptographic;
109
+ * it only needs to answer "did this PRD section change?". Pure + deterministic
110
+ * across environments (no node:crypto, keeping this module IO-free). */
111
+ export declare function contentHash(s: string): string;
112
+ /** Fingerprint of a PRD anchor's body (normalised). */
113
+ export declare function anchorHash(body: string): string;
114
+ /** Current PRD: anchor → fingerprint. */
115
+ export interface PrdAnchorState {
116
+ anchor: string;
117
+ hash: string;
118
+ }
119
+ /** A spec's recorded link to the PRD (anchor it was refined against + the
120
+ * fingerprint at stamp time, if stamped). */
121
+ export interface SpecLink {
122
+ storyId: string;
123
+ prdAnchor?: string;
124
+ /** `prd_ref.sha` recorded at stamp time; absent = never stamped. */
125
+ prdSha?: string;
126
+ }
127
+ export interface StaleSpec {
128
+ storyId: string;
129
+ anchor: string;
130
+ recorded: string;
131
+ current: string;
132
+ }
133
+ export interface FreshnessResult {
134
+ /** specs whose recorded fingerprint ≠ the current PRD anchor (the PRD moved). */
135
+ stale: StaleSpec[];
136
+ /** specs that link a PRD anchor but were never stamped (unknown freshness). */
137
+ unstamped: {
138
+ storyId: string;
139
+ anchor: string;
140
+ }[];
141
+ freshCount: number;
142
+ }
143
+ /**
144
+ * FRESHNESS — does each spec's recorded fingerprint still match its PRD anchor?
145
+ * `stale` = the anchor body changed since the spec was stamped (the rot we want
146
+ * to catch). Specs with no `prdAnchor` are skipped (orphans are `checkTrace`'s
147
+ * job); anchors that no longer exist are skipped here (dangling-prd-ref already
148
+ * flags those). Deterministic; advisory by default (cosmetic edits can move a
149
+ * section hash, so the caller decides whether to fail).
150
+ */
151
+ export declare function checkFreshness(input: {
152
+ specs: SpecLink[];
153
+ anchors: PrdAnchorState[];
154
+ }): FreshnessResult;
155
+ /**
156
+ * IMPACT — given the set of PRD anchors whose content changed (e.g. from a git
157
+ * diff between two PRD revisions), which stories link them? Forward direction
158
+ * (PRD→stories). The reverse (story→PRD) is the same link read backward: a
159
+ * changed story's `prdAnchor` is the PRD section to review.
160
+ */
161
+ export declare function computeImpact(input: {
162
+ specs: SpecLink[];
163
+ changedAnchors: string[];
164
+ }): {
165
+ affected: {
166
+ storyId: string;
167
+ anchor: string;
168
+ }[];
169
+ };
170
+ /** Diff two PRD states (anchor→hash) → anchors that changed, were added, or
171
+ * removed. `changed` is what impact analysis keys on. */
172
+ export declare function diffPrdStates(before: PrdAnchorState[], after: PrdAnchorState[]): {
173
+ changed: string[];
174
+ added: string[];
175
+ removed: string[];
176
+ };
61
177
  export declare function checkTrace(input: {
62
178
  specs: SpecNode[];
63
179
  /** PRD initiative anchors. Empty = no PRD (brownfield) → prd-ref checks skipped. */
@@ -1 +1 @@
1
- {"version":3,"file":"check.d.ts","sourceRoot":"","sources":["../../../src/commands/trace/check.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAEH,MAAM,MAAM,aAAa,GACrB;IAAE,IAAI,EAAE,OAAO,CAAC;IAAC,EAAE,EAAE,MAAM,CAAA;CAAE,GAC7B;IAAE,IAAI,EAAE,YAAY,CAAC;IAAC,GAAG,EAAE,MAAM,CAAA;CAAE,GACnC;IAAE,IAAI,EAAE,OAAO,CAAC;IAAC,SAAS,EAAE,MAAM,CAAA;CAAE,CAAC;AAEzC,2DAA2D;AAC3D,MAAM,WAAW,QAAQ;IACvB,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,kFAAkF;AAClF,MAAM,WAAW,OAAO;IACtB,IAAI,EAAE,MAAM,CAAC;IACb,UAAU,EAAE,aAAa,EAAE,CAAC;CAC7B;AAED,MAAM,MAAM,SAAS,GACjB,kBAAkB,GAClB,aAAa,GACb,YAAY,GACZ,oBAAoB,CAAC;AAEzB,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,SAAS,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,WAAW;IAC1B,UAAU,EAAE,cAAc,EAAE,CAAC;IAC7B,6EAA6E;IAC7E,KAAK,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,MAAM,CAAA;KAAE,EAAE,CAAC;IAC7C,EAAE,EAAE,OAAO,CAAC;CACb;AAED;;;;;;GAMG;AACH,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,MAAM,GAAG,aAAa,EAAE,CAYlE;AAED,wBAAgB,UAAU,CAAC,KAAK,EAAE;IAChC,KAAK,EAAE,QAAQ,EAAE,CAAC;IAClB,oFAAoF;IACpF,UAAU,EAAE,MAAM,EAAE,CAAC;IACrB,QAAQ,EAAE,OAAO,EAAE,CAAC;CACrB,GAAG,WAAW,CAiDd"}
1
+ {"version":3,"file":"check.d.ts","sourceRoot":"","sources":["../../../src/commands/trace/check.ts"],"names":[],"mappings":"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"}