@principles/core 1.124.0 → 1.126.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.
Files changed (130) hide show
  1. package/dist/runtime-v2/__tests__/architecture-regression.test.js +5 -1
  2. package/dist/runtime-v2/__tests__/architecture-regression.test.js.map +1 -1
  3. package/dist/runtime-v2/__tests__/attack-e2e-pipeline-smoke.test.js +115 -21
  4. package/dist/runtime-v2/__tests__/attack-e2e-pipeline-smoke.test.js.map +1 -1
  5. package/dist/runtime-v2/__tests__/golden-path-diagnostician-e2e.test.js.map +1 -1
  6. package/dist/runtime-v2/__tests__/pain-signal-bridge-retried.test.js +7 -6
  7. package/dist/runtime-v2/__tests__/pain-signal-bridge-retried.test.js.map +1 -1
  8. package/dist/runtime-v2/__tests__/pain-signal-bridge-short-circuit.test.js.map +1 -1
  9. package/dist/runtime-v2/__tests__/pain-signal-bridge-workspace-dir.test.js.map +1 -1
  10. package/dist/runtime-v2/cli/diagnose.d.ts +2 -2
  11. package/dist/runtime-v2/cli/diagnose.d.ts.map +1 -1
  12. package/dist/runtime-v2/config/__tests__/pd-config-contract.test.js +3 -3
  13. package/dist/runtime-v2/config/__tests__/pd-config-contract.test.js.map +1 -1
  14. package/dist/runtime-v2/config/pd-config-defaults.js +2 -2
  15. package/dist/runtime-v2/config/pd-config-defaults.js.map +1 -1
  16. package/dist/runtime-v2/diagnostician-prompt-builder.d.ts +1 -64
  17. package/dist/runtime-v2/diagnostician-prompt-builder.d.ts.map +1 -1
  18. package/dist/runtime-v2/diagnostician-prompt-builder.js +0 -186
  19. package/dist/runtime-v2/diagnostician-prompt-builder.js.map +1 -1
  20. package/dist/runtime-v2/feature-flags/__tests__/feature-flag-contract.test.js +17 -30
  21. package/dist/runtime-v2/feature-flags/__tests__/feature-flag-contract.test.js.map +1 -1
  22. package/dist/runtime-v2/feature-flags/feature-flag-contract.d.ts.map +1 -1
  23. package/dist/runtime-v2/feature-flags/feature-flag-contract.js +3 -8
  24. package/dist/runtime-v2/feature-flags/feature-flag-contract.js.map +1 -1
  25. package/dist/runtime-v2/index.d.ts +8 -7
  26. package/dist/runtime-v2/index.d.ts.map +1 -1
  27. package/dist/runtime-v2/index.js +8 -5
  28. package/dist/runtime-v2/index.js.map +1 -1
  29. package/dist/runtime-v2/internalization/__tests__/diag-chain-e2e.test.js +108 -105
  30. package/dist/runtime-v2/internalization/__tests__/diag-chain-e2e.test.js.map +1 -1
  31. package/dist/runtime-v2/internalization/__tests__/runnerkind-seam.test.js +3 -3
  32. package/dist/runtime-v2/internalization/__tests__/runnerkind-seam.test.js.map +1 -1
  33. package/dist/runtime-v2/internalization/split-diagnostician-runner.d.ts.map +1 -1
  34. package/dist/runtime-v2/internalization/split-diagnostician-runner.js +121 -52
  35. package/dist/runtime-v2/internalization/split-diagnostician-runner.js.map +1 -1
  36. package/dist/runtime-v2/observer/__tests__/empathy-observer.real-e2e.test.js +28 -21
  37. package/dist/runtime-v2/observer/__tests__/empathy-observer.real-e2e.test.js.map +1 -1
  38. package/dist/runtime-v2/pain-signal-runtime-factory.d.ts +10 -1
  39. package/dist/runtime-v2/pain-signal-runtime-factory.d.ts.map +1 -1
  40. package/dist/runtime-v2/pain-signal-runtime-factory.js +42 -40
  41. package/dist/runtime-v2/pain-signal-runtime-factory.js.map +1 -1
  42. package/dist/runtime-v2/pain-to-principle-service.d.ts +1 -0
  43. package/dist/runtime-v2/pain-to-principle-service.d.ts.map +1 -1
  44. package/dist/runtime-v2/pain-to-principle-service.js.map +1 -1
  45. package/dist/runtime-v2/runner/__tests__/diagnose.test.js.map +1 -1
  46. package/package.json +1 -1
  47. package/dist/runtime-v2/__tests__/diagnostician-core-grounding.test.d.ts +0 -2
  48. package/dist/runtime-v2/__tests__/diagnostician-core-grounding.test.d.ts.map +0 -1
  49. package/dist/runtime-v2/__tests__/diagnostician-core-grounding.test.js +0 -122
  50. package/dist/runtime-v2/__tests__/diagnostician-core-grounding.test.js.map +0 -1
  51. package/dist/runtime-v2/diagnostician/__tests__/diagnostician-prompt-builder.integration.test.d.ts +0 -2
  52. package/dist/runtime-v2/diagnostician/__tests__/diagnostician-prompt-builder.integration.test.d.ts.map +0 -1
  53. package/dist/runtime-v2/diagnostician/__tests__/diagnostician-prompt-builder.integration.test.js +0 -169
  54. package/dist/runtime-v2/diagnostician/__tests__/diagnostician-prompt-builder.integration.test.js.map +0 -1
  55. package/dist/runtime-v2/diagnostician/__tests__/diagnostician-prompt-builder.test.d.ts +0 -2
  56. package/dist/runtime-v2/diagnostician/__tests__/diagnostician-prompt-builder.test.d.ts.map +0 -1
  57. package/dist/runtime-v2/diagnostician/__tests__/diagnostician-prompt-builder.test.js +0 -462
  58. package/dist/runtime-v2/diagnostician/__tests__/diagnostician-prompt-builder.test.js.map +0 -1
  59. package/dist/runtime-v2/diagnostician/__tests__/diagnostician-prompt-language.test.d.ts +0 -13
  60. package/dist/runtime-v2/diagnostician/__tests__/diagnostician-prompt-language.test.d.ts.map +0 -1
  61. package/dist/runtime-v2/diagnostician/__tests__/diagnostician-prompt-language.test.js +0 -97
  62. package/dist/runtime-v2/diagnostician/__tests__/diagnostician-prompt-language.test.js.map +0 -1
  63. package/dist/runtime-v2/runner/__tests__/diagnostician-runner.integration.test.d.ts +0 -2
  64. package/dist/runtime-v2/runner/__tests__/diagnostician-runner.integration.test.d.ts.map +0 -1
  65. package/dist/runtime-v2/runner/__tests__/diagnostician-runner.integration.test.js +0 -378
  66. package/dist/runtime-v2/runner/__tests__/diagnostician-runner.integration.test.js.map +0 -1
  67. package/dist/runtime-v2/runner/__tests__/diagnostician-runner.test.d.ts +0 -2
  68. package/dist/runtime-v2/runner/__tests__/diagnostician-runner.test.d.ts.map +0 -1
  69. package/dist/runtime-v2/runner/__tests__/diagnostician-runner.test.js +0 -682
  70. package/dist/runtime-v2/runner/__tests__/diagnostician-runner.test.js.map +0 -1
  71. package/dist/runtime-v2/runner/__tests__/diagnostician-telemetry.test.d.ts +0 -2
  72. package/dist/runtime-v2/runner/__tests__/diagnostician-telemetry.test.d.ts.map +0 -1
  73. package/dist/runtime-v2/runner/__tests__/diagnostician-telemetry.test.js +0 -286
  74. package/dist/runtime-v2/runner/__tests__/diagnostician-telemetry.test.js.map +0 -1
  75. package/dist/runtime-v2/runner/__tests__/dual-track-e2e.test.d.ts +0 -2
  76. package/dist/runtime-v2/runner/__tests__/dual-track-e2e.test.d.ts.map +0 -1
  77. package/dist/runtime-v2/runner/__tests__/dual-track-e2e.test.js +0 -320
  78. package/dist/runtime-v2/runner/__tests__/dual-track-e2e.test.js.map +0 -1
  79. package/dist/runtime-v2/runner/__tests__/lease-expiration-recovery.integration.test.d.ts +0 -2
  80. package/dist/runtime-v2/runner/__tests__/lease-expiration-recovery.integration.test.d.ts.map +0 -1
  81. package/dist/runtime-v2/runner/__tests__/lease-expiration-recovery.integration.test.js +0 -261
  82. package/dist/runtime-v2/runner/__tests__/lease-expiration-recovery.integration.test.js.map +0 -1
  83. package/dist/runtime-v2/runner/__tests__/m5-05-e2e.test.d.ts +0 -2
  84. package/dist/runtime-v2/runner/__tests__/m5-05-e2e.test.d.ts.map +0 -1
  85. package/dist/runtime-v2/runner/__tests__/m5-05-e2e.test.js +0 -405
  86. package/dist/runtime-v2/runner/__tests__/m5-05-e2e.test.js.map +0 -1
  87. package/dist/runtime-v2/runner/__tests__/m6-06-e2e.test.d.ts +0 -2
  88. package/dist/runtime-v2/runner/__tests__/m6-06-e2e.test.d.ts.map +0 -1
  89. package/dist/runtime-v2/runner/__tests__/m6-06-e2e.test.js +0 -347
  90. package/dist/runtime-v2/runner/__tests__/m6-06-e2e.test.js.map +0 -1
  91. package/dist/runtime-v2/runner/__tests__/m6-06-legacy.test.d.ts +0 -2
  92. package/dist/runtime-v2/runner/__tests__/m6-06-legacy.test.d.ts.map +0 -1
  93. package/dist/runtime-v2/runner/__tests__/m6-06-legacy.test.js +0 -186
  94. package/dist/runtime-v2/runner/__tests__/m6-06-legacy.test.js.map +0 -1
  95. package/dist/runtime-v2/runner/__tests__/m6-06-real-path.test.d.ts +0 -2
  96. package/dist/runtime-v2/runner/__tests__/m6-06-real-path.test.d.ts.map +0 -1
  97. package/dist/runtime-v2/runner/__tests__/m6-06-real-path.test.js +0 -355
  98. package/dist/runtime-v2/runner/__tests__/m6-06-real-path.test.js.map +0 -1
  99. package/dist/runtime-v2/runner/__tests__/m8-02-e2e.test.d.ts +0 -2
  100. package/dist/runtime-v2/runner/__tests__/m8-02-e2e.test.d.ts.map +0 -1
  101. package/dist/runtime-v2/runner/__tests__/m8-02-e2e.test.js +0 -486
  102. package/dist/runtime-v2/runner/__tests__/m8-02-e2e.test.js.map +0 -1
  103. package/dist/runtime-v2/runner/__tests__/m9-adapter-integration.test.d.ts +0 -2
  104. package/dist/runtime-v2/runner/__tests__/m9-adapter-integration.test.d.ts.map +0 -1
  105. package/dist/runtime-v2/runner/__tests__/m9-adapter-integration.test.js +0 -171
  106. package/dist/runtime-v2/runner/__tests__/m9-adapter-integration.test.js.map +0 -1
  107. package/dist/runtime-v2/runner/__tests__/m9-e2e.test.d.ts +0 -2
  108. package/dist/runtime-v2/runner/__tests__/m9-e2e.test.d.ts.map +0 -1
  109. package/dist/runtime-v2/runner/__tests__/m9-e2e.test.js +0 -175
  110. package/dist/runtime-v2/runner/__tests__/m9-e2e.test.js.map +0 -1
  111. package/dist/runtime-v2/runner/__tests__/max-attempts-exceeded.integration.test.d.ts +0 -2
  112. package/dist/runtime-v2/runner/__tests__/max-attempts-exceeded.integration.test.d.ts.map +0 -1
  113. package/dist/runtime-v2/runner/__tests__/max-attempts-exceeded.integration.test.js +0 -276
  114. package/dist/runtime-v2/runner/__tests__/max-attempts-exceeded.integration.test.js.map +0 -1
  115. package/dist/runtime-v2/runner/__tests__/retry-wait-recovery.integration.test.d.ts +0 -2
  116. package/dist/runtime-v2/runner/__tests__/retry-wait-recovery.integration.test.d.ts.map +0 -1
  117. package/dist/runtime-v2/runner/__tests__/retry-wait-recovery.integration.test.js +0 -272
  118. package/dist/runtime-v2/runner/__tests__/retry-wait-recovery.integration.test.js.map +0 -1
  119. package/dist/runtime-v2/runner/__tests__/start-run-input.test.d.ts +0 -2
  120. package/dist/runtime-v2/runner/__tests__/start-run-input.test.d.ts.map +0 -1
  121. package/dist/runtime-v2/runner/__tests__/start-run-input.test.js +0 -67
  122. package/dist/runtime-v2/runner/__tests__/start-run-input.test.js.map +0 -1
  123. package/dist/runtime-v2/runner/diagnostician-runner-options.d.ts +0 -57
  124. package/dist/runtime-v2/runner/diagnostician-runner-options.d.ts.map +0 -1
  125. package/dist/runtime-v2/runner/diagnostician-runner-options.js +0 -21
  126. package/dist/runtime-v2/runner/diagnostician-runner-options.js.map +0 -1
  127. package/dist/runtime-v2/runner/diagnostician-runner.d.ts +0 -89
  128. package/dist/runtime-v2/runner/diagnostician-runner.d.ts.map +0 -1
  129. package/dist/runtime-v2/runner/diagnostician-runner.js +0 -470
  130. package/dist/runtime-v2/runner/diagnostician-runner.js.map +0 -1
@@ -1,486 +0,0 @@
1
- /**
2
- * E2E m8-02 — PainSignalBridge full chain with autoIntakeEnabled.
3
- *
4
- * Machine-verifiable proof the M8 single path works end-to-end:
5
- * pain → TaskStore → DiagnosticianRunner → ledger probation entry
6
- *
7
- * Tests:
8
- * E2E-01: Full chain — pain signal → task succeeded → artifact → candidates → ledger probation entry
9
- * E2E-02: Legacy .state/diagnostician_tasks.json NOT created
10
- * E2E-03: Same painId twice — NO duplicate candidates or ledger entries
11
- * E2E-04: autoIntakeEnabled=false — candidate pending but NO ledger write
12
- * E2E-05: Leased task not interrupted by second trigger
13
- *
14
- * Uses StubRuntimeAdapter (in-process test double) — no real CLI binary needed.
15
- * Temp workspace via os.tmpdir(), cleaned after each test.
16
- */
17
- import { describe, it, expect, beforeEach, afterEach, vi } from 'vitest';
18
- import * as fs from 'fs';
19
- import * as path from 'path';
20
- import * as os from 'os';
21
- import { RuntimeStateManager } from '../../store/runtime-state-manager.js';
22
- import { SqliteContextAssembler } from '../../store/context/sqlite-context-assembler.js';
23
- import { SqliteHistoryQuery } from '../../store/history/sqlite-history-query.js';
24
- import { StoreEventEmitter } from '../../store/event-emitter.js';
25
- import { DiagnosticianRunner } from '../diagnostician-runner.js';
26
- import { PassThroughValidator } from '../diagnostician-validator.js';
27
- import { SqliteDiagnosticianCommitter } from '../../store/commit/diagnostician-committer.js';
28
- import { PainSignalBridge } from '../../pain-signal-bridge.js';
29
- import { CandidateIntakeService } from '../../candidate-intake-service.js';
30
- // ── In-memory ledger adapter for E2E testing ────────────────────────────────────
31
- class InMemoryLedgerAdapter {
32
- entries = new Map();
33
- writeProbationEntry(entry) {
34
- const candidateId = this.#extractCandidateId(entry.sourceRef);
35
- const existing = this.existsForCandidate(candidateId);
36
- if (existing)
37
- return existing;
38
- this.entries.set(candidateId, entry);
39
- return entry;
40
- }
41
- existsForCandidate(candidateId) {
42
- return this.entries.get(candidateId) ?? null;
43
- }
44
- // eslint-disable-next-line @typescript-eslint/class-methods-use-this
45
- #extractCandidateId(sourceRef) {
46
- return sourceRef.startsWith('candidate://')
47
- ? sourceRef.slice('candidate://'.length)
48
- : sourceRef;
49
- }
50
- }
51
- // ── StubRuntimeAdapter — in-process test double for PDRuntimeAdapter ──────────
52
- /**
53
- * In-process test double for PDRuntimeAdapter.
54
- * Lets tests control pollRun status and fetchOutput payload precisely.
55
- * No real CLI binary spawned.
56
- */
57
- class StubRuntimeAdapter {
58
- kindValue;
59
- nextOutput = null;
60
- nextStatus = 'succeeded';
61
- runIdCounter = 0;
62
- constructor(kindValue = 'test-double') {
63
- this.kindValue = kindValue;
64
- }
65
- setOutput(output) {
66
- this.nextOutput = output;
67
- }
68
- setRunStatus(status) {
69
- this.nextStatus = status;
70
- }
71
- kind() {
72
- return this.kindValue;
73
- }
74
- // eslint-disable-next-line @typescript-eslint/class-methods-use-this
75
- async getCapabilities() {
76
- return {
77
- supportsStructuredJsonOutput: true,
78
- supportsToolUse: false,
79
- supportsWorkingDirectory: false,
80
- supportsModelSelection: false,
81
- supportsLongRunningSessions: false,
82
- supportsCancellation: true,
83
- supportsArtifactWriteBack: false,
84
- supportsConcurrentRuns: false,
85
- supportsStreaming: false,
86
- };
87
- }
88
- // eslint-disable-next-line @typescript-eslint/class-methods-use-this
89
- async healthCheck() {
90
- return { healthy: true, degraded: false, warnings: [], lastCheckedAt: new Date().toISOString() };
91
- }
92
- async startRun(_input) {
93
- this.runIdCounter += 1;
94
- return { runId: `stub-run-${this.runIdCounter}`, runtimeKind: this.kindValue, startedAt: new Date().toISOString() };
95
- }
96
- async pollRun(runId) {
97
- return { runId, status: this.nextStatus, startedAt: new Date().toISOString(), endedAt: new Date().toISOString() };
98
- }
99
- // eslint-disable-next-line @typescript-eslint/class-methods-use-this
100
- async cancelRun(_runId) {
101
- // no-op
102
- }
103
- async fetchOutput(runId) {
104
- if (this.nextOutput === null)
105
- return null;
106
- return { runId, payload: this.nextOutput };
107
- }
108
- // eslint-disable-next-line @typescript-eslint/class-methods-use-this
109
- async fetchArtifacts(_runId) {
110
- return [];
111
- }
112
- }
113
- // ── Deferred helper ─────────────────────────────────────────────────────────────
114
- class Deferred {
115
- resolve;
116
- reject;
117
- promise;
118
- constructor() {
119
- this.promise = new Promise((resolve, reject) => {
120
- this.resolve = resolve;
121
- this.reject = reject;
122
- });
123
- }
124
- }
125
- /** StubRuntimeAdapter variant whose pollRun stays 'running' until resolved. */
126
- class _SlowStubRuntimeAdapter extends StubRuntimeAdapter {
127
- pollDeferred = new Deferred();
128
- pollCount = 0;
129
- async pollRun(runId) {
130
- this.pollCount += 1;
131
- if (this.pollCount === 1) {
132
- // First poll returns 'running' and waits
133
- this.pollDeferred.promise.then((_status) => {
134
- // This won't be called since we replace pollDeferred each time
135
- });
136
- return { runId, status: 'running', startedAt: new Date().toISOString() };
137
- }
138
- // Subsequent polls use whatever was resolved
139
- return { runId, status: 'succeeded', startedAt: new Date().toISOString(), endedAt: new Date().toISOString() };
140
- }
141
- resolvePoll(status) {
142
- this.pollDeferred.resolve(status);
143
- }
144
- setOutput(output) {
145
- // Delegate to parent so nextOutput is actually set
146
- super.setOutput(output);
147
- }
148
- }
149
- // ── Test fixtures ──────────────────────────────────────────────────────────────
150
- /**
151
- * Create DiagnosticianOutputV1 with >= 2 kind='principle' recommendations.
152
- * Per SqliteDiagnosticianCommitter, the full DiagnosticianOutputV1 JSON is stored
153
- * as artifact.content_json. CandidateIntakeService.intake() reads this via
154
- * JSON.parse(artifact.contentJson) and extracts the recommendation from it.
155
- *
156
- * The artifact.contentJson format is:
157
- * { recommendation: { title, text, triggerPattern, action } }
158
- */
159
- function makeDiagnosticianOutputWithCandidates(_taskId) {
160
- return {
161
- valid: true,
162
- diagnosisId: `diag-m8e2e-${Date.now()}-${Math.random().toString(36).slice(2, 8)}`,
163
- summary: 'E2E m8-02 test diagnosis summary',
164
- rootCause: 'E2E m8-02 root cause — missing validation before tool call',
165
- violatedPrinciples: [],
166
- evidence: [{ sourceRef: 'test', note: 'E2E test evidence' }],
167
- recommendations: [
168
- {
169
- kind: 'principle',
170
- description: 'Always validate tool arguments before execution to prevent silent failures',
171
- triggerPattern: 'missing validation before tool call',
172
- action: 'add schema validation before execution',
173
- },
174
- {
175
- kind: 'principle',
176
- description: 'Log all tool invocations with argument summaries for traceability',
177
- triggerPattern: 'tool invocation without logging',
178
- action: 'add logging to all tool invocations',
179
- },
180
- { kind: 'rule', description: 'Use schema validation for external inputs' },
181
- ],
182
- confidence: 0.92,
183
- };
184
- }
185
- // ── Test setup ─────────────────────────────────────────────────────────────────
186
- const TMP_ROOT = path.join(os.tmpdir(), `pd-e2e-m8-${process.pid}`);
187
- describe('E2E m8-02 — PainSignalBridge full chain', () => {
188
- let testDir;
189
- let stateManager;
190
- let contextAssembler;
191
- let historyQuery;
192
- let eventEmitter;
193
- let sqliteConn;
194
- let ledgerAdapter;
195
- let intakeService;
196
- let bridge;
197
- beforeEach(async () => {
198
- testDir = path.join(TMP_ROOT, `e2e-${Date.now()}-${Math.random().toString(36).slice(2)}`);
199
- fs.mkdirSync(testDir, { recursive: true });
200
- stateManager = new RuntimeStateManager({ workspaceDir: testDir });
201
- await stateManager.initialize();
202
- sqliteConn = stateManager.connection;
203
- historyQuery = new SqliteHistoryQuery(sqliteConn);
204
- const taskStore = stateManager.taskStore;
205
- const runStore = stateManager.runStore;
206
- contextAssembler = new SqliteContextAssembler(taskStore, historyQuery, runStore);
207
- eventEmitter = new StoreEventEmitter();
208
- ledgerAdapter = new InMemoryLedgerAdapter();
209
- intakeService = new CandidateIntakeService({ stateManager, ledgerAdapter });
210
- });
211
- afterEach(() => {
212
- stateManager.close();
213
- try {
214
- fs.rmSync(TMP_ROOT, { recursive: true, force: true });
215
- }
216
- catch {
217
- // ignore cleanup errors on Windows
218
- }
219
- });
220
- /**
221
- * Build a DiagnosticianRunner wired with REAL SqliteDiagnosticianCommitter.
222
- */
223
- function createRunner(runtimeAdapter) {
224
- const committer = new SqliteDiagnosticianCommitter(sqliteConn);
225
- return new DiagnosticianRunner({
226
- stateManager,
227
- contextAssembler,
228
- runtimeAdapter,
229
- eventEmitter,
230
- validator: new PassThroughValidator(),
231
- committer,
232
- }, {
233
- owner: 'e2e-m8-02-bridge',
234
- runtimeKind: 'test-double',
235
- pollIntervalMs: 50,
236
- timeoutMs: 5000,
237
- });
238
- }
239
- // ═══════════════════════════════════════════════════════════════════════════════
240
- // E2E-01: Full chain — pain → task → artifact → candidates → ledger probation
241
- // ═══════════════════════════════════════════════════════════════════════════════
242
- it('E2E-01: Full chain — pain signal → task succeeded → artifact → candidates → ledger probation entry', async () => {
243
- const painId = 'test-pain-e2e01';
244
- const expectedTaskId = `diagnosis_${painId}`;
245
- const output = makeDiagnosticianOutputWithCandidates(painId);
246
- const stubAdapter = new StubRuntimeAdapter();
247
- stubAdapter.setOutput(output);
248
- bridge = new PainSignalBridge({
249
- stateManager,
250
- runner: createRunner(stubAdapter),
251
- intakeService,
252
- ledgerAdapter,
253
- autoIntakeEnabled: true,
254
- });
255
- const result = await bridge.onPainDetected({
256
- painId,
257
- painType: 'tool_failure',
258
- source: 'test',
259
- reason: 'test failure',
260
- evidence: [{ sourceRef: 'test', note: 'E2E test evidence' }],
261
- });
262
- // E2E-01 assertion 1: taskId is distinct from painId
263
- expect(result.painId).toBe(painId);
264
- expect(result.taskId).toBe(expectedTaskId);
265
- expect(result.status).toBe('succeeded');
266
- // E2E-01 assertion 2: task record exists, status === 'succeeded'
267
- const task = await stateManager.getTask(expectedTaskId);
268
- expect(task).not.toBeNull();
269
- // eslint-disable-next-line @typescript-eslint/no-non-null-assertion
270
- expect(task.status).toBe('succeeded');
271
- // eslint-disable-next-line @typescript-eslint/no-non-null-assertion
272
- expect(task.inputRef).toBe(painId);
273
- // E2E-01 assertion 3: artifact row exists with artifact_kind === 'diagnostician_output'
274
- const db = sqliteConn.getDb();
275
- const artifactRow = db.prepare('SELECT * FROM artifacts WHERE task_id = ?').get(expectedTaskId);
276
- expect(artifactRow).toBeDefined();
277
- // eslint-disable-next-line @typescript-eslint/no-non-null-assertion
278
- expect(artifactRow.artifact_kind).toBe('diagnostician_output');
279
- // E2E-01 assertion 4: >= 1 candidate rows exist
280
- const candidateRows = db.prepare('SELECT * FROM principle_candidates WHERE task_id = ?').all(expectedTaskId);
281
- expect(candidateRows.length).toBeGreaterThanOrEqual(1);
282
- // E2E-01 assertion 5: ledger has a probation entry for each candidate
283
- for (const row of candidateRows) {
284
- const ledgerEntry = ledgerAdapter.existsForCandidate(row.candidate_id);
285
- expect(ledgerEntry).not.toBeNull();
286
- // eslint-disable-next-line @typescript-eslint/no-non-null-assertion
287
- expect(ledgerEntry.status).toBe('probation');
288
- }
289
- });
290
- // ═══════════════════════════════════════════════════════════════════════════════
291
- // E2E-02: Legacy path NOT created
292
- // ═══════════════════════════════════════════════════════════════════════════════
293
- it('E2E-02: Legacy .state/diagnostician_tasks.json NOT created', async () => {
294
- const painId = 'test-pain-e2e02';
295
- const output = makeDiagnosticianOutputWithCandidates(painId);
296
- const stubAdapter = new StubRuntimeAdapter();
297
- stubAdapter.setOutput(output);
298
- bridge = new PainSignalBridge({
299
- stateManager,
300
- runner: createRunner(stubAdapter),
301
- intakeService,
302
- ledgerAdapter,
303
- autoIntakeEnabled: true,
304
- });
305
- await bridge.onPainDetected({
306
- painId,
307
- painType: 'tool_failure',
308
- source: 'test',
309
- reason: 'test failure',
310
- evidence: [{ sourceRef: 'test', note: 'E2E test evidence' }],
311
- });
312
- // E2E-02: .state/diagnostician_tasks.json does NOT exist
313
- const legacyPath = path.join(testDir, '.state', 'diagnostician_tasks.json');
314
- expect(fs.existsSync(legacyPath)).toBe(false);
315
- });
316
- // ═══════════════════════════════════════════════════════════════════════════════
317
- // E2E-03: Same painId twice — NO duplicate candidates
318
- // ═══════════════════════════════════════════════════════════════════════════════
319
- it('E2E-03: Same painId twice — NO duplicate candidates or ledger entries', async () => {
320
- const painId = 'test-pain-idempotent';
321
- const expectedTaskId = `diagnosis_${painId}`;
322
- const output = makeDiagnosticianOutputWithCandidates(painId);
323
- const stubAdapter = new StubRuntimeAdapter();
324
- stubAdapter.setOutput(output);
325
- bridge = new PainSignalBridge({
326
- stateManager,
327
- runner: createRunner(stubAdapter),
328
- intakeService,
329
- ledgerAdapter,
330
- autoIntakeEnabled: true,
331
- });
332
- // First call
333
- const firstResult = await bridge.onPainDetected({
334
- painId,
335
- painType: 'tool_failure',
336
- source: 'test',
337
- reason: 'test',
338
- evidence: [{ sourceRef: 'test', note: 'E2E test evidence' }],
339
- });
340
- expect(firstResult.taskId).toBe(expectedTaskId);
341
- expect(firstResult.status).toBe('succeeded');
342
- // Record candidate count after first call
343
- const db = sqliteConn.getDb();
344
- const firstCandidateRows = db.prepare('SELECT * FROM principle_candidates WHERE task_id = ?').all(expectedTaskId);
345
- const firstCandidateCount = firstCandidateRows.length;
346
- expect(firstCandidateCount).toBeGreaterThanOrEqual(1);
347
- // Second call with SAME painId — should NO-OP (task already succeeded → Rule a)
348
- const secondResult = await bridge.onPainDetected({
349
- painId,
350
- painType: 'tool_failure',
351
- source: 'test',
352
- reason: 'test',
353
- evidence: [{ sourceRef: 'test', note: 'E2E test evidence' }],
354
- });
355
- expect(secondResult.taskId).toBe(expectedTaskId);
356
- expect(secondResult.status).toBe('succeeded');
357
- // E2E-03 assertion 1: candidate count is UNCHANGED
358
- const secondCandidateRows = db.prepare('SELECT * FROM principle_candidates WHERE task_id = ?').all(expectedTaskId);
359
- expect(secondCandidateRows.length).toBe(firstCandidateCount);
360
- // E2E-03 assertion 2: task status === 'succeeded'
361
- const task = await stateManager.getTask(expectedTaskId);
362
- expect(task).not.toBeNull();
363
- // eslint-disable-next-line @typescript-eslint/no-non-null-assertion
364
- expect(task.status).toBe('succeeded');
365
- });
366
- // ═══════════════════════════════════════════════════════════════════════════════
367
- // E2E-04: autoIntakeEnabled=false
368
- // ═══════════════════════════════════════════════════════════════════════════════
369
- it('E2E-04: autoIntakeEnabled=false — candidates exist but NO ledger write', async () => {
370
- const painId = 'test-pain-no-intake';
371
- const expectedTaskId = `diagnosis_${painId}`;
372
- const output = makeDiagnosticianOutputWithCandidates(painId);
373
- const stubAdapter = new StubRuntimeAdapter();
374
- stubAdapter.setOutput(output);
375
- const bridgeNoIntake = new PainSignalBridge({
376
- stateManager,
377
- runner: createRunner(stubAdapter),
378
- intakeService,
379
- ledgerAdapter,
380
- autoIntakeEnabled: false, // debug mode — no ledger write
381
- });
382
- const result = await bridgeNoIntake.onPainDetected({
383
- painId,
384
- painType: 'tool_failure',
385
- source: 'test',
386
- reason: 'test failure',
387
- evidence: [{ sourceRef: 'test', note: 'E2E test evidence' }],
388
- });
389
- expect(result.taskId).toBe(expectedTaskId);
390
- // E2E-04 assertion 1: task record exists, status === 'succeeded'
391
- const task = await stateManager.getTask(expectedTaskId);
392
- expect(task).not.toBeNull();
393
- // eslint-disable-next-line @typescript-eslint/no-non-null-assertion
394
- expect(task.status).toBe('succeeded');
395
- // E2E-04 assertion 2: candidate rows exist
396
- const db = sqliteConn.getDb();
397
- const candidateRows = db.prepare('SELECT * FROM principle_candidates WHERE task_id = ?').all(expectedTaskId);
398
- expect(candidateRows.length).toBeGreaterThanOrEqual(1);
399
- // E2E-04 assertion 3: ledger has NO entry for these candidates
400
- for (const row of candidateRows) {
401
- const ledgerEntry = ledgerAdapter.existsForCandidate(row.candidate_id);
402
- expect(ledgerEntry).toBeNull();
403
- }
404
- });
405
- // ═══════════════════════════════════════════════════════════════════════════════
406
- // E2E-05: Leased task not interrupted
407
- // ═══════════════════════════════════════════════════════════════════════════════
408
- it('E2E-05: Second trigger returns immediately while first run in-flight', async () => {
409
- const painId = 'test-pain-lease';
410
- const expectedTaskId = `diagnosis_${painId}`;
411
- // Track runner.run() invocations
412
- let runnerRunCallCount = 0;
413
- // Slow adapter: first pollRun takes 200ms (blocks), subsequent succeed immediately.
414
- // This gives us a window where the first call is in pollUntilTerminal while
415
- // we fire the second call.
416
- let pollCallCount = 0;
417
- const slowAdapter = new StubRuntimeAdapter();
418
- slowAdapter.setOutput(makeDiagnosticianOutputWithCandidates(painId));
419
- vi.spyOn(slowAdapter, 'pollRun').mockImplementation(async (runId) => {
420
- pollCallCount += 1;
421
- if (pollCallCount === 1) {
422
- // First poll: delay 200ms to simulate long-running task.
423
- // During this time, the second pain signal fires.
424
- await new Promise((r) => setTimeout(r, 200));
425
- return { runId, status: 'succeeded', startedAt: new Date().toISOString(), endedAt: new Date().toISOString() };
426
- }
427
- return { runId, status: 'succeeded', startedAt: new Date().toISOString(), endedAt: new Date().toISOString() };
428
- });
429
- function countingRunner(adapter) {
430
- const runner = createRunner(adapter);
431
- const originalRun = runner.run.bind(runner);
432
- runner.run = async (taskId) => {
433
- runnerRunCallCount += 1;
434
- return originalRun(taskId);
435
- };
436
- return runner;
437
- }
438
- bridge = new PainSignalBridge({
439
- stateManager,
440
- runner: countingRunner(slowAdapter),
441
- intakeService,
442
- ledgerAdapter,
443
- autoIntakeEnabled: true,
444
- });
445
- const startTime = Date.now();
446
- // Fire first call — DiagnosticianRunner.run() will:
447
- // 1. acquireLease (sets task to 'leased')
448
- // 2. startRun
449
- // 3. pollUntilTerminal (calls pollRun which blocks 200ms)
450
- const firstPromise = bridge.onPainDetected({
451
- painId,
452
- painType: 'tool_failure',
453
- source: 'test',
454
- reason: 'test failure',
455
- evidence: [{ sourceRef: 'test', note: 'E2E test evidence' }],
456
- });
457
- // Wait 50ms — first call should be inside pollUntilTerminal by now
458
- await new Promise((r) => setTimeout(r, 50));
459
- // Fire second call while first is still in pollUntilTerminal
460
- const secondResult = await bridge.onPainDetected({
461
- painId,
462
- painType: 'tool_failure',
463
- source: 'test',
464
- reason: 'test failure',
465
- evidence: [{ sourceRef: 'test', note: 'E2E test evidence' }],
466
- });
467
- const secondCallReturnTime = Date.now() - startTime;
468
- // E2E-05 assertion 1: second call returns in < 200ms (proves it didn't wait for first run)
469
- // If it waited for the first run to complete, second call would take ~200ms+
470
- expect(secondCallReturnTime).toBeLessThan(200);
471
- // E2E-05 assertion 2: second call returns the SKIP result for the same task
472
- expect(secondResult.status).toBe('skipped');
473
- expect(secondResult.painId).toBe(painId);
474
- expect(secondResult.taskId).toBe(expectedTaskId);
475
- // Wait for first call to complete (it takes ~200ms due to poll delay)
476
- const firstResult = await firstPromise;
477
- expect(firstResult.status).toBe('succeeded');
478
- expect(firstResult.taskId).toBe(expectedTaskId);
479
- // E2E-05 assertion 3: at least one runner.run() was called (proves first call ran)
480
- expect(runnerRunCallCount).toBeGreaterThanOrEqual(1);
481
- // E2E-05 assertion 4: candidates exist (proves chain produced candidates)
482
- const candidates = await stateManager.getCandidatesByTaskId(expectedTaskId);
483
- expect(candidates.length).toBeGreaterThanOrEqual(1);
484
- });
485
- });
486
- //# sourceMappingURL=m8-02-e2e.test.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"m8-02-e2e.test.js","sourceRoot":"","sources":["../../../../src/runtime-v2/runner/__tests__/m8-02-e2e.test.ts"],"names":[],"mappings":"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"}
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=m9-adapter-integration.test.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"m9-adapter-integration.test.d.ts","sourceRoot":"","sources":["../../../../src/runtime-v2/runner/__tests__/m9-adapter-integration.test.ts"],"names":[],"mappings":""}