@principles/core 1.278.4 → 1.278.6
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/runtime-v2/__tests__/recovery-sweep-service.test.js +130 -0
- package/dist/runtime-v2/__tests__/recovery-sweep-service.test.js.map +1 -1
- package/dist/runtime-v2/internalization/__tests__/artifact-summary.property.test.js +1 -1
- package/dist/runtime-v2/internalization/__tests__/artifact-summary.property.test.js.map +1 -1
- package/dist/runtime-v2/internalization/__tests__/artificer-prompt-builder.test.js +6 -4
- package/dist/runtime-v2/internalization/__tests__/artificer-prompt-builder.test.js.map +1 -1
- package/dist/runtime-v2/internalization/__tests__/evaluator-out-of-scope-governance.test.d.ts +2 -0
- package/dist/runtime-v2/internalization/__tests__/evaluator-out-of-scope-governance.test.d.ts.map +1 -0
- package/dist/runtime-v2/internalization/__tests__/evaluator-out-of-scope-governance.test.js +307 -0
- package/dist/runtime-v2/internalization/__tests__/evaluator-out-of-scope-governance.test.js.map +1 -0
- package/dist/runtime-v2/internalization/__tests__/evaluator-prompt-builder.test.js +2 -2
- package/dist/runtime-v2/internalization/__tests__/evaluator-prompt-builder.test.js.map +1 -1
- package/dist/runtime-v2/internalization/__tests__/evolution-alignment-contract.test.d.ts +18 -0
- package/dist/runtime-v2/internalization/__tests__/evolution-alignment-contract.test.d.ts.map +1 -0
- package/dist/runtime-v2/internalization/__tests__/evolution-alignment-contract.test.js +457 -0
- package/dist/runtime-v2/internalization/__tests__/evolution-alignment-contract.test.js.map +1 -0
- package/dist/runtime-v2/internalization/__tests__/owner-decision-review.test.js +88 -0
- package/dist/runtime-v2/internalization/__tests__/owner-decision-review.test.js.map +1 -1
- package/dist/runtime-v2/internalization/artifact-summary.d.ts.map +1 -1
- package/dist/runtime-v2/internalization/artifact-summary.js +8 -0
- package/dist/runtime-v2/internalization/artifact-summary.js.map +1 -1
- package/dist/runtime-v2/internalization/artificer-prompt-builder.d.ts +37 -2
- package/dist/runtime-v2/internalization/artificer-prompt-builder.d.ts.map +1 -1
- package/dist/runtime-v2/internalization/artificer-prompt-builder.js +31 -1
- package/dist/runtime-v2/internalization/artificer-prompt-builder.js.map +1 -1
- package/dist/runtime-v2/internalization/artificer-runner.d.ts +18 -1
- package/dist/runtime-v2/internalization/artificer-runner.d.ts.map +1 -1
- package/dist/runtime-v2/internalization/artificer-runner.js +60 -2
- package/dist/runtime-v2/internalization/artificer-runner.js.map +1 -1
- package/dist/runtime-v2/internalization/context-manifests.d.ts.map +1 -1
- package/dist/runtime-v2/internalization/context-manifests.js +35 -2
- package/dist/runtime-v2/internalization/context-manifests.js.map +1 -1
- package/dist/runtime-v2/internalization/evaluator-prompt-builder.d.ts +15 -2
- package/dist/runtime-v2/internalization/evaluator-prompt-builder.d.ts.map +1 -1
- package/dist/runtime-v2/internalization/evaluator-prompt-builder.js +10 -2
- package/dist/runtime-v2/internalization/evaluator-prompt-builder.js.map +1 -1
- package/dist/runtime-v2/internalization/evaluator-runner.d.ts +46 -0
- package/dist/runtime-v2/internalization/evaluator-runner.d.ts.map +1 -1
- package/dist/runtime-v2/internalization/evaluator-runner.js +352 -21
- package/dist/runtime-v2/internalization/evaluator-runner.js.map +1 -1
- package/dist/runtime-v2/internalization/index.d.ts +4 -2
- package/dist/runtime-v2/internalization/index.d.ts.map +1 -1
- package/dist/runtime-v2/internalization/index.js +2 -1
- package/dist/runtime-v2/internalization/index.js.map +1 -1
- package/dist/runtime-v2/internalization/intent-contract.d.ts +59 -0
- package/dist/runtime-v2/internalization/intent-contract.d.ts.map +1 -0
- package/dist/runtime-v2/internalization/intent-contract.js +61 -0
- package/dist/runtime-v2/internalization/intent-contract.js.map +1 -0
- package/dist/runtime-v2/internalization/owner-decision-review.d.ts +28 -0
- package/dist/runtime-v2/internalization/owner-decision-review.d.ts.map +1 -1
- package/dist/runtime-v2/internalization/owner-decision-review.js +76 -0
- package/dist/runtime-v2/internalization/owner-decision-review.js.map +1 -1
- package/dist/runtime-v2/internalization/owner-review.d.ts +8 -0
- package/dist/runtime-v2/internalization/owner-review.d.ts.map +1 -1
- package/dist/runtime-v2/internalization/owner-review.js +10 -0
- package/dist/runtime-v2/internalization/owner-review.js.map +1 -1
- package/dist/runtime-v2/internalization/pitask-metadata.d.ts +76 -0
- package/dist/runtime-v2/internalization/pitask-metadata.d.ts.map +1 -1
- package/dist/runtime-v2/internalization/pitask-metadata.js +116 -3
- package/dist/runtime-v2/internalization/pitask-metadata.js.map +1 -1
- package/dist/runtime-v2/internalization/rule-reliability-validation.d.ts +141 -1
- package/dist/runtime-v2/internalization/rule-reliability-validation.d.ts.map +1 -1
- package/dist/runtime-v2/internalization/rule-reliability-validation.js +140 -0
- package/dist/runtime-v2/internalization/rule-reliability-validation.js.map +1 -1
- package/dist/runtime-v2/internalization/scribe-output.d.ts +11 -0
- package/dist/runtime-v2/internalization/scribe-output.d.ts.map +1 -1
- package/dist/runtime-v2/internalization/scribe-output.js +13 -0
- package/dist/runtime-v2/internalization/scribe-output.js.map +1 -1
- package/dist/runtime-v2/internalization/scribe-prompt-builder.d.ts +8 -1
- package/dist/runtime-v2/internalization/scribe-prompt-builder.d.ts.map +1 -1
- package/dist/runtime-v2/internalization/scribe-prompt-builder.js +25 -1
- package/dist/runtime-v2/internalization/scribe-prompt-builder.js.map +1 -1
- package/dist/runtime-v2/recovery-sweep-service.d.ts +9 -0
- package/dist/runtime-v2/recovery-sweep-service.d.ts.map +1 -1
- package/dist/runtime-v2/recovery-sweep-service.js +7 -2
- package/dist/runtime-v2/recovery-sweep-service.js.map +1 -1
- package/dist/runtime-v2/runner/__tests__/base-peer-runner-failure-details.test.js +16 -1
- package/dist/runtime-v2/runner/__tests__/base-peer-runner-failure-details.test.js.map +1 -1
- package/dist/runtime-v2/runner/base-peer-runner.d.ts +9 -1
- package/dist/runtime-v2/runner/base-peer-runner.d.ts.map +1 -1
- package/dist/runtime-v2/runner/base-peer-runner.js +32 -3
- package/dist/runtime-v2/runner/base-peer-runner.js.map +1 -1
- package/package.json +1 -1
|
@@ -0,0 +1,307 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* PR #1551 Round-2 R1/R2 — production-path regression tests
|
|
3
|
+
* (independent-review findings R1/R2, formalized per Owner 指令 2026-09-08).
|
|
4
|
+
*
|
|
5
|
+
* Through REAL production components (RuntimeStateManager + SqlitePIArtifactStore
|
|
6
|
+
* + real EvaluatorRunner with createProductionGateDeps node:vm replay). The only
|
|
7
|
+
* scripted component is the LLM adapter (deterministic failure injection).
|
|
8
|
+
*
|
|
9
|
+
* Scenario 1 (R1 — real defect must reach repair): a v1 rule whose risk-path
|
|
10
|
+
* gate MISSES the /etc/passwd write (combination template, oracle-expected
|
|
11
|
+
* block, actual allow) → the failure is a REAL rule defect → a repair task
|
|
12
|
+
* MUST be seeded; the test_out_of_scope NHR exemption is forbidden.
|
|
13
|
+
*
|
|
14
|
+
* Scenario 2 (R2 — restart-stable disposition): a v1 rule that implements the
|
|
15
|
+
* risk-path gate correctly (block-expecting templates pass) but cannot read
|
|
16
|
+
* context (unavailable/truncated/alias templates, oracle-expected allow, fail)
|
|
17
|
+
* → pure out-of-scope → NHR evaluator_test_out_of_scope. The NHR write is
|
|
18
|
+
* injected to fail once; after a simulated restart the resumed run must:
|
|
19
|
+
* not re-ask the LLM, not seed a repair, re-write the same NHR + reasonCode,
|
|
20
|
+
* and mark the completion intent applied. Same durable facts ⇒ same
|
|
21
|
+
* disposition (the R2 drift breaker).
|
|
22
|
+
*
|
|
23
|
+
* Scenario 3 (fail-closed): replay failures lacking expectedDecision never
|
|
24
|
+
* exempt the rule (they stay in-scope and seed repair).
|
|
25
|
+
*/
|
|
26
|
+
import { describe, it, expect, beforeEach, afterEach } from 'vitest';
|
|
27
|
+
import * as fs from 'node:fs';
|
|
28
|
+
import * as path from 'node:path';
|
|
29
|
+
import * as os from 'node:os';
|
|
30
|
+
import { vi } from 'vitest';
|
|
31
|
+
import { RuntimeStateManager } from '../../store/runtime-state-manager.js';
|
|
32
|
+
import { EvaluatorRunner } from '../evaluator-runner.js';
|
|
33
|
+
import { DefaultEvaluatorValidator } from '../evaluator-output.js';
|
|
34
|
+
import { StoreEventEmitter } from '../../store/event-emitter.js';
|
|
35
|
+
import { SqliteConnection } from '../../store/sqlite-connection.js';
|
|
36
|
+
import { SqlitePIArtifactStore } from '../../store/artifact/sqlite-pi-artifact-store.js';
|
|
37
|
+
import { createPITaskDiagnosticJson, hydratePITaskRecord } from '../pitask-metadata.js';
|
|
38
|
+
import { createProductionGateDeps } from '../../activation/production-gate-deps.js';
|
|
39
|
+
let workspaceDir;
|
|
40
|
+
let stateManager;
|
|
41
|
+
let emitter;
|
|
42
|
+
let emitted;
|
|
43
|
+
let store;
|
|
44
|
+
const SCRIBE_ID = 'scribe-oos';
|
|
45
|
+
const ART1_ID = 'artificer-oos1';
|
|
46
|
+
const EVAL1_ID = 'evaluator-oos1';
|
|
47
|
+
const REPAIR_ID = 'artificer-repair-oos1';
|
|
48
|
+
const SCRIBE_ART = 'pi-art-scribe-oos';
|
|
49
|
+
const GOLDEN_TRACE_CASES = [
|
|
50
|
+
{ caseId: 'neg-1', kind: 'negative', toolName: 'write_file', params: { path: '/etc/passwd' }, expectedDecision: 'block' },
|
|
51
|
+
{ caseId: 'pos-1', kind: 'positive', toolName: 'write_file', params: { path: '/workspace/src/a.ts' }, expectedDecision: 'allow' },
|
|
52
|
+
];
|
|
53
|
+
function flagsOffConfig() {
|
|
54
|
+
return {
|
|
55
|
+
config: {
|
|
56
|
+
version: 1,
|
|
57
|
+
features: {
|
|
58
|
+
artifact_summary_redundancy: { category: 'quiet', enabled: false },
|
|
59
|
+
context_manifest_budget: { category: 'quiet', enabled: false },
|
|
60
|
+
progressive_evaluator: { category: 'quiet', enabled: false },
|
|
61
|
+
},
|
|
62
|
+
runtimeProfiles: {},
|
|
63
|
+
internalAgents: {},
|
|
64
|
+
ui: { diagnostics: { mode: 'simple' } },
|
|
65
|
+
},
|
|
66
|
+
source: 'user_config',
|
|
67
|
+
warnings: [],
|
|
68
|
+
resolvedContextInjection: {
|
|
69
|
+
thinkingOs: false,
|
|
70
|
+
projectFocus: 'off',
|
|
71
|
+
evolutionContext: { enabled: true, maxMessages: 4, maxCharsPerMessage: 200 },
|
|
72
|
+
},
|
|
73
|
+
};
|
|
74
|
+
}
|
|
75
|
+
/**
|
|
76
|
+
* A CORRECT action-only (v1) risk-path gate: blocks /etc/passwd writes
|
|
77
|
+
* wherever they appear, allows everything else. Against the 5 v2 templates:
|
|
78
|
+
* v2-combination (path=/etc/passwd, expected block) → PASSES (blocks)
|
|
79
|
+
* v2-path-boundary (path=<target>.bak, expected block) — target here is
|
|
80
|
+
* the positive case path /workspace/report.md →
|
|
81
|
+
* /workspace/report.md.bak expected block; the rule only
|
|
82
|
+
* blocks /etc/passwd, so this case FAILS for a rule
|
|
83
|
+
* scoped narrowly. NOTE: path-boundary's oracle-expected
|
|
84
|
+
* decision is block — a v1 rule CAN implement generic
|
|
85
|
+
* protected-path matching, so this failure is a REAL
|
|
86
|
+
* (fixable) rule defect and must stay in-scope. To build
|
|
87
|
+
* the PURE out-of-scope scenario we therefore scope the
|
|
88
|
+
* principle/rule to a PROTECTED-SIBLING gate that blocks
|
|
89
|
+
* both /etc/passwd and its .bak-style siblings, keeping
|
|
90
|
+
* every block-expecting template green while the three
|
|
91
|
+
* allow-expecting context templates fail structurally.
|
|
92
|
+
*/
|
|
93
|
+
/**
|
|
94
|
+
* The Episode-001 conservative-v1 shape: the rule hardcodes the risk-path
|
|
95
|
+
* check (action-only, satisfies every block-expecting template) but treats
|
|
96
|
+
* ANY present context as unverifiable and blocks conservatively — so the
|
|
97
|
+
* three allow-expecting context templates fail while both block-expecting
|
|
98
|
+
* templates and both golden cases pass. This is the exact pure-out-of-scope
|
|
99
|
+
* surface (verified against createProductionGateDeps before encoding here).
|
|
100
|
+
*/
|
|
101
|
+
const CORRECT_RISK_GATE = `function evaluate(input, helpers) {
|
|
102
|
+
var p = input.action.paramsSummary && input.action.paramsSummary.path;
|
|
103
|
+
var hasContext = input.context !== undefined && input.context !== null;
|
|
104
|
+
if (hasContext) {
|
|
105
|
+
return { decision: 'block', matched: true, reason: 'context present but reads unverifiable - conservative block' };
|
|
106
|
+
}
|
|
107
|
+
if (typeof p === 'string' && p.indexOf('/etc/passwd') !== -1) {
|
|
108
|
+
return { decision: 'block', matched: true, reason: 'protected path' };
|
|
109
|
+
}
|
|
110
|
+
return { decision: 'allow', matched: false, reason: 'no context, not a protected path' };
|
|
111
|
+
}`;
|
|
112
|
+
/** A rule that MISSES the /etc/passwd gate entirely (R1 real-defect shape). */
|
|
113
|
+
const LEAKY_RISK_GATE = `function evaluate(input, helpers) {
|
|
114
|
+
return { decision: 'allow', matched: false, reason: 'unconditional allow' };
|
|
115
|
+
}`;
|
|
116
|
+
function artificerOutput(implementationCode, taskId) {
|
|
117
|
+
return {
|
|
118
|
+
taskId,
|
|
119
|
+
sourceScribeArtifactId: SCRIBE_ART,
|
|
120
|
+
implementationSummary: 'risk-path gate',
|
|
121
|
+
sourceTrace: { scribeArtifactId: SCRIBE_ART },
|
|
122
|
+
risks: [],
|
|
123
|
+
implementationCode,
|
|
124
|
+
goldenTraceCases: GOLDEN_TRACE_CASES,
|
|
125
|
+
affectedTools: ['write_file'],
|
|
126
|
+
generatedAt: new Date().toISOString(),
|
|
127
|
+
};
|
|
128
|
+
}
|
|
129
|
+
function evaluatorOutput(taskId, artificerArtifactId, decision) {
|
|
130
|
+
return {
|
|
131
|
+
taskId,
|
|
132
|
+
sourceArtificerArtifactId: artificerArtifactId,
|
|
133
|
+
evaluation: {
|
|
134
|
+
decision,
|
|
135
|
+
summary: 'round-2 r1/r2 regression',
|
|
136
|
+
score: decision === 'approved' ? 0.9 : 0.6,
|
|
137
|
+
strengths: [],
|
|
138
|
+
concerns: decision === 'needs_revision' ? ['gate failure'] : [],
|
|
139
|
+
requiredChanges: decision === 'needs_revision' ? ['Fix the gate'] : [],
|
|
140
|
+
},
|
|
141
|
+
sourceTrace: { artificerArtifactId, scribeArtifactId: SCRIBE_ART },
|
|
142
|
+
risks: [],
|
|
143
|
+
generatedAt: new Date().toISOString(),
|
|
144
|
+
};
|
|
145
|
+
}
|
|
146
|
+
/** Scripted LLM adapter that records every prompt it receives. */
|
|
147
|
+
function scriptedAdapter(payload, prompts, runId) {
|
|
148
|
+
return {
|
|
149
|
+
startRun: async (req) => {
|
|
150
|
+
prompts.push(String(req.inputPayload));
|
|
151
|
+
return { runId, runtimeKind: 'test-double', startedAt: new Date().toISOString() };
|
|
152
|
+
},
|
|
153
|
+
pollRun: async () => ({ status: 'succeeded', runId }),
|
|
154
|
+
fetchOutput: async () => ({ runId, payload }),
|
|
155
|
+
cancelRun: async () => undefined,
|
|
156
|
+
};
|
|
157
|
+
}
|
|
158
|
+
function meta(o = {}) {
|
|
159
|
+
return createPITaskDiagnosticJson({
|
|
160
|
+
dependencyTaskIds: [], channel: 'prompt', timeoutMs: 300_000,
|
|
161
|
+
inputArtifactRefs: [], outputArtifactRefs: [], ...o,
|
|
162
|
+
});
|
|
163
|
+
}
|
|
164
|
+
async function mkTask(spec) {
|
|
165
|
+
// Restart semantics reuse durable tasks — an existing id is requeued by the
|
|
166
|
+
// test explicitly (requeueEvaluator); mkTask itself is insert-if-absent.
|
|
167
|
+
const existing = await stateManager.getTask(spec.id);
|
|
168
|
+
if (existing)
|
|
169
|
+
return;
|
|
170
|
+
await stateManager.createTask({
|
|
171
|
+
taskId: spec.id, taskKind: spec.kind, status: 'pending', attemptCount: 0, maxAttempts: 3,
|
|
172
|
+
diagnosticJson: spec.diagnosticJson ?? meta({ dependencyTaskIds: spec.deps }),
|
|
173
|
+
});
|
|
174
|
+
}
|
|
175
|
+
async function succeed(id) {
|
|
176
|
+
await stateManager.acquireLease({ taskId: id, owner: 'oos-test', runtimeKind: 'test-double' });
|
|
177
|
+
await stateManager.markTaskSucceeded(id);
|
|
178
|
+
}
|
|
179
|
+
/**
|
|
180
|
+
* Seed scribe + a REAL artificer run producing the given rule code, then the
|
|
181
|
+
* evaluator task. Returns the artificer artifact id for the evaluator wiring.
|
|
182
|
+
*/
|
|
183
|
+
async function seedChain(ruleCode) {
|
|
184
|
+
await mkTask({ id: SCRIBE_ID, kind: 'scribe', deps: [] });
|
|
185
|
+
await succeed(SCRIBE_ID);
|
|
186
|
+
await store.upsertArtifact({
|
|
187
|
+
artifactId: SCRIBE_ART, artifactKind: 'principle', sourceTaskId: SCRIBE_ID,
|
|
188
|
+
lineageArtifactIds: [], validationStatus: 'pending',
|
|
189
|
+
contentJson: JSON.stringify({
|
|
190
|
+
principleId: 'protected-path-gate',
|
|
191
|
+
principleDraft: { statement: 'Block writes to protected paths and their sibling backups.' },
|
|
192
|
+
}),
|
|
193
|
+
createdAt: new Date().toISOString(), updatedAt: new Date().toISOString(),
|
|
194
|
+
});
|
|
195
|
+
await mkTask({ id: ART1_ID, kind: 'artificer', deps: [SCRIBE_ID] });
|
|
196
|
+
const { ArtificerRunner } = await import('../artificer-runner.js');
|
|
197
|
+
const { DefaultArtificerValidator } = await import('../artificer-output.js');
|
|
198
|
+
const artRunner = new ArtificerRunner({
|
|
199
|
+
stateManager,
|
|
200
|
+
runtimeAdapter: scriptedAdapter(artificerOutput(ruleCode, ART1_ID), [], 'art-oos'),
|
|
201
|
+
eventEmitter: emitter, artifactStore: store, validator: new DefaultArtificerValidator(),
|
|
202
|
+
}, { owner: 'oos-test', runtimeKind: 'test-double', pollIntervalMs: 5, timeoutMs: 5000 });
|
|
203
|
+
const artResult = await artRunner.run(ART1_ID);
|
|
204
|
+
if (artResult.status !== 'succeeded')
|
|
205
|
+
throw new Error(`artificer run failed: ${JSON.stringify(artResult).slice(0, 300)}`);
|
|
206
|
+
const art = (await store.listBySourceTaskId(ART1_ID)).find((a) => a.artifactKind === 'principle');
|
|
207
|
+
if (!art)
|
|
208
|
+
throw new Error('missing artificer artifact');
|
|
209
|
+
await mkTask({ id: EVAL1_ID, kind: 'evaluator', deps: [ART1_ID] });
|
|
210
|
+
return art.artifactId;
|
|
211
|
+
}
|
|
212
|
+
function reviewEvaluator(artId, decision, seeds, prompts) {
|
|
213
|
+
return new EvaluatorRunner({
|
|
214
|
+
stateManager,
|
|
215
|
+
runtimeAdapter: scriptedAdapter(evaluatorOutput(EVAL1_ID, artId, decision), prompts, 'eval-oos'),
|
|
216
|
+
eventEmitter: emitter, artifactStore: store, validator: new DefaultEvaluatorValidator(),
|
|
217
|
+
isRepairLoopEnabled: () => true,
|
|
218
|
+
seedArtificerRepairTask: async (params) => {
|
|
219
|
+
seeds.push(params.repairPayload.requiredChanges.join(';'));
|
|
220
|
+
await mkTask({
|
|
221
|
+
id: REPAIR_ID, kind: 'artificer', deps: params.inheritedDependencyTaskIds,
|
|
222
|
+
diagnosticJson: meta({ dependencyTaskIds: params.inheritedDependencyTaskIds, repairPayload: params.repairPayload }),
|
|
223
|
+
});
|
|
224
|
+
return REPAIR_ID;
|
|
225
|
+
},
|
|
226
|
+
}, {
|
|
227
|
+
owner: 'oos-test', runtimeKind: 'test-double', pollIntervalMs: 5, timeoutMs: 5000,
|
|
228
|
+
gateDeps: createProductionGateDeps(), effectiveConfig: flagsOffConfig(),
|
|
229
|
+
});
|
|
230
|
+
}
|
|
231
|
+
/** Reset the evaluator task to pending (simulated restart / lease-expiry recovery). */
|
|
232
|
+
async function requeueEvaluator() {
|
|
233
|
+
await stateManager.updateTask(EVAL1_ID, { status: 'pending', leaseOwner: null, leaseExpiresAt: null });
|
|
234
|
+
}
|
|
235
|
+
beforeEach(async () => {
|
|
236
|
+
workspaceDir = fs.mkdtempSync(path.join(os.tmpdir(), 'pd-r1r2-regression-'));
|
|
237
|
+
stateManager = new RuntimeStateManager({ workspaceDir });
|
|
238
|
+
await stateManager.initialize();
|
|
239
|
+
emitter = new StoreEventEmitter();
|
|
240
|
+
emitted = [];
|
|
241
|
+
emitter.onTelemetry((event) => {
|
|
242
|
+
emitted.push({ eventType: event.eventType, payload: event.payload });
|
|
243
|
+
});
|
|
244
|
+
store = new SqlitePIArtifactStore(new SqliteConnection(workspaceDir));
|
|
245
|
+
});
|
|
246
|
+
afterEach(async () => {
|
|
247
|
+
await stateManager.close();
|
|
248
|
+
try {
|
|
249
|
+
fs.rmSync(workspaceDir, { recursive: true, force: true });
|
|
250
|
+
}
|
|
251
|
+
catch { /* temp */ }
|
|
252
|
+
});
|
|
253
|
+
describe('Round-2 R1/R2 — out-of-scope attribution and restart-stable governance (production path)', () => {
|
|
254
|
+
it('R1: a rule that MISSES an explicit block requirement must reach the repair loop (no out-of-scope exemption)', async () => {
|
|
255
|
+
const artId = await seedChain(LEAKY_RISK_GATE);
|
|
256
|
+
const seeds = [];
|
|
257
|
+
const prompts = [];
|
|
258
|
+
const result = await reviewEvaluator(artId, 'needs_revision', seeds, prompts).run(EVAL1_ID);
|
|
259
|
+
// The replay surface: v2-combination (/etc/passwd, oracle block) fails with
|
|
260
|
+
// actual allow — a REAL rule defect. Repair MUST be seeded; NHR forbidden.
|
|
261
|
+
expect(seeds.length).toBeGreaterThanOrEqual(1);
|
|
262
|
+
const task = await stateManager.getTask(EVAL1_ID);
|
|
263
|
+
expect(task?.status).not.toBe('needs_human_review');
|
|
264
|
+
const outOfScopeEvents = emitted.filter((e) => e.eventType === 'repair_loop_test_out_of_scope');
|
|
265
|
+
expect(outOfScopeEvents).toHaveLength(0);
|
|
266
|
+
expect(result.status).toBe('succeeded');
|
|
267
|
+
});
|
|
268
|
+
it('R2: the out-of-scope NHR disposition persists in the completion intent and survives an NHR write failure + restart (no LLM re-ask, no repair seed, no routing drift)', async () => {
|
|
269
|
+
const artId = await seedChain(CORRECT_RISK_GATE);
|
|
270
|
+
const seeds = [];
|
|
271
|
+
const prompts = [];
|
|
272
|
+
// Run 1: derive → record (selectedEffect persisted) → effects route
|
|
273
|
+
// pure-out-of-scope → NHR write INJECTED to fail. The chosen disposition
|
|
274
|
+
// must still be durable (intent carries it — the R2 carrier).
|
|
275
|
+
const original = stateManager.updateTask.bind(stateManager);
|
|
276
|
+
let injected = false;
|
|
277
|
+
const spy = vi.spyOn(stateManager, 'updateTask').mockImplementation(async (id, patch) => {
|
|
278
|
+
if (id === EVAL1_ID && patch.status === 'needs_human_review' && !injected) {
|
|
279
|
+
injected = true;
|
|
280
|
+
throw new Error('injected NHR persistence failure');
|
|
281
|
+
}
|
|
282
|
+
return original(id, patch);
|
|
283
|
+
});
|
|
284
|
+
await reviewEvaluator(artId, 'needs_revision', seeds, prompts).run(EVAL1_ID);
|
|
285
|
+
expect(injected).toBe(true);
|
|
286
|
+
expect(seeds).toHaveLength(0);
|
|
287
|
+
const afterFailure = await stateManager.getTask(EVAL1_ID);
|
|
288
|
+
expect(afterFailure?.status).not.toBe('succeeded');
|
|
289
|
+
const piAfter = afterFailure ? hydratePITaskRecord(afterFailure) : null;
|
|
290
|
+
expect(piAfter?.completionIntent?.effect).toBe('needs_human_review');
|
|
291
|
+
expect(piAfter?.completionIntent?.effectReasonCode).toBe('evaluator_test_out_of_scope');
|
|
292
|
+
spy.mockRestore();
|
|
293
|
+
// ── Simulated restart: task requeued, fresh runner instance resumes ──
|
|
294
|
+
await requeueEvaluator();
|
|
295
|
+
await reviewEvaluator(artId, 'needs_revision', seeds, prompts).run(EVAL1_ID);
|
|
296
|
+
// Same durable facts ⇒ same disposition: NHR restored with the SAME
|
|
297
|
+
// reasonCode, no LLM re-ask, no repair seeded, intent finally applied.
|
|
298
|
+
const task = await stateManager.getTask(EVAL1_ID);
|
|
299
|
+
const pi = task ? hydratePITaskRecord(task) : null;
|
|
300
|
+
expect(task?.status).toBe('needs_human_review');
|
|
301
|
+
expect(pi?.humanReviewContext?.reasonCode).toBe('evaluator_test_out_of_scope');
|
|
302
|
+
expect(seeds).toHaveLength(0);
|
|
303
|
+
expect(prompts).toHaveLength(1);
|
|
304
|
+
expect(pi?.completionIntent?.status).toBe('applied');
|
|
305
|
+
});
|
|
306
|
+
});
|
|
307
|
+
//# sourceMappingURL=evaluator-out-of-scope-governance.test.js.map
|
package/dist/runtime-v2/internalization/__tests__/evaluator-out-of-scope-governance.test.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"evaluator-out-of-scope-governance.test.js","sourceRoot":"","sources":["../../../../src/runtime-v2/internalization/__tests__/evaluator-out-of-scope-governance.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -54,8 +54,8 @@ describe('EvaluatorPromptBuilder', () => {
|
|
|
54
54
|
const { promptInput } = builder.buildPrompt(input);
|
|
55
55
|
expect(promptInput.promptContractVersion).toBe(EVALUATOR_PROMPT_CONTRACT_VERSION);
|
|
56
56
|
});
|
|
57
|
-
it('promptContractVersion value is evaluator-output-v1.prompt.
|
|
58
|
-
expect(EVALUATOR_PROMPT_CONTRACT_VERSION).toBe('evaluator-output-v1.prompt.
|
|
57
|
+
it('promptContractVersion value is evaluator-output-v1.prompt.v4 (PRI-703 intent-contract anchor)', () => {
|
|
58
|
+
expect(EVALUATOR_PROMPT_CONTRACT_VERSION).toBe('evaluator-output-v1.prompt.v4');
|
|
59
59
|
});
|
|
60
60
|
it('score instruction says number not string/percentage', () => {
|
|
61
61
|
expect(EVALUATOR_PROTOCOL_INSTRUCTION).toContain('NOT a string, NOT a percentage');
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"evaluator-prompt-builder.test.js","sourceRoot":"","sources":["../../../../src/runtime-v2/internalization/__tests__/evaluator-prompt-builder.test.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"evaluator-prompt-builder.test.js","sourceRoot":"","sources":["../../../../src/runtime-v2/internalization/__tests__/evaluator-prompt-builder.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* PRI-703 / PRI-705 / PRI-700 — Evolution Alignment contract tests
|
|
3
|
+
* (Owner decision 2026-09-07, task §8 test requirements).
|
|
4
|
+
*
|
|
5
|
+
* Covers the four required test classes:
|
|
6
|
+
* 1. Intent Consistency — the intent contract flows scribe → prompt → rule
|
|
7
|
+
* artifact without mutation (same principle ⇒ same contract).
|
|
8
|
+
* 2. Failure Attribution — partitionV2OutOfScopeFailures classifies
|
|
9
|
+
* rule-error / test-error / infra scenarios correctly (v2×v1 out-of-scope
|
|
10
|
+
* is the Episode-001 PRI-700 shape).
|
|
11
|
+
* 3. Repair feedback circuit — priorValidatorErrors reaches the artificer
|
|
12
|
+
* prompt (PRI-700 factor B) and the case-id vocabulary note is present
|
|
13
|
+
* (factor C).
|
|
14
|
+
* 4. Scribe contract validation — intentContract present-but-malformed is
|
|
15
|
+
* a hard rejection; absent stays valid (backward compatibility).
|
|
16
|
+
*/
|
|
17
|
+
export {};
|
|
18
|
+
//# sourceMappingURL=evolution-alignment-contract.test.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"evolution-alignment-contract.test.d.ts","sourceRoot":"","sources":["../../../../src/runtime-v2/internalization/__tests__/evolution-alignment-contract.test.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG"}
|