@encore-os/eos-spec 0.9.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.
- package/dist/commands/archive.js +1 -1
- package/dist/commands/archive.js.map +1 -1
- package/dist/commands/close-out.js +1 -1
- package/dist/commands/close-out.js.map +1 -1
- package/dist/commands/complete.js +81 -4
- package/dist/commands/complete.js.map +1 -1
- package/dist/commands/create.js +6 -6
- package/dist/commands/create.js.map +1 -1
- package/dist/commands/funnel.js +7 -0
- package/dist/commands/funnel.js.map +1 -1
- package/dist/commands/next.d.ts +10 -4
- package/dist/commands/next.js +23 -12
- package/dist/commands/next.js.map +1 -1
- package/dist/commands/proceed.d.ts +48 -0
- package/dist/commands/proceed.js +144 -0
- package/dist/commands/proceed.js.map +1 -0
- package/dist/commands/reconcile.js +7 -1
- package/dist/commands/reconcile.js.map +1 -1
- package/dist/commands/run.d.ts +7 -4
- package/dist/commands/run.js +18 -10
- package/dist/commands/run.js.map +1 -1
- package/dist/commands/scorecard.d.ts +24 -0
- package/dist/commands/scorecard.js +49 -3
- package/dist/commands/scorecard.js.map +1 -1
- package/dist/commands/signoff.js +3 -2
- package/dist/commands/signoff.js.map +1 -1
- package/dist/commands/status.js +7 -1
- package/dist/commands/status.js.map +1 -1
- package/dist/commands/tasks.d.ts +7 -0
- package/dist/commands/tasks.js +13 -1
- package/dist/commands/tasks.js.map +1 -1
- package/dist/index.js +11 -0
- package/dist/index.js.map +1 -1
- package/dist/lib/config.d.ts +10 -0
- package/dist/lib/config.js.map +1 -1
- package/dist/lib/coverage-gate.d.ts +43 -0
- package/dist/lib/coverage-gate.js +54 -0
- package/dist/lib/coverage-gate.js.map +1 -0
- package/dist/lib/events.d.ts +1 -0
- package/dist/lib/events.js +8 -1
- package/dist/lib/events.js.map +1 -1
- package/dist/lib/frontmatter.d.ts +1 -1
- package/dist/lib/frontmatter.js.map +1 -1
- package/dist/lib/funnel.d.ts +5 -0
- package/dist/lib/funnel.js +2 -1
- package/dist/lib/funnel.js.map +1 -1
- package/dist/lib/pipeline-map.d.ts +24 -0
- package/dist/lib/pipeline-map.js +45 -5
- package/dist/lib/pipeline-map.js.map +1 -1
- package/dist/lib/reconcile-core.d.ts +20 -3
- package/dist/lib/reconcile-core.js +16 -6
- package/dist/lib/reconcile-core.js.map +1 -1
- package/dist/lib/scorecard.d.ts +5 -0
- package/dist/lib/scorecard.js +1 -0
- package/dist/lib/scorecard.js.map +1 -1
- package/dist/lib/spec-pure.js +4 -0
- package/dist/lib/spec-pure.js.map +1 -1
- package/dist/lib/specs.d.ts +6 -0
- package/dist/lib/specs.js.map +1 -1
- package/dist/lib/version.d.ts +1 -1
- package/dist/lib/version.js +1 -1
- package/dist/lib/version.js.map +1 -1
- package/dist/lib/with-event-log.js +17 -3
- package/dist/lib/with-event-log.js.map +1 -1
- package/package.json +1 -1
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
import type { Command } from 'commander';
|
|
2
|
+
import { type ActorType, type ResolvedPipeline } from '../lib/pipeline-map.js';
|
|
3
|
+
import { type SpecFile } from '../lib/specs.js';
|
|
4
|
+
/** One step in a `proceed` plan chain. */
|
|
5
|
+
export type PlanEntry = {
|
|
6
|
+
/** Stable id — matches the PIPELINE transition id (and `NextAction.type`). */
|
|
7
|
+
id: string;
|
|
8
|
+
actor: string;
|
|
9
|
+
actorType: ActorType;
|
|
10
|
+
invocation: string;
|
|
11
|
+
/** A hard gate (regulated research, compliance sign-off) or a human-gate actor —
|
|
12
|
+
* never implied by an out-of-order downstream artifact. */
|
|
13
|
+
isGate: boolean;
|
|
14
|
+
/** A command/skill transition that is not a gate — auto-runnable without a stop. */
|
|
15
|
+
isSoft: boolean;
|
|
16
|
+
/** Present only when `isGate` — the transition's reason, reused as-is. */
|
|
17
|
+
gateReason?: string;
|
|
18
|
+
};
|
|
19
|
+
export type PlanResult = {
|
|
20
|
+
spec: string;
|
|
21
|
+
currentStage: string;
|
|
22
|
+
complete: boolean;
|
|
23
|
+
chain: PlanEntry[];
|
|
24
|
+
nextGate: PlanEntry | null;
|
|
25
|
+
};
|
|
26
|
+
/** `pipeline` is the repo's config-resolved layout bundle (`pipelineForConfig`,
|
|
27
|
+
* pipeline-map.ts) — pass it so a `pipeline.layout: builder` config is honored
|
|
28
|
+
* (extends F-4, #35); omitted ⇒ the static ENCORE1/legacy singleton, unchanged
|
|
29
|
+
* from prior behavior. Mirrors `RecommendOptions` in `next.ts`. */
|
|
30
|
+
export type PlanOptions = {
|
|
31
|
+
strict?: boolean;
|
|
32
|
+
pipeline?: ResolvedPipeline;
|
|
33
|
+
};
|
|
34
|
+
/** Walk the SSOT pipeline exactly like `recommendAction` (next.ts) — same
|
|
35
|
+
* pre-loop short-circuit (backfill-frontmatter) and same in-loop skip
|
|
36
|
+
* conditions: optional, strictOnly-unless-strict, not-applicable (`stageApplies`),
|
|
37
|
+
* done, superseded (`isSupersededGate`) — but COLLECT every matching not-done
|
|
38
|
+
* transition instead of returning only the first. A pure PLANNER: it never
|
|
39
|
+
* executes anything, it only reports the ordered chain of remaining pipeline
|
|
40
|
+
* actions with gate stops marked.
|
|
41
|
+
*
|
|
42
|
+
* A shipped/complete spec mirrors `recommendAction`'s `isCompleteStatus`
|
|
43
|
+
* short-circuit: the lifecycle status overrides the artifact pipeline, so
|
|
44
|
+
* `proceed` never nags about gates an already-merged feature skipped.
|
|
45
|
+
* `recommendAction`'s SESSION-resume branch is intentionally NOT mirrored —
|
|
46
|
+
* `proceed` is a stateless planner, not a session resumer. */
|
|
47
|
+
export declare function planActions(spec: SpecFile, opts?: PlanOptions): PlanResult;
|
|
48
|
+
export declare function registerProceed(program: Command): void;
|
|
@@ -0,0 +1,144 @@
|
|
|
1
|
+
import { isCompleteStatus } from '../lib/blockers.js';
|
|
2
|
+
import { loadConfig } from '../lib/config.js';
|
|
3
|
+
import { ErrorCode, emit, getGlobalOptions } from '../lib/output.js';
|
|
4
|
+
import { computeStage, isComplianceGated, isSupersededGate, PIPELINE, pipelineForConfig, stageApplies, } from '../lib/pipeline-map.js';
|
|
5
|
+
import { getRepoRoot } from '../lib/repo.js';
|
|
6
|
+
import { diagnoseMissingSpec, findSpec } from '../lib/specs.js';
|
|
7
|
+
import { withEventLog } from '../lib/with-event-log.js';
|
|
8
|
+
/** Classify a transition (or the synthetic backfill-frontmatter short-circuit
|
|
9
|
+
* entry) into gate/soft flags. An `agent` actor (e.g. `compliance-reviewer`) is
|
|
10
|
+
* a STOP like a `human-gate`, mirroring `next.ts`'s own display convention
|
|
11
|
+
* (`formatAction`'s `[human-gate]` marker treats `human-gate` and `agent` alike) —
|
|
12
|
+
* never auto-runnable. */
|
|
13
|
+
function classifyEntry(t) {
|
|
14
|
+
const isGate = t.hard === true || t.actorType === 'human-gate' || t.actorType === 'agent';
|
|
15
|
+
const isSoft = !isGate && (t.actorType === 'command' || t.actorType === 'skill');
|
|
16
|
+
return { isGate, isSoft };
|
|
17
|
+
}
|
|
18
|
+
/** Walk the SSOT pipeline exactly like `recommendAction` (next.ts) — same
|
|
19
|
+
* pre-loop short-circuit (backfill-frontmatter) and same in-loop skip
|
|
20
|
+
* conditions: optional, strictOnly-unless-strict, not-applicable (`stageApplies`),
|
|
21
|
+
* done, superseded (`isSupersededGate`) — but COLLECT every matching not-done
|
|
22
|
+
* transition instead of returning only the first. A pure PLANNER: it never
|
|
23
|
+
* executes anything, it only reports the ordered chain of remaining pipeline
|
|
24
|
+
* actions with gate stops marked.
|
|
25
|
+
*
|
|
26
|
+
* A shipped/complete spec mirrors `recommendAction`'s `isCompleteStatus`
|
|
27
|
+
* short-circuit: the lifecycle status overrides the artifact pipeline, so
|
|
28
|
+
* `proceed` never nags about gates an already-merged feature skipped.
|
|
29
|
+
* `recommendAction`'s SESSION-resume branch is intentionally NOT mirrored —
|
|
30
|
+
* `proceed` is a stateless planner, not a session resumer. */
|
|
31
|
+
export function planActions(spec, opts) {
|
|
32
|
+
const strict = Boolean(opts?.strict);
|
|
33
|
+
const pipeline = opts?.pipeline?.PIPELINE ?? PIPELINE;
|
|
34
|
+
const computeStageFn = opts?.pipeline?.computeStage ?? computeStage;
|
|
35
|
+
const supersededCheck = opts?.pipeline?.isSupersededGate ?? isSupersededGate;
|
|
36
|
+
const currentStage = computeStageFn(spec);
|
|
37
|
+
if (isCompleteStatus(spec.status)) {
|
|
38
|
+
return { spec: spec.id, currentStage, complete: true, chain: [], nextGate: null };
|
|
39
|
+
}
|
|
40
|
+
// Mirror recommendAction's pre-loop short-circuit (next.ts ~L275-286, reusing its
|
|
41
|
+
// EXACT condition): a spec that passed review but has neither user stories nor
|
|
42
|
+
// acceptance criteria would otherwise walk straight past draft-acs/generate-tests
|
|
43
|
+
// (their `isDone` predicates are vacuously true in this state) and surface
|
|
44
|
+
// create-plan/generate-tasks as auto-runnable — for a spec with NO acceptance
|
|
45
|
+
// criteria. Surface backfill-frontmatter as the sole remaining step instead; once
|
|
46
|
+
// it's resolved (ACs added) a re-run of `proceed` walks the real pipeline.
|
|
47
|
+
const reviewStagesDone = isComplianceGated(spec) ? spec.signals.hasComplianceSignoff : spec.signals.hasSpecReview;
|
|
48
|
+
if (reviewStagesDone && !spec.signals.hasUserStories && !spec.signals.hasAcceptanceCriteria) {
|
|
49
|
+
const actorType = 'command';
|
|
50
|
+
const { isGate, isSoft } = classifyEntry({ actorType });
|
|
51
|
+
const entry = {
|
|
52
|
+
id: 'backfill-frontmatter',
|
|
53
|
+
actor: 'backfill (ac-draft + backfill-status)',
|
|
54
|
+
actorType,
|
|
55
|
+
invocation: `the encore-spec-ac-draft skill on ${spec.id} (then npm run spec:backfill-status -- --spec ${spec.id})`,
|
|
56
|
+
isGate,
|
|
57
|
+
isSoft,
|
|
58
|
+
...(isGate ? { gateReason: 'Spec passed review but has neither user stories nor acceptance criteria.' } : {}),
|
|
59
|
+
};
|
|
60
|
+
return { spec: spec.id, currentStage, complete: false, chain: [entry], nextGate: isGate ? entry : null };
|
|
61
|
+
}
|
|
62
|
+
const chain = [];
|
|
63
|
+
for (const t of pipeline) {
|
|
64
|
+
if (t.optional)
|
|
65
|
+
continue; // advisories never block; not part of the required chain
|
|
66
|
+
if (t.strictOnly && !strict)
|
|
67
|
+
continue;
|
|
68
|
+
if (!stageApplies(t, spec))
|
|
69
|
+
continue;
|
|
70
|
+
if (t.isDone(spec))
|
|
71
|
+
continue;
|
|
72
|
+
if (supersededCheck(t, spec))
|
|
73
|
+
continue;
|
|
74
|
+
const { isGate, isSoft } = classifyEntry(t);
|
|
75
|
+
chain.push({
|
|
76
|
+
id: t.id,
|
|
77
|
+
actor: t.actor,
|
|
78
|
+
actorType: t.actorType,
|
|
79
|
+
invocation: t.invocation(spec.id),
|
|
80
|
+
isGate,
|
|
81
|
+
isSoft,
|
|
82
|
+
...(isGate ? { gateReason: t.reason } : {}),
|
|
83
|
+
});
|
|
84
|
+
}
|
|
85
|
+
const nextGate = chain.find((e) => e.isGate) ?? null;
|
|
86
|
+
return { spec: spec.id, currentStage, complete: false, chain, nextGate };
|
|
87
|
+
}
|
|
88
|
+
function formatPlanText(plan) {
|
|
89
|
+
if (plan.complete) {
|
|
90
|
+
return `proceed [${plan.spec}] → complete: spec is already shipped/complete — nothing left to plan.`;
|
|
91
|
+
}
|
|
92
|
+
if (plan.chain.length === 0) {
|
|
93
|
+
return `proceed [${plan.spec}] → complete: no remaining applicable pipeline actions (stage: ${plan.currentStage}).`;
|
|
94
|
+
}
|
|
95
|
+
const lines = plan.chain.map((e, i) => {
|
|
96
|
+
const marker = e.isGate ? `⛔ gate: ${e.id}${e.gateReason ? ` (${e.gateReason})` : ''}` : e.id;
|
|
97
|
+
return ` ${i + 1}. ${marker}\n actor: ${e.actor} (${e.actorType})\n ▶ run: ${e.invocation}`;
|
|
98
|
+
});
|
|
99
|
+
const gateNote = plan.nextGate ? `next gate: ${plan.nextGate.id}` : '(no gate stops remain)';
|
|
100
|
+
return (`proceed [${plan.spec}] → ${plan.chain.length} remaining action(s) from stage "${plan.currentStage}":\n` +
|
|
101
|
+
`${lines.join('\n')}\n\n${gateNote}`);
|
|
102
|
+
}
|
|
103
|
+
export function registerProceed(program) {
|
|
104
|
+
program
|
|
105
|
+
.command('proceed')
|
|
106
|
+
.description('Show the full ordered chain of remaining pipeline actions for a spec, marking gate stops (planner; never executes).')
|
|
107
|
+
.option('--spec <id>', 'Single spec id (required)')
|
|
108
|
+
.option('--strict', 'Include the Phase 1 mid-pipeline parity gates (research-before-review, revalidate-after-review, compliance-for-sensitive) in the chain', false)
|
|
109
|
+
.action(withEventLog('proceed', async (options, cmd) => {
|
|
110
|
+
const global = getGlobalOptions(cmd);
|
|
111
|
+
const repoRoot = getRepoRoot(global.repoRoot);
|
|
112
|
+
const strict = Boolean(options.strict);
|
|
113
|
+
// Build once per invocation from the repo's own config, so a
|
|
114
|
+
// `pipeline.layout: builder` config is honored instead of the static
|
|
115
|
+
// ENCORE1 default (extends F-4, #35). Same call pattern as next.ts.
|
|
116
|
+
const pipeline = pipelineForConfig(loadConfig(repoRoot, global.config));
|
|
117
|
+
if (!options.spec) {
|
|
118
|
+
emit(global, {
|
|
119
|
+
ok: false,
|
|
120
|
+
error: { code: ErrorCode.SCOPE_REQUIRED, message: 'proceed requires --spec <id>' },
|
|
121
|
+
data: null,
|
|
122
|
+
text: 'proceed: requires --spec <id>',
|
|
123
|
+
exitCode: 2,
|
|
124
|
+
});
|
|
125
|
+
}
|
|
126
|
+
const spec = findSpec(repoRoot, options.spec);
|
|
127
|
+
if (!spec) {
|
|
128
|
+
const core = options.spec.split('-')[0]?.toLowerCase() ?? 'pf';
|
|
129
|
+
const diag = diagnoseMissingSpec(repoRoot, options.spec);
|
|
130
|
+
const text = diag.foundPath
|
|
131
|
+
? `proceed: spec ${options.spec} is not navigable\nreason: ${diag.reason}\nfile: ${diag.foundPath}\nhint: move/rename it under specs/${core}/specs/ or specs/${core}/ux/ with a {CORE}-UX-{N} name, or add YAML frontmatter, then re-run`
|
|
132
|
+
: `proceed: spec ${options.spec} not found\nhint: run \`eos-spec precedent --core ${core} --topic "<feature>"\` to check archived prior art, then create-spec`;
|
|
133
|
+
emit(global, {
|
|
134
|
+
ok: false,
|
|
135
|
+
error: { code: ErrorCode.SPEC_NOT_FOUND, message: text },
|
|
136
|
+
data: null,
|
|
137
|
+
text,
|
|
138
|
+
});
|
|
139
|
+
}
|
|
140
|
+
const plan = planActions(spec, { strict, pipeline });
|
|
141
|
+
emit(global, { ok: true, data: plan, text: formatPlanText(plan) });
|
|
142
|
+
}));
|
|
143
|
+
}
|
|
144
|
+
//# sourceMappingURL=proceed.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"proceed.js","sourceRoot":"","sources":["../../src/commands/proceed.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AACtD,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAC9C,OAAO,EAAE,SAAS,EAAE,IAAI,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AACrE,OAAO,EAEL,YAAY,EACZ,iBAAiB,EACjB,gBAAgB,EAChB,QAAQ,EACR,iBAAiB,EAEjB,YAAY,GACb,MAAM,wBAAwB,CAAC;AAChC,OAAO,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAC7C,OAAO,EAAE,mBAAmB,EAAE,QAAQ,EAAiB,MAAM,iBAAiB,CAAC;AAC/E,OAAO,EAAE,YAAY,EAAE,MAAM,0BAA0B,CAAC;AAgCxD;;;;2BAI2B;AAC3B,SAAS,aAAa,CAAC,CAA2C;IAChE,MAAM,MAAM,GAAG,CAAC,CAAC,IAAI,KAAK,IAAI,IAAI,CAAC,CAAC,SAAS,KAAK,YAAY,IAAI,CAAC,CAAC,SAAS,KAAK,OAAO,CAAC;IAC1F,MAAM,MAAM,GAAG,CAAC,MAAM,IAAI,CAAC,CAAC,CAAC,SAAS,KAAK,SAAS,IAAI,CAAC,CAAC,SAAS,KAAK,OAAO,CAAC,CAAC;IACjF,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC;AAC5B,CAAC;AAED;;;;;;;;;;;;+DAY+D;AAC/D,MAAM,UAAU,WAAW,CAAC,IAAc,EAAE,IAAkB;IAC5D,MAAM,MAAM,GAAG,OAAO,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;IACrC,MAAM,QAAQ,GAAG,IAAI,EAAE,QAAQ,EAAE,QAAQ,IAAI,QAAQ,CAAC;IACtD,MAAM,cAAc,GAAG,IAAI,EAAE,QAAQ,EAAE,YAAY,IAAI,YAAY,CAAC;IACpE,MAAM,eAAe,GAAG,IAAI,EAAE,QAAQ,EAAE,gBAAgB,IAAI,gBAAgB,CAAC;IAC7E,MAAM,YAAY,GAAG,cAAc,CAAC,IAAI,CAAC,CAAC;IAE1C,IAAI,gBAAgB,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC;QAClC,OAAO,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,EAAE,YAAY,EAAE,QAAQ,EAAE,IAAI,EAAE,KAAK,EAAE,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;IACpF,CAAC;IAED,kFAAkF;IAClF,+EAA+E;IAC/E,kFAAkF;IAClF,2EAA2E;IAC3E,8EAA8E;IAC9E,kFAAkF;IAClF,2EAA2E;IAC3E,MAAM,gBAAgB,GAAG,iBAAiB,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,oBAAoB,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC;IAClH,IAAI,gBAAgB,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,cAAc,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,qBAAqB,EAAE,CAAC;QAC5F,MAAM,SAAS,GAAc,SAAS,CAAC;QACvC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,GAAG,aAAa,CAAC,EAAE,SAAS,EAAE,CAAC,CAAC;QACxD,MAAM,KAAK,GAAc;YACvB,EAAE,EAAE,sBAAsB;YAC1B,KAAK,EAAE,uCAAuC;YAC9C,SAAS;YACT,UAAU,EAAE,qCAAqC,IAAI,CAAC,EAAE,iDAAiD,IAAI,CAAC,EAAE,GAAG;YACnH,MAAM;YACN,MAAM;YACN,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,UAAU,EAAE,0EAA0E,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;SAC9G,CAAC;QACF,OAAO,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,EAAE,YAAY,EAAE,QAAQ,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC,KAAK,CAAC,EAAE,QAAQ,EAAE,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;IAC3G,CAAC;IAED,MAAM,KAAK,GAAgB,EAAE,CAAC;IAC9B,KAAK,MAAM,CAAC,IAAI,QAAQ,EAAE,CAAC;QACzB,IAAI,CAAC,CAAC,QAAQ;YAAE,SAAS,CAAC,yDAAyD;QACnF,IAAI,CAAC,CAAC,UAAU,IAAI,CAAC,MAAM;YAAE,SAAS;QACtC,IAAI,CAAC,YAAY,CAAC,CAAC,EAAE,IAAI,CAAC;YAAE,SAAS;QACrC,IAAI,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC;YAAE,SAAS;QAC7B,IAAI,eAAe,CAAC,CAAC,EAAE,IAAI,CAAC;YAAE,SAAS;QAEvC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,GAAG,aAAa,CAAC,CAAC,CAAC,CAAC;QAC5C,KAAK,CAAC,IAAI,CAAC;YACT,EAAE,EAAE,CAAC,CAAC,EAAE;YACR,KAAK,EAAE,CAAC,CAAC,KAAK;YACd,SAAS,EAAE,CAAC,CAAC,SAAS;YACtB,UAAU,EAAE,CAAC,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC;YACjC,MAAM;YACN,MAAM;YACN,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;SAC5C,CAAC,CAAC;IACL,CAAC;IAED,MAAM,QAAQ,GAAG,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,IAAI,CAAC;IACrD,OAAO,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,EAAE,YAAY,EAAE,QAAQ,EAAE,KAAK,EAAE,KAAK,EAAE,QAAQ,EAAE,CAAC;AAC3E,CAAC;AAED,SAAS,cAAc,CAAC,IAAgB;IACtC,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC;QAClB,OAAO,YAAY,IAAI,CAAC,IAAI,wEAAwE,CAAC;IACvG,CAAC;IACD,IAAI,IAAI,CAAC,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC5B,OAAO,YAAY,IAAI,CAAC,IAAI,kEAAkE,IAAI,CAAC,YAAY,IAAI,CAAC;IACtH,CAAC;IACD,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE;QACpC,MAAM,MAAM,GAAG,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,UAAU,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;QAC9F,OAAO,KAAK,CAAC,GAAG,CAAC,KAAK,MAAM,iBAAiB,CAAC,CAAC,KAAK,KAAK,CAAC,CAAC,SAAS,kBAAkB,CAAC,CAAC,UAAU,EAAE,CAAC;IACvG,CAAC,CAAC,CAAC;IACH,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,cAAc,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,wBAAwB,CAAC;IAC7F,OAAO,CACL,YAAY,IAAI,CAAC,IAAI,OAAO,IAAI,CAAC,KAAK,CAAC,MAAM,oCAAoC,IAAI,CAAC,YAAY,MAAM;QACxG,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,QAAQ,EAAE,CACrC,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,eAAe,CAAC,OAAgB;IAC9C,OAAO;SACJ,OAAO,CAAC,SAAS,CAAC;SAClB,WAAW,CACV,qHAAqH,CACtH;SACA,MAAM,CAAC,aAAa,EAAE,2BAA2B,CAAC;SAClD,MAAM,CACL,UAAU,EACV,wIAAwI,EACxI,KAAK,CACN;SACA,MAAM,CACL,YAAY,CAAC,SAAS,EAAE,KAAK,EAAE,OAAO,EAAE,GAAG,EAAE,EAAE;QAC7C,MAAM,MAAM,GAAG,gBAAgB,CAAC,GAAc,CAAC,CAAC;QAChD,MAAM,QAAQ,GAAG,WAAW,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;QAC9C,MAAM,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;QACvC,6DAA6D;QAC7D,qEAAqE;QACrE,oEAAoE;QACpE,MAAM,QAAQ,GAAG,iBAAiB,CAAC,UAAU,CAAC,QAAQ,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC;QAExE,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC;YAClB,IAAI,CAAC,MAAM,EAAE;gBACX,EAAE,EAAE,KAAK;gBACT,KAAK,EAAE,EAAE,IAAI,EAAE,SAAS,CAAC,cAAc,EAAE,OAAO,EAAE,8BAA8B,EAAE;gBAClF,IAAI,EAAE,IAAI;gBACV,IAAI,EAAE,+BAA+B;gBACrC,QAAQ,EAAE,CAAC;aACZ,CAAC,CAAC;QACL,CAAC;QAED,MAAM,IAAI,GAAG,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAC,IAAI,CAAC,CAAC;QAC9C,IAAI,CAAC,IAAI,EAAE,CAAC;YACV,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,WAAW,EAAE,IAAI,IAAI,CAAC;YAC/D,MAAM,IAAI,GAAG,mBAAmB,CAAC,QAAQ,EAAE,OAAO,CAAC,IAAI,CAAC,CAAC;YACzD,MAAM,IAAI,GAAG,IAAI,CAAC,SAAS;gBACzB,CAAC,CAAC,iBAAiB,OAAO,CAAC,IAAI,8BAA8B,IAAI,CAAC,MAAM,WAAW,IAAI,CAAC,SAAS,sCAAsC,IAAI,oBAAoB,IAAI,sEAAsE;gBACzO,CAAC,CAAC,iBAAiB,OAAO,CAAC,IAAI,qDAAqD,IAAI,sEAAsE,CAAC;YACjK,IAAI,CAAC,MAAM,EAAE;gBACX,EAAE,EAAE,KAAK;gBACT,KAAK,EAAE,EAAE,IAAI,EAAE,SAAS,CAAC,cAAc,EAAE,OAAO,EAAE,IAAI,EAAE;gBACxD,IAAI,EAAE,IAAI;gBACV,IAAI;aACL,CAAC,CAAC;QACL,CAAC;QAED,MAAM,IAAI,GAAG,WAAW,CAAC,IAAK,EAAE,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC,CAAC;QACtD,IAAI,CAAC,MAAM,EAAE,EAAE,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,cAAc,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACrE,CAAC,CAAC,CACH,CAAC;AACN,CAAC"}
|
|
@@ -1,5 +1,7 @@
|
|
|
1
1
|
import { execSync } from 'node:child_process';
|
|
2
|
+
import { loadConfig } from '../lib/config.js';
|
|
2
3
|
import { ErrorCode, emit, getGlobalOptions } from '../lib/output.js';
|
|
4
|
+
import { pipelineForConfig } from '../lib/pipeline-map.js';
|
|
3
5
|
// The per-spec recompute+write lives in lib/reconcile-core.ts so the `signoff
|
|
4
6
|
// --reconcile` post-step shares ONE implementation (no divergence). The command
|
|
5
7
|
// re-exports the types/`classify` from there so existing importers are unchanged.
|
|
@@ -132,7 +134,11 @@ export function registerReconcile(program) {
|
|
|
132
134
|
if (options.spec) {
|
|
133
135
|
specs = specs.filter((s) => s.id.toUpperCase() === String(options.spec).toUpperCase());
|
|
134
136
|
}
|
|
135
|
-
|
|
137
|
+
// Build once per invocation (not per spec) from the repo's own config, so a
|
|
138
|
+
// `pipeline.layout: builder` config reconciles against the builder stage
|
|
139
|
+
// order instead of the static ENCORE1 default (F-4, #35).
|
|
140
|
+
const pipeline = pipelineForConfig(loadConfig(repoRoot, global.config));
|
|
141
|
+
const rows = specs.map((spec) => reconcileSpec(repoRoot, spec, Boolean(options.write), pipeline));
|
|
136
142
|
const diverged = rows.filter((r) => r.direction !== 'ok');
|
|
137
143
|
const overstated = diverged.filter((r) => r.direction === 'overstated');
|
|
138
144
|
emit(global, {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"reconcile.js","sourceRoot":"","sources":["../../src/commands/reconcile.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"reconcile.js","sourceRoot":"","sources":["../../src/commands/reconcile.ts"],"names":[],"mappings":"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"}
|
package/dist/commands/run.d.ts
CHANGED
|
@@ -2,9 +2,12 @@ import type { Command } from 'commander';
|
|
|
2
2
|
import { type SpecFile } from '../lib/specs.js';
|
|
3
3
|
/**
|
|
4
4
|
* The planned document-gate sequence from a spec's current state to `until`.
|
|
5
|
-
* Walks the SAME PIPELINE the navigator uses (optional +
|
|
6
|
-
* gates skipped), stopping once the gate
|
|
7
|
-
* by `--autonomy suggest` (executes
|
|
5
|
+
* Walks the SAME PIPELINE the navigator uses (optional + already-done gates
|
|
6
|
+
* skipped; strictOnly gates skipped UNLESS `strict`), stopping once the gate
|
|
7
|
+
* that completes `until` is included. Used by `--autonomy suggest` (executes
|
|
8
|
+
* nothing) and surfaced on the drive payload. `strict` should be
|
|
9
|
+
* `isComplianceGated(spec)` so regulated/PHI-sensitive specs surface the
|
|
10
|
+
* strictOnly parity gates instead of skipping past them.
|
|
8
11
|
*/
|
|
9
|
-
export declare function planGates(spec: SpecFile, until: string): string[];
|
|
12
|
+
export declare function planGates(spec: SpecFile, until: string, strict: boolean): string[];
|
|
10
13
|
export declare function registerRun(program: Command): void;
|
package/dist/commands/run.js
CHANGED
|
@@ -3,7 +3,7 @@ import { basename } from 'node:path';
|
|
|
3
3
|
import { addClaim, DEFAULT_TTL_MINUTES, releaseClaim } from '../lib/claims.js';
|
|
4
4
|
import { DEFAULT_LLM_BASE_URL, DEFAULT_LOCAL_MODEL, directModelExecutor, } from '../lib/gate-executor.js';
|
|
5
5
|
import { ErrorCode, emit, getGlobalOptions } from '../lib/output.js';
|
|
6
|
-
import { computeStage, PIPELINE, rank, stageApplies } from '../lib/pipeline-map.js';
|
|
6
|
+
import { computeStage, isComplianceGated, PIPELINE, rank, stageApplies } from '../lib/pipeline-map.js';
|
|
7
7
|
import { reconcileSpec } from '../lib/reconcile-core.js';
|
|
8
8
|
import { getRepoRoot } from '../lib/repo.js';
|
|
9
9
|
import { runPipeline } from '../lib/run-pipeline.js';
|
|
@@ -25,14 +25,17 @@ function resolveBaseUrl() {
|
|
|
25
25
|
}
|
|
26
26
|
/**
|
|
27
27
|
* The planned document-gate sequence from a spec's current state to `until`.
|
|
28
|
-
* Walks the SAME PIPELINE the navigator uses (optional +
|
|
29
|
-
* gates skipped), stopping once the gate
|
|
30
|
-
* by `--autonomy suggest` (executes
|
|
28
|
+
* Walks the SAME PIPELINE the navigator uses (optional + already-done gates
|
|
29
|
+
* skipped; strictOnly gates skipped UNLESS `strict`), stopping once the gate
|
|
30
|
+
* that completes `until` is included. Used by `--autonomy suggest` (executes
|
|
31
|
+
* nothing) and surfaced on the drive payload. `strict` should be
|
|
32
|
+
* `isComplianceGated(spec)` so regulated/PHI-sensitive specs surface the
|
|
33
|
+
* strictOnly parity gates instead of skipping past them.
|
|
31
34
|
*/
|
|
32
|
-
export function planGates(spec, until) {
|
|
35
|
+
export function planGates(spec, until, strict) {
|
|
33
36
|
const out = [];
|
|
34
37
|
for (const t of PIPELINE) {
|
|
35
|
-
if (t.optional || t.strictOnly)
|
|
38
|
+
if (t.optional || (t.strictOnly && !strict))
|
|
36
39
|
continue;
|
|
37
40
|
if (!stageApplies(t, spec))
|
|
38
41
|
continue;
|
|
@@ -123,6 +126,11 @@ export function registerRun(program) {
|
|
|
123
126
|
return;
|
|
124
127
|
}
|
|
125
128
|
const specId = spec0.id;
|
|
129
|
+
// Compliance-gated specs (regulated core OR PHI/PII-sensitive, #1372) walk the
|
|
130
|
+
// pipeline STRICT: the strictOnly parity gates (research-before-review,
|
|
131
|
+
// revalidate-after-review, compliance-for-sensitive) become blocking instead of
|
|
132
|
+
// being skipped. Non-gated specs get strict=false — byte-identical to today.
|
|
133
|
+
const strict = isComplianceGated(spec0);
|
|
126
134
|
const strictLocal = Boolean(options.strictLocal);
|
|
127
135
|
const baseURL = resolveBaseUrl();
|
|
128
136
|
const localModel = resolveLocalModel();
|
|
@@ -132,12 +140,12 @@ export function registerRun(program) {
|
|
|
132
140
|
// ── suggest: plan only, NO claim, NO writes (AC-7) ───────────────────
|
|
133
141
|
if (autonomy === 'suggest') {
|
|
134
142
|
const result = await runPipeline({
|
|
135
|
-
recommend: () => recommendAction(findSpec(repoRoot, specId), null, repoRoot),
|
|
143
|
+
recommend: () => recommendAction(findSpec(repoRoot, specId), null, repoRoot, { strict }),
|
|
136
144
|
stage: () => computeStage(findSpec(repoRoot, specId)),
|
|
137
145
|
rank,
|
|
138
146
|
execute: async () => ({ ok: true, executor: 'noop' }),
|
|
139
147
|
reconcile: () => { },
|
|
140
|
-
plan: () => planGates(spec0, until),
|
|
148
|
+
plan: () => planGates(spec0, until, strict),
|
|
141
149
|
}, { autonomy, until, maxGates });
|
|
142
150
|
emit(global, {
|
|
143
151
|
ok: true,
|
|
@@ -179,14 +187,14 @@ export function registerRun(program) {
|
|
|
179
187
|
let result;
|
|
180
188
|
try {
|
|
181
189
|
result = await runPipeline({
|
|
182
|
-
recommend: () => recommendAction(findSpec(repoRoot, specId), null, repoRoot),
|
|
190
|
+
recommend: () => recommendAction(findSpec(repoRoot, specId), null, repoRoot, { strict }),
|
|
183
191
|
stage: () => computeStage(findSpec(repoRoot, specId)),
|
|
184
192
|
rank,
|
|
185
193
|
execute,
|
|
186
194
|
reconcile: () => {
|
|
187
195
|
reconcileSpec(repoRoot, findSpec(repoRoot, specId), true);
|
|
188
196
|
},
|
|
189
|
-
plan: () => planGates(spec0, until),
|
|
197
|
+
plan: () => planGates(spec0, until, strict),
|
|
190
198
|
}, { autonomy, until, maxGates });
|
|
191
199
|
}
|
|
192
200
|
finally {
|
package/dist/commands/run.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"run.js","sourceRoot":"","sources":["../../src/commands/run.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACvC,OAAO,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAC;AAErC,OAAO,EAAE,QAAQ,EAAE,mBAAmB,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;AAC/E,OAAO,EACL,oBAAoB,EACpB,mBAAmB,EAEnB,mBAAmB,GACpB,MAAM,yBAAyB,CAAC;AACjC,OAAO,EAAE,SAAS,EAAE,IAAI,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AACrE,OAAO,EAAE,YAAY,EAAE,QAAQ,EAAE,IAAI,EAAE,YAAY,EAAE,MAAM,wBAAwB,CAAC;
|
|
1
|
+
{"version":3,"file":"run.js","sourceRoot":"","sources":["../../src/commands/run.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,4 +1,28 @@
|
|
|
1
1
|
import type { Command } from 'commander';
|
|
2
|
+
import { evaluateCoverageGate, resolveCoverageThreshold } from '../lib/coverage-gate.js';
|
|
3
|
+
import type { ScorecardRow } from '../lib/scorecard.js';
|
|
4
|
+
/** Per-spec coverage-vs-threshold gate fields (Component 3 of the D2 design):
|
|
5
|
+
* surfaced on `eos-spec scorecard` so a spec's `complete` gate verdict is
|
|
6
|
+
* visible BEFORE completion is attempted. Reuses the exact pure functions
|
|
7
|
+
* `complete` gates on (`resolveCoverageThreshold` / `evaluateCoverageGate`),
|
|
8
|
+
* so the two never drift. `coverageGate: 'no-gate'` (and null ratio/threshold
|
|
9
|
+
* fields) when the consuming repo never opted into `gate_thresholds` —
|
|
10
|
+
* matches the gate's fully-opt-in design. */
|
|
11
|
+
export type ScorecardCoverageFields = {
|
|
12
|
+
coverageRatio: number;
|
|
13
|
+
coverageThreshold: number | null;
|
|
14
|
+
coverageGate: ReturnType<typeof evaluateCoverageGate>['gate'];
|
|
15
|
+
};
|
|
16
|
+
/**
|
|
17
|
+
* Attach coverage-gate fields to every scorecard row. `config` is `null` when
|
|
18
|
+
* the repo has no `specs/config.yaml` (or it failed to load) — every row then
|
|
19
|
+
* reads as `no-gate`, matching `complete`'s fail-open behavior.
|
|
20
|
+
*/
|
|
21
|
+
export declare function withCoverageGate(rows: ScorecardRow[], config: Parameters<typeof resolveCoverageThreshold>[0] | null): (ScorecardRow & ScorecardCoverageFields)[];
|
|
22
|
+
/** Short human-readable coverage suffix for one row, e.g. ` cov 3/5 (60%) ⛔blocked`.
|
|
23
|
+
* Omitted entirely (returns '') for `no-gate` rows — the common case for a repo
|
|
24
|
+
* that never opted into `gate_thresholds` should not get noisy per-row suffixes. */
|
|
25
|
+
export declare function coverageSuffix(row: ScorecardRow & ScorecardCoverageFields): string;
|
|
2
26
|
/**
|
|
3
27
|
* Validate `--core` against the canonical cores list. A bogus core used to fall through to
|
|
4
28
|
* listSpecs() → 0 specs → an all-zero scorecard with exit 0 — dangerously plausible output.
|
|
@@ -1,8 +1,37 @@
|
|
|
1
|
+
import { loadConfig } from '../lib/config.js';
|
|
2
|
+
import { evaluateCoverageGate, resolveCoverageThreshold } from '../lib/coverage-gate.js';
|
|
1
3
|
import { ErrorCode, emit, getGlobalOptions } from '../lib/output.js';
|
|
2
4
|
import { coresList, getRepoRoot, isKnownCore } from '../lib/repo.js';
|
|
3
5
|
import { buildScorecardForCore } from '../lib/scorecard-run.js';
|
|
4
6
|
import { scanVerifies } from '../lib/verifies-scan.js';
|
|
5
7
|
import { withEventLog } from '../lib/with-event-log.js';
|
|
8
|
+
/**
|
|
9
|
+
* Attach coverage-gate fields to every scorecard row. `config` is `null` when
|
|
10
|
+
* the repo has no `specs/config.yaml` (or it failed to load) — every row then
|
|
11
|
+
* reads as `no-gate`, matching `complete`'s fail-open behavior.
|
|
12
|
+
*/
|
|
13
|
+
export function withCoverageGate(rows, config) {
|
|
14
|
+
return rows.map((row) => {
|
|
15
|
+
const coverageRatio = row.requirementsTotal === 0 ? 1 : row.requirementsVerified / row.requirementsTotal;
|
|
16
|
+
const coverageThreshold = config ? resolveCoverageThreshold(config, row.core) : null;
|
|
17
|
+
const coverageGate = evaluateCoverageGate({
|
|
18
|
+
ratio: coverageRatio,
|
|
19
|
+
threshold: coverageThreshold,
|
|
20
|
+
hasWaiver: row.hasCoverageWaiver,
|
|
21
|
+
}).gate;
|
|
22
|
+
return { ...row, coverageRatio, coverageThreshold, coverageGate };
|
|
23
|
+
});
|
|
24
|
+
}
|
|
25
|
+
/** Short human-readable coverage suffix for one row, e.g. ` cov 3/5 (60%) ⛔blocked`.
|
|
26
|
+
* Omitted entirely (returns '') for `no-gate` rows — the common case for a repo
|
|
27
|
+
* that never opted into `gate_thresholds` should not get noisy per-row suffixes. */
|
|
28
|
+
export function coverageSuffix(row) {
|
|
29
|
+
if (row.coverageGate === 'no-gate')
|
|
30
|
+
return '';
|
|
31
|
+
const pct = Math.round(row.coverageRatio * 100);
|
|
32
|
+
const badge = row.coverageGate === 'pass' ? '✓pass' : row.coverageGate === 'waived' ? 'waived' : '⛔blocked';
|
|
33
|
+
return ` cov ${row.requirementsVerified}/${row.requirementsTotal} (${pct}%) ${badge}`;
|
|
34
|
+
}
|
|
6
35
|
/**
|
|
7
36
|
* Validate `--core` against the canonical cores list. A bogus core used to fall through to
|
|
8
37
|
* listSpecs() → 0 specs → an all-zero scorecard with exit 0 — dangerously plausible output.
|
|
@@ -35,7 +64,21 @@ export function registerScorecard(program) {
|
|
|
35
64
|
}
|
|
36
65
|
const verifiedBySpec = scanVerifies(repoRoot);
|
|
37
66
|
const report = buildScorecardForCore(repoRoot, resolved.core, verifiedBySpec);
|
|
38
|
-
|
|
67
|
+
// D2 Component 3: surface each spec's coverage-vs-threshold gate status —
|
|
68
|
+
// the same verdict `eos-spec complete` would reach — so it's visible BEFORE
|
|
69
|
+
// completion is attempted. Fail-open (mirrors complete.ts): a repo with no
|
|
70
|
+
// specs/config.yaml (or an override that doesn't resolve) sees every row as
|
|
71
|
+
// 'no-gate', matching the fully opt-in gate design.
|
|
72
|
+
let config = null;
|
|
73
|
+
try {
|
|
74
|
+
config = loadConfig(repoRoot, global.config);
|
|
75
|
+
}
|
|
76
|
+
catch {
|
|
77
|
+
config = null;
|
|
78
|
+
}
|
|
79
|
+
const rows = withCoverageGate(report.rows, config);
|
|
80
|
+
const gated = rows.filter((r) => r.coverageGate !== 'no-gate');
|
|
81
|
+
const flagged = rows.filter((r) => r.claimedCompleteButUnverified);
|
|
39
82
|
const text = [
|
|
40
83
|
`Readiness scorecard (${report.core}): ${report.total} specs`,
|
|
41
84
|
` claims complete : ${report.claimsComplete}`,
|
|
@@ -45,11 +88,14 @@ export function registerScorecard(program) {
|
|
|
45
88
|
...(flagged.length
|
|
46
89
|
? [
|
|
47
90
|
' Claimed complete but unverified:',
|
|
48
|
-
...flagged.map((r) => ` ${r.id} (${r.stage}, ${r.requirementsVerified}/${r.requirementsTotal} reqs verified)`),
|
|
91
|
+
...flagged.map((r) => ` ${r.id} (${r.stage}, ${r.requirementsVerified}/${r.requirementsTotal} reqs verified)${coverageSuffix(r)}`),
|
|
49
92
|
]
|
|
50
93
|
: [' None claimed-complete-but-unverified.']),
|
|
94
|
+
...(gated.length
|
|
95
|
+
? ['', ' Coverage vs threshold:', ...gated.map((r) => ` ${r.id}${coverageSuffix(r)}`)]
|
|
96
|
+
: []),
|
|
51
97
|
].join('\n');
|
|
52
|
-
emit(global, { ok: true, data: report, text });
|
|
98
|
+
emit(global, { ok: true, data: { ...report, rows }, text });
|
|
53
99
|
}));
|
|
54
100
|
}
|
|
55
101
|
//# sourceMappingURL=scorecard.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"scorecard.js","sourceRoot":"","sources":["../../src/commands/scorecard.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,SAAS,EAAE,IAAI,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AACrE,OAAO,EAAE,SAAS,EAAE,WAAW,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;
|
|
1
|
+
{"version":3,"file":"scorecard.js","sourceRoot":"","sources":["../../src/commands/scorecard.ts"],"names":[],"mappings":"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"}
|
package/dist/commands/signoff.js
CHANGED
|
@@ -16,6 +16,7 @@ const VALID_TYPES = [
|
|
|
16
16
|
'ui-gate-waived',
|
|
17
17
|
'submit-e2e-waived',
|
|
18
18
|
'compliance',
|
|
19
|
+
'coverage-waived',
|
|
19
20
|
];
|
|
20
21
|
/** Today's date in YYYY-MM-DD form in the operator's LOCAL timezone, suitable for
|
|
21
22
|
* sign-off markers. Local (not UTC) so an evening sign-off doesn't stamp tomorrow. */
|
|
@@ -26,9 +27,9 @@ function isoToday() {
|
|
|
26
27
|
export function registerSignoff(program) {
|
|
27
28
|
program
|
|
28
29
|
.command('signoff')
|
|
29
|
-
.description("Write a sign-off marker (validated | spec-reviewed | revalidated-after-review | ux-reviewed | heal-verified | docshots | ui-gate-waived | submit-e2e-waived | compliance) to a spec; idempotent. By default recomputes the spec's pipeline_status afterward (--no-reconcile to skip).")
|
|
30
|
+
.description("Write a sign-off marker (validated | spec-reviewed | revalidated-after-review | ux-reviewed | heal-verified | docshots | ui-gate-waived | submit-e2e-waived | compliance | coverage-waived) to a spec; idempotent. By default recomputes the spec's pipeline_status afterward (--no-reconcile to skip).")
|
|
30
31
|
.requiredOption('--spec <id>', 'Spec id (e.g. PM-21)')
|
|
31
|
-
.requiredOption('--type <type>', 'Marker: validated | spec-reviewed | revalidated-after-review | ux-reviewed | heal-verified | docshots | ui-gate-waived | submit-e2e-waived | compliance')
|
|
32
|
+
.requiredOption('--type <type>', 'Marker: validated | spec-reviewed | revalidated-after-review | ux-reviewed | heal-verified | docshots | ui-gate-waived | submit-e2e-waived | compliance | coverage-waived')
|
|
32
33
|
.option('--date <YYYY-MM-DD>', 'Override the marker date (default: today)')
|
|
33
34
|
.option('--reviewer <name>', 'Reviewer name (compliance sign-off only)')
|
|
34
35
|
// Finding A item 4: a sign-off is THE artifact-writing transition; auto-reconcile
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"signoff.js","sourceRoot":"","sources":["../../src/commands/signoff.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AAC7E,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAE1C,OAAO,EAAE,mBAAmB,EAAoB,MAAM,uBAAuB,CAAC;AAC9E,OAAO,EAAE,SAAS,EAAE,IAAI,EAAE,cAAc,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AACrF,OAAO,EAAE,aAAa,EAAE,MAAM,0BAA0B,CAAC;AACzD,OAAO,EAAE,WAAW,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AACxD,OAAO,EAAE,mBAAmB,EAAE,QAAQ,EAAE,MAAM,iBAAiB,CAAC;AAChE,OAAO,EAAE,YAAY,EAAE,MAAM,0BAA0B,CAAC;AAExD,MAAM,WAAW,GAA2B;IAC1C,WAAW;IACX,eAAe;IACf,0BAA0B;IAC1B,aAAa;IACb,eAAe;IACf,UAAU;IACV,gBAAgB;IAChB,mBAAmB;IACnB,YAAY;
|
|
1
|
+
{"version":3,"file":"signoff.js","sourceRoot":"","sources":["../../src/commands/signoff.ts"],"names":[],"mappings":"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"}
|
package/dist/commands/status.js
CHANGED
|
@@ -1,7 +1,8 @@
|
|
|
1
1
|
import { existsSync, readFileSync } from 'node:fs';
|
|
2
2
|
import { join } from 'node:path';
|
|
3
|
+
import { loadConfig } from '../lib/config.js';
|
|
3
4
|
import { ErrorCode, emit, getGlobalOptions } from '../lib/output.js';
|
|
4
|
-
import {
|
|
5
|
+
import { isComplianceGated, pipelineForConfig } from '../lib/pipeline-map.js';
|
|
5
6
|
import { getRepoRoot } from '../lib/repo.js';
|
|
6
7
|
import { isClaimedCompleteUnverified } from '../lib/spec-debt.js';
|
|
7
8
|
import { findSpec, listSpecs } from '../lib/specs.js';
|
|
@@ -16,6 +17,10 @@ export function registerStatus(program) {
|
|
|
16
17
|
.action(withEventLog('status', async (options, cmd) => {
|
|
17
18
|
const global = getGlobalOptions(cmd);
|
|
18
19
|
const repoRoot = getRepoRoot(global.repoRoot);
|
|
20
|
+
// Build once per invocation from the repo's own config, so a
|
|
21
|
+
// `pipeline.layout: builder` config computes stage against the builder
|
|
22
|
+
// order instead of the static ENCORE1 default (F-4, #35).
|
|
23
|
+
const { computeStage } = pipelineForConfig(loadConfig(repoRoot, global.config));
|
|
19
24
|
if (options.spec) {
|
|
20
25
|
const spec = findSpec(repoRoot, options.spec, { includeArchived: options.includeArchived });
|
|
21
26
|
if (!spec) {
|
|
@@ -45,6 +50,7 @@ export function registerStatus(program) {
|
|
|
45
50
|
paths: { spec: spec.path, hasContext: spec.hasContext, hasPlan: spec.hasPlan, hasTasks: spec.hasTasks },
|
|
46
51
|
tasks: { total: totalTasks, completed: completedTasks },
|
|
47
52
|
claimedCompleteButUnverified: claimedCompleteUnverified,
|
|
53
|
+
isComplianceGated: isComplianceGated(spec),
|
|
48
54
|
};
|
|
49
55
|
emit(global, {
|
|
50
56
|
ok: true,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"status.js","sourceRoot":"","sources":["../../src/commands/status.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACnD,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAEjC,OAAO,EAAE,SAAS,EAAE,IAAI,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AACrE,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"status.js","sourceRoot":"","sources":["../../src/commands/status.ts"],"names":[],"mappings":"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"}
|