@encore-os/eos-spec 0.7.0 → 0.9.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 (83) hide show
  1. package/dist/commands/archive.js +57 -3
  2. package/dist/commands/archive.js.map +1 -1
  3. package/dist/commands/close-out.d.ts +2 -0
  4. package/dist/commands/close-out.js +167 -0
  5. package/dist/commands/close-out.js.map +1 -0
  6. package/dist/commands/conformance.js +20 -1
  7. package/dist/commands/conformance.js.map +1 -1
  8. package/dist/commands/create.js +25 -4
  9. package/dist/commands/create.js.map +1 -1
  10. package/dist/commands/metrics.js +15 -0
  11. package/dist/commands/metrics.js.map +1 -1
  12. package/dist/commands/run.d.ts +10 -0
  13. package/dist/commands/run.js +230 -0
  14. package/dist/commands/run.js.map +1 -0
  15. package/dist/commands/validate.d.ts +7 -0
  16. package/dist/commands/validate.js +46 -7
  17. package/dist/commands/validate.js.map +1 -1
  18. package/dist/commands/walkthrough.d.ts +2 -0
  19. package/dist/commands/walkthrough.js +76 -0
  20. package/dist/commands/walkthrough.js.map +1 -0
  21. package/dist/index.d.ts +1 -0
  22. package/dist/index.js +15 -0
  23. package/dist/index.js.map +1 -1
  24. package/dist/lib/ai-call.d.ts +12 -0
  25. package/dist/lib/ai-call.js +6 -0
  26. package/dist/lib/ai-call.js.map +1 -1
  27. package/dist/lib/closeout-core.d.ts +46 -0
  28. package/dist/lib/closeout-core.js +34 -0
  29. package/dist/lib/closeout-core.js.map +1 -0
  30. package/dist/lib/closeout-predicate.d.ts +36 -0
  31. package/dist/lib/closeout-predicate.js +130 -0
  32. package/dist/lib/closeout-predicate.js.map +1 -0
  33. package/dist/lib/cost.js +7 -0
  34. package/dist/lib/cost.js.map +1 -1
  35. package/dist/lib/events.d.ts +15 -1
  36. package/dist/lib/events.js.map +1 -1
  37. package/dist/lib/frontmatter.d.ts +38 -0
  38. package/dist/lib/frontmatter.js +76 -0
  39. package/dist/lib/frontmatter.js.map +1 -1
  40. package/dist/lib/gate-executor.d.ts +80 -0
  41. package/dist/lib/gate-executor.js +311 -0
  42. package/dist/lib/gate-executor.js.map +1 -0
  43. package/dist/lib/llm-health.d.ts +28 -0
  44. package/dist/lib/llm-health.js +46 -0
  45. package/dist/lib/llm-health.js.map +1 -0
  46. package/dist/lib/metrics.d.ts +26 -0
  47. package/dist/lib/metrics.js +35 -0
  48. package/dist/lib/metrics.js.map +1 -1
  49. package/dist/lib/next-action.d.ts +10 -4
  50. package/dist/lib/next-action.js +10 -4
  51. package/dist/lib/next-action.js.map +1 -1
  52. package/dist/lib/ollama-embed.d.ts +5 -0
  53. package/dist/lib/ollama-embed.js +5 -0
  54. package/dist/lib/ollama-embed.js.map +1 -1
  55. package/dist/lib/output.d.ts +3 -0
  56. package/dist/lib/output.js +3 -0
  57. package/dist/lib/output.js.map +1 -1
  58. package/dist/lib/pipeline-config.js +10 -0
  59. package/dist/lib/pipeline-config.js.map +1 -1
  60. package/dist/lib/pipeline-map.js +9 -0
  61. package/dist/lib/pipeline-map.js.map +1 -1
  62. package/dist/lib/precedent-search.d.ts +1 -0
  63. package/dist/lib/precedent-search.js +19 -2
  64. package/dist/lib/precedent-search.js.map +1 -1
  65. package/dist/lib/predicate-registry.js +7 -0
  66. package/dist/lib/predicate-registry.js.map +1 -1
  67. package/dist/lib/run-pipeline.d.ts +118 -0
  68. package/dist/lib/run-pipeline.js +106 -0
  69. package/dist/lib/run-pipeline.js.map +1 -0
  70. package/dist/lib/scorecard.js +9 -0
  71. package/dist/lib/scorecard.js.map +1 -1
  72. package/dist/lib/spec-pure.d.ts +69 -4
  73. package/dist/lib/spec-pure.js +125 -15
  74. package/dist/lib/spec-pure.js.map +1 -1
  75. package/dist/lib/specs.d.ts +3 -3
  76. package/dist/lib/specs.js +43 -20
  77. package/dist/lib/specs.js.map +1 -1
  78. package/dist/lib/version.d.ts +1 -1
  79. package/dist/lib/version.js +1 -1
  80. package/dist/lib/walkthrough-coverage.d.ts +81 -0
  81. package/dist/lib/walkthrough-coverage.js +111 -0
  82. package/dist/lib/walkthrough-coverage.js.map +1 -0
  83. package/package.json +1 -1
@@ -16,6 +16,9 @@ export declare const ErrorCode: {
16
16
  readonly INVALID_ARGUMENT: "INVALID_ARGUMENT";
17
17
  readonly SCOPE_REQUIRED: "SCOPE_REQUIRED";
18
18
  readonly VALIDATION_FAILED: "VALIDATION_FAILED";
19
+ /** Two or more primary specs resolve to the same id (issue #27) — surfaced by
20
+ * `validate` as a hard error instead of the old silent lowest-path-wins dedupe. */
21
+ readonly DUPLICATE_SPEC_ID: "DUPLICATE_SPEC_ID";
19
22
  readonly SUBPROCESS_ERROR: "SUBPROCESS_ERROR";
20
23
  readonly IO_ERROR: "IO_ERROR";
21
24
  readonly INTERNAL: "INTERNAL";
@@ -9,6 +9,9 @@ export const ErrorCode = {
9
9
  INVALID_ARGUMENT: 'INVALID_ARGUMENT',
10
10
  SCOPE_REQUIRED: 'SCOPE_REQUIRED',
11
11
  VALIDATION_FAILED: 'VALIDATION_FAILED',
12
+ /** Two or more primary specs resolve to the same id (issue #27) — surfaced by
13
+ * `validate` as a hard error instead of the old silent lowest-path-wins dedupe. */
14
+ DUPLICATE_SPEC_ID: 'DUPLICATE_SPEC_ID',
12
15
  SUBPROCESS_ERROR: 'SUBPROCESS_ERROR',
13
16
  IO_ERROR: 'IO_ERROR',
14
17
  INTERNAL: 'INTERNAL',
@@ -1 +1 @@
1
- {"version":3,"file":"output.js","sourceRoot":"","sources":["../../src/lib/output.ts"],"names":[],"mappings":"AASA;;;;GAIG;AACH,MAAM,CAAC,MAAM,SAAS,GAAG;IACvB,cAAc,EAAE,gBAAgB;IAChC,YAAY,EAAE,cAAc;IAC5B,gBAAgB,EAAE,kBAAkB;IACpC,cAAc,EAAE,gBAAgB;IAChC,iBAAiB,EAAE,mBAAmB;IACtC,gBAAgB,EAAE,kBAAkB;IACpC,QAAQ,EAAE,UAAU;IACpB,QAAQ,EAAE,UAAU;CACZ,CAAC;AAIX,MAAM,UAAU,gBAAgB,CAAC,GAAY;IAC3C,MAAM,IAAI,GAAG,GAAG,CAAC,MAAM,IAAI,GAAG,CAAC;IAC/B,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,EAAiB,CAAC;IACxC,OAAO;QACL,IAAI,EAAE,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC;QACxB,KAAK,EAAE,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC;QAC1B,QAAQ,EAAE,IAAI,CAAC,QAAQ;QACvB,MAAM,EAAE,IAAI,CAAC,MAAM;KACpB,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,IAAI,CAClB,MAAqB,EACrB,OAMC;IAED,IAAI,MAAM,CAAC,IAAI,EAAE,CAAC;QAChB,MAAM,QAAQ,GAAsF;YAClG,EAAE,EAAE,OAAO,CAAC,EAAE;YACd,IAAI,EAAE,OAAO,CAAC,IAAI,IAAI,IAAI;SAC3B,CAAC;QACF,IAAI,OAAO,CAAC,KAAK;YAAE,QAAQ,CAAC,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC;QAClD,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC,SAAS,CAAC,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC;IACjE,CAAC;SAAM,IAAI,OAAO,CAAC,IAAI,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC;QACzC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,OAAO,CAAC,IAAI,IAAI,CAAC,CAAC;IAC5C,CAAC;IACD,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,QAAQ,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AACzD,CAAC;AAED,MAAM,UAAU,cAAc,CAAC,MAAqB,EAAE,IAAY;IAChE,IAAI,CAAC,MAAM,CAAC,IAAI,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC;QAClC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,IAAI,IAAI,CAAC,CAAC;IACpC,CAAC;AACH,CAAC"}
1
+ {"version":3,"file":"output.js","sourceRoot":"","sources":["../../src/lib/output.ts"],"names":[],"mappings":"AASA;;;;GAIG;AACH,MAAM,CAAC,MAAM,SAAS,GAAG;IACvB,cAAc,EAAE,gBAAgB;IAChC,YAAY,EAAE,cAAc;IAC5B,gBAAgB,EAAE,kBAAkB;IACpC,cAAc,EAAE,gBAAgB;IAChC,iBAAiB,EAAE,mBAAmB;IACtC;wFACoF;IACpF,iBAAiB,EAAE,mBAAmB;IACtC,gBAAgB,EAAE,kBAAkB;IACpC,QAAQ,EAAE,UAAU;IACpB,QAAQ,EAAE,UAAU;CACZ,CAAC;AAIX,MAAM,UAAU,gBAAgB,CAAC,GAAY;IAC3C,MAAM,IAAI,GAAG,GAAG,CAAC,MAAM,IAAI,GAAG,CAAC;IAC/B,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,EAAiB,CAAC;IACxC,OAAO;QACL,IAAI,EAAE,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC;QACxB,KAAK,EAAE,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC;QAC1B,QAAQ,EAAE,IAAI,CAAC,QAAQ;QACvB,MAAM,EAAE,IAAI,CAAC,MAAM;KACpB,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,IAAI,CAClB,MAAqB,EACrB,OAMC;IAED,IAAI,MAAM,CAAC,IAAI,EAAE,CAAC;QAChB,MAAM,QAAQ,GAAsF;YAClG,EAAE,EAAE,OAAO,CAAC,EAAE;YACd,IAAI,EAAE,OAAO,CAAC,IAAI,IAAI,IAAI;SAC3B,CAAC;QACF,IAAI,OAAO,CAAC,KAAK;YAAE,QAAQ,CAAC,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC;QAClD,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC,SAAS,CAAC,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC;IACjE,CAAC;SAAM,IAAI,OAAO,CAAC,IAAI,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC;QACzC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,OAAO,CAAC,IAAI,IAAI,CAAC,CAAC;IAC5C,CAAC;IACD,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,QAAQ,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AACzD,CAAC;AAED,MAAM,UAAU,cAAc,CAAC,MAAqB,EAAE,IAAY;IAChE,IAAI,CAAC,MAAM,CAAC,IAAI,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC;QAClC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,IAAI,IAAI,CAAC,CAAC;IACpC,CAAC;AACH,CAAC"}
@@ -161,6 +161,16 @@ export const ENCORE1_PIPELINE_SCHEMA = {
161
161
  // reach tasks_generated. Uses `hasAcceptanceCriteria` (NOT testsGeneratedOrProven,
162
162
  // which has opposite polarity). Cap applies when `unless` returns FALSE.
163
163
  { unless: 'hasAcceptanceCriteria', capBelow: 'tasks_generated' },
164
+ // UX-review cap: a UI-bearing spec with no UX sign-off (the `<!-- ux-reviewed: -->`
165
+ // marker OR a `{ID}-UX-REVIEW.md` file) has not passed ux_reviewed, so later
166
+ // artifacts (plan/tasks) cannot lift its stage to or beyond it. The
167
+ // `hasUxSignoffWhenUiBearing` predicate is satisfied (cap does NOT apply) for
168
+ // non-UI specs and for UI specs carrying an explicit `<!-- ui-gate-waived: -->`
169
+ // escape hatch, so only a genuinely UI-bearing, un-waived, un-reviewed spec is
170
+ // held at the prior status. Global (no whenRegulated) — UX debt is not
171
+ // regulated-core-specific. Builder layout omits ux_reviewed entirely, so the
172
+ // equivalent cap there can never apply (see BUILDER_PIPELINE_SCHEMA).
173
+ { unless: 'hasUxSignoffWhenUiBearing', capBelow: 'ux_reviewed' },
164
174
  ],
165
175
  // #1593 supersession: once later artifacts have lifted the computed stage past a
166
176
  // soft early gate, the navigator stops re-surfacing that gate (e.g. a missing
@@ -1 +1 @@
1
- {"version":3,"file":"pipeline-config.js","sourceRoot":"","sources":["../../src/lib/pipeline-config.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"pipeline-config.js","sourceRoot":"","sources":["../../src/lib/pipeline-config.ts"],"names":[],"mappings":"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"}
@@ -216,11 +216,20 @@ export function legacyComputeStage(spec) {
216
216
  // (scripts/specs/validate-pipeline-status.ts) requires acceptance_criteria
217
217
  // at tasks_generated. A spec with a tasks file but no ACs therefore cannot
218
218
  // honestly reach tasks_generated.
219
+ // • UX-review cap: a UI-bearing spec without a UX sign-off (the
220
+ // `<!-- ux-reviewed: -->` marker or a `{ID}-UX-REVIEW.md` file, both folded into
221
+ // `hasUxSignoff`) has not passed ux_reviewed, so later artifacts (plan/tasks)
222
+ // cannot lift its stage to or beyond it. An explicit `<!-- ui-gate-waived: -->`
223
+ // marker opts a UI spec out. Kept in lockstep with ENCORE1_PIPELINE_SCHEMA's
224
+ // `hasUxSignoffWhenUiBearing` cap so the config build ≡ legacy.
219
225
  const caps = [];
220
226
  if (spec.signals.isRegulated && !spec.signals.hasResearch)
221
227
  caps.push(rank('regulatory_grounded'));
222
228
  if (!spec.signals.hasAcceptanceCriteria)
223
229
  caps.push(rank('tasks_generated'));
230
+ if (spec.signals.isUiBearing && !spec.signals.hasUiGateWaiver && !spec.signals.hasUxSignoff) {
231
+ caps.push(rank('ux_reviewed'));
232
+ }
224
233
  const capRank = caps.length ? Math.min(...caps) : Number.POSITIVE_INFINITY;
225
234
  let best;
226
235
  for (const t of LEGACY_PIPELINE) {
@@ -1 +1 @@
1
- {"version":3,"file":"pipeline-map.js","sourceRoot":"","sources":["../../src/lib/pipeline-map.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"pipeline-map.js","sourceRoot":"","sources":["../../src/lib/pipeline-map.ts"],"names":[],"mappings":"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"}
@@ -8,6 +8,7 @@ export interface PrecedentHit {
8
8
  score: number;
9
9
  matchedFields: string[];
10
10
  }
11
+ export declare function __resetIndexCache(): void;
11
12
  /** Ranked lexical search over specs/spec-index.json (no markdown re-parse).
12
13
  * Throws when the index is missing — callers that must fail open catch. */
13
14
  export declare function searchSpecs(topic: string, opts: {
@@ -1,4 +1,4 @@
1
- import { existsSync, readFileSync } from 'node:fs';
1
+ import { existsSync, readFileSync, statSync } from 'node:fs';
2
2
  import { join } from 'node:path';
3
3
  const DEFAULT_LIMIT = 15;
4
4
  // Score tiers, strongest first: word-boundary phrase > all-tokens > partial
@@ -79,6 +79,23 @@ function matchedTokenIdxs(haystack, tokenRes) {
79
79
  });
80
80
  return matched;
81
81
  }
82
+ /** Module-scope parse cache for spec-index.json, keyed by path + mtime so a
83
+ * caller that loops topics in-process (e.g. suggest-related-specs) parses the
84
+ * index once, while an on-disk rebuild (new mtime) is still picked up (#1077).
85
+ * Exported reset for test isolation. */
86
+ let _indexCache = null;
87
+ export function __resetIndexCache() {
88
+ _indexCache = null;
89
+ }
90
+ function loadIndexCached(indexPath) {
91
+ const mtimeMs = statSync(indexPath).mtimeMs;
92
+ if (_indexCache && _indexCache.path === indexPath && _indexCache.mtimeMs === mtimeMs) {
93
+ return _indexCache.index;
94
+ }
95
+ const index = JSON.parse(readFileSync(indexPath, 'utf8'));
96
+ _indexCache = { path: indexPath, mtimeMs, index };
97
+ return index;
98
+ }
82
99
  /** Ranked lexical search over specs/spec-index.json (no markdown re-parse).
83
100
  * Throws when the index is missing — callers that must fail open catch. */
84
101
  export function searchSpecs(topic, opts) {
@@ -93,7 +110,7 @@ export function searchSpecs(topic, opts) {
93
110
  const tokenRes = tokenRegexes(tokens);
94
111
  const core = opts.core?.toLowerCase();
95
112
  const limit = opts.limit ?? DEFAULT_LIMIT;
96
- const index = JSON.parse(readFileSync(indexPath, 'utf8'));
113
+ const index = loadIndexCached(indexPath);
97
114
  const hits = [];
98
115
  for (const spec of asArray(index.specs)) {
99
116
  if (!spec)
@@ -1 +1 @@
1
- {"version":3,"file":"precedent-search.js","sourceRoot":"","sources":["../../src/lib/precedent-search.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"precedent-search.js","sourceRoot":"","sources":["../../src/lib/precedent-search.ts"],"names":[],"mappings":"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"}
@@ -38,6 +38,13 @@ export const DEFAULT_PREDICATES = {
38
38
  s.signals.hasLinkedLocalTest,
39
39
  // a11y-audit (optional, completes ux_reviewed).
40
40
  hasUxSignoff: (s) => s.signals.hasUxSignoff,
41
+ // UX-review cap predicate (computeStage): caps a UI-bearing spec below ux_reviewed
42
+ // when no UX sign-off exists. Satisfied (no cap) when the spec is not UI-bearing,
43
+ // OR carries an explicit `<!-- ui-gate-waived: -->` waiver, OR has a UX sign-off
44
+ // (the `<!-- ux-reviewed: -->` marker or a `{ID}-UX-REVIEW.md` file, both folded
45
+ // into the `hasUxSignoff` signal). Mirrors the satisfied-by-default polarity of the
46
+ // research/AC/compliance cap predicates above.
47
+ hasUxSignoffWhenUiBearing: (s) => !s.signals.isUiBearing || s.signals.hasUiGateWaiver || s.signals.hasUxSignoff,
41
48
  // create-plan (top-level flag).
42
49
  hasPlan: (s) => s.hasPlan,
43
50
  // generate-tasks (top-level flag).
@@ -1 +1 @@
1
- {"version":3,"file":"predicate-registry.js","sourceRoot":"","sources":["../../src/lib/predicate-registry.ts"],"names":[],"mappings":"AAEA;;;sFAGsF;AACtF,MAAM,CAAC,MAAM,kBAAkB,GAAsB;IACnD,kFAAkF;IAClF,UAAU,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,UAAU;IAC/B,6CAA6C;IAC7C,oBAAoB,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,oBAAoB;IAC3D,+EAA+E;IAC/E,WAAW,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,WAAW;IACzC,eAAe;IACf,aAAa,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,aAAa;IAC7C,sCAAsC;IACtC,oBAAoB,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,oBAAoB;IAC3D,+EAA+E;IAC/E,yEAAyE;IACzE,6EAA6E;IAC7E,oEAAoE;IACpE,uEAAuE;IACvE,6EAA6E;IAC7E,mDAAmD;IACnD,gBAAgB,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,WAAW,IAAI,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC,WAAW,CAAC;IAChF,sEAAsE;IACtE,qBAAqB,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,cAAc,IAAI,CAAC,CAAC,OAAO,CAAC,qBAAqB;IAC1F,gHAAgH;IAChH,sBAAsB,EAAE,CAAC,CAAC,EAAE,EAAE,CAC5B,CAAC,CAAC,CAAC,OAAO,CAAC,qBAAqB;QAChC,CAAC,CAAC,OAAO,CAAC,uBAAuB;QACjC,CAAC,CAAC,OAAO,CAAC,6BAA6B;QACvC,CAAC,CAAC,OAAO,CAAC,kBAAkB;IAC9B,gFAAgF;IAChF,6EAA6E;IAC7E,+EAA+E;IAC/E,6DAA6D;IAC7D,mBAAmB,EAAE,CAAC,CAAC,EAAE,EAAE,CACzB,CAAC,CAAC,CAAC,OAAO,CAAC,qBAAqB;QAChC,CAAC,CAAC,OAAO,CAAC,iBAAiB;QAC3B,CAAC,CAAC,OAAO,CAAC,6BAA6B;QACvC,CAAC,CAAC,OAAO,CAAC,kBAAkB;IAC9B,gDAAgD;IAChD,YAAY,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,YAAY;IAC3C,gCAAgC;IAChC,OAAO,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO;IACzB,mCAAmC;IACnC,QAAQ,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ;IAC3B,mFAAmF;IACnF,qBAAqB,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,qBAAqB;IAE7D,kFAAkF;IAClF,iFAAiF;IACjF,mFAAmF;IACnF,mFAAmF;IACnF,qFAAqF;IAErF,6EAA6E;IAC7E,kFAAkF;IAClF,mFAAmF;IACnF,wEAAwE;IACxE,uBAAuB,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,aAAa,IAAI,CAAC,CAAC,OAAO,CAAC,WAAW;IAEjF,gFAAgF;IAChF,gFAAgF;IAChF,gFAAgF;IAChF,0BAA0B,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,aAAa,IAAI,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC,0BAA0B,CAAC;IAE5G,mFAAmF;IACnF,kFAAkF;IAClF,4EAA4E;IAC5E,0FAA0F;IAC1F,yBAAyB,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,WAAW,IAAI,CAAC,CAAC,OAAO,CAAC,oBAAoB;CAC3F,CAAC"}
1
+ {"version":3,"file":"predicate-registry.js","sourceRoot":"","sources":["../../src/lib/predicate-registry.ts"],"names":[],"mappings":"AAEA;;;sFAGsF;AACtF,MAAM,CAAC,MAAM,kBAAkB,GAAsB;IACnD,kFAAkF;IAClF,UAAU,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,UAAU;IAC/B,6CAA6C;IAC7C,oBAAoB,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,oBAAoB;IAC3D,+EAA+E;IAC/E,WAAW,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,WAAW;IACzC,eAAe;IACf,aAAa,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,aAAa;IAC7C,sCAAsC;IACtC,oBAAoB,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,oBAAoB;IAC3D,+EAA+E;IAC/E,yEAAyE;IACzE,6EAA6E;IAC7E,oEAAoE;IACpE,uEAAuE;IACvE,6EAA6E;IAC7E,mDAAmD;IACnD,gBAAgB,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,WAAW,IAAI,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC,WAAW,CAAC;IAChF,sEAAsE;IACtE,qBAAqB,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,cAAc,IAAI,CAAC,CAAC,OAAO,CAAC,qBAAqB;IAC1F,gHAAgH;IAChH,sBAAsB,EAAE,CAAC,CAAC,EAAE,EAAE,CAC5B,CAAC,CAAC,CAAC,OAAO,CAAC,qBAAqB;QAChC,CAAC,CAAC,OAAO,CAAC,uBAAuB;QACjC,CAAC,CAAC,OAAO,CAAC,6BAA6B;QACvC,CAAC,CAAC,OAAO,CAAC,kBAAkB;IAC9B,gFAAgF;IAChF,6EAA6E;IAC7E,+EAA+E;IAC/E,6DAA6D;IAC7D,mBAAmB,EAAE,CAAC,CAAC,EAAE,EAAE,CACzB,CAAC,CAAC,CAAC,OAAO,CAAC,qBAAqB;QAChC,CAAC,CAAC,OAAO,CAAC,iBAAiB;QAC3B,CAAC,CAAC,OAAO,CAAC,6BAA6B;QACvC,CAAC,CAAC,OAAO,CAAC,kBAAkB;IAC9B,gDAAgD;IAChD,YAAY,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,YAAY;IAC3C,mFAAmF;IACnF,kFAAkF;IAClF,iFAAiF;IACjF,iFAAiF;IACjF,oFAAoF;IACpF,+CAA+C;IAC/C,yBAAyB,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,WAAW,IAAI,CAAC,CAAC,OAAO,CAAC,eAAe,IAAI,CAAC,CAAC,OAAO,CAAC,YAAY;IAC/G,gCAAgC;IAChC,OAAO,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO;IACzB,mCAAmC;IACnC,QAAQ,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ;IAC3B,mFAAmF;IACnF,qBAAqB,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,qBAAqB;IAE7D,kFAAkF;IAClF,iFAAiF;IACjF,mFAAmF;IACnF,mFAAmF;IACnF,qFAAqF;IAErF,6EAA6E;IAC7E,kFAAkF;IAClF,mFAAmF;IACnF,wEAAwE;IACxE,uBAAuB,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,aAAa,IAAI,CAAC,CAAC,OAAO,CAAC,WAAW;IAEjF,gFAAgF;IAChF,gFAAgF;IAChF,gFAAgF;IAChF,0BAA0B,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,aAAa,IAAI,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC,0BAA0B,CAAC;IAE5G,mFAAmF;IACnF,kFAAkF;IAClF,4EAA4E;IAC5E,0FAA0F;IAC1F,yBAAyB,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,WAAW,IAAI,CAAC,CAAC,OAAO,CAAC,oBAAoB;CAC3F,CAAC"}
@@ -0,0 +1,118 @@
1
+ /**
2
+ * The pure, fs-free `run` driver core (TOOL-06 / issue #29). Given injected deps
3
+ * (navigator + reconcile + a gate executor), it loops
4
+ * recommend → (halt-check) → execute → reconcile
5
+ * to advance a spec toward `--until` (default `tasks_generated`), HALTING BEFORE
6
+ * the implement/verify/complete tail. It does NO filesystem, network, or process
7
+ * work itself — every side effect rides an injected dep (the executor) — so the
8
+ * whole loop is unit-testable with fakes (AC-9). The fs/network-bound seams
9
+ * (gate-executor.ts, llm-health.ts, commands/run.ts) live behind the package main
10
+ * entry; this module deliberately imports nothing fs/`child_process`/`os` so it
11
+ * stays trivially pure (it is NOT wired into `/pure`, per the issue).
12
+ */
13
+ /** Autonomy mode for a run. `suggest` plans the gate sequence and executes
14
+ * nothing; `drive` actually advances the spec gate-by-gate. */
15
+ export type RunAutonomy = 'suggest' | 'drive';
16
+ /** The minimal structural view of a navigator action this loop needs. Kept a
17
+ * local structural type (NOT a value import of `commands/next.ts`) so the pure
18
+ * core never pulls the fs-bound navigator/CLI graph. The real `NextAction`
19
+ * (next-action.ts) is assignable to it. */
20
+ export type RunNextAction = {
21
+ type: string;
22
+ specId: string;
23
+ reason: string;
24
+ invocation: string;
25
+ };
26
+ /** Outcome of executing a single gate, returned by the injected {@link GateExecutor}. */
27
+ export type GateExecution = {
28
+ ok: boolean;
29
+ /** Logical executor that ran the gate (e.g. `direct-model`, or `fake` in tests). */
30
+ executor: string;
31
+ /** Model id the gate was routed to, when known. */
32
+ model?: string;
33
+ /** True when the gate escalated from an unhealthy LOCAL endpoint to the cloud gateway. */
34
+ escalatedToCloud?: boolean;
35
+ /** Spec-artifact paths the gate wrote. */
36
+ artifacts?: string[];
37
+ /** Error message when `ok` is false. */
38
+ error?: string;
39
+ /** When `ok` is false: the run must stop with NO further fallback — the
40
+ * strict-local health halt (AC-3). Distinguishes a deliberate halt from an
41
+ * ordinary executor crash so the driver reports the right reason. */
42
+ halt?: boolean;
43
+ };
44
+ export type GateExecutor = (action: RunNextAction) => Promise<GateExecution>;
45
+ /** One recorded step of a drive run. */
46
+ export type RunGateEvent = {
47
+ gate: string;
48
+ ok: boolean;
49
+ executor: string;
50
+ model?: string;
51
+ escalatedToCloud?: boolean;
52
+ artifacts?: string[];
53
+ error?: string;
54
+ };
55
+ export type RunHaltReason =
56
+ /** suggest mode: nothing was executed (the plan was returned). */
57
+ 'suggested'
58
+ /** computeStage reached/passed `--until`. */
59
+ | 'reached-target'
60
+ /** the next gate is the implement/verify/complete tail — deferred to Phase 1b. */
61
+ | 'halt-before-implement'
62
+ /** a gate executor returned `ok:false` (a crash / model error). */
63
+ | 'executor-error'
64
+ /** strict-local: the local endpoint was unhealthy and there is no fallback. */
65
+ | 'health-halt'
66
+ /** a gate ran `ok` but did not advance the spec (stuck) — bail rather than spin. */
67
+ | 'no-progress'
68
+ /** bounded by `--max-gates`. */
69
+ | 'max-gates';
70
+ export type RunResult = {
71
+ autonomy: RunAutonomy;
72
+ events: RunGateEvent[];
73
+ reason: RunHaltReason;
74
+ /** The gate type that triggered a halt (when applicable). */
75
+ haltedAt?: string;
76
+ /** Invocation to resume past a `halt-before-implement` halt. */
77
+ resumeHint?: string;
78
+ finalStage: string;
79
+ /** suggest mode: the planned gate sequence (executes nothing). */
80
+ plan?: string[];
81
+ };
82
+ /** All side effects are injected here so {@link runPipeline} stays pure (AC-9). */
83
+ export type RunDeps = {
84
+ /** Recompute the next navigator action from the spec's CURRENT on-disk artifacts. */
85
+ recommend: () => RunNextAction;
86
+ /** Recompute the spec's stage from its CURRENT on-disk artifacts. */
87
+ stage: () => string;
88
+ /** Rank a stage name for the `--until` comparison. */
89
+ rank: (status: string) => number;
90
+ /** Run one gate (model call + artifact write). */
91
+ execute: GateExecutor;
92
+ /** Recompute + persist `pipeline_status` from artifacts (reconcile). */
93
+ reconcile: () => void;
94
+ /** suggest mode: the planned gate sequence to `--until`. */
95
+ plan: () => string[];
96
+ };
97
+ export type RunConfig = {
98
+ autonomy: RunAutonomy;
99
+ /** Stop once computeStage reaches/passes this status (default `tasks_generated`). */
100
+ until: string;
101
+ /** Hard bound on executed gates (default 8). */
102
+ maxGates: number;
103
+ };
104
+ /**
105
+ * Gate types the Phase-1a direct-model executor does NOT drive: the
106
+ * implement/verify/complete tail. Reaching one of these HALTS the driver with a
107
+ * resume hint — Phase 1b ships the local-agent executor for the code-writing tail
108
+ * (AC-2). `implement`/`verify-tasks`/`mark-complete` are the issue's named tail;
109
+ * the UI/wizard completion gates the navigator can surface after tasks_generated
110
+ * are included so the driver never silently writes code-bearing artifacts.
111
+ */
112
+ export declare const HALT_BEFORE_IMPLEMENT: ReadonlySet<string>;
113
+ /**
114
+ * Drive (or plan) a spec through its pipeline. Pure given `deps`: the loop reads
115
+ * the current state through `deps.recommend`/`deps.stage`, advances it ONLY via
116
+ * `deps.execute` + `deps.reconcile`, and never touches the filesystem itself.
117
+ */
118
+ export declare function runPipeline(deps: RunDeps, config: RunConfig): Promise<RunResult>;
@@ -0,0 +1,106 @@
1
+ /**
2
+ * The pure, fs-free `run` driver core (TOOL-06 / issue #29). Given injected deps
3
+ * (navigator + reconcile + a gate executor), it loops
4
+ * recommend → (halt-check) → execute → reconcile
5
+ * to advance a spec toward `--until` (default `tasks_generated`), HALTING BEFORE
6
+ * the implement/verify/complete tail. It does NO filesystem, network, or process
7
+ * work itself — every side effect rides an injected dep (the executor) — so the
8
+ * whole loop is unit-testable with fakes (AC-9). The fs/network-bound seams
9
+ * (gate-executor.ts, llm-health.ts, commands/run.ts) live behind the package main
10
+ * entry; this module deliberately imports nothing fs/`child_process`/`os` so it
11
+ * stays trivially pure (it is NOT wired into `/pure`, per the issue).
12
+ */
13
+ /**
14
+ * Gate types the Phase-1a direct-model executor does NOT drive: the
15
+ * implement/verify/complete tail. Reaching one of these HALTS the driver with a
16
+ * resume hint — Phase 1b ships the local-agent executor for the code-writing tail
17
+ * (AC-2). `implement`/`verify-tasks`/`mark-complete` are the issue's named tail;
18
+ * the UI/wizard completion gates the navigator can surface after tasks_generated
19
+ * are included so the driver never silently writes code-bearing artifacts.
20
+ */
21
+ export const HALT_BEFORE_IMPLEMENT = new Set([
22
+ 'implement',
23
+ 'verify-tasks',
24
+ 'mark-complete',
25
+ 'capture-docshots',
26
+ 'submit-e2e',
27
+ 'browser-autoheal',
28
+ ]);
29
+ /**
30
+ * Drive (or plan) a spec through its pipeline. Pure given `deps`: the loop reads
31
+ * the current state through `deps.recommend`/`deps.stage`, advances it ONLY via
32
+ * `deps.execute` + `deps.reconcile`, and never touches the filesystem itself.
33
+ */
34
+ export async function runPipeline(deps, config) {
35
+ if (config.autonomy === 'suggest') {
36
+ // Plan only — execute nothing, write nothing (AC-7).
37
+ return { autonomy: 'suggest', events: [], reason: 'suggested', finalStage: deps.stage(), plan: deps.plan() };
38
+ }
39
+ const events = [];
40
+ let gates = 0;
41
+ // Bounded loop — every iteration either executes one gate or terminates; the
42
+ // `gates >= maxGates` guard plus the no-progress guard make non-termination
43
+ // impossible even if the executor lies about progress.
44
+ while (true) {
45
+ const action = deps.recommend();
46
+ // Halt BEFORE the stage check so a spec already at the tail (next gate is
47
+ // implement/verify/complete) reports `halt-before-implement` with a resume
48
+ // hint rather than silently "reached-target" (AC-2). On a successful drive to
49
+ // tasks_generated this is also the natural terminus.
50
+ if (HALT_BEFORE_IMPLEMENT.has(action.type)) {
51
+ return {
52
+ autonomy: 'drive',
53
+ events,
54
+ reason: 'halt-before-implement',
55
+ haltedAt: action.type,
56
+ resumeHint: action.invocation,
57
+ finalStage: deps.stage(),
58
+ };
59
+ }
60
+ const stageBefore = deps.stage();
61
+ // `--until` early stop (e.g. `--until reviewed`): once the computed stage has
62
+ // reached the target, we are done. For the default `tasks_generated` target
63
+ // the tail halt above usually fires first; this still covers the rare case
64
+ // where the navigator has no further pre-tail action.
65
+ if (deps.rank(stageBefore) >= deps.rank(config.until)) {
66
+ return { autonomy: 'drive', events, reason: 'reached-target', finalStage: stageBefore };
67
+ }
68
+ if (gates >= config.maxGates) {
69
+ return { autonomy: 'drive', events, reason: 'max-gates', finalStage: stageBefore };
70
+ }
71
+ const exec = await deps.execute(action);
72
+ gates += 1;
73
+ events.push({
74
+ gate: action.type,
75
+ ok: exec.ok,
76
+ executor: exec.executor,
77
+ model: exec.model,
78
+ escalatedToCloud: exec.escalatedToCloud,
79
+ artifacts: exec.artifacts,
80
+ error: exec.error,
81
+ });
82
+ if (!exec.ok) {
83
+ return {
84
+ autonomy: 'drive',
85
+ events,
86
+ // A deliberate strict-local health halt vs. an ordinary executor crash.
87
+ reason: exec.halt ? 'health-halt' : 'executor-error',
88
+ haltedAt: action.type,
89
+ finalStage: deps.stage(),
90
+ };
91
+ }
92
+ // Reconcile recomputes pipeline_status from the artifacts the gate just wrote,
93
+ // so the next `recommend`/`stage` read sees the advance (AC-5).
94
+ deps.reconcile();
95
+ // Progress guard: a gate that returned ok but neither advanced the stage NOR
96
+ // changed the next recommended gate is genuinely stuck (its artifact did not
97
+ // satisfy the gate predicate). Bail with `no-progress` instead of spinning to
98
+ // maxGates. Gates with no `completesStatus` (draft-acs, generate-tests) do not
99
+ // advance the stage but DO change the next gate, so they pass this guard.
100
+ const stageAfter = deps.stage();
101
+ if (deps.rank(stageAfter) <= deps.rank(stageBefore) && deps.recommend().type === action.type) {
102
+ return { autonomy: 'drive', events, reason: 'no-progress', haltedAt: action.type, finalStage: stageAfter };
103
+ }
104
+ }
105
+ }
106
+ //# sourceMappingURL=run-pipeline.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"run-pipeline.js","sourceRoot":"","sources":["../../src/lib/run-pipeline.ts"],"names":[],"mappings":"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"}
@@ -38,11 +38,20 @@ export function collectRequirementIds(specText) {
38
38
  };
39
39
  addFromEntries(fm.acceptance_criteria);
40
40
  addFromEntries(fm.user_stories);
41
+ // Bullet form: `- **US-1**: …` / `- FR-2 …`.
41
42
  for (const m of specText.match(/(?:^|\n)\s*-\s+\*{0,2}(?:US|FR)-\d+/g) ?? []) {
42
43
  const id = /(?:US|FR)-\d+/.exec(m)?.[0];
43
44
  if (id)
44
45
  ids.add(id);
45
46
  }
47
+ // Header form: `### US-1: Title` / `#### FR-2 …` — used by UX/wizard specs
48
+ // (e.g. HR-42). Previously missed here, so a test's `@verifies … US-n` against a
49
+ // header-declared story counted as a false-positive verifiedUndeclared (issue #1077).
50
+ for (const m of specText.match(/(?:^|\n)#{2,4}\s+(?:US|FR)-\d+/g) ?? []) {
51
+ const id = /(?:US|FR)-\d+/.exec(m)?.[0];
52
+ if (id)
53
+ ids.add(id);
54
+ }
46
55
  return ids;
47
56
  }
48
57
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"scorecard.js","sourceRoot":"","sources":["../../src/lib/scorecard.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"scorecard.js","sourceRoot":"","sources":["../../src/lib/scorecard.ts"],"names":[],"mappings":"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"}
@@ -19,6 +19,7 @@ export type SpecSignalFlags = {
19
19
  reviewFileExists?: boolean;
20
20
  generatedTestExists?: boolean;
21
21
  complianceSignoffFileExists?: boolean;
22
+ uxSignoffFileExists?: boolean;
22
23
  docshotImageExists?: boolean;
23
24
  activeGeneratedTests?: boolean;
24
25
  isCreateWizardSpec?: boolean;
@@ -49,14 +50,78 @@ export declare function isPhaseLifecycleFile(filename: string): boolean;
49
50
  export declare function isLifecycleArtifact(filename: string): boolean;
50
51
  /** True when a filename + its containing dir indicate a derivative artifact, not a primary spec. */
51
52
  export declare function isDerivativeArtifact(dirName: string, filename: string): boolean;
53
+ /** True when a filename is a dedicated sibling-artifact file (see
54
+ * {@link DEDICATED_ARTIFACT_TOKENS}) — never a primary spec, regardless of any
55
+ * declared frontmatter id. */
56
+ export declare function isDedicatedArtifactFile(filename: string): boolean;
57
+ /**
58
+ * The well-formed spec id declared in a file's frontmatter `id:`, validated against the
59
+ * id grammar for `core`, or null when absent/blank/malformed/cross-core. A declared id
60
+ * only counts when it parses as a COMPLETE id for its core (the whole value, not a
61
+ * prefix) — so a stray `id: notes`, a `id:` slug like `WEB-29-diff-review`, or an `id:`
62
+ * whose core does not match its directory never governs identity/classification. (#27)
63
+ */
64
+ export declare function declaredSpecId(declaredId: string | null | undefined, core: string): string | null;
65
+ /**
66
+ * Resolve the AUTHORITATIVE id for a candidate primary-spec FILE — the single fs-free
67
+ * source of truth shared by the corpus loader (`specs.ts` `collectSpecsFromDirectory`)
68
+ * and the path-string classifiers below. Implements issue #27's "frontmatter id is
69
+ * authoritative, the filename is only a hint", made precise so it rescues real specs
70
+ * without manufacturing false duplicates of their sibling artifacts:
71
+ *
72
+ * 1. Structural non-specs (non-`.md`, `README*`, `SPEC_INDEX*`) and dedicated sibling
73
+ * artifacts ({@link isDedicatedArtifactFile}) are never primary, regardless of a
74
+ * declared id.
75
+ * 2. IDENTITY: the filename-parsed id wins when the filename parses to a valid spec id;
76
+ * otherwise the well-formed frontmatter id is used. Filenames are the established,
77
+ * reviewed convention, so a *disagreeing* frontmatter id (e.g. an enhancement file
78
+ * that copy-pasted its parent's `id:`, or a `{parent}-PHASE…` artifact naming a
79
+ * sibling) must not silently relocate the spec.
80
+ * 3. CLASSIFICATION: a file the reserved-token / phase lifecycle heuristics would drop
81
+ * is RESCUED to primary when it carries a well-formed frontmatter id that AGREES with
82
+ * the parseable filename id (the reserved token is part of a real feature slug,
83
+ * e.g. `…-performance-review-wizard`), or when the filename does not parse at all but
84
+ * a well-formed frontmatter id is present. A lifecycle file whose frontmatter id
85
+ * DISAGREES with its parseable filename id stays derivative (preserves current
86
+ * behavior — avoids promoting a phase/rollout artifact onto a sibling id).
87
+ *
88
+ * Returns the resolved spec id, or null when the file is not a primary spec.
89
+ */
90
+ export declare function resolveSpecFileId(core: string, filename: string, declaredId?: string | null): string | null;
52
91
  /** The skip rules `collectSpecsFromDirectory` applies to one filename. */
53
92
  export declare function isPrimarySpecFile(filename: string): boolean;
54
- /** True when a repo-relative path is a primary spec directly under specs/{core}/specs|ux/. */
55
- export declare function isPrimarySpecPath(path: string): boolean;
56
- /** The spec id for a primary spec path, or null if the path isn't a primary spec. */
57
- export declare function specIdForPath(path: string): string | null;
93
+ /**
94
+ * The spec id for a primary spec path, or null if the path isn't a primary spec.
95
+ * `declaredId` is the spec id declared in the file's frontmatter `id:` (when the caller
96
+ * has the content, e.g. Spec Studio): it is AUTHORITATIVE over the filename hint (#27),
97
+ * so a reserved-token slug like `specs/web/specs/WEB-29-diff-review-comments.md` resolves
98
+ * once its `id:` is supplied. Path-only callers omit it and keep the legacy filename
99
+ * behavior. Delegates to {@link resolveSpecFileId} — the single classification source.
100
+ */
101
+ export declare function specIdForPath(path: string, declaredId?: string | null): string | null;
102
+ /** True when a repo-relative path is a primary spec directly under specs/{core}/specs|ux/.
103
+ * `declaredId` (frontmatter `id:`) is authoritative over the filename hint — see
104
+ * {@link specIdForPath}. */
105
+ export declare function isPrimarySpecPath(path: string, declaredId?: string | null): boolean;
58
106
  /** Deterministic winner (path-sorted, mirroring the CLI's findSpec) for a spec id among `allPaths`. */
59
107
  export declare function findSpecPath(specId: string, allPaths: string[]): string | null;
108
+ /**
109
+ * Detect duplicate spec ids over an already-resolved, in-memory set of primary specs
110
+ * (issue #27, mode b). Pure: operates on `{ id, path }` pairs (a SpecFile satisfies the
111
+ * shape), no filesystem access. Groups case-insensitively by resolved id and returns
112
+ * every id claimed by more than one path, with the offending paths and the groups both
113
+ * sorted for deterministic output. The fs-bound loader resolves the ids (frontmatter
114
+ * authoritative over the filename hint, via {@link resolveSpecFileId}); the `validate`
115
+ * command turns the result into a hard `DUPLICATE_SPEC_ID` error instead of the old
116
+ * silent lowest-path-wins dedupe that hid the second file.
117
+ */
118
+ export declare function findDuplicateSpecIds(specs: ReadonlyArray<{
119
+ id: string;
120
+ path: string;
121
+ }>): Array<{
122
+ id: string;
123
+ paths: string[];
124
+ }>;
60
125
  /**
61
126
  * Path-Set equivalent of specs.ts's `hasArtifact`/`resolveArtifactPath`: is there a
62
127
  * `specs/{core}/{folder}/{id}-{suffix}.md` (flat dir only) in `paths`? A child