@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
@@ -34,6 +34,141 @@ export function parseLcrProvenance(source) {
34
34
  }
35
35
  return out;
36
36
  }
37
+ export function checkCoverage(input) {
38
+ const referenced = new Set();
39
+ for (const n of input.lcrNodes) {
40
+ for (const p of n.provenance) {
41
+ if (p.kind === "story")
42
+ referenced.add(p.id);
43
+ }
44
+ }
45
+ const uncovered = [];
46
+ for (const s of input.specs) {
47
+ const id = `story-${s.storyId}`;
48
+ if (!referenced.has(id))
49
+ uncovered.push(id);
50
+ }
51
+ return {
52
+ uncovered,
53
+ coveredCount: input.specs.length - uncovered.length,
54
+ totalStories: input.specs.length,
55
+ ok: uncovered.length === 0,
56
+ };
57
+ }
58
+ /** A concrete surface route is satisfied by a router path when every segment
59
+ * matches — a param segment (`:slug`) matches anything. e.g. `/u/:handle`
60
+ * satisfies `/u/you`. */
61
+ export function routeSatisfies(routerPath, surfaceRoute) {
62
+ const a = routerPath.split("/").filter(Boolean);
63
+ const b = surfaceRoute.split("/").filter(Boolean);
64
+ if (a.length !== b.length)
65
+ return false;
66
+ return a.every((seg, i) => seg.startsWith(":") || seg === b[i]);
67
+ }
68
+ export function checkSurfaces(input) {
69
+ const resolves = (route) => input.routes.some((r) => routeSatisfies(r, route));
70
+ const dangling = input.surfaces.filter((s) => !resolves(s.route));
71
+ const homeByPersona = new Map();
72
+ for (const s of input.surfaces) {
73
+ if (s.home)
74
+ homeByPersona.set(s.persona, resolves(s.route) || homeByPersona.get(s.persona) === true);
75
+ }
76
+ const unreachablePersonas = [...homeByPersona.entries()].filter(([, ok]) => !ok).map(([p]) => p);
77
+ return { dangling, unreachablePersonas, surfaceCount: input.surfaces.length, ok: dangling.length === 0 && unreachablePersonas.length === 0 };
78
+ }
79
+ // ── PRD↔spec interdependency (0.21.x) — the deterministic floor under the
80
+ // conversational PRD/stories review. Every spec already anchors to a PRD
81
+ // section (`prd_ref.anchor`); we fingerprint that section's body so a PRD
82
+ // edit becomes *detectable* (staleness) and *attributable* (impact). No LLM:
83
+ // this tells you WHICH stories a PRD change touches; reconcile narrows to HOW.
84
+ // See docs/plans/prd-stories-interdependency.md. ────────────────────────────
85
+ /** Normalise an anchor body so cosmetic reflow (trailing ws, blank-line runs)
86
+ * doesn't churn the fingerprint — only semantic edits move it. */
87
+ export function normalizeAnchorBody(body) {
88
+ return body
89
+ .split(/\r?\n/)
90
+ .map((l) => l.replace(/\s+$/, ""))
91
+ .join("\n")
92
+ .replace(/\n{3,}/g, "\n\n")
93
+ .trim();
94
+ }
95
+ /** Dependency-free FNV-1a (64-bit) content hash → 16-hex. Not cryptographic;
96
+ * it only needs to answer "did this PRD section change?". Pure + deterministic
97
+ * across environments (no node:crypto, keeping this module IO-free). */
98
+ export function contentHash(s) {
99
+ let h = 0xcbf29ce484222325n;
100
+ const prime = 0x100000001b3n;
101
+ const mask = 0xffffffffffffffffn;
102
+ for (let i = 0; i < s.length; i++) {
103
+ h ^= BigInt(s.charCodeAt(i));
104
+ h = (h * prime) & mask;
105
+ }
106
+ return h.toString(16).padStart(16, "0");
107
+ }
108
+ /** Fingerprint of a PRD anchor's body (normalised). */
109
+ export function anchorHash(body) {
110
+ return contentHash(normalizeAnchorBody(body));
111
+ }
112
+ /**
113
+ * FRESHNESS — does each spec's recorded fingerprint still match its PRD anchor?
114
+ * `stale` = the anchor body changed since the spec was stamped (the rot we want
115
+ * to catch). Specs with no `prdAnchor` are skipped (orphans are `checkTrace`'s
116
+ * job); anchors that no longer exist are skipped here (dangling-prd-ref already
117
+ * flags those). Deterministic; advisory by default (cosmetic edits can move a
118
+ * section hash, so the caller decides whether to fail).
119
+ */
120
+ export function checkFreshness(input) {
121
+ const byAnchor = new Map(input.anchors.map((a) => [a.anchor, a.hash]));
122
+ const stale = [];
123
+ const unstamped = [];
124
+ let freshCount = 0;
125
+ for (const s of input.specs) {
126
+ if (!s.prdAnchor)
127
+ continue;
128
+ const current = byAnchor.get(s.prdAnchor);
129
+ if (current === undefined)
130
+ continue; // dangling anchor — checkTrace handles it
131
+ if (!s.prdSha) {
132
+ unstamped.push({ storyId: s.storyId, anchor: s.prdAnchor });
133
+ }
134
+ else if (s.prdSha !== current) {
135
+ stale.push({ storyId: s.storyId, anchor: s.prdAnchor, recorded: s.prdSha, current });
136
+ }
137
+ else {
138
+ freshCount++;
139
+ }
140
+ }
141
+ return { stale, unstamped, freshCount };
142
+ }
143
+ /**
144
+ * IMPACT — given the set of PRD anchors whose content changed (e.g. from a git
145
+ * diff between two PRD revisions), which stories link them? Forward direction
146
+ * (PRD→stories). The reverse (story→PRD) is the same link read backward: a
147
+ * changed story's `prdAnchor` is the PRD section to review.
148
+ */
149
+ export function computeImpact(input) {
150
+ const changed = new Set(input.changedAnchors);
151
+ const affected = input.specs
152
+ .filter((s) => s.prdAnchor && changed.has(s.prdAnchor))
153
+ .map((s) => ({ storyId: s.storyId, anchor: s.prdAnchor }));
154
+ return { affected };
155
+ }
156
+ /** Diff two PRD states (anchor→hash) → anchors that changed, were added, or
157
+ * removed. `changed` is what impact analysis keys on. */
158
+ export function diffPrdStates(before, after) {
159
+ const a = new Map(before.map((x) => [x.anchor, x.hash]));
160
+ const b = new Map(after.map((x) => [x.anchor, x.hash]));
161
+ const changed = [];
162
+ const added = [];
163
+ for (const [anchor, hash] of b) {
164
+ if (!a.has(anchor))
165
+ added.push(anchor);
166
+ else if (a.get(anchor) !== hash)
167
+ changed.push(anchor);
168
+ }
169
+ const removed = [...a.keys()].filter((anchor) => !b.has(anchor));
170
+ return { changed, added, removed };
171
+ }
37
172
  export function checkTrace(input) {
38
173
  const violations = [];
39
174
  const anchors = new Set(input.prdAnchors);
@@ -1 +1 @@
1
- {"version":3,"file":"check.js","sourceRoot":"","sources":["../../../src/commands/trace/check.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"check.js","sourceRoot":"","sources":["../../../src/commands/trace/check.ts"],"names":[],"mappings":"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"}
@@ -1,2 +1,7 @@
1
+ /** Insert/replace `sha:` inside a spec's `prd_ref:` block, preserving the file's
2
+ * formatting (targeted line edit, not a YAML round-trip that would reflow the
3
+ * hand-tweaked spec). Returns the new text, or the original if there's no
4
+ * prd_ref/anchor to stamp. */
5
+ export declare function setPrdSha(text: string, hash: string): string;
1
6
  export declare function trace(argv: string[], _cliVersion: string): Promise<void>;
2
7
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/commands/trace/index.ts"],"names":[],"mappings":"AAqCA,wBAAsB,KAAK,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAoD9E"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/commands/trace/index.ts"],"names":[],"mappings":"AAgDA;;;+BAG+B;AAC/B,wBAAgB,SAAS,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,MAAM,CAqB5D;AAgDD,wBAAsB,KAAK,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAuI9E"}
@@ -9,16 +9,99 @@
9
9
  *
10
10
  * Pure lint in ./check.ts; this is the IO shell.
11
11
  */
12
- import { existsSync, readFileSync, readdirSync, statSync } from "node:fs";
12
+ import { existsSync, readFileSync, readdirSync, statSync, writeFileSync } from "node:fs";
13
+ import { execFileSync } from "node:child_process";
13
14
  import { join, relative, resolve } from "node:path";
14
- import { listActiveSpecs } from "../refine/spec-yaml.js";
15
+ import YAML from "yaml";
16
+ import { listActiveSpecs, SPECS_DIR } from "../refine/spec-yaml.js";
15
17
  import { loadMockShapeConfig } from "../../lib/mock-shape.js";
16
18
  import { parsePrdInitiatives } from "../menu/prd.js";
17
- import { checkTrace, parseLcrProvenance } from "./check.js";
19
+ import { checkTrace, checkCoverage, checkSurfaces, checkFreshness, computeImpact, diffPrdStates, anchorHash, parseLcrProvenance, } from "./check.js";
20
+ /** Specs → their PRD link facts (anchor + recorded fingerprint). */
21
+ function loadSpecLinks(cwd) {
22
+ return listActiveSpecs(cwd).map((s) => ({
23
+ storyId: s.story_id,
24
+ prdAnchor: s.prd_ref?.anchor,
25
+ prdSha: s.prd_ref?.sha,
26
+ }));
27
+ }
28
+ /** Parse a PRD markdown string → current anchor fingerprints. */
29
+ function prdAnchorStates(md) {
30
+ return parsePrdInitiatives(md).map((i) => ({ anchor: i.anchor, hash: anchorHash(i.body) }));
31
+ }
32
+ /** Insert/replace `sha:` inside a spec's `prd_ref:` block, preserving the file's
33
+ * formatting (targeted line edit, not a YAML round-trip that would reflow the
34
+ * hand-tweaked spec). Returns the new text, or the original if there's no
35
+ * prd_ref/anchor to stamp. */
36
+ export function setPrdSha(text, hash) {
37
+ const lines = text.split(/\r?\n/);
38
+ const i = lines.findIndex((l) => /^\s*prd_ref:\s*$/.test(l));
39
+ if (i < 0)
40
+ return text;
41
+ const baseIndent = lines[i].match(/^\s*/)[0].length;
42
+ let anchorIdx = -1;
43
+ let shaIdx = -1;
44
+ let childIndent = " ";
45
+ for (let j = i + 1; j < lines.length; j++) {
46
+ const l = lines[j];
47
+ if (l.trim() === "")
48
+ continue;
49
+ const indent = l.match(/^\s*/)[0].length;
50
+ if (indent <= baseIndent)
51
+ break; // left the prd_ref block
52
+ childIndent = l.match(/^\s*/)[0];
53
+ if (/^\s*anchor:/.test(l))
54
+ anchorIdx = j;
55
+ if (/^\s*sha:/.test(l))
56
+ shaIdx = j;
57
+ }
58
+ if (shaIdx >= 0)
59
+ lines[shaIdx] = `${childIndent}sha: ${hash}`;
60
+ else if (anchorIdx >= 0)
61
+ lines.splice(anchorIdx + 1, 0, `${childIndent}sha: ${hash}`);
62
+ else
63
+ return text;
64
+ return lines.join("\n");
65
+ }
66
+ /** Read persona-surface declarations from the spec YAMLs (the `persona` +
67
+ * `surfaces` blocks the generator compiles into the mock). */
68
+ function readSpecSurfaces(cwd) {
69
+ const dir = resolve(cwd, SPECS_DIR);
70
+ if (!existsSync(dir))
71
+ return [];
72
+ const out = [];
73
+ for (const name of readdirSync(dir)) {
74
+ if (!/^story-.*\.yaml$/.test(name))
75
+ continue;
76
+ let doc;
77
+ try {
78
+ doc = YAML.parse(readFileSync(join(dir, name), "utf8")) ?? {};
79
+ }
80
+ catch {
81
+ continue;
82
+ }
83
+ const persona = doc.persona?.id;
84
+ if (!persona || !Array.isArray(doc.surfaces))
85
+ continue;
86
+ for (const s of doc.surfaces) {
87
+ if (s?.route)
88
+ out.push({ storyId: `story-${doc.story_id}`, persona, route: s.route, home: s.home === true });
89
+ }
90
+ }
91
+ return out;
92
+ }
93
+ /** Extract concrete route paths from a react-router file (path="..."). */
94
+ function readRouterPaths(file) {
95
+ if (!existsSync(file))
96
+ return [];
97
+ const src = readFileSync(file, "utf8");
98
+ return [...src.matchAll(/path\s*=\s*["'`]([^"'`]+)["'`]/g)].map((m) => m[1]).filter((p) => p && p !== "*");
99
+ }
18
100
  function val(args, flag) {
19
101
  const i = args.indexOf(flag);
20
102
  return i >= 0 ? args[i + 1] : undefined;
21
103
  }
104
+ const has = (args, flag) => args.includes(flag);
22
105
  /** Recursively collect .tsx files under `dir`, skipping any path in `exclude`. */
23
106
  function walkTsx(dir, exclude) {
24
107
  if (!existsSync(dir))
@@ -37,22 +120,35 @@ function walkTsx(dir, exclude) {
37
120
  return out;
38
121
  }
39
122
  export async function trace(argv, _cliVersion) {
40
- if (argv[0] !== "check") {
41
- console.error("usage: slowcook trace check [--prd <path>] [--cwd <dir>]");
123
+ const sub = argv[0];
124
+ if (sub === "stamp")
125
+ return runStamp(argv.slice(1));
126
+ if (sub === "impact")
127
+ return runImpact(argv.slice(1));
128
+ if (sub !== "check") {
129
+ console.error("usage: slowcook trace <check|stamp|impact> [--prd <path>] [--cwd <dir>]");
130
+ console.error(" check provenance + coverage + surface + freshness lints [--coverage] [--strict]");
131
+ console.error(" stamp record each spec's PRD-anchor fingerprint (prd_ref.sha)");
132
+ console.error(" impact which stories a PRD change touches [--since <gitref>] [--anchors a,b]");
42
133
  process.exit(64);
43
134
  }
44
135
  const rest = argv.slice(1);
45
136
  const cwd = resolve(val(rest, "--cwd") ?? ".");
137
+ const enforceCoverage = has(rest, "--coverage"); // make uncovered stories a hard failure
138
+ const strict = has(rest, "--strict"); // make stale specs a hard failure too
46
139
  // 1. Specs → requirement-provenance facts.
47
140
  const specNodes = listActiveSpecs(cwd).map((s) => ({
48
141
  storyId: s.story_id,
49
142
  prdAnchor: s.prd_ref?.anchor,
50
143
  sourceIssue: s.source_issue,
51
144
  }));
52
- // 2. PRD anchors (optional — absent = brownfield).
145
+ // 2. PRD anchors + fingerprints (optional — absent = brownfield).
53
146
  const prdRel = val(rest, "--prd") ?? "docs/PRD.md";
54
147
  const prdAbs = resolve(cwd, prdRel);
55
- const prdAnchors = existsSync(prdAbs) ? parsePrdInitiatives(readFileSync(prdAbs, "utf8")).map((i) => i.anchor) : [];
148
+ const prdStates = existsSync(prdAbs) ? prdAnchorStates(readFileSync(prdAbs, "utf8")) : [];
149
+ const prdAnchors = prdStates.map((s) => s.anchor);
150
+ // 2b. Freshness — has any spec's PRD anchor moved since it was stamped?
151
+ const freshness = checkFreshness({ specs: loadSpecLinks(cwd), anchors: prdStates });
56
152
  // 3. LCR nodes — mock screens + components (excluding the design system, which
57
153
  // is convention/brand provenance, not story-specific).
58
154
  const mock = loadMockShapeConfig(cwd);
@@ -68,19 +164,184 @@ export async function trace(argv, _cliVersion) {
68
164
  return;
69
165
  }
70
166
  const result = checkTrace({ specs: specNodes, prdAnchors, lcrNodes });
167
+ const coverage = checkCoverage({ specs: specNodes, lcrNodes });
168
+ // Persona/surface trace: the same forward+inverse rules on the persona surfaces
169
+ // declared in specs vs the routes the mock router actually exposes.
170
+ const specSurfaces = readSpecSurfaces(cwd);
171
+ const routerFile = mock.router_file ? resolve(cwd, mock.router_file) : "";
172
+ const routes = routerFile ? readRouterPaths(routerFile) : [];
173
+ const surfaceRes = checkSurfaces({ surfaces: specSurfaces, routes });
71
174
  console.log(`trace check: ${specNodes.length} specs · ${prdAnchors.length} PRD initiatives · ${lcrNodes.length} LCR files`);
72
175
  if (result.craft.length) {
73
176
  console.log(`\n ${result.craft.length} craft decision(s) — not in any requirement (ratify or note):`);
74
177
  for (const c of result.craft)
75
178
  console.log(` · ${c.file}: ${c.rationale}`);
76
179
  }
77
- if (result.ok) {
78
- console.log("\ntrace check: PASS every node has honest provenance.");
180
+ // Coverage (inverse): which stories have no surface in the mock. Informational
181
+ // by default (backend/infra stories legitimately have none); --coverage makes
182
+ // it a hard failure so a UI milestone can require every story to have a home.
183
+ if (specNodes.length > 0) {
184
+ if (coverage.ok) {
185
+ console.log(`\n coverage: every story has ≥1 LCR surface (${coverage.coveredCount}/${coverage.totalStories}).`);
186
+ }
187
+ else {
188
+ const stream = enforceCoverage ? console.error : console.log;
189
+ stream(`\n coverage: ${coverage.uncovered.length}/${coverage.totalStories} stories have NO LCR surface${enforceCoverage ? " (FAIL — --coverage)" : " (review — backend stories may be fine)"}:`);
190
+ for (const id of coverage.uncovered)
191
+ stream(` ✗ ${id}`);
192
+ }
193
+ }
194
+ // Persona/surface trace report (same rules as provenance, applied to surfaces).
195
+ if (specSurfaces.length > 0) {
196
+ if (surfaceRes.ok) {
197
+ console.log(`\n surfaces: ${surfaceRes.surfaceCount} persona surface(s), every declared route resolves to a real mock route.`);
198
+ }
199
+ else {
200
+ if (surfaceRes.dangling.length) {
201
+ console.error(`\n surfaces: ${surfaceRes.dangling.length} declared surface(s) with NO matching mock route (dangling):`);
202
+ for (const s of surfaceRes.dangling)
203
+ console.error(` ✗ ${s.persona} → ${s.route} (${s.storyId})`);
204
+ }
205
+ if (surfaceRes.unreachablePersonas.length) {
206
+ console.error(` surfaces: persona(s) whose home route is unreachable: ${surfaceRes.unreachablePersonas.join(", ")}`);
207
+ }
208
+ }
209
+ }
210
+ // Freshness (PRD↔spec): which specs were refined against a PRD section that has
211
+ // since changed. Advisory by default (a section hash also moves on cosmetic
212
+ // reflow); --strict makes it a hard failure. Unstamped specs are reported as a
213
+ // hint to run `trace stamp`, never as stale.
214
+ if (prdStates.length > 0) {
215
+ if (freshness.stale.length === 0 && freshness.unstamped.length === 0) {
216
+ console.log(`\n freshness: ${freshness.freshCount} spec(s) match their PRD anchor — none stale.`);
217
+ }
218
+ else {
219
+ if (freshness.stale.length) {
220
+ const stream = strict ? console.error : console.log;
221
+ stream(`\n freshness: ${freshness.stale.length} spec(s) STALE — their PRD section changed since stamping${strict ? " (FAIL — --strict)" : " (review / run reconcile)"}:`);
222
+ for (const s of freshness.stale)
223
+ stream(` ⚠ story-${s.storyId} ← §${s.anchor} (PRD moved)`);
224
+ }
225
+ if (freshness.unstamped.length) {
226
+ console.log(`\n freshness: ${freshness.unstamped.length} spec(s) unstamped — run \`slowcook trace stamp\` to baseline:`);
227
+ for (const s of freshness.unstamped)
228
+ console.log(` · story-${s.storyId} ← §${s.anchor}`);
229
+ }
230
+ }
231
+ }
232
+ const provenanceOk = result.ok;
233
+ const coverageOk = !enforceCoverage || coverage.ok;
234
+ const surfacesOk = surfaceRes.ok;
235
+ const freshnessOk = !strict || freshness.stale.length === 0;
236
+ if (provenanceOk && coverageOk && surfacesOk && freshnessOk) {
237
+ console.log("\ntrace check: PASS ✓ — every node has honest provenance" + (enforceCoverage ? ", every story has a surface," : "") + " and every persona surface resolves.");
79
238
  return;
80
239
  }
81
- console.error(`\ntrace check: FAIL ✗ — ${result.violations.length} provenance violation(s):`);
82
- for (const v of result.violations)
83
- console.error(` [${v.code}] ${v.subject}: ${v.detail}`);
240
+ if (!provenanceOk) {
241
+ console.error(`\ntrace check: FAIL ✗ — ${result.violations.length} provenance violation(s):`);
242
+ for (const v of result.violations)
243
+ console.error(` [${v.code}] ${v.subject}: ${v.detail}`);
244
+ }
245
+ if (!surfacesOk) {
246
+ console.error(`\ntrace check: FAIL ✗ — ${surfaceRes.dangling.length + surfaceRes.unreachablePersonas.length} persona-surface violation(s) (a spec promises a surface the mock doesn't expose).`);
247
+ }
248
+ if (enforceCoverage && !coverage.ok) {
249
+ console.error(`\ntrace check: FAIL ✗ — ${coverage.uncovered.length} story(ies) with no surface (--coverage).`);
250
+ }
251
+ if (strict && freshness.stale.length) {
252
+ console.error(`\ntrace check: FAIL ✗ — ${freshness.stale.length} stale spec(s) vs the PRD (--strict).`);
253
+ }
84
254
  process.exit(1);
85
255
  }
256
+ /** `slowcook trace stamp` — record each spec's PRD-anchor fingerprint into
257
+ * `prd_ref.sha`, baselining freshness. Run after a PRD↔spec set is agreed. */
258
+ async function runStamp(rest) {
259
+ const cwd = resolve(val(rest, "--cwd") ?? ".");
260
+ const prdRel = val(rest, "--prd") ?? "docs/PRD.md";
261
+ const prdAbs = resolve(cwd, prdRel);
262
+ if (!existsSync(prdAbs)) {
263
+ console.error(`trace stamp: no PRD at ${prdRel} — nothing to fingerprint.`);
264
+ process.exit(64);
265
+ }
266
+ const byAnchor = new Map(prdAnchorStates(readFileSync(prdAbs, "utf8")).map((s) => [s.anchor, s.hash]));
267
+ const specsDir = resolve(cwd, SPECS_DIR);
268
+ let stamped = 0;
269
+ let skipped = 0;
270
+ for (const spec of listActiveSpecs(cwd)) {
271
+ const anchor = spec.prd_ref?.anchor;
272
+ if (!anchor) {
273
+ skipped++;
274
+ continue;
275
+ }
276
+ const hash = byAnchor.get(anchor);
277
+ if (hash === undefined) {
278
+ console.log(` · story-${spec.story_id}: anchor §${anchor} not in PRD — skipped`);
279
+ skipped++;
280
+ continue;
281
+ }
282
+ const file = join(specsDir, `story-${spec.story_id}.yaml`);
283
+ const before = readFileSync(file, "utf8");
284
+ const after = setPrdSha(before, hash);
285
+ if (after !== before) {
286
+ writeFileSync(file, after);
287
+ stamped++;
288
+ }
289
+ }
290
+ console.log(`trace stamp: ${stamped} spec(s) stamped${skipped ? `, ${skipped} skipped (no prd_ref / unknown anchor)` : ""}.`);
291
+ }
292
+ /** `slowcook trace impact` — which stories does a PRD change touch? Changed
293
+ * anchors come from `--anchors a,b` or `--since <gitref>` (diff the PRD between
294
+ * that revision and the working tree). Read-only. */
295
+ async function runImpact(rest) {
296
+ const cwd = resolve(val(rest, "--cwd") ?? ".");
297
+ const prdRel = val(rest, "--prd") ?? "docs/PRD.md";
298
+ const prdAbs = resolve(cwd, prdRel);
299
+ const specs = loadSpecLinks(cwd);
300
+ let changedAnchors;
301
+ const explicit = val(rest, "--anchors");
302
+ const since = val(rest, "--since");
303
+ if (explicit) {
304
+ changedAnchors = explicit.split(",").map((a) => a.trim()).filter(Boolean);
305
+ }
306
+ else if (since) {
307
+ if (!existsSync(prdAbs)) {
308
+ console.error(`trace impact: no PRD at ${prdRel}.`);
309
+ process.exit(64);
310
+ }
311
+ let beforeMd;
312
+ try {
313
+ beforeMd = execFileSync("git", ["show", `${since}:${prdRel}`], { cwd, encoding: "utf8" });
314
+ }
315
+ catch {
316
+ console.error(`trace impact: couldn't read ${prdRel} at '${since}' (bad ref or path?).`);
317
+ process.exit(1);
318
+ }
319
+ const afterMd = readFileSync(prdAbs, "utf8");
320
+ const d = diffPrdStates(prdAnchorStates(beforeMd), prdAnchorStates(afterMd));
321
+ changedAnchors = d.changed;
322
+ const extra = [...d.added.map((a) => `+§${a}`), ...d.removed.map((a) => `-§${a}`)];
323
+ console.log(`trace impact: PRD diff ${since}..worktree — ${d.changed.length} changed${extra.length ? `, ${extra.join(" ")}` : ""}.`);
324
+ }
325
+ else {
326
+ console.error("trace impact: pass --since <gitref> or --anchors a,b");
327
+ process.exit(64);
328
+ }
329
+ const { affected } = computeImpact({ specs, changedAnchors });
330
+ if (changedAnchors.length === 0) {
331
+ console.log(" no PRD anchors changed — no stories impacted.");
332
+ return;
333
+ }
334
+ console.log(` changed anchors: ${changedAnchors.map((a) => `§${a}`).join(", ")}`);
335
+ if (affected.length === 0) {
336
+ console.log(" no stories link the changed anchors.");
337
+ return;
338
+ }
339
+ const byAnchor = new Map();
340
+ for (const a of affected)
341
+ (byAnchor.get(a.anchor) ?? byAnchor.set(a.anchor, []).get(a.anchor)).push(`story-${a.storyId}`);
342
+ console.log(`\n ${affected.length} story(ies) impacted:`);
343
+ for (const [anchor, stories] of byAnchor)
344
+ console.log(` §${anchor} → ${stories.join(", ")}`);
345
+ console.log(`\n next: \`slowcook reconcile --story <id>\` proposes the per-story edits (one hop, review before apply).`);
346
+ }
86
347
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/commands/trace/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/commands/trace/index.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"upsert-agent-docs.d.ts","sourceRoot":"","sources":["../../src/commands/upsert-agent-docs.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAiCG;AAmBH,wBAAgB,iBAAiB,IAAI,MAAM,CA0K1C;AAmGD,MAAM,WAAW,qBAAqB;IACpC,aAAa,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,SAAS,GAAG,WAAW,GAAG,WAAW,CAAA;KAAE,CAAC,CAAC;IACtF,MAAM,EAAE,OAAO,GAAG,iBAAiB,GAAG,WAAW,CAAC;IAClD,SAAS,EAAE,OAAO,GAAG,iBAAiB,GAAG,cAAc,CAAC;CACzD;AAED,wBAAgB,mBAAmB,CAAC,QAAQ,EAAE,MAAM,EAAE,IAAI,GAAE;IAAE,MAAM,CAAC,EAAE,OAAO,CAAA;CAAO,GAAG,qBAAqB,CAsB5G;AAID,wBAAsB,eAAe,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAUnE"}
1
+ {"version":3,"file":"upsert-agent-docs.d.ts","sourceRoot":"","sources":["../../src/commands/upsert-agent-docs.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAiCG;AAmBH,wBAAgB,iBAAiB,IAAI,MAAM,CAqL1C;AAmGD,MAAM,WAAW,qBAAqB;IACpC,aAAa,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,SAAS,GAAG,WAAW,GAAG,WAAW,CAAA;KAAE,CAAC,CAAC;IACtF,MAAM,EAAE,OAAO,GAAG,iBAAiB,GAAG,WAAW,CAAC;IAClD,SAAS,EAAE,OAAO,GAAG,iBAAiB,GAAG,cAAc,CAAC;CACzD;AAED,wBAAgB,mBAAmB,CAAC,QAAQ,EAAE,MAAM,EAAE,IAAI,GAAE;IAAE,MAAM,CAAC,EAAE,OAAO,CAAA;CAAO,GAAG,qBAAqB,CAsB5G;AAID,wBAAsB,eAAe,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAUnE"}
@@ -149,6 +149,17 @@ This is a HARD halt, and the integrity of it depends on you NOT bypassing it:
149
149
 
150
150
  The bot pipeline enforces the same gate via \`.github/workflows/slowcook-gate.yml\`; the local pipeline enforces it by your honouring this section.
151
151
 
152
+ ### Eye behind auth — dev-only preview (always available, design #192)
153
+
154
+ Most real surfaces sit behind auth, so \`eye\` (headless) and PM preview links can only reach public pages **unless the consumer ships a dev-only preview seam**. Every consumer should stand one up so eye converges EVERY route deterministically — gated so it can NEVER work in prod:
155
+
156
+ - **Two independent gates, both required.** Active only when a build-time flag is set (e.g. \`VITE_EYE_PREVIEW=1\` / \`EYE_PREVIEW=1\`) — never set in prod builds, so the branch is dead-stripped — AND the URL carries \`?__preview\`. If a backend is consulted it independently refuses the preview header unless \`NODE_ENV !== 'production'\` and the request origin is on a dev allowlist.
157
+ - **No real session, no PII.** In preview the app short-circuits auth to a fake "Preview User" and resolves data through the fixture seam (\`useScenarioFixture\` / a fixture-returning API stub) to committed mock fixtures — so screenshots are reproducible.
158
+ - **How eye uses it.** Pass the candidate as \`…/<route>?__preview[&scenario=<name>]\`. The mock *reference* needs the same bypass so BOTH sides render the authed route (else you compare login-vs-page).
159
+ - **Safety.** The prod build asserts the flag is unset (guard/CI); any token is dev-secret-signed, short-lived, and render-only (mints no real identity).
160
+
161
+ Stand this up once per consumer; thereafter eye is a real drift-guard on authed surfaces, not just public ones. See slowcook#192.
162
+
152
163
  ### Working alongside other agents (multi-agent choreography)
153
164
 
154
165
  When your work depends on another agent's still-open PR — common when one agent owns the app shell + another owns a feature inside it — follow this:
@@ -1 +1 @@
1
- {"version":3,"file":"upsert-agent-docs.js","sourceRoot":"","sources":["../../src/commands/upsert-agent-docs.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"upsert-agent-docs.js","sourceRoot":"","sources":["../../src/commands/upsert-agent-docs.ts"],"names":[],"mappings":"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"}