zelari-code 2.0.0-alpha.5 → 2.0.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 (51) hide show
  1. package/dist/cli/headless.js +9 -0
  2. package/dist/cli/headless.js.map +1 -1
  3. package/dist/cli/headlessE2eSession.test.js +189 -0
  4. package/dist/cli/headlessE2eSession.test.js.map +1 -0
  5. package/dist/cli/headlessSessionEvent.test.js +83 -0
  6. package/dist/cli/headlessSessionEvent.test.js.map +1 -0
  7. package/dist/cli/headlessSpine.js +25 -0
  8. package/dist/cli/headlessSpine.js.map +1 -1
  9. package/dist/cli/hooks/chatState.js.map +1 -1
  10. package/dist/cli/hooks/eventsToMessages.js.map +1 -1
  11. package/dist/cli/hooks/useChatTurn.js +40 -7
  12. package/dist/cli/hooks/useChatTurn.js.map +1 -1
  13. package/dist/cli/hooks/useSession.js +0 -2
  14. package/dist/cli/hooks/useSession.js.map +1 -1
  15. package/dist/cli/kraken/evidenceAnchoring.test.js +92 -0
  16. package/dist/cli/kraken/evidenceAnchoring.test.js.map +1 -0
  17. package/dist/cli/kraken/nativeVerification.js +113 -0
  18. package/dist/cli/kraken/nativeVerification.js.map +1 -0
  19. package/dist/cli/kraken/nativeVerification.test.js +207 -0
  20. package/dist/cli/kraken/nativeVerification.test.js.map +1 -0
  21. package/dist/cli/kraken/strictDefaults.test.js +149 -0
  22. package/dist/cli/kraken/strictDefaults.test.js.map +1 -0
  23. package/dist/cli/kraken/verificationBridge.js +121 -8
  24. package/dist/cli/kraken/verificationBridge.js.map +1 -1
  25. package/dist/cli/kraken/verificationBridge.session.test.js +104 -0
  26. package/dist/cli/kraken/verificationBridge.session.test.js.map +1 -0
  27. package/dist/cli/kraken/verificationBridge.test.js +63 -17
  28. package/dist/cli/kraken/verificationBridge.test.js.map +1 -1
  29. package/dist/cli/kraken/verifierAdvisoryLock.test.js +154 -0
  30. package/dist/cli/kraken/verifierAdvisoryLock.test.js.map +1 -0
  31. package/dist/cli/kraken/verifierResolution.js +28 -0
  32. package/dist/cli/kraken/verifierResolution.js.map +1 -0
  33. package/dist/cli/kraken/verifierRoundTrip.test.js +166 -0
  34. package/dist/cli/kraken/verifierRoundTrip.test.js.map +1 -0
  35. package/dist/cli/legacyContextIsolation.test.js +65 -0
  36. package/dist/cli/legacyContextIsolation.test.js.map +1 -0
  37. package/dist/cli/main.bundled.js +893 -317
  38. package/dist/cli/main.bundled.js.map +4 -4
  39. package/dist/cli/missionContinuation.test.js +117 -0
  40. package/dist/cli/missionContinuation.test.js.map +1 -0
  41. package/dist/cli/profileMatrix.test.js +130 -0
  42. package/dist/cli/profileMatrix.test.js.map +1 -0
  43. package/dist/cli/runHeadless.js +68 -8
  44. package/dist/cli/runHeadless.js.map +1 -1
  45. package/dist/cli/sessionManager.js +7 -0
  46. package/dist/cli/sessionManager.js.map +1 -1
  47. package/dist/cli/sessionSpine.js +43 -3
  48. package/dist/cli/sessionSpine.js.map +1 -1
  49. package/dist/cli/zelariMission.js +16 -0
  50. package/dist/cli/zelariMission.js.map +1 -1
  51. package/package.json +3 -3
@@ -0,0 +1,207 @@
1
+ /**
2
+ * nativeVerification tests — F2 / Exit-2.4: the Zelari Coding Criteria Pack
3
+ * runs natively in the Kraken strict-build path.
4
+ *
5
+ * Locks the composition contract:
6
+ * - pack is opt-in (ZELARI_VERIFY_PACK=1), default off during the alpha;
7
+ * - env overrides replace `npm run <script>` binding (hermetic tests);
8
+ * - required criteria without a bound command are DROPPED, not unknowned;
9
+ * - a failing pack command forces REPAIR_REQUIRED even when every selection
10
+ * check passed with verify-agent evidence (deterministic beats narrative);
11
+ * - all-pass pack + all-pass selection → PASS, and the spine payload
12
+ * carries the native results with command digests.
13
+ */
14
+ import { afterEach, beforeEach, describe, expect, it } from 'vitest';
15
+ import { buildNativeCriteria, evaluateNativePack, nativePackEnabled, packTimeoutMs, resolvePackCommands, } from './nativeVerification.js';
16
+ import { evaluateStrictBuildGate, strictGateEventPayload, } from './verificationBridge.js';
17
+ import { resetKrakenCandidates, setKrakenCheckResults, setKrakenSelection } from './candidateRegistry.js';
18
+ const CHECKS = ['session survives concurrent refresh'];
19
+ function emitSeq() {
20
+ let n = 1;
21
+ return async () => ({ seq: n++ });
22
+ }
23
+ function selectWithChecks(checks) {
24
+ resetKrakenCandidates();
25
+ setKrakenSelection({
26
+ status: 'selected',
27
+ winnerIndex: 0,
28
+ rationale: 'test',
29
+ requiredChecks: checks,
30
+ degraded: false,
31
+ verifier: null,
32
+ judgedBy: 'llm',
33
+ });
34
+ }
35
+ /** Deterministic shell stub: map each command to a canned ShellResult. */
36
+ function stubShell(byCommand) {
37
+ return {
38
+ async exec(command) {
39
+ const canned = byCommand[command] ?? { exit: 0, stdout: '' };
40
+ return {
41
+ exitCode: canned.exit ?? 0,
42
+ stdout: canned.stdout ?? '',
43
+ stderr: canned.stderr ?? '',
44
+ durationMs: 1,
45
+ timedOut: false,
46
+ };
47
+ },
48
+ };
49
+ }
50
+ const TYPECHECK = 'fake-typecheck';
51
+ const TEST = 'fake-test';
52
+ const BUILD = 'fake-build';
53
+ function packEnv(overrides = {}) {
54
+ return {
55
+ ZELARI_VERIFY_PACK: '1',
56
+ ZELARI_VERIFY_TYPECHECK_CMD: TYPECHECK,
57
+ ZELARI_VERIFY_TEST_CMD: TEST,
58
+ ZELARI_VERIFY_BUILD_CMD: BUILD,
59
+ ...overrides,
60
+ };
61
+ }
62
+ let envPrev;
63
+ beforeEach(() => {
64
+ envPrev = process.env.ZELARI_STRICT_DONE;
65
+ process.env.ZELARI_STRICT_DONE = '1';
66
+ resetKrakenCandidates();
67
+ });
68
+ afterEach(() => {
69
+ if (envPrev === undefined)
70
+ delete process.env.ZELARI_STRICT_DONE;
71
+ else
72
+ process.env.ZELARI_STRICT_DONE = envPrev;
73
+ resetKrakenCandidates();
74
+ });
75
+ describe('nativePackEnabled (alpha opt-in)', () => {
76
+ it('is OFF by default and only enabled by explicit flags', () => {
77
+ expect(nativePackEnabled({})).toBe(false);
78
+ expect(nativePackEnabled({ ZELARI_VERIFY_PACK: '1' })).toBe(true);
79
+ expect(nativePackEnabled({ ZELARI_VERIFY_PACK: 'on' })).toBe(true);
80
+ expect(nativePackEnabled({ ZELARI_VERIFY_PACK: 'true' })).toBe(true);
81
+ expect(nativePackEnabled({ ZELARI_VERIFY_PACK: '0' })).toBe(false);
82
+ expect(nativePackEnabled({ ZELARI_VERIFY_PACK: 'yes' })).toBe(false);
83
+ });
84
+ });
85
+ describe('resolvePackCommands', () => {
86
+ it('binds npm scripts present in package.json', () => {
87
+ const cmds = resolvePackCommands({}, { typecheck: 'tsc -p .', test: 'vitest run' });
88
+ expect(cmds.typecheckCommand).toBe('npm run typecheck');
89
+ expect(cmds.testCommand).toBe('npm run test');
90
+ expect(cmds.buildCommand).toBeNull(); // script absent → unbound
91
+ });
92
+ it('env override wins; empty string explicitly disables', () => {
93
+ const cmds = resolvePackCommands({ ZELARI_VERIFY_TYPECHECK_CMD: 'tsc --noEmit', ZELARI_VERIFY_TEST_CMD: '' }, { typecheck: 'x', test: 'y', build: 'z' });
94
+ expect(cmds.typecheckCommand).toBe('tsc --noEmit');
95
+ expect(cmds.testCommand).toBeNull();
96
+ expect(cmds.buildCommand).toBe('npm run build');
97
+ });
98
+ it('packTimeoutMs clamps to [1, 3600000] and defaults to 600000', () => {
99
+ expect(packTimeoutMs({})).toBe(600_000);
100
+ expect(packTimeoutMs({ ZELARI_VERIFY_TIMEOUT_MS: '5000' })).toBe(5_000);
101
+ expect(packTimeoutMs({ ZELARI_VERIFY_TIMEOUT_MS: '-3' })).toBe(600_000);
102
+ expect(packTimeoutMs({ ZELARI_VERIFY_TIMEOUT_MS: '99999999' })).toBe(3_600_000);
103
+ });
104
+ });
105
+ describe('buildNativeCriteria', () => {
106
+ it('drops required criteria without a bound command; keeps advisory ones', () => {
107
+ const criteria = buildNativeCriteria({ typecheckCommand: 'tsc', testCommand: null, buildCommand: null }, 1_000);
108
+ const ids = criteria.map((c) => c.id);
109
+ expect(ids).toContain('correctness.error-signals');
110
+ expect(ids).not.toContain('correctness.specification');
111
+ expect(ids).not.toContain('correctness.observable-output');
112
+ // advisories stay even unbound — they surface as honest `unknown`
113
+ expect(ids).toContain('evidence.verification-quality');
114
+ });
115
+ });
116
+ describe('evaluateNativePack', () => {
117
+ it('returns null when disabled or when no command is bound', async () => {
118
+ expect(await evaluateNativePack({ env: {}, shell: stubShell({}) })).toBeNull();
119
+ expect(await evaluateNativePack({
120
+ env: { ZELARI_VERIFY_PACK: '1' },
121
+ cwd: 'Z:/__no_such_repo__',
122
+ shell: stubShell({}),
123
+ })).toBeNull();
124
+ });
125
+ it('runs bound commands through the core engine and returns digested evidence', async () => {
126
+ const pack = await evaluateNativePack({
127
+ env: packEnv(),
128
+ shell: stubShell({
129
+ [TYPECHECK]: { exit: 0, stdout: 'no errors' },
130
+ [TEST]: { exit: 0, stdout: '58 passed' },
131
+ [BUILD]: { exit: 0, stdout: 'bundled' },
132
+ }),
133
+ });
134
+ expect(pack).not.toBeNull();
135
+ const byId = new Map(pack.results.map((r) => [r.criterionId, r]));
136
+ expect(byId.get('correctness.error-signals')?.status).toBe('pass');
137
+ expect(byId.get('correctness.specification')?.status).toBe('pass');
138
+ const ev = byId.get('correctness.specification')?.evidence[0];
139
+ expect(ev?.tier).toBe('command-output');
140
+ expect(ev?.digest).toMatch(/^[0-9a-f]{64}$/);
141
+ });
142
+ });
143
+ describe('evaluateStrictBuildGate × native pack (F2 lock)', () => {
144
+ it('failing typecheck forces REPAIR_REQUIRED even when every selection check passes with notes', async () => {
145
+ selectWithChecks(CHECKS);
146
+ setKrakenCheckResults([{ check: CHECKS[0], status: 'pass', note: 'vitest 58/58' }]);
147
+ const gate = await evaluateStrictBuildGate('build', {
148
+ env: packEnv(),
149
+ emit: emitSeq(),
150
+ shell: stubShell({
151
+ [TYPECHECK]: { exit: 2, stderr: 'TS2345: argument of type...' },
152
+ [TEST]: { exit: 0, stdout: '58 passed' },
153
+ [BUILD]: { exit: 0, stdout: 'ok' },
154
+ }),
155
+ });
156
+ expect(gate.strict).toBe(true);
157
+ expect(gate.native).not.toBeNull();
158
+ expect(gate.evaluation.verdict).toBe('REPAIR_REQUIRED');
159
+ expect(gate.blocked).toBe(true);
160
+ const failed = gate.evaluation.unsatisfied.find((u) => u.id === 'correctness.error-signals');
161
+ expect(failed?.status).toBe('fail');
162
+ });
163
+ it('all-pass pack + all-pass selection → PASS with native results in the payload', async () => {
164
+ selectWithChecks(CHECKS);
165
+ setKrakenCheckResults([{ check: CHECKS[0], status: 'pass', note: 'vitest 58/58' }]);
166
+ const gate = await evaluateStrictBuildGate('build', {
167
+ env: packEnv(),
168
+ emit: emitSeq(),
169
+ shell: stubShell({
170
+ [TYPECHECK]: { exit: 0 },
171
+ [TEST]: { exit: 0, stdout: '58 passed' },
172
+ [BUILD]: { exit: 0 },
173
+ }),
174
+ });
175
+ expect(gate.evaluation.verdict).toBe('PASS');
176
+ expect(gate.blocked).toBe(false);
177
+ const payload = strictGateEventPayload(gate);
178
+ expect(payload.engine).toBe('kraken-legacy+completion-policy+criteria-pack');
179
+ expect(payload.native).toMatchObject({ packId: 'zelari-coding/v1' });
180
+ const results = payload.native.results;
181
+ expect(results.filter((r) => r.status === 'pass').length).toBeGreaterThanOrEqual(3);
182
+ });
183
+ it('pack disabled (default) → native null and identical legacy-only verdict', async () => {
184
+ selectWithChecks(CHECKS);
185
+ setKrakenCheckResults([{ check: CHECKS[0], status: 'pass', note: 'vitest 58/58' }]);
186
+ const gate = await evaluateStrictBuildGate('build', { env: {}, emit: emitSeq(), shell: stubShell({}) });
187
+ expect(gate.native).toBeNull();
188
+ expect(gate.evaluation.verdict).toBe('PASS');
189
+ expect(strictGateEventPayload(gate).engine).toBe('kraken-legacy+completion-policy');
190
+ });
191
+ it('a pack criterion timing out is unknown — blockers add, unknown never passes silently', async () => {
192
+ selectWithChecks(CHECKS);
193
+ setKrakenCheckResults([{ check: CHECKS[0], status: 'pass', note: 'ok' }]);
194
+ const timeoutShell = {
195
+ async exec(command) {
196
+ if (command === TEST) {
197
+ return { exitCode: null, stdout: '', stderr: '', durationMs: 9, timedOut: true };
198
+ }
199
+ return { exitCode: 0, stdout: '', stderr: '', durationMs: 1, timedOut: false };
200
+ },
201
+ };
202
+ const gate = await evaluateStrictBuildGate('build', { env: packEnv(), emit: emitSeq(), shell: timeoutShell });
203
+ expect(gate.evaluation.verdict).toBe('BLOCKED'); // unknown ≠ pass
204
+ expect(gate.blocked).toBe(true);
205
+ });
206
+ });
207
+ //# sourceMappingURL=nativeVerification.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"nativeVerification.test.js","sourceRoot":"","sources":["../../../src/cli/kraken/nativeVerification.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,149 @@
1
+ /**
2
+ * ADR-0025 lock tests — strict done defaults per surface.
3
+ *
4
+ * Kraken (default surface): opt-in via ZELARI_STRICT_DONE, else off (1.x compat).
5
+ * Mission: strict evidence gate ON by default; ZELARI_MISSION_STRICT=0|false
6
+ * is the only opt-out. These defaults are product decisions, not accidents —
7
+ * a regression here changes what "done" means for autonomous missions.
8
+ */
9
+ import { afterEach, beforeEach, describe, expect, it } from 'vitest';
10
+ import { evaluateStrictBuildGate, strictDoneEnabled, } from './verificationBridge.js';
11
+ import { resetKrakenCandidates, setKrakenCheckResults, setKrakenSelection, } from './candidateRegistry.js';
12
+ const CHECKS = ['mission slice keeps the spine replayable', 'export round-trips'];
13
+ function emitSeq() {
14
+ let n = 1;
15
+ return async () => ({ seq: n++ });
16
+ }
17
+ function selectWithChecks(checks) {
18
+ resetKrakenCandidates();
19
+ setKrakenSelection({
20
+ status: 'selected',
21
+ winnerIndex: 0,
22
+ rationale: 'test',
23
+ requiredChecks: checks,
24
+ degraded: false,
25
+ verifier: null,
26
+ judgedBy: 'llm',
27
+ });
28
+ }
29
+ let prevKraken;
30
+ let prevMission;
31
+ let prevPack;
32
+ /** Swap both strict envs for the duration of fn; restore in finally. */
33
+ async function withEnv(kraken, mission, fn) {
34
+ const k = process.env.ZELARI_STRICT_DONE;
35
+ const m = process.env.ZELARI_MISSION_STRICT;
36
+ if (kraken === undefined)
37
+ delete process.env.ZELARI_STRICT_DONE;
38
+ else
39
+ process.env.ZELARI_STRICT_DONE = kraken;
40
+ if (mission === undefined)
41
+ delete process.env.ZELARI_MISSION_STRICT;
42
+ else
43
+ process.env.ZELARI_MISSION_STRICT = mission;
44
+ try {
45
+ return await fn();
46
+ }
47
+ finally {
48
+ if (k === undefined)
49
+ delete process.env.ZELARI_STRICT_DONE;
50
+ else
51
+ process.env.ZELARI_STRICT_DONE = k;
52
+ if (m === undefined)
53
+ delete process.env.ZELARI_MISSION_STRICT;
54
+ else
55
+ process.env.ZELARI_MISSION_STRICT = m;
56
+ }
57
+ }
58
+ beforeEach(() => {
59
+ prevKraken = process.env.ZELARI_STRICT_DONE;
60
+ prevMission = process.env.ZELARI_MISSION_STRICT;
61
+ prevPack = process.env.ZELARI_VERIFY_PACK;
62
+ delete process.env.ZELARI_VERIFY_PACK;
63
+ resetKrakenCandidates();
64
+ });
65
+ afterEach(() => {
66
+ if (prevKraken === undefined)
67
+ delete process.env.ZELARI_STRICT_DONE;
68
+ else
69
+ process.env.ZELARI_STRICT_DONE = prevKraken;
70
+ if (prevMission === undefined)
71
+ delete process.env.ZELARI_MISSION_STRICT;
72
+ else
73
+ process.env.ZELARI_MISSION_STRICT = prevMission;
74
+ if (prevPack === undefined)
75
+ delete process.env.ZELARI_VERIFY_PACK;
76
+ else
77
+ process.env.ZELARI_VERIFY_PACK = prevPack;
78
+ resetKrakenCandidates();
79
+ });
80
+ describe('strictDoneEnabled defaults (ADR-0025)', () => {
81
+ it('kraken: default OFF, opt-in via ZELARI_STRICT_DONE', async () => {
82
+ await withEnv(undefined, undefined, () => {
83
+ expect(strictDoneEnabled()).toBe(false);
84
+ expect(strictDoneEnabled('kraken')).toBe(false);
85
+ });
86
+ await withEnv('1', undefined, () => expect(strictDoneEnabled()).toBe(true));
87
+ await withEnv('true', undefined, () => expect(strictDoneEnabled()).toBe(true));
88
+ await withEnv('0', undefined, () => expect(strictDoneEnabled()).toBe(false));
89
+ });
90
+ it('mission: default ON regardless of ZELARI_STRICT_DONE', async () => {
91
+ await withEnv(undefined, undefined, () => expect(strictDoneEnabled('mission')).toBe(true));
92
+ await withEnv('0', undefined, () => expect(strictDoneEnabled('mission')).toBe(true));
93
+ await withEnv('false', undefined, () => expect(strictDoneEnabled('mission')).toBe(true));
94
+ });
95
+ it('mission: ZELARI_MISSION_STRICT=0|false is the only opt-out', async () => {
96
+ await withEnv(undefined, '0', () => expect(strictDoneEnabled('mission')).toBe(false));
97
+ await withEnv(undefined, 'false', () => expect(strictDoneEnabled('mission')).toBe(false));
98
+ await withEnv(undefined, '1', () => expect(strictDoneEnabled('mission')).toBe(true));
99
+ await withEnv('1', '0', () => expect(strictDoneEnabled('mission')).toBe(false));
100
+ });
101
+ });
102
+ describe('evaluateStrictBuildGate surface wiring (ADR-0025)', () => {
103
+ it('mission surface enforces the evidence contract by default (unknown → blocked)', async () => {
104
+ await withEnv(undefined, undefined, async () => {
105
+ selectWithChecks(CHECKS);
106
+ // No check results reported → every required criterion is unknown.
107
+ const gate = await evaluateStrictBuildGate('build', { surface: 'mission' });
108
+ expect(gate.strict).toBe(true);
109
+ expect(gate.blocked).toBe(true);
110
+ });
111
+ });
112
+ it('mission opt-out restores the legacy-only outcome', async () => {
113
+ await withEnv(undefined, '0', async () => {
114
+ selectWithChecks(CHECKS);
115
+ setKrakenCheckResults(CHECKS.map((c) => ({ check: c, status: 'pass', note: 'ok (stub)' })));
116
+ const gate = await evaluateStrictBuildGate('build', { surface: 'mission' });
117
+ expect(gate.strict).toBe(false);
118
+ expect(gate.blocked).toBe(false); // legacy gate green + no strict overlay
119
+ });
120
+ });
121
+ it('kraken surface (default) stays opt-in even with checks registered', async () => {
122
+ await withEnv(undefined, undefined, async () => {
123
+ selectWithChecks(CHECKS);
124
+ setKrakenCheckResults(CHECKS.map((c) => ({ check: c, status: 'pass', note: 'ok (stub)' })));
125
+ const gate = await evaluateStrictBuildGate('build'); // no surface → kraken
126
+ expect(gate.strict).toBe(false);
127
+ expect(gate.blocked).toBe(false);
128
+ });
129
+ });
130
+ it('mission default does not run the native pack without ZELARI_VERIFY_PACK', async () => {
131
+ // The mission default gates on the selection contract only; the native
132
+ // criteria pack (real typecheck/test/build commands) stays opt-in so the
133
+ // default never adds process spawns the user did not ask for.
134
+ await withEnv(undefined, undefined, async () => {
135
+ selectWithChecks([CHECKS[0]]);
136
+ setKrakenCheckResults([
137
+ { check: CHECKS[0], status: 'pass', note: 'spine replay ok (stub)' },
138
+ ]);
139
+ const gate = await evaluateStrictBuildGate('build', { surface: 'mission', emit: emitSeq() });
140
+ expect(gate.strict).toBe(true);
141
+ expect(gate.native).toBeNull();
142
+ expect(gate.blocked).toBe(false); // pass with event-backed note → PASS
143
+ });
144
+ });
145
+ });
146
+ // Type-level lock: the surface union is exactly the two ADR-0025 surfaces.
147
+ const _surfaceUnionLock = ['kraken', 'mission'];
148
+ void _surfaceUnionLock;
149
+ //# sourceMappingURL=strictDefaults.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"strictDefaults.test.js","sourceRoot":"","sources":["../../../src/cli/kraken/strictDefaults.test.ts"],"names":[],"mappings":"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"}
@@ -12,12 +12,25 @@
12
12
  * them. A legacy-blocked turn stays blocked; a legacy-open turn can become
13
13
  * blocked only when strict evaluation is enabled AND the evidence contract
14
14
  * is not satisfied.
15
+ *
16
+ * F2 (Exit-2.4): when the native criteria pack is enabled
17
+ * (ZELARI_VERIFY_PACK=1), the Zelari Coding Criteria Pack v1 joins the SAME
18
+ * CompletionPolicy evaluation with real deterministic checks (typecheck/
19
+ * test/build commands) executed through the core VerificationEngine —
20
+ * see nativeVerification.ts. The pack is additive evidence; it can only add
21
+ * blockers, never remove them, exactly like the rest of the strict layer.
15
22
  */
16
23
  import { getKrakenCheckResults, krakenRequiredChecks } from './candidateRegistry.js';
17
24
  import { evaluateKrakenCompletionGate } from './completionGate.js';
18
- import { evaluateCompletion, STRICT_ALL_POLICY, } from '@zelari/core/verification';
19
- /** Strict done gate opt-in during the alpha (default off for compat). */
20
- export function strictDoneEnabled() {
25
+ import { evaluateNativePack } from './nativeVerification.js';
26
+ import { evaluateCompletion, STRICT_BUILD_POLICY, snapshotToCompletionEvaluation, } from '@zelari/core/verification';
27
+ export function strictDoneEnabled(surface = 'kraken') {
28
+ if (surface === 'mission') {
29
+ const v = process.env.ZELARI_MISSION_STRICT;
30
+ if (v === '0' || v === 'false')
31
+ return false;
32
+ return true;
33
+ }
21
34
  const v = process.env.ZELARI_STRICT_DONE;
22
35
  return v === '1' || v === 'true';
23
36
  }
@@ -96,18 +109,57 @@ export function krakenResultsToContract(requiredChecks, results, now = Date.now(
96
109
  });
97
110
  return { criteria, results: verifications };
98
111
  }
112
+ /**
113
+ * 2.0 (ADR-0026): stamp EvidenceRef.seq on selection-contract notes by
114
+ * appending a `verification.evidence` event. Without an emitter the refs
115
+ * stay unanchored and STRICT_BUILD_POLICY (requireEventBackedEvidence)
116
+ * will BLOCK — that is the RC false-done guard, not a test-only quirk.
117
+ */
118
+ export async function anchorSelectionEvidence(results, emit) {
119
+ if (!emit)
120
+ return;
121
+ for (const r of results) {
122
+ for (const ev of r.evidence) {
123
+ if (ev.seq !== undefined)
124
+ continue;
125
+ if (ev.tier === 'verifier-llm' || ev.tier === 'human')
126
+ continue;
127
+ try {
128
+ const appended = await emit({
129
+ kind: 'verification.evidence',
130
+ actor: { type: 'system', role: 'verification' },
131
+ data: {
132
+ observation: 'verify-report-note',
133
+ criterionId: r.criterionId,
134
+ ref: ev.ref,
135
+ tier: ev.tier,
136
+ },
137
+ });
138
+ const seq = appended && typeof appended === 'object' && 'seq' in appended
139
+ ? Number(appended.seq)
140
+ : NaN;
141
+ if (Number.isFinite(seq) && seq > 0)
142
+ ev.seq = seq;
143
+ }
144
+ catch {
145
+ // degrade-and-stop: leave unanchored; policy will BLOCK if required
146
+ }
147
+ }
148
+ }
149
+ }
99
150
  /**
100
151
  * Evaluate the BUILD completion gate. When `ZELARI_STRICT_DONE` is enabled
101
152
  * and the turn registered required checks, the evidence contract is evaluated
102
153
  * as well and the verdicts merged (blockers add up).
103
154
  */
104
- export function evaluateStrictBuildGate(mode) {
155
+ export async function evaluateStrictBuildGate(mode, options = {}) {
105
156
  const gate = evaluateKrakenCompletionGate(mode);
106
- if (!gate.selectionUsed || gate.total === 0 || !strictDoneEnabled()) {
157
+ if (!gate.selectionUsed || gate.total === 0 || !strictDoneEnabled(options.surface ?? 'kraken')) {
107
158
  return {
108
159
  gate,
109
160
  strict: false,
110
161
  evaluation: null,
162
+ native: null,
111
163
  blocked: gate.blocked,
112
164
  summary: gate.blocked
113
165
  ? `blocked: ${gate.failedChecks.length} failed, ${gate.unknownChecks.length} unknown`
@@ -116,22 +168,44 @@ export function evaluateStrictBuildGate(mode) {
116
168
  }
117
169
  const checks = krakenRequiredChecks();
118
170
  const contract = krakenResultsToContract(checks, getKrakenCheckResults());
119
- const evaluation = evaluateCompletion(contract.criteria, contract.results, STRICT_ALL_POLICY);
171
+ await anchorSelectionEvidence(contract.results, options.emit);
172
+ // F2: native criteria pack (opt-in) — real commands via the core engine.
173
+ // A pack failure degrades to the legacy contract only; it never un-blocks.
174
+ const native = await evaluateNativePack({
175
+ cwd: options.cwd,
176
+ env: options.env,
177
+ shell: options.shell,
178
+ emit: options.emit,
179
+ }).catch(() => null);
180
+ const allCriteria = [...contract.criteria, ...(native?.criteria ?? [])];
181
+ const allResults = [...contract.results, ...(native?.results ?? [])];
182
+ const evaluation = evaluateCompletion(allCriteria, allResults, STRICT_BUILD_POLICY);
120
183
  const blocked = gate.blocked || evaluation.verdict !== 'PASS';
121
184
  return {
122
185
  gate,
123
186
  strict: true,
124
187
  evaluation,
188
+ native,
125
189
  blocked,
126
190
  summary: blocked
127
191
  ? `blocked (strict ${evaluation?.verdict ?? 'n/a'}): ${gate.passed}/${gate.total} legacy-pass, evidence ${evaluation?.evidenceComplete ? 'complete' : 'incomplete'}`
128
- : `open (strict PASS): ${evaluation?.satisfied.length ?? 0}/${gate.total} criteria pass with evidence`,
192
+ : `open (strict PASS): ${evaluation?.satisfied.length ?? 0}/${allCriteria.length} criteria pass with evidence`,
129
193
  };
130
194
  }
195
+ /**
196
+ * E2.2 exit code for a strict-mode turn whose completion gate is still blocked
197
+ * after the automatic repair pass: the run must NOT close as success.
198
+ * Distinct from transport errors (3) and usage errors (2).
199
+ */
200
+ export const STRICT_DONE_EXIT_CODE = 4;
201
+ /** Pure: strict blocked → dedicated exit code; anything else → keep the pass outcome. */
202
+ export function strictGateExitCode(evaluation) {
203
+ return evaluation.strict && evaluation.blocked ? STRICT_DONE_EXIT_CODE : 0;
204
+ }
131
205
  /** Machine-readable record for the session spine `verification.run` event. */
132
206
  export function strictGateEventPayload(evaluation) {
133
207
  return {
134
- engine: 'kraken-legacy+completion-policy',
208
+ engine: evaluation.native ? 'kraken-legacy+completion-policy+criteria-pack' : 'kraken-legacy+completion-policy',
135
209
  strict: evaluation.strict,
136
210
  verdict: evaluation.evaluation?.verdict ?? (evaluation.blocked ? 'BLOCKED' : 'PASS'),
137
211
  legacy: {
@@ -147,7 +221,46 @@ export function strictGateEventPayload(evaluation) {
147
221
  complete: evaluation.evaluation.evidenceComplete,
148
222
  }
149
223
  : null,
224
+ // F2: deterministic pack results — real command evidence, replayable.
225
+ native: evaluation.native
226
+ ? {
227
+ packId: evaluation.native.packId,
228
+ criteria: evaluation.native.criteria.map((c) => ({ id: c.id, required: c.required })),
229
+ results: evaluation.native.results.map((r) => ({
230
+ criterionId: r.criterionId,
231
+ status: r.status,
232
+ evidence: r.evidence.map((e) => ({ tier: e.tier, ref: e.ref, digest: e.digest, ...(e.seq !== undefined ? { seq: e.seq } : {}) })),
233
+ detail: r.detail,
234
+ })),
235
+ }
236
+ : null,
150
237
  summary: evaluation.summary,
151
238
  };
152
239
  }
240
+ /**
241
+ * E2.1 (ADR-0023 × ADR-0021): reconstruct the strict build gate verdict from
242
+ * the session spine alone — no in-process registry. For hosts, mission
243
+ * retries and audits: a turn's decision must be confirmable from its log.
244
+ * A missing snapshot is "no verification evidence" (open, never pass); a
245
+ * non-strict snapshot is not admissible. Blockers add up — the caller
246
+ * combines this with its own current-process gate.
247
+ */
248
+ export function evaluateStrictBuildGateFromSession(mode, snapshot) {
249
+ // Legacy view of THIS process (usually empty on a resumed host).
250
+ const gate = evaluateKrakenCompletionGate(mode);
251
+ const evaluation = snapshot ? snapshotToCompletionEvaluation(snapshot) : null;
252
+ const blocked = evaluation ? evaluation.verdict !== 'PASS' : false;
253
+ return {
254
+ gate,
255
+ strict: evaluation !== null,
256
+ evaluation,
257
+ native: null, // session replay carries the payload, not in-process results
258
+ blocked,
259
+ summary: evaluation
260
+ ? blocked
261
+ ? `blocked (strict ${evaluation.verdict} from session log seq=${snapshot?.seq}): ${evaluation.summary}`
262
+ : `open (strict PASS from session log seq=${snapshot?.seq}): ${evaluation.summary}`
263
+ : 'open (no strict verification record in session log)',
264
+ };
265
+ }
153
266
  //# sourceMappingURL=verificationBridge.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"verificationBridge.js","sourceRoot":"","sources":["../../../src/cli/kraken/verificationBridge.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"verificationBridge.js","sourceRoot":"","sources":["../../../src/cli/kraken/verificationBridge.ts"],"names":[],"mappings":"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"}