@encore-os/eos-spec 0.8.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 (67) hide show
  1. package/dist/commands/close-out.d.ts +2 -0
  2. package/dist/commands/close-out.js +167 -0
  3. package/dist/commands/close-out.js.map +1 -0
  4. package/dist/commands/conformance.js +20 -1
  5. package/dist/commands/conformance.js.map +1 -1
  6. package/dist/commands/metrics.js +15 -0
  7. package/dist/commands/metrics.js.map +1 -1
  8. package/dist/commands/run.d.ts +10 -0
  9. package/dist/commands/run.js +230 -0
  10. package/dist/commands/run.js.map +1 -0
  11. package/dist/commands/validate.d.ts +7 -0
  12. package/dist/commands/validate.js +46 -7
  13. package/dist/commands/validate.js.map +1 -1
  14. package/dist/index.js +8 -0
  15. package/dist/index.js.map +1 -1
  16. package/dist/lib/ai-call.d.ts +12 -0
  17. package/dist/lib/ai-call.js +6 -0
  18. package/dist/lib/ai-call.js.map +1 -1
  19. package/dist/lib/closeout-core.d.ts +46 -0
  20. package/dist/lib/closeout-core.js +34 -0
  21. package/dist/lib/closeout-core.js.map +1 -0
  22. package/dist/lib/closeout-predicate.d.ts +36 -0
  23. package/dist/lib/closeout-predicate.js +130 -0
  24. package/dist/lib/closeout-predicate.js.map +1 -0
  25. package/dist/lib/cost.js +7 -0
  26. package/dist/lib/cost.js.map +1 -1
  27. package/dist/lib/events.d.ts +11 -0
  28. package/dist/lib/events.js.map +1 -1
  29. package/dist/lib/frontmatter.d.ts +22 -0
  30. package/dist/lib/frontmatter.js +37 -0
  31. package/dist/lib/frontmatter.js.map +1 -1
  32. package/dist/lib/gate-executor.d.ts +80 -0
  33. package/dist/lib/gate-executor.js +311 -0
  34. package/dist/lib/gate-executor.js.map +1 -0
  35. package/dist/lib/llm-health.d.ts +28 -0
  36. package/dist/lib/llm-health.js +46 -0
  37. package/dist/lib/llm-health.js.map +1 -0
  38. package/dist/lib/metrics.d.ts +26 -0
  39. package/dist/lib/metrics.js +35 -0
  40. package/dist/lib/metrics.js.map +1 -1
  41. package/dist/lib/next-action.d.ts +10 -4
  42. package/dist/lib/next-action.js +10 -4
  43. package/dist/lib/next-action.js.map +1 -1
  44. package/dist/lib/ollama-embed.d.ts +5 -0
  45. package/dist/lib/ollama-embed.js +5 -0
  46. package/dist/lib/ollama-embed.js.map +1 -1
  47. package/dist/lib/output.d.ts +3 -0
  48. package/dist/lib/output.js +3 -0
  49. package/dist/lib/output.js.map +1 -1
  50. package/dist/lib/pipeline-config.js +10 -0
  51. package/dist/lib/pipeline-config.js.map +1 -1
  52. package/dist/lib/pipeline-map.js +9 -0
  53. package/dist/lib/pipeline-map.js.map +1 -1
  54. package/dist/lib/predicate-registry.js +7 -0
  55. package/dist/lib/predicate-registry.js.map +1 -1
  56. package/dist/lib/run-pipeline.d.ts +118 -0
  57. package/dist/lib/run-pipeline.js +106 -0
  58. package/dist/lib/run-pipeline.js.map +1 -0
  59. package/dist/lib/spec-pure.d.ts +69 -4
  60. package/dist/lib/spec-pure.js +125 -15
  61. package/dist/lib/spec-pure.js.map +1 -1
  62. package/dist/lib/specs.d.ts +3 -3
  63. package/dist/lib/specs.js +43 -20
  64. package/dist/lib/specs.js.map +1 -1
  65. package/dist/lib/version.d.ts +1 -1
  66. package/dist/lib/version.js +1 -1
  67. package/package.json +1 -1
@@ -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
@@ -64,7 +64,7 @@ export function hasActiveGeneratedTestSource(source) {
64
64
  * `deriveSignals` in specs.ts is a thin positional-args adapter over this.
65
65
  */
66
66
  export function deriveSignalsFromText(core, text, flags = {}) {
67
- const { researchFileExists = false, reviewFileExists = false, generatedTestExists = false, complianceSignoffFileExists = false, docshotImageExists = false, activeGeneratedTests = false, isCreateWizardSpec = false, submitE2eProvesPersist = false, linkedLocalTestExists = false, } = flags;
67
+ const { researchFileExists = false, reviewFileExists = false, generatedTestExists = false, complianceSignoffFileExists = false, uxSignoffFileExists = false, docshotImageExists = false, activeGeneratedTests = false, isCreateWizardSpec = false, submitE2eProvesPersist = false, linkedLocalTestExists = false, } = flags;
68
68
  const fm = readFrontmatter(text);
69
69
  const nonEmptyArray = (v) => Array.isArray(v) && v.length > 0;
70
70
  const hasUserStoriesSection = /^#{1,3}\s+User Stories\b/im.test(text);
@@ -85,7 +85,7 @@ export function deriveSignalsFromText(core, text, flags = {}) {
85
85
  hasSpecReview: reviewFileExists || /<!--\s*spec-reviewed:/i.test(text),
86
86
  hasValidationSignoff: /<!--\s*validated:/i.test(text),
87
87
  hasComplianceSignoff: complianceSignoffFileExists || /<!--\s*compliance-reviewed:/i.test(text),
88
- hasUxSignoff: /<!--\s*ux-reviewed:/i.test(text),
88
+ hasUxSignoff: uxSignoffFileExists || /<!--\s*ux-reviewed:/i.test(text),
89
89
  isUiBearing: uiAffectedFiles || /^#{1,3}\s*UI\s*\/?\s*UX\b/im.test(text),
90
90
  hasDocshots: docshotImageExists || /-docs-shots\.spec\.ts/.test(text) || /<!--\s*docshots:/i.test(text),
91
91
  hasHealSignoff: /<!--\s*heal-verified:/i.test(text),
@@ -194,6 +194,85 @@ export function isDerivativeArtifact(dirName, filename) {
194
194
  return true;
195
195
  return /-(TASKS|PLAN|CONTEXT|RESEARCH|NAVIGATION|RECOMMENDATION|RECOMMENDATIONS|DECISION|DECISIONS|SUMMARY|IMPLEMENTATION|WORKSTREAM|AUDIT|REPORT|SIGNOFF|READINESS|EXPANSION|WORKSHEET|PATTERNS)/i.test(specBasename(filename).toUpperCase());
196
196
  }
197
+ /** Uppercase derivative-artifact descriptors that, by repo convention, live ALONGSIDE
198
+ * primary specs in `specs/{core}/specs|ux/` AND deliberately carry the PARENT spec's
199
+ * id in their frontmatter (a CONTEXT/CLARIFICATION/ENHANCEMENTS/EXPANSION note for spec
200
+ * X is *about* X, so it sets `id: X`). They must stay derivative even though they
201
+ * declare a well-formed id — promoting one would manufacture a false duplicate of its
202
+ * parent. This is the deliberate exception to "frontmatter id is authoritative" (#27):
203
+ * a frontmatter id is meant to rescue a reserved token embedded in a real feature SLUG
204
+ * (`…-performance-review-wizard`), never one of these dedicated sibling-artifact files.
205
+ * Case-sensitive (uppercase) — the same shape the loader's legacy CONTEXT/ENHANCEMENTS/
206
+ * EXPANSION substring skips used — so a lowercase slug word (`…-context-menu`, verified
207
+ * against the encoreos corpus) is unaffected. */
208
+ const DEDICATED_ARTIFACT_TOKENS = ['CONTEXT', 'CLARIFICATION', 'ENHANCEMENTS', 'EXPANSION'];
209
+ /** True when a filename is a dedicated sibling-artifact file (see
210
+ * {@link DEDICATED_ARTIFACT_TOKENS}) — never a primary spec, regardless of any
211
+ * declared frontmatter id. */
212
+ export function isDedicatedArtifactFile(filename) {
213
+ return DEDICATED_ARTIFACT_TOKENS.some((token) => filename.includes(token));
214
+ }
215
+ /**
216
+ * The well-formed spec id declared in a file's frontmatter `id:`, validated against the
217
+ * id grammar for `core`, or null when absent/blank/malformed/cross-core. A declared id
218
+ * only counts when it parses as a COMPLETE id for its core (the whole value, not a
219
+ * prefix) — so a stray `id: notes`, a `id:` slug like `WEB-29-diff-review`, or an `id:`
220
+ * whose core does not match its directory never governs identity/classification. (#27)
221
+ */
222
+ export function declaredSpecId(declaredId, core) {
223
+ if (typeof declaredId !== 'string')
224
+ return null;
225
+ const trimmed = declaredId.trim();
226
+ if (trimmed === '')
227
+ return null;
228
+ const parsed = extractSpecId(trimmed, core);
229
+ return parsed && parsed.toUpperCase() === trimmed.toUpperCase() ? parsed : null;
230
+ }
231
+ /**
232
+ * Resolve the AUTHORITATIVE id for a candidate primary-spec FILE — the single fs-free
233
+ * source of truth shared by the corpus loader (`specs.ts` `collectSpecsFromDirectory`)
234
+ * and the path-string classifiers below. Implements issue #27's "frontmatter id is
235
+ * authoritative, the filename is only a hint", made precise so it rescues real specs
236
+ * without manufacturing false duplicates of their sibling artifacts:
237
+ *
238
+ * 1. Structural non-specs (non-`.md`, `README*`, `SPEC_INDEX*`) and dedicated sibling
239
+ * artifacts ({@link isDedicatedArtifactFile}) are never primary, regardless of a
240
+ * declared id.
241
+ * 2. IDENTITY: the filename-parsed id wins when the filename parses to a valid spec id;
242
+ * otherwise the well-formed frontmatter id is used. Filenames are the established,
243
+ * reviewed convention, so a *disagreeing* frontmatter id (e.g. an enhancement file
244
+ * that copy-pasted its parent's `id:`, or a `{parent}-PHASE…` artifact naming a
245
+ * sibling) must not silently relocate the spec.
246
+ * 3. CLASSIFICATION: a file the reserved-token / phase lifecycle heuristics would drop
247
+ * is RESCUED to primary when it carries a well-formed frontmatter id that AGREES with
248
+ * the parseable filename id (the reserved token is part of a real feature slug,
249
+ * e.g. `…-performance-review-wizard`), or when the filename does not parse at all but
250
+ * a well-formed frontmatter id is present. A lifecycle file whose frontmatter id
251
+ * DISAGREES with its parseable filename id stays derivative (preserves current
252
+ * behavior — avoids promoting a phase/rollout artifact onto a sibling id).
253
+ *
254
+ * Returns the resolved spec id, or null when the file is not a primary spec.
255
+ */
256
+ export function resolveSpecFileId(core, filename, declaredId) {
257
+ if (!filename.endsWith('.md'))
258
+ return null;
259
+ if (filename.startsWith('SPEC_INDEX') || filename.startsWith('README'))
260
+ return null;
261
+ if (isDedicatedArtifactFile(filename))
262
+ return null;
263
+ const filenameId = extractSpecId(filename, core);
264
+ const frontmatterId = declaredSpecId(declaredId, core);
265
+ const id = filenameId ?? frontmatterId;
266
+ if (!id)
267
+ return null;
268
+ if (!isLifecycleArtifact(filename) && !isPhaseLifecycleFile(filename))
269
+ return id; // legacy primary path
270
+ // A lifecycle/reserved-token heuristic fired — rescue only on an authoritative,
271
+ // agreeing frontmatter id (or when the filename does not parse at all).
272
+ if (frontmatterId && (!filenameId || frontmatterId.toUpperCase() === filenameId.toUpperCase()))
273
+ return id;
274
+ return null;
275
+ }
197
276
  /** The skip rules `collectSpecsFromDirectory` applies to one filename. */
198
277
  export function isPrimarySpecFile(filename) {
199
278
  if (!filename.endsWith('.md'))
@@ -214,23 +293,27 @@ export function isPrimarySpecFile(filename) {
214
293
  return false;
215
294
  return true;
216
295
  }
217
- /** True when a repo-relative path is a primary spec directly under specs/{core}/specs|ux/. */
218
- export function isPrimarySpecPath(path) {
296
+ /**
297
+ * The spec id for a primary spec path, or null if the path isn't a primary spec.
298
+ * `declaredId` is the spec id declared in the file's frontmatter `id:` (when the caller
299
+ * has the content, e.g. Spec Studio): it is AUTHORITATIVE over the filename hint (#27),
300
+ * so a reserved-token slug like `specs/web/specs/WEB-29-diff-review-comments.md` resolves
301
+ * once its `id:` is supplied. Path-only callers omit it and keep the legacy filename
302
+ * behavior. Delegates to {@link resolveSpecFileId} — the single classification source.
303
+ */
304
+ export function specIdForPath(path, declaredId) {
219
305
  const parts = path.split('/');
220
306
  if (parts.length !== 4 || parts[0] !== 'specs')
221
- return false;
307
+ return null;
222
308
  if (parts[2] !== 'specs' && parts[2] !== 'ux')
223
- return false;
224
- if (!isPrimarySpecFile(parts[3]))
225
- return false;
226
- return extractSpecId(parts[3], parts[1]) != null;
227
- }
228
- /** The spec id for a primary spec path, or null if the path isn't a primary spec. */
229
- export function specIdForPath(path) {
230
- if (!isPrimarySpecPath(path))
231
309
  return null;
232
- const parts = path.split('/');
233
- return extractSpecId(parts[3], parts[1]);
310
+ return resolveSpecFileId(parts[1], parts[3], declaredId);
311
+ }
312
+ /** True when a repo-relative path is a primary spec directly under specs/{core}/specs|ux/.
313
+ * `declaredId` (frontmatter `id:`) is authoritative over the filename hint — see
314
+ * {@link specIdForPath}. */
315
+ export function isPrimarySpecPath(path, declaredId) {
316
+ return specIdForPath(path, declaredId) != null;
234
317
  }
235
318
  /** Deterministic winner (path-sorted, mirroring the CLI's findSpec) for a spec id among `allPaths`. */
236
319
  export function findSpecPath(specId, allPaths) {
@@ -238,6 +321,33 @@ export function findSpecPath(specId, allPaths) {
238
321
  const matches = allPaths.filter((p) => specIdForPath(p)?.toUpperCase() === up).sort((a, b) => a.localeCompare(b));
239
322
  return matches[0] ?? null;
240
323
  }
324
+ /**
325
+ * Detect duplicate spec ids over an already-resolved, in-memory set of primary specs
326
+ * (issue #27, mode b). Pure: operates on `{ id, path }` pairs (a SpecFile satisfies the
327
+ * shape), no filesystem access. Groups case-insensitively by resolved id and returns
328
+ * every id claimed by more than one path, with the offending paths and the groups both
329
+ * sorted for deterministic output. The fs-bound loader resolves the ids (frontmatter
330
+ * authoritative over the filename hint, via {@link resolveSpecFileId}); the `validate`
331
+ * command turns the result into a hard `DUPLICATE_SPEC_ID` error instead of the old
332
+ * silent lowest-path-wins dedupe that hid the second file.
333
+ */
334
+ export function findDuplicateSpecIds(specs) {
335
+ const byId = new Map();
336
+ for (const spec of specs) {
337
+ const key = spec.id.toUpperCase();
338
+ const paths = byId.get(key);
339
+ if (paths)
340
+ paths.push(spec.path);
341
+ else
342
+ byId.set(key, [spec.path]);
343
+ }
344
+ const dups = [];
345
+ for (const [id, paths] of byId) {
346
+ if (paths.length > 1)
347
+ dups.push({ id, paths: [...paths].sort((a, b) => a.localeCompare(b)) });
348
+ }
349
+ return dups.sort((a, b) => a.id.localeCompare(b.id));
350
+ }
241
351
  /**
242
352
  * Path-Set equivalent of specs.ts's `hasArtifact`/`resolveArtifactPath`: is there a
243
353
  * `specs/{core}/{folder}/{id}-{suffix}.md` (flat dir only) in `paths`? A child
@@ -1 +1 @@
1
- {"version":3,"file":"spec-pure.js","sourceRoot":"","sources":["../../src/lib/spec-pure.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"spec-pure.js","sourceRoot":"","sources":["../../src/lib/spec-pure.ts"],"names":[],"mappings":"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"}
@@ -1,6 +1,6 @@
1
1
  import type { AcStatusCounts } from './requirements.js';
2
- import { extractSpecId, isDerivativeArtifact } from './spec-pure.js';
3
- export { extractSpecId, isDerivativeArtifact };
2
+ import { extractSpecId, findDuplicateSpecIds, isDerivativeArtifact } from './spec-pure.js';
3
+ export { extractSpecId, isDerivativeArtifact, findDuplicateSpecIds };
4
4
  /** True when a generated test source has ≥1 ACTIVE `test(` block (not `test.fixme`/
5
5
  * `test.describe`) and is not an AC-less placeholder. Mirrors the active-test regex
6
6
  * in scripts/specs/check-generated-tests.ts (flagWeakTest): the negative lookbehind
@@ -117,7 +117,7 @@ export type SpecFile = {
117
117
  * derivation, shared with browser consumers via `/pure`. Keep this signature
118
118
  * stable; route new signal logic through `deriveSignalsFromText`.
119
119
  */
120
- export declare function deriveSignals(core: string, text: string, researchFileExists: boolean, reviewFileExists?: boolean, generatedTestExists?: boolean, complianceSignoffFileExists?: boolean, docshotImageExists?: boolean, activeGeneratedTests?: boolean, isCreateWizardSpec?: boolean, submitE2eProvesPersist?: boolean, linkedLocalTestExists?: boolean): SpecSignals;
120
+ export declare function deriveSignals(core: string, text: string, researchFileExists: boolean, reviewFileExists?: boolean, generatedTestExists?: boolean, complianceSignoffFileExists?: boolean, docshotImageExists?: boolean, activeGeneratedTests?: boolean, isCreateWizardSpec?: boolean, submitE2eProvesPersist?: boolean, linkedLocalTestExists?: boolean, uxSignoffFileExists?: boolean): SpecSignals;
121
121
  export declare function listSpecs(repoRoot: string, coreFilter?: string, options?: {
122
122
  includeArchived?: boolean;
123
123
  }): SpecFile[];
package/dist/lib/specs.js CHANGED
@@ -3,13 +3,15 @@ import { join } from 'node:path';
3
3
  import { parseComplianceSignoff } from './compliance-signoff.js';
4
4
  import { readFrontmatter, stripFrontmatter } from './frontmatter.js';
5
5
  import { coresList, specsRoot } from './repo.js';
6
- import { deriveSignalsFromText, extractSpecId, isDerivativeArtifact, isLifecycleArtifact, isPhaseLifecycleFile, } from './spec-pure.js';
6
+ import { deriveSignalsFromText, extractSpecId, findDuplicateSpecIds, isDedicatedArtifactFile, isDerivativeArtifact, resolveSpecFileId, } from './spec-pure.js';
7
7
  import { getWizardCreateSpec } from './wizard-specs.js';
8
8
  // Path classification lives in the fs-free spec-pure.ts (single source); re-export
9
9
  // the public helpers so existing importers of specs.ts (reconcile, placement) keep
10
10
  // working. `extractSpecId` is core-anchored — handles encoreos's 2-char cores AND
11
11
  // builder's longer cores (RUNNER) with no over-match (epic #300, Wave-1 G3).
12
- export { extractSpecId, isDerivativeArtifact };
12
+ // `findDuplicateSpecIds` is the pure mode-b detector the `validate` command turns into
13
+ // a hard DUPLICATE_SPEC_ID error (issue #27).
14
+ export { extractSpecId, isDerivativeArtifact, findDuplicateSpecIds };
13
15
  /** The marker the generator emits for an AC-less spec (mirrors
14
16
  * scripts/uat/generate-playwright-from-spec.ts NO_AC_MARKER). Cannot import
15
17
  * across the eos-spec/scripts boundary (rootDir: ./src), so the literal is duplicated. */
@@ -35,12 +37,13 @@ export const REGULATED_CORES = new Set(['cl', 'pm', 'hr', 'rh', 'gr']);
35
37
  * derivation, shared with browser consumers via `/pure`. Keep this signature
36
38
  * stable; route new signal logic through `deriveSignalsFromText`.
37
39
  */
38
- export function deriveSignals(core, text, researchFileExists, reviewFileExists = false, generatedTestExists = false, complianceSignoffFileExists = false, docshotImageExists = false, activeGeneratedTests = false, isCreateWizardSpec = false, submitE2eProvesPersist = false, linkedLocalTestExists = false) {
40
+ export function deriveSignals(core, text, researchFileExists, reviewFileExists = false, generatedTestExists = false, complianceSignoffFileExists = false, docshotImageExists = false, activeGeneratedTests = false, isCreateWizardSpec = false, submitE2eProvesPersist = false, linkedLocalTestExists = false, uxSignoffFileExists = false) {
39
41
  return deriveSignalsFromText(core, text, {
40
42
  researchFileExists,
41
43
  reviewFileExists,
42
44
  generatedTestExists,
43
45
  complianceSignoffFileExists,
46
+ uxSignoffFileExists,
44
47
  docshotImageExists,
45
48
  activeGeneratedTests,
46
49
  isCreateWizardSpec,
@@ -76,27 +79,19 @@ function collectSpecsFromDirectory(repoRoot, core, dir, archived, out) {
76
79
  for (const file of readdirSync(dir)) {
77
80
  if (!file.endsWith('.md'))
78
81
  continue;
79
- if (file.includes('CONTEXT'))
82
+ // Cheap structural/dedicated-artifact rejections that no frontmatter id overrides
83
+ // (mirrors resolveSpecFileId's first guards) so we don't read the 200+ CONTEXT/
84
+ // CLARIFICATION sibling files in a corpus just to discard them. resolveSpecFileId
85
+ // remains the authority below.
86
+ if (file.startsWith('SPEC_INDEX') || file.startsWith('README'))
80
87
  continue;
81
- if (file.startsWith('SPEC_INDEX'))
82
- continue;
83
- if (file.startsWith('README'))
84
- continue;
85
- if (file.includes('ENHANCEMENTS'))
86
- continue;
87
- if (file.includes('EXPANSION'))
88
- continue;
89
- if (isPhaseLifecycleFile(file))
90
- continue;
91
- if (isLifecycleArtifact(file))
92
- continue;
93
- const id = extractSpecId(file, core);
94
- if (!id)
88
+ if (isDedicatedArtifactFile(file))
95
89
  continue;
96
90
  const path = join(dir, file);
97
91
  let title;
98
92
  let status;
99
93
  let supersededBy;
94
+ let fmId;
100
95
  let text = '';
101
96
  try {
102
97
  text = readFileSync(path, 'utf8');
@@ -106,6 +101,7 @@ function collectSpecsFromDirectory(repoRoot, core, dir, archived, out) {
106
101
  // be mistaken for the H1 title.
107
102
  const fm = readFrontmatter(text);
108
103
  const body = stripFrontmatter(text);
104
+ fmId = typeof fm.id === 'string' ? fm.id : undefined;
109
105
  const fmTitle = typeof fm.title === 'string' && fm.title.trim() !== '' ? fm.title.trim() : undefined;
110
106
  const fmStatus = typeof fm.status === 'string' && fm.status.trim() !== '' ? fm.status.trim() : undefined;
111
107
  title = fmTitle ?? TITLE_REGEX.exec(body)?.[1]?.trim();
@@ -114,14 +110,22 @@ function collectSpecsFromDirectory(repoRoot, core, dir, archived, out) {
114
110
  typeof fm.superseded_by === 'string' && fm.superseded_by.trim() !== '' ? fm.superseded_by.trim() : undefined;
115
111
  }
116
112
  catch {
117
- // ignore
113
+ // unreadable — fall back to a filename-only classification (declared id undefined)
118
114
  }
115
+ // Identity + primary-vs-derivative classification: the frontmatter `id:` is
116
+ // AUTHORITATIVE over the filename hint (#27), so a reserved-token slug
117
+ // (`…-concurrent-review-…`) is no longer silently dropped. Falls back to the
118
+ // filename for id-less specs (legacy behavior preserved).
119
+ const id = resolveSpecFileId(core, file, fmId);
120
+ if (!id)
121
+ continue;
119
122
  const researchFileExists = existsSync(join(specsRoot(repoRoot), core, 'research', `${id}-RESEARCH.md`));
120
123
  const reviewFileExists = hasReviewFile(repoRoot, core, id);
121
124
  const generatedTestExists = generatedTestExistsFor(repoRoot, core, id);
122
125
  const activeGeneratedTests = hasActiveGeneratedTestSource(generatedTestSourceFor(repoRoot, core, id));
123
126
  const linkedLocalTestExists = linkedLocalTestFor(repoRoot, core, id);
124
127
  const complianceSignoffFileExists = hasComplianceSignoffFile(repoRoot, core, id);
128
+ const uxSignoffFileExists = hasUxSignoffFile(repoRoot, core, id);
125
129
  const docshotImageExists = docshotImageExistsFor(repoRoot, id);
126
130
  const wizardCreate = getWizardCreateSpec(repoRoot, id);
127
131
  const isCreateWizardSpec = wizardCreate?.kind === 'create';
@@ -138,7 +142,7 @@ function collectSpecsFromDirectory(repoRoot, core, dir, archived, out) {
138
142
  hasPlan: hasArtifact(repoRoot, core, 'plans', id, 'PLAN'),
139
143
  hasTasks: hasArtifact(repoRoot, core, 'tasks', id, 'TASKS'),
140
144
  hasContext: existsSync(join(specsRoot(repoRoot), core, 'specs', `${id}-CONTEXT.md`)),
141
- signals: deriveSignals(core, text, researchFileExists, reviewFileExists, generatedTestExists, complianceSignoffFileExists, docshotImageExists, activeGeneratedTests, isCreateWizardSpec, submitE2eProvesPersist, linkedLocalTestExists),
145
+ signals: deriveSignals(core, text, researchFileExists, reviewFileExists, generatedTestExists, complianceSignoffFileExists, docshotImageExists, activeGeneratedTests, isCreateWizardSpec, submitE2eProvesPersist, linkedLocalTestExists, uxSignoffFileExists),
142
146
  archived,
143
147
  });
144
148
  }
@@ -210,6 +214,25 @@ function hasComplianceSignoffFile(repoRoot, core, id) {
210
214
  }
211
215
  return false;
212
216
  }
217
+ /** UX-review sign-off lives in flat `specs/reviews/` or per-core `specs/{core}/reviews/`,
218
+ * named like `{ID}-UX-REVIEW.md` (also `{ID}-...-UX-REVIEW.md` for combined/variant ids).
219
+ * PERMISSIVE — mirrors `hasReviewFile`, not the frontmatter-parsing
220
+ * `hasComplianceSignoffFile`: a well-named file at the expected path with a
221
+ * boundary-matched id counts, no frontmatter parse. A UX review is a design pass,
222
+ * not a regulated determination, so it needs no structured sign-off schema. The
223
+ * `<!-- ux-reviewed: -->` body marker remains the primary signal (handled in
224
+ * `deriveSignalsFromText`); this function gates the FILE fallback only. */
225
+ function hasUxSignoffFile(repoRoot, core, id) {
226
+ const dirs = [join(specsRoot(repoRoot), 'reviews'), join(specsRoot(repoRoot), core, 'reviews')];
227
+ const idAtBoundary = new RegExp(`(^|-)${id}(-|\\.)`, 'i');
228
+ for (const dir of dirs) {
229
+ if (!existsSync(dir))
230
+ continue;
231
+ if (readdirSync(dir).some((file) => /UX-REVIEW/i.test(file) && idAtBoundary.test(file)))
232
+ return true;
233
+ }
234
+ return false;
235
+ }
213
236
  /** Checks whether a generated Playwright test file exists on disk for this spec.
214
237
  * Generated tests live at `tests/e2e/generated/<core>/<id-lowercase>-<slug>.generated.spec.ts`. */
215
238
  function generatedTestExistsFor(repoRoot, core, id) {
@@ -1 +1 @@
1
- {"version":3,"file":"specs.js","sourceRoot":"","sources":["../../src/lib/specs.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"specs.js","sourceRoot":"","sources":["../../src/lib/specs.ts"],"names":[],"mappings":"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"}
@@ -2,4 +2,4 @@
2
2
  * with package.json `version` by version.test.ts; consumed by the CLI `.version()`
3
3
  * registration (index.ts) and the `profile --json` engine.version field. Bump this
4
4
  * together with package.json on release. */
5
- export declare const ENGINE_VERSION = "0.8.0";
5
+ export declare const ENGINE_VERSION = "0.9.0";
@@ -2,5 +2,5 @@
2
2
  * with package.json `version` by version.test.ts; consumed by the CLI `.version()`
3
3
  * registration (index.ts) and the `profile --json` engine.version field. Bump this
4
4
  * together with package.json on release. */
5
- export const ENGINE_VERSION = '0.8.0';
5
+ export const ENGINE_VERSION = '0.9.0';
6
6
  //# sourceMappingURL=version.js.map
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@encore-os/eos-spec",
3
- "version": "0.8.0",
3
+ "version": "0.9.0",
4
4
  "description": "Portable, config-driven spec-pipeline engine + quality harness. One canonical engine consumed as a library (with a client-safe /pure subpath) by every Encore-OS repo.",
5
5
  "private": false,
6
6
  "license": "SEE LICENSE IN LICENSE",