@principles/core 1.274.2 → 1.274.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (43) hide show
  1. package/dist/runtime-v2/__tests__/pain-signal-runtime-factory-edge-cases.test.js +4 -1
  2. package/dist/runtime-v2/__tests__/pain-signal-runtime-factory-edge-cases.test.js.map +1 -1
  3. package/dist/runtime-v2/__tests__/pri638-diagnostician-capability-characterization.test.d.ts +27 -0
  4. package/dist/runtime-v2/__tests__/pri638-diagnostician-capability-characterization.test.d.ts.map +1 -0
  5. package/dist/runtime-v2/__tests__/pri638-diagnostician-capability-characterization.test.js +449 -0
  6. package/dist/runtime-v2/__tests__/pri638-diagnostician-capability-characterization.test.js.map +1 -0
  7. package/dist/runtime-v2/__tests__/pri638-p1d-error-classification.test.d.ts +2 -0
  8. package/dist/runtime-v2/__tests__/pri638-p1d-error-classification.test.d.ts.map +1 -0
  9. package/dist/runtime-v2/__tests__/pri638-p1d-error-classification.test.js +116 -0
  10. package/dist/runtime-v2/__tests__/pri638-p1d-error-classification.test.js.map +1 -0
  11. package/dist/runtime-v2/config/__tests__/pd-config-pri638-cutover.test.d.ts +2 -0
  12. package/dist/runtime-v2/config/__tests__/pd-config-pri638-cutover.test.d.ts.map +1 -0
  13. package/dist/runtime-v2/config/__tests__/pd-config-pri638-cutover.test.js +99 -0
  14. package/dist/runtime-v2/config/__tests__/pd-config-pri638-cutover.test.js.map +1 -0
  15. package/dist/runtime-v2/config/pd-config-effective.d.ts.map +1 -1
  16. package/dist/runtime-v2/config/pd-config-effective.js +34 -0
  17. package/dist/runtime-v2/config/pd-config-effective.js.map +1 -1
  18. package/dist/runtime-v2/diagnostician-capability.d.ts +47 -0
  19. package/dist/runtime-v2/diagnostician-capability.d.ts.map +1 -0
  20. package/dist/runtime-v2/diagnostician-capability.js +53 -0
  21. package/dist/runtime-v2/diagnostician-capability.js.map +1 -0
  22. package/dist/runtime-v2/index.d.ts +1 -0
  23. package/dist/runtime-v2/index.d.ts.map +1 -1
  24. package/dist/runtime-v2/index.js +2 -0
  25. package/dist/runtime-v2/index.js.map +1 -1
  26. package/dist/runtime-v2/internalization/__tests__/diag-chain-e2e.test.js +18 -5
  27. package/dist/runtime-v2/internalization/__tests__/diag-chain-e2e.test.js.map +1 -1
  28. package/dist/runtime-v2/internalization/evaluator-runner.js.map +1 -1
  29. package/dist/runtime-v2/pain-signal-bridge.d.ts +25 -0
  30. package/dist/runtime-v2/pain-signal-bridge.d.ts.map +1 -1
  31. package/dist/runtime-v2/pain-signal-bridge.js +67 -0
  32. package/dist/runtime-v2/pain-signal-bridge.js.map +1 -1
  33. package/dist/runtime-v2/pain-signal-runtime-factory.d.ts +32 -12
  34. package/dist/runtime-v2/pain-signal-runtime-factory.d.ts.map +1 -1
  35. package/dist/runtime-v2/pain-signal-runtime-factory.js +113 -46
  36. package/dist/runtime-v2/pain-signal-runtime-factory.js.map +1 -1
  37. package/dist/runtime-v2/pain-to-principle-service.d.ts +7 -1
  38. package/dist/runtime-v2/pain-to-principle-service.d.ts.map +1 -1
  39. package/dist/runtime-v2/pain-to-principle-service.js +25 -0
  40. package/dist/runtime-v2/pain-to-principle-service.js.map +1 -1
  41. package/dist/runtime-v2/runner/runner-result.d.ts +6 -0
  42. package/dist/runtime-v2/runner/runner-result.d.ts.map +1 -1
  43. package/package.json +1 -1
@@ -13,7 +13,10 @@ describe('DisabledDiagnosticianRunner', () => {
13
13
  expect(result.status).toBe('failed');
14
14
  expect(result.taskId).toBe('task-001');
15
15
  expect(result.errorCategory).toBe('capability_missing');
16
- expect(result.failureReason).toContain('Diagnostician pipeline is disabled');
16
+ // PRI-638: the message now names the canonical capability authority.
17
+ expect(result.failureReason).toContain('disabled by Owner configuration');
18
+ expect(result.failureReason).toContain('internalAgents.agents.diagnostician.enabled');
19
+ expect(result.nextAction).toContain('internalAgents.agents.diagnostician.enabled');
17
20
  expect(result.attemptCount).toBe(1);
18
21
  });
19
22
  it('returns the same error category for any taskId', async () => {
@@ -1 +1 @@
1
- {"version":3,"file":"pain-signal-runtime-factory-edge-cases.test.js","sourceRoot":"","sources":["../../../src/runtime-v2/__tests__/pain-signal-runtime-factory-edge-cases.test.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"pain-signal-runtime-factory-edge-cases.test.js","sourceRoot":"","sources":["../../../src/runtime-v2/__tests__/pain-signal-runtime-factory-edge-cases.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,27 @@
1
+ /**
2
+ * PRI-638 — Diagnostician capability authority: unified disabled semantics.
3
+ *
4
+ * History of this file: it started as a characterization suite that LOCKED IN
5
+ * the divergent behaviour found on main (investigation evidence for the
6
+ * two-switch matrix in `docs/plans/2026-09-pri638-diagnostician-kill-switch.md`).
7
+ * Per the issue contract ("characterization tests first, then convert them into
8
+ * the new canonical behaviour tests") the same probes now assert the CONVERGED
9
+ * semantics:
10
+ *
11
+ * Capability authority (the only one): internalAgents.agents.diagnostician.enabled
12
+ * Disabled representation: errorCategory 'capability_missing' +
13
+ * FailureCategory 'capability_disabled'
14
+ * Pain persistence: the durable diagnosis task is created
15
+ * even when the capability is disabled
16
+ * Retry budget: attemptCount untouched by a disabled run
17
+ * Provider calls: 0 on every disabled path
18
+ * Recovery: re-enable → executePendingDiagnosis /
19
+ * `pd pain retry` resumes the same task
20
+ *
21
+ * Everything below runs real production wiring: computeEffectivePdConfig →
22
+ * createPainSignalBridge → PainSignalBridge → RuntimeStateManager (real SQLite
23
+ * on a temp workspace). The provider entry point
24
+ * (OpenClawCliRuntimeAdapter.startRun) is stubbed so probes stay deterministic.
25
+ */
26
+ export {};
27
+ //# sourceMappingURL=pri638-diagnostician-capability-characterization.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pri638-diagnostician-capability-characterization.test.d.ts","sourceRoot":"","sources":["../../../src/runtime-v2/__tests__/pri638-diagnostician-capability-characterization.test.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;GAwBG"}
@@ -0,0 +1,449 @@
1
+ /**
2
+ * PRI-638 — Diagnostician capability authority: unified disabled semantics.
3
+ *
4
+ * History of this file: it started as a characterization suite that LOCKED IN
5
+ * the divergent behaviour found on main (investigation evidence for the
6
+ * two-switch matrix in `docs/plans/2026-09-pri638-diagnostician-kill-switch.md`).
7
+ * Per the issue contract ("characterization tests first, then convert them into
8
+ * the new canonical behaviour tests") the same probes now assert the CONVERGED
9
+ * semantics:
10
+ *
11
+ * Capability authority (the only one): internalAgents.agents.diagnostician.enabled
12
+ * Disabled representation: errorCategory 'capability_missing' +
13
+ * FailureCategory 'capability_disabled'
14
+ * Pain persistence: the durable diagnosis task is created
15
+ * even when the capability is disabled
16
+ * Retry budget: attemptCount untouched by a disabled run
17
+ * Provider calls: 0 on every disabled path
18
+ * Recovery: re-enable → executePendingDiagnosis /
19
+ * `pd pain retry` resumes the same task
20
+ *
21
+ * Everything below runs real production wiring: computeEffectivePdConfig →
22
+ * createPainSignalBridge → PainSignalBridge → RuntimeStateManager (real SQLite
23
+ * on a temp workspace). The provider entry point
24
+ * (OpenClawCliRuntimeAdapter.startRun) is stubbed so probes stay deterministic.
25
+ */
26
+ import fs from 'node:fs';
27
+ import os from 'node:os';
28
+ import path from 'node:path';
29
+ import { afterEach, describe, expect, it, vi } from 'vitest';
30
+ import { createPainSignalBridge, disposePainSignalBridgesForWorkspace, DisabledDiagnosticianRunner, DIAGNOSTICIAN_DISABLED_FAILURE_REASON, } from '../pain-signal-runtime-factory.js';
31
+ import { OpenClawCliRuntimeAdapter } from '../adapter/openclaw-cli-runtime-adapter.js';
32
+ import { PrincipleTreeLedgerAdapter } from '../adapter/principle-tree-ledger-adapter.js';
33
+ import { RuntimeStateManager } from '../store/runtime-state-manager.js';
34
+ import { PainSignalBridge } from '../pain-signal-bridge.js';
35
+ import { CandidateIntakeService } from '../candidate-intake-service.js';
36
+ import { computeEffectivePdConfig, getDefaultPdConfig } from '../config/index.js';
37
+ // ── Fixtures ─────────────────────────────────────────────────────────────────
38
+ const workspaces = [];
39
+ const managers = [];
40
+ function makeWorkspace() {
41
+ const dir = fs.mkdtempSync(path.join(os.tmpdir(), 'pd-pri638-'));
42
+ workspaces.push(dir);
43
+ return dir;
44
+ }
45
+ afterEach(async () => {
46
+ for (const mgr of managers.splice(0)) {
47
+ try {
48
+ await mgr.close();
49
+ }
50
+ catch { /* best-effort */ }
51
+ }
52
+ for (const dir of workspaces.splice(0)) {
53
+ try {
54
+ await disposePainSignalBridgesForWorkspace(dir);
55
+ }
56
+ catch { /* best-effort */ }
57
+ try {
58
+ fs.rmSync(dir, { recursive: true, force: true, maxRetries: 3, retryDelay: 20 });
59
+ }
60
+ catch { /* best-effort */ }
61
+ }
62
+ vi.restoreAllMocks();
63
+ });
64
+ function effectiveConfigFor(opts) {
65
+ const base = getDefaultPdConfig();
66
+ const config = {
67
+ ...base,
68
+ runtimeProfiles: {
69
+ ...base.runtimeProfiles,
70
+ 'pri638-openclaw': { type: 'openclaw', provider: 'lmstudio', model: 'qwen3.6-27b-mtp' },
71
+ },
72
+ internalAgents: {
73
+ defaultRuntime: base.internalAgents.defaultRuntime,
74
+ agents: {
75
+ ...base.internalAgents.agents,
76
+ diagnostician: {
77
+ enabled: opts.agentEnabled,
78
+ runtimeProfile: 'pri638-openclaw',
79
+ },
80
+ },
81
+ },
82
+ features: {
83
+ ...base.features,
84
+ // splitPipeline stays configurable only to prove it no longer decides
85
+ // anything about capability.
86
+ ...(opts.splitPipeline === undefined ? {} : { diagnostician_split_pipeline: { category: 'quiet', enabled: opts.splitPipeline } }),
87
+ },
88
+ };
89
+ return computeEffectivePdConfig(config);
90
+ }
91
+ const PAIN_ID = 'pain-pri638-1';
92
+ const TASK_ID = `diagnosis_${PAIN_ID}`;
93
+ function makeOutput(rootCause, over = {}) {
94
+ return {
95
+ valid: true,
96
+ diagnosisId: 'diag-638',
97
+ summary: 'PRI-638 recovery probe diagnosis',
98
+ rootCause,
99
+ violatedPrinciples: [],
100
+ evidence: [{ sourceRef: 'tool_calls:1', note: 'characterization evidence' }],
101
+ recommendations: [{ kind: 'defer', description: 'no actionable principle' }],
102
+ confidence: 0.7,
103
+ ...over,
104
+ };
105
+ }
106
+ // ── Unified disabled semantics ───────────────────────────────────────────────
107
+ describe('PRI-638 — unified disabled semantics (capability = internalAgents.diagnostician.enabled)', () => {
108
+ it('capability disabled: bridge still constructs, Pain persists, structured capability_missing, zero provider calls', async () => {
109
+ const workspaceDir = makeWorkspace();
110
+ const stateDir = path.join(workspaceDir, '.state');
111
+ fs.mkdirSync(stateDir, { recursive: true });
112
+ const startRunSpy = vi
113
+ .spyOn(OpenClawCliRuntimeAdapter.prototype, 'startRun')
114
+ .mockRejectedValue(new Error('pri638-probe: provider boundary reached'));
115
+ startRunSpy.mockClear();
116
+ const bridge = await createPainSignalBridge({
117
+ workspaceDir,
118
+ stateDir,
119
+ ledgerAdapter: new PrincipleTreeLedgerAdapter({ stateDir }),
120
+ owner: 'pri638',
121
+ effectiveConfig: effectiveConfigFor({ agentEnabled: false }),
122
+ getEnvVar: () => undefined,
123
+ });
124
+ const result = await bridge.onPainDetected({
125
+ painId: PAIN_ID,
126
+ painType: 'user_frustration',
127
+ source: 'manual',
128
+ reason: 'PRI-638 probe',
129
+ score: 80,
130
+ sessionId: 'pri638-session',
131
+ agentId: 'pri638',
132
+ evidence: [{ sourceRef: 'tool_calls:1', note: 'characterization evidence' }],
133
+ });
134
+ expect(result.status).toBe('failed');
135
+ expect(result.errorCategory).toBe('capability_missing');
136
+ expect(result.nextAction).toContain('internalAgents.agents.diagnostician.enabled');
137
+ // Pain evidence survived: the durable diagnosis task exists.
138
+ const reader = new RuntimeStateManager({ workspaceDir });
139
+ managers.push(reader);
140
+ await reader.initialize();
141
+ const task = await reader.getTask(TASK_ID);
142
+ expect(task).not.toBeNull();
143
+ expect(task?.status).toBe('pending');
144
+ // A capability-disabled run is not an attempt: no LLM retry budget burned.
145
+ expect(task?.attemptCount).toBe(0);
146
+ // Kill switch sits at the capability boundary — the provider was never touched.
147
+ expect(startRunSpy.mock.calls).toHaveLength(0);
148
+ });
149
+ it('capability disabled holds for BOTH split flag values (the flag no longer decides capability)', async () => {
150
+ for (const splitPipeline of [true, false]) {
151
+ const workspaceDir = makeWorkspace();
152
+ const stateDir = path.join(workspaceDir, '.state');
153
+ fs.mkdirSync(stateDir, { recursive: true });
154
+ const bridge = await createPainSignalBridge({
155
+ workspaceDir,
156
+ stateDir,
157
+ ledgerAdapter: new PrincipleTreeLedgerAdapter({ stateDir }),
158
+ owner: 'pri638',
159
+ effectiveConfig: effectiveConfigFor({ agentEnabled: false, splitPipeline }),
160
+ getEnvVar: () => undefined,
161
+ });
162
+ const painId = `pain-pri638-split-${splitPipeline}`;
163
+ const result = await bridge.onPainDetected({
164
+ painId,
165
+ painType: 'user_frustration',
166
+ source: 'manual',
167
+ reason: 'PRI-638 probe',
168
+ score: 80,
169
+ sessionId: 'pri638-session',
170
+ agentId: 'pri638',
171
+ evidence: [{ sourceRef: 'tool_calls:1', note: 'characterization evidence' }],
172
+ });
173
+ expect(result.status).toBe('failed');
174
+ expect(result.errorCategory).toBe('capability_missing');
175
+ expect(result.message).toContain('disabled');
176
+ // Pain persisted under BOTH flag values — identical durable outcome.
177
+ const reader = new RuntimeStateManager({ workspaceDir });
178
+ managers.push(reader);
179
+ await reader.initialize();
180
+ expect(await reader.getTask(`diagnosis_${painId}`)).not.toBeNull();
181
+ }
182
+ });
183
+ it('fully enabled normal path is unchanged: bridge constructs through the normal capability path', async () => {
184
+ const workspaceDir = makeWorkspace();
185
+ const stateDir = path.join(workspaceDir, '.state');
186
+ fs.mkdirSync(stateDir, { recursive: true });
187
+ const bridge = await createPainSignalBridge({
188
+ workspaceDir,
189
+ stateDir,
190
+ ledgerAdapter: new PrincipleTreeLedgerAdapter({ stateDir }),
191
+ owner: 'pri638',
192
+ effectiveConfig: effectiveConfigFor({ agentEnabled: true }),
193
+ getEnvVar: () => undefined,
194
+ });
195
+ // The pipeline run itself is not probed here: its per-stage budget
196
+ // (timeoutMs/3 = 100s) is unfit for a unit suite and is already covered by
197
+ // diag-chain-e2e / golden-path-diagnostician-e2e. The structural fact this
198
+ // suite must pin is that the enabled path still constructs a live bridge.
199
+ expect(bridge).toBeDefined();
200
+ });
201
+ });
202
+ // ── Recovery contract ────────────────────────────────────────────────────────
203
+ describe('PRI-638 — recovery contract (disabled → re-enable → diagnosis resumes)', () => {
204
+ it('disabled run leaves a pending task; after re-enable the same task completes', async () => {
205
+ const workspaceDir = makeWorkspace();
206
+ const stateDir = path.join(workspaceDir, '.state');
207
+ fs.mkdirSync(stateDir, { recursive: true });
208
+ const ledgerAdapter = new PrincipleTreeLedgerAdapter({ stateDir });
209
+ // Phase 1 — capability disabled: the pain lands, no diagnosis runs.
210
+ const disabledBridge = await createPainSignalBridge({
211
+ workspaceDir,
212
+ stateDir,
213
+ ledgerAdapter,
214
+ owner: 'pri638',
215
+ effectiveConfig: effectiveConfigFor({ agentEnabled: false }),
216
+ getEnvVar: () => undefined,
217
+ });
218
+ const disabledResult = await disabledBridge.onPainDetected({
219
+ painId: PAIN_ID,
220
+ painType: 'user_frustration',
221
+ source: 'manual',
222
+ reason: 'PRI-638 recovery probe',
223
+ score: 80,
224
+ sessionId: 'pri638-session',
225
+ agentId: 'pri638',
226
+ evidence: [{ sourceRef: 'tool_calls:1', note: 'recovery probe evidence' }],
227
+ });
228
+ expect(disabledResult.status).toBe('failed');
229
+ expect(disabledResult.errorCategory).toBe('capability_missing');
230
+ // Phase 2 — Owner re-enables the agent. The SAME task (same taskId, same
231
+ // pain identity) is picked up and completes. The runner here is a stub
232
+ // standing in for the split pipeline (whose 100s-per-stage budget is unfit
233
+ // for a unit suite); everything around it — task store, lease semantics,
234
+ // diagnosis persistence, candidate intake — is the real production path.
235
+ const stateManager = new RuntimeStateManager({ workspaceDir });
236
+ managers.push(stateManager);
237
+ await stateManager.initialize();
238
+ const runnerStub = {
239
+ // The real committer marks the task succeeded when the router commits;
240
+ // the stub reproduces exactly that transition.
241
+ run: vi.fn(async (taskId) => {
242
+ await stateManager.updateTask(taskId, { status: 'succeeded', attemptCount: 1 });
243
+ return {
244
+ status: 'succeeded',
245
+ taskId,
246
+ output: makeOutput('People: agent skipped the argument validation step'),
247
+ attemptCount: 1,
248
+ };
249
+ }),
250
+ };
251
+ const recoveryBridge = new PainSignalBridge({
252
+ stateManager,
253
+ runner: runnerStub,
254
+ intakeService: new CandidateIntakeService({ stateManager, ledgerAdapter }),
255
+ ledgerAdapter,
256
+ workspaceDir,
257
+ owner: 'pri638-recovery',
258
+ });
259
+ const recovered = await recoveryBridge.executePendingDiagnosis({ taskId: TASK_ID });
260
+ expect(runnerStub.run).toHaveBeenCalledWith(TASK_ID);
261
+ // The SAME task, created while the capability was disabled, completed
262
+ // after re-enable — no data loss, no re-admission needed.
263
+ expect(recovered.errorCategory).not.toBe('capability_missing');
264
+ const task = await stateManager.getTask(TASK_ID);
265
+ expect(task?.status).toBe('succeeded');
266
+ });
267
+ it('DisabledDiagnosticianRunner carries the canonical reason and a real recovery action', async () => {
268
+ const runner = new DisabledDiagnosticianRunner();
269
+ const result = await runner.run('task-1');
270
+ expect(result.status).toBe('failed');
271
+ expect(result.errorCategory).toBe('capability_missing');
272
+ expect(result.failureReason).toBe(DIAGNOSTICIAN_DISABLED_FAILURE_REASON);
273
+ expect(result.nextAction).toContain('internalAgents.agents.diagnostician.enabled');
274
+ });
275
+ });
276
+ // ── PRI-638 P1-A: disabled re-trigger must not reset durable task state ──────
277
+ //
278
+ // Owner-disable means PAUSE, not "re-trigger". While the capability is
279
+ // disabled, re-emitting a Pain must only ensure the durable task exists; an
280
+ // existing task keeps its status / attemptCount / lastError / lease untouched.
281
+ // (This is the regression suite for the P1-A review finding.)
282
+ describe('PRI-638 P1-A — disabled re-trigger preserves durable task state', () => {
283
+ async function makeDisabledBridge(workspaceDir, stateDir) {
284
+ return createPainSignalBridge({
285
+ workspaceDir,
286
+ stateDir,
287
+ ledgerAdapter: new PrincipleTreeLedgerAdapter({ stateDir }),
288
+ owner: 'pri638-p1a',
289
+ effectiveConfig: effectiveConfigFor({ agentEnabled: false }),
290
+ getEnvVar: () => undefined,
291
+ });
292
+ }
293
+ function painData(painId) {
294
+ return {
295
+ painId,
296
+ painType: 'user_frustration',
297
+ source: 'manual',
298
+ reason: 'PRI-638 P1-A probe',
299
+ score: 80,
300
+ sessionId: 'pri638-session',
301
+ agentId: 'pri638',
302
+ evidence: [{ sourceRef: 'tool_calls:1', note: 'evidence' }],
303
+ };
304
+ }
305
+ it('A1: new Pain while disabled → task created pending, attemptCount 0, provider 0', async () => {
306
+ const workspaceDir = makeWorkspace();
307
+ const stateDir = path.join(workspaceDir, '.state');
308
+ fs.mkdirSync(stateDir, { recursive: true });
309
+ const startRunSpy = vi.spyOn(OpenClawCliRuntimeAdapter.prototype, 'startRun').mockRejectedValue(new Error('probe'));
310
+ startRunSpy.mockClear();
311
+ const bridge = await makeDisabledBridge(workspaceDir, stateDir);
312
+ const result = await bridge.onPainDetected(painData('pain-p1a-new'));
313
+ expect(result.status).toBe('failed');
314
+ expect(result.errorCategory).toBe('capability_missing');
315
+ const reader = new RuntimeStateManager({ workspaceDir });
316
+ managers.push(reader);
317
+ await reader.initialize();
318
+ const task = await reader.getTask('diagnosis_pain-p1a-new');
319
+ expect(task?.status).toBe('pending');
320
+ expect(task?.attemptCount).toBe(0);
321
+ expect(startRunSpy.mock.calls).toHaveLength(0);
322
+ });
323
+ it('A2: existing pending keeps attemptCount + lastError', async () => {
324
+ const workspaceDir = makeWorkspace();
325
+ const stateDir = path.join(workspaceDir, '.state');
326
+ fs.mkdirSync(stateDir, { recursive: true });
327
+ const writer = new RuntimeStateManager({ workspaceDir });
328
+ managers.push(writer);
329
+ await writer.initialize();
330
+ await writer.createTask({
331
+ taskId: 'diagnosis_pain-p1a-pending',
332
+ taskKind: 'diagnostician',
333
+ inputRef: 'pain-p1a-pending',
334
+ status: 'pending',
335
+ attemptCount: 1,
336
+ maxAttempts: 3,
337
+ lastError: 'timeout',
338
+ diagnosticJson: JSON.stringify({ painId: 'pain-p1a-pending', evidence: [] }),
339
+ });
340
+ const bridge = await makeDisabledBridge(workspaceDir, stateDir);
341
+ const result = await bridge.onPainDetected(painData('pain-p1a-pending'));
342
+ expect(result.errorCategory).toBe('capability_missing');
343
+ const task = await writer.getTask('diagnosis_pain-p1a-pending');
344
+ expect(task?.status).toBe('pending');
345
+ expect(task?.attemptCount).toBe(1);
346
+ expect(task?.lastError).toBe('timeout');
347
+ });
348
+ it('A3: retry_wait keeps status/attemptCount/lastError/lease unchanged', async () => {
349
+ const workspaceDir = makeWorkspace();
350
+ const stateDir = path.join(workspaceDir, '.state');
351
+ fs.mkdirSync(stateDir, { recursive: true });
352
+ const leaseExpiresAt = new Date(Date.now() + 60_000).toISOString();
353
+ const writer = new RuntimeStateManager({ workspaceDir });
354
+ managers.push(writer);
355
+ await writer.initialize();
356
+ await writer.createTask({
357
+ taskId: 'diagnosis_pain-p1a-retrywait',
358
+ taskKind: 'diagnostician',
359
+ inputRef: 'pain-p1a-retrywait',
360
+ status: 'retry_wait',
361
+ attemptCount: 2,
362
+ maxAttempts: 3,
363
+ lastError: 'timeout',
364
+ leaseExpiresAt,
365
+ diagnosticJson: JSON.stringify({ painId: 'pain-p1a-retrywait', evidence: [] }),
366
+ });
367
+ const bridge = await makeDisabledBridge(workspaceDir, stateDir);
368
+ await bridge.onPainDetected(painData('pain-p1a-retrywait'));
369
+ const task = await writer.getTask('diagnosis_pain-p1a-retrywait');
370
+ expect(task?.status).toBe('retry_wait');
371
+ expect(task?.attemptCount).toBe(2);
372
+ expect(task?.lastError).toBe('timeout');
373
+ expect(task?.leaseExpiresAt).toBe(leaseExpiresAt);
374
+ });
375
+ it('A4: failed task is never resurrected by a disabled re-trigger', async () => {
376
+ const workspaceDir = makeWorkspace();
377
+ const stateDir = path.join(workspaceDir, '.state');
378
+ fs.mkdirSync(stateDir, { recursive: true });
379
+ const writer = new RuntimeStateManager({ workspaceDir });
380
+ managers.push(writer);
381
+ await writer.initialize();
382
+ await writer.createTask({
383
+ taskId: 'diagnosis_pain-p1a-failed',
384
+ taskKind: 'diagnostician',
385
+ inputRef: 'pain-p1a-failed',
386
+ status: 'failed',
387
+ attemptCount: 3,
388
+ maxAttempts: 3,
389
+ lastError: 'max_attempts_exceeded',
390
+ diagnosticJson: JSON.stringify({ painId: 'pain-p1a-failed', evidence: [] }),
391
+ });
392
+ const bridge = await makeDisabledBridge(workspaceDir, stateDir);
393
+ await bridge.onPainDetected(painData('pain-p1a-failed'));
394
+ const task = await writer.getTask('diagnosis_pain-p1a-failed');
395
+ expect(task?.status).toBe('failed');
396
+ expect(task?.attemptCount).toBe(3);
397
+ expect(task?.lastError).toBe('max_attempts_exceeded');
398
+ });
399
+ it('A5: needs_human_review task is never resurrected', async () => {
400
+ const workspaceDir = makeWorkspace();
401
+ const stateDir = path.join(workspaceDir, '.state');
402
+ fs.mkdirSync(stateDir, { recursive: true });
403
+ const writer = new RuntimeStateManager({ workspaceDir });
404
+ managers.push(writer);
405
+ await writer.initialize();
406
+ await writer.createTask({
407
+ taskId: 'diagnosis_pain-p1a-nhr',
408
+ taskKind: 'diagnostician',
409
+ inputRef: 'pain-p1a-nhr',
410
+ status: 'needs_human_review',
411
+ attemptCount: 2,
412
+ maxAttempts: 3,
413
+ lastError: 'output_invalid',
414
+ diagnosticJson: JSON.stringify({ painId: 'pain-p1a-nhr', evidence: [] }),
415
+ });
416
+ const bridge = await makeDisabledBridge(workspaceDir, stateDir);
417
+ await bridge.onPainDetected(painData('pain-p1a-nhr'));
418
+ const task = await writer.getTask('diagnosis_pain-p1a-nhr');
419
+ expect(task?.status).toBe('needs_human_review');
420
+ expect(task?.attemptCount).toBe(2);
421
+ });
422
+ it('A6: succeeded task stays idempotent while disabled', async () => {
423
+ const workspaceDir = makeWorkspace();
424
+ const stateDir = path.join(workspaceDir, '.state');
425
+ fs.mkdirSync(stateDir, { recursive: true });
426
+ const writer = new RuntimeStateManager({ workspaceDir });
427
+ managers.push(writer);
428
+ await writer.initialize();
429
+ await writer.createTask({
430
+ taskId: 'diagnosis_pain-p1a-done',
431
+ taskKind: 'diagnostician',
432
+ inputRef: 'pain-p1a-done',
433
+ status: 'succeeded',
434
+ attemptCount: 1,
435
+ maxAttempts: 3,
436
+ diagnosticJson: JSON.stringify({ painId: 'pain-p1a-done', evidence: [] }),
437
+ });
438
+ const bridge = await makeDisabledBridge(workspaceDir, stateDir);
439
+ const result = await bridge.onPainDetected(painData('pain-p1a-done'));
440
+ // Idempotent semantics preserved: the disabled path reports the existing
441
+ // result through buildExistingResult (its status follows the existing
442
+ // no-candidates shaping), and crucially the task is NOT reset.
443
+ expect(result.errorCategory).not.toBe('capability_missing');
444
+ const task = await writer.getTask('diagnosis_pain-p1a-done');
445
+ expect(task?.status).toBe('succeeded');
446
+ expect(task?.attemptCount).toBe(1);
447
+ });
448
+ });
449
+ //# sourceMappingURL=pri638-diagnostician-capability-characterization.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pri638-diagnostician-capability-characterization.test.js","sourceRoot":"","sources":["../../../src/runtime-v2/__tests__/pri638-diagnostician-capability-characterization.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=pri638-p1d-error-classification.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pri638-p1d-error-classification.test.d.ts","sourceRoot":"","sources":["../../../src/runtime-v2/__tests__/pri638-p1d-error-classification.test.ts"],"names":[],"mappings":""}