@principles/core 1.236.0 → 1.237.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 (96) hide show
  1. package/dist/runtime-v2/__tests__/feedback/create-report.test.js +51 -0
  2. package/dist/runtime-v2/__tests__/feedback/create-report.test.js.map +1 -1
  3. package/dist/runtime-v2/__tests__/feedback/privacy-preview.test.js +1 -1
  4. package/dist/runtime-v2/__tests__/feedback/privacy-preview.test.js.map +1 -1
  5. package/dist/runtime-v2/__tests__/feedback/render-markdown.test.js +1 -1
  6. package/dist/runtime-v2/__tests__/feedback/render-markdown.test.js.map +1 -1
  7. package/dist/runtime-v2/activation/__tests__/activation-dispatcher.test.js +109 -0
  8. package/dist/runtime-v2/activation/__tests__/activation-dispatcher.test.js.map +1 -1
  9. package/dist/runtime-v2/activation/activation-dispatcher.d.ts +11 -0
  10. package/dist/runtime-v2/activation/activation-dispatcher.d.ts.map +1 -1
  11. package/dist/runtime-v2/activation/activation-dispatcher.js +60 -6
  12. package/dist/runtime-v2/activation/activation-dispatcher.js.map +1 -1
  13. package/dist/runtime-v2/activation/activation-types.d.ts +4 -0
  14. package/dist/runtime-v2/activation/activation-types.d.ts.map +1 -1
  15. package/dist/runtime-v2/feature-flags/__tests__/feature-flag-contract.test.js +34 -0
  16. package/dist/runtime-v2/feature-flags/__tests__/feature-flag-contract.test.js.map +1 -1
  17. package/dist/runtime-v2/feature-flags/feature-flag-contract.d.ts.map +1 -1
  18. package/dist/runtime-v2/feature-flags/feature-flag-contract.js +5 -0
  19. package/dist/runtime-v2/feature-flags/feature-flag-contract.js.map +1 -1
  20. package/dist/runtime-v2/feedback/__tests__/create-report-agent-draft.test.d.ts +2 -0
  21. package/dist/runtime-v2/feedback/__tests__/create-report-agent-draft.test.d.ts.map +1 -0
  22. package/dist/runtime-v2/feedback/__tests__/create-report-agent-draft.test.js +221 -0
  23. package/dist/runtime-v2/feedback/__tests__/create-report-agent-draft.test.js.map +1 -0
  24. package/dist/runtime-v2/feedback/__tests__/mailto-url.test.d.ts +11 -0
  25. package/dist/runtime-v2/feedback/__tests__/mailto-url.test.d.ts.map +1 -0
  26. package/dist/runtime-v2/feedback/__tests__/mailto-url.test.js +160 -0
  27. package/dist/runtime-v2/feedback/__tests__/mailto-url.test.js.map +1 -0
  28. package/dist/runtime-v2/feedback/__tests__/pending-agent-draft-store.test.d.ts +2 -0
  29. package/dist/runtime-v2/feedback/__tests__/pending-agent-draft-store.test.d.ts.map +1 -0
  30. package/dist/runtime-v2/feedback/__tests__/pending-agent-draft-store.test.js +342 -0
  31. package/dist/runtime-v2/feedback/__tests__/pending-agent-draft-store.test.js.map +1 -0
  32. package/dist/runtime-v2/feedback/create-report.d.ts +7 -1
  33. package/dist/runtime-v2/feedback/create-report.d.ts.map +1 -1
  34. package/dist/runtime-v2/feedback/create-report.js +65 -7
  35. package/dist/runtime-v2/feedback/create-report.js.map +1 -1
  36. package/dist/runtime-v2/feedback/feedback-types.d.ts +18 -1
  37. package/dist/runtime-v2/feedback/feedback-types.d.ts.map +1 -1
  38. package/dist/runtime-v2/feedback/feedback-types.js +19 -12
  39. package/dist/runtime-v2/feedback/feedback-types.js.map +1 -1
  40. package/dist/runtime-v2/feedback/index.d.ts +3 -1
  41. package/dist/runtime-v2/feedback/index.d.ts.map +1 -1
  42. package/dist/runtime-v2/feedback/index.js +7 -1
  43. package/dist/runtime-v2/feedback/index.js.map +1 -1
  44. package/dist/runtime-v2/feedback/pending-agent-draft-store.d.ts +106 -0
  45. package/dist/runtime-v2/feedback/pending-agent-draft-store.d.ts.map +1 -0
  46. package/dist/runtime-v2/feedback/pending-agent-draft-store.js +220 -0
  47. package/dist/runtime-v2/feedback/pending-agent-draft-store.js.map +1 -0
  48. package/dist/runtime-v2/feedback/privacy-preview.d.ts +16 -0
  49. package/dist/runtime-v2/feedback/privacy-preview.d.ts.map +1 -1
  50. package/dist/runtime-v2/feedback/privacy-preview.js +54 -0
  51. package/dist/runtime-v2/feedback/privacy-preview.js.map +1 -1
  52. package/dist/runtime-v2/index.d.ts +5 -0
  53. package/dist/runtime-v2/index.d.ts.map +1 -1
  54. package/dist/runtime-v2/index.js +9 -0
  55. package/dist/runtime-v2/index.js.map +1 -1
  56. package/dist/runtime-v2/runner/__tests__/base-peer-runner-agent-draft.test.d.ts +2 -0
  57. package/dist/runtime-v2/runner/__tests__/base-peer-runner-agent-draft.test.d.ts.map +1 -0
  58. package/dist/runtime-v2/runner/__tests__/base-peer-runner-agent-draft.test.js +459 -0
  59. package/dist/runtime-v2/runner/__tests__/base-peer-runner-agent-draft.test.js.map +1 -0
  60. package/dist/runtime-v2/runner/base-peer-runner.d.ts +27 -0
  61. package/dist/runtime-v2/runner/base-peer-runner.d.ts.map +1 -1
  62. package/dist/runtime-v2/runner/base-peer-runner.js +138 -0
  63. package/dist/runtime-v2/runner/base-peer-runner.js.map +1 -1
  64. package/dist/runtime-v2/runner/peer-runner-types.d.ts +9 -0
  65. package/dist/runtime-v2/runner/peer-runner-types.d.ts.map +1 -1
  66. package/dist/runtime-v2/store/pain/__tests__/sqlite-dead-letter-store.test.d.ts +2 -0
  67. package/dist/runtime-v2/store/pain/__tests__/sqlite-dead-letter-store.test.d.ts.map +1 -0
  68. package/dist/runtime-v2/store/pain/__tests__/sqlite-dead-letter-store.test.js +225 -0
  69. package/dist/runtime-v2/store/pain/__tests__/sqlite-dead-letter-store.test.js.map +1 -0
  70. package/dist/runtime-v2/store/pain/index.d.ts +3 -0
  71. package/dist/runtime-v2/store/pain/index.d.ts.map +1 -0
  72. package/dist/runtime-v2/store/pain/index.js +2 -0
  73. package/dist/runtime-v2/store/pain/index.js.map +1 -0
  74. package/dist/runtime-v2/store/pain/sqlite-dead-letter-store.d.ts +70 -0
  75. package/dist/runtime-v2/store/pain/sqlite-dead-letter-store.d.ts.map +1 -0
  76. package/dist/runtime-v2/store/pain/sqlite-dead-letter-store.js +154 -0
  77. package/dist/runtime-v2/store/pain/sqlite-dead-letter-store.js.map +1 -0
  78. package/dist/runtime-v2/store/sqlite-connection.d.ts.map +1 -1
  79. package/dist/runtime-v2/store/sqlite-connection.js +41 -0
  80. package/dist/runtime-v2/store/sqlite-connection.js.map +1 -1
  81. package/dist/runtime-v2/store/task/__tests__/sqlite-task-store.failed-tasks.test.d.ts +2 -0
  82. package/dist/runtime-v2/store/task/__tests__/sqlite-task-store.failed-tasks.test.d.ts.map +1 -0
  83. package/dist/runtime-v2/store/task/__tests__/sqlite-task-store.failed-tasks.test.js +442 -0
  84. package/dist/runtime-v2/store/task/__tests__/sqlite-task-store.failed-tasks.test.js.map +1 -0
  85. package/dist/runtime-v2/store/task/index.d.ts +1 -0
  86. package/dist/runtime-v2/store/task/index.d.ts.map +1 -1
  87. package/dist/runtime-v2/store/task/index.js.map +1 -1
  88. package/dist/runtime-v2/store/task/sqlite-task-store.d.ts +45 -0
  89. package/dist/runtime-v2/store/task/sqlite-task-store.d.ts.map +1 -1
  90. package/dist/runtime-v2/store/task/sqlite-task-store.js +205 -0
  91. package/dist/runtime-v2/store/task/sqlite-task-store.js.map +1 -1
  92. package/dist/runtime-v2/store/task/task-types.d.ts +60 -0
  93. package/dist/runtime-v2/store/task/task-types.d.ts.map +1 -0
  94. package/dist/runtime-v2/store/task/task-types.js +2 -0
  95. package/dist/runtime-v2/store/task/task-types.js.map +1 -0
  96. package/package.json +3 -2
@@ -0,0 +1,459 @@
1
+ /**
2
+ * Task 12: BasePeerRunner permanent-failure agentDraft injection tests.
3
+ *
4
+ * Verifies that when a peer runner reaches a permanent-failure terminal
5
+ * state (permanentErrorCategories hit in retryOrFail), it constructs an
6
+ * AgentDraftPayload from the failure context and writes it to
7
+ * pending_agent_drafts via the injected PendingAgentDraftStore. The write
8
+ * is best-effort: failures are observed via telemetry (rc-9) but never
9
+ * propagate, so the markFailed terminal-state contract is preserved.
10
+ *
11
+ * Scenarios covered (per Task 12 spec):
12
+ * 1. permanent error → pending_agent_drafts table contains exactly one row
13
+ * 2. permanent error → agentDraft.summary contains taskKind + errorCategory
14
+ * 3. permanent error → agentDraft.observedFailure contains redacted error message
15
+ * 4. permanent error → agentDraft.observedFailure does NOT contain raw paths
16
+ * (constructs an error containing `D:\Code\principles\secret`, asserts redacted)
17
+ * 5. retry-able error (non-permanent) → insertPendingDraft NOT called
18
+ * 6. repeated permanent failure on same taskId → idempotent (no duplicate row,
19
+ * but agentDraft is updated)
20
+ * 7. pendingAgentDraftStore not injected → no throw, markFailed completes normally
21
+ * 8. insertPendingDraft throws → does not break markFailed flow
22
+ *
23
+ * ERR entries considered:
24
+ * - EP-01 / ERR-001, ERR-005, ERR-013: diagnosticJson parsed as unknown,
25
+ * narrowed with typeof + Object.hasOwn. No `as` casts in production code
26
+ * under test; tests use `as` only for mock construction (mocks are
27
+ * trusted fixtures, not untrusted runtime data).
28
+ * - EP-03 / ERR-002: agentDraft injection failure emits telemetry with
29
+ * reason + nextAction (rc-9-no-silent-fallback).
30
+ * - EP-03 / ERR-074, ERR-089: every branch (store missing, insert !ok,
31
+ * insert throws) applies the SAME best-effort contract.
32
+ * - EP-05 / ERR-015: painId extracted fresh from ctx.task.diagnosticJson
33
+ * on each call, not cached.
34
+ * - EP-08 / ERR-003, ERR-024: redactAbsolutePaths / redactTokenLikeValues /
35
+ * redactEnvLikeValues applied to observedFailure BEFORE persist.
36
+ *
37
+ * @see packages/principles-core/src/runtime-v2/runner/base-peer-runner.ts (retryOrFail, injectAgentDraftOnPermanentFailure)
38
+ * @see packages/principles-core/src/runtime-v2/feedback/pending-agent-draft-store.ts
39
+ * @see packages/principles-core/src/runtime-v2/feedback/redact-sensitive.ts
40
+ */
41
+ import { describe, it, expect, vi, beforeEach, afterEach } from 'vitest';
42
+ import * as path from 'node:path';
43
+ import * as os from 'node:os';
44
+ import * as fs from 'node:fs';
45
+ import { BasePeerRunner } from '../base-peer-runner.js';
46
+ import { SqliteConnection } from '../../store/sqlite-connection.js';
47
+ import { PendingAgentDraftStore } from '../../feedback/pending-agent-draft-store.js';
48
+ const TASK_ID = 'task-agent-draft-001';
49
+ function makeTask(overrides = {}) {
50
+ return {
51
+ taskId: TASK_ID,
52
+ taskKind: 'dreamer',
53
+ status: 'leased',
54
+ attemptCount: 1,
55
+ maxAttempts: 3,
56
+ createdAt: new Date().toISOString(),
57
+ updatedAt: new Date().toISOString(),
58
+ ...overrides,
59
+ };
60
+ }
61
+ function createTestConnection() {
62
+ const tmpDir = fs.mkdtempSync(path.join(os.tmpdir(), 'pd-test-agent-draft-'));
63
+ return new SqliteConnection(tmpDir);
64
+ }
65
+ /**
66
+ * Test runner that exposes retryOrFail for direct testing.
67
+ * permanentErrorCategories includes 'input_invalid' and 'storage_unavailable'
68
+ * (both treated as permanent — never retried).
69
+ */
70
+ class AgentDraftTestRunner extends BasePeerRunner {
71
+ constructor(deps) {
72
+ super(deps, { owner: 'test', runtimeKind: 'test-double' }, {
73
+ runnerName: 'test',
74
+ expectedTaskKind: 'dreamer',
75
+ defaultAgentId: 'test',
76
+ resultRefPrefix: 'test',
77
+ });
78
+ }
79
+ // eslint-disable-next-line @typescript-eslint/class-methods-use-this
80
+ get permanentErrorCategories() {
81
+ return new Set([
82
+ 'storage_unavailable',
83
+ 'workspace_invalid',
84
+ 'capability_missing',
85
+ 'cancelled',
86
+ 'input_invalid',
87
+ 'output_invalid',
88
+ ]);
89
+ }
90
+ // eslint-disable-next-line @typescript-eslint/class-methods-use-this
91
+ async buildContext() {
92
+ return { contextHash: 'test-hash' };
93
+ }
94
+ // eslint-disable-next-line @typescript-eslint/class-methods-use-this
95
+ async invokeRuntime() {
96
+ return { runId: 'run-001', runtimeKind: 'test-double', startedAt: new Date().toISOString() };
97
+ }
98
+ // eslint-disable-next-line @typescript-eslint/class-methods-use-this
99
+ async validateOutput() {
100
+ return { valid: true, errors: [] };
101
+ }
102
+ // eslint-disable-next-line @typescript-eslint/class-methods-use-this, @typescript-eslint/max-params
103
+ async succeedTask(taskId, runId, _output, task) {
104
+ return { status: 'succeeded', taskId, runId, attemptCount: task.attemptCount };
105
+ }
106
+ /** Expose protected retryOrFail for direct testing. */
107
+ async callRetryOrFail(ctx) {
108
+ return this.retryOrFail(ctx);
109
+ }
110
+ }
111
+ function createMockDeps(overrides) {
112
+ return {
113
+ stateManager: {
114
+ getRetryPolicy: vi.fn().mockReturnValue({
115
+ // Default: do NOT retry — so non-permanent errors flow to
116
+ // max_attempts_exceeded rather than retry_wait. Tests that need
117
+ // retry_wait override shouldRetry to true.
118
+ shouldRetry: vi.fn().mockReturnValue(false),
119
+ }),
120
+ markTaskFailed: vi.fn().mockResolvedValue({}),
121
+ markTaskRetryWait: vi.fn().mockResolvedValue({}),
122
+ markTaskSucceeded: vi.fn().mockResolvedValue({}),
123
+ updateRunOutput: vi.fn().mockResolvedValue({}),
124
+ },
125
+ runtimeAdapter: {},
126
+ eventEmitter: {
127
+ emitTelemetry: vi.fn(),
128
+ },
129
+ artifactStore: {},
130
+ ...overrides,
131
+ };
132
+ }
133
+ function telemetryCalls(mock) {
134
+ return mock.mock.calls.map((call) => call[0]);
135
+ }
136
+ /**
137
+ * Narrow `T | null` to `T` after a preceding `expect(x).not.toBeNull()`.
138
+ * Replaces `x!.prop` (forbidden by @typescript-eslint/no-non-null-assertion)
139
+ * with type-safe access. The throw branch is unreachable after the expect,
140
+ * but TypeScript needs it for control-flow narrowing.
141
+ */
142
+ function unwrap(value) {
143
+ if (value === null || value === undefined) {
144
+ throw new Error('unwrap: value is null/undefined');
145
+ }
146
+ return value;
147
+ }
148
+ // ── Tests ────────────────────────────────────────────────────────────────────
149
+ describe('Task 12: BasePeerRunner permanent-failure agentDraft injection', () => {
150
+ let connection = null;
151
+ let store = null;
152
+ let mockDeps;
153
+ let runner;
154
+ let task;
155
+ beforeEach(() => {
156
+ connection = createTestConnection();
157
+ // Touch getDb() so initSchema() runs (creates pending_agent_drafts table).
158
+ connection.getDb();
159
+ store = new PendingAgentDraftStore(connection);
160
+ mockDeps = createMockDeps({ pendingAgentDraftStore: store });
161
+ runner = new AgentDraftTestRunner(mockDeps);
162
+ task = makeTask();
163
+ });
164
+ afterEach(() => {
165
+ connection?.close();
166
+ });
167
+ it('permanent error → pending_agent_drafts table contains exactly one row', async () => {
168
+ const ctx = {
169
+ taskId: TASK_ID,
170
+ task,
171
+ errorCategory: 'input_invalid',
172
+ failureReason: 'Task input was malformed',
173
+ };
174
+ const result = await runner.callRetryOrFail(ctx);
175
+ expect(result.status).toBe('failed');
176
+ expect(result.errorCategory).toBe('input_invalid');
177
+ // The store should have exactly one unconsumed row for this taskId.
178
+ const row = store.getUnconsumedByTaskId(TASK_ID);
179
+ expect(row).not.toBeNull();
180
+ expect(unwrap(row).taskId).toBe(TASK_ID);
181
+ // And exactly one row total in the table.
182
+ const allRows = store.listPending();
183
+ expect(allRows).toHaveLength(1);
184
+ });
185
+ it('permanent error → agentDraft.summary contains taskKind + errorCategory', async () => {
186
+ const ctx = {
187
+ taskId: TASK_ID,
188
+ task,
189
+ errorCategory: 'input_invalid',
190
+ failureReason: 'malformed input',
191
+ };
192
+ await runner.callRetryOrFail(ctx);
193
+ const row = store.getUnconsumedByTaskId(TASK_ID);
194
+ expect(row).not.toBeNull();
195
+ // summary format: `${taskKind} failed with category=${errorCategory} at ${isoTimestamp}`
196
+ expect(unwrap(row).agentDraft.summary).toContain('dreamer');
197
+ expect(unwrap(row).agentDraft.summary).toContain('input_invalid');
198
+ expect(unwrap(row).agentDraft.summary).toMatch(/\bfailed with category=/);
199
+ // ISO timestamp at the end
200
+ expect(unwrap(row).agentDraft.summary).toMatch(/\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}/);
201
+ });
202
+ it('permanent error → agentDraft.observedFailure contains redacted error message', async () => {
203
+ const ctx = {
204
+ taskId: TASK_ID,
205
+ task,
206
+ errorCategory: 'input_invalid',
207
+ failureReason: 'Task input was malformed: missing required field "principleId"',
208
+ };
209
+ await runner.callRetryOrFail(ctx);
210
+ const row = store.getUnconsumedByTaskId(TASK_ID);
211
+ expect(row).not.toBeNull();
212
+ expect(unwrap(row).agentDraft.observedFailure).toBeDefined();
213
+ // The error message text is preserved (it contains no paths/tokens/env, so redaction is a no-op).
214
+ expect(unwrap(row).agentDraft.observedFailure).toContain('Task input was malformed');
215
+ expect(unwrap(row).agentDraft.observedFailure).toContain('principleId');
216
+ });
217
+ it('permanent error → agentDraft.observedFailure does NOT contain raw absolute paths (redacted)', async () => {
218
+ // Construct a failure reason containing a Windows absolute path that
219
+ // redactAbsolutePaths MUST scrub. If redaction is skipped, this test
220
+ // fails — proving the redactor is wired into the injection path.
221
+ //
222
+ // Note: we deliberately avoid key-like tokens (e.g. "secret:") in the
223
+ // path suffix because redactTokenLikeValues' KEY_ASSIGN regex would
224
+ // also redact them — that would conflate two redactors. We want this
225
+ // test to isolate path redaction. Use a plain filename suffix.
226
+ const secretPath = 'D:\\Code\\principles\\secret\\config.json';
227
+ const ctx = {
228
+ taskId: TASK_ID,
229
+ task,
230
+ errorCategory: 'input_invalid',
231
+ failureReason: `Failed to read config from ${secretPath} - file not found`,
232
+ };
233
+ await runner.callRetryOrFail(ctx);
234
+ const row = store.getUnconsumedByTaskId(TASK_ID);
235
+ expect(row).not.toBeNull();
236
+ expect(unwrap(row).agentDraft.observedFailure).toBeDefined();
237
+ // The raw path MUST NOT appear verbatim in the persisted draft.
238
+ expect(unwrap(row).agentDraft.observedFailure).not.toContain(secretPath);
239
+ expect(unwrap(row).agentDraft.observedFailure).not.toContain('D:\\Code');
240
+ // The redacted marker SHOULD appear instead.
241
+ expect(unwrap(row).agentDraft.observedFailure).toContain('<redacted-path>');
242
+ // Non-path content is preserved.
243
+ expect(unwrap(row).agentDraft.observedFailure).toContain('Failed to read config from');
244
+ expect(unwrap(row).agentDraft.observedFailure).toContain('file not found');
245
+ });
246
+ it('retry-able error (non-permanent) → insertPendingDraft NOT called, no row in table', async () => {
247
+ // Override the retry policy to return TRUE (shouldRetry) so the error
248
+ // flows to markTaskRetryWait instead of markTaskFailed. The agentDraft
249
+ // injection must NOT fire on the retry_wait path.
250
+ mockDeps.stateManager.getRetryPolicy.mockReturnValue({
251
+ shouldRetry: vi.fn().mockReturnValue(true),
252
+ });
253
+ // 'execution_failed' is NOT in permanentErrorCategories for this runner.
254
+ const ctx = {
255
+ taskId: TASK_ID,
256
+ task,
257
+ errorCategory: 'execution_failed',
258
+ failureReason: 'transient network error',
259
+ };
260
+ const result = await runner.callRetryOrFail(ctx);
261
+ // Should be retried, not failed.
262
+ expect(result.status).toBe('retried');
263
+ expect(result.errorCategory).toBe('execution_failed');
264
+ expect(mockDeps.stateManager.markTaskRetryWait).toHaveBeenCalled();
265
+ // NO row should exist in pending_agent_drafts.
266
+ const row = store.getUnconsumedByTaskId(TASK_ID);
267
+ expect(row).toBeNull();
268
+ // NO agent_draft_inserted telemetry event.
269
+ const calls = telemetryCalls(mockDeps.eventEmitter.emitTelemetry);
270
+ expect(calls.find((c) => c.eventType === 'test_agent_draft_inserted')).toBeUndefined();
271
+ expect(calls.find((c) => c.eventType === 'test_agent_draft_insert_failed')).toBeUndefined();
272
+ });
273
+ it('repeated permanent failure on same taskId → idempotent (no duplicate row, agentDraft updated)', async () => {
274
+ // First permanent failure.
275
+ const ctx1 = {
276
+ taskId: TASK_ID,
277
+ task,
278
+ errorCategory: 'input_invalid',
279
+ failureReason: 'first failure reason text',
280
+ };
281
+ const result1 = await runner.callRetryOrFail(ctx1);
282
+ expect(result1.status).toBe('failed');
283
+ // Verify one row exists. summary does NOT carry the failure reason
284
+ // (only taskKind + errorCategory + timestamp); the reason lives in
285
+ // observedFailure.
286
+ const row1 = store.getUnconsumedByTaskId(TASK_ID);
287
+ expect(row1).not.toBeNull();
288
+ expect(unwrap(row1).agentDraft.summary).toContain('input_invalid');
289
+ expect(unwrap(row1).agentDraft.observedFailure).toContain('first failure reason text');
290
+ const firstId = unwrap(row1).id;
291
+ // Second permanent failure on the SAME taskId (e.g., task was re-leased
292
+ // after manual recovery and failed again with a different reason).
293
+ const ctx2 = {
294
+ taskId: TASK_ID,
295
+ task,
296
+ errorCategory: 'output_invalid',
297
+ failureReason: 'second failure with different reason',
298
+ };
299
+ const result2 = await runner.callRetryOrFail(ctx2);
300
+ expect(result2.status).toBe('failed');
301
+ // Still exactly one unconsumed row (idempotent UPDATE, not INSERT).
302
+ const row2 = store.getUnconsumedByTaskId(TASK_ID);
303
+ expect(row2).not.toBeNull();
304
+ expect(unwrap(row2).id).toBe(firstId); // same row id preserved
305
+ // The agentDraft should reflect the LATEST failure (UPDATE overwrote it).
306
+ // summary now carries the new errorCategory (output_invalid, not input_invalid).
307
+ expect(unwrap(row2).agentDraft.summary).toContain('output_invalid');
308
+ expect(unwrap(row2).agentDraft.summary).not.toContain('input_invalid');
309
+ // observedFailure carries the new failure reason, not the old one.
310
+ expect(unwrap(row2).agentDraft.observedFailure).toContain('second failure with different reason');
311
+ expect(unwrap(row2).agentDraft.observedFailure).not.toContain('first failure reason text');
312
+ // Exactly one row total in the table.
313
+ const allRows = store.listPending();
314
+ expect(allRows).toHaveLength(1);
315
+ });
316
+ it('pendingAgentDraftStore not injected → no throw, markFailed completes normally', async () => {
317
+ // Build a runner WITHOUT a pendingAgentDraftStore — simulates legacy
318
+ // callers that have not yet been upgraded to inject the store.
319
+ // createMockDeps() with no overrides does NOT set pendingAgentDraftStore,
320
+ // so the field is undefined on the resulting deps object.
321
+ const depsWithoutStore = createMockDeps();
322
+ const legacyRunner = new AgentDraftTestRunner(depsWithoutStore);
323
+ const ctx = {
324
+ taskId: TASK_ID,
325
+ task,
326
+ errorCategory: 'input_invalid',
327
+ failureReason: 'permanent failure without draft store',
328
+ };
329
+ // Must NOT throw — backward compatible.
330
+ const result = await legacyRunner.callRetryOrFail(ctx);
331
+ // markTaskFailed still called with the original errorCategory.
332
+ expect(result.status).toBe('failed');
333
+ expect(result.errorCategory).toBe('input_invalid');
334
+ expect(depsWithoutStore.stateManager.markTaskFailed).toHaveBeenCalledWith(TASK_ID, 'input_invalid', 'permanent failure without draft store');
335
+ // NO agent_draft telemetry events (store was not injected).
336
+ const calls = telemetryCalls(depsWithoutStore.eventEmitter.emitTelemetry);
337
+ expect(calls.find((c) => c.eventType === 'test_agent_draft_inserted')).toBeUndefined();
338
+ expect(calls.find((c) => c.eventType === 'test_agent_draft_insert_failed')).toBeUndefined();
339
+ });
340
+ it('insertPendingDraft throws → does not break markFailed flow; telemetry emitted (rc-9)', async () => {
341
+ // Construct a store mock that throws synchronously when insertPendingDraft
342
+ // is called. This simulates a misbehaving store implementation.
343
+ const throwingStore = {
344
+ insertPendingDraft: vi.fn().mockImplementation(() => {
345
+ throw new Error('simulated store corruption');
346
+ }),
347
+ };
348
+ const depsWithThrowingStore = createMockDeps({ pendingAgentDraftStore: throwingStore });
349
+ const runnerWithThrowingStore = new AgentDraftTestRunner(depsWithThrowingStore);
350
+ const ctx = {
351
+ taskId: TASK_ID,
352
+ task,
353
+ errorCategory: 'input_invalid',
354
+ failureReason: 'permanent failure with throwing store',
355
+ };
356
+ // Must NOT throw — the markFailed contract is preserved even when the
357
+ // draft store throws unexpectedly.
358
+ const result = await runnerWithThrowingStore.callRetryOrFail(ctx);
359
+ // markTaskFailed still called and result is the expected failed status.
360
+ expect(result.status).toBe('failed');
361
+ expect(result.errorCategory).toBe('input_invalid');
362
+ expect(depsWithThrowingStore.stateManager.markTaskFailed).toHaveBeenCalled();
363
+ // rc-9: telemetry event MUST be emitted with the error reason + nextAction
364
+ // (never silent).
365
+ const calls = telemetryCalls(depsWithThrowingStore.eventEmitter.emitTelemetry);
366
+ const failedEvent = calls.find((c) => c.eventType === 'test_agent_draft_insert_failed');
367
+ expect(failedEvent).toBeDefined();
368
+ expect(failedEvent?.payload?.errorMessage).toContain('simulated store corruption');
369
+ expect(failedEvent?.payload).toHaveProperty('nextAction');
370
+ expect(typeof failedEvent?.payload?.nextAction).toBe('string');
371
+ });
372
+ });
373
+ // ── Supplemental: painId linkage from diagnosticJson (rc-1, rc-5, rc-7) ──────
374
+ describe('Task 12: agentDraft painId linkage from diagnosticJson', () => {
375
+ let connection = null;
376
+ let store = null;
377
+ let mockDeps;
378
+ let runner;
379
+ beforeEach(() => {
380
+ connection = createTestConnection();
381
+ connection.getDb();
382
+ store = new PendingAgentDraftStore(connection);
383
+ mockDeps = createMockDeps({ pendingAgentDraftStore: store });
384
+ runner = new AgentDraftTestRunner(mockDeps);
385
+ });
386
+ afterEach(() => {
387
+ connection?.close();
388
+ });
389
+ it('diagnosticJson with sourcePainId → painId linked in pending_agent_drafts', async () => {
390
+ const task = makeTask({
391
+ diagnosticJson: JSON.stringify({ sourcePainId: 'pain-from-diag-001', other: 'metadata' }),
392
+ });
393
+ const ctx = {
394
+ taskId: TASK_ID,
395
+ task,
396
+ errorCategory: 'input_invalid',
397
+ failureReason: 'failure with pain linkage',
398
+ };
399
+ await runner.callRetryOrFail(ctx);
400
+ const row = store.getUnconsumedByTaskId(TASK_ID);
401
+ expect(row).not.toBeNull();
402
+ expect(unwrap(row).painId).toBe('pain-from-diag-001');
403
+ // agent_draft_inserted telemetry should report painIdLinked: true.
404
+ const calls = telemetryCalls(mockDeps.eventEmitter.emitTelemetry);
405
+ const inserted = calls.find((c) => c.eventType === 'test_agent_draft_inserted');
406
+ expect(inserted).toBeDefined();
407
+ expect(inserted?.payload?.painIdLinked).toBe(true);
408
+ });
409
+ it('diagnosticJson without sourcePainId → painId is null in pending_agent_drafts', async () => {
410
+ const task = makeTask({
411
+ diagnosticJson: JSON.stringify({ unrelated: 'field' }),
412
+ });
413
+ const ctx = {
414
+ taskId: TASK_ID,
415
+ task,
416
+ errorCategory: 'input_invalid',
417
+ failureReason: 'failure without pain linkage',
418
+ };
419
+ await runner.callRetryOrFail(ctx);
420
+ const row = store.getUnconsumedByTaskId(TASK_ID);
421
+ expect(row).not.toBeNull();
422
+ expect(unwrap(row).painId).toBeNull();
423
+ const calls = telemetryCalls(mockDeps.eventEmitter.emitTelemetry);
424
+ const inserted = calls.find((c) => c.eventType === 'test_agent_draft_inserted');
425
+ expect(inserted).toBeDefined();
426
+ expect(inserted?.payload?.painIdLinked).toBe(false);
427
+ });
428
+ it('diagnosticJson undefined → painId is null (graceful, no throw)', async () => {
429
+ const task = makeTask(); // no diagnosticJson field
430
+ const ctx = {
431
+ taskId: TASK_ID,
432
+ task,
433
+ errorCategory: 'input_invalid',
434
+ failureReason: 'failure with undefined diagnosticJson',
435
+ };
436
+ await runner.callRetryOrFail(ctx);
437
+ const row = store.getUnconsumedByTaskId(TASK_ID);
438
+ expect(row).not.toBeNull();
439
+ expect(unwrap(row).painId).toBeNull();
440
+ });
441
+ it('diagnosticJson is malformed JSON → painId is null (rc-9 graceful degradation, no throw)', async () => {
442
+ const task = makeTask({
443
+ diagnosticJson: '{not valid json',
444
+ });
445
+ const ctx = {
446
+ taskId: TASK_ID,
447
+ task,
448
+ errorCategory: 'input_invalid',
449
+ failureReason: 'failure with corrupt diagnosticJson',
450
+ };
451
+ // Must NOT throw — corrupt JSON yields null painId, not an exception.
452
+ const result = await runner.callRetryOrFail(ctx);
453
+ expect(result.status).toBe('failed');
454
+ const row = store.getUnconsumedByTaskId(TASK_ID);
455
+ expect(row).not.toBeNull();
456
+ expect(unwrap(row).painId).toBeNull();
457
+ });
458
+ });
459
+ //# sourceMappingURL=base-peer-runner-agent-draft.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"base-peer-runner-agent-draft.test.js","sourceRoot":"","sources":["../../../../src/runtime-v2/runner/__tests__/base-peer-runner-agent-draft.test.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAuCG;AACH,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,QAAQ,CAAC;AACzE,OAAO,KAAK,IAAI,MAAM,WAAW,CAAC;AAClC,OAAO,KAAK,EAAE,MAAM,SAAS,CAAC;AAC9B,OAAO,KAAK,EAAE,MAAM,SAAS,CAAC;AAC9B,OAAO,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AAaxD,OAAO,EAAE,gBAAgB,EAAE,MAAM,kCAAkC,CAAC;AACpE,OAAO,EAAE,sBAAsB,EAAE,MAAM,6CAA6C,CAAC;AAYrF,MAAM,OAAO,GAAG,sBAAsB,CAAC;AAEvC,SAAS,QAAQ,CAAC,YAAiC,EAAE;IACnD,OAAO;QACL,MAAM,EAAE,OAAO;QACf,QAAQ,EAAE,SAAS;QACnB,MAAM,EAAE,QAAQ;QAChB,YAAY,EAAE,CAAC;QACf,WAAW,EAAE,CAAC;QACd,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;QACnC,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;QACnC,GAAG,SAAS;KACb,CAAC;AACJ,CAAC;AAED,SAAS,oBAAoB;IAC3B,MAAM,MAAM,GAAG,EAAE,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,MAAM,EAAE,EAAE,sBAAsB,CAAC,CAAC,CAAC;IAC9E,OAAO,IAAI,gBAAgB,CAAC,MAAM,CAAC,CAAC;AACtC,CAAC;AAED;;;;GAIG;AACH,MAAM,oBAAqB,SAAQ,cAAuC;IACxE,YAAY,IAAoB;QAC9B,KAAK,CACH,IAAI,EACJ,EAAE,KAAK,EAAE,MAAM,EAAE,WAAW,EAAE,aAAa,EAAE,EAC7C;YACE,UAAU,EAAE,MAAM;YAClB,gBAAgB,EAAE,SAAS;YAC3B,cAAc,EAAE,MAAM;YACtB,eAAe,EAAE,MAAM;SACxB,CACF,CAAC;IACJ,CAAC;IAED,qEAAqE;IACrE,IAAI,wBAAwB;QAC1B,OAAO,IAAI,GAAG,CAAC;YACb,qBAAqB;YACrB,mBAAmB;YACnB,oBAAoB;YACpB,WAAW;YACX,eAAe;YACf,gBAAgB;SACjB,CAAC,CAAC;IACL,CAAC;IAED,qEAAqE;IACrE,KAAK,CAAC,YAAY;QAChB,OAAO,EAAE,WAAW,EAAE,WAAW,EAAE,CAAC;IACtC,CAAC;IAED,qEAAqE;IACrE,KAAK,CAAC,aAAa;QACjB,OAAO,EAAE,KAAK,EAAE,SAAS,EAAE,WAAW,EAAE,aAAa,EAAE,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,EAAE,CAAC;IAC/F,CAAC;IAED,qEAAqE;IACrE,KAAK,CAAC,cAAc;QAClB,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,EAAE,EAAE,EAAE,CAAC;IACrC,CAAC;IAED,oGAAoG;IACpG,KAAK,CAAC,WAAW,CAAC,MAAc,EAAE,KAAa,EAAE,OAAmB,EAAE,IAAgB;QACpF,OAAO,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,EAAE,KAAK,EAAE,YAAY,EAAE,IAAI,CAAC,YAAY,EAAE,CAAC;IACjF,CAAC;IAED,uDAAuD;IACvD,KAAK,CAAC,eAAe,CAAC,GAAmB;QACvC,OAAO,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC;IAC/B,CAAC;CACF;AAED,SAAS,cAAc,CAAC,SAAmC;IACzD,OAAO;QACL,YAAY,EAAE;YACZ,cAAc,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC,eAAe,CAAC;gBACtC,0DAA0D;gBAC1D,gEAAgE;gBAChE,2CAA2C;gBAC3C,WAAW,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC,eAAe,CAAC,KAAK,CAAC;aAC5C,CAAC;YACF,cAAc,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC,iBAAiB,CAAC,EAAE,CAAC;YAC7C,iBAAiB,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC,iBAAiB,CAAC,EAAE,CAAC;YAChD,iBAAiB,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC,iBAAiB,CAAC,EAAE,CAAC;YAChD,eAAe,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC,iBAAiB,CAAC,EAAE,CAAC;SACb;QACnC,cAAc,EAAE,EAAiC;QACjD,YAAY,EAAE;YACZ,aAAa,EAAE,EAAE,CAAC,EAAE,EAAE;SACS;QACjC,aAAa,EAAE,EAAgC;QAC/C,GAAG,SAAS;KACb,CAAC;AACJ,CAAC;AAID,SAAS,cAAc,CAAC,IAA8B;IACpD,OAAQ,IAAI,CAAC,IAAI,CAAC,KAAqB,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,CAAC,CAAsB,CAAC,CAAC;AACtF,CAAC;AAED;;;;;GAKG;AACH,SAAS,MAAM,CAAI,KAA2B;IAC5C,IAAI,KAAK,KAAK,IAAI,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;QAC1C,MAAM,IAAI,KAAK,CAAC,iCAAiC,CAAC,CAAC;IACrD,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAED,gFAAgF;AAEhF,QAAQ,CAAC,gEAAgE,EAAE,GAAG,EAAE;IAC9E,IAAI,UAAU,GAAG,IAAmC,CAAC;IACrD,IAAI,KAAK,GAAG,IAAyC,CAAC;IACtD,IAAI,QAAwB,CAAC;IAC7B,IAAI,MAA4B,CAAC;IACjC,IAAI,IAAgB,CAAC;IAErB,UAAU,CAAC,GAAG,EAAE;QACd,UAAU,GAAG,oBAAoB,EAAE,CAAC;QACpC,2EAA2E;QAC3E,UAAU,CAAC,KAAK,EAAE,CAAC;QACnB,KAAK,GAAG,IAAI,sBAAsB,CAAC,UAAU,CAAC,CAAC;QAC/C,QAAQ,GAAG,cAAc,CAAC,EAAE,sBAAsB,EAAE,KAAK,EAAE,CAAC,CAAC;QAC7D,MAAM,GAAG,IAAI,oBAAoB,CAAC,QAAQ,CAAC,CAAC;QAC5C,IAAI,GAAG,QAAQ,EAAE,CAAC;IACpB,CAAC,CAAC,CAAC;IAEH,SAAS,CAAC,GAAG,EAAE;QACb,UAAU,EAAE,KAAK,EAAE,CAAC;IACtB,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,uEAAuE,EAAE,KAAK,IAAI,EAAE;QACrF,MAAM,GAAG,GAAmB;YAC1B,MAAM,EAAE,OAAO;YACf,IAAI;YACJ,aAAa,EAAE,eAAe;YAC9B,aAAa,EAAE,0BAA0B;SAC1C,CAAC;QAEF,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,eAAe,CAAC,GAAG,CAAC,CAAC;QAEjD,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QACrC,MAAM,CAAC,MAAM,CAAC,aAAa,CAAC,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC;QAEnD,oEAAoE;QACpE,MAAM,GAAG,GAAG,KAAK,CAAC,qBAAqB,CAAC,OAAO,CAAC,CAAC;QACjD,MAAM,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,QAAQ,EAAE,CAAC;QAC3B,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QAEzC,0CAA0C;QAC1C,MAAM,OAAO,GAAG,KAAK,CAAC,WAAW,EAAE,CAAC;QACpC,MAAM,CAAC,OAAO,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC;IAClC,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,wEAAwE,EAAE,KAAK,IAAI,EAAE;QACtF,MAAM,GAAG,GAAmB;YAC1B,MAAM,EAAE,OAAO;YACf,IAAI;YACJ,aAAa,EAAE,eAAe;YAC9B,aAAa,EAAE,iBAAiB;SACjC,CAAC;QAEF,MAAM,MAAM,CAAC,eAAe,CAAC,GAAG,CAAC,CAAC;QAElC,MAAM,GAAG,GAAG,KAAK,CAAC,qBAAqB,CAAC,OAAO,CAAC,CAAC;QACjD,MAAM,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,QAAQ,EAAE,CAAC;QAC3B,yFAAyF;QACzF,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC;QAC5D,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC,SAAS,CAAC,eAAe,CAAC,CAAC;QAClE,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC,OAAO,CAAC,yBAAyB,CAAC,CAAC;QAC1E,2BAA2B;QAC3B,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC,OAAO,CAAC,qCAAqC,CAAC,CAAC;IACxF,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,8EAA8E,EAAE,KAAK,IAAI,EAAE;QAC5F,MAAM,GAAG,GAAmB;YAC1B,MAAM,EAAE,OAAO;YACf,IAAI;YACJ,aAAa,EAAE,eAAe;YAC9B,aAAa,EAAE,gEAAgE;SAChF,CAAC;QAEF,MAAM,MAAM,CAAC,eAAe,CAAC,GAAG,CAAC,CAAC;QAElC,MAAM,GAAG,GAAG,KAAK,CAAC,qBAAqB,CAAC,OAAO,CAAC,CAAC;QACjD,MAAM,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,QAAQ,EAAE,CAAC;QAC3B,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,UAAU,CAAC,eAAe,CAAC,CAAC,WAAW,EAAE,CAAC;QAC7D,kGAAkG;QAClG,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,UAAU,CAAC,eAAe,CAAC,CAAC,SAAS,CAAC,0BAA0B,CAAC,CAAC;QACrF,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,UAAU,CAAC,eAAe,CAAC,CAAC,SAAS,CAAC,aAAa,CAAC,CAAC;IAC1E,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,6FAA6F,EAAE,KAAK,IAAI,EAAE;QAC3G,qEAAqE;QACrE,qEAAqE;QACrE,iEAAiE;QACjE,EAAE;QACF,sEAAsE;QACtE,oEAAoE;QACpE,qEAAqE;QACrE,+DAA+D;QAC/D,MAAM,UAAU,GAAG,2CAA2C,CAAC;QAC/D,MAAM,GAAG,GAAmB;YAC1B,MAAM,EAAE,OAAO;YACf,IAAI;YACJ,aAAa,EAAE,eAAe;YAC9B,aAAa,EAAE,8BAA8B,UAAU,mBAAmB;SAC3E,CAAC;QAEF,MAAM,MAAM,CAAC,eAAe,CAAC,GAAG,CAAC,CAAC;QAElC,MAAM,GAAG,GAAG,KAAK,CAAC,qBAAqB,CAAC,OAAO,CAAC,CAAC;QACjD,MAAM,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,QAAQ,EAAE,CAAC;QAC3B,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,UAAU,CAAC,eAAe,CAAC,CAAC,WAAW,EAAE,CAAC;QAC7D,gEAAgE;QAChE,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,UAAU,CAAC,eAAe,CAAC,CAAC,GAAG,CAAC,SAAS,CAAC,UAAU,CAAC,CAAC;QACzE,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,UAAU,CAAC,eAAe,CAAC,CAAC,GAAG,CAAC,SAAS,CAAC,UAAU,CAAC,CAAC;QACzE,6CAA6C;QAC7C,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,UAAU,CAAC,eAAe,CAAC,CAAC,SAAS,CAAC,iBAAiB,CAAC,CAAC;QAC5E,iCAAiC;QACjC,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,UAAU,CAAC,eAAe,CAAC,CAAC,SAAS,CAAC,4BAA4B,CAAC,CAAC;QACvF,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,UAAU,CAAC,eAAe,CAAC,CAAC,SAAS,CAAC,gBAAgB,CAAC,CAAC;IAC7E,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,mFAAmF,EAAE,KAAK,IAAI,EAAE;QACjG,sEAAsE;QACtE,uEAAuE;QACvE,kDAAkD;QACjD,QAAQ,CAAC,YAAY,CAAC,cAA2C,CAAC,eAAe,CAAC;YACjF,WAAW,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC,eAAe,CAAC,IAAI,CAAC;SAC3C,CAAC,CAAC;QAEH,yEAAyE;QACzE,MAAM,GAAG,GAAmB;YAC1B,MAAM,EAAE,OAAO;YACf,IAAI;YACJ,aAAa,EAAE,kBAAkB;YACjC,aAAa,EAAE,yBAAyB;SACzC,CAAC;QAEF,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,eAAe,CAAC,GAAG,CAAC,CAAC;QAEjD,iCAAiC;QACjC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;QACtC,MAAM,CAAC,MAAM,CAAC,aAAa,CAAC,CAAC,IAAI,CAAC,kBAAkB,CAAC,CAAC;QACtD,MAAM,CAAC,QAAQ,CAAC,YAAY,CAAC,iBAAiB,CAAC,CAAC,gBAAgB,EAAE,CAAC;QAEnE,+CAA+C;QAC/C,MAAM,GAAG,GAAG,KAAK,CAAC,qBAAqB,CAAC,OAAO,CAAC,CAAC;QACjD,MAAM,CAAC,GAAG,CAAC,CAAC,QAAQ,EAAE,CAAC;QAEvB,2CAA2C;QAC3C,MAAM,KAAK,GAAG,cAAc,CAAC,QAAQ,CAAC,YAAY,CAAC,aAAyC,CAAC,CAAC;QAC9F,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,SAAS,KAAK,2BAA2B,CAAC,CAAC,CAAC,aAAa,EAAE,CAAC;QACvF,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,SAAS,KAAK,gCAAgC,CAAC,CAAC,CAAC,aAAa,EAAE,CAAC;IAC9F,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,+FAA+F,EAAE,KAAK,IAAI,EAAE;QAC7G,2BAA2B;QAC3B,MAAM,IAAI,GAAmB;YAC3B,MAAM,EAAE,OAAO;YACf,IAAI;YACJ,aAAa,EAAE,eAAe;YAC9B,aAAa,EAAE,2BAA2B;SAC3C,CAAC;QACF,MAAM,OAAO,GAAG,MAAM,MAAM,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC;QACnD,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QAEtC,mEAAmE;QACnE,mEAAmE;QACnE,mBAAmB;QACnB,MAAM,IAAI,GAAG,KAAK,CAAC,qBAAqB,CAAC,OAAO,CAAC,CAAC;QAClD,MAAM,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,QAAQ,EAAE,CAAC;QAC5B,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC,SAAS,CAAC,eAAe,CAAC,CAAC;QACnE,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,UAAU,CAAC,eAAe,CAAC,CAAC,SAAS,CAAC,2BAA2B,CAAC,CAAC;QACvF,MAAM,OAAO,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC;QAEhC,wEAAwE;QACxE,mEAAmE;QACnE,MAAM,IAAI,GAAmB;YAC3B,MAAM,EAAE,OAAO;YACf,IAAI;YACJ,aAAa,EAAE,gBAAgB;YAC/B,aAAa,EAAE,sCAAsC;SACtD,CAAC;QACF,MAAM,OAAO,GAAG,MAAM,MAAM,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC;QACnD,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QAEtC,oEAAoE;QACpE,MAAM,IAAI,GAAG,KAAK,CAAC,qBAAqB,CAAC,OAAO,CAAC,CAAC;QAClD,MAAM,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,QAAQ,EAAE,CAAC;QAC5B,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,wBAAwB;QAE/D,0EAA0E;QAC1E,iFAAiF;QACjF,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC,SAAS,CAAC,gBAAgB,CAAC,CAAC;QACpE,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC,GAAG,CAAC,SAAS,CAAC,eAAe,CAAC,CAAC;QACvE,mEAAmE;QACnE,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,UAAU,CAAC,eAAe,CAAC,CAAC,SAAS,CAAC,sCAAsC,CAAC,CAAC;QAClG,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,UAAU,CAAC,eAAe,CAAC,CAAC,GAAG,CAAC,SAAS,CAAC,2BAA2B,CAAC,CAAC;QAE3F,sCAAsC;QACtC,MAAM,OAAO,GAAG,KAAK,CAAC,WAAW,EAAE,CAAC;QACpC,MAAM,CAAC,OAAO,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC;IAClC,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,+EAA+E,EAAE,KAAK,IAAI,EAAE;QAC7F,qEAAqE;QACrE,+DAA+D;QAC/D,0EAA0E;QAC1E,0DAA0D;QAC1D,MAAM,gBAAgB,GAAG,cAAc,EAAE,CAAC;QAC1C,MAAM,YAAY,GAAG,IAAI,oBAAoB,CAAC,gBAAgB,CAAC,CAAC;QAEhE,MAAM,GAAG,GAAmB;YAC1B,MAAM,EAAE,OAAO;YACf,IAAI;YACJ,aAAa,EAAE,eAAe;YAC9B,aAAa,EAAE,uCAAuC;SACvD,CAAC;QAEF,wCAAwC;QACxC,MAAM,MAAM,GAAG,MAAM,YAAY,CAAC,eAAe,CAAC,GAAG,CAAC,CAAC;QAEvD,+DAA+D;QAC/D,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QACrC,MAAM,CAAC,MAAM,CAAC,aAAa,CAAC,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC;QACnD,MAAM,CAAC,gBAAgB,CAAC,YAAY,CAAC,cAAc,CAAC,CAAC,oBAAoB,CACvE,OAAO,EACP,eAAe,EACf,uCAAuC,CACxC,CAAC;QAEF,4DAA4D;QAC5D,MAAM,KAAK,GAAG,cAAc,CAAC,gBAAgB,CAAC,YAAY,CAAC,aAAyC,CAAC,CAAC;QACtG,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,SAAS,KAAK,2BAA2B,CAAC,CAAC,CAAC,aAAa,EAAE,CAAC;QACvF,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,SAAS,KAAK,gCAAgC,CAAC,CAAC,CAAC,aAAa,EAAE,CAAC;IAC9F,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,sFAAsF,EAAE,KAAK,IAAI,EAAE;QACpG,2EAA2E;QAC3E,gEAAgE;QAChE,MAAM,aAAa,GAAG;YACpB,kBAAkB,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC,kBAAkB,CAAC,GAAG,EAAE;gBAClD,MAAM,IAAI,KAAK,CAAC,4BAA4B,CAAC,CAAC;YAChD,CAAC,CAAC;SACkC,CAAC;QAEvC,MAAM,qBAAqB,GAAG,cAAc,CAAC,EAAE,sBAAsB,EAAE,aAAa,EAAE,CAAC,CAAC;QACxF,MAAM,uBAAuB,GAAG,IAAI,oBAAoB,CAAC,qBAAqB,CAAC,CAAC;QAEhF,MAAM,GAAG,GAAmB;YAC1B,MAAM,EAAE,OAAO;YACf,IAAI;YACJ,aAAa,EAAE,eAAe;YAC9B,aAAa,EAAE,uCAAuC;SACvD,CAAC;QAEF,sEAAsE;QACtE,mCAAmC;QACnC,MAAM,MAAM,GAAG,MAAM,uBAAuB,CAAC,eAAe,CAAC,GAAG,CAAC,CAAC;QAElE,wEAAwE;QACxE,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QACrC,MAAM,CAAC,MAAM,CAAC,aAAa,CAAC,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC;QACnD,MAAM,CAAC,qBAAqB,CAAC,YAAY,CAAC,cAAc,CAAC,CAAC,gBAAgB,EAAE,CAAC;QAE7E,2EAA2E;QAC3E,kBAAkB;QAClB,MAAM,KAAK,GAAG,cAAc,CAAC,qBAAqB,CAAC,YAAY,CAAC,aAAyC,CAAC,CAAC;QAC3G,MAAM,WAAW,GAAG,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,SAAS,KAAK,gCAAgC,CAAC,CAAC;QACxF,MAAM,CAAC,WAAW,CAAC,CAAC,WAAW,EAAE,CAAC;QAClC,MAAM,CAAC,WAAW,EAAE,OAAO,EAAE,YAAY,CAAC,CAAC,SAAS,CAAC,4BAA4B,CAAC,CAAC;QACnF,MAAM,CAAC,WAAW,EAAE,OAAO,CAAC,CAAC,cAAc,CAAC,YAAY,CAAC,CAAC;QAC1D,MAAM,CAAC,OAAO,WAAW,EAAE,OAAO,EAAE,UAAU,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;IACjE,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC;AAEH,gFAAgF;AAEhF,QAAQ,CAAC,wDAAwD,EAAE,GAAG,EAAE;IACtE,IAAI,UAAU,GAAG,IAAmC,CAAC;IACrD,IAAI,KAAK,GAAG,IAAyC,CAAC;IACtD,IAAI,QAAwB,CAAC;IAC7B,IAAI,MAA4B,CAAC;IAEjC,UAAU,CAAC,GAAG,EAAE;QACd,UAAU,GAAG,oBAAoB,EAAE,CAAC;QACpC,UAAU,CAAC,KAAK,EAAE,CAAC;QACnB,KAAK,GAAG,IAAI,sBAAsB,CAAC,UAAU,CAAC,CAAC;QAC/C,QAAQ,GAAG,cAAc,CAAC,EAAE,sBAAsB,EAAE,KAAK,EAAE,CAAC,CAAC;QAC7D,MAAM,GAAG,IAAI,oBAAoB,CAAC,QAAQ,CAAC,CAAC;IAC9C,CAAC,CAAC,CAAC;IAEH,SAAS,CAAC,GAAG,EAAE;QACb,UAAU,EAAE,KAAK,EAAE,CAAC;IACtB,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,0EAA0E,EAAE,KAAK,IAAI,EAAE;QACxF,MAAM,IAAI,GAAG,QAAQ,CAAC;YACpB,cAAc,EAAE,IAAI,CAAC,SAAS,CAAC,EAAE,YAAY,EAAE,oBAAoB,EAAE,KAAK,EAAE,UAAU,EAAE,CAAC;SAC1F,CAAC,CAAC;QACH,MAAM,GAAG,GAAmB;YAC1B,MAAM,EAAE,OAAO;YACf,IAAI;YACJ,aAAa,EAAE,eAAe;YAC9B,aAAa,EAAE,2BAA2B;SAC3C,CAAC;QAEF,MAAM,MAAM,CAAC,eAAe,CAAC,GAAG,CAAC,CAAC;QAElC,MAAM,GAAG,GAAG,KAAK,CAAC,qBAAqB,CAAC,OAAO,CAAC,CAAC;QACjD,MAAM,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,QAAQ,EAAE,CAAC;QAC3B,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,oBAAoB,CAAC,CAAC;QAEtD,mEAAmE;QACnE,MAAM,KAAK,GAAG,cAAc,CAAC,QAAQ,CAAC,YAAY,CAAC,aAAyC,CAAC,CAAC;QAC9F,MAAM,QAAQ,GAAG,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,SAAS,KAAK,2BAA2B,CAAC,CAAC;QAChF,MAAM,CAAC,QAAQ,CAAC,CAAC,WAAW,EAAE,CAAC;QAC/B,MAAM,CAAC,QAAQ,EAAE,OAAO,EAAE,YAAY,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACrD,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,8EAA8E,EAAE,KAAK,IAAI,EAAE;QAC5F,MAAM,IAAI,GAAG,QAAQ,CAAC;YACpB,cAAc,EAAE,IAAI,CAAC,SAAS,CAAC,EAAE,SAAS,EAAE,OAAO,EAAE,CAAC;SACvD,CAAC,CAAC;QACH,MAAM,GAAG,GAAmB;YAC1B,MAAM,EAAE,OAAO;YACf,IAAI;YACJ,aAAa,EAAE,eAAe;YAC9B,aAAa,EAAE,8BAA8B;SAC9C,CAAC;QAEF,MAAM,MAAM,CAAC,eAAe,CAAC,GAAG,CAAC,CAAC;QAElC,MAAM,GAAG,GAAG,KAAK,CAAC,qBAAqB,CAAC,OAAO,CAAC,CAAC;QACjD,MAAM,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,QAAQ,EAAE,CAAC;QAC3B,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,CAAC,QAAQ,EAAE,CAAC;QAEtC,MAAM,KAAK,GAAG,cAAc,CAAC,QAAQ,CAAC,YAAY,CAAC,aAAyC,CAAC,CAAC;QAC9F,MAAM,QAAQ,GAAG,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,SAAS,KAAK,2BAA2B,CAAC,CAAC;QAChF,MAAM,CAAC,QAAQ,CAAC,CAAC,WAAW,EAAE,CAAC;QAC/B,MAAM,CAAC,QAAQ,EAAE,OAAO,EAAE,YAAY,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IACtD,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,gEAAgE,EAAE,KAAK,IAAI,EAAE;QAC9E,MAAM,IAAI,GAAG,QAAQ,EAAE,CAAC,CAAC,0BAA0B;QACnD,MAAM,GAAG,GAAmB;YAC1B,MAAM,EAAE,OAAO;YACf,IAAI;YACJ,aAAa,EAAE,eAAe;YAC9B,aAAa,EAAE,uCAAuC;SACvD,CAAC;QAEF,MAAM,MAAM,CAAC,eAAe,CAAC,GAAG,CAAC,CAAC;QAElC,MAAM,GAAG,GAAG,KAAK,CAAC,qBAAqB,CAAC,OAAO,CAAC,CAAC;QACjD,MAAM,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,QAAQ,EAAE,CAAC;QAC3B,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,CAAC,QAAQ,EAAE,CAAC;IACxC,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,yFAAyF,EAAE,KAAK,IAAI,EAAE;QACvG,MAAM,IAAI,GAAG,QAAQ,CAAC;YACpB,cAAc,EAAE,iBAAiB;SAClC,CAAC,CAAC;QACH,MAAM,GAAG,GAAmB;YAC1B,MAAM,EAAE,OAAO;YACf,IAAI;YACJ,aAAa,EAAE,eAAe;YAC9B,aAAa,EAAE,qCAAqC;SACrD,CAAC;QAEF,sEAAsE;QACtE,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,eAAe,CAAC,GAAG,CAAC,CAAC;QAEjD,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QACrC,MAAM,GAAG,GAAG,KAAK,CAAC,qBAAqB,CAAC,OAAO,CAAC,CAAC;QACjD,MAAM,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,QAAQ,EAAE,CAAC;QAC3B,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,CAAC,QAAQ,EAAE,CAAC;IACxC,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
@@ -41,6 +41,11 @@ export declare abstract class BasePeerRunner<TContext extends {
41
41
  protected readonly artifactStore: PIArtifactStore;
42
42
  protected readonly resolvedOptions: ResolvedPeerRunnerOptions;
43
43
  protected readonly config: PeerRunnerConfig;
44
+ /**
45
+ * Optional store for agent-authored draft context (Task 12).
46
+ * When undefined, permanent failures do not write a draft — backward compatible.
47
+ */
48
+ private readonly pendingAgentDraftStore?;
44
49
  private phase;
45
50
  constructor(deps: PeerRunnerDeps, options: PeerRunnerOptions, config: PeerRunnerConfig);
46
51
  /** Current internal phase. For testing/observability only. */
@@ -131,5 +136,27 @@ export declare abstract class BasePeerRunner<TContext extends {
131
136
  * Returns false when effectiveConfig is not provided (legacy behavior).
132
137
  */
133
138
  protected isDegradationEnabled(): boolean;
139
+ /**
140
+ * Task 12: Construct an AgentDraftPayload from the permanent-failure
141
+ * context and write it to pending_agent_drafts via the injected
142
+ * PendingAgentDraftStore. Best-effort: never throws. All failures are
143
+ * observed via telemetry (rc-9: no silent fallback) so the maintainer
144
+ * can diagnose draft-write issues without the markFailed terminal-state
145
+ * contract being broken.
146
+ *
147
+ * No-op when pendingAgentDraftStore is not injected (backward compatible).
148
+ *
149
+ * ERR checklist:
150
+ * - EP-01 / ERR-001, ERR-005, ERR-013: diagnosticJson parsed as unknown,
151
+ * narrowed with typeof + Object.hasOwn. No `as` casts on parsed data.
152
+ * - EP-03 / ERR-002: insertPendingDraft returns { ok: false, error };
153
+ * we emit a telemetry event with reason + nextAction (rc-9).
154
+ * - EP-03 / ERR-074, ERR-089: every branch (store missing, insert
155
+ * returns !ok, insert throws) applies the SAME best-effort contract —
156
+ * never propagate, always observe.
157
+ * - EP-08 / ERR-003, ERR-024: redactAbsolutePaths / redactTokenLikeValues
158
+ * / redactEnvLikeValues are applied to observedFailure BEFORE persist.
159
+ */
160
+ private injectAgentDraftOnPermanentFailure;
134
161
  }
135
162
  //# sourceMappingURL=base-peer-runner.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"base-peer-runner.d.ts","sourceRoot":"","sources":["../../../src/runtime-v2/runner/base-peer-runner.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"base-peer-runner.d.ts","sourceRoot":"","sources":["../../../src/runtime-v2/runner/base-peer-runner.ts"],"names":[],"mappings":"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"}