@principles/core 1.84.0 → 1.85.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/internalization/__tests__/philosopher-runner-trust-boundary.test.d.ts +2 -0
- package/dist/runtime-v2/internalization/__tests__/philosopher-runner-trust-boundary.test.d.ts.map +1 -0
- package/dist/runtime-v2/internalization/__tests__/philosopher-runner-trust-boundary.test.js +398 -0
- package/dist/runtime-v2/internalization/__tests__/philosopher-runner-trust-boundary.test.js.map +1 -0
- package/dist/runtime-v2/internalization/philosopher-output.d.ts +8 -2
- package/dist/runtime-v2/internalization/philosopher-output.d.ts.map +1 -1
- package/dist/runtime-v2/internalization/philosopher-output.js +16 -11
- package/dist/runtime-v2/internalization/philosopher-output.js.map +1 -1
- package/dist/runtime-v2/internalization/philosopher-runner.d.ts +36 -55
- package/dist/runtime-v2/internalization/philosopher-runner.d.ts.map +1 -1
- package/dist/runtime-v2/internalization/philosopher-runner.js +117 -401
- package/dist/runtime-v2/internalization/philosopher-runner.js.map +1 -1
- package/dist/runtime-v2/runner/__tests__/base-peer-runner-trust-boundary.test.js +22 -0
- package/dist/runtime-v2/runner/__tests__/base-peer-runner-trust-boundary.test.js.map +1 -1
- package/dist/runtime-v2/runner/base-peer-runner.d.ts.map +1 -1
- package/dist/runtime-v2/runner/base-peer-runner.js +5 -1
- package/dist/runtime-v2/runner/base-peer-runner.js.map +1 -1
- package/dist/telemetry-event.d.ts +2 -2
- package/dist/telemetry-event.d.ts.map +1 -1
- package/dist/telemetry-event.js +23 -0
- package/dist/telemetry-event.js.map +1 -1
- package/package.json +1 -1
package/dist/runtime-v2/internalization/__tests__/philosopher-runner-trust-boundary.test.d.ts.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"philosopher-runner-trust-boundary.test.d.ts","sourceRoot":"","sources":["../../../../src/runtime-v2/internalization/__tests__/philosopher-runner-trust-boundary.test.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,398 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* PhilosopherRunner trust-boundary and behavior parity tests (PRI-new).
|
|
3
|
+
*
|
|
4
|
+
* Proves that after BasePeerRunner migration:
|
|
5
|
+
* 1. Malformed runtime payload never reaches typed hooks or artifact commit
|
|
6
|
+
* 2. Validation failure does not call success commit
|
|
7
|
+
* 3. Successful run creates expected artifact and marks task succeeded
|
|
8
|
+
* 4. Lease conflict is non-mutating
|
|
9
|
+
* 5. postFetchTransform receives untrusted data, checkLineageIntegrity receives validated output
|
|
10
|
+
*/
|
|
11
|
+
import { describe, it, expect, vi, beforeEach } from 'vitest';
|
|
12
|
+
import { PhilosopherRunner } from '../philosopher-runner.js';
|
|
13
|
+
import { DefaultPhilosopherValidator } from '../philosopher-output.js';
|
|
14
|
+
import { MemoryPIArtifactStore } from '../pi-artifact-store.js';
|
|
15
|
+
import { PDRuntimeError } from '../../error-categories.js';
|
|
16
|
+
import { RunnerPhase } from '../../runner/runner-phase.js';
|
|
17
|
+
import { createPITaskDiagnosticJson } from '../pitask-metadata.js';
|
|
18
|
+
const DREAMER_TASK_ID = 'dreamer-tb-001';
|
|
19
|
+
const PHILOSOPHER_TASK_ID = 'philosopher-tb-001';
|
|
20
|
+
function makeDreamerArtifact() {
|
|
21
|
+
return {
|
|
22
|
+
artifactId: 'pi-art-dreamer-tb-001-run-001',
|
|
23
|
+
artifactKind: 'principle',
|
|
24
|
+
sourceTaskId: DREAMER_TASK_ID,
|
|
25
|
+
lineageArtifactIds: [],
|
|
26
|
+
validationStatus: 'pending',
|
|
27
|
+
contentJson: JSON.stringify({
|
|
28
|
+
valid: true,
|
|
29
|
+
taskId: DREAMER_TASK_ID,
|
|
30
|
+
candidates: [{
|
|
31
|
+
candidateIndex: 0,
|
|
32
|
+
badDecision: 'Ignored error handling',
|
|
33
|
+
betterDecision: 'Add try/catch',
|
|
34
|
+
rationale: 'Prevents unhandled rejections',
|
|
35
|
+
confidence: 0.85,
|
|
36
|
+
riskLevel: 'low',
|
|
37
|
+
strategicPerspective: 'reliability',
|
|
38
|
+
}],
|
|
39
|
+
contextRefs: [],
|
|
40
|
+
generatedAt: new Date().toISOString(),
|
|
41
|
+
}),
|
|
42
|
+
createdAt: new Date().toISOString(),
|
|
43
|
+
updatedAt: new Date().toISOString(),
|
|
44
|
+
};
|
|
45
|
+
}
|
|
46
|
+
function makePhilosopherOutput() {
|
|
47
|
+
return {
|
|
48
|
+
taskId: PHILOSOPHER_TASK_ID,
|
|
49
|
+
sourceDreamerArtifactId: 'pi-art-dreamer-tb-001-run-001',
|
|
50
|
+
thesis: 'Error handling should be systematic',
|
|
51
|
+
principleCandidate: {
|
|
52
|
+
title: 'Systematic Error Handling',
|
|
53
|
+
rationale: 'Uncaught errors cascade',
|
|
54
|
+
scope: 'All async operations',
|
|
55
|
+
confidence: 0.9,
|
|
56
|
+
},
|
|
57
|
+
risks: ['May add latency'],
|
|
58
|
+
generatedAt: new Date().toISOString(),
|
|
59
|
+
};
|
|
60
|
+
}
|
|
61
|
+
function makePhilosopherTask(overrides = {}) {
|
|
62
|
+
return {
|
|
63
|
+
taskId: PHILOSOPHER_TASK_ID,
|
|
64
|
+
taskKind: 'philosopher',
|
|
65
|
+
status: 'pending',
|
|
66
|
+
attemptCount: 0,
|
|
67
|
+
maxAttempts: 3,
|
|
68
|
+
createdAt: new Date().toISOString(),
|
|
69
|
+
updatedAt: new Date().toISOString(),
|
|
70
|
+
diagnosticJson: createPITaskDiagnosticJson({
|
|
71
|
+
dependencyTaskIds: [DREAMER_TASK_ID],
|
|
72
|
+
channel: 'prompt',
|
|
73
|
+
timeoutMs: 300_000,
|
|
74
|
+
inputArtifactRefs: [{ artifactType: 'principle', ref: 'pi-art-dreamer-tb-001-run-001' }],
|
|
75
|
+
outputArtifactRefs: [],
|
|
76
|
+
}),
|
|
77
|
+
...overrides,
|
|
78
|
+
};
|
|
79
|
+
}
|
|
80
|
+
function makeDreamerTask() {
|
|
81
|
+
return {
|
|
82
|
+
taskId: DREAMER_TASK_ID,
|
|
83
|
+
taskKind: 'dreamer',
|
|
84
|
+
status: 'succeeded',
|
|
85
|
+
attemptCount: 1,
|
|
86
|
+
maxAttempts: 3,
|
|
87
|
+
resultRef: 'dreamer://run-001',
|
|
88
|
+
createdAt: new Date().toISOString(),
|
|
89
|
+
updatedAt: new Date().toISOString(),
|
|
90
|
+
diagnosticJson: createPITaskDiagnosticJson({
|
|
91
|
+
dependencyTaskIds: [],
|
|
92
|
+
channel: 'prompt',
|
|
93
|
+
timeoutMs: 300_000,
|
|
94
|
+
inputArtifactRefs: [],
|
|
95
|
+
outputArtifactRefs: [{ artifactType: 'principle', ref: 'pi-art-dreamer-tb-001-run-001' }],
|
|
96
|
+
}),
|
|
97
|
+
};
|
|
98
|
+
}
|
|
99
|
+
describe('PhilosopherRunner trust boundary (PRI-new)', () => {
|
|
100
|
+
let artifactStore;
|
|
101
|
+
beforeEach(() => {
|
|
102
|
+
artifactStore = new MemoryPIArtifactStore();
|
|
103
|
+
});
|
|
104
|
+
function createMockDeps(overrides = {}) {
|
|
105
|
+
const philosopherTask = makePhilosopherTask();
|
|
106
|
+
const dreamerTask = makeDreamerTask();
|
|
107
|
+
const stateManager = {
|
|
108
|
+
acquireLease: vi.fn().mockResolvedValue(philosopherTask),
|
|
109
|
+
getTask: vi.fn().mockImplementation((id) => {
|
|
110
|
+
if (id === PHILOSOPHER_TASK_ID)
|
|
111
|
+
return Promise.resolve(philosopherTask);
|
|
112
|
+
if (id === DREAMER_TASK_ID)
|
|
113
|
+
return Promise.resolve(dreamerTask);
|
|
114
|
+
return Promise.resolve(null);
|
|
115
|
+
}),
|
|
116
|
+
getRunsByTask: vi.fn().mockResolvedValue([{
|
|
117
|
+
runId: 'run-phil-tb-001',
|
|
118
|
+
taskId: PHILOSOPHER_TASK_ID,
|
|
119
|
+
runtimeKind: 'philosopher',
|
|
120
|
+
startedAt: new Date().toISOString(),
|
|
121
|
+
}]),
|
|
122
|
+
updateRunOutput: vi.fn().mockResolvedValue(undefined),
|
|
123
|
+
markTaskSucceeded: vi.fn().mockResolvedValue(undefined),
|
|
124
|
+
markTaskFailed: vi.fn().mockResolvedValue(undefined),
|
|
125
|
+
markTaskRetryWait: vi.fn().mockResolvedValue(undefined),
|
|
126
|
+
getRetryPolicy: vi.fn().mockReturnValue({ shouldRetry: () => false }),
|
|
127
|
+
};
|
|
128
|
+
const runHandle = { runId: 'run-phil-tb-001', runtimeKind: 'test-double', startedAt: new Date().toISOString() };
|
|
129
|
+
const succeededStatus = { status: 'succeeded', runId: 'run-phil-tb-001' };
|
|
130
|
+
const runtimeAdapter = {
|
|
131
|
+
startRun: vi.fn().mockResolvedValue(runHandle),
|
|
132
|
+
pollRun: vi.fn().mockResolvedValue(succeededStatus),
|
|
133
|
+
fetchOutput: vi.fn().mockResolvedValue({ payload: makePhilosopherOutput() }),
|
|
134
|
+
cancelRun: vi.fn().mockResolvedValue(undefined),
|
|
135
|
+
};
|
|
136
|
+
const eventEmitter = {
|
|
137
|
+
emitTelemetry: vi.fn(),
|
|
138
|
+
};
|
|
139
|
+
const validator = new DefaultPhilosopherValidator();
|
|
140
|
+
return {
|
|
141
|
+
stateManager,
|
|
142
|
+
runtimeAdapter,
|
|
143
|
+
eventEmitter,
|
|
144
|
+
validator,
|
|
145
|
+
artifactStore,
|
|
146
|
+
...overrides,
|
|
147
|
+
};
|
|
148
|
+
}
|
|
149
|
+
it('malformed payload (non-object) does not write artifact or mark succeeded', async () => {
|
|
150
|
+
await artifactStore.upsertArtifact(makeDreamerArtifact());
|
|
151
|
+
const deps = createMockDeps({ artifactStore });
|
|
152
|
+
deps.runtimeAdapter.fetchOutput = vi.fn().mockResolvedValue({
|
|
153
|
+
payload: 'not-an-object',
|
|
154
|
+
});
|
|
155
|
+
const runner = new PhilosopherRunner(deps, {
|
|
156
|
+
owner: 'test',
|
|
157
|
+
runtimeKind: 'philosopher',
|
|
158
|
+
pollIntervalMs: 10,
|
|
159
|
+
timeoutMs: 1000,
|
|
160
|
+
});
|
|
161
|
+
const result = await runner.run(PHILOSOPHER_TASK_ID);
|
|
162
|
+
expect(result.status).toBe('failed');
|
|
163
|
+
expect(deps.stateManager.markTaskSucceeded).not.toHaveBeenCalled();
|
|
164
|
+
const artifacts = await artifactStore.listBySourceTaskId(PHILOSOPHER_TASK_ID);
|
|
165
|
+
expect(artifacts).toHaveLength(0);
|
|
166
|
+
});
|
|
167
|
+
it('malformed payload (null) does not write artifact or mark succeeded', async () => {
|
|
168
|
+
await artifactStore.upsertArtifact(makeDreamerArtifact());
|
|
169
|
+
const deps = createMockDeps({ artifactStore });
|
|
170
|
+
deps.runtimeAdapter.fetchOutput = vi.fn().mockResolvedValue({
|
|
171
|
+
payload: null,
|
|
172
|
+
});
|
|
173
|
+
const runner = new PhilosopherRunner(deps, {
|
|
174
|
+
owner: 'test',
|
|
175
|
+
runtimeKind: 'philosopher',
|
|
176
|
+
pollIntervalMs: 10,
|
|
177
|
+
timeoutMs: 1000,
|
|
178
|
+
});
|
|
179
|
+
const result = await runner.run(PHILOSOPHER_TASK_ID);
|
|
180
|
+
expect(result.status).toBe('failed');
|
|
181
|
+
expect(deps.stateManager.markTaskSucceeded).not.toHaveBeenCalled();
|
|
182
|
+
});
|
|
183
|
+
it('validation failure does not write artifact or mark succeeded', async () => {
|
|
184
|
+
await artifactStore.upsertArtifact(makeDreamerArtifact());
|
|
185
|
+
const deps = createMockDeps({ artifactStore });
|
|
186
|
+
const invalidOutput = {
|
|
187
|
+
taskId: 'wrong-id',
|
|
188
|
+
sourceDreamerArtifactId: '',
|
|
189
|
+
thesis: '',
|
|
190
|
+
principleCandidate: { title: '', rationale: '', scope: '', confidence: 2.0 },
|
|
191
|
+
risks: 'not-array',
|
|
192
|
+
generatedAt: '',
|
|
193
|
+
};
|
|
194
|
+
deps.runtimeAdapter.fetchOutput = vi.fn().mockResolvedValue({
|
|
195
|
+
payload: invalidOutput,
|
|
196
|
+
});
|
|
197
|
+
const runner = new PhilosopherRunner(deps, {
|
|
198
|
+
owner: 'test',
|
|
199
|
+
runtimeKind: 'philosopher',
|
|
200
|
+
pollIntervalMs: 10,
|
|
201
|
+
timeoutMs: 1000,
|
|
202
|
+
});
|
|
203
|
+
const result = await runner.run(PHILOSOPHER_TASK_ID);
|
|
204
|
+
expect(result.status).toBe('failed');
|
|
205
|
+
expect(deps.stateManager.markTaskSucceeded).not.toHaveBeenCalled();
|
|
206
|
+
const artifacts = await artifactStore.listBySourceTaskId(PHILOSOPHER_TASK_ID);
|
|
207
|
+
expect(artifacts).toHaveLength(0);
|
|
208
|
+
});
|
|
209
|
+
it('valid output goes through full success path — artifact written and task succeeded', async () => {
|
|
210
|
+
await artifactStore.upsertArtifact(makeDreamerArtifact());
|
|
211
|
+
const deps = createMockDeps({ artifactStore });
|
|
212
|
+
const runner = new PhilosopherRunner(deps, {
|
|
213
|
+
owner: 'test',
|
|
214
|
+
runtimeKind: 'philosopher',
|
|
215
|
+
pollIntervalMs: 10,
|
|
216
|
+
timeoutMs: 1000,
|
|
217
|
+
});
|
|
218
|
+
const result = await runner.run(PHILOSOPHER_TASK_ID);
|
|
219
|
+
expect(result.status).toBe('succeeded');
|
|
220
|
+
expect(result.artifactId).toBeDefined();
|
|
221
|
+
expect(result.output).toBeDefined();
|
|
222
|
+
expect(result.output?.principleCandidate.title).toBe('Systematic Error Handling');
|
|
223
|
+
expect(runner.currentPhase).toBe(RunnerPhase.Completed);
|
|
224
|
+
expect(deps.stateManager.markTaskSucceeded).toHaveBeenCalledWith(PHILOSOPHER_TASK_ID, expect.stringContaining('philosopher://'));
|
|
225
|
+
const artifacts = await artifactStore.listBySourceTaskId(PHILOSOPHER_TASK_ID);
|
|
226
|
+
expect(artifacts).toHaveLength(1);
|
|
227
|
+
expect(artifacts[0]?.artifactKind).toBe('principle');
|
|
228
|
+
});
|
|
229
|
+
it('lease conflict does not mutate task state', async () => {
|
|
230
|
+
const deps = createMockDeps();
|
|
231
|
+
deps.stateManager.acquireLease = vi.fn().mockRejectedValue(new PDRuntimeError('lease_conflict', 'Another runner holds the lease'));
|
|
232
|
+
const runner = new PhilosopherRunner(deps, {
|
|
233
|
+
owner: 'test',
|
|
234
|
+
runtimeKind: 'philosopher',
|
|
235
|
+
pollIntervalMs: 10,
|
|
236
|
+
timeoutMs: 1000,
|
|
237
|
+
});
|
|
238
|
+
const result = await runner.run(PHILOSOPHER_TASK_ID);
|
|
239
|
+
expect(result.status).toBe('failed');
|
|
240
|
+
expect(result.errorCategory).toBe('lease_conflict');
|
|
241
|
+
expect(deps.stateManager.markTaskFailed).not.toHaveBeenCalled();
|
|
242
|
+
expect(deps.stateManager.markTaskRetryWait).not.toHaveBeenCalled();
|
|
243
|
+
});
|
|
244
|
+
it('taskId mismatch in output fails validation loud', async () => {
|
|
245
|
+
await artifactStore.upsertArtifact(makeDreamerArtifact());
|
|
246
|
+
const deps = createMockDeps({ artifactStore });
|
|
247
|
+
const mismatchedOutput = { ...makePhilosopherOutput(), taskId: 'wrong-task-id' };
|
|
248
|
+
deps.runtimeAdapter.fetchOutput = vi.fn().mockResolvedValue({
|
|
249
|
+
payload: mismatchedOutput,
|
|
250
|
+
});
|
|
251
|
+
const runner = new PhilosopherRunner(deps, {
|
|
252
|
+
owner: 'test',
|
|
253
|
+
runtimeKind: 'philosopher',
|
|
254
|
+
pollIntervalMs: 10,
|
|
255
|
+
timeoutMs: 1000,
|
|
256
|
+
});
|
|
257
|
+
const result = await runner.run(PHILOSOPHER_TASK_ID);
|
|
258
|
+
expect(result.status).toBe('failed');
|
|
259
|
+
// output_invalid is transient; retry policy says shouldRetry=false → max_attempts_exceeded
|
|
260
|
+
expect(result.errorCategory).toBe('max_attempts_exceeded');
|
|
261
|
+
expect(result.failureReason).toContain('taskId mismatch');
|
|
262
|
+
});
|
|
263
|
+
it('validation failure does not set phase to Completed', async () => {
|
|
264
|
+
await artifactStore.upsertArtifact(makeDreamerArtifact());
|
|
265
|
+
const deps = createMockDeps({ artifactStore });
|
|
266
|
+
const invalidOutput = {
|
|
267
|
+
taskId: 'wrong-id',
|
|
268
|
+
sourceDreamerArtifactId: '',
|
|
269
|
+
thesis: '',
|
|
270
|
+
principleCandidate: { title: '', rationale: '', scope: '', confidence: 2.0 },
|
|
271
|
+
risks: 'not-array',
|
|
272
|
+
generatedAt: '',
|
|
273
|
+
};
|
|
274
|
+
deps.runtimeAdapter.fetchOutput = vi.fn().mockResolvedValue({
|
|
275
|
+
payload: invalidOutput,
|
|
276
|
+
});
|
|
277
|
+
const runner = new PhilosopherRunner(deps, {
|
|
278
|
+
owner: 'test',
|
|
279
|
+
runtimeKind: 'philosopher',
|
|
280
|
+
pollIntervalMs: 10,
|
|
281
|
+
timeoutMs: 1000,
|
|
282
|
+
});
|
|
283
|
+
const result = await runner.run(PHILOSOPHER_TASK_ID);
|
|
284
|
+
expect(result.status).toBe('failed');
|
|
285
|
+
expect(runner.currentPhase).not.toBe(RunnerPhase.Completed);
|
|
286
|
+
expect(runner.currentPhase).toBe(RunnerPhase.Failed);
|
|
287
|
+
});
|
|
288
|
+
it('postFetchTransform re-injects taskId when stripped — phase is Completed', async () => {
|
|
289
|
+
await artifactStore.upsertArtifact(makeDreamerArtifact());
|
|
290
|
+
const deps = createMockDeps({ artifactStore });
|
|
291
|
+
// Simulate adapter stripping lineage fields (PRI-272)
|
|
292
|
+
const strippedOutput = { ...makePhilosopherOutput() };
|
|
293
|
+
delete strippedOutput.taskId;
|
|
294
|
+
deps.runtimeAdapter.fetchOutput = vi.fn().mockResolvedValue({
|
|
295
|
+
payload: strippedOutput,
|
|
296
|
+
});
|
|
297
|
+
const runner = new PhilosopherRunner(deps, {
|
|
298
|
+
owner: 'test',
|
|
299
|
+
runtimeKind: 'philosopher',
|
|
300
|
+
pollIntervalMs: 10,
|
|
301
|
+
timeoutMs: 1000,
|
|
302
|
+
});
|
|
303
|
+
const result = await runner.run(PHILOSOPHER_TASK_ID);
|
|
304
|
+
// postFetchTransform should re-inject taskId, then validation should pass
|
|
305
|
+
expect(result.status).toBe('succeeded');
|
|
306
|
+
expect(runner.currentPhase).toBe(RunnerPhase.Completed);
|
|
307
|
+
});
|
|
308
|
+
it('present-but-empty taskId fails validation (not silently corrected)', async () => {
|
|
309
|
+
await artifactStore.upsertArtifact(makeDreamerArtifact());
|
|
310
|
+
const deps = createMockDeps({ artifactStore });
|
|
311
|
+
const emptyTaskIdOutput = { ...makePhilosopherOutput(), taskId: '' };
|
|
312
|
+
deps.runtimeAdapter.fetchOutput = vi.fn().mockResolvedValue({
|
|
313
|
+
payload: emptyTaskIdOutput,
|
|
314
|
+
});
|
|
315
|
+
const runner = new PhilosopherRunner(deps, {
|
|
316
|
+
owner: 'test',
|
|
317
|
+
runtimeKind: 'philosopher',
|
|
318
|
+
pollIntervalMs: 10,
|
|
319
|
+
timeoutMs: 1000,
|
|
320
|
+
});
|
|
321
|
+
const result = await runner.run(PHILOSOPHER_TASK_ID);
|
|
322
|
+
expect(result.status).toBe('failed');
|
|
323
|
+
// output_invalid is transient; retry policy says shouldRetry=false → max_attempts_exceeded
|
|
324
|
+
expect(result.errorCategory).toBe('max_attempts_exceeded');
|
|
325
|
+
// postFetchTransform should NOT overwrite present-but-empty taskId
|
|
326
|
+
expect(result.failureReason).toContain('taskId mismatch');
|
|
327
|
+
});
|
|
328
|
+
it('risks with non-string elements fails validation (ERR-005 Rule 4)', async () => {
|
|
329
|
+
await artifactStore.upsertArtifact(makeDreamerArtifact());
|
|
330
|
+
const deps = createMockDeps({ artifactStore });
|
|
331
|
+
const badRisksOutput = { ...makePhilosopherOutput(), risks: [1, {}] };
|
|
332
|
+
deps.runtimeAdapter.fetchOutput = vi.fn().mockResolvedValue({
|
|
333
|
+
payload: badRisksOutput,
|
|
334
|
+
});
|
|
335
|
+
const runner = new PhilosopherRunner(deps, {
|
|
336
|
+
owner: 'test',
|
|
337
|
+
runtimeKind: 'philosopher',
|
|
338
|
+
pollIntervalMs: 10,
|
|
339
|
+
timeoutMs: 1000,
|
|
340
|
+
});
|
|
341
|
+
const result = await runner.run(PHILOSOPHER_TASK_ID);
|
|
342
|
+
expect(result.status).toBe('failed');
|
|
343
|
+
expect(result.failureReason).toContain('risks must contain only strings');
|
|
344
|
+
});
|
|
345
|
+
it('sourceDreamerArtifactId mismatch fails loud before artifact commit (ERR-004)', async () => {
|
|
346
|
+
await artifactStore.upsertArtifact(makeDreamerArtifact());
|
|
347
|
+
const deps = createMockDeps({ artifactStore });
|
|
348
|
+
const mismatchedIdOutput = { ...makePhilosopherOutput(), sourceDreamerArtifactId: 'wrong-artifact-id' };
|
|
349
|
+
deps.runtimeAdapter.fetchOutput = vi.fn().mockResolvedValue({
|
|
350
|
+
payload: mismatchedIdOutput,
|
|
351
|
+
});
|
|
352
|
+
const runner = new PhilosopherRunner(deps, {
|
|
353
|
+
owner: 'test',
|
|
354
|
+
runtimeKind: 'philosopher',
|
|
355
|
+
pollIntervalMs: 10,
|
|
356
|
+
timeoutMs: 1000,
|
|
357
|
+
});
|
|
358
|
+
const result = await runner.run(PHILOSOPHER_TASK_ID);
|
|
359
|
+
expect(result.status).toBe('failed');
|
|
360
|
+
expect(deps.stateManager.markTaskSucceeded).not.toHaveBeenCalled();
|
|
361
|
+
const artifacts = await artifactStore.listBySourceTaskId(PHILOSOPHER_TASK_ID);
|
|
362
|
+
expect(artifacts).toHaveLength(0);
|
|
363
|
+
});
|
|
364
|
+
it('invalid errorCategory from custom validator fails loud and does not leak through', async () => {
|
|
365
|
+
await artifactStore.upsertArtifact(makeDreamerArtifact());
|
|
366
|
+
// Custom validator returning an invalid errorCategory string
|
|
367
|
+
const rogueValidator = {
|
|
368
|
+
validate: vi.fn().mockResolvedValue({
|
|
369
|
+
valid: false,
|
|
370
|
+
errors: ['some validation error'],
|
|
371
|
+
errorCategory: 'not_a_real_category',
|
|
372
|
+
}),
|
|
373
|
+
};
|
|
374
|
+
const deps = createMockDeps({ artifactStore, validator: rogueValidator });
|
|
375
|
+
const runner = new PhilosopherRunner(deps, {
|
|
376
|
+
owner: 'test',
|
|
377
|
+
runtimeKind: 'philosopher',
|
|
378
|
+
pollIntervalMs: 10,
|
|
379
|
+
timeoutMs: 1000,
|
|
380
|
+
});
|
|
381
|
+
const result = await runner.run(PHILOSOPHER_TASK_ID);
|
|
382
|
+
expect(result.status).toBe('failed');
|
|
383
|
+
// The invalid category must NOT leak into result.errorCategory
|
|
384
|
+
expect(result.errorCategory).not.toBe('not_a_real_category');
|
|
385
|
+
// errorCategory should be a valid PDErrorCategory (output_invalid from the guard,
|
|
386
|
+
// then escalated by retryOrFail to max_attempts_exceeded since output_invalid is transient
|
|
387
|
+
// and retry policy returns shouldRetry=false)
|
|
388
|
+
expect(result.errorCategory).toBe('max_attempts_exceeded');
|
|
389
|
+
// failureReason must mention the invalid errorCategory
|
|
390
|
+
expect(result.failureReason).toContain('invalid errorCategory');
|
|
391
|
+
expect(result.failureReason).toContain('not_a_real_category');
|
|
392
|
+
// No artifact written, no task marked succeeded
|
|
393
|
+
expect(deps.stateManager.markTaskSucceeded).not.toHaveBeenCalled();
|
|
394
|
+
const artifacts = await artifactStore.listBySourceTaskId(PHILOSOPHER_TASK_ID);
|
|
395
|
+
expect(artifacts).toHaveLength(0);
|
|
396
|
+
});
|
|
397
|
+
});
|
|
398
|
+
//# sourceMappingURL=philosopher-runner-trust-boundary.test.js.map
|
package/dist/runtime-v2/internalization/__tests__/philosopher-runner-trust-boundary.test.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"philosopher-runner-trust-boundary.test.js","sourceRoot":"","sources":["../../../../src/runtime-v2/internalization/__tests__/philosopher-runner-trust-boundary.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -48,9 +48,15 @@ export interface PhilosopherValidationResult {
|
|
|
48
48
|
readonly errorCategory?: string;
|
|
49
49
|
}
|
|
50
50
|
export interface PhilosopherValidator {
|
|
51
|
-
|
|
51
|
+
/**
|
|
52
|
+
* Validate untrusted LLM/runtime output.
|
|
53
|
+
*
|
|
54
|
+
* Receives `unknown` — must perform runtime validation before
|
|
55
|
+
* treating as PhilosopherOutputV1 (ERR-001, ERR-005, ERR-054).
|
|
56
|
+
*/
|
|
57
|
+
validate(output: unknown, taskId: string): Promise<PhilosopherValidationResult>;
|
|
52
58
|
}
|
|
53
59
|
export declare class DefaultPhilosopherValidator implements PhilosopherValidator {
|
|
54
|
-
validate(output:
|
|
60
|
+
validate(output: unknown, taskId: string): Promise<PhilosopherValidationResult>;
|
|
55
61
|
}
|
|
56
62
|
//# sourceMappingURL=philosopher-output.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"philosopher-output.d.ts","sourceRoot":"","sources":["../../../src/runtime-v2/internalization/philosopher-output.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,EAAQ,KAAK,MAAM,EAAE,MAAM,mBAAmB,CAAC;AAItD,MAAM,WAAW,6BAA6B;IAC5C,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;CAC7B;AAED,MAAM,WAAW,mBAAmB;IAClC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,uBAAuB,EAAE,MAAM,CAAC;IACzC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,kBAAkB,EAAE,6BAA6B,CAAC;IAC3D,QAAQ,CAAC,KAAK,EAAE,SAAS,MAAM,EAAE,CAAC;IAClC,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;CAC9B;AAID,eAAO,MAAM,mCAAmC;;;;;EAK9C,CAAC;AAEH,eAAO,MAAM,yBAAyB;;;;;;;;;;;;EAOpC,CAAC;AAEH,MAAM,MAAM,qBAAqB,GAAG,MAAM,CAAC,OAAO,yBAAyB,CAAC,CAAC;AAI7E,MAAM,WAAW,2BAA2B;IAC1C,QAAQ,CAAC,KAAK,EAAE,OAAO,CAAC;IACxB,QAAQ,CAAC,MAAM,EAAE,SAAS,MAAM,EAAE,CAAC;IACnC,QAAQ,CAAC,aAAa,CAAC,EAAE,MAAM,CAAC;CACjC;AAED,MAAM,WAAW,oBAAoB;IACnC,QAAQ,CAAC,MAAM,EAAE,
|
|
1
|
+
{"version":3,"file":"philosopher-output.d.ts","sourceRoot":"","sources":["../../../src/runtime-v2/internalization/philosopher-output.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,EAAQ,KAAK,MAAM,EAAE,MAAM,mBAAmB,CAAC;AAItD,MAAM,WAAW,6BAA6B;IAC5C,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;CAC7B;AAED,MAAM,WAAW,mBAAmB;IAClC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,uBAAuB,EAAE,MAAM,CAAC;IACzC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,kBAAkB,EAAE,6BAA6B,CAAC;IAC3D,QAAQ,CAAC,KAAK,EAAE,SAAS,MAAM,EAAE,CAAC;IAClC,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;CAC9B;AAID,eAAO,MAAM,mCAAmC;;;;;EAK9C,CAAC;AAEH,eAAO,MAAM,yBAAyB;;;;;;;;;;;;EAOpC,CAAC;AAEH,MAAM,MAAM,qBAAqB,GAAG,MAAM,CAAC,OAAO,yBAAyB,CAAC,CAAC;AAI7E,MAAM,WAAW,2BAA2B;IAC1C,QAAQ,CAAC,KAAK,EAAE,OAAO,CAAC;IACxB,QAAQ,CAAC,MAAM,EAAE,SAAS,MAAM,EAAE,CAAC;IACnC,QAAQ,CAAC,aAAa,CAAC,EAAE,MAAM,CAAC;CACjC;AAED,MAAM,WAAW,oBAAoB;IACnC;;;;;OAKG;IACH,QAAQ,CAAC,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,2BAA2B,CAAC,CAAC;CACjF;AAED,qBAAa,2BAA4B,YAAW,oBAAoB;IAEhE,QAAQ,CAAC,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,2BAA2B,CAAC;CA+CtF"}
|
|
@@ -30,35 +30,40 @@ export class DefaultPhilosopherValidator {
|
|
|
30
30
|
if (typeof output !== 'object' || output === null) {
|
|
31
31
|
return { valid: false, errors: ['Output is not an object'], errorCategory: 'output_invalid' };
|
|
32
32
|
}
|
|
33
|
-
|
|
34
|
-
|
|
33
|
+
// Safe property access via Record<string, unknown> — no `as PhilosopherOutputV1` (ERR-001).
|
|
34
|
+
const record = output;
|
|
35
|
+
if (record.taskId !== taskId) {
|
|
36
|
+
errors.push(`taskId mismatch: expected ${taskId}, got ${String(record.taskId)}`);
|
|
35
37
|
}
|
|
36
|
-
if (typeof
|
|
38
|
+
if (typeof record.sourceDreamerArtifactId !== 'string' || record.sourceDreamerArtifactId.trim() === '') {
|
|
37
39
|
errors.push('sourceDreamerArtifactId must be non-empty string');
|
|
38
40
|
}
|
|
39
|
-
if (typeof
|
|
41
|
+
if (typeof record.thesis !== 'string' || record.thesis.trim() === '') {
|
|
40
42
|
errors.push('thesis must be non-empty string');
|
|
41
43
|
}
|
|
42
|
-
if (typeof
|
|
44
|
+
if (typeof record.principleCandidate !== 'object' || record.principleCandidate === null) {
|
|
43
45
|
errors.push('principleCandidate must be an object');
|
|
44
46
|
}
|
|
45
47
|
else {
|
|
46
|
-
const pc =
|
|
47
|
-
if (typeof pc.title !== 'string' ||
|
|
48
|
+
const pc = record.principleCandidate;
|
|
49
|
+
if (typeof pc.title !== 'string' || pc.title.trim() === '')
|
|
48
50
|
errors.push('principleCandidate.title must be non-empty string');
|
|
49
|
-
if (typeof pc.rationale !== 'string' ||
|
|
51
|
+
if (typeof pc.rationale !== 'string' || pc.rationale.trim() === '')
|
|
50
52
|
errors.push('principleCandidate.rationale must be non-empty string');
|
|
51
|
-
if (typeof pc.scope !== 'string' ||
|
|
53
|
+
if (typeof pc.scope !== 'string' || pc.scope.trim() === '')
|
|
52
54
|
errors.push('principleCandidate.scope must be non-empty string');
|
|
53
55
|
if (typeof pc.confidence !== 'number')
|
|
54
56
|
errors.push('principleCandidate.confidence must be number');
|
|
55
57
|
else if (pc.confidence < 0 || pc.confidence > 1)
|
|
56
58
|
errors.push('principleCandidate.confidence must be in [0, 1]');
|
|
57
59
|
}
|
|
58
|
-
if (!Array.isArray(
|
|
60
|
+
if (!Array.isArray(record.risks)) {
|
|
59
61
|
errors.push('risks must be an array');
|
|
60
62
|
}
|
|
61
|
-
if (typeof
|
|
63
|
+
else if (record.risks.some((risk) => typeof risk !== 'string')) {
|
|
64
|
+
errors.push('risks must contain only strings');
|
|
65
|
+
}
|
|
66
|
+
if (typeof record.generatedAt !== 'string' || record.generatedAt.trim() === '') {
|
|
62
67
|
errors.push('generatedAt must be non-empty string');
|
|
63
68
|
}
|
|
64
69
|
return errors.length > 0
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"philosopher-output.js","sourceRoot":"","sources":["../../../src/runtime-v2/internalization/philosopher-output.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,EAAE,IAAI,EAAe,MAAM,mBAAmB,CAAC;AAoBtD,+EAA+E;AAE/E,MAAM,CAAC,MAAM,mCAAmC,GAAG,IAAI,CAAC,MAAM,CAAC;IAC7D,KAAK,EAAE,IAAI,CAAC,MAAM,CAAC,EAAE,SAAS,EAAE,CAAC,EAAE,CAAC;IACpC,SAAS,EAAE,IAAI,CAAC,MAAM,CAAC,EAAE,SAAS,EAAE,CAAC,EAAE,CAAC;IACxC,KAAK,EAAE,IAAI,CAAC,MAAM,CAAC,EAAE,SAAS,EAAE,CAAC,EAAE,CAAC;IACpC,UAAU,EAAE,IAAI,CAAC,MAAM,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC;CACpD,CAAC,CAAC;AAEH,MAAM,CAAC,MAAM,yBAAyB,GAAG,IAAI,CAAC,MAAM,CAAC;IACnD,MAAM,EAAE,IAAI,CAAC,MAAM,CAAC,EAAE,SAAS,EAAE,CAAC,EAAE,CAAC;IACrC,uBAAuB,EAAE,IAAI,CAAC,MAAM,CAAC,EAAE,SAAS,EAAE,CAAC,EAAE,CAAC;IACtD,MAAM,EAAE,IAAI,CAAC,MAAM,CAAC,EAAE,SAAS,EAAE,CAAC,EAAE,CAAC;IACrC,kBAAkB,EAAE,mCAAmC;IACvD,KAAK,EAAE,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC;IAChC,WAAW,EAAE,IAAI,CAAC,MAAM,CAAC,EAAE,SAAS,EAAE,CAAC,EAAE,CAAC;CAC3C,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"philosopher-output.js","sourceRoot":"","sources":["../../../src/runtime-v2/internalization/philosopher-output.ts"],"names":[],"mappings":"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"}
|