zelari-code 2.0.0-alpha.6 → 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.
- package/dist/cli/headless.js +9 -0
- package/dist/cli/headless.js.map +1 -1
- package/dist/cli/headlessE2eSession.test.js +189 -0
- package/dist/cli/headlessE2eSession.test.js.map +1 -0
- package/dist/cli/headlessSpine.js +6 -0
- package/dist/cli/headlessSpine.js.map +1 -1
- package/dist/cli/hooks/chatState.js.map +1 -1
- package/dist/cli/hooks/eventsToMessages.js.map +1 -1
- package/dist/cli/hooks/useChatTurn.js +5 -3
- package/dist/cli/hooks/useChatTurn.js.map +1 -1
- package/dist/cli/hooks/useSession.js +0 -2
- package/dist/cli/hooks/useSession.js.map +1 -1
- package/dist/cli/kraken/evidenceAnchoring.test.js +92 -0
- package/dist/cli/kraken/evidenceAnchoring.test.js.map +1 -0
- package/dist/cli/kraken/nativeVerification.js +113 -0
- package/dist/cli/kraken/nativeVerification.js.map +1 -0
- package/dist/cli/kraken/nativeVerification.test.js +207 -0
- package/dist/cli/kraken/nativeVerification.test.js.map +1 -0
- package/dist/cli/kraken/strictDefaults.test.js +149 -0
- package/dist/cli/kraken/strictDefaults.test.js.map +1 -0
- package/dist/cli/kraken/verificationBridge.js +86 -8
- package/dist/cli/kraken/verificationBridge.js.map +1 -1
- package/dist/cli/kraken/verificationBridge.session.test.js +2 -2
- package/dist/cli/kraken/verificationBridge.session.test.js.map +1 -1
- package/dist/cli/kraken/verificationBridge.test.js +38 -22
- package/dist/cli/kraken/verificationBridge.test.js.map +1 -1
- package/dist/cli/kraken/verifierAdvisoryLock.test.js +154 -0
- package/dist/cli/kraken/verifierAdvisoryLock.test.js.map +1 -0
- package/dist/cli/kraken/verifierResolution.js +28 -0
- package/dist/cli/kraken/verifierResolution.js.map +1 -0
- package/dist/cli/kraken/verifierRoundTrip.test.js +166 -0
- package/dist/cli/kraken/verifierRoundTrip.test.js.map +1 -0
- package/dist/cli/legacyContextIsolation.test.js +3 -2
- package/dist/cli/legacyContextIsolation.test.js.map +1 -1
- package/dist/cli/main.bundled.js +707 -314
- package/dist/cli/main.bundled.js.map +4 -4
- package/dist/cli/missionContinuation.test.js +117 -0
- package/dist/cli/missionContinuation.test.js.map +1 -0
- package/dist/cli/profileMatrix.test.js +130 -0
- package/dist/cli/profileMatrix.test.js.map +1 -0
- package/dist/cli/runHeadless.js +39 -4
- package/dist/cli/runHeadless.js.map +1 -1
- package/dist/cli/sessionSpine.js +29 -3
- package/dist/cli/sessionSpine.js.map +1 -1
- package/dist/cli/zelariMission.js +16 -0
- package/dist/cli/zelariMission.js.map +1 -1
- package/package.json +2 -2
|
@@ -9,6 +9,11 @@ import { afterEach, beforeEach, describe, expect, it } from 'vitest';
|
|
|
9
9
|
import { evaluateStrictBuildGate, krakenResultsToContract, strictDoneEnabled, strictGateEventPayload, strictGateExitCode, } from './verificationBridge.js';
|
|
10
10
|
import { resetKrakenCandidates, setKrakenCheckResults, setKrakenSelection, } from './candidateRegistry.js';
|
|
11
11
|
const CHECKS = ['session survives concurrent refresh', 'rotated cookie rejects the old token'];
|
|
12
|
+
/** Fake spine emitter that stamps sequential seq so notes become event-backed. */
|
|
13
|
+
function emitSeq() {
|
|
14
|
+
let n = 1;
|
|
15
|
+
return async () => ({ seq: n++ });
|
|
16
|
+
}
|
|
12
17
|
function selectWithChecks(checks) {
|
|
13
18
|
resetKrakenCandidates();
|
|
14
19
|
setKrakenSelection({
|
|
@@ -34,13 +39,13 @@ afterEach(() => {
|
|
|
34
39
|
resetKrakenCandidates();
|
|
35
40
|
});
|
|
36
41
|
describe('krakenResultsToContract', () => {
|
|
37
|
-
it('maps every required check to a required criterion with a stable id', () => {
|
|
42
|
+
it('maps every required check to a required criterion with a stable id', async () => {
|
|
38
43
|
const contract = krakenResultsToContract(CHECKS, [], 1000);
|
|
39
44
|
expect(contract.criteria).toHaveLength(2);
|
|
40
45
|
expect(contract.criteria.every((c) => c.required && c.source === 'kraken-selection')).toBe(true);
|
|
41
46
|
expect(contract.results.every((r) => r.status === 'unknown' && r.source === 'verify-agent')).toBe(true);
|
|
42
47
|
});
|
|
43
|
-
it('a pass WITH a note carries evidence; a pass WITHOUT a note does not', () => {
|
|
48
|
+
it('a pass WITH a note carries evidence; a pass WITHOUT a note does not', async () => {
|
|
44
49
|
const results = [
|
|
45
50
|
{ check: CHECKS[0], status: 'pass', note: 'vitest 41/41' },
|
|
46
51
|
{ check: CHECKS[1], status: 'pass' },
|
|
@@ -50,7 +55,7 @@ describe('krakenResultsToContract', () => {
|
|
|
50
55
|
expect(contract.results[0].evidence[0].tier).toBe('tool-output');
|
|
51
56
|
expect(contract.results[1].evidence).toHaveLength(0);
|
|
52
57
|
});
|
|
53
|
-
it('tolerates lightly reworded check text (containment matching)', () => {
|
|
58
|
+
it('tolerates lightly reworded check text (containment matching)', async () => {
|
|
54
59
|
const results = [
|
|
55
60
|
{ check: 'Session survives concurrent REFRESH (reworded)', status: 'pass', note: 'x' },
|
|
56
61
|
];
|
|
@@ -60,7 +65,7 @@ describe('krakenResultsToContract', () => {
|
|
|
60
65
|
});
|
|
61
66
|
});
|
|
62
67
|
describe('evaluateStrictBuildGate', () => {
|
|
63
|
-
it('strict off (default): mirrors the legacy gate exactly', () => {
|
|
68
|
+
it('strict off (default): mirrors the legacy gate exactly', async () => {
|
|
64
69
|
delete process.env.ZELARI_STRICT_DONE;
|
|
65
70
|
expect(strictDoneEnabled()).toBe(false);
|
|
66
71
|
selectWithChecks(CHECKS);
|
|
@@ -68,60 +73,71 @@ describe('evaluateStrictBuildGate', () => {
|
|
|
68
73
|
{ check: CHECKS[0], status: 'pass', note: 'ok' },
|
|
69
74
|
{ check: CHECKS[1], status: 'fail', note: 'assert' },
|
|
70
75
|
]);
|
|
71
|
-
const evaluation = evaluateStrictBuildGate('build');
|
|
76
|
+
const evaluation = await evaluateStrictBuildGate('build');
|
|
72
77
|
expect(evaluation.strict).toBe(false);
|
|
73
78
|
expect(evaluation.evaluation).toBeNull();
|
|
74
79
|
expect(evaluation.blocked).toBe(true);
|
|
75
80
|
});
|
|
76
|
-
it('strict on + all pass with notes → PASS', () => {
|
|
81
|
+
it('strict on + all pass with notes → PASS', async () => {
|
|
77
82
|
process.env.ZELARI_STRICT_DONE = '1';
|
|
78
83
|
selectWithChecks(CHECKS);
|
|
79
84
|
setKrakenCheckResults([
|
|
80
85
|
{ check: CHECKS[0], status: 'pass', note: 'vitest 41/41' },
|
|
81
86
|
{ check: CHECKS[1], status: 'pass', note: 'curl 401' },
|
|
82
87
|
]);
|
|
83
|
-
const evaluation = evaluateStrictBuildGate('build');
|
|
88
|
+
const evaluation = await evaluateStrictBuildGate('build', { emit: emitSeq() });
|
|
84
89
|
expect(evaluation.strict).toBe(true);
|
|
85
90
|
expect(evaluation.evaluation.verdict).toBe('PASS');
|
|
86
91
|
expect(evaluation.blocked).toBe(false);
|
|
87
92
|
});
|
|
88
|
-
it('strict on +
|
|
93
|
+
it('strict on + notes without spine emit → BLOCKED (event-backed required)', async () => {
|
|
94
|
+
process.env.ZELARI_STRICT_DONE = '1';
|
|
95
|
+
selectWithChecks(CHECKS);
|
|
96
|
+
setKrakenCheckResults([
|
|
97
|
+
{ check: CHECKS[0], status: 'pass', note: 'vitest 41/41' },
|
|
98
|
+
{ check: CHECKS[1], status: 'pass', note: 'curl 401' },
|
|
99
|
+
]);
|
|
100
|
+
const evaluation = await evaluateStrictBuildGate('build'); // no emit → unanchored
|
|
101
|
+
expect(evaluation.evaluation.verdict).toBe('BLOCKED');
|
|
102
|
+
expect(evaluation.evaluation.unsatisfied[0].reason).toContain('event-backed');
|
|
103
|
+
});
|
|
104
|
+
it('strict on + pass WITHOUT evidence → BLOCKED (false-done guard)', async () => {
|
|
89
105
|
process.env.ZELARI_STRICT_DONE = '1';
|
|
90
106
|
selectWithChecks(CHECKS);
|
|
91
107
|
setKrakenCheckResults([
|
|
92
108
|
{ check: CHECKS[0], status: 'pass', note: 'vitest 41/41' },
|
|
93
109
|
{ check: CHECKS[1], status: 'pass' }, // no note → no evidence
|
|
94
110
|
]);
|
|
95
|
-
const evaluation = evaluateStrictBuildGate('build');
|
|
111
|
+
const evaluation = await evaluateStrictBuildGate('build', { emit: emitSeq() });
|
|
96
112
|
expect(evaluation.evaluation.verdict).toBe('BLOCKED');
|
|
97
113
|
expect(evaluation.blocked).toBe(true);
|
|
98
114
|
expect(evaluation.evaluation.unsatisfied[0].status).toBe('unknown');
|
|
99
115
|
expect(evaluation.evaluation.unsatisfied[0].reason).toContain('without evidence');
|
|
100
116
|
});
|
|
101
|
-
it('strict on + legacy fail → REPAIR_REQUIRED (fail wins over unknown)', () => {
|
|
117
|
+
it('strict on + legacy fail → REPAIR_REQUIRED (fail wins over unknown)', async () => {
|
|
102
118
|
process.env.ZELARI_STRICT_DONE = '1';
|
|
103
119
|
selectWithChecks(CHECKS);
|
|
104
120
|
setKrakenCheckResults([
|
|
105
121
|
{ check: CHECKS[0], status: 'fail', note: 'assert false' },
|
|
106
122
|
{ check: CHECKS[1], status: 'unknown' },
|
|
107
123
|
]);
|
|
108
|
-
const evaluation = evaluateStrictBuildGate('build');
|
|
124
|
+
const evaluation = await evaluateStrictBuildGate('build', { emit: emitSeq() });
|
|
109
125
|
expect(evaluation.evaluation.verdict).toBe('REPAIR_REQUIRED');
|
|
110
126
|
expect(evaluation.blocked).toBe(true);
|
|
111
127
|
});
|
|
112
|
-
it('PLAN turns and turns without selection stay open', () => {
|
|
128
|
+
it('PLAN turns and turns without selection stay open', async () => {
|
|
113
129
|
process.env.ZELARI_STRICT_DONE = '1';
|
|
114
|
-
expect(evaluateStrictBuildGate('plan').blocked).toBe(false);
|
|
130
|
+
expect((await evaluateStrictBuildGate('plan')).blocked).toBe(false);
|
|
115
131
|
resetKrakenCandidates();
|
|
116
|
-
expect(evaluateStrictBuildGate('build').blocked).toBe(false);
|
|
132
|
+
expect((await evaluateStrictBuildGate('build')).blocked).toBe(false);
|
|
117
133
|
});
|
|
118
134
|
});
|
|
119
135
|
describe('strictGateEventPayload', () => {
|
|
120
|
-
it('is JSON-serializable and carries both gate layers', () => {
|
|
136
|
+
it('is JSON-serializable and carries both gate layers', async () => {
|
|
121
137
|
process.env.ZELARI_STRICT_DONE = '1';
|
|
122
138
|
selectWithChecks(CHECKS);
|
|
123
139
|
setKrakenCheckResults([{ check: CHECKS[0], status: 'pass', note: 'n' }]);
|
|
124
|
-
const payload = strictGateEventPayload(evaluateStrictBuildGate('build'));
|
|
140
|
+
const payload = strictGateEventPayload(await evaluateStrictBuildGate('build', { emit: emitSeq() }));
|
|
125
141
|
expect(() => JSON.stringify(payload)).not.toThrow();
|
|
126
142
|
expect(payload).toMatchObject({ strict: true, engine: 'kraken-legacy+completion-policy' });
|
|
127
143
|
expect(payload.legacy).toMatchObject({ total: 2 });
|
|
@@ -129,30 +145,30 @@ describe('strictGateEventPayload', () => {
|
|
|
129
145
|
});
|
|
130
146
|
});
|
|
131
147
|
describe('strictGateExitCode (E2.2 — blocked strict done closes non-success)', () => {
|
|
132
|
-
it('strict on + blocked after repair → dedicated exit code 4', () => {
|
|
148
|
+
it('strict on + blocked after repair → dedicated exit code 4', async () => {
|
|
133
149
|
process.env.ZELARI_STRICT_DONE = '1';
|
|
134
150
|
selectWithChecks(CHECKS);
|
|
135
151
|
setKrakenCheckResults([
|
|
136
152
|
{ check: CHECKS[0], status: 'pass', note: 'vitest 41/41' },
|
|
137
153
|
{ check: CHECKS[1], status: 'unknown' },
|
|
138
154
|
]);
|
|
139
|
-
const evaluation = evaluateStrictBuildGate('build');
|
|
155
|
+
const evaluation = await evaluateStrictBuildGate('build', { emit: emitSeq() });
|
|
140
156
|
expect(evaluation.blocked).toBe(true);
|
|
141
157
|
expect(strictGateExitCode(evaluation)).toBe(4);
|
|
142
158
|
});
|
|
143
|
-
it('strict on + evidence complete → 0 (run outcome unchanged)', () => {
|
|
159
|
+
it('strict on + evidence complete → 0 (run outcome unchanged)', async () => {
|
|
144
160
|
process.env.ZELARI_STRICT_DONE = '1';
|
|
145
161
|
selectWithChecks([CHECKS[0]]);
|
|
146
162
|
setKrakenCheckResults([{ check: CHECKS[0], status: 'pass', note: 'vitest 41/41' }]);
|
|
147
|
-
const evaluation = evaluateStrictBuildGate('build');
|
|
163
|
+
const evaluation = await evaluateStrictBuildGate('build', { emit: emitSeq() });
|
|
148
164
|
expect(evaluation.blocked).toBe(false);
|
|
149
165
|
expect(strictGateExitCode(evaluation)).toBe(0);
|
|
150
166
|
});
|
|
151
|
-
it('strict off + legacy blocked → 0 (enforcement is strict-only)', () => {
|
|
167
|
+
it('strict off + legacy blocked → 0 (enforcement is strict-only)', async () => {
|
|
152
168
|
delete process.env.ZELARI_STRICT_DONE;
|
|
153
169
|
selectWithChecks(CHECKS);
|
|
154
170
|
setKrakenCheckResults([{ check: CHECKS[0], status: 'fail', note: 'red' }]);
|
|
155
|
-
const evaluation = evaluateStrictBuildGate('build');
|
|
171
|
+
const evaluation = await evaluateStrictBuildGate('build');
|
|
156
172
|
expect(evaluation.blocked).toBe(true);
|
|
157
173
|
expect(evaluation.strict).toBe(false);
|
|
158
174
|
expect(strictGateExitCode(evaluation)).toBe(0);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"verificationBridge.test.js","sourceRoot":"","sources":["../../../src/cli/kraken/verificationBridge.test.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AACH,OAAO,EAAE,SAAS,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,QAAQ,CAAC;AACrE,OAAO,EACL,uBAAuB,EACvB,uBAAuB,EACvB,iBAAiB,EACjB,sBAAsB,EACtB,kBAAkB,GACnB,MAAM,yBAAyB,CAAC;AACjC,OAAO,EACL,qBAAqB,EACrB,qBAAqB,EACrB,kBAAkB,GACnB,MAAM,wBAAwB,CAAC;AAGhC,MAAM,MAAM,GAAG,CAAC,qCAAqC,EAAE,sCAAsC,CAAC,CAAC;AAE/F,SAAS,gBAAgB,CAAC,MAAgB;IACxC,qBAAqB,EAAE,CAAC;IACxB,kBAAkB,CAAC;QACjB,MAAM,EAAE,UAAU;QAClB,WAAW,EAAE,CAAC;QACd,SAAS,EAAE,mBAAmB;QAC9B,cAAc,EAAE,MAAM;QACtB,QAAQ,EAAE,KAAK;QACf,QAAQ,EAAE,IAAI;QACd,QAAQ,EAAE,KAAK;KAChB,CAAC,CAAC;AACL,CAAC;AAED,IAAI,OAA2B,CAAC;AAEhC,UAAU,CAAC,GAAG,EAAE;IACd,OAAO,GAAG,OAAO,CAAC,GAAG,CAAC,kBAAkB,CAAC;IACzC,qBAAqB,EAAE,CAAC;AAC1B,CAAC,CAAC,CAAC;AAEH,SAAS,CAAC,GAAG,EAAE;IACb,IAAI,OAAO,KAAK,SAAS;QAAE,OAAO,OAAO,CAAC,GAAG,CAAC,kBAAkB,CAAC;;QAC5D,OAAO,CAAC,GAAG,CAAC,kBAAkB,GAAG,OAAO,CAAC;IAC9C,qBAAqB,EAAE,CAAC;AAC1B,CAAC,CAAC,CAAC;AAEH,QAAQ,CAAC,yBAAyB,EAAE,GAAG,EAAE;IACvC,EAAE,CAAC,oEAAoE,EAAE,
|
|
1
|
+
{"version":3,"file":"verificationBridge.test.js","sourceRoot":"","sources":["../../../src/cli/kraken/verificationBridge.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,154 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* verifierAdvisoryLock — Exit-2.3 lock tests (ADR-0023 × strict BUILD gate).
|
|
3
|
+
*
|
|
4
|
+
* Locks the composition rule the 2.0 verification contract depends on:
|
|
5
|
+
* when the optional LLM verifier is ACTIVE, the deterministic CompletionPolicy
|
|
6
|
+
* stays the FINAL authority of the Kraken BUILD gate.
|
|
7
|
+
*
|
|
8
|
+
* Caso 1 — deterministic criterion UNKNOWN/FAIL + verifier CONFIRMED
|
|
9
|
+
* → no clean success (BLOCKED / REPAIR_REQUIRED, strict exit ≠ 0).
|
|
10
|
+
* Caso 2 — deterministic criteria PASS + verifier REJECTED
|
|
11
|
+
* → the deterministic verdict is NOT rewritten; the review is
|
|
12
|
+
* recorded in the spine as advisory only (exit stays 0).
|
|
13
|
+
*
|
|
14
|
+
* The verifier may add information, never authority. Breaking either test
|
|
15
|
+
* below is a contract regression, not a refactor.
|
|
16
|
+
*/
|
|
17
|
+
import { afterEach, beforeEach, describe, expect, it } from 'vitest';
|
|
18
|
+
import { DEFAULT_VERIFIER_CONFIG, VerifierService, } from '@zelari/core/verification';
|
|
19
|
+
import { evaluateStrictBuildGate, krakenResultsToContract, strictGateEventPayload, strictGateExitCode, } from './verificationBridge.js';
|
|
20
|
+
import { getKrakenCheckResults, krakenRequiredChecks, resetKrakenCandidates, setKrakenCheckResults, setKrakenSelection, } from './candidateRegistry.js';
|
|
21
|
+
const CHECKS = ['typecheck passes', 'suite verde'];
|
|
22
|
+
function emitSeq() {
|
|
23
|
+
let n = 1;
|
|
24
|
+
return async () => ({ seq: n++ });
|
|
25
|
+
}
|
|
26
|
+
function selectWithChecks() {
|
|
27
|
+
resetKrakenCandidates();
|
|
28
|
+
setKrakenSelection({
|
|
29
|
+
status: 'selected',
|
|
30
|
+
winnerIndex: 1,
|
|
31
|
+
rationale: 'stronger evidence',
|
|
32
|
+
requiredChecks: CHECKS,
|
|
33
|
+
degraded: false,
|
|
34
|
+
verifier: null,
|
|
35
|
+
judgedBy: 'llm',
|
|
36
|
+
});
|
|
37
|
+
}
|
|
38
|
+
/** Enabled verifier with a fixed test model; `reply` is the raw LLM answer. */
|
|
39
|
+
function activeVerifier(reply, emitted) {
|
|
40
|
+
return new VerifierService({
|
|
41
|
+
callModel: async () => ({
|
|
42
|
+
text: reply,
|
|
43
|
+
provider: 'test',
|
|
44
|
+
model: 'verifier-1',
|
|
45
|
+
}),
|
|
46
|
+
config: {
|
|
47
|
+
...DEFAULT_VERIFIER_CONFIG,
|
|
48
|
+
enabled: true,
|
|
49
|
+
model: { mode: 'fixed', provider: 'test', model: 'verifier-1' },
|
|
50
|
+
},
|
|
51
|
+
emit: async (input) => {
|
|
52
|
+
emitted.push(input);
|
|
53
|
+
},
|
|
54
|
+
});
|
|
55
|
+
}
|
|
56
|
+
const CONFIRMED = '{"verdict":"confirmed","score":0.97,"rationale":"looks done to me"}';
|
|
57
|
+
const REJECTED = '{"verdict":"rejected","score":0.05,"rationale":"not convinced"}';
|
|
58
|
+
/** Contract the runtime hands to BOTH the strict gate and the verifier. */
|
|
59
|
+
function currentContract() {
|
|
60
|
+
return krakenResultsToContract(krakenRequiredChecks(), getKrakenCheckResults());
|
|
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('Exit-2.3 lock: verifier LLM active cannot change the completion authority', () => {
|
|
76
|
+
it('Caso 1a — unknown criterion + verifier CONFIRMED → BLOCKED, strict exit 4 (advisory recorded, never applied)', async () => {
|
|
77
|
+
selectWithChecks();
|
|
78
|
+
setKrakenCheckResults([]); // verify tentacle never reported → unknown ≠ pass
|
|
79
|
+
const emitted = [];
|
|
80
|
+
const verifier = activeVerifier(CONFIRMED, emitted);
|
|
81
|
+
const review = await verifier.reviewCompletion({
|
|
82
|
+
summary: 'done: all green',
|
|
83
|
+
results: currentContract().results,
|
|
84
|
+
});
|
|
85
|
+
const gate = await evaluateStrictBuildGate('build', { emit: emitSeq() });
|
|
86
|
+
// The review itself may say "confirmed" — it is advisory information only.
|
|
87
|
+
expect(review.verdict).toBe('confirmed');
|
|
88
|
+
expect(review.effectiveModel).toEqual({
|
|
89
|
+
mode: 'fixed',
|
|
90
|
+
provider: 'test',
|
|
91
|
+
model: 'verifier-1',
|
|
92
|
+
});
|
|
93
|
+
// The deterministic policy stays the final authority: unknown → BLOCKED.
|
|
94
|
+
expect(gate.strict).toBe(true);
|
|
95
|
+
expect(gate.evaluation.verdict).toBe('BLOCKED');
|
|
96
|
+
expect(gate.blocked).toBe(true);
|
|
97
|
+
expect(strictGateExitCode(gate)).toBe(4);
|
|
98
|
+
expect(strictGateEventPayload(gate).verdict).toBe('BLOCKED');
|
|
99
|
+
// The spine keeps the verifier review as a separate advisory record.
|
|
100
|
+
expect(emitted).toHaveLength(1);
|
|
101
|
+
const data = emitted[0].data;
|
|
102
|
+
expect(data.source).toBe('verifier-model');
|
|
103
|
+
expect(data.verdict).toBe('confirmed');
|
|
104
|
+
expect(data.model).toBe('verifier-1');
|
|
105
|
+
expect(data.selectionMode).toBe('fixed');
|
|
106
|
+
});
|
|
107
|
+
it('Caso 1b — FAIL criterion + verifier CONFIRMED → REPAIR_REQUIRED (fail wins), review downgraded to unknown', async () => {
|
|
108
|
+
selectWithChecks();
|
|
109
|
+
setKrakenCheckResults([
|
|
110
|
+
{ check: CHECKS[0], status: 'pass', note: 'tsc clean' },
|
|
111
|
+
{ check: CHECKS[1], status: 'fail', note: 'vitest 1/2' },
|
|
112
|
+
]);
|
|
113
|
+
const emitted = [];
|
|
114
|
+
const verifier = activeVerifier(CONFIRMED, emitted);
|
|
115
|
+
const review = await verifier.reviewCompletion({
|
|
116
|
+
summary: 'done: mostly green',
|
|
117
|
+
results: currentContract().results,
|
|
118
|
+
});
|
|
119
|
+
const gate = await evaluateStrictBuildGate('build', { emit: emitSeq() });
|
|
120
|
+
// The service itself refuses to confirm over a failed deterministic check.
|
|
121
|
+
expect(review.verdict).toBe('unknown');
|
|
122
|
+
expect(review.fallback).toBe('discrete');
|
|
123
|
+
expect(review.rationale).toContain('cannot confirm');
|
|
124
|
+
// And even if it had not: the policy converts fail into repair, not done.
|
|
125
|
+
expect(gate.evaluation.verdict).toBe('REPAIR_REQUIRED');
|
|
126
|
+
expect(gate.blocked).toBe(true);
|
|
127
|
+
expect(strictGateExitCode(gate)).toBe(4);
|
|
128
|
+
});
|
|
129
|
+
it('Caso 2 — deterministic PASS + verifier REJECTED → PASS untouched, exit 0, rejection recorded as advisory', async () => {
|
|
130
|
+
selectWithChecks();
|
|
131
|
+
setKrakenCheckResults([
|
|
132
|
+
{ check: CHECKS[0], status: 'pass', note: 'tsc clean' },
|
|
133
|
+
{ check: CHECKS[1], status: 'pass', note: 'vitest 41/41' },
|
|
134
|
+
]);
|
|
135
|
+
const emitted = [];
|
|
136
|
+
const verifier = activeVerifier(REJECTED, emitted);
|
|
137
|
+
const review = await verifier.reviewCompletion({
|
|
138
|
+
summary: 'done: all green',
|
|
139
|
+
results: currentContract().results,
|
|
140
|
+
});
|
|
141
|
+
const gate = await evaluateStrictBuildGate('build', { emit: emitSeq() });
|
|
142
|
+
// The rejection is real, recorded, and advisory — it cannot dirty a
|
|
143
|
+
// deterministic strict PASS (no false-block from narration either).
|
|
144
|
+
expect(review.verdict).toBe('rejected');
|
|
145
|
+
expect(gate.evaluation.verdict).toBe('PASS');
|
|
146
|
+
expect(gate.blocked).toBe(false);
|
|
147
|
+
expect(strictGateExitCode(gate)).toBe(0);
|
|
148
|
+
expect(strictGateEventPayload(gate).verdict).toBe('PASS');
|
|
149
|
+
const data = emitted[0].data;
|
|
150
|
+
expect(data.verdict).toBe('rejected');
|
|
151
|
+
expect(data.source).toBe('verifier-model');
|
|
152
|
+
});
|
|
153
|
+
});
|
|
154
|
+
//# sourceMappingURL=verifierAdvisoryLock.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"verifierAdvisoryLock.test.js","sourceRoot":"","sources":["../../../src/cli/kraken/verifierAdvisoryLock.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import { getKrakenVerifierOverride } from '../providerConfig.js';
|
|
2
|
+
/**
|
|
3
|
+
* Override → ModelSelection. A complete, non-empty {provider, model} pair is
|
|
4
|
+
* `fixed`; anything else (undefined, null, partial, blank) is `inherit` —
|
|
5
|
+
* matching providerConfig, which already drops invalid overrides on load.
|
|
6
|
+
*/
|
|
7
|
+
export function verifierOverrideToModelSelection(override) {
|
|
8
|
+
if (override &&
|
|
9
|
+
typeof override.provider === 'string' &&
|
|
10
|
+
typeof override.model === 'string' &&
|
|
11
|
+
override.provider.trim().length > 0 &&
|
|
12
|
+
override.model.trim().length > 0) {
|
|
13
|
+
return {
|
|
14
|
+
mode: 'fixed',
|
|
15
|
+
provider: override.provider.trim(),
|
|
16
|
+
model: override.model.trim(),
|
|
17
|
+
};
|
|
18
|
+
}
|
|
19
|
+
return { mode: 'inherit' };
|
|
20
|
+
}
|
|
21
|
+
/**
|
|
22
|
+
* Live runtime resolution: read provider.json the way a fresh process would
|
|
23
|
+
* after a Desktop restart and map it to the VerifierService model selection.
|
|
24
|
+
*/
|
|
25
|
+
export function loadVerifierModelSelection() {
|
|
26
|
+
return verifierOverrideToModelSelection(getKrakenVerifierOverride());
|
|
27
|
+
}
|
|
28
|
+
//# sourceMappingURL=verifierResolution.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"verifierResolution.js","sourceRoot":"","sources":["../../../src/cli/kraken/verifierResolution.ts"],"names":[],"mappings":"AAgBA,OAAO,EAAE,yBAAyB,EAAE,MAAM,sBAAsB,CAAC;AAQjE;;;;GAIG;AACH,MAAM,UAAU,gCAAgC,CAC9C,QAAsC;IAEtC,IACE,QAAQ;QACR,OAAO,QAAQ,CAAC,QAAQ,KAAK,QAAQ;QACrC,OAAO,QAAQ,CAAC,KAAK,KAAK,QAAQ;QAClC,QAAQ,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC,MAAM,GAAG,CAAC;QACnC,QAAQ,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,MAAM,GAAG,CAAC,EAChC,CAAC;QACD,OAAO;YACL,IAAI,EAAE,OAAO;YACb,QAAQ,EAAE,QAAQ,CAAC,QAAQ,CAAC,IAAI,EAAE;YAClC,KAAK,EAAE,QAAQ,CAAC,KAAK,CAAC,IAAI,EAAE;SAC7B,CAAC;IACJ,CAAC;IACD,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC;AAC7B,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,0BAA0B;IACxC,OAAO,gCAAgC,CAAC,yBAAyB,EAAE,CAAC,CAAC;AACvE,CAAC"}
|
|
@@ -0,0 +1,166 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* verifierRoundTrip — Desktop verifier round-trip smoke (Exit-3.1, plan §9).
|
|
3
|
+
*
|
|
4
|
+
* Locks the FULL chain the plan requires:
|
|
5
|
+
*
|
|
6
|
+
* Desktop settings (applySetConfig — the real --set-config channel)
|
|
7
|
+
* → persist (provider.json)
|
|
8
|
+
* → restart/load (fresh disk read)
|
|
9
|
+
* → runtime resolution (loadVerifierModelSelection)
|
|
10
|
+
* → VerifierService.reviewCompletion
|
|
11
|
+
* → verification.run event logs the ACTUAL model used
|
|
12
|
+
*
|
|
13
|
+
* The three cases from the plan (§9):
|
|
14
|
+
* - Inherit: Primary=A, Verifier=inherit → effective verifier = A
|
|
15
|
+
* - Dedicated: Primary=A, Verifier=B → effective verifier = B
|
|
16
|
+
* - Reset: Dedicated B → clear override → inherit A
|
|
17
|
+
*
|
|
18
|
+
* The model call is stubbed at the transport boundary (callModel), reporting
|
|
19
|
+
* the provider/model the selected transport would actually use: in inherit
|
|
20
|
+
* mode the session transport (A), in fixed mode the dedicated transport (B).
|
|
21
|
+
*/
|
|
22
|
+
import { afterEach, beforeEach, describe, expect, it } from 'vitest';
|
|
23
|
+
import { mkdtempSync, rmSync, writeFileSync } from 'node:fs';
|
|
24
|
+
import { tmpdir } from 'node:os';
|
|
25
|
+
import path from 'node:path';
|
|
26
|
+
import { VerifierService, VerifierConfigSchema, } from '@zelari/core/verification';
|
|
27
|
+
import { getKrakenVerifierOverride } from '../providerConfig.js';
|
|
28
|
+
import { applySetConfig, buildDesktopConfigSnapshot } from '../desktopConfig.js';
|
|
29
|
+
import { loadVerifierModelSelection, verifierOverrideToModelSelection, } from './verifierResolution.js';
|
|
30
|
+
// Primary model A (the session/run model).
|
|
31
|
+
const PRIMARY = { provider: 'grok', model: 'grok-4.6' };
|
|
32
|
+
// Dedicated verifier B.
|
|
33
|
+
const DEDICATED = { provider: 'anthropic', model: 'claude-sonnet-4-6' };
|
|
34
|
+
let tmpDir = '';
|
|
35
|
+
let savedEnv;
|
|
36
|
+
beforeEach(() => {
|
|
37
|
+
tmpDir = mkdtempSync(path.join(tmpdir(), 'zelari-vrt-'));
|
|
38
|
+
savedEnv = process.env.ANATHEMA_PROVIDER_CONFIG_FILE;
|
|
39
|
+
process.env.ANATHEMA_PROVIDER_CONFIG_FILE = path.join(tmpDir, 'provider.json');
|
|
40
|
+
writeFileSync(process.env.ANATHEMA_PROVIDER_CONFIG_FILE, JSON.stringify({
|
|
41
|
+
activeProviderId: PRIMARY.provider,
|
|
42
|
+
modelByProvider: { [PRIMARY.provider]: PRIMARY.model },
|
|
43
|
+
}, null, 2), 'utf-8');
|
|
44
|
+
delete process.env.ZELARI_KRAKEN_SELECT_PROVIDER;
|
|
45
|
+
delete process.env.ZELARI_KRAKEN_SELECT_MODEL;
|
|
46
|
+
});
|
|
47
|
+
afterEach(() => {
|
|
48
|
+
if (savedEnv === undefined)
|
|
49
|
+
delete process.env.ANATHEMA_PROVIDER_CONFIG_FILE;
|
|
50
|
+
else
|
|
51
|
+
process.env.ANATHEMA_PROVIDER_CONFIG_FILE = savedEnv;
|
|
52
|
+
rmSync(tmpDir, { recursive: true, force: true });
|
|
53
|
+
});
|
|
54
|
+
/** Enabled VerifierService from the resolved selection; captures spine events. */
|
|
55
|
+
function verifierFor(selection, transport, emitted) {
|
|
56
|
+
const config = VerifierConfigSchema.parse({ enabled: true, model: selection });
|
|
57
|
+
return new VerifierService({
|
|
58
|
+
config,
|
|
59
|
+
callModel: async () => ({
|
|
60
|
+
text: '{"verdict":"confirmed","score":0.9,"rationale":"round-trip smoke"}',
|
|
61
|
+
provider: transport.provider,
|
|
62
|
+
model: transport.model,
|
|
63
|
+
}),
|
|
64
|
+
emit: async (input) => {
|
|
65
|
+
emitted.push(input);
|
|
66
|
+
},
|
|
67
|
+
});
|
|
68
|
+
}
|
|
69
|
+
describe('Desktop verifier round-trip (Exit-3.1)', () => {
|
|
70
|
+
it('Inherit: Primary=A, Verifier=inherit → effective verifier = A, event logs A', async () => {
|
|
71
|
+
// (1) Desktop settings: no override (the recommended default).
|
|
72
|
+
// (2) Restart/load: fresh disk read → inherit.
|
|
73
|
+
expect(getKrakenVerifierOverride()).toBeUndefined();
|
|
74
|
+
// UI reload leg: the snapshot exposes null = inherit.
|
|
75
|
+
expect(buildDesktopConfigSnapshot().krakenVerifier).toBeNull();
|
|
76
|
+
// (3) Runtime resolution.
|
|
77
|
+
const selection = loadVerifierModelSelection();
|
|
78
|
+
expect(selection).toEqual({ mode: 'inherit' });
|
|
79
|
+
// (4)+(5) Review + spine event: the session transport reports the primary model.
|
|
80
|
+
const emitted = [];
|
|
81
|
+
const verifier = verifierFor(selection, PRIMARY, emitted);
|
|
82
|
+
const review = await verifier.reviewCompletion({
|
|
83
|
+
summary: 'round-trip smoke: all checks green',
|
|
84
|
+
results: [],
|
|
85
|
+
session: { provider: PRIMARY.provider, model: PRIMARY.model },
|
|
86
|
+
});
|
|
87
|
+
expect(review.effectiveModel).toEqual({ mode: 'inherit', ...PRIMARY });
|
|
88
|
+
expect(emitted).toHaveLength(1);
|
|
89
|
+
expect(emitted[0].kind).toBe('verification.run');
|
|
90
|
+
const data = emitted[0].data;
|
|
91
|
+
expect(data.source).toBe('verifier-model');
|
|
92
|
+
expect(data.selectionMode).toBe('inherit');
|
|
93
|
+
expect(data.provider).toBe(PRIMARY.provider);
|
|
94
|
+
expect(data.model).toBe(PRIMARY.model);
|
|
95
|
+
});
|
|
96
|
+
it('Dedicated: Primary=A, Verifier=B → effective verifier = B, event logs B', async () => {
|
|
97
|
+
// (1) Desktop settings → persist through the real --set-config channel.
|
|
98
|
+
const applied = applySetConfig({
|
|
99
|
+
verifierProvider: DEDICATED.provider,
|
|
100
|
+
verifierModel: DEDICATED.model,
|
|
101
|
+
});
|
|
102
|
+
expect(applied.ok).toBe(true);
|
|
103
|
+
// UI reload leg: the snapshot exposes the dedicated override.
|
|
104
|
+
expect(buildDesktopConfigSnapshot().krakenVerifier).toEqual(DEDICATED);
|
|
105
|
+
// (2) Restart/load: fresh disk read.
|
|
106
|
+
expect(getKrakenVerifierOverride()).toEqual(DEDICATED);
|
|
107
|
+
// (3) Runtime resolution.
|
|
108
|
+
const selection = loadVerifierModelSelection();
|
|
109
|
+
expect(selection).toEqual({ mode: 'fixed', ...DEDICATED });
|
|
110
|
+
// (4)+(5) Review + spine: the dedicated transport reports B even though the
|
|
111
|
+
// session model is A — this is the "event logs actual model" lock.
|
|
112
|
+
const emitted = [];
|
|
113
|
+
const verifier = verifierFor(selection, DEDICATED, emitted);
|
|
114
|
+
const review = await verifier.reviewCompletion({
|
|
115
|
+
summary: 'round-trip smoke: all checks green',
|
|
116
|
+
results: [],
|
|
117
|
+
session: { provider: PRIMARY.provider, model: PRIMARY.model },
|
|
118
|
+
});
|
|
119
|
+
expect(review.effectiveModel).toEqual({ mode: 'fixed', ...DEDICATED });
|
|
120
|
+
const data = emitted[0].data;
|
|
121
|
+
expect(data.selectionMode).toBe('fixed');
|
|
122
|
+
expect(data.provider).toBe(DEDICATED.provider);
|
|
123
|
+
expect(data.model).toBe(DEDICATED.model);
|
|
124
|
+
});
|
|
125
|
+
it('Reset: Dedicated B → clear override → inherit A', async () => {
|
|
126
|
+
// Start dedicated, then reset through the real channel.
|
|
127
|
+
const set = applySetConfig({
|
|
128
|
+
verifierProvider: DEDICATED.provider,
|
|
129
|
+
verifierModel: DEDICATED.model,
|
|
130
|
+
});
|
|
131
|
+
expect(set.ok).toBe(true);
|
|
132
|
+
const cleared = applySetConfig({ verifierClear: true });
|
|
133
|
+
expect(cleared.ok).toBe(true);
|
|
134
|
+
// UI reload leg: back to null (inherit).
|
|
135
|
+
expect(buildDesktopConfigSnapshot().krakenVerifier).toBeNull();
|
|
136
|
+
// Restart/load + resolution.
|
|
137
|
+
expect(getKrakenVerifierOverride()).toBeUndefined();
|
|
138
|
+
const selection = loadVerifierModelSelection();
|
|
139
|
+
expect(selection).toEqual({ mode: 'inherit' });
|
|
140
|
+
// Review + spine: back to the primary model A.
|
|
141
|
+
const emitted = [];
|
|
142
|
+
const verifier = verifierFor(selection, PRIMARY, emitted);
|
|
143
|
+
const review = await verifier.reviewCompletion({
|
|
144
|
+
summary: 'round-trip smoke: all checks green',
|
|
145
|
+
results: [],
|
|
146
|
+
session: { provider: PRIMARY.provider, model: PRIMARY.model },
|
|
147
|
+
});
|
|
148
|
+
expect(review.effectiveModel).toEqual({ mode: 'inherit', ...PRIMARY });
|
|
149
|
+
const data = emitted[0].data;
|
|
150
|
+
expect(data.selectionMode).toBe('inherit');
|
|
151
|
+
expect(data.model).toBe(PRIMARY.model);
|
|
152
|
+
});
|
|
153
|
+
it('verifierOverrideToModelSelection: partial/blank overrides degrade to inherit', () => {
|
|
154
|
+
expect(verifierOverrideToModelSelection(undefined)).toEqual({ mode: 'inherit' });
|
|
155
|
+
expect(verifierOverrideToModelSelection(null)).toEqual({ mode: 'inherit' });
|
|
156
|
+
expect(verifierOverrideToModelSelection({ provider: 'grok', model: ' ' })).toEqual({ mode: 'inherit' });
|
|
157
|
+
expect(verifierOverrideToModelSelection({ provider: '', model: 'm' })).toEqual({ mode: 'inherit' });
|
|
158
|
+
// Complete overrides are fixed, trimmed.
|
|
159
|
+
expect(verifierOverrideToModelSelection({ provider: ' grok ', model: ' grok-4.6 ' })).toEqual({
|
|
160
|
+
mode: 'fixed',
|
|
161
|
+
provider: 'grok',
|
|
162
|
+
model: 'grok-4.6',
|
|
163
|
+
});
|
|
164
|
+
});
|
|
165
|
+
});
|
|
166
|
+
//# sourceMappingURL=verifierRoundTrip.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"verifierRoundTrip.test.js","sourceRoot":"","sources":["../../../src/cli/kraken/verifierRoundTrip.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -54,11 +54,12 @@ describe('strict done gate enforcement (E2.2)', () => {
|
|
|
54
54
|
});
|
|
55
55
|
it('the strict BUILD policy excludes verifier-llm evidence (LLM score alone is not done)', () => {
|
|
56
56
|
const policy = readFileSync(path.join(REPO_ROOT, 'packages', 'core', 'src', 'verification', 'completionPolicy.ts'), 'utf8');
|
|
57
|
-
expect(policy).toContain('STRICT_BUILD_POLICY');
|
|
58
|
-
const tiersBlock = policy.slice(policy.indexOf('DETERMINISTIC_EVIDENCE_TIERS'), policy.indexOf('STRICT_BUILD_POLICY'));
|
|
57
|
+
expect(policy).toContain('export const STRICT_BUILD_POLICY');
|
|
58
|
+
const tiersBlock = policy.slice(policy.indexOf('DETERMINISTIC_EVIDENCE_TIERS'), policy.indexOf('export const STRICT_BUILD_POLICY'));
|
|
59
59
|
expect(tiersBlock).toContain("'tool-output'");
|
|
60
60
|
expect(tiersBlock).not.toContain("'verifier-llm'");
|
|
61
61
|
expect(policy).toMatch(/admissibleTiers/);
|
|
62
|
+
expect(policy).toMatch(/requireEventBackedEvidence:\s*true/);
|
|
62
63
|
});
|
|
63
64
|
});
|
|
64
65
|
//# sourceMappingURL=legacyContextIsolation.test.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"legacyContextIsolation.test.js","sourceRoot":"","sources":["../../src/cli/legacyContextIsolation.test.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"legacyContextIsolation.test.js","sourceRoot":"","sources":["../../src/cli/legacyContextIsolation.test.ts"],"names":[],"mappings":"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"}
|