@encore-os/eos-spec 0.3.1 → 0.5.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/audit.js +11 -3
- package/dist/commands/audit.js.map +1 -1
- package/dist/commands/complete.js +41 -14
- package/dist/commands/complete.js.map +1 -1
- package/dist/commands/conformance.js +27 -0
- package/dist/commands/conformance.js.map +1 -1
- package/dist/commands/gen-tests.js +5 -2
- package/dist/commands/gen-tests.js.map +1 -1
- package/dist/commands/init.js +96 -22
- package/dist/commands/init.js.map +1 -1
- package/dist/commands/next.d.ts +20 -4
- package/dist/commands/next.js +53 -15
- package/dist/commands/next.js.map +1 -1
- package/dist/commands/precedent.d.ts +2 -0
- package/dist/commands/precedent.js +12 -3
- package/dist/commands/precedent.js.map +1 -1
- package/dist/commands/reconcile.d.ts +3 -10
- package/dist/commands/reconcile.js +6 -37
- package/dist/commands/reconcile.js.map +1 -1
- package/dist/commands/signoff.js +33 -5
- package/dist/commands/signoff.js.map +1 -1
- package/dist/commands/verify-acs.js +7 -4
- package/dist/commands/verify-acs.js.map +1 -1
- package/dist/index.d.ts +3 -2
- package/dist/index.js +15 -3
- package/dist/index.js.map +1 -1
- package/dist/lib/code-evidence.js +2 -1
- package/dist/lib/code-evidence.js.map +1 -1
- package/dist/lib/coherence.d.ts +2 -2
- package/dist/lib/coherence.js +7 -6
- package/dist/lib/coherence.js.map +1 -1
- package/dist/lib/config.d.ts +34 -2
- package/dist/lib/config.js +45 -3
- package/dist/lib/config.js.map +1 -1
- package/dist/lib/discovery-defaults.d.ts +20 -0
- package/dist/lib/discovery-defaults.js +21 -0
- package/dist/lib/discovery-defaults.js.map +1 -0
- package/dist/lib/embedding-store.d.ts +0 -2
- package/dist/lib/embedding-store.js +1 -1
- package/dist/lib/embedding-store.js.map +1 -1
- package/dist/lib/exec.d.ts +0 -2
- package/dist/lib/exec.js +1 -12
- package/dist/lib/exec.js.map +1 -1
- package/dist/lib/frontmatter.d.ts +5 -1
- package/dist/lib/frontmatter.js.map +1 -1
- package/dist/lib/migration-collision.d.ts +5 -4
- package/dist/lib/migration-collision.js +8 -6
- package/dist/lib/migration-collision.js.map +1 -1
- package/dist/lib/next-action.d.ts +19 -2
- package/dist/lib/next-action.js +28 -6
- package/dist/lib/next-action.js.map +1 -1
- package/dist/lib/ollama-embed.d.ts +0 -9
- package/dist/lib/ollama-embed.js +0 -35
- package/dist/lib/ollama-embed.js.map +1 -1
- package/dist/lib/pipeline-config.js +40 -2
- package/dist/lib/pipeline-config.js.map +1 -1
- package/dist/lib/pipeline-map.d.ts +30 -0
- package/dist/lib/pipeline-map.js +86 -5
- package/dist/lib/pipeline-map.js.map +1 -1
- package/dist/lib/pipeline-schema.d.ts +25 -1
- package/dist/lib/pipeline-schema.js +3 -0
- package/dist/lib/pipeline-schema.js.map +1 -1
- package/dist/lib/predicate-registry.js +28 -1
- package/dist/lib/predicate-registry.js.map +1 -1
- package/dist/lib/reconcile-core.d.ts +26 -0
- package/dist/lib/reconcile-core.js +43 -0
- package/dist/lib/reconcile-core.js.map +1 -0
- package/dist/lib/scaffold-templates.d.ts +30 -0
- package/dist/lib/scaffold-templates.js +203 -0
- package/dist/lib/scaffold-templates.js.map +1 -0
- package/dist/lib/spec-pure.js +44 -1
- package/dist/lib/spec-pure.js.map +1 -1
- package/dist/lib/specs.d.ts +17 -0
- package/dist/lib/specs.js.map +1 -1
- package/dist/lib/test-generator.d.ts +1 -1
- package/dist/lib/test-generator.js +3 -2
- package/dist/lib/test-generator.js.map +1 -1
- package/dist/lib/verifies-scan.d.ts +5 -1
- package/dist/lib/verifies-scan.js +9 -3
- package/dist/lib/verifies-scan.js.map +1 -1
- package/package.json +4 -4
package/dist/commands/audit.js
CHANGED
|
@@ -23,9 +23,17 @@ export function buildAuditRow(spec, backlinkedIds) {
|
|
|
23
23
|
const backlinked = backlinkedIds.size > 0 ? '✅' : '❌';
|
|
24
24
|
const e2eListed = spec.signals.hasGeneratedTests ? '✅' : '❌';
|
|
25
25
|
const prodReady = acValidated === '✅' && e2eListed === '✅' ? '✅' : '❌';
|
|
26
|
-
const
|
|
27
|
-
|
|
28
|
-
|
|
26
|
+
const notes = [];
|
|
27
|
+
if (handClosedUnbacked)
|
|
28
|
+
notes.push(`${ac.handClosed} hand_closed AC(s) without a "## Verification" section`);
|
|
29
|
+
// WEB-51 (warn-first): a UI-bearing spec at a done status should carry a `proof:`
|
|
30
|
+
// demo-proof artifact (a recorded walkthrough). Surfaced as a note; does NOT gate
|
|
31
|
+
// prodReady — a later change can promote this to a hard gate for UI specs.
|
|
32
|
+
const isDone = spec.status === 'complete' || spec.status === 'implemented';
|
|
33
|
+
if (isDone && spec.signals.isUiBearing && !spec.signals.hasProofArtifact) {
|
|
34
|
+
notes.push('UI spec at a done status with no demo proof (`proof:` artifact) — record one via the demo lane (WEB-51)');
|
|
35
|
+
}
|
|
36
|
+
const note = notes.length > 0 ? notes.join('; ') : undefined;
|
|
29
37
|
return {
|
|
30
38
|
id: spec.id,
|
|
31
39
|
status: spec.status ?? 'unknown',
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"audit.js","sourceRoot":"","sources":["../../src/commands/audit.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AACnD,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAEjC,OAAO,EAAE,IAAI,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AAC1D,OAAO,EAAE,SAAS,EAAE,WAAW,EAAE,iBAAiB,EAAE,MAAM,gBAAgB,CAAC;AAC3E,OAAO,EAAE,SAAS,EAAiB,MAAM,iBAAiB,CAAC;AAC3D,OAAO,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAC;AAgBvD;;;;;;;GAOG;AACH,MAAM,UAAU,aAAa,CAAC,IAAc,EAAE,aAA0B;IACtE,MAAM,EAAE,GAAG,IAAI,CAAC,OAAO,CAAC,QAAQ,IAAI,EAAE,OAAO,EAAE,CAAC,EAAE,QAAQ,EAAE,CAAC,EAAE,UAAU,EAAE,CAAC,EAAE,QAAQ,EAAE,CAAC,EAAE,CAAC;IAC5F,MAAM,KAAK,GAAG,EAAE,CAAC,OAAO,GAAG,EAAE,CAAC,QAAQ,GAAG,EAAE,CAAC,UAAU,GAAG,EAAE,CAAC,QAAQ,CAAC;IACrE,iFAAiF;IACjF,mFAAmF;IACnF,MAAM,kBAAkB,GAAG,EAAE,CAAC,UAAU,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,sBAAsB,CAAC;IACrF,MAAM,WAAW,GAAG,KAAK,GAAG,CAAC,IAAI,EAAE,CAAC,OAAO,KAAK,CAAC,CAAC;IAClD,MAAM,WAAW,GAAc,WAAW,IAAI,CAAC,kBAAkB,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC;IAC9E,MAAM,UAAU,GAAc,aAAa,CAAC,IAAI,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC;IACjE,MAAM,SAAS,GAAc,IAAI,CAAC,OAAO,CAAC,iBAAiB,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC;IACxE,MAAM,SAAS,GAAc,WAAW,KAAK,GAAG,IAAI,SAAS,KAAK,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC;IAClF,MAAM,IAAI,
|
|
1
|
+
{"version":3,"file":"audit.js","sourceRoot":"","sources":["../../src/commands/audit.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { archiveSpec } from '../lib/archive.js';
|
|
2
2
|
import { evaluateCoherence } from '../lib/coherence.js';
|
|
3
|
+
import { resolveDiscoveryPaths } from '../lib/config.js';
|
|
3
4
|
import { uiEvidenceGate } from '../lib/completion-gate.js';
|
|
4
5
|
import { loadEnforcementAllowlist } from '../lib/enforcement-allowlist.js';
|
|
5
6
|
import { runScript } from '../lib/exec.js';
|
|
@@ -17,29 +18,54 @@ export function registerComplete(program) {
|
|
|
17
18
|
.option('--include-deferred', 'Include deferred items in audit', false)
|
|
18
19
|
.option('--archive', 'After audit passes, move spec/plan/tasks to specs/{core}/archive/', false)
|
|
19
20
|
.option('--strict', 'Fail when coherence warnings are present', false)
|
|
20
|
-
.option('--
|
|
21
|
-
.option('--
|
|
21
|
+
.option('--enforce', 'BLOCK completion (non-zero exit) when a UI-bearing spec lacks docshots + heal sign-off; only a dated `ui-gate-waived` marker escapes (--no-ui-gate/--signoff do NOT bypass under --enforce)', false)
|
|
22
|
+
.option('--no-ui-gate', 'Skip the UI-evidence completion WARNING (ignored under --enforce)')
|
|
23
|
+
.option('--signoff', 'Acknowledge the UI-evidence warning (equivalent to --no-ui-gate for this run; ignored under --enforce)', false)
|
|
22
24
|
.action(async (options, cmd) => {
|
|
23
25
|
const global = getGlobalOptions(cmd);
|
|
24
26
|
const repoRoot = getRepoRoot(global.repoRoot);
|
|
25
|
-
//
|
|
26
|
-
//
|
|
27
|
-
//
|
|
28
|
-
// commander maps `--no-ui-gate` to options.uiGate === false.
|
|
29
|
-
|
|
27
|
+
// Phase 2 (Finding B item 1): the UI-evidence gate. A UI-bearing spec must carry
|
|
28
|
+
// docshots + a heal sign-off (or a dated `ui-gate-waived` marker) to complete.
|
|
29
|
+
// • DEFAULT (no --enforce): WARN-only, back-compat. `--no-ui-gate`/`--signoff`
|
|
30
|
+
// suppress the warning. (commander maps `--no-ui-gate` to options.uiGate === false.)
|
|
31
|
+
// • --enforce: BLOCK — emit the error path with a non-zero exit and DO NOT run
|
|
32
|
+
// the audit/registry write. The blanket `--no-ui-gate`/`--signoff` bypass is
|
|
33
|
+
// INTENTIONALLY ignored; the ONLY escape is a dated `ui-gate-waived` marker,
|
|
34
|
+
// which `uiEvidenceGate` already honors via the hasUiGateWaiver short-circuit.
|
|
35
|
+
// • The `!isUiBearing` short-circuit is preserved inside uiEvidenceGate, so
|
|
36
|
+
// backend/data specs always pass — even under --enforce.
|
|
37
|
+
if (options.spec && (options.enforce || (options.uiGate !== false && !options.signoff))) {
|
|
38
|
+
let verdictReason = null;
|
|
30
39
|
try {
|
|
31
40
|
const spec = findSpec(repoRoot, String(options.spec));
|
|
32
41
|
if (spec) {
|
|
33
42
|
const verdict = uiEvidenceGate(spec);
|
|
34
|
-
if (!verdict.ok)
|
|
35
|
-
|
|
36
|
-
const blocked = allow.block.includes(spec.core);
|
|
37
|
-
emitContinuing(global, `complete: ui-evidence ${blocked ? 'GATE' : 'warning'} — ${verdict.reason}`);
|
|
38
|
-
}
|
|
43
|
+
if (!verdict.ok)
|
|
44
|
+
verdictReason = verdict.reason;
|
|
39
45
|
}
|
|
40
46
|
}
|
|
41
47
|
catch {
|
|
42
|
-
// fail-open: a gate must never make
|
|
48
|
+
// fail-open ONLY in warn mode: a gate must never make a non-enforced
|
|
49
|
+
// `complete` unusable. Under --enforce a lookup failure leaves verdictReason
|
|
50
|
+
// null (we cannot prove a violation), so it does not spuriously block.
|
|
51
|
+
}
|
|
52
|
+
if (verdictReason) {
|
|
53
|
+
if (options.enforce) {
|
|
54
|
+
emit(global, {
|
|
55
|
+
ok: false,
|
|
56
|
+
error: {
|
|
57
|
+
code: ErrorCode.VALIDATION_FAILED,
|
|
58
|
+
message: `complete: ui-evidence gate failed — ${verdictReason}`,
|
|
59
|
+
},
|
|
60
|
+
data: { uiEvidence: { ok: false, reason: verdictReason } },
|
|
61
|
+
text: `complete: BLOCKED by --enforce — ${verdictReason}`,
|
|
62
|
+
exitCode: 1,
|
|
63
|
+
});
|
|
64
|
+
return;
|
|
65
|
+
}
|
|
66
|
+
const allow = loadEnforcementAllowlist(repoRoot);
|
|
67
|
+
const blocked = allow.block.includes(String(options.spec).toUpperCase().split('-')[0]?.toLowerCase() ?? '');
|
|
68
|
+
emitContinuing(global, `complete: ui-evidence ${blocked ? 'GATE' : 'warning'} — ${verdictReason}`);
|
|
43
69
|
}
|
|
44
70
|
}
|
|
45
71
|
const args = ['node', 'scripts/audit/audit-spec-completion.js'];
|
|
@@ -65,7 +91,8 @@ export function registerComplete(program) {
|
|
|
65
91
|
if (ok && options.spec) {
|
|
66
92
|
const core = String(options.spec).toUpperCase().split('-')[0]?.toLowerCase();
|
|
67
93
|
if (core) {
|
|
68
|
-
const
|
|
94
|
+
const { migrationsDir } = resolveDiscoveryPaths(repoRoot, global.config);
|
|
95
|
+
const coherence = evaluateCoherence(repoRoot, String(options.spec).toUpperCase(), core, migrationsDir);
|
|
69
96
|
coherenceWarnings = coherence.warnings.map((w) => w.message);
|
|
70
97
|
if (coherenceWarnings.length > 0 && !global.json && !global.quiet) {
|
|
71
98
|
emitContinuing(global, `complete: coherence warnings (${coherenceWarnings.length})`);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"complete.js","sourceRoot":"","sources":["../../src/commands/complete.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAChD,OAAO,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AACxD,OAAO,EAAE,cAAc,EAAE,MAAM,2BAA2B,CAAC;AAC3D,OAAO,EAAE,wBAAwB,EAAE,MAAM,iCAAiC,CAAC;AAC3E,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAC3C,OAAO,EAAE,SAAS,EAAE,IAAI,EAAE,cAAc,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AACrF,OAAO,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAC7C,OAAO,EAAE,QAAQ,EAAE,MAAM,iBAAiB,CAAC;AAE3C,MAAM,UAAU,gBAAgB,CAAC,OAAgB;IAC/C,OAAO;SACJ,OAAO,CAAC,UAAU,CAAC;SACnB,WAAW,CACV,4HAA4H,CAC7H;SACA,MAAM,CAAC,aAAa,EAAE,6BAA6B,CAAC;SACpD,MAAM,CAAC,eAAe,EAAE,mBAAmB,CAAC;SAC5C,MAAM,CAAC,OAAO,EAAE,4BAA4B,EAAE,KAAK,CAAC;SACpD,MAAM,CAAC,mBAAmB,EAAE,6CAA6C,EAAE,KAAK,CAAC;SACjF,MAAM,CAAC,oBAAoB,EAAE,iCAAiC,EAAE,KAAK,CAAC;SACtE,MAAM,CAAC,WAAW,EAAE,mEAAmE,EAAE,KAAK,CAAC;SAC/F,MAAM,CAAC,UAAU,EAAE,0CAA0C,EAAE,KAAK,CAAC;SACrE,MAAM,CAAC,cAAc,EAAE,
|
|
1
|
+
{"version":3,"file":"complete.js","sourceRoot":"","sources":["../../src/commands/complete.ts"],"names":[],"mappings":"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"}
|
|
@@ -99,6 +99,33 @@ export function runConformanceChecks() {
|
|
|
99
99
|
}
|
|
100
100
|
return `${cases.length} stage decisions correct (stub→tasks_generated + regulated honest-cap)`;
|
|
101
101
|
});
|
|
102
|
+
// Issue #12 — the encoreos healthcare-domain divergences folded into the engine,
|
|
103
|
+
// config-driven. Proven against the PUBLISHED artifact so a consumer-adoption /
|
|
104
|
+
// pack-smoke run catches a regression in either fold.
|
|
105
|
+
guard('navigator:compliance-gating', () => {
|
|
106
|
+
const e1 = buildPipeline(ENCORE1_PIPELINE_SCHEMA, DEFAULT_PREDICATES);
|
|
107
|
+
// A PHI-bearing spec in a NON-regulated core (#1372): the compliance gate applies.
|
|
108
|
+
const phi = navSpec('fw', '---\nid: XX-1\ncore: fw\ntags:\n - phi\n---\n<!-- validated: 2026-01-01 -->\n<!-- spec-reviewed: 2026-01-01 -->\n');
|
|
109
|
+
if (!phi.signals.isSensitive)
|
|
110
|
+
throw new Error('expected PHI-tagged fw spec to be sensitive');
|
|
111
|
+
if (e1.computeStage(phi) !== 'reviewed') {
|
|
112
|
+
throw new Error(`PHI-bearing fw spec should hold at reviewed pending compliance, got ${e1.computeStage(phi)}`);
|
|
113
|
+
}
|
|
114
|
+
// Builder has no compliance stage — the widening cannot leak into it.
|
|
115
|
+
if (BUILDER_PIPELINE_SCHEMA.statusOrder.includes('compliance_reviewed')) {
|
|
116
|
+
throw new Error('builder layout must not carry a compliance_reviewed status');
|
|
117
|
+
}
|
|
118
|
+
return 'compliance gate widened to PHI-bearing (encore1), builder layout has no compliance stage';
|
|
119
|
+
});
|
|
120
|
+
guard('navigator:supersession', () => {
|
|
121
|
+
const e1 = buildPipeline(ENCORE1_PIPELINE_SCHEMA, DEFAULT_PREDICATES);
|
|
122
|
+
if (!e1.supersedeSoftGates)
|
|
123
|
+
throw new Error('encore1 layout should set supersedeSoftGates');
|
|
124
|
+
if (buildPipeline(BUILDER_PIPELINE_SCHEMA, DEFAULT_PREDICATES).supersedeSoftGates) {
|
|
125
|
+
throw new Error('builder layout must not supersede soft gates');
|
|
126
|
+
}
|
|
127
|
+
return 'encore1 supersedes soft gates (#1593); builder does not';
|
|
128
|
+
});
|
|
102
129
|
return checks;
|
|
103
130
|
}
|
|
104
131
|
export function registerConformance(program) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"conformance.js","sourceRoot":"","sources":["../../src/commands/conformance.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"conformance.js","sourceRoot":"","sources":["../../src/commands/conformance.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,5 +1,7 @@
|
|
|
1
1
|
import { mkdirSync, readFileSync, writeFileSync } from 'node:fs';
|
|
2
2
|
import { dirname, join } from 'node:path';
|
|
3
|
+
import { resolveDiscoveryPaths } from '../lib/config.js';
|
|
4
|
+
import { DEFAULT_GENERATED_TESTS_DIR } from '../lib/discovery-defaults.js';
|
|
3
5
|
import { readFrontmatter, setE2eTests } from '../lib/frontmatter.js';
|
|
4
6
|
import { emit, getGlobalOptions } from '../lib/output.js';
|
|
5
7
|
import { normalizeAcceptanceCriteria } from '../lib/requirements.js';
|
|
@@ -11,7 +13,7 @@ export function registerGenTests(program) {
|
|
|
11
13
|
.command('gen-tests')
|
|
12
14
|
.description('Generate a fixme-gated test skeleton (@verifies-stamped) from a spec’s acceptance_criteria. Dry-run unless --write.')
|
|
13
15
|
.requiredOption('--spec <id>', 'Spec id, e.g. WEB-05')
|
|
14
|
-
.option('--write',
|
|
16
|
+
.option('--write', `Write the generated file under ${DEFAULT_GENERATED_TESTS_DIR}/`, false)
|
|
15
17
|
.option('--update-frontmatter', 'Also add the generated path to the spec’s e2e_tests:', false)
|
|
16
18
|
.option('--lane <lane>', 'Override the ui|integration heuristic')
|
|
17
19
|
.action((options, cmd) => {
|
|
@@ -24,7 +26,8 @@ export function registerGenTests(program) {
|
|
|
24
26
|
const fm = readFrontmatter(specText);
|
|
25
27
|
const { acs } = normalizeAcceptanceCriteria(fm.acceptance_criteria);
|
|
26
28
|
const lane = options.lane === 'ui' || options.lane === 'integration' ? options.lane : classifyLane(acs);
|
|
27
|
-
const
|
|
29
|
+
const { generatedTestsDir } = resolveDiscoveryPaths(repoRoot, global.config);
|
|
30
|
+
const rel = generatedRelPath(spec.id, lane, generatedTestsDir);
|
|
28
31
|
const content = generateTestContent(spec.id, spec.title ?? spec.id, acs, lane);
|
|
29
32
|
if (!options.write)
|
|
30
33
|
emit(global, {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"gen-tests.js","sourceRoot":"","sources":["../../src/commands/gen-tests.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AACjE,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAE1C,OAAO,EAAE,eAAe,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AACrE,OAAO,EAAE,IAAI,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AAC1D,OAAO,EAAE,2BAA2B,EAAE,MAAM,wBAAwB,CAAC;AACrE,OAAO,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAC7C,OAAO,EAAE,QAAQ,EAAE,MAAM,iBAAiB,CAAC;AAC3C,OAAO,EAAE,YAAY,EAAE,mBAAmB,EAAE,gBAAgB,EAAE,MAAM,0BAA0B,CAAC;AAC/F,MAAM,UAAU,gBAAgB,CAAC,OAAgB;IAC/C,OAAO;SACJ,OAAO,CAAC,WAAW,CAAC;SACpB,WAAW,CACV,qHAAqH,CACtH;SACA,cAAc,CAAC,aAAa,EAAE,sBAAsB,CAAC;SACrD,MAAM,CAAC,SAAS,EAAE
|
|
1
|
+
{"version":3,"file":"gen-tests.js","sourceRoot":"","sources":["../../src/commands/gen-tests.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AACjE,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAE1C,OAAO,EAAE,qBAAqB,EAAE,MAAM,kBAAkB,CAAC;AACzD,OAAO,EAAE,2BAA2B,EAAE,MAAM,8BAA8B,CAAC;AAC3E,OAAO,EAAE,eAAe,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AACrE,OAAO,EAAE,IAAI,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AAC1D,OAAO,EAAE,2BAA2B,EAAE,MAAM,wBAAwB,CAAC;AACrE,OAAO,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAC7C,OAAO,EAAE,QAAQ,EAAE,MAAM,iBAAiB,CAAC;AAC3C,OAAO,EAAE,YAAY,EAAE,mBAAmB,EAAE,gBAAgB,EAAE,MAAM,0BAA0B,CAAC;AAC/F,MAAM,UAAU,gBAAgB,CAAC,OAAgB;IAC/C,OAAO;SACJ,OAAO,CAAC,WAAW,CAAC;SACpB,WAAW,CACV,qHAAqH,CACtH;SACA,cAAc,CAAC,aAAa,EAAE,sBAAsB,CAAC;SACrD,MAAM,CAAC,SAAS,EAAE,kCAAkC,2BAA2B,GAAG,EAAE,KAAK,CAAC;SAC1F,MAAM,CAAC,sBAAsB,EAAE,sDAAsD,EAAE,KAAK,CAAC;SAC7F,MAAM,CAAC,eAAe,EAAE,uCAAuC,CAAC;SAChE,MAAM,CAAC,CAAC,OAAO,EAAE,GAAG,EAAE,EAAE;QACvB,MAAM,MAAM,GAAG,gBAAgB,CAAC,GAAG,CAAC,CAAC;QACrC,MAAM,QAAQ,GAAG,WAAW,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;QAC9C,MAAM,IAAI,GAAG,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAC,IAAI,CAAC,CAAC;QAC9C,IAAI,CAAC,IAAI;YAAE,IAAI,CAAC,MAAM,EAAE,EAAE,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,EAAE,EAAE,IAAI,EAAE,8BAA8B,OAAO,CAAC,IAAI,EAAE,EAAE,QAAQ,EAAE,CAAC,EAAE,CAAC,CAAC;QAClH,MAAM,QAAQ,GAAG,YAAY,CAAC,IAAK,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;QAClD,MAAM,EAAE,GAAG,eAAe,CAAC,QAAQ,CAAC,CAAC;QACrC,MAAM,EAAE,GAAG,EAAE,GAAG,2BAA2B,CAAC,EAAE,CAAC,mBAAmB,CAAC,CAAC;QACpE,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,KAAK,IAAI,IAAI,OAAO,CAAC,IAAI,KAAK,aAAa,CAAC,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC;QACxG,MAAM,EAAE,iBAAiB,EAAE,GAAG,qBAAqB,CAAC,QAAQ,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC;QAC7E,MAAM,GAAG,GAAG,gBAAgB,CAAC,IAAK,CAAC,EAAE,EAAE,IAAI,EAAE,iBAAiB,CAAC,CAAC;QAChE,MAAM,OAAO,GAAG,mBAAmB,CAAC,IAAK,CAAC,EAAE,EAAE,IAAK,CAAC,KAAK,IAAI,IAAK,CAAC,EAAE,EAAE,GAAG,EAAE,IAAI,CAAC,CAAC;QAClF,IAAI,CAAC,OAAO,CAAC,KAAK;YAChB,IAAI,CAAC,MAAM,EAAE;gBACX,EAAE,EAAE,IAAI;gBACR,IAAI,EAAE,EAAE,IAAI,EAAE,IAAK,CAAC,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE;gBAC5E,IAAI,EAAE,0BAA0B,GAAG,UAAU,IAAI,KAAK,GAAG,CAAC,MAAM,qBAAqB;aACtF,CAAC,CAAC;QACL,MAAM,GAAG,GAAG,IAAI,CAAC,QAAQ,EAAE,GAAG,CAAC,CAAC;QAChC,SAAS,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QAC7C,aAAa,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC;QAC5B,IAAI,OAAO,CAAC,iBAAiB;YAAE,aAAa,CAAC,IAAK,CAAC,IAAI,EAAE,WAAW,CAAC,QAAQ,EAAE,GAAG,CAAC,CAAC,CAAC;QACrF,IAAI,CAAC,MAAM,EAAE;YACX,EAAE,EAAE,IAAI;YACR,IAAI,EAAE;gBACJ,IAAI,EAAE,IAAK,CAAC,EAAE;gBACd,IAAI;gBACJ,IAAI,EAAE,GAAG;gBACT,OAAO,EAAE,GAAG,CAAC,MAAM;gBACnB,kBAAkB,EAAE,OAAO,CAAC,OAAO,CAAC,iBAAiB,CAAC;aACvD;YACD,IAAI,EAAE,oBAAoB,GAAG,UAAU,IAAI,KAAK,GAAG,CAAC,MAAM,OAAO,OAAO,CAAC,iBAAiB,CAAC,CAAC,CAAC,sBAAsB,CAAC,CAAC,CAAC,EAAE,EAAE;SAC3H,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;AACP,CAAC"}
|
package/dist/commands/init.js
CHANGED
|
@@ -1,33 +1,39 @@
|
|
|
1
|
-
import { existsSync } from 'node:fs';
|
|
2
|
-
import { join } from 'node:path';
|
|
3
|
-
import { loadConfig } from '../lib/config.js';
|
|
1
|
+
import { existsSync, mkdirSync, writeFileSync } from 'node:fs';
|
|
2
|
+
import { dirname, join } from 'node:path';
|
|
3
|
+
import { loadConfig, resetConfigCache } from '../lib/config.js';
|
|
4
4
|
import { runScript } from '../lib/exec.js';
|
|
5
5
|
import { emit, emitContinuing, getGlobalOptions } from '../lib/output.js';
|
|
6
6
|
import { getRepoRoot } from '../lib/repo.js';
|
|
7
|
+
import { defaultConfigYaml, SCAFFOLD_CONFIG_PATH, SCAFFOLD_TEMPLATE_FILES } from '../lib/scaffold-templates.js';
|
|
8
|
+
/** Templates required when no config is present yet (the config-driven list can't be
|
|
9
|
+
* read). Mirrors the spec/plan/tasks templates `create` resolves. */
|
|
10
|
+
const FALLBACK_TEMPLATES = [
|
|
11
|
+
'specs/_templates/SPEC_TEMPLATE.md',
|
|
12
|
+
'specs/_templates/SPEC_TEMPLATE_LITE.md',
|
|
13
|
+
'specs/_templates/PLAN_TEMPLATE.md',
|
|
14
|
+
'specs/_templates/TASKS_TEMPLATE.md',
|
|
15
|
+
];
|
|
7
16
|
export function registerInit(program) {
|
|
8
17
|
program
|
|
9
18
|
.command('init')
|
|
10
|
-
.description('Verify spec workflow
|
|
11
|
-
.
|
|
19
|
+
.description('Verify the spec workflow layout (config + templates + per-core dirs); with --scaffold, create whatever is missing.')
|
|
20
|
+
.option('--scaffold', 'Create any missing config.yaml, templates, and per-core dirs (never overwrites an existing file; idempotent).', false)
|
|
21
|
+
.action(async (options, cmd) => {
|
|
12
22
|
const global = getGlobalOptions(cmd);
|
|
13
23
|
const repoRoot = getRepoRoot(global.repoRoot);
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
required.push(...templatePaths);
|
|
25
|
-
}
|
|
26
|
-
catch {
|
|
27
|
-
required.push('specs/_templates/SPEC_TEMPLATE.md', 'specs/_templates/SPEC_TEMPLATE_LITE.md', 'specs/_templates/PLAN_TEMPLATE.md', 'specs/_templates/TASKS_TEMPLATE.md');
|
|
24
|
+
if (options.scaffold) {
|
|
25
|
+
const { created, skipped } = scaffoldLayout(repoRoot, global.config);
|
|
26
|
+
emit(global, {
|
|
27
|
+
ok: true,
|
|
28
|
+
data: { repoRoot, created, skipped },
|
|
29
|
+
text: created.length === 0
|
|
30
|
+
? `init: layout already present (${repoRoot}) — nothing scaffolded`
|
|
31
|
+
: `init: scaffolded ${created.length} item(s)\n${created.map((c) => ` + ${c}`).join('\n')}${skipped.length ? `\n (${skipped.length} already present, left untouched)` : ''}`,
|
|
32
|
+
});
|
|
33
|
+
return;
|
|
28
34
|
}
|
|
29
|
-
const
|
|
30
|
-
const missing =
|
|
35
|
+
const required = requiredLayout(repoRoot, global.config);
|
|
36
|
+
const missing = required.filter((p) => !existsSync(join(repoRoot, p)));
|
|
31
37
|
if (missing.length === 0) {
|
|
32
38
|
const git = runScript(['git', 'rev-parse', '--show-toplevel'], repoRoot);
|
|
33
39
|
if (git.exitCode !== 0) {
|
|
@@ -43,12 +49,80 @@ export function registerInit(program) {
|
|
|
43
49
|
text: `init: spec workflow ready (${repoRoot})`,
|
|
44
50
|
});
|
|
45
51
|
}
|
|
46
|
-
emitContinuing(global, 'init: missing required files:');
|
|
52
|
+
emitContinuing(global, 'init: missing required files (run `eos-spec init --scaffold` to create them):');
|
|
47
53
|
for (const m of missing)
|
|
48
54
|
emitContinuing(global, ` - ${m}`);
|
|
49
55
|
emit(global, { ok: false, data: { repoRoot, missing }, exitCode: 1 });
|
|
50
56
|
});
|
|
51
57
|
}
|
|
58
|
+
/**
|
|
59
|
+
* The portable required layout: `specs/config.yaml` + the template files the config
|
|
60
|
+
* declares (or the fallback set when no config is present yet). Consumer-specific
|
|
61
|
+
* artifacts (e.g. `SPEC_STATUS_REGISTRY.md`, a repo's audit scripts) are intentionally
|
|
62
|
+
* NOT required — the published engine is consumer-agnostic (TOOL-03 AC-5), so `init`
|
|
63
|
+
* passes on any repo carrying the portable convention.
|
|
64
|
+
*/
|
|
65
|
+
function requiredLayout(repoRoot, configOverride) {
|
|
66
|
+
const required = [SCAFFOLD_CONFIG_PATH];
|
|
67
|
+
try {
|
|
68
|
+
const config = loadConfig(repoRoot, configOverride);
|
|
69
|
+
required.push(...flattenTemplatePaths(config.templates));
|
|
70
|
+
}
|
|
71
|
+
catch {
|
|
72
|
+
required.push(...FALLBACK_TEMPLATES);
|
|
73
|
+
}
|
|
74
|
+
return [...new Set(required)];
|
|
75
|
+
}
|
|
76
|
+
/**
|
|
77
|
+
* Scaffold-when-missing: write the default config, the template bodies, and the
|
|
78
|
+
* per-core directories, creating only what is absent. Never clobbers an existing
|
|
79
|
+
* file and is idempotent (a second run produces all-skipped).
|
|
80
|
+
*/
|
|
81
|
+
function scaffoldLayout(repoRoot, configOverride) {
|
|
82
|
+
const created = [];
|
|
83
|
+
const skipped = [];
|
|
84
|
+
// 1. config.yaml — only the canonical location is scaffolded.
|
|
85
|
+
const today = new Date().toISOString().slice(0, 10);
|
|
86
|
+
writeFileIfMissing(repoRoot, SCAFFOLD_CONFIG_PATH, defaultConfigYaml(today), created, skipped);
|
|
87
|
+
// 2. template bodies (verbatim — their {{ID}}… placeholders are for `create`).
|
|
88
|
+
for (const t of SCAFFOLD_TEMPLATE_FILES) {
|
|
89
|
+
writeFileIfMissing(repoRoot, t.rel, t.content, created, skipped);
|
|
90
|
+
}
|
|
91
|
+
// 3. per-core dirs — read whichever config now exists (we just ensured one does).
|
|
92
|
+
try {
|
|
93
|
+
resetConfigCache();
|
|
94
|
+
const config = loadConfig(repoRoot, configOverride);
|
|
95
|
+
const { specs, plans, tasks } = config.paths;
|
|
96
|
+
for (const core of config.cores) {
|
|
97
|
+
for (const sub of [specs, plans, tasks]) {
|
|
98
|
+
mkdirIfMissing(repoRoot, join('specs', core.id, sub), created, skipped);
|
|
99
|
+
}
|
|
100
|
+
}
|
|
101
|
+
}
|
|
102
|
+
catch {
|
|
103
|
+
// Config unreadable (should not happen — we just wrote a valid one). Skip dirs.
|
|
104
|
+
}
|
|
105
|
+
return { created, skipped };
|
|
106
|
+
}
|
|
107
|
+
function writeFileIfMissing(repoRoot, rel, content, created, skipped) {
|
|
108
|
+
const abs = join(repoRoot, rel);
|
|
109
|
+
if (existsSync(abs)) {
|
|
110
|
+
skipped.push(rel);
|
|
111
|
+
return;
|
|
112
|
+
}
|
|
113
|
+
mkdirSync(dirname(abs), { recursive: true });
|
|
114
|
+
writeFileSync(abs, content, 'utf8');
|
|
115
|
+
created.push(rel);
|
|
116
|
+
}
|
|
117
|
+
function mkdirIfMissing(repoRoot, rel, created, skipped) {
|
|
118
|
+
const abs = join(repoRoot, rel);
|
|
119
|
+
if (existsSync(abs)) {
|
|
120
|
+
skipped.push(`${rel}/`);
|
|
121
|
+
return;
|
|
122
|
+
}
|
|
123
|
+
mkdirSync(abs, { recursive: true });
|
|
124
|
+
created.push(`${rel}/`);
|
|
125
|
+
}
|
|
52
126
|
function flattenTemplatePaths(templates) {
|
|
53
127
|
const paths = [];
|
|
54
128
|
for (const val of Object.values(templates)) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"init.js","sourceRoot":"","sources":["../../src/commands/init.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;
|
|
1
|
+
{"version":3,"file":"init.js","sourceRoot":"","sources":["../../src/commands/init.ts"],"names":[],"mappings":"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"}
|
package/dist/commands/next.d.ts
CHANGED
|
@@ -3,6 +3,10 @@ import { type BlockerRef, type Readiness } from '../lib/blockers.js';
|
|
|
3
3
|
import { type ActorType } from '../lib/pipeline-map.js';
|
|
4
4
|
import { type SessionState } from '../lib/session-state.js';
|
|
5
5
|
import { type SpecFile } from '../lib/specs.js';
|
|
6
|
+
/** Build an advisory when an early-stage spec references tables that already exist
|
|
7
|
+
* in a migration — the signal that it may duplicate an existing feature. Exported
|
|
8
|
+
* for direct unit coverage of the early-stage gate + formatting. */
|
|
9
|
+
export declare function landscapeAdvisory(repoRoot: string, spec: SpecFile, migrationsRelDir?: string): string;
|
|
6
10
|
export type NextAction = {
|
|
7
11
|
type: string;
|
|
8
12
|
specId: string;
|
|
@@ -11,14 +15,25 @@ export type NextAction = {
|
|
|
11
15
|
actorType: ActorType;
|
|
12
16
|
invocation: string;
|
|
13
17
|
optional?: boolean;
|
|
18
|
+
/** Phase 1: a strictOnly parity gate (Finding A) is unmet under `next --strict` —
|
|
19
|
+
* rendered as a BLOCKING action (the gate must be satisfied before advancing).
|
|
20
|
+
* Only ever set when the navigator was invoked with `{ strict: true }`. */
|
|
21
|
+
blocking?: boolean;
|
|
14
22
|
/** Disagreement between pipeline_status and on-disk artifacts, if any. */
|
|
15
23
|
note?: string;
|
|
16
24
|
/** Set for the implement/complete tail. */
|
|
17
25
|
taskHint?: string;
|
|
18
26
|
};
|
|
27
|
+
/** Options that shape the navigator recommendation. `strict` opts the Phase 1
|
|
28
|
+
* parity gates (Finding A: research-before-review, revalidate-after-review,
|
|
29
|
+
* compliance-for-sensitive) into the walk as BLOCKING; default keeps the bare-CLI
|
|
30
|
+
* behavior unchanged (those `strictOnly` stages are skipped). */
|
|
31
|
+
export type RecommendOptions = {
|
|
32
|
+
strict?: boolean;
|
|
33
|
+
};
|
|
19
34
|
/** Disagreement between later artifacts and the first incomplete required gate
|
|
20
|
-
* (e.g. tasks exist but validate-spec was never run). Optional and
|
|
21
|
-
* transitions never count, so only real out-of-order gaps are flagged. */
|
|
35
|
+
* (e.g. tasks exist but validate-spec was never run). Optional, strictOnly, and
|
|
36
|
+
* not-applicable transitions never count, so only real out-of-order gaps are flagged. */
|
|
22
37
|
export declare function computeOutOfOrder(spec: SpecFile): string | undefined;
|
|
23
38
|
/** Human-output blocker lines for `next --spec`: open blockers and unresolvable
|
|
24
39
|
* (likely typo'd) blocked_by references. Cleared (complete) blockers are omitted. */
|
|
@@ -39,8 +54,9 @@ export declare function pickCorePick(repoRoot: string, ordered: Readiness[], opt
|
|
|
39
54
|
}): Readiness | null;
|
|
40
55
|
export declare function registerNext(program: Command): void;
|
|
41
56
|
/** Walk the SSOT pipeline; return the first applicable, not-done transition, else the implement/complete tail.
|
|
42
|
-
* An active session (STATE.md) on this spec short-circuits to resuming the in-progress task.
|
|
43
|
-
|
|
57
|
+
* An active session (STATE.md) on this spec short-circuits to resuming the in-progress task.
|
|
58
|
+
* `opts.strict` opts the Phase 1 `strictOnly` parity gates into the walk as BLOCKING. */
|
|
59
|
+
export declare function recommendAction(spec: SpecFile, session?: SessionState | null, repoRoot?: string, opts?: RecommendOptions): NextAction;
|
|
44
60
|
/** True when TASKS.md carries at least one status marker we know how to read —
|
|
45
61
|
* a GitHub checkbox (`[ ]`/`[x]`) or a ballot-box glyph (☐/☑/☒). Used to
|
|
46
62
|
* distinguish "genuinely all complete" from "format we cannot parse". */
|