@principles/core 1.113.0 → 1.115.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 (35) hide show
  1. package/dist/runtime-v2/__tests__/activation-types-helpers.test.d.ts +20 -0
  2. package/dist/runtime-v2/__tests__/activation-types-helpers.test.d.ts.map +1 -0
  3. package/dist/runtime-v2/__tests__/activation-types-helpers.test.js +223 -0
  4. package/dist/runtime-v2/__tests__/activation-types-helpers.test.js.map +1 -0
  5. package/dist/runtime-v2/__tests__/architecture-regression.test.js +7 -3
  6. package/dist/runtime-v2/__tests__/architecture-regression.test.js.map +1 -1
  7. package/dist/runtime-v2/__tests__/attack-e2e-pipeline-smoke.test.js +2 -0
  8. package/dist/runtime-v2/__tests__/attack-e2e-pipeline-smoke.test.js.map +1 -1
  9. package/dist/runtime-v2/__tests__/evidence-guards.test.d.ts +18 -0
  10. package/dist/runtime-v2/__tests__/evidence-guards.test.d.ts.map +1 -0
  11. package/dist/runtime-v2/__tests__/evidence-guards.test.js +155 -0
  12. package/dist/runtime-v2/__tests__/evidence-guards.test.js.map +1 -0
  13. package/dist/runtime-v2/__tests__/pain-evidence-contract.test.js +3 -1
  14. package/dist/runtime-v2/__tests__/pain-evidence-contract.test.js.map +1 -1
  15. package/dist/runtime-v2/__tests__/pain-signal-bridge-short-circuit.test.js +9 -2
  16. package/dist/runtime-v2/__tests__/pain-signal-bridge-short-circuit.test.js.map +1 -1
  17. package/dist/runtime-v2/activation/__tests__/approval-queue.test.d.ts +15 -0
  18. package/dist/runtime-v2/activation/__tests__/approval-queue.test.d.ts.map +1 -1
  19. package/dist/runtime-v2/activation/__tests__/approval-queue.test.js +326 -164
  20. package/dist/runtime-v2/activation/__tests__/approval-queue.test.js.map +1 -1
  21. package/dist/runtime-v2/activation/__tests__/low-risk-writers.test.d.ts +21 -0
  22. package/dist/runtime-v2/activation/__tests__/low-risk-writers.test.d.ts.map +1 -0
  23. package/dist/runtime-v2/activation/__tests__/low-risk-writers.test.js +451 -0
  24. package/dist/runtime-v2/activation/__tests__/low-risk-writers.test.js.map +1 -0
  25. package/dist/runtime-v2/config/pd-config-types.d.ts.map +1 -1
  26. package/dist/runtime-v2/config/pd-config-types.js +1 -2
  27. package/dist/runtime-v2/config/pd-config-types.js.map +1 -1
  28. package/dist/runtime-v2/pain-signal-bridge.d.ts.map +1 -1
  29. package/dist/runtime-v2/pain-signal-bridge.js +4 -2
  30. package/dist/runtime-v2/pain-signal-bridge.js.map +1 -1
  31. package/dist/runtime-v2/runner/__tests__/m8-02-e2e.test.js +6 -0
  32. package/dist/runtime-v2/runner/__tests__/m8-02-e2e.test.js.map +1 -1
  33. package/dist/runtime-v2/runner/__tests__/m9-e2e.test.js +2 -2
  34. package/dist/runtime-v2/runner/__tests__/m9-e2e.test.js.map +1 -1
  35. package/package.json +1 -1
@@ -1,26 +1,44 @@
1
- import { describe, it, expect } from 'vitest';
2
- import { decideAutoPromotion, ApprovalQueue } from '../approval-queue.js';
3
- import { MemoryApprovalQueueStore } from '../memory-approval-store.js';
1
+ /**
2
+ * Approval Queue Tests PRI-145
3
+ *
4
+ * Unit tests for ApprovalQueue class and decideAutoPromotion function.
5
+ *
6
+ * Tests verify:
7
+ * - decideAutoPromotion() correctly evaluates auto-promotion conditions
8
+ * - ApprovalQueue class methods work correctly with mock store
9
+ * - Boundary conditions for confidence threshold
10
+ *
11
+ * ERR checklist:
12
+ * - ERR-002: Every decision path carries reason + nextAction
13
+ * - ERR-009: Malformed state fails loud
14
+ * - ERR-025: Production-path tests, not just helpers
15
+ */
16
+ import { describe, it, expect, vi } from 'vitest';
17
+ import { decideAutoPromotion, ApprovalQueue, } from '../approval-queue';
18
+ import { AUTO_PROMOTION_CONFIDENCE_THRESHOLD, AUTO_PROMOTABLE_CHANNELS, } from '../activation-types';
19
+ // ── decideAutoPromotion Tests ─────────────────────────────────────────────────
4
20
  describe('decideAutoPromotion', () => {
5
21
  it('returns true for skill channel with confidence >= 0.95', () => {
6
22
  expect(decideAutoPromotion('skill', 0.95)).toBe(true);
7
23
  expect(decideAutoPromotion('skill', 0.96)).toBe(true);
24
+ expect(decideAutoPromotion('skill', 0.99)).toBe(true);
8
25
  expect(decideAutoPromotion('skill', 1.0)).toBe(true);
9
26
  });
10
27
  it('returns false for skill channel with confidence < 0.95', () => {
11
28
  expect(decideAutoPromotion('skill', 0.94)).toBe(false);
12
- expect(decideAutoPromotion('skill', 0.5)).toBe(false);
13
- expect(decideAutoPromotion('skill', 0)).toBe(false);
29
+ expect(decideAutoPromotion('skill', 0.90)).toBe(false);
30
+ expect(decideAutoPromotion('skill', 0.80)).toBe(false);
31
+ expect(decideAutoPromotion('skill', 0.50)).toBe(false);
14
32
  });
15
- it('returns false for code_tool_hook regardless of confidence', () => {
33
+ it('returns false for non-AUTO_PROMOTABLE_CHANNELS regardless of confidence', () => {
34
+ // code_tool_hook is not auto-promotable
16
35
  expect(decideAutoPromotion('code_tool_hook', 0.99)).toBe(false);
17
36
  expect(decideAutoPromotion('code_tool_hook', 1.0)).toBe(false);
18
- });
19
- it('returns false for model_training regardless of confidence', () => {
37
+ // model_training is not auto-promotable
20
38
  expect(decideAutoPromotion('model_training', 0.99)).toBe(false);
21
- });
22
- it('returns false for low-risk channels (already auto-activated)', () => {
39
+ // prompt is low-risk but not auto-promotable (goes through direct activation)
23
40
  expect(decideAutoPromotion('prompt', 0.99)).toBe(false);
41
+ // defer_archive is low-risk but not auto-promotable
24
42
  expect(decideAutoPromotion('defer_archive', 0.99)).toBe(false);
25
43
  });
26
44
  it('returns false for undefined confidence', () => {
@@ -29,205 +47,349 @@ describe('decideAutoPromotion', () => {
29
47
  it('returns false for null confidence', () => {
30
48
  expect(decideAutoPromotion('skill', null)).toBe(false);
31
49
  });
32
- it('returns false for negative confidence (out of range)', () => {
50
+ it('returns false for negative confidence (invalid)', () => {
33
51
  expect(decideAutoPromotion('skill', -0.1)).toBe(false);
34
- expect(decideAutoPromotion('skill', -1)).toBe(false);
35
- expect(decideAutoPromotion('skill', -100)).toBe(false);
36
52
  });
37
- it('returns false for confidence > 1 (out of range)', () => {
38
- expect(decideAutoPromotion('skill', 1.1)).toBe(false);
39
- expect(decideAutoPromotion('skill', 2)).toBe(false);
40
- expect(decideAutoPromotion('skill', 100)).toBe(false);
53
+ it('returns false for confidence > 1.0 (invalid)', () => {
54
+ expect(decideAutoPromotion('skill', 1.5)).toBe(false);
55
+ });
56
+ // Boundary tests
57
+ it('returns true at exact threshold 0.95', () => {
58
+ expect(decideAutoPromotion('skill', AUTO_PROMOTION_CONFIDENCE_THRESHOLD)).toBe(true);
59
+ });
60
+ it('returns false just below threshold 0.94', () => {
61
+ expect(decideAutoPromotion('skill', 0.94)).toBe(false);
62
+ });
63
+ it('AUTO_PROMOTABLE_CHANNELS contains only skill', () => {
64
+ expect(AUTO_PROMOTABLE_CHANNELS).toEqual(['skill']);
65
+ });
66
+ it('AUTO_PROMOTION_CONFIDENCE_THRESHOLD is 0.95', () => {
67
+ expect(AUTO_PROMOTION_CONFIDENCE_THRESHOLD).toBe(0.95);
68
+ });
69
+ it('only skill channel can be auto-promoted', () => {
70
+ const channels = [
71
+ 'prompt', 'defer_archive', 'skill', 'code_tool_hook', 'model_training',
72
+ ];
73
+ for (const channel of channels) {
74
+ const canAutoPromote = decideAutoPromotion(channel, 0.95);
75
+ expect(canAutoPromote).toBe(channel === 'skill');
76
+ }
77
+ });
78
+ // Invariant: auto-promotion requires both channel AND confidence conditions
79
+ it('auto-promotion requires both channel match AND confidence threshold', () => {
80
+ // skill + high confidence → true
81
+ expect(decideAutoPromotion('skill', 0.96)).toBe(true);
82
+ // skill + low confidence → false
83
+ expect(decideAutoPromotion('skill', 0.50)).toBe(false);
84
+ // non-skill + high confidence → false
85
+ expect(decideAutoPromotion('code_tool_hook', 0.96)).toBe(false);
86
+ // non-skill + low confidence → false
87
+ expect(decideAutoPromotion('code_tool_hook', 0.50)).toBe(false);
41
88
  });
42
89
  });
90
+ // ── ApprovalQueue Class Tests ─────────────────────────────────────────────────
91
+ function createMockStore() {
92
+ const records = new Map();
93
+ return {
94
+ enqueue: vi.fn(async (input, now) => {
95
+ const approvalId = `apr_${input.channel}_${input.artifactId}`;
96
+ const record = {
97
+ approvalId,
98
+ artifactId: input.artifactId,
99
+ channel: input.channel,
100
+ riskLevel: input.riskLevel,
101
+ status: 'pending',
102
+ confidence: input.confidence,
103
+ requestedAt: now,
104
+ summary: input.summary,
105
+ triggerReason: input.triggerReason,
106
+ confidenceExplanation: input.confidenceExplanation,
107
+ effectDescription: input.effectDescription,
108
+ rejectionEffect: input.rejectionEffect,
109
+ };
110
+ records.set(approvalId, record);
111
+ return record;
112
+ }),
113
+ getById: vi.fn(async (approvalId) => {
114
+ return records.get(approvalId) ?? null;
115
+ }),
116
+ listPending: vi.fn(async (filter) => {
117
+ const pending = Array.from(records.values()).filter(r => r.status === 'pending');
118
+ if (filter?.channel) {
119
+ return pending.filter(r => r.channel === filter.channel);
120
+ }
121
+ if (filter?.riskLevel) {
122
+ return pending.filter(r => r.riskLevel === filter.riskLevel);
123
+ }
124
+ return pending;
125
+ }),
126
+ listAll: vi.fn(async (filter) => {
127
+ let all = Array.from(records.values());
128
+ if (filter?.status) {
129
+ all = all.filter(r => r.status === filter.status);
130
+ }
131
+ if (filter?.channel) {
132
+ all = all.filter(r => r.channel === filter.channel);
133
+ }
134
+ return all;
135
+ }),
136
+ countByStatus: vi.fn(async () => {
137
+ const all = Array.from(records.values());
138
+ return {
139
+ pending: all.filter(r => r.status === 'pending').length,
140
+ approved: all.filter(r => r.status === 'approved').length,
141
+ rejected: all.filter(r => r.status === 'rejected').length,
142
+ cancelled: all.filter(r => r.status === 'cancelled').length,
143
+ };
144
+ }),
145
+ approve: vi.fn(async (approvalId, decidedBy, note) => {
146
+ const record = records.get(approvalId);
147
+ if (!record)
148
+ return { ok: false, error: 'not_found' };
149
+ if (record.status !== 'pending')
150
+ return { ok: false, error: 'already_decided', status: record.status };
151
+ record.status = 'approved';
152
+ record.decidedAt = new Date().toISOString();
153
+ record.decidedBy = decidedBy;
154
+ record.decisionNote = note;
155
+ return { ok: true, record };
156
+ }),
157
+ reject: vi.fn(async (approvalId, decidedBy, reason) => {
158
+ const record = records.get(approvalId);
159
+ if (!record)
160
+ return { ok: false, error: 'not_found' };
161
+ if (record.status !== 'pending')
162
+ return { ok: false, error: 'already_decided', status: record.status };
163
+ record.status = 'rejected';
164
+ record.decidedAt = new Date().toISOString();
165
+ record.decidedBy = decidedBy;
166
+ record.rejectionReason = reason;
167
+ return { ok: true, record };
168
+ }),
169
+ resetToPending: vi.fn(async (approvalId) => {
170
+ const record = records.get(approvalId);
171
+ if (!record)
172
+ return { ok: false, error: 'not_found' };
173
+ if (record.status !== 'approved')
174
+ return { ok: false, error: 'not_approved' };
175
+ record.status = 'pending';
176
+ record.decidedAt = undefined;
177
+ record.decidedBy = undefined;
178
+ return { ok: true };
179
+ }),
180
+ };
181
+ }
43
182
  describe('ApprovalQueue', () => {
44
- it('enqueue creates a pending record', async () => {
45
- const store = new MemoryApprovalQueueStore();
183
+ it('enqueue creates a pending approval record', async () => {
184
+ const store = createMockStore();
46
185
  const queue = new ApprovalQueue(store);
47
186
  const record = await queue.enqueue({
48
- artifactId: 'art-1',
49
- channel: 'code_tool_hook',
50
- riskLevel: 'high',
51
- confidence: 0.8,
52
- }, '2026-05-18T00:00:00Z');
187
+ artifactId: 'art-001',
188
+ channel: 'skill',
189
+ riskLevel: 'medium',
190
+ confidence: 0.85,
191
+ summary: 'Test approval',
192
+ }, '2026-05-17T00:00:00Z');
53
193
  expect(record.status).toBe('pending');
54
- expect(record.artifactId).toBe('art-1');
55
- expect(record.channel).toBe('code_tool_hook');
56
- expect(record.riskLevel).toBe('high');
57
- expect(record.confidence).toBe(0.8);
194
+ expect(record.artifactId).toBe('art-001');
195
+ expect(record.channel).toBe('skill');
196
+ expect(record.confidence).toBe(0.85);
58
197
  });
59
- it('approve changes pending to approved', async () => {
60
- const store = new MemoryApprovalQueueStore();
198
+ it('getById returns the correct record', async () => {
199
+ const store = createMockStore();
61
200
  const queue = new ApprovalQueue(store);
62
- const record = await queue.enqueue({
63
- artifactId: 'art-1',
64
- channel: 'code_tool_hook',
65
- riskLevel: 'high',
66
- }, '2026-05-18T00:00:00Z');
67
- const result = await queue.approve(record.approvalId, 'user-1', 'looks good');
201
+ const created = await queue.enqueue({
202
+ artifactId: 'art-001',
203
+ channel: 'skill',
204
+ riskLevel: 'medium',
205
+ }, '2026-05-17T00:00:00Z');
206
+ const found = await queue.getById(created.approvalId);
207
+ expect(found).not.toBeNull();
208
+ expect(found?.approvalId).toBe(created.approvalId);
209
+ });
210
+ it('getById returns null for non-existent approval', async () => {
211
+ const store = createMockStore();
212
+ const queue = new ApprovalQueue(store);
213
+ const found = await queue.getById('non-existent');
214
+ expect(found).toBeNull();
215
+ });
216
+ it('approve changes status to approved', async () => {
217
+ const store = createMockStore();
218
+ const queue = new ApprovalQueue(store);
219
+ const created = await queue.enqueue({
220
+ artifactId: 'art-001',
221
+ channel: 'skill',
222
+ riskLevel: 'medium',
223
+ }, '2026-05-17T00:00:00Z');
224
+ const result = await queue.approve(created.approvalId, 'user-001', 'Looks good');
68
225
  expect(result.ok).toBe(true);
69
226
  if (result.ok) {
70
227
  expect(result.record.status).toBe('approved');
71
- expect(result.record.decidedBy).toBe('user-1');
72
- expect(result.record.decisionNote).toBe('looks good');
228
+ expect(result.record.decidedBy).toBe('user-001');
229
+ expect(result.record.decisionNote).toBe('Looks good');
73
230
  }
74
231
  });
75
- it('reject changes pending to rejected', async () => {
76
- const store = new MemoryApprovalQueueStore();
232
+ it('reject changes status to rejected', async () => {
233
+ const store = createMockStore();
77
234
  const queue = new ApprovalQueue(store);
78
- const record = await queue.enqueue({
79
- artifactId: 'art-1',
80
- channel: 'code_tool_hook',
81
- riskLevel: 'high',
82
- }, '2026-05-18T00:00:00Z');
83
- const result = await queue.reject(record.approvalId, 'user-1', 'too risky');
235
+ const created = await queue.enqueue({
236
+ artifactId: 'art-001',
237
+ channel: 'skill',
238
+ riskLevel: 'medium',
239
+ }, '2026-05-17T00:00:00Z');
240
+ const result = await queue.reject(created.approvalId, 'user-001', 'Not ready');
84
241
  expect(result.ok).toBe(true);
85
242
  if (result.ok) {
86
243
  expect(result.record.status).toBe('rejected');
87
- expect(result.record.rejectionReason).toBe('too risky');
244
+ expect(result.record.decidedBy).toBe('user-001');
245
+ expect(result.record.rejectionReason).toBe('Not ready');
88
246
  }
89
247
  });
90
- it('approve returns error for already-decided record', async () => {
91
- const store = new MemoryApprovalQueueStore();
248
+ it('approve returns error for non-existent approval', async () => {
249
+ const store = createMockStore();
92
250
  const queue = new ApprovalQueue(store);
93
- const record = await queue.enqueue({
94
- artifactId: 'art-1',
95
- channel: 'code_tool_hook',
96
- riskLevel: 'high',
97
- }, '2026-05-18T00:00:00Z');
98
- await queue.approve(record.approvalId, 'user-1');
99
- const result = await queue.approve(record.approvalId, 'user-2');
251
+ const result = await queue.approve('non-existent', 'user-001');
100
252
  expect(result.ok).toBe(false);
101
- if (!result.ok && result.error === 'already_decided') {
102
- expect(result.status).toBe('approved');
253
+ if (!result.ok) {
254
+ expect(result.error).toBe('not_found');
103
255
  }
104
256
  });
105
- it('reject returns error for already-decided record', async () => {
106
- const store = new MemoryApprovalQueueStore();
257
+ it('approve returns error for already decided approval', async () => {
258
+ const store = createMockStore();
107
259
  const queue = new ApprovalQueue(store);
108
- const record = await queue.enqueue({
109
- artifactId: 'art-1',
110
- channel: 'code_tool_hook',
111
- riskLevel: 'high',
112
- }, '2026-05-18T00:00:00Z');
113
- await queue.reject(record.approvalId, 'user-1', 'bad');
114
- const result = await queue.reject(record.approvalId, 'user-2', 'also bad');
260
+ const created = await queue.enqueue({
261
+ artifactId: 'art-001',
262
+ channel: 'skill',
263
+ riskLevel: 'medium',
264
+ }, '2026-05-17T00:00:00Z');
265
+ // First approve succeeds
266
+ await queue.approve(created.approvalId, 'user-001');
267
+ // Second approve fails
268
+ const result = await queue.approve(created.approvalId, 'user-002');
115
269
  expect(result.ok).toBe(false);
116
- if (!result.ok) {
117
- expect(result.error).toBe('already_decided');
270
+ if (!result.ok && result.error === 'already_decided') {
271
+ expect(result.status).toBe('approved');
118
272
  }
119
273
  });
120
- it('approve returns not_found for missing record', async () => {
121
- const store = new MemoryApprovalQueueStore();
274
+ it('reject returns error for already decided approval', async () => {
275
+ const store = createMockStore();
122
276
  const queue = new ApprovalQueue(store);
123
- const result = await queue.approve('nonexistent', 'user-1');
277
+ const created = await queue.enqueue({
278
+ artifactId: 'art-001',
279
+ channel: 'skill',
280
+ riskLevel: 'medium',
281
+ }, '2026-05-17T00:00:00Z');
282
+ // First approve succeeds
283
+ await queue.approve(created.approvalId, 'user-001');
284
+ // Reject fails because already approved
285
+ const result = await queue.reject(created.approvalId, 'user-002', 'Changed mind');
124
286
  expect(result.ok).toBe(false);
125
287
  if (!result.ok) {
126
- expect(result.error).toBe('not_found');
288
+ expect(result.error).toBe('already_decided');
127
289
  }
128
290
  });
129
- it('enqueue is idempotent for same artifact+channel', async () => {
130
- const store = new MemoryApprovalQueueStore();
291
+ it('listPending returns only pending approvals', async () => {
292
+ const store = createMockStore();
131
293
  const queue = new ApprovalQueue(store);
132
- const r1 = await queue.enqueue({ artifactId: 'art-1', channel: 'code_tool_hook', riskLevel: 'high' }, '2026-05-18T00:00:00Z');
133
- const r2 = await queue.enqueue({ artifactId: 'art-1', channel: 'code_tool_hook', riskLevel: 'high' }, '2026-05-19T00:00:00Z');
134
- expect(r1.approvalId).toBe(r2.approvalId);
135
- expect(r1.requestedAt).toBe(r2.requestedAt);
136
- expect(r1.requestedAt).toBe('2026-05-18T00:00:00Z');
294
+ await queue.enqueue({
295
+ artifactId: 'art-001',
296
+ channel: 'skill',
297
+ riskLevel: 'medium',
298
+ }, '2026-05-17T00:00:00Z');
299
+ const created2 = await queue.enqueue({
300
+ artifactId: 'art-002',
301
+ channel: 'skill',
302
+ riskLevel: 'medium',
303
+ }, '2026-05-17T00:00:00Z');
304
+ // Approve one
305
+ await queue.approve(created2.approvalId, 'user-001');
137
306
  const pending = await queue.listPending();
138
307
  expect(pending).toHaveLength(1);
308
+ expect(pending[0]?.artifactId).toBe('art-001');
139
309
  });
140
- it('listPending returns only pending records', async () => {
141
- const store = new MemoryApprovalQueueStore();
310
+ it('listPending with filter returns matching approvals', async () => {
311
+ const store = createMockStore();
142
312
  const queue = new ApprovalQueue(store);
143
- await queue.enqueue({ artifactId: 'art-1', channel: 'code_tool_hook', riskLevel: 'high' }, '2026-05-18T00:00:00Z');
144
- await queue.enqueue({ artifactId: 'art-2', channel: 'model_training', riskLevel: 'critical' }, '2026-05-18T00:00:00Z');
145
- const r3 = await queue.enqueue({ artifactId: 'art-3', channel: 'skill', riskLevel: 'medium' }, '2026-05-18T00:00:00Z');
146
- await queue.approve(r3.approvalId, 'user-1');
147
- const pending = await queue.listPending();
148
- expect(pending).toHaveLength(2);
149
- expect(pending.every((r) => r.status === 'pending')).toBe(true);
313
+ await queue.enqueue({
314
+ artifactId: 'art-001',
315
+ channel: 'skill',
316
+ riskLevel: 'medium',
317
+ }, '2026-05-17T00:00:00Z');
318
+ await queue.enqueue({
319
+ artifactId: 'art-002',
320
+ channel: 'code_tool_hook',
321
+ riskLevel: 'high',
322
+ }, '2026-05-17T00:00:00Z');
323
+ const skillPending = await queue.listPending({ channel: 'skill' });
324
+ expect(skillPending).toHaveLength(1);
325
+ expect(skillPending[0]?.channel).toBe('skill');
326
+ const highRiskPending = await queue.listPending({ riskLevel: 'high' });
327
+ expect(highRiskPending).toHaveLength(1);
328
+ expect(highRiskPending[0]?.riskLevel).toBe('high');
150
329
  });
151
- it('listPending filters by channel', async () => {
152
- const store = new MemoryApprovalQueueStore();
330
+ it('countByStatus returns correct counts', async () => {
331
+ const store = createMockStore();
153
332
  const queue = new ApprovalQueue(store);
154
- await queue.enqueue({ artifactId: 'art-1', channel: 'code_tool_hook', riskLevel: 'high' }, '2026-05-18T00:00:00Z');
155
- await queue.enqueue({ artifactId: 'art-2', channel: 'model_training', riskLevel: 'critical' }, '2026-05-18T00:00:00Z');
156
- const pending = await queue.listPending({ channel: 'code_tool_hook' });
157
- expect(pending).toHaveLength(1);
158
- expect(pending[0]?.channel).toBe('code_tool_hook');
333
+ const created1 = await queue.enqueue({
334
+ artifactId: 'art-001',
335
+ channel: 'skill',
336
+ riskLevel: 'medium',
337
+ }, '2026-05-17T00:00:00Z');
338
+ const created2 = await queue.enqueue({
339
+ artifactId: 'art-002',
340
+ channel: 'skill',
341
+ riskLevel: 'medium',
342
+ }, '2026-05-17T00:00:00Z');
343
+ const created3 = await queue.enqueue({
344
+ artifactId: 'art-003',
345
+ channel: 'skill',
346
+ riskLevel: 'medium',
347
+ }, '2026-05-17T00:00:00Z');
348
+ await queue.approve(created1.approvalId, 'user-001');
349
+ await queue.reject(created2.approvalId, 'user-001', 'Not good');
350
+ const stats = await queue.countByStatus();
351
+ expect(stats.pending).toBe(1);
352
+ expect(stats.approved).toBe(1);
353
+ expect(stats.rejected).toBe(1);
354
+ expect(stats.cancelled).toBe(0);
159
355
  });
160
- it('listPending filters by riskLevel', async () => {
161
- const store = new MemoryApprovalQueueStore();
356
+ it('resetToPending rolls back approved approval', async () => {
357
+ const store = createMockStore();
162
358
  const queue = new ApprovalQueue(store);
163
- await queue.enqueue({ artifactId: 'art-1', channel: 'code_tool_hook', riskLevel: 'high' }, '2026-05-18T00:00:00Z');
164
- await queue.enqueue({ artifactId: 'art-2', channel: 'model_training', riskLevel: 'critical' }, '2026-05-18T00:00:00Z');
165
- await queue.enqueue({ artifactId: 'art-3', channel: 'skill', riskLevel: 'medium' }, '2026-05-18T00:00:00Z');
166
- const pending = await queue.listPending({ riskLevel: 'high' });
167
- expect(pending).toHaveLength(1);
168
- expect(pending[0]?.channel).toBe('code_tool_hook');
359
+ const created = await queue.enqueue({
360
+ artifactId: 'art-001',
361
+ channel: 'skill',
362
+ riskLevel: 'medium',
363
+ }, '2026-05-17T00:00:00Z');
364
+ await queue.approve(created.approvalId, 'user-001');
365
+ const result = await queue.resetToPending(created.approvalId);
366
+ expect(result.ok).toBe(true);
367
+ const found = await queue.getById(created.approvalId);
368
+ expect(found?.status).toBe('pending');
169
369
  });
170
- it('getById returns enqueued record', async () => {
171
- const store = new MemoryApprovalQueueStore();
370
+ it('resetToPending returns error for non-existent approval', async () => {
371
+ const store = createMockStore();
172
372
  const queue = new ApprovalQueue(store);
173
- const record = await queue.enqueue({ artifactId: 'art-1', channel: 'skill', riskLevel: 'medium' }, '2026-05-18T00:00:00Z');
174
- const found = await queue.getById(record.approvalId);
175
- expect(found).not.toBeNull();
176
- expect(found?.artifactId).toBe('art-1');
177
- });
178
- describe('resetToPending', () => {
179
- it('rolls back approved record to pending', async () => {
180
- const store = new MemoryApprovalQueueStore();
181
- const queue = new ApprovalQueue(store);
182
- const record = await queue.enqueue({ artifactId: 'art-1', channel: 'prompt', riskLevel: 'low' }, '2026-05-18T00:00:00Z');
183
- await queue.approve(record.approvalId, 'user-1', 'looks good');
184
- const result = await queue.resetToPending(record.approvalId);
185
- expect(result.ok).toBe(true);
186
- const fresh = await queue.getById(record.approvalId);
187
- expect(fresh?.status).toBe('pending');
188
- expect(fresh?.decidedAt).toBeUndefined();
189
- expect(fresh?.decidedBy).toBeUndefined();
190
- });
191
- it('returns not_found for missing record', async () => {
192
- const store = new MemoryApprovalQueueStore();
193
- const queue = new ApprovalQueue(store);
194
- const result = await queue.resetToPending('nonexistent');
195
- expect(result.ok).toBe(false);
196
- if (!result.ok)
197
- expect(result.error).toBe('not_found');
198
- });
199
- it('returns not_approved for pending record', async () => {
200
- const store = new MemoryApprovalQueueStore();
201
- const queue = new ApprovalQueue(store);
202
- const record = await queue.enqueue({ artifactId: 'art-1', channel: 'prompt', riskLevel: 'low' }, '2026-05-18T00:00:00Z');
203
- const result = await queue.resetToPending(record.approvalId);
204
- expect(result.ok).toBe(false);
205
- if (!result.ok)
206
- expect(result.error).toBe('not_approved');
207
- });
208
- it('returns not_approved for rejected record', async () => {
209
- const store = new MemoryApprovalQueueStore();
210
- const queue = new ApprovalQueue(store);
211
- const record = await queue.enqueue({ artifactId: 'art-1', channel: 'prompt', riskLevel: 'low' }, '2026-05-18T00:00:00Z');
212
- await queue.reject(record.approvalId, 'user-1', 'bad');
213
- const result = await queue.resetToPending(record.approvalId);
214
- expect(result.ok).toBe(false);
215
- if (!result.ok)
216
- expect(result.error).toBe('not_approved');
217
- });
218
- it('allows re-approval after rollback', async () => {
219
- const store = new MemoryApprovalQueueStore();
220
- const queue = new ApprovalQueue(store);
221
- const record = await queue.enqueue({ artifactId: 'art-1', channel: 'prompt', riskLevel: 'low' }, '2026-05-18T00:00:00Z');
222
- await queue.approve(record.approvalId, 'user-1', 'first');
223
- await queue.resetToPending(record.approvalId);
224
- const reApprove = await queue.approve(record.approvalId, 'user-2', 'retry');
225
- expect(reApprove.ok).toBe(true);
226
- if (reApprove.ok) {
227
- expect(reApprove.record.status).toBe('approved');
228
- expect(reApprove.record.decidedBy).toBe('user-2');
229
- }
230
- });
373
+ const result = await queue.resetToPending('non-existent');
374
+ expect(result.ok).toBe(false);
375
+ if (!result.ok) {
376
+ expect(result.error).toBe('not_found');
377
+ }
378
+ });
379
+ it('resetToPending returns error for non-approved approval', async () => {
380
+ const store = createMockStore();
381
+ const queue = new ApprovalQueue(store);
382
+ const created = await queue.enqueue({
383
+ artifactId: 'art-001',
384
+ channel: 'skill',
385
+ riskLevel: 'medium',
386
+ }, '2026-05-17T00:00:00Z');
387
+ // Still pending, not approved
388
+ const result = await queue.resetToPending(created.approvalId);
389
+ expect(result.ok).toBe(false);
390
+ if (!result.ok) {
391
+ expect(result.error).toBe('not_approved');
392
+ }
231
393
  });
232
394
  });
233
395
  //# sourceMappingURL=approval-queue.test.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"approval-queue.test.js","sourceRoot":"","sources":["../../../../src/runtime-v2/activation/__tests__/approval-queue.test.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"approval-queue.test.js","sourceRoot":"","sources":["../../../../src/runtime-v2/activation/__tests__/approval-queue.test.ts"],"names":[],"mappings":"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"}