@principles/core 1.151.0 → 1.153.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/runtime-v2/__tests__/adversarial-loop.test.d.ts +2 -0
- package/dist/runtime-v2/__tests__/adversarial-loop.test.d.ts.map +1 -0
- package/dist/runtime-v2/__tests__/adversarial-loop.test.js +435 -0
- package/dist/runtime-v2/__tests__/adversarial-loop.test.js.map +1 -0
- package/dist/runtime-v2/__tests__/architecture-regression.test.js +5 -0
- package/dist/runtime-v2/__tests__/architecture-regression.test.js.map +1 -1
- package/dist/runtime-v2/__tests__/build-golden-trace-from-artificer.test.d.ts +2 -0
- package/dist/runtime-v2/__tests__/build-golden-trace-from-artificer.test.d.ts.map +1 -0
- package/dist/runtime-v2/__tests__/build-golden-trace-from-artificer.test.js +169 -0
- package/dist/runtime-v2/__tests__/build-golden-trace-from-artificer.test.js.map +1 -0
- package/dist/runtime-v2/__tests__/evaluator-runner-vslice-v2.test.d.ts +2 -0
- package/dist/runtime-v2/__tests__/evaluator-runner-vslice-v2.test.d.ts.map +1 -0
- package/dist/runtime-v2/__tests__/evaluator-runner-vslice-v2.test.js +815 -0
- package/dist/runtime-v2/__tests__/evaluator-runner-vslice-v2.test.js.map +1 -0
- package/dist/runtime-v2/__tests__/internalization-peer-runner-contracts.test.js +6 -0
- package/dist/runtime-v2/__tests__/internalization-peer-runner-contracts.test.js.map +1 -1
- package/dist/runtime-v2/__tests__/pitask-metadata.test.js +4 -0
- package/dist/runtime-v2/__tests__/pitask-metadata.test.js.map +1 -1
- package/dist/runtime-v2/adapter/__tests__/artificer-l2-adapter.test.d.ts +2 -0
- package/dist/runtime-v2/adapter/__tests__/artificer-l2-adapter.test.d.ts.map +1 -0
- package/dist/runtime-v2/adapter/__tests__/artificer-l2-adapter.test.js +510 -0
- package/dist/runtime-v2/adapter/__tests__/artificer-l2-adapter.test.js.map +1 -0
- package/dist/runtime-v2/adapter/artificer-l2-adapter.d.ts +47 -0
- package/dist/runtime-v2/adapter/artificer-l2-adapter.d.ts.map +1 -0
- package/dist/runtime-v2/adapter/artificer-l2-adapter.js +307 -0
- package/dist/runtime-v2/adapter/artificer-l2-adapter.js.map +1 -0
- package/dist/runtime-v2/adversarial-loop.d.ts +65 -0
- package/dist/runtime-v2/adversarial-loop.d.ts.map +1 -0
- package/dist/runtime-v2/adversarial-loop.js +203 -0
- package/dist/runtime-v2/adversarial-loop.js.map +1 -0
- package/dist/runtime-v2/golden-trace.d.ts +30 -0
- package/dist/runtime-v2/golden-trace.d.ts.map +1 -1
- package/dist/runtime-v2/golden-trace.js +57 -0
- package/dist/runtime-v2/golden-trace.js.map +1 -1
- package/dist/runtime-v2/index.d.ts +10 -6
- package/dist/runtime-v2/index.d.ts.map +1 -1
- package/dist/runtime-v2/index.js +7 -3
- package/dist/runtime-v2/index.js.map +1 -1
- package/dist/runtime-v2/internalization/__tests__/adversarial-case.test.d.ts +2 -0
- package/dist/runtime-v2/internalization/__tests__/adversarial-case.test.d.ts.map +1 -0
- package/dist/runtime-v2/internalization/__tests__/adversarial-case.test.js +139 -0
- package/dist/runtime-v2/internalization/__tests__/adversarial-case.test.js.map +1 -0
- package/dist/runtime-v2/internalization/__tests__/adversarial-feedback.test.d.ts +2 -0
- package/dist/runtime-v2/internalization/__tests__/adversarial-feedback.test.d.ts.map +1 -0
- package/dist/runtime-v2/internalization/__tests__/adversarial-feedback.test.js +62 -0
- package/dist/runtime-v2/internalization/__tests__/adversarial-feedback.test.js.map +1 -0
- package/dist/runtime-v2/internalization/__tests__/artificer-output-v2.test.d.ts +2 -0
- package/dist/runtime-v2/internalization/__tests__/artificer-output-v2.test.d.ts.map +1 -0
- package/dist/runtime-v2/internalization/__tests__/artificer-output-v2.test.js +249 -0
- package/dist/runtime-v2/internalization/__tests__/artificer-output-v2.test.js.map +1 -0
- package/dist/runtime-v2/internalization/__tests__/artificer-prompt-builder-v2.test.d.ts +2 -0
- package/dist/runtime-v2/internalization/__tests__/artificer-prompt-builder-v2.test.d.ts.map +1 -0
- package/dist/runtime-v2/internalization/__tests__/artificer-prompt-builder-v2.test.js +24 -0
- package/dist/runtime-v2/internalization/__tests__/artificer-prompt-builder-v2.test.js.map +1 -0
- package/dist/runtime-v2/internalization/__tests__/artificer-prompt-builder.test.js +2 -2
- package/dist/runtime-v2/internalization/__tests__/artificer-prompt-builder.test.js.map +1 -1
- package/dist/runtime-v2/internalization/__tests__/evaluator-output-v2.test.d.ts +2 -0
- package/dist/runtime-v2/internalization/__tests__/evaluator-output-v2.test.d.ts.map +1 -0
- package/dist/runtime-v2/internalization/__tests__/evaluator-output-v2.test.js +209 -0
- package/dist/runtime-v2/internalization/__tests__/evaluator-output-v2.test.js.map +1 -0
- package/dist/runtime-v2/internalization/__tests__/evaluator-prompt-builder-v2.test.d.ts +2 -0
- package/dist/runtime-v2/internalization/__tests__/evaluator-prompt-builder-v2.test.d.ts.map +1 -0
- package/dist/runtime-v2/internalization/__tests__/evaluator-prompt-builder-v2.test.js +125 -0
- package/dist/runtime-v2/internalization/__tests__/evaluator-prompt-builder-v2.test.js.map +1 -0
- package/dist/runtime-v2/internalization/adversarial-case.d.ts +32 -0
- package/dist/runtime-v2/internalization/adversarial-case.d.ts.map +1 -0
- package/dist/runtime-v2/internalization/adversarial-case.js +68 -0
- package/dist/runtime-v2/internalization/adversarial-case.js.map +1 -0
- package/dist/runtime-v2/internalization/adversarial-feedback.d.ts +23 -0
- package/dist/runtime-v2/internalization/adversarial-feedback.d.ts.map +1 -0
- package/dist/runtime-v2/internalization/adversarial-feedback.js +20 -0
- package/dist/runtime-v2/internalization/adversarial-feedback.js.map +1 -0
- package/dist/runtime-v2/internalization/artificer-output.d.ts +42 -0
- package/dist/runtime-v2/internalization/artificer-output.d.ts.map +1 -1
- package/dist/runtime-v2/internalization/artificer-output.js +147 -0
- package/dist/runtime-v2/internalization/artificer-output.js.map +1 -1
- package/dist/runtime-v2/internalization/artificer-prompt-builder.d.ts +10 -2
- package/dist/runtime-v2/internalization/artificer-prompt-builder.d.ts.map +1 -1
- package/dist/runtime-v2/internalization/artificer-prompt-builder.js +26 -3
- package/dist/runtime-v2/internalization/artificer-prompt-builder.js.map +1 -1
- package/dist/runtime-v2/internalization/artificer-runner.d.ts +7 -0
- package/dist/runtime-v2/internalization/artificer-runner.d.ts.map +1 -1
- package/dist/runtime-v2/internalization/artificer-runner.js +11 -2
- package/dist/runtime-v2/internalization/artificer-runner.js.map +1 -1
- package/dist/runtime-v2/internalization/evaluator-output.d.ts +63 -0
- package/dist/runtime-v2/internalization/evaluator-output.d.ts.map +1 -1
- package/dist/runtime-v2/internalization/evaluator-output.js +158 -0
- package/dist/runtime-v2/internalization/evaluator-output.js.map +1 -1
- package/dist/runtime-v2/internalization/evaluator-prompt-builder.d.ts +8 -1
- package/dist/runtime-v2/internalization/evaluator-prompt-builder.d.ts.map +1 -1
- package/dist/runtime-v2/internalization/evaluator-prompt-builder.js +16 -3
- package/dist/runtime-v2/internalization/evaluator-prompt-builder.js.map +1 -1
- package/dist/runtime-v2/internalization/evaluator-runner.d.ts +82 -2
- package/dist/runtime-v2/internalization/evaluator-runner.d.ts.map +1 -1
- package/dist/runtime-v2/internalization/evaluator-runner.js +496 -4
- package/dist/runtime-v2/internalization/evaluator-runner.js.map +1 -1
- package/dist/runtime-v2/internalization/index.d.ts +9 -4
- package/dist/runtime-v2/internalization/index.d.ts.map +1 -1
- package/dist/runtime-v2/internalization/index.js +6 -2
- package/dist/runtime-v2/internalization/index.js.map +1 -1
- package/dist/runtime-v2/internalization/peer-runner-contracts.d.ts +2 -0
- package/dist/runtime-v2/internalization/peer-runner-contracts.d.ts.map +1 -1
- package/dist/runtime-v2/internalization/peer-runner-contracts.js +19 -9
- package/dist/runtime-v2/internalization/peer-runner-contracts.js.map +1 -1
- package/dist/runtime-v2/internalization/pitask-metadata.d.ts +7 -0
- package/dist/runtime-v2/internalization/pitask-metadata.d.ts.map +1 -1
- package/dist/runtime-v2/internalization/pitask-metadata.js +15 -5
- package/dist/runtime-v2/internalization/pitask-metadata.js.map +1 -1
- package/dist/runtime-v2/internalization/prompt-serializer.d.ts +3 -0
- package/dist/runtime-v2/internalization/prompt-serializer.d.ts.map +1 -0
- package/dist/runtime-v2/internalization/prompt-serializer.js +22 -0
- package/dist/runtime-v2/internalization/prompt-serializer.js.map +1 -0
- package/dist/telemetry-event.d.ts +2 -2
- package/dist/telemetry-event.d.ts.map +1 -1
- package/dist/telemetry-event.js +21 -0
- package/dist/telemetry-event.js.map +1 -1
- package/package.json +1 -1
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"adversarial-feedback.test.js","sourceRoot":"","sources":["../../../../src/runtime-v2/internalization/__tests__/adversarial-feedback.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"artificer-output-v2.test.d.ts","sourceRoot":"","sources":["../../../../src/runtime-v2/internalization/__tests__/artificer-output-v2.test.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,249 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* ArtificerOutputV2 validator tests (RuleHost MVP Activation, ADR-0014 Amendment 2026-06-17).
|
|
3
|
+
*
|
|
4
|
+
* TDD Phase 1.1 RED — these tests assert V2 schema behavior that is NOT yet
|
|
5
|
+
* implemented in `artificer-output.ts`. They will fail until the V2 schema +
|
|
6
|
+
* validator are added.
|
|
7
|
+
*
|
|
8
|
+
* Coverage (PRD test module 1):
|
|
9
|
+
* - V2 field completeness (implementationCode non-empty, goldenTraceCases
|
|
10
|
+
* ≥2 with 1 positive + 1 negative, affectedTools non-empty)
|
|
11
|
+
* - V1 backward compatibility (output without code fields still validates)
|
|
12
|
+
* - Boundary: empty implementationCode, only 1 case, >10 cases, empty
|
|
13
|
+
* affectedTools, case missing required fields, wrong expectedDecision
|
|
14
|
+
* for positive case
|
|
15
|
+
*
|
|
16
|
+
* ERR checklist (EP-01 Trust Boundary):
|
|
17
|
+
* - ERR-001 / ERR-005: validator accepts `unknown`, never `as`-casts; every
|
|
18
|
+
* field is checked with `typeof` / `Array.isArray` / element-wise guard.
|
|
19
|
+
* - ERR-013: uses `Object.hasOwn()`, not `in`, for untrusted keys.
|
|
20
|
+
* - ERR-009 / ERR-010: required V2 fields fail loud when missing/malformed.
|
|
21
|
+
* - ERR-007: goldenTraceCases array elements validated individually.
|
|
22
|
+
*/
|
|
23
|
+
import { describe, it, expect } from 'vitest';
|
|
24
|
+
import { DefaultArtificerValidator } from '../artificer-output.js';
|
|
25
|
+
const ARTIFICER_TASK_ID = 'task-artificer-001';
|
|
26
|
+
const SCRIBE_ARTIFACT_ID = 'pi-art-scribe-001-run-001';
|
|
27
|
+
/**
|
|
28
|
+
* Minimal valid V1 artificer output. V2 extends this with code fields.
|
|
29
|
+
* Mirrors the factory in artificer-runner-vslice.test.ts so V1 baseline
|
|
30
|
+
* behavior is exercised identically.
|
|
31
|
+
*/
|
|
32
|
+
function makeV1Output() {
|
|
33
|
+
return {
|
|
34
|
+
taskId: ARTIFICER_TASK_ID,
|
|
35
|
+
sourceScribeArtifactId: SCRIBE_ARTIFACT_ID,
|
|
36
|
+
implementationPlan: {
|
|
37
|
+
summary: 'Block writes to system directories',
|
|
38
|
+
targetSurface: 'edit tool gate',
|
|
39
|
+
changes: ['add path-prefix check'],
|
|
40
|
+
tests: ['golden trace replay passes'],
|
|
41
|
+
rolloutNotes: ['shadow mode first'],
|
|
42
|
+
confidence: 0.8,
|
|
43
|
+
},
|
|
44
|
+
sourceTrace: { scribeArtifactId: SCRIBE_ARTIFACT_ID },
|
|
45
|
+
risks: ['false positive on symlinked paths'],
|
|
46
|
+
generatedAt: '2026-06-17T00:00:00.000Z',
|
|
47
|
+
};
|
|
48
|
+
}
|
|
49
|
+
/** Minimal valid V2 output: V1 + code fields with 1 positive + 1 negative case. */
|
|
50
|
+
function makeV2Output() {
|
|
51
|
+
return {
|
|
52
|
+
...makeV1Output(),
|
|
53
|
+
implementationCode: 'function evaluate(input, helpers) { return helpers.getToolName(input) === "edit" ? { decision: "block", matched: true, reason: "x" } : { decision: "allow", matched: false, reason: "x" }; }',
|
|
54
|
+
goldenTraceCases: [
|
|
55
|
+
{
|
|
56
|
+
caseId: 'negative-1',
|
|
57
|
+
kind: 'negative',
|
|
58
|
+
toolName: 'edit',
|
|
59
|
+
params: { path: '/etc/passwd' },
|
|
60
|
+
expectedDecision: 'block',
|
|
61
|
+
},
|
|
62
|
+
{
|
|
63
|
+
caseId: 'positive-1',
|
|
64
|
+
kind: 'positive',
|
|
65
|
+
toolName: 'read',
|
|
66
|
+
params: { path: '/etc/passwd' },
|
|
67
|
+
expectedDecision: 'allow',
|
|
68
|
+
},
|
|
69
|
+
],
|
|
70
|
+
affectedTools: ['edit'],
|
|
71
|
+
};
|
|
72
|
+
}
|
|
73
|
+
/**
|
|
74
|
+
* Produce a mutable shallow copy as an untrusted record. Tests mutate fields
|
|
75
|
+
* to exercise validator rejection paths; the validator itself receives these
|
|
76
|
+
* as `unknown` and never `as`-casts (Runtime Contract Rule 1/2, ERR-001).
|
|
77
|
+
* Using a typed mutable clone keeps test code readable without weakening
|
|
78
|
+
* the readonly contract on the production interface.
|
|
79
|
+
*/
|
|
80
|
+
function mutable(output) {
|
|
81
|
+
return { ...output, ...output };
|
|
82
|
+
}
|
|
83
|
+
describe('DefaultArtificerValidator — V2 (RuleHost MVP Activation)', () => {
|
|
84
|
+
const validator = new DefaultArtificerValidator();
|
|
85
|
+
// ── V1 backward compatibility ────────────────────────────────────────────
|
|
86
|
+
it('accepts V1 output (no code fields) for backward compatibility', async () => {
|
|
87
|
+
const result = await validator.validate(makeV1Output(), ARTIFICER_TASK_ID);
|
|
88
|
+
expect(result.valid).toBe(true);
|
|
89
|
+
expect(result.errors).toEqual([]);
|
|
90
|
+
});
|
|
91
|
+
// ── V2 happy path ─────────────────────────────────────────────────────────
|
|
92
|
+
it('accepts valid V2 output with code fields', async () => {
|
|
93
|
+
const result = await validator.validate(makeV2Output(), ARTIFICER_TASK_ID);
|
|
94
|
+
expect(result.valid).toBe(true);
|
|
95
|
+
expect(result.errors).toEqual([]);
|
|
96
|
+
});
|
|
97
|
+
// ── implementationCode ────────────────────────────────────────────────────
|
|
98
|
+
it('rejects V2 output with empty implementationCode', async () => {
|
|
99
|
+
const output = mutable(makeV2Output());
|
|
100
|
+
output.implementationCode = ' ';
|
|
101
|
+
const result = await validator.validate(output, ARTIFICER_TASK_ID);
|
|
102
|
+
expect(result.valid).toBe(false);
|
|
103
|
+
expect(result.errors.some((e) => e.includes('implementationCode'))).toBe(true);
|
|
104
|
+
});
|
|
105
|
+
it('rejects V2 output with non-string implementationCode', async () => {
|
|
106
|
+
const output = mutable(makeV2Output());
|
|
107
|
+
output.implementationCode = 42;
|
|
108
|
+
const result = await validator.validate(output, ARTIFICER_TASK_ID);
|
|
109
|
+
expect(result.valid).toBe(false);
|
|
110
|
+
expect(result.errors.some((e) => e.includes('implementationCode'))).toBe(true);
|
|
111
|
+
});
|
|
112
|
+
it('rejects propose_correction without expectedApplicationMode', async () => {
|
|
113
|
+
const output = mutable(makeV2Output());
|
|
114
|
+
const cases = Array.isArray(output.goldenTraceCases) ? output.goldenTraceCases : [];
|
|
115
|
+
const [first, ...remainingCases] = cases;
|
|
116
|
+
if (typeof first !== 'object' || first === null || Array.isArray(first))
|
|
117
|
+
throw new Error('invalid fixture');
|
|
118
|
+
output.goldenTraceCases = [{
|
|
119
|
+
...first,
|
|
120
|
+
expectedDecision: 'propose_correction',
|
|
121
|
+
expectedProposedParams: { path: '/safe/path' },
|
|
122
|
+
}, ...remainingCases];
|
|
123
|
+
const result = await validator.validate(output, ARTIFICER_TASK_ID);
|
|
124
|
+
expect(result.valid).toBe(false);
|
|
125
|
+
expect(result.errors.some((e) => e.toLowerCase().includes('expectedapplicationmode'))).toBe(true);
|
|
126
|
+
});
|
|
127
|
+
// ── goldenTraceCases ──────────────────────────────────────────────────────
|
|
128
|
+
it('rejects V2 output with fewer than 2 goldenTraceCases', async () => {
|
|
129
|
+
const output = mutable(makeV2Output());
|
|
130
|
+
const cases = output.goldenTraceCases;
|
|
131
|
+
output.goldenTraceCases = [cases[0]];
|
|
132
|
+
const result = await validator.validate(output, ARTIFICER_TASK_ID);
|
|
133
|
+
expect(result.valid).toBe(false);
|
|
134
|
+
expect(result.errors.some((e) => e.toLowerCase().includes('goldentrace'))).toBe(true);
|
|
135
|
+
});
|
|
136
|
+
it('rejects V2 output with more than 10 goldenTraceCases', async () => {
|
|
137
|
+
const output = mutable(makeV2Output());
|
|
138
|
+
const base = output.goldenTraceCases[0];
|
|
139
|
+
output.goldenTraceCases = Array.from({ length: 11 }, (_, i) => ({
|
|
140
|
+
...base,
|
|
141
|
+
caseId: `case-${i}`,
|
|
142
|
+
}));
|
|
143
|
+
const result = await validator.validate(output, ARTIFICER_TASK_ID);
|
|
144
|
+
expect(result.valid).toBe(false);
|
|
145
|
+
expect(result.errors.some((e) => e.toLowerCase().includes('goldentrace'))).toBe(true);
|
|
146
|
+
});
|
|
147
|
+
it('rejects V2 output with no positive case', async () => {
|
|
148
|
+
const output = mutable(makeV2Output());
|
|
149
|
+
output.goldenTraceCases = [
|
|
150
|
+
{ caseId: 'n1', kind: 'negative', toolName: 'edit', params: {}, expectedDecision: 'block' },
|
|
151
|
+
{ caseId: 'n2', kind: 'negative', toolName: 'edit', params: {}, expectedDecision: 'block' },
|
|
152
|
+
];
|
|
153
|
+
const result = await validator.validate(output, ARTIFICER_TASK_ID);
|
|
154
|
+
expect(result.valid).toBe(false);
|
|
155
|
+
expect(result.errors.some((e) => e.toLowerCase().includes('positive'))).toBe(true);
|
|
156
|
+
});
|
|
157
|
+
it('rejects V2 output with no negative case', async () => {
|
|
158
|
+
const output = mutable(makeV2Output());
|
|
159
|
+
output.goldenTraceCases = [
|
|
160
|
+
{ caseId: 'p1', kind: 'positive', toolName: 'read', params: {}, expectedDecision: 'allow' },
|
|
161
|
+
{ caseId: 'p2', kind: 'positive', toolName: 'read', params: {}, expectedDecision: 'allow' },
|
|
162
|
+
];
|
|
163
|
+
const result = await validator.validate(output, ARTIFICER_TASK_ID);
|
|
164
|
+
expect(result.valid).toBe(false);
|
|
165
|
+
expect(result.errors.some((e) => e.toLowerCase().includes('negative'))).toBe(true);
|
|
166
|
+
});
|
|
167
|
+
it('rejects positive case with expectedDecision other than allow', async () => {
|
|
168
|
+
const output = mutable(makeV2Output());
|
|
169
|
+
output.goldenTraceCases = output.goldenTraceCases.map((c) => {
|
|
170
|
+
const rec = c;
|
|
171
|
+
return rec.kind === 'positive' ? { ...rec, expectedDecision: 'block' } : rec;
|
|
172
|
+
});
|
|
173
|
+
const result = await validator.validate(output, ARTIFICER_TASK_ID);
|
|
174
|
+
expect(result.valid).toBe(false);
|
|
175
|
+
});
|
|
176
|
+
it('rejects goldenTraceCase with invalid expectedDecision enum', async () => {
|
|
177
|
+
const output = mutable(makeV2Output());
|
|
178
|
+
const cases = output.goldenTraceCases;
|
|
179
|
+
cases[0].expectedDecision = 'requireApproval';
|
|
180
|
+
const result = await validator.validate(output, ARTIFICER_TASK_ID);
|
|
181
|
+
expect(result.valid).toBe(false);
|
|
182
|
+
expect(result.errors.some((e) => e.toLowerCase().includes('expecteddecision'))).toBe(true);
|
|
183
|
+
});
|
|
184
|
+
it('rejects goldenTraceCase missing required caseId', async () => {
|
|
185
|
+
const output = mutable(makeV2Output());
|
|
186
|
+
const cases = output.goldenTraceCases;
|
|
187
|
+
delete cases[0].caseId;
|
|
188
|
+
const result = await validator.validate(output, ARTIFICER_TASK_ID);
|
|
189
|
+
expect(result.valid).toBe(false);
|
|
190
|
+
expect(result.errors.some((e) => e.toLowerCase().includes('caseid'))).toBe(true);
|
|
191
|
+
});
|
|
192
|
+
it('rejects goldenTraceCases that is not an array', async () => {
|
|
193
|
+
const output = mutable(makeV2Output());
|
|
194
|
+
output.goldenTraceCases = 'not-an-array';
|
|
195
|
+
const result = await validator.validate(output, ARTIFICER_TASK_ID);
|
|
196
|
+
expect(result.valid).toBe(false);
|
|
197
|
+
expect(result.errors.some((e) => e.toLowerCase().includes('goldentrace'))).toBe(true);
|
|
198
|
+
});
|
|
199
|
+
// ── affectedTools ─────────────────────────────────────────────────────────
|
|
200
|
+
it('rejects V2 output with empty affectedTools', async () => {
|
|
201
|
+
const output = mutable(makeV2Output());
|
|
202
|
+
output.affectedTools = [];
|
|
203
|
+
const result = await validator.validate(output, ARTIFICER_TASK_ID);
|
|
204
|
+
expect(result.valid).toBe(false);
|
|
205
|
+
expect(result.errors.some((e) => e.toLowerCase().includes('affectedtools'))).toBe(true);
|
|
206
|
+
});
|
|
207
|
+
it('rejects blank affectedTools entries', async () => {
|
|
208
|
+
const output = mutable(makeV2Output());
|
|
209
|
+
output.affectedTools = ['edit', ' '];
|
|
210
|
+
const result = await validator.validate(output, ARTIFICER_TASK_ID);
|
|
211
|
+
expect(result.valid).toBe(false);
|
|
212
|
+
expect(result.errors.some((e) => e.toLowerCase().includes('affectedtools'))).toBe(true);
|
|
213
|
+
});
|
|
214
|
+
it('rejects V2 output with non-string affectedTools element', async () => {
|
|
215
|
+
const output = mutable(makeV2Output());
|
|
216
|
+
output.affectedTools = ['edit', 42];
|
|
217
|
+
const result = await validator.validate(output, ARTIFICER_TASK_ID);
|
|
218
|
+
expect(result.valid).toBe(false);
|
|
219
|
+
expect(result.errors.some((e) => e.toLowerCase().includes('affectedtools'))).toBe(true);
|
|
220
|
+
});
|
|
221
|
+
it('rejects V2 output with non-array affectedTools', async () => {
|
|
222
|
+
const output = mutable(makeV2Output());
|
|
223
|
+
output.affectedTools = 'edit';
|
|
224
|
+
const result = await validator.validate(output, ARTIFICER_TASK_ID);
|
|
225
|
+
expect(result.valid).toBe(false);
|
|
226
|
+
expect(result.errors.some((e) => e.toLowerCase().includes('affectedtools'))).toBe(true);
|
|
227
|
+
});
|
|
228
|
+
// ── V2 must still reject all V1 errors (lineage, taskId, plan) ────────────
|
|
229
|
+
it('rejects V2 output with taskId mismatch', async () => {
|
|
230
|
+
const result = await validator.validate(makeV2Output(), 'wrong-task-id');
|
|
231
|
+
expect(result.valid).toBe(false);
|
|
232
|
+
expect(result.errors.some((e) => e.includes('taskId'))).toBe(true);
|
|
233
|
+
});
|
|
234
|
+
it('rejects V2 output with mismatched sourceScribeArtifactId', async () => {
|
|
235
|
+
const output = mutable(makeV2Output());
|
|
236
|
+
output.sourceScribeArtifactId = 'wrong';
|
|
237
|
+
const result = await validator.validate(output, ARTIFICER_TASK_ID, SCRIBE_ARTIFACT_ID);
|
|
238
|
+
expect(result.valid).toBe(false);
|
|
239
|
+
});
|
|
240
|
+
// ── detectV2 helper ───────────────────────────────────────────────────────
|
|
241
|
+
it('exposes isArtificerOutputV2() that distinguishes V1 from V2', async () => {
|
|
242
|
+
// Importing dynamically to avoid breaking compile if not yet exported.
|
|
243
|
+
const mod = await import('../artificer-output.js');
|
|
244
|
+
expect(typeof mod.isArtificerOutputV2).toBe('function');
|
|
245
|
+
expect(mod.isArtificerOutputV2(makeV1Output())).toBe(false);
|
|
246
|
+
expect(mod.isArtificerOutputV2(makeV2Output())).toBe(true);
|
|
247
|
+
});
|
|
248
|
+
});
|
|
249
|
+
//# sourceMappingURL=artificer-output-v2.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"artificer-output-v2.test.js","sourceRoot":"","sources":["../../../../src/runtime-v2/internalization/__tests__/artificer-output-v2.test.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAC9C,OAAO,EAAE,yBAAyB,EAAE,MAAM,wBAAwB,CAAC;AAGnE,MAAM,iBAAiB,GAAG,oBAAoB,CAAC;AAC/C,MAAM,kBAAkB,GAAG,2BAA2B,CAAC;AAEvD;;;;GAIG;AACH,SAAS,YAAY;IACnB,OAAO;QACL,MAAM,EAAE,iBAAiB;QACzB,sBAAsB,EAAE,kBAAkB;QAC1C,kBAAkB,EAAE;YAClB,OAAO,EAAE,oCAAoC;YAC7C,aAAa,EAAE,gBAAgB;YAC/B,OAAO,EAAE,CAAC,uBAAuB,CAAC;YAClC,KAAK,EAAE,CAAC,4BAA4B,CAAC;YACrC,YAAY,EAAE,CAAC,mBAAmB,CAAC;YACnC,UAAU,EAAE,GAAG;SAChB;QACD,WAAW,EAAE,EAAE,gBAAgB,EAAE,kBAAkB,EAAE;QACrD,KAAK,EAAE,CAAC,mCAAmC,CAAC;QAC5C,WAAW,EAAE,0BAA0B;KACxC,CAAC;AACJ,CAAC;AAED,mFAAmF;AACnF,SAAS,YAAY;IACnB,OAAO;QACL,GAAG,YAAY,EAAE;QACjB,kBAAkB,EAChB,8LAA8L;QAChM,gBAAgB,EAAE;YAChB;gBACE,MAAM,EAAE,YAAY;gBACpB,IAAI,EAAE,UAAU;gBAChB,QAAQ,EAAE,MAAM;gBAChB,MAAM,EAAE,EAAE,IAAI,EAAE,aAAa,EAAE;gBAC/B,gBAAgB,EAAE,OAAO;aAC1B;YACD;gBACE,MAAM,EAAE,YAAY;gBACpB,IAAI,EAAE,UAAU;gBAChB,QAAQ,EAAE,MAAM;gBAChB,MAAM,EAAE,EAAE,IAAI,EAAE,aAAa,EAAE;gBAC/B,gBAAgB,EAAE,OAAO;aAC1B;SACF;QACD,aAAa,EAAE,CAAC,MAAM,CAAC;KACxB,CAAC;AACJ,CAAC;AAED;;;;;;GAMG;AACH,SAAS,OAAO,CAAC,MAAyB;IACxC,OAAO,EAAE,GAAG,MAAM,EAAE,GAAG,MAAM,EAAE,CAAC;AAClC,CAAC;AAED,QAAQ,CAAC,0DAA0D,EAAE,GAAG,EAAE;IACxE,MAAM,SAAS,GAAG,IAAI,yBAAyB,EAAE,CAAC;IAElD,4EAA4E;IAE5E,EAAE,CAAC,+DAA+D,EAAE,KAAK,IAAI,EAAE;QAC7E,MAAM,MAAM,GAAG,MAAM,SAAS,CAAC,QAAQ,CAAC,YAAY,EAAE,EAAE,iBAAiB,CAAC,CAAC;QAC3E,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAChC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;IACpC,CAAC,CAAC,CAAC;IAEH,6EAA6E;IAE7E,EAAE,CAAC,0CAA0C,EAAE,KAAK,IAAI,EAAE;QACxD,MAAM,MAAM,GAAG,MAAM,SAAS,CAAC,QAAQ,CAAC,YAAY,EAAE,EAAE,iBAAiB,CAAC,CAAC;QAC3E,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAChC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;IACpC,CAAC,CAAC,CAAC;IAEH,6EAA6E;IAE7E,EAAE,CAAC,iDAAiD,EAAE,KAAK,IAAI,EAAE;QAC/D,MAAM,MAAM,GAAG,OAAO,CAAC,YAAY,EAAE,CAAC,CAAC;QACvC,MAAM,CAAC,kBAAkB,GAAG,KAAK,CAAC;QAClC,MAAM,MAAM,GAAG,MAAM,SAAS,CAAC,QAAQ,CAAC,MAAM,EAAE,iBAAiB,CAAC,CAAC;QACnE,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACjC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,oBAAoB,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACjF,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,sDAAsD,EAAE,KAAK,IAAI,EAAE;QACpE,MAAM,MAAM,GAAG,OAAO,CAAC,YAAY,EAAE,CAAC,CAAC;QACvC,MAAM,CAAC,kBAAkB,GAAG,EAAE,CAAC;QAC/B,MAAM,MAAM,GAAG,MAAM,SAAS,CAAC,QAAQ,CAAC,MAAM,EAAE,iBAAiB,CAAC,CAAC;QACnE,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACjC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,oBAAoB,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACjF,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,4DAA4D,EAAE,KAAK,IAAI,EAAE;QAC1E,MAAM,MAAM,GAAG,OAAO,CAAC,YAAY,EAAE,CAAC,CAAC;QACvC,MAAM,KAAK,GAAG,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,gBAAgB,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,gBAAgB,CAAC,CAAC,CAAC,EAAE,CAAC;QACpF,MAAM,CAAC,KAAK,EAAE,GAAG,cAAc,CAAC,GAAG,KAAK,CAAC;QACzC,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC;YAAE,MAAM,IAAI,KAAK,CAAC,iBAAiB,CAAC,CAAC;QAC5G,MAAM,CAAC,gBAAgB,GAAG,CAAC;gBACzB,GAAG,KAAK;gBACR,gBAAgB,EAAE,oBAAoB;gBACtC,sBAAsB,EAAE,EAAE,IAAI,EAAE,YAAY,EAAE;aAC/C,EAAE,GAAG,cAAc,CAAC,CAAC;QAEtB,MAAM,MAAM,GAAG,MAAM,SAAS,CAAC,QAAQ,CAAC,MAAM,EAAE,iBAAiB,CAAC,CAAC;QACnE,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACjC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,yBAAyB,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACpG,CAAC,CAAC,CAAC;IAEH,6EAA6E;IAE7E,EAAE,CAAC,sDAAsD,EAAE,KAAK,IAAI,EAAE;QACpE,MAAM,MAAM,GAAG,OAAO,CAAC,YAAY,EAAE,CAAC,CAAC;QACvC,MAAM,KAAK,GAAG,MAAM,CAAC,gBAA6B,CAAC;QACnD,MAAM,CAAC,gBAAgB,GAAG,CAAE,KAAK,CAAC,CAAC,CAA6B,CAAC,CAAC;QAClE,MAAM,MAAM,GAAG,MAAM,SAAS,CAAC,QAAQ,CAAC,MAAM,EAAE,iBAAiB,CAAC,CAAC;QACnE,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACjC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACxF,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,sDAAsD,EAAE,KAAK,IAAI,EAAE;QACpE,MAAM,MAAM,GAAG,OAAO,CAAC,YAAY,EAAE,CAAC,CAAC;QACvC,MAAM,IAAI,GAAI,MAAM,CAAC,gBAA8B,CAAC,CAAC,CAA4B,CAAC;QAClF,MAAM,CAAC,gBAAgB,GAAG,KAAK,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC;YAC9D,GAAG,IAAI;YACP,MAAM,EAAE,QAAQ,CAAC,EAAE;SACpB,CAAC,CAAC,CAAC;QACJ,MAAM,MAAM,GAAG,MAAM,SAAS,CAAC,QAAQ,CAAC,MAAM,EAAE,iBAAiB,CAAC,CAAC;QACnE,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACjC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACxF,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,yCAAyC,EAAE,KAAK,IAAI,EAAE;QACvD,MAAM,MAAM,GAAG,OAAO,CAAC,YAAY,EAAE,CAAC,CAAC;QACvC,MAAM,CAAC,gBAAgB,GAAG;YACxB,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,EAAE,EAAE,gBAAgB,EAAE,OAAO,EAAE;YAC3F,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,EAAE,EAAE,gBAAgB,EAAE,OAAO,EAAE;SAC5F,CAAC;QACF,MAAM,MAAM,GAAG,MAAM,SAAS,CAAC,QAAQ,CAAC,MAAM,EAAE,iBAAiB,CAAC,CAAC;QACnE,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACjC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACrF,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,yCAAyC,EAAE,KAAK,IAAI,EAAE;QACvD,MAAM,MAAM,GAAG,OAAO,CAAC,YAAY,EAAE,CAAC,CAAC;QACvC,MAAM,CAAC,gBAAgB,GAAG;YACxB,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,EAAE,EAAE,gBAAgB,EAAE,OAAO,EAAE;YAC3F,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,EAAE,EAAE,gBAAgB,EAAE,OAAO,EAAE;SAC5F,CAAC;QACF,MAAM,MAAM,GAAG,MAAM,SAAS,CAAC,QAAQ,CAAC,MAAM,EAAE,iBAAiB,CAAC,CAAC;QACnE,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACjC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACrF,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,8DAA8D,EAAE,KAAK,IAAI,EAAE;QAC5E,MAAM,MAAM,GAAG,OAAO,CAAC,YAAY,EAAE,CAAC,CAAC;QACvC,MAAM,CAAC,gBAAgB,GAAI,MAAM,CAAC,gBAA8B,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE;YACzE,MAAM,GAAG,GAAG,CAA4B,CAAC;YACzC,OAAO,GAAG,CAAC,IAAI,KAAK,UAAU,CAAC,CAAC,CAAC,EAAE,GAAG,GAAG,EAAE,gBAAgB,EAAE,OAAO,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC;QAC/E,CAAC,CAAC,CAAC;QACH,MAAM,MAAM,GAAG,MAAM,SAAS,CAAC,QAAQ,CAAC,MAAM,EAAE,iBAAiB,CAAC,CAAC;QACnE,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IACnC,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,4DAA4D,EAAE,KAAK,IAAI,EAAE;QAC1E,MAAM,MAAM,GAAG,OAAO,CAAC,YAAY,EAAE,CAAC,CAAC;QACvC,MAAM,KAAK,GAAG,MAAM,CAAC,gBAA6C,CAAC;QAClE,KAAK,CAAC,CAAC,CAA6B,CAAC,gBAAgB,GAAG,iBAAiB,CAAC;QAC3E,MAAM,MAAM,GAAG,MAAM,SAAS,CAAC,QAAQ,CAAC,MAAM,EAAE,iBAAiB,CAAC,CAAC;QACnE,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACjC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,kBAAkB,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAC7F,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,iDAAiD,EAAE,KAAK,IAAI,EAAE;QAC/D,MAAM,MAAM,GAAG,OAAO,CAAC,YAAY,EAAE,CAAC,CAAC;QACvC,MAAM,KAAK,GAAG,MAAM,CAAC,gBAA6C,CAAC;QACnE,OAAQ,KAAK,CAAC,CAAC,CAA6B,CAAC,MAAM,CAAC;QACpD,MAAM,MAAM,GAAG,MAAM,SAAS,CAAC,QAAQ,CAAC,MAAM,EAAE,iBAAiB,CAAC,CAAC;QACnE,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACjC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACnF,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,+CAA+C,EAAE,KAAK,IAAI,EAAE;QAC7D,MAAM,MAAM,GAAG,OAAO,CAAC,YAAY,EAAE,CAAC,CAAC;QACvC,MAAM,CAAC,gBAAgB,GAAG,cAAc,CAAC;QACzC,MAAM,MAAM,GAAG,MAAM,SAAS,CAAC,QAAQ,CAAC,MAAM,EAAE,iBAAiB,CAAC,CAAC;QACnE,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACjC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACxF,CAAC,CAAC,CAAC;IAEH,6EAA6E;IAE7E,EAAE,CAAC,4CAA4C,EAAE,KAAK,IAAI,EAAE;QAC1D,MAAM,MAAM,GAAG,OAAO,CAAC,YAAY,EAAE,CAAC,CAAC;QACvC,MAAM,CAAC,aAAa,GAAG,EAAE,CAAC;QAC1B,MAAM,MAAM,GAAG,MAAM,SAAS,CAAC,QAAQ,CAAC,MAAM,EAAE,iBAAiB,CAAC,CAAC;QACnE,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACjC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAC1F,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,qCAAqC,EAAE,KAAK,IAAI,EAAE;QACnD,MAAM,MAAM,GAAG,OAAO,CAAC,YAAY,EAAE,CAAC,CAAC;QACvC,MAAM,CAAC,aAAa,GAAG,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;QACvC,MAAM,MAAM,GAAG,MAAM,SAAS,CAAC,QAAQ,CAAC,MAAM,EAAE,iBAAiB,CAAC,CAAC;QACnE,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACjC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAC1F,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,yDAAyD,EAAE,KAAK,IAAI,EAAE;QACvE,MAAM,MAAM,GAAG,OAAO,CAAC,YAAY,EAAE,CAAC,CAAC;QACvC,MAAM,CAAC,aAAa,GAAG,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;QACpC,MAAM,MAAM,GAAG,MAAM,SAAS,CAAC,QAAQ,CAAC,MAAM,EAAE,iBAAiB,CAAC,CAAC;QACnE,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACjC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAC1F,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,gDAAgD,EAAE,KAAK,IAAI,EAAE;QAC9D,MAAM,MAAM,GAAG,OAAO,CAAC,YAAY,EAAE,CAAC,CAAC;QACvC,MAAM,CAAC,aAAa,GAAG,MAAM,CAAC;QAC9B,MAAM,MAAM,GAAG,MAAM,SAAS,CAAC,QAAQ,CAAC,MAAM,EAAE,iBAAiB,CAAC,CAAC;QACnE,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACjC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAC1F,CAAC,CAAC,CAAC;IAEH,6EAA6E;IAE7E,EAAE,CAAC,wCAAwC,EAAE,KAAK,IAAI,EAAE;QACtD,MAAM,MAAM,GAAG,MAAM,SAAS,CAAC,QAAQ,CAAC,YAAY,EAAE,EAAE,eAAe,CAAC,CAAC;QACzE,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACjC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACrE,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,0DAA0D,EAAE,KAAK,IAAI,EAAE;QACxE,MAAM,MAAM,GAAG,OAAO,CAAC,YAAY,EAAE,CAAC,CAAC;QACvC,MAAM,CAAC,sBAAsB,GAAG,OAAO,CAAC;QACxC,MAAM,MAAM,GAAG,MAAM,SAAS,CAAC,QAAQ,CAAC,MAAM,EAAE,iBAAiB,EAAE,kBAAkB,CAAC,CAAC;QACvF,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IACnC,CAAC,CAAC,CAAC;IAEH,6EAA6E;IAE7E,EAAE,CAAC,6DAA6D,EAAE,KAAK,IAAI,EAAE;QAC3E,uEAAuE;QACvE,MAAM,GAAG,GAAG,MAAM,MAAM,CAAC,wBAAwB,CAAC,CAAC;QACnD,MAAM,CAAC,OAAO,GAAG,CAAC,mBAAmB,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;QACxD,MAAM,CAAC,GAAG,CAAC,mBAAmB,CAAC,YAAY,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QAC5D,MAAM,CAAC,GAAG,CAAC,mBAAmB,CAAC,YAAY,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAC7D,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"artificer-prompt-builder-v2.test.d.ts","sourceRoot":"","sources":["../../../../src/runtime-v2/internalization/__tests__/artificer-prompt-builder-v2.test.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import { describe, expect, it } from 'vitest';
|
|
2
|
+
import { ARTIFICER_PROMPT_CONTRACT_VERSION, ARTIFICER_PROTOCOL_INSTRUCTION, ArtificerPromptBuilder, } from '../artificer-prompt-builder.js';
|
|
3
|
+
describe('ArtificerPromptBuilder V2 contract', () => {
|
|
4
|
+
it('requires executable RuleHost code and golden trace output', () => {
|
|
5
|
+
expect(ARTIFICER_PROTOCOL_INSTRUCTION).toContain('implementationCode');
|
|
6
|
+
expect(ARTIFICER_PROTOCOL_INSTRUCTION).toContain('goldenTraceCases');
|
|
7
|
+
expect(ARTIFICER_PROTOCOL_INSTRUCTION).toContain('affectedTools');
|
|
8
|
+
expect(ARTIFICER_PROTOCOL_INSTRUCTION).toContain('function evaluate(input, helpers)');
|
|
9
|
+
expect(ARTIFICER_PROMPT_CONTRACT_VERSION).toContain('v2');
|
|
10
|
+
});
|
|
11
|
+
it('serializes circular artifacts into a bounded prompt without throwing', () => {
|
|
12
|
+
const artifact = { principleDraft: { statement: 'confirm before destructive writes' } };
|
|
13
|
+
artifact.self = artifact;
|
|
14
|
+
const result = new ArtificerPromptBuilder().buildPrompt({
|
|
15
|
+
taskId: 'artificer-prompt-v2',
|
|
16
|
+
contextHash: 'ctx-v2',
|
|
17
|
+
sourceScribeArtifactId: 'scribe-artifact-v2',
|
|
18
|
+
scribeArtifact: artifact,
|
|
19
|
+
});
|
|
20
|
+
expect(result.message.length).toBeLessThanOrEqual(50_000);
|
|
21
|
+
expect(result.message).toContain('confirm before destructive writes');
|
|
22
|
+
});
|
|
23
|
+
});
|
|
24
|
+
//# sourceMappingURL=artificer-prompt-builder-v2.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"artificer-prompt-builder-v2.test.js","sourceRoot":"","sources":["../../../../src/runtime-v2/internalization/__tests__/artificer-prompt-builder-v2.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,QAAQ,CAAC;AAC9C,OAAO,EACL,iCAAiC,EACjC,8BAA8B,EAC9B,sBAAsB,GACvB,MAAM,gCAAgC,CAAC;AAExC,QAAQ,CAAC,oCAAoC,EAAE,GAAG,EAAE;IAClD,EAAE,CAAC,2DAA2D,EAAE,GAAG,EAAE;QACnE,MAAM,CAAC,8BAA8B,CAAC,CAAC,SAAS,CAAC,oBAAoB,CAAC,CAAC;QACvE,MAAM,CAAC,8BAA8B,CAAC,CAAC,SAAS,CAAC,kBAAkB,CAAC,CAAC;QACrE,MAAM,CAAC,8BAA8B,CAAC,CAAC,SAAS,CAAC,eAAe,CAAC,CAAC;QAClE,MAAM,CAAC,8BAA8B,CAAC,CAAC,SAAS,CAAC,mCAAmC,CAAC,CAAC;QACtF,MAAM,CAAC,iCAAiC,CAAC,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;IAC5D,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,sEAAsE,EAAE,GAAG,EAAE;QAC9E,MAAM,QAAQ,GAA4B,EAAE,cAAc,EAAE,EAAE,SAAS,EAAE,mCAAmC,EAAE,EAAE,CAAC;QACjH,QAAQ,CAAC,IAAI,GAAG,QAAQ,CAAC;QAEzB,MAAM,MAAM,GAAG,IAAI,sBAAsB,EAAE,CAAC,WAAW,CAAC;YACtD,MAAM,EAAE,qBAAqB;YAC7B,WAAW,EAAE,QAAQ;YACrB,sBAAsB,EAAE,oBAAoB;YAC5C,cAAc,EAAE,QAAQ;SACzB,CAAC,CAAC;QAEH,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,mBAAmB,CAAC,MAAM,CAAC,CAAC;QAC1D,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,SAAS,CAAC,mCAAmC,CAAC,CAAC;IACxE,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
|
|
@@ -34,8 +34,8 @@ describe('ArtificerPromptBuilder', () => {
|
|
|
34
34
|
const { promptInput } = builder.buildPrompt(input);
|
|
35
35
|
expect(promptInput.promptContractVersion).toBe(ARTIFICER_PROMPT_CONTRACT_VERSION);
|
|
36
36
|
});
|
|
37
|
-
it('promptContractVersion
|
|
38
|
-
expect(ARTIFICER_PROMPT_CONTRACT_VERSION).toBe('artificer-output-
|
|
37
|
+
it('promptContractVersion identifies the executable V2 contract', () => {
|
|
38
|
+
expect(ARTIFICER_PROMPT_CONTRACT_VERSION).toBe('artificer-output-v2.prompt.v1');
|
|
39
39
|
});
|
|
40
40
|
it('confidence instruction says number not string/percentage', () => {
|
|
41
41
|
expect(ARTIFICER_PROTOCOL_INSTRUCTION).toContain('NOT a string, NOT a percentage');
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"artificer-prompt-builder.test.js","sourceRoot":"","sources":["../../../../src/runtime-v2/internalization/__tests__/artificer-prompt-builder.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAC9C,OAAO,EACL,sBAAsB,EACtB,8BAA8B,EAC9B,iCAAiC,GAClC,MAAM,gCAAgC,CAAC;AAExC,QAAQ,CAAC,wBAAwB,EAAE,GAAG,EAAE;IACtC,MAAM,OAAO,GAAG,IAAI,sBAAsB,EAAE,CAAC;IAE7C,MAAM,KAAK,GAAG;QACZ,MAAM,EAAE,oBAAoB;QAC5B,WAAW,EAAE,YAAY;QACzB,sBAAsB,EAAE,mBAAmB;QAC3C,cAAc,EAAE;YACd,MAAM,EAAE,iBAAiB;YACzB,cAAc,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,SAAS,EAAE,GAAG,EAAE,SAAS,EAAE,GAAG,EAAE,aAAa,EAAE,EAAE,EAAE,YAAY,EAAE,EAAE,EAAE,UAAU,EAAE,GAAG,EAAE;SACxH;KACF,CAAC;IAEF,EAAE,CAAC,8DAA8D,EAAE,GAAG,EAAE;QACtE,MAAM,EAAE,WAAW,EAAE,GAAG,OAAO,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC;QACnD,MAAM,CAAC,WAAW,CAAC,sBAAsB,CAAC,CAAC,IAAI,CAAC,mBAAmB,CAAC,CAAC;IACvE,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,sDAAsD,EAAE,GAAG,EAAE;QAC9D,MAAM,CAAC,8BAA8B,CAAC,CAAC,SAAS,CAAC,iFAAiF,CAAC,CAAC;IACtI,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,4DAA4D,EAAE,GAAG,EAAE;QACpE,MAAM,CAAC,8BAA8B,CAAC,CAAC,SAAS,CAAC,uFAAuF,CAAC,CAAC;IAC5I,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,2CAA2C,EAAE,GAAG,EAAE;QACnD,MAAM,CAAC,8BAA8B,CAAC,CAAC,SAAS,CAAC,iBAAiB,CAAC,CAAC;IACtE,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,6CAA6C,EAAE,GAAG,EAAE;QACrD,MAAM,CAAC,8BAA8B,CAAC,CAAC,SAAS,CAAC,aAAa,CAAC,CAAC;IAClE,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,gDAAgD,EAAE,GAAG,EAAE;QACxD,MAAM,CAAC,8BAA8B,CAAC,CAAC,SAAS,CAAC,gBAAgB,CAAC,CAAC;IACrE,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,kDAAkD,EAAE,GAAG,EAAE;QAC1D,MAAM,EAAE,WAAW,EAAE,GAAG,OAAO,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC;QACnD,MAAM,CAAC,WAAW,CAAC,qBAAqB,CAAC,CAAC,IAAI,CAAC,iCAAiC,CAAC,CAAC;IACpF,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,
|
|
1
|
+
{"version":3,"file":"artificer-prompt-builder.test.js","sourceRoot":"","sources":["../../../../src/runtime-v2/internalization/__tests__/artificer-prompt-builder.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"evaluator-output-v2.test.d.ts","sourceRoot":"","sources":["../../../../src/runtime-v2/internalization/__tests__/evaluator-output-v2.test.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,209 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* EvaluatorOutputV2 validator tests (RuleHost MVP Activation, ADR-0014 Amendment 2026-06-17).
|
|
3
|
+
*
|
|
4
|
+
* TDD Phase 1.3 RED — asserts V2 schema behavior not yet implemented in
|
|
5
|
+
* `evaluator-output.ts`. Will fail until V2 schema + validator are added.
|
|
6
|
+
*
|
|
7
|
+
* Coverage (PRD test module 2):
|
|
8
|
+
* - codeReview 3-dimension structure validation (each dimension required)
|
|
9
|
+
* - codeReview optional (V1 artificer output → no codeReview)
|
|
10
|
+
* - adversarialCases structure validation
|
|
11
|
+
* - adversarialResult structure validation
|
|
12
|
+
*
|
|
13
|
+
* ERR checklist (EP-01): ERR-001/005/013/009 — untrusted LLM output validated
|
|
14
|
+
* field-by-field with runtime guards, never `as`-cast.
|
|
15
|
+
*/
|
|
16
|
+
import { describe, it, expect } from 'vitest';
|
|
17
|
+
import { DefaultEvaluatorValidator, isEvaluatorOutputV2 } from '../evaluator-output.js';
|
|
18
|
+
const EVALUATOR_TASK_ID = 'task-evaluator-001';
|
|
19
|
+
const ARTIFICER_ARTIFACT_ID = 'pi-art-artificer-001-run-001';
|
|
20
|
+
/** Minimal valid V1 evaluator output. */
|
|
21
|
+
function makeV1Output() {
|
|
22
|
+
return {
|
|
23
|
+
taskId: EVALUATOR_TASK_ID,
|
|
24
|
+
sourceArtificerArtifactId: ARTIFICER_ARTIFACT_ID,
|
|
25
|
+
evaluation: {
|
|
26
|
+
decision: 'approved',
|
|
27
|
+
summary: 'Code matches principle intent.',
|
|
28
|
+
score: 0.85,
|
|
29
|
+
strengths: ['clean predicate'],
|
|
30
|
+
concerns: [],
|
|
31
|
+
requiredChanges: [],
|
|
32
|
+
},
|
|
33
|
+
sourceTrace: { artificerArtifactId: ARTIFICER_ARTIFACT_ID },
|
|
34
|
+
risks: [],
|
|
35
|
+
generatedAt: '2026-06-17T00:00:00.000Z',
|
|
36
|
+
};
|
|
37
|
+
}
|
|
38
|
+
/** V2 output: V1 + codeReview + adversarialCases + adversarialResult (all optional). */
|
|
39
|
+
function makeV2Output() {
|
|
40
|
+
return {
|
|
41
|
+
...makeV1Output(),
|
|
42
|
+
codeReview: {
|
|
43
|
+
intentConsistency: { aligned: true, explanation: 'Logic matches principle.' },
|
|
44
|
+
scopePrecision: { verdict: 'precise', explanation: 'No over/under-matching.' },
|
|
45
|
+
traceCoverage: { sufficient: true, gaps: [], explanation: 'Covers key scenarios.' },
|
|
46
|
+
},
|
|
47
|
+
adversarialCases: [
|
|
48
|
+
{
|
|
49
|
+
caseId: 'adversarial-1',
|
|
50
|
+
attackType: 'boundary',
|
|
51
|
+
toolName: 'edit',
|
|
52
|
+
params: { path: 'package.json' },
|
|
53
|
+
expectedDecision: 'allow',
|
|
54
|
+
rationale: 'package.json is not a system file',
|
|
55
|
+
},
|
|
56
|
+
],
|
|
57
|
+
adversarialResult: {
|
|
58
|
+
passed: true,
|
|
59
|
+
failedCases: [],
|
|
60
|
+
},
|
|
61
|
+
};
|
|
62
|
+
}
|
|
63
|
+
/** Mutable shallow copy for exercising validator rejection paths on untrusted input. */
|
|
64
|
+
function mutable(output) {
|
|
65
|
+
return { ...output, ...output };
|
|
66
|
+
}
|
|
67
|
+
describe('DefaultEvaluatorValidator — V2 (RuleHost MVP Activation)', () => {
|
|
68
|
+
const validator = new DefaultEvaluatorValidator();
|
|
69
|
+
// ── V1 backward compatibility ────────────────────────────────────────────
|
|
70
|
+
it('accepts V1 output (no codeReview/adversarial fields)', async () => {
|
|
71
|
+
const result = await validator.validate(makeV1Output(), EVALUATOR_TASK_ID);
|
|
72
|
+
expect(result.valid).toBe(true);
|
|
73
|
+
expect(result.errors).toEqual([]);
|
|
74
|
+
});
|
|
75
|
+
// ── V2 happy path ─────────────────────────────────────────────────────────
|
|
76
|
+
it('accepts valid V2 output with codeReview + adversarial fields', async () => {
|
|
77
|
+
const result = await validator.validate(makeV2Output(), EVALUATOR_TASK_ID);
|
|
78
|
+
expect(result.valid).toBe(true);
|
|
79
|
+
expect(result.errors).toEqual([]);
|
|
80
|
+
});
|
|
81
|
+
it('does not narrow malformed V2-shaped output', () => {
|
|
82
|
+
expect(isEvaluatorOutputV2({ ...makeV1Output(), codeReview: null })).toBe(false);
|
|
83
|
+
});
|
|
84
|
+
it('accepts V2 output with codeReview but no adversarial fields (short-circuit case)', async () => {
|
|
85
|
+
const output = mutable(makeV2Output());
|
|
86
|
+
delete output.adversarialCases;
|
|
87
|
+
delete output.adversarialResult;
|
|
88
|
+
const result = await validator.validate(output, EVALUATOR_TASK_ID);
|
|
89
|
+
expect(result.valid).toBe(true);
|
|
90
|
+
});
|
|
91
|
+
// ── codeReview structure ──────────────────────────────────────────────────
|
|
92
|
+
it('rejects codeReview missing intentConsistency', async () => {
|
|
93
|
+
const output = mutable(makeV2Output());
|
|
94
|
+
const cr = output.codeReview;
|
|
95
|
+
delete cr.intentConsistency;
|
|
96
|
+
const result = await validator.validate(output, EVALUATOR_TASK_ID);
|
|
97
|
+
expect(result.valid).toBe(false);
|
|
98
|
+
expect(result.errors.some((e) => e.toLowerCase().includes('intentconsistency'))).toBe(true);
|
|
99
|
+
});
|
|
100
|
+
it('rejects codeReview.intentConsistency missing aligned', async () => {
|
|
101
|
+
const output = mutable(makeV2Output());
|
|
102
|
+
const cr = output.codeReview;
|
|
103
|
+
const ic = cr.intentConsistency;
|
|
104
|
+
delete ic.aligned;
|
|
105
|
+
const result = await validator.validate(output, EVALUATOR_TASK_ID);
|
|
106
|
+
expect(result.valid).toBe(false);
|
|
107
|
+
expect(result.errors.some((e) => e.toLowerCase().includes('aligned'))).toBe(true);
|
|
108
|
+
});
|
|
109
|
+
it('rejects codeReview.intentConsistency.aligned as non-boolean', async () => {
|
|
110
|
+
const output = makeV2Output();
|
|
111
|
+
const cr = output.codeReview;
|
|
112
|
+
const ic = cr.intentConsistency;
|
|
113
|
+
ic.aligned = 'yes';
|
|
114
|
+
const result = await validator.validate(output, EVALUATOR_TASK_ID);
|
|
115
|
+
expect(result.valid).toBe(false);
|
|
116
|
+
});
|
|
117
|
+
it('rejects codeReview.scopePrecision with invalid verdict', async () => {
|
|
118
|
+
const output = makeV2Output();
|
|
119
|
+
const cr = output.codeReview;
|
|
120
|
+
const sp = cr.scopePrecision;
|
|
121
|
+
sp.verdict = 'mostly_ok';
|
|
122
|
+
const result = await validator.validate(output, EVALUATOR_TASK_ID);
|
|
123
|
+
expect(result.valid).toBe(false);
|
|
124
|
+
expect(result.errors.some((e) => e.toLowerCase().includes('verdict'))).toBe(true);
|
|
125
|
+
});
|
|
126
|
+
it('rejects codeReview.traceCoverage with non-array gaps', async () => {
|
|
127
|
+
const output = makeV2Output();
|
|
128
|
+
const cr = output.codeReview;
|
|
129
|
+
const tc = cr.traceCoverage;
|
|
130
|
+
tc.gaps = 'missing-scenario';
|
|
131
|
+
const result = await validator.validate(output, EVALUATOR_TASK_ID);
|
|
132
|
+
expect(result.valid).toBe(false);
|
|
133
|
+
expect(result.errors.some((e) => e.toLowerCase().includes('gaps'))).toBe(true);
|
|
134
|
+
});
|
|
135
|
+
// ── adversarialCases structure ────────────────────────────────────────────
|
|
136
|
+
it('rejects adversarialCases element missing rationale', async () => {
|
|
137
|
+
const output = makeV2Output();
|
|
138
|
+
const cases = output.adversarialCases;
|
|
139
|
+
delete cases[0].rationale;
|
|
140
|
+
const result = await validator.validate(output, EVALUATOR_TASK_ID);
|
|
141
|
+
expect(result.valid).toBe(false);
|
|
142
|
+
expect(result.errors.some((e) => e.toLowerCase().includes('rationale'))).toBe(true);
|
|
143
|
+
});
|
|
144
|
+
it('rejects adversarialCases element with invalid attackType', async () => {
|
|
145
|
+
const output = makeV2Output();
|
|
146
|
+
const cases = output.adversarialCases;
|
|
147
|
+
cases[0].attackType = 'fuzzing';
|
|
148
|
+
const result = await validator.validate(output, EVALUATOR_TASK_ID);
|
|
149
|
+
expect(result.valid).toBe(false);
|
|
150
|
+
expect(result.errors.some((e) => e.toLowerCase().includes('attacktype'))).toBe(true);
|
|
151
|
+
});
|
|
152
|
+
it('rejects adversarialCases element with invalid expectedDecision', async () => {
|
|
153
|
+
const output = makeV2Output();
|
|
154
|
+
const cases = output.adversarialCases;
|
|
155
|
+
cases[0].expectedDecision = 'requireApproval';
|
|
156
|
+
const result = await validator.validate(output, EVALUATOR_TASK_ID);
|
|
157
|
+
expect(result.valid).toBe(false);
|
|
158
|
+
expect(result.errors.some((e) => e.toLowerCase().includes('expecteddecision'))).toBe(true);
|
|
159
|
+
});
|
|
160
|
+
it('rejects adversarialCases that is not an array', async () => {
|
|
161
|
+
const output = makeV2Output();
|
|
162
|
+
output.adversarialCases = {};
|
|
163
|
+
const result = await validator.validate(output, EVALUATOR_TASK_ID);
|
|
164
|
+
expect(result.valid).toBe(false);
|
|
165
|
+
});
|
|
166
|
+
// ── adversarialResult structure ───────────────────────────────────────────
|
|
167
|
+
it('rejects adversarialResult missing passed', async () => {
|
|
168
|
+
const output = mutable(makeV2Output());
|
|
169
|
+
const ar = output.adversarialResult;
|
|
170
|
+
delete ar.passed;
|
|
171
|
+
const result = await validator.validate(output, EVALUATOR_TASK_ID);
|
|
172
|
+
expect(result.valid).toBe(false);
|
|
173
|
+
expect(result.errors.some((e) => e.toLowerCase().includes('passed'))).toBe(true);
|
|
174
|
+
});
|
|
175
|
+
it('rejects adversarialResult.failedCases element missing caseId', async () => {
|
|
176
|
+
const output = mutable(makeV2Output());
|
|
177
|
+
output.adversarialResult = {
|
|
178
|
+
passed: false,
|
|
179
|
+
failedCases: [
|
|
180
|
+
{
|
|
181
|
+
attackType: 'boundary',
|
|
182
|
+
actualDecision: 'block',
|
|
183
|
+
expectedDecision: 'allow',
|
|
184
|
+
rationale: 'wrong',
|
|
185
|
+
},
|
|
186
|
+
],
|
|
187
|
+
};
|
|
188
|
+
const result = await validator.validate(output, EVALUATOR_TASK_ID);
|
|
189
|
+
expect(result.valid).toBe(false);
|
|
190
|
+
expect(result.errors.some((e) => e.toLowerCase().includes('caseid'))).toBe(true);
|
|
191
|
+
});
|
|
192
|
+
it('rejects adversarialResult.failedCases element with invalid attackType', async () => {
|
|
193
|
+
const output = makeV2Output();
|
|
194
|
+
const ar = output.adversarialResult;
|
|
195
|
+
ar.failedCases = [
|
|
196
|
+
{ caseId: 'f1', attackType: 'dos', actualDecision: 'block', expectedDecision: 'allow', rationale: 'x' },
|
|
197
|
+
];
|
|
198
|
+
const result = await validator.validate(output, EVALUATOR_TASK_ID);
|
|
199
|
+
expect(result.valid).toBe(false);
|
|
200
|
+
});
|
|
201
|
+
// ── detectV2 helper ───────────────────────────────────────────────────────
|
|
202
|
+
it('exposes isEvaluatorOutputV2() that distinguishes V1 from V2', async () => {
|
|
203
|
+
const mod = await import('../evaluator-output.js');
|
|
204
|
+
expect(typeof mod.isEvaluatorOutputV2).toBe('function');
|
|
205
|
+
expect(mod.isEvaluatorOutputV2(makeV1Output())).toBe(false);
|
|
206
|
+
expect(mod.isEvaluatorOutputV2(makeV2Output())).toBe(true);
|
|
207
|
+
});
|
|
208
|
+
});
|
|
209
|
+
//# sourceMappingURL=evaluator-output-v2.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"evaluator-output-v2.test.js","sourceRoot":"","sources":["../../../../src/runtime-v2/internalization/__tests__/evaluator-output-v2.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"evaluator-prompt-builder-v2.test.d.ts","sourceRoot":"","sources":["../../../../src/runtime-v2/internalization/__tests__/evaluator-prompt-builder-v2.test.ts"],"names":[],"mappings":""}
|