@encore-os/eos-spec 0.8.0 → 0.10.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 (112) hide show
  1. package/dist/commands/archive.js +1 -1
  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/complete.js +81 -4
  7. package/dist/commands/complete.js.map +1 -1
  8. package/dist/commands/conformance.js +20 -1
  9. package/dist/commands/conformance.js.map +1 -1
  10. package/dist/commands/create.js +6 -6
  11. package/dist/commands/create.js.map +1 -1
  12. package/dist/commands/funnel.js +7 -0
  13. package/dist/commands/funnel.js.map +1 -1
  14. package/dist/commands/metrics.js +15 -0
  15. package/dist/commands/metrics.js.map +1 -1
  16. package/dist/commands/next.d.ts +10 -4
  17. package/dist/commands/next.js +23 -12
  18. package/dist/commands/next.js.map +1 -1
  19. package/dist/commands/proceed.d.ts +48 -0
  20. package/dist/commands/proceed.js +144 -0
  21. package/dist/commands/proceed.js.map +1 -0
  22. package/dist/commands/reconcile.js +7 -1
  23. package/dist/commands/reconcile.js.map +1 -1
  24. package/dist/commands/run.d.ts +13 -0
  25. package/dist/commands/run.js +238 -0
  26. package/dist/commands/run.js.map +1 -0
  27. package/dist/commands/scorecard.d.ts +24 -0
  28. package/dist/commands/scorecard.js +49 -3
  29. package/dist/commands/scorecard.js.map +1 -1
  30. package/dist/commands/signoff.js +3 -2
  31. package/dist/commands/signoff.js.map +1 -1
  32. package/dist/commands/status.js +7 -1
  33. package/dist/commands/status.js.map +1 -1
  34. package/dist/commands/tasks.d.ts +7 -0
  35. package/dist/commands/tasks.js +13 -1
  36. package/dist/commands/tasks.js.map +1 -1
  37. package/dist/commands/validate.d.ts +7 -0
  38. package/dist/commands/validate.js +46 -7
  39. package/dist/commands/validate.js.map +1 -1
  40. package/dist/index.js +19 -0
  41. package/dist/index.js.map +1 -1
  42. package/dist/lib/ai-call.d.ts +12 -0
  43. package/dist/lib/ai-call.js +6 -0
  44. package/dist/lib/ai-call.js.map +1 -1
  45. package/dist/lib/closeout-core.d.ts +46 -0
  46. package/dist/lib/closeout-core.js +34 -0
  47. package/dist/lib/closeout-core.js.map +1 -0
  48. package/dist/lib/closeout-predicate.d.ts +36 -0
  49. package/dist/lib/closeout-predicate.js +130 -0
  50. package/dist/lib/closeout-predicate.js.map +1 -0
  51. package/dist/lib/config.d.ts +10 -0
  52. package/dist/lib/config.js.map +1 -1
  53. package/dist/lib/cost.js +7 -0
  54. package/dist/lib/cost.js.map +1 -1
  55. package/dist/lib/coverage-gate.d.ts +43 -0
  56. package/dist/lib/coverage-gate.js +54 -0
  57. package/dist/lib/coverage-gate.js.map +1 -0
  58. package/dist/lib/events.d.ts +12 -0
  59. package/dist/lib/events.js +8 -1
  60. package/dist/lib/events.js.map +1 -1
  61. package/dist/lib/frontmatter.d.ts +23 -1
  62. package/dist/lib/frontmatter.js +37 -0
  63. package/dist/lib/frontmatter.js.map +1 -1
  64. package/dist/lib/funnel.d.ts +5 -0
  65. package/dist/lib/funnel.js +2 -1
  66. package/dist/lib/funnel.js.map +1 -1
  67. package/dist/lib/gate-executor.d.ts +80 -0
  68. package/dist/lib/gate-executor.js +311 -0
  69. package/dist/lib/gate-executor.js.map +1 -0
  70. package/dist/lib/llm-health.d.ts +28 -0
  71. package/dist/lib/llm-health.js +46 -0
  72. package/dist/lib/llm-health.js.map +1 -0
  73. package/dist/lib/metrics.d.ts +26 -0
  74. package/dist/lib/metrics.js +35 -0
  75. package/dist/lib/metrics.js.map +1 -1
  76. package/dist/lib/next-action.d.ts +10 -4
  77. package/dist/lib/next-action.js +10 -4
  78. package/dist/lib/next-action.js.map +1 -1
  79. package/dist/lib/ollama-embed.d.ts +5 -0
  80. package/dist/lib/ollama-embed.js +5 -0
  81. package/dist/lib/ollama-embed.js.map +1 -1
  82. package/dist/lib/output.d.ts +3 -0
  83. package/dist/lib/output.js +3 -0
  84. package/dist/lib/output.js.map +1 -1
  85. package/dist/lib/pipeline-config.js +10 -0
  86. package/dist/lib/pipeline-config.js.map +1 -1
  87. package/dist/lib/pipeline-map.d.ts +24 -0
  88. package/dist/lib/pipeline-map.js +54 -5
  89. package/dist/lib/pipeline-map.js.map +1 -1
  90. package/dist/lib/predicate-registry.js +7 -0
  91. package/dist/lib/predicate-registry.js.map +1 -1
  92. package/dist/lib/reconcile-core.d.ts +20 -3
  93. package/dist/lib/reconcile-core.js +16 -6
  94. package/dist/lib/reconcile-core.js.map +1 -1
  95. package/dist/lib/run-pipeline.d.ts +118 -0
  96. package/dist/lib/run-pipeline.js +106 -0
  97. package/dist/lib/run-pipeline.js.map +1 -0
  98. package/dist/lib/scorecard.d.ts +5 -0
  99. package/dist/lib/scorecard.js +1 -0
  100. package/dist/lib/scorecard.js.map +1 -1
  101. package/dist/lib/spec-pure.d.ts +69 -4
  102. package/dist/lib/spec-pure.js +129 -15
  103. package/dist/lib/spec-pure.js.map +1 -1
  104. package/dist/lib/specs.d.ts +9 -3
  105. package/dist/lib/specs.js +43 -20
  106. package/dist/lib/specs.js.map +1 -1
  107. package/dist/lib/version.d.ts +1 -1
  108. package/dist/lib/version.js +1 -1
  109. package/dist/lib/version.js.map +1 -1
  110. package/dist/lib/with-event-log.js +17 -3
  111. package/dist/lib/with-event-log.js.map +1 -1
  112. 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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"}
@@ -1,3 +1,4 @@
1
+ import type { SpecConfig } from './config.js';
1
2
  import type { ActorType, PipelineSchema, PredicateRegistry } from './pipeline-schema.js';
2
3
  import type { SpecFile } from './specs.js';
3
4
  export type { ActorType } from './pipeline-schema.js';
@@ -102,3 +103,26 @@ export declare function isSupersededGate(t: Transition, spec: SpecFile): boolean
102
103
  * regulated cores OR PHI/PII-bearing specs (#1372). The navigator's review-stage
103
104
  * heuristic keys on this so the widened gate stays in one place. */
104
105
  export declare function isComplianceGated(spec: SpecFile): boolean;
106
+ /** The bundle a config-aware consumer (`next`/`status`/`reconcile`/`funnel`) needs
107
+ * to walk/derive stage under the REPO'S OWN `pipeline.layout`, instead of the
108
+ * static ENCORE1-only singletons ({@link PIPELINE}/{@link computeStage}) — see
109
+ * F-4 (#35): those singletons are built once from `ENCORE1_PIPELINE_SCHEMA` at
110
+ * module load, so a `pipeline.layout: builder` config was previously DECORATIVE
111
+ * outside `profile`/`conformance`. */
112
+ export type ResolvedPipeline = {
113
+ STATUS_ORDER: string[];
114
+ PIPELINE: Transition[];
115
+ rank: (status?: string) => number;
116
+ computeStage: (spec: SpecFile) => string;
117
+ supersedeSoftGates: boolean;
118
+ isSupersededGate: (t: Transition, spec: SpecFile) => boolean;
119
+ };
120
+ /** Resolve the `{ PIPELINE, computeStage, rank, isSupersededGate, ... }` quartet+
121
+ * for the pipeline layout `config.pipeline?.layout` selects (absent/'encore1' ⇒
122
+ * ENCORE1; 'builder' ⇒ the builder schema — same resolution `profile --json` uses
123
+ * via {@link resolvePipelineSchema}). `EOS_PIPELINE=legacy` still rolls the WHOLE
124
+ * engine back to the hand-written {@link LEGACY_PIPELINE}/{@link legacyComputeStage},
125
+ * taking precedence over `config.pipeline.layout` exactly as it does for the
126
+ * static singletons. Build ONCE per command invocation (not per spec) and reuse
127
+ * the returned bundle across the whole corpus walk. */
128
+ export declare function pipelineForConfig(config: SpecConfig, registry?: PredicateRegistry): ResolvedPipeline;
@@ -1,4 +1,4 @@
1
- import { ENCORE1_PIPELINE_SCHEMA } from './pipeline-config.js';
1
+ import { ENCORE1_PIPELINE_SCHEMA, resolvePipelineSchema } from './pipeline-config.js';
2
2
  import { validateSchema } from './pipeline-schema.js';
3
3
  import { DEFAULT_PREDICATES } from './predicate-registry.js';
4
4
  const STATUS_ORDER = [
@@ -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) {
@@ -326,10 +335,20 @@ export const SUPERSEDE_SOFT_GATES = process.env.EOS_PIPELINE === 'legacy' ? fals
326
335
  * HARD gates (regulated research, compliance sign-off) are never superseded either —
327
336
  * their completion cannot be implied by an out-of-order downstream artifact (#1372). */
328
337
  export function isSupersededGate(t, spec) {
329
- if (!SUPERSEDE_SOFT_GATES || t.hard || !t.completesStatus)
330
- return false;
331
- const tRank = rank(t.completesStatus);
332
- return tRank >= 0 && tRank < rank(computeStage(spec));
338
+ return makeIsSupersededGate(SUPERSEDE_SOFT_GATES, computeStage, rank)(t, spec);
339
+ }
340
+ /** Build an `isSupersededGate` closure bound to a specific layout's
341
+ * `supersedeSoftGates`/`computeStage`/`rank` the same rule the module-level
342
+ * {@link isSupersededGate} applies to the static ENCORE1/legacy singleton, but
343
+ * parameterized so a per-config {@link pipelineForConfig} build can apply it
344
+ * under its OWN computed stage instead of silently closing over the static one. */
345
+ function makeIsSupersededGate(supersedeSoftGates, computeStageFn, rankFn) {
346
+ return (t, spec) => {
347
+ if (!supersedeSoftGates || t.hard || !t.completesStatus)
348
+ return false;
349
+ const tRank = rankFn(t.completesStatus);
350
+ return tRank >= 0 && tRank < rankFn(computeStageFn(spec));
351
+ };
333
352
  }
334
353
  /** Whether a spec is gated on compliance review under the active (encore1) layout —
335
354
  * regulated cores OR PHI/PII-bearing specs (#1372). The navigator's review-stage
@@ -337,4 +356,34 @@ export function isSupersededGate(t, spec) {
337
356
  export function isComplianceGated(spec) {
338
357
  return DEFAULT_PREDICATES.complianceGating(spec);
339
358
  }
359
+ /** Resolve the `{ PIPELINE, computeStage, rank, isSupersededGate, ... }` quartet+
360
+ * for the pipeline layout `config.pipeline?.layout` selects (absent/'encore1' ⇒
361
+ * ENCORE1; 'builder' ⇒ the builder schema — same resolution `profile --json` uses
362
+ * via {@link resolvePipelineSchema}). `EOS_PIPELINE=legacy` still rolls the WHOLE
363
+ * engine back to the hand-written {@link LEGACY_PIPELINE}/{@link legacyComputeStage},
364
+ * taking precedence over `config.pipeline.layout` exactly as it does for the
365
+ * static singletons. Build ONCE per command invocation (not per spec) and reuse
366
+ * the returned bundle across the whole corpus walk. */
367
+ export function pipelineForConfig(config, registry = DEFAULT_PREDICATES) {
368
+ if (process.env.EOS_PIPELINE === 'legacy') {
369
+ return {
370
+ STATUS_ORDER,
371
+ PIPELINE: LEGACY_PIPELINE,
372
+ rank,
373
+ computeStage: legacyComputeStage,
374
+ supersedeSoftGates: false,
375
+ isSupersededGate: makeIsSupersededGate(false, legacyComputeStage, rank),
376
+ };
377
+ }
378
+ const schema = resolvePipelineSchema(config);
379
+ const built = buildPipeline(schema, registry);
380
+ return {
381
+ STATUS_ORDER: built.STATUS_ORDER,
382
+ PIPELINE: built.PIPELINE,
383
+ rank: built.rank,
384
+ computeStage: built.computeStage,
385
+ supersedeSoftGates: built.supersedeSoftGates,
386
+ isSupersededGate: makeIsSupersededGate(built.supersedeSoftGates, built.computeStage, built.rank),
387
+ };
388
+ }
340
389
  //# sourceMappingURL=pipeline-map.js.map
@@ -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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"}
@@ -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":"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"}
1
+ {"version":3,"file":"predicate-registry.js","sourceRoot":"","sources":["../../src/lib/predicate-registry.ts"],"names":[],"mappings":"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"}
@@ -1,4 +1,13 @@
1
1
  import type { SpecFile } from './specs.js';
2
+ /** The subset of a resolved layout (see `pipeline-map.ts`'s `pipelineForConfig`)
3
+ * `reconcileSpec`/`classify` need. Optional — defaults to the static ENCORE1/legacy
4
+ * singleton so existing direct callers (`run.ts`, `signoff.ts`, `closeout-core.ts`)
5
+ * are unaffected; `reconcile.ts` (the `reconcile` command) passes the repo's
6
+ * config-resolved bundle so `pipeline.layout: builder` is honored (F-4, #35). */
7
+ export type ReconcilePipeline = {
8
+ computeStage: (spec: SpecFile) => string;
9
+ rank: (status?: string) => number;
10
+ };
2
11
  /**
3
12
  * The per-spec reconcile core, extracted so the `reconcile` command AND the
4
13
  * `signoff --reconcile` post-step share ONE implementation and cannot drift
@@ -7,8 +16,10 @@ import type { SpecFile } from './specs.js';
7
16
  * writes the spec markdown) — stays behind the package main entry, never `/pure`.
8
17
  */
9
18
  export type ReconcileDirection = 'ok' | 'lagging' | 'overstated';
10
- /** Classify frontmatter status vs the artifact-derived stage. */
11
- export declare function classify(written: string | undefined, computed: string | undefined): ReconcileDirection;
19
+ /** Classify frontmatter status vs the artifact-derived stage. `rankFn` defaults to
20
+ * the static ENCORE1/legacy `rank`; pass the config-resolved one to classify under
21
+ * a non-default `pipeline.layout` (its status order may differ from ENCORE1's). */
22
+ export declare function classify(written: string | undefined, computed: string | undefined, rankFn?: (status?: string) => number): ReconcileDirection;
12
23
  export type ReconcileRow = {
13
24
  id: string;
14
25
  core: string;
@@ -22,5 +33,11 @@ export type ReconcileRow = {
22
33
  * `artifacts.tasks` pointer) into the spec frontmatter. Returns the divergence
23
34
  * row regardless of whether anything was written. Mirrors the inner loop body of
24
35
  * the `reconcile` command exactly (the command now delegates here).
36
+ *
37
+ * `pipeline` (optional) is the config-resolved layout bundle from
38
+ * `pipelineForConfig` (`pipeline-map.ts`) — pass it so a repo whose
39
+ * `specs/config.yaml` sets `pipeline.layout: builder` reconciles against the
40
+ * BUILDER stage order, not the ENCORE1 default (F-4, #35). Omitted ⇒ the static
41
+ * ENCORE1/legacy singleton, unchanged from prior behavior.
25
42
  */
26
- export declare function reconcileSpec(repoRoot: string, spec: SpecFile, write: boolean): ReconcileRow;
43
+ export declare function reconcileSpec(repoRoot: string, spec: SpecFile, write: boolean, pipeline?: ReconcilePipeline): ReconcileRow;
@@ -2,11 +2,13 @@ import { existsSync, readFileSync, writeFileSync } from 'node:fs';
2
2
  import { isAbsolute, join } from 'node:path';
3
3
  import { resolveTasksArtifact, setPipelineStatus, setTasksArtifact } from './frontmatter.js';
4
4
  import { computeStage, rank } from './pipeline-map.js';
5
- /** Classify frontmatter status vs the artifact-derived stage. */
6
- export function classify(written, computed) {
5
+ /** Classify frontmatter status vs the artifact-derived stage. `rankFn` defaults to
6
+ * the static ENCORE1/legacy `rank`; pass the config-resolved one to classify under
7
+ * a non-default `pipeline.layout` (its status order may differ from ENCORE1's). */
8
+ export function classify(written, computed, rankFn = rank) {
7
9
  if (written === computed)
8
10
  return 'ok';
9
- return rank(computed) > rank(written) ? 'lagging' : 'overstated';
11
+ return rankFn(computed) > rankFn(written) ? 'lagging' : 'overstated';
10
12
  }
11
13
  /**
12
14
  * Recompute one spec's pipeline_status from its on-disk artifacts and, when
@@ -14,11 +16,19 @@ export function classify(written, computed) {
14
16
  * `artifacts.tasks` pointer) into the spec frontmatter. Returns the divergence
15
17
  * row regardless of whether anything was written. Mirrors the inner loop body of
16
18
  * the `reconcile` command exactly (the command now delegates here).
19
+ *
20
+ * `pipeline` (optional) is the config-resolved layout bundle from
21
+ * `pipelineForConfig` (`pipeline-map.ts`) — pass it so a repo whose
22
+ * `specs/config.yaml` sets `pipeline.layout: builder` reconciles against the
23
+ * BUILDER stage order, not the ENCORE1 default (F-4, #35). Omitted ⇒ the static
24
+ * ENCORE1/legacy singleton, unchanged from prior behavior.
17
25
  */
18
- export function reconcileSpec(repoRoot, spec, write) {
19
- const computed = computeStage(spec);
26
+ export function reconcileSpec(repoRoot, spec, write, pipeline) {
27
+ const stageFn = pipeline?.computeStage ?? computeStage;
28
+ const rankFn = pipeline?.rank ?? rank;
29
+ const computed = stageFn(spec);
20
30
  const written = spec.signals.pipelineStatus;
21
- const direction = classify(written, computed);
31
+ const direction = classify(written, computed, rankFn);
22
32
  if (write && computed) {
23
33
  const original = readFileSync(spec.path, 'utf8');
24
34
  let text = original;
@@ -1 +1 @@
1
- {"version":3,"file":"reconcile-core.js","sourceRoot":"","sources":["../../src/lib/reconcile-core.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AAClE,OAAO,EAAE,UAAU,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAC7C,OAAO,EAAE,oBAAoB,EAAE,iBAAiB,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AAC7F,OAAO,EAAE,YAAY,EAAE,IAAI,EAAE,MAAM,mBAAmB,CAAC;AAavD,iEAAiE;AACjE,MAAM,UAAU,QAAQ,CAAC,OAA2B,EAAE,QAA4B;IAChF,IAAI,OAAO,KAAK,QAAQ;QAAE,OAAO,IAAI,CAAC;IACtC,OAAO,IAAI,CAAC,QAAQ,CAAC,GAAG,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,YAAY,CAAC;AACnE,CAAC;AAUD;;;;;;GAMG;AACH,MAAM,UAAU,aAAa,CAAC,QAAgB,EAAE,IAAc,EAAE,KAAc;IAC5E,MAAM,QAAQ,GAAG,YAAY,CAAC,IAAI,CAAC,CAAC;IACpC,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,cAAc,CAAC;IAC5C,MAAM,SAAS,GAAG,QAAQ,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC;IAC9C,IAAI,KAAK,IAAI,QAAQ,EAAE,CAAC;QACtB,MAAM,QAAQ,GAAG,YAAY,CAAC,IAAI,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;QACjD,IAAI,IAAI,GAAG,QAAQ,CAAC;QACpB,IAAI,SAAS,KAAK,IAAI;YAAE,IAAI,GAAG,iBAAiB,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;QACjE,+EAA+E;QAC/E,6EAA6E;QAC7E,8EAA8E;QAC9E,+EAA+E;QAC/E,2EAA2E;QAC3E,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC;YAClB,MAAM,UAAU,GAAG,CAAC,GAAW,EAAE,EAAE,CAAC,UAAU,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,QAAQ,EAAE,GAAG,CAAC,CAAC,CAAC;YAC5F,MAAM,IAAI,GAAG,oBAAoB,CAAC,IAAI,EAAE,SAAS,IAAI,CAAC,IAAI,UAAU,IAAI,CAAC,EAAE,WAAW,EAAE,UAAU,CAAC,CAAC;YACpG,IAAI,IAAI;gBAAE,IAAI,GAAG,gBAAgB,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;QAChD,CAAC;QACD,IAAI,IAAI,KAAK,QAAQ;YAAE,aAAa,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,EAAE,MAAM,CAAC,CAAC;IAChE,CAAC;IACD,OAAO,EAAE,EAAE,EAAE,IAAI,CAAC,EAAE,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,CAAC;AACxE,CAAC"}
1
+ {"version":3,"file":"reconcile-core.js","sourceRoot":"","sources":["../../src/lib/reconcile-core.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AAClE,OAAO,EAAE,UAAU,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAC7C,OAAO,EAAE,oBAAoB,EAAE,iBAAiB,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AAC7F,OAAO,EAAE,YAAY,EAAE,IAAI,EAAE,MAAM,mBAAmB,CAAC;AAuBvD;;oFAEoF;AACpF,MAAM,UAAU,QAAQ,CACtB,OAA2B,EAC3B,QAA4B,EAC5B,SAAsC,IAAI;IAE1C,IAAI,OAAO,KAAK,QAAQ;QAAE,OAAO,IAAI,CAAC;IACtC,OAAO,MAAM,CAAC,QAAQ,CAAC,GAAG,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,YAAY,CAAC;AACvE,CAAC;AAUD;;;;;;;;;;;;GAYG;AACH,MAAM,UAAU,aAAa,CAC3B,QAAgB,EAChB,IAAc,EACd,KAAc,EACd,QAA4B;IAE5B,MAAM,OAAO,GAAG,QAAQ,EAAE,YAAY,IAAI,YAAY,CAAC;IACvD,MAAM,MAAM,GAAG,QAAQ,EAAE,IAAI,IAAI,IAAI,CAAC;IACtC,MAAM,QAAQ,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAC/B,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,cAAc,CAAC;IAC5C,MAAM,SAAS,GAAG,QAAQ,CAAC,OAAO,EAAE,QAAQ,EAAE,MAAM,CAAC,CAAC;IACtD,IAAI,KAAK,IAAI,QAAQ,EAAE,CAAC;QACtB,MAAM,QAAQ,GAAG,YAAY,CAAC,IAAI,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;QACjD,IAAI,IAAI,GAAG,QAAQ,CAAC;QACpB,IAAI,SAAS,KAAK,IAAI;YAAE,IAAI,GAAG,iBAAiB,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;QACjE,+EAA+E;QAC/E,6EAA6E;QAC7E,8EAA8E;QAC9E,+EAA+E;QAC/E,2EAA2E;QAC3E,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC;YAClB,MAAM,UAAU,GAAG,CAAC,GAAW,EAAE,EAAE,CAAC,UAAU,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,QAAQ,EAAE,GAAG,CAAC,CAAC,CAAC;YAC5F,MAAM,IAAI,GAAG,oBAAoB,CAAC,IAAI,EAAE,SAAS,IAAI,CAAC,IAAI,UAAU,IAAI,CAAC,EAAE,WAAW,EAAE,UAAU,CAAC,CAAC;YACpG,IAAI,IAAI;gBAAE,IAAI,GAAG,gBAAgB,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;QAChD,CAAC;QACD,IAAI,IAAI,KAAK,QAAQ;YAAE,aAAa,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,EAAE,MAAM,CAAC,CAAC;IAChE,CAAC;IACD,OAAO,EAAE,EAAE,EAAE,IAAI,CAAC,EAAE,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,CAAC;AACxE,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":"AAAA;;;;;;;;;;;GAWG;AAsGH;;;;;;;GAOG;AACH,MAAM,CAAC,MAAM,qBAAqB,GAAwB,IAAI,GAAG,CAAC;IAChE,WAAW;IACX,cAAc;IACd,eAAe;IACf,kBAAkB;IAClB,YAAY;IACZ,kBAAkB;CACnB,CAAC,CAAC;AAEH;;;;GAIG;AACH,MAAM,CAAC,KAAK,UAAU,WAAW,CAAC,IAAa,EAAE,MAAiB;IAChE,IAAI,MAAM,CAAC,QAAQ,KAAK,SAAS,EAAE,CAAC;QAClC,qDAAqD;QACrD,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,EAAE,WAAW,EAAE,UAAU,EAAE,IAAI,CAAC,KAAK,EAAE,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,EAAE,CAAC;IAC/G,CAAC;IAED,MAAM,MAAM,GAAmB,EAAE,CAAC;IAClC,IAAI,KAAK,GAAG,CAAC,CAAC;IAEd,6EAA6E;IAC7E,4EAA4E;IAC5E,uDAAuD;IACvD,OAAO,IAAI,EAAE,CAAC;QACZ,MAAM,MAAM,GAAG,IAAI,CAAC,SAAS,EAAE,CAAC;QAEhC,0EAA0E;QAC1E,2EAA2E;QAC3E,8EAA8E;QAC9E,qDAAqD;QACrD,IAAI,qBAAqB,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC;YAC3C,OAAO;gBACL,QAAQ,EAAE,OAAO;gBACjB,MAAM;gBACN,MAAM,EAAE,uBAAuB;gBAC/B,QAAQ,EAAE,MAAM,CAAC,IAAI;gBACrB,UAAU,EAAE,MAAM,CAAC,UAAU;gBAC7B,UAAU,EAAE,IAAI,CAAC,KAAK,EAAE;aACzB,CAAC;QACJ,CAAC;QAED,MAAM,WAAW,GAAG,IAAI,CAAC,KAAK,EAAE,CAAC;QACjC,8EAA8E;QAC9E,4EAA4E;QAC5E,2EAA2E;QAC3E,sDAAsD;QACtD,IAAI,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC;YACtD,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,gBAAgB,EAAE,UAAU,EAAE,WAAW,EAAE,CAAC;QAC1F,CAAC;QACD,IAAI,KAAK,IAAI,MAAM,CAAC,QAAQ,EAAE,CAAC;YAC7B,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,WAAW,EAAE,UAAU,EAAE,WAAW,EAAE,CAAC;QACrF,CAAC;QAED,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;QACxC,KAAK,IAAI,CAAC,CAAC;QACX,MAAM,CAAC,IAAI,CAAC;YACV,IAAI,EAAE,MAAM,CAAC,IAAI;YACjB,EAAE,EAAE,IAAI,CAAC,EAAE;YACX,QAAQ,EAAE,IAAI,CAAC,QAAQ;YACvB,KAAK,EAAE,IAAI,CAAC,KAAK;YACjB,gBAAgB,EAAE,IAAI,CAAC,gBAAgB;YACvC,SAAS,EAAE,IAAI,CAAC,SAAS;YACzB,KAAK,EAAE,IAAI,CAAC,KAAK;SAClB,CAAC,CAAC;QACH,IAAI,CAAC,IAAI,CAAC,EAAE,EAAE,CAAC;YACb,OAAO;gBACL,QAAQ,EAAE,OAAO;gBACjB,MAAM;gBACN,wEAAwE;gBACxE,MAAM,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,gBAAgB;gBACpD,QAAQ,EAAE,MAAM,CAAC,IAAI;gBACrB,UAAU,EAAE,IAAI,CAAC,KAAK,EAAE;aACzB,CAAC;QACJ,CAAC;QAED,+EAA+E;QAC/E,gEAAgE;QAChE,IAAI,CAAC,SAAS,EAAE,CAAC;QAEjB,6EAA6E;QAC7E,6EAA6E;QAC7E,8EAA8E;QAC9E,+EAA+E;QAC/E,0EAA0E;QAC1E,MAAM,UAAU,GAAG,IAAI,CAAC,KAAK,EAAE,CAAC;QAChC,IAAI,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,IAAI,IAAI,CAAC,SAAS,EAAE,CAAC,IAAI,KAAK,MAAM,CAAC,IAAI,EAAE,CAAC;YAC7F,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,aAAa,EAAE,QAAQ,EAAE,MAAM,CAAC,IAAI,EAAE,UAAU,EAAE,UAAU,EAAE,CAAC;QAC7G,CAAC;IACH,CAAC;AACH,CAAC"}
@@ -26,6 +26,11 @@ export type ScorecardRow = {
26
26
  verifiedUndeclared: number;
27
27
  frontmatterAccurate: 'match' | 'overstated' | 'understated';
28
28
  claimedCompleteButUnverified: boolean;
29
+ /** D2: whether the spec carries a `coverage-waived` sign-off marker
30
+ * (`spec.signals.hasCoverageWaiver`) — the same escape hatch the `complete`
31
+ * verification-coverage gate honors. Carried through so `eos-spec scorecard`
32
+ * can compute the identical gate verdict without re-reading the spec file. */
33
+ hasCoverageWaiver: boolean;
29
34
  };
30
35
  export type ScorecardReport = {
31
36
  core: string;
@@ -104,6 +104,7 @@ export function computeScorecard(input) {
104
104
  verifiedUndeclared,
105
105
  frontmatterAccurate,
106
106
  claimedCompleteButUnverified: unverifiedComplete,
107
+ hasCoverageWaiver: r.spec.signals.hasCoverageWaiver === true,
107
108
  };
108
109
  });
109
110
  return {