@principles/core 1.97.0 → 1.99.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 (43) hide show
  1. package/dist/runtime-v2/__tests__/architecture-regression.test.js +12 -0
  2. package/dist/runtime-v2/__tests__/architecture-regression.test.js.map +1 -1
  3. package/dist/runtime-v2/__tests__/evidence-sanitizer.test.d.ts +21 -0
  4. package/dist/runtime-v2/__tests__/evidence-sanitizer.test.d.ts.map +1 -0
  5. package/dist/runtime-v2/__tests__/evidence-sanitizer.test.js +354 -0
  6. package/dist/runtime-v2/__tests__/evidence-sanitizer.test.js.map +1 -0
  7. package/dist/runtime-v2/config/pd-config-defaults.d.ts.map +1 -1
  8. package/dist/runtime-v2/config/pd-config-defaults.js +1 -0
  9. package/dist/runtime-v2/config/pd-config-defaults.js.map +1 -1
  10. package/dist/runtime-v2/evidence-triage/__tests__/source-descriptors.test.d.ts +18 -0
  11. package/dist/runtime-v2/evidence-triage/__tests__/source-descriptors.test.d.ts.map +1 -0
  12. package/dist/runtime-v2/evidence-triage/__tests__/source-descriptors.test.js +277 -0
  13. package/dist/runtime-v2/evidence-triage/__tests__/source-descriptors.test.js.map +1 -0
  14. package/dist/runtime-v2/evidence-triage/__tests__/triage-policy.test.d.ts +13 -0
  15. package/dist/runtime-v2/evidence-triage/__tests__/triage-policy.test.d.ts.map +1 -0
  16. package/dist/runtime-v2/evidence-triage/__tests__/triage-policy.test.js +264 -0
  17. package/dist/runtime-v2/evidence-triage/__tests__/triage-policy.test.js.map +1 -0
  18. package/dist/runtime-v2/evidence-triage/index.d.ts +12 -0
  19. package/dist/runtime-v2/evidence-triage/index.d.ts.map +1 -0
  20. package/dist/runtime-v2/evidence-triage/index.js +11 -0
  21. package/dist/runtime-v2/evidence-triage/index.js.map +1 -0
  22. package/dist/runtime-v2/evidence-triage/source-descriptors.d.ts +48 -0
  23. package/dist/runtime-v2/evidence-triage/source-descriptors.d.ts.map +1 -0
  24. package/dist/runtime-v2/evidence-triage/source-descriptors.js +131 -0
  25. package/dist/runtime-v2/evidence-triage/source-descriptors.js.map +1 -0
  26. package/dist/runtime-v2/evidence-triage/triage-policy.d.ts +32 -0
  27. package/dist/runtime-v2/evidence-triage/triage-policy.d.ts.map +1 -0
  28. package/dist/runtime-v2/evidence-triage/triage-policy.js +95 -0
  29. package/dist/runtime-v2/evidence-triage/triage-policy.js.map +1 -0
  30. package/dist/runtime-v2/evidence-triage/types.d.ts +65 -0
  31. package/dist/runtime-v2/evidence-triage/types.d.ts.map +1 -0
  32. package/dist/runtime-v2/evidence-triage/types.js +38 -0
  33. package/dist/runtime-v2/evidence-triage/types.js.map +1 -0
  34. package/dist/runtime-v2/feature-flags/__tests__/feature-flag-contract.test.js +10 -0
  35. package/dist/runtime-v2/feature-flags/__tests__/feature-flag-contract.test.js.map +1 -1
  36. package/dist/runtime-v2/feature-flags/feature-flag-contract.d.ts.map +1 -1
  37. package/dist/runtime-v2/feature-flags/feature-flag-contract.js +1 -0
  38. package/dist/runtime-v2/feature-flags/feature-flag-contract.js.map +1 -1
  39. package/dist/runtime-v2/index.d.ts +2 -0
  40. package/dist/runtime-v2/index.d.ts.map +1 -1
  41. package/dist/runtime-v2/index.js +1 -0
  42. package/dist/runtime-v2/index.js.map +1 -1
  43. package/package.json +1 -1
@@ -0,0 +1,21 @@
1
+ /**
2
+ * Evidence Sanitizer Tests — Core Package
3
+ *
4
+ * Direct tests for the shared evidence sanitizer module.
5
+ * This module is security-critical and used by both core and plugin packages.
6
+ *
7
+ * Tests verify:
8
+ * - Token redaction (sk-*, ghp_*, JWT, base64)
9
+ * - PD tag stripping
10
+ * - Path convergence (workspace-relative vs basename)
11
+ * - Recursive sanitization with depth/key/array limits
12
+ * - Platform-agnostic path handling (Windows/POSIX)
13
+ *
14
+ * ERR checklist:
15
+ * - ERR-001: No `as` casts — input is `unknown`, narrowed with typeof guards
16
+ * - ERR-055: ANY-segment sensitive field matching
17
+ * - ERR-056: Token redaction runs on ALL strings
18
+ * - EP-08: Platform-agnostic path basename
19
+ */
20
+ export {};
21
+ //# sourceMappingURL=evidence-sanitizer.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"evidence-sanitizer.test.d.ts","sourceRoot":"","sources":["../../../src/runtime-v2/__tests__/evidence-sanitizer.test.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG"}
@@ -0,0 +1,354 @@
1
+ /**
2
+ * Evidence Sanitizer Tests — Core Package
3
+ *
4
+ * Direct tests for the shared evidence sanitizer module.
5
+ * This module is security-critical and used by both core and plugin packages.
6
+ *
7
+ * Tests verify:
8
+ * - Token redaction (sk-*, ghp_*, JWT, base64)
9
+ * - PD tag stripping
10
+ * - Path convergence (workspace-relative vs basename)
11
+ * - Recursive sanitization with depth/key/array limits
12
+ * - Platform-agnostic path handling (Windows/POSIX)
13
+ *
14
+ * ERR checklist:
15
+ * - ERR-001: No `as` casts — input is `unknown`, narrowed with typeof guards
16
+ * - ERR-055: ANY-segment sensitive field matching
17
+ * - ERR-056: Token redaction runs on ALL strings
18
+ * - EP-08: Platform-agnostic path basename
19
+ */
20
+ import { describe, it, expect } from 'vitest';
21
+ import { sanitizeString, sanitizeValue, sanitizeToolParams, convergePath, MAX_EVIDENCE_VALUE_CHARS, } from '../evidence-sanitizer.js';
22
+ // ── convergePath ─────────────────────────────────────────────────────────────
23
+ describe('convergePath', () => {
24
+ it('returns relative path unchanged', () => {
25
+ expect(convergePath('src/index.ts')).toBe('src/index.ts');
26
+ expect(convergePath('./config.json')).toBe('./config.json');
27
+ });
28
+ it('returns basename for absolute path without workspaceDir', () => {
29
+ expect(convergePath('/home/user/secrets/token.json')).toBe('token.json');
30
+ expect(convergePath('D:\\Code\\secrets\\key.txt')).toBe('key.txt');
31
+ });
32
+ it('returns repo-relative for workspace-internal path', () => {
33
+ expect(convergePath('/workspace/my-repo/src/index.ts', '/workspace/my-repo')).toBe('src/index.ts');
34
+ expect(convergePath('D:\\Code\\principles\\src\\file.ts', 'D:\\Code\\principles')).toBe('src\\file.ts');
35
+ });
36
+ it('returns basename for workspace-external absolute path', () => {
37
+ expect(convergePath('/etc/passwd', '/workspace/my-repo')).toBe('passwd');
38
+ expect(convergePath('C:\\Windows\\System32\\config', '/workspace/my-repo')).toBe('config');
39
+ });
40
+ it('handles trailing separators in workspaceDir', () => {
41
+ expect(convergePath('/workspace/repo/src/file.ts', '/workspace/repo/')).toBe('src/file.ts');
42
+ });
43
+ it('handles Windows drive case-insensitivity', () => {
44
+ expect(convergePath('d:\\code\\repo\\src\\file.ts', 'D:\\Code\\repo')).toBe('src\\file.ts');
45
+ });
46
+ it('returns basename when workspaceDir matches exactly', () => {
47
+ // When the path equals workspaceDir, return basename
48
+ expect(convergePath('/workspace/repo', '/workspace/repo')).toBe('repo');
49
+ });
50
+ it('handles UNC paths', () => {
51
+ expect(convergePath('\\\\server\\share\\file.txt')).toBe('file.txt');
52
+ });
53
+ });
54
+ // ── sanitizeString ───────────────────────────────────────────────────────────
55
+ describe('sanitizeString', () => {
56
+ // ── Token redaction ──
57
+ it('redacts OpenAI-style keys (sk-*)', () => {
58
+ const token = 'sk-proj-' + 'a'.repeat(30);
59
+ const result = sanitizeString(`token is ${token}`);
60
+ expect(result).toContain('___REDACTED___');
61
+ expect(result).not.toContain(token);
62
+ });
63
+ it('redacts GitHub PATs (ghp_*)', () => {
64
+ const token = 'ghp_' + 'a'.repeat(40);
65
+ const result = sanitizeString(token);
66
+ expect(result).toContain('___REDACTED___');
67
+ expect(result).not.toContain(token);
68
+ });
69
+ it('redacts GitHub OAuth tokens (gho_*)', () => {
70
+ const token = 'gho_' + 'a'.repeat(40);
71
+ const result = sanitizeString(token);
72
+ expect(result).toContain('___REDACTED___');
73
+ });
74
+ it('redacts Slack tokens (xoxb-*)', () => {
75
+ const token = 'xoxb-' + 'a'.repeat(30);
76
+ const result = sanitizeString(token);
77
+ expect(result).toContain('___REDACTED___');
78
+ });
79
+ it('redacts JWT-like patterns (eyJ*)', () => {
80
+ const jwt = 'eyJ' + 'a'.repeat(30) + '.bc';
81
+ const result = sanitizeString(`Bearer ${jwt}`);
82
+ expect(result).toContain('___REDACTED___');
83
+ expect(result).not.toContain(jwt);
84
+ });
85
+ it('redacts long base64-like strings', () => {
86
+ const token = 'A'.repeat(50);
87
+ const result = sanitizeString(`hash: ${token}`);
88
+ expect(result).toContain('___REDACTED___');
89
+ expect(result).not.toContain(token);
90
+ });
91
+ it('preserves short strings without tokens', () => {
92
+ const result = sanitizeString('normal text without secrets');
93
+ expect(result).toBe('normal text without secrets');
94
+ });
95
+ // ── PD tag stripping ──
96
+ it('strips EMOTIONAL_DAMAGE_DETECTED tags', () => {
97
+ const result = sanitizeString('[EMOTIONAL_DAMAGE_DETECTED:severe] something went wrong');
98
+ expect(result).not.toContain('EMOTIONAL_DAMAGE_DETECTED');
99
+ expect(result).toContain('something went wrong');
100
+ });
101
+ it('strips EMPATHY_ROLLBACK_REQUEST tags', () => {
102
+ const result = sanitizeString('[EMPATHY_ROLLBACK_REQUEST] rollback needed');
103
+ expect(result).not.toContain('EMPATHY_ROLLBACK_REQUEST');
104
+ expect(result).toContain('rollback needed');
105
+ });
106
+ it('strips empathy XML tags', () => {
107
+ const result = sanitizeString('<empathy signal="damage" severity="moderate"/> text');
108
+ expect(result).not.toContain('<empathy');
109
+ expect(result).toContain('text');
110
+ });
111
+ // ── Path convergence ──
112
+ it('converges absolute paths in string without workspaceDir', () => {
113
+ const result = sanitizeString('error in /home/user/project/src/file.ts');
114
+ expect(result).not.toContain('/home/user/project');
115
+ expect(result).toContain('file.ts');
116
+ });
117
+ it('converges Windows absolute paths in string', () => {
118
+ const result = sanitizeString('cd D:\\Code\\principles && git status');
119
+ expect(result).not.toContain('D:\\Code\\principles');
120
+ expect(result).toContain('principles');
121
+ });
122
+ it('converges workspace-internal paths to repo-relative', () => {
123
+ const result = sanitizeString('edit failed on D:\\Code\\principles\\src\\index.ts', 'D:\\Code\\principles');
124
+ expect(result).not.toContain('D:\\Code\\principles');
125
+ expect(result).toContain('src\\index.ts');
126
+ });
127
+ // ── Length bounding ──
128
+ it('truncates long strings', () => {
129
+ const long = ' data '.repeat(100);
130
+ const result = sanitizeString(long);
131
+ expect(result.length).toBeLessThanOrEqual(MAX_EVIDENCE_VALUE_CHARS + 20);
132
+ expect(result).toMatch(/___TRUNCATED___$/);
133
+ });
134
+ it('preserves short strings intact', () => {
135
+ const short = 'short text';
136
+ expect(sanitizeString(short)).toBe(short);
137
+ });
138
+ // ── Combined operations ──
139
+ it('applies all sanitization steps in order', () => {
140
+ const token = 'sk-proj-' + 'a'.repeat(30);
141
+ const input = `[EMOTIONAL_DAMAGE_DETECTED] ${token} at /home/user/secrets/key.json`;
142
+ const result = sanitizeString(input);
143
+ // PD tag stripped
144
+ expect(result).not.toContain('EMOTIONAL_DAMAGE_DETECTED');
145
+ // Token redacted
146
+ expect(result).toContain('___REDACTED___');
147
+ expect(result).not.toContain(token);
148
+ // Path converged
149
+ expect(result).not.toContain('/home/user/secrets');
150
+ expect(result).toContain('key.json');
151
+ });
152
+ });
153
+ // ── sanitizeValue ────────────────────────────────────────────────────────────
154
+ describe('sanitizeValue', () => {
155
+ // ── Primitive handling ──
156
+ it('returns null unchanged', () => {
157
+ expect(sanitizeValue(null)).toBe(null);
158
+ });
159
+ it('returns undefined unchanged', () => {
160
+ expect(sanitizeValue(undefined)).toBe(undefined);
161
+ });
162
+ it('returns numbers unchanged', () => {
163
+ expect(sanitizeValue(42)).toBe(42);
164
+ expect(sanitizeValue(3.14)).toBe(3.14);
165
+ });
166
+ it('returns booleans unchanged', () => {
167
+ expect(sanitizeValue(true)).toBe(true);
168
+ expect(sanitizeValue(false)).toBe(false);
169
+ });
170
+ it('sanitizes strings', () => {
171
+ const token = 'sk-proj-' + 'a'.repeat(30);
172
+ const result = sanitizeValue(token);
173
+ expect(result).toContain('___REDACTED___');
174
+ });
175
+ // ── Array handling ──
176
+ it('sanitizes arrays with item limit', () => {
177
+ const arr = Array.from({ length: 100 }, (_, i) => `item-${i}`);
178
+ const result = sanitizeValue(arr);
179
+ expect(result.length).toBeLessThanOrEqual(21); // MAX_ARRAY_ITEMS + overflow indicator
180
+ expect(result[result.length - 1]).toMatch(/more items/);
181
+ });
182
+ it('sanitizes array elements recursively', () => {
183
+ const token = 'sk-proj-' + 'a'.repeat(30);
184
+ const arr = [token, 'safe-string', { nested: token }];
185
+ const result = sanitizeValue(arr);
186
+ expect(result[0]).toContain('___REDACTED___');
187
+ expect(result[1]).toBe('safe-string');
188
+ const nested = result[2];
189
+ expect(nested.nested).toContain('___REDACTED___');
190
+ });
191
+ // ── Object handling ──
192
+ it('sanitizes objects with key limit', () => {
193
+ const obj = {};
194
+ for (let i = 0; i < 100; i++) {
195
+ obj[`key-${i}`] = `value-${i}`;
196
+ }
197
+ const result = sanitizeValue(obj);
198
+ expect(Object.keys(result).length).toBeLessThanOrEqual(51); // MAX_KEYS + overflow indicator
199
+ expect(result['<truncated>']).toBeDefined();
200
+ });
201
+ it('sanitizes nested objects recursively', () => {
202
+ const token = 'sk-proj-' + 'a'.repeat(30);
203
+ const input = { a: { b: { c: token } } };
204
+ const result = sanitizeValue(input);
205
+ const nested = result.a.b.c;
206
+ expect(nested).toContain('___REDACTED___');
207
+ });
208
+ // ── Depth limit ──
209
+ it('returns <max-depth> for deeply nested objects', () => {
210
+ const deep = { a: { b: { c: { d: { e: 'too deep' } } } } };
211
+ const result = sanitizeValue(deep);
212
+ const a = result.a;
213
+ const b = a.b;
214
+ const c = b.c;
215
+ const d = c.d;
216
+ expect(d.e).toBe('<max-depth>');
217
+ });
218
+ it('respects depth parameter', () => {
219
+ const input = { a: { b: { c: 'value' } } };
220
+ // Starting at depth 3, b would be at depth 4 (exceeds MAX_DEPTH=4)
221
+ const result = sanitizeValue(input, 3);
222
+ const a = result.a;
223
+ // b is at depth 4 from the starting depth 3, so it gets max-depth
224
+ expect(a.b).toBe('<max-depth>');
225
+ });
226
+ // ── Unsupported types ──
227
+ it('returns <unsupported-type> for functions', () => {
228
+ expect(sanitizeValue(() => { })).toBe('<unsupported-type>');
229
+ });
230
+ it('returns <unsupported-type> for symbols', () => {
231
+ expect(sanitizeValue(Symbol('test'))).toBe('<unsupported-type>');
232
+ });
233
+ });
234
+ // ── sanitizeToolParams ───────────────────────────────────────────────────────
235
+ describe('sanitizeToolParams', () => {
236
+ it('returns {} for null input', () => {
237
+ expect(sanitizeToolParams(null)).toEqual({});
238
+ });
239
+ it('returns {} for undefined input', () => {
240
+ expect(sanitizeToolParams(undefined)).toEqual({});
241
+ });
242
+ it('returns {} for number input', () => {
243
+ expect(sanitizeToolParams(42)).toEqual({});
244
+ });
245
+ it('returns {} for boolean input', () => {
246
+ expect(sanitizeToolParams(true)).toEqual({});
247
+ });
248
+ it('wraps string input in <string-input> key', () => {
249
+ const result = sanitizeToolParams('raw string input');
250
+ expect(result['<string-input>']).toBeDefined();
251
+ expect(typeof result['<string-input>']).toBe('string');
252
+ });
253
+ it('wraps array input in <array-input> key', () => {
254
+ const result = sanitizeToolParams(['a', 'b', 'c']);
255
+ expect(result['<array-input>']).toBeDefined();
256
+ });
257
+ it('sanitizes object params', () => {
258
+ const token = 'sk-proj-' + 'a'.repeat(30);
259
+ const params = {
260
+ file_path: 'src/file.ts',
261
+ content: `key is ${token}`,
262
+ };
263
+ const result = sanitizeToolParams(params);
264
+ expect(result.file_path).toBe('src/file.ts');
265
+ expect(result.content).toContain('___REDACTED___');
266
+ });
267
+ it('converges paths with workspaceDir', () => {
268
+ const params = {
269
+ file_path: '/workspace/repo/src/config.ts',
270
+ };
271
+ const result = sanitizeToolParams(params, '/workspace/repo');
272
+ expect(result.file_path).toBe('src/config.ts');
273
+ });
274
+ it('handles nested edits array', () => {
275
+ const token = 'sk-proj-' + 'a'.repeat(30);
276
+ const params = {
277
+ file_path: '/repo/src/config.ts',
278
+ edits: [
279
+ { oldText: token, newText: 'safe-value' },
280
+ ],
281
+ };
282
+ const result = sanitizeToolParams(params, '/repo');
283
+ const edits = result.edits;
284
+ expect(edits[0].oldText).toContain('___REDACTED___');
285
+ expect(edits[0].newText).toBe('safe-value');
286
+ expect(result.file_path).toBe('src/config.ts');
287
+ });
288
+ it('truncates long content fields', () => {
289
+ const params = {
290
+ content: ' data '.repeat(100),
291
+ };
292
+ const result = sanitizeToolParams(params);
293
+ expect(result.content).toMatch(/___TRUNCATED___$/);
294
+ });
295
+ });
296
+ // ── Platform-agnostic path handling (EP-08) ───────────────────────────────────
297
+ describe('Platform-agnostic path handling', () => {
298
+ it('handles Windows paths on POSIX runner', () => {
299
+ // This test runs on Linux CI but should handle Windows paths
300
+ const result = sanitizeString('error in D:\\Code\\principles\\src\\file.ts');
301
+ // Should extract basename using platformAgnosticBasename
302
+ expect(result).toContain('file.ts');
303
+ expect(result).not.toContain('D:\\Code');
304
+ });
305
+ it('handles POSIX paths on Windows runner', () => {
306
+ // This test runs on Windows but should handle POSIX paths
307
+ const result = sanitizeString('error in /home/user/project/src/file.ts');
308
+ expect(result).toContain('file.ts');
309
+ expect(result).not.toContain('/home/user/project');
310
+ });
311
+ it('handles mixed separators in single string', () => {
312
+ const result = sanitizeString('path1: C:\\Users\\admin\\file1.txt, path2: /etc/file2.conf');
313
+ expect(result).toContain('file1.txt');
314
+ expect(result).toContain('file2.conf');
315
+ expect(result).not.toContain('C:\\Users\\admin');
316
+ expect(result).not.toContain('/etc');
317
+ });
318
+ });
319
+ // ── Security regression tests ────────────────────────────────────────────────
320
+ describe('Security regression tests', () => {
321
+ it('redacts tokens in deeply nested structures', () => {
322
+ const token = 'sk-proj-' + 'a'.repeat(30);
323
+ // Use a structure that stays within MAX_DEPTH (4)
324
+ const input = {
325
+ level1: {
326
+ level2: {
327
+ level3: {
328
+ secret: token,
329
+ },
330
+ },
331
+ },
332
+ };
333
+ const result = sanitizeValue(input);
334
+ const l1 = result.level1;
335
+ const l2 = l1.level2;
336
+ const l3 = l2.level3;
337
+ expect(l3.secret).toContain('___REDACTED___');
338
+ });
339
+ it('does not reveal token prefix beyond safe limit', () => {
340
+ const token = 'sk-proj-abcdefghijklmnopqrstuvwxy' + 'z'.repeat(20);
341
+ const result = sanitizeString(token);
342
+ // Prefix should be limited (8 chars for >50 length, 4 for shorter)
343
+ expect(result).not.toContain(token.slice(10));
344
+ });
345
+ it('handles empty strings gracefully', () => {
346
+ expect(sanitizeString('')).toBe('');
347
+ expect(sanitizeValue('')).toBe('');
348
+ });
349
+ it('handles strings with only whitespace', () => {
350
+ expect(sanitizeString(' ')).toBe('');
351
+ expect(sanitizeString('\n\t')).toBe('');
352
+ });
353
+ });
354
+ //# sourceMappingURL=evidence-sanitizer.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"evidence-sanitizer.test.js","sourceRoot":"","sources":["../../../src/runtime-v2/__tests__/evidence-sanitizer.test.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"pd-config-defaults.d.ts","sourceRoot":"","sources":["../../../src/runtime-v2/config/pd-config-defaults.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EACL,KAAK,QAAQ,EACb,KAAK,gBAAgB,EACrB,KAAK,sBAAsB,EAG3B,KAAK,oBAAoB,EACzB,KAAK,QAAQ,EAGd,MAAM,sBAAsB,CAAC;AAI9B,eAAO,MAAM,qBAAqB,EAAE,MAAM,CAAC,MAAM,EAAE,gBAAgB,CAkBlE,CAAC;AAIF,eAAO,MAAM,0BAA0B,qBAAqB,CAAC;AAE7D,eAAO,MAAM,uBAAuB,EAAE,sBAGrC,CAAC;AAiBF,wBAAgB,wBAAwB,IAAI,oBAAoB,CAY/D;AAID,eAAO,MAAM,UAAU,EAAE,QAExB,CAAC;AAIF,wBAAgB,kBAAkB,IAAI,QAAQ,CAU7C"}
1
+ {"version":3,"file":"pd-config-defaults.d.ts","sourceRoot":"","sources":["../../../src/runtime-v2/config/pd-config-defaults.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EACL,KAAK,QAAQ,EACb,KAAK,gBAAgB,EACrB,KAAK,sBAAsB,EAG3B,KAAK,oBAAoB,EACzB,KAAK,QAAQ,EAGd,MAAM,sBAAsB,CAAC;AAI9B,eAAO,MAAM,qBAAqB,EAAE,MAAM,CAAC,MAAM,EAAE,gBAAgB,CAmBlE,CAAC;AAIF,eAAO,MAAM,0BAA0B,qBAAqB,CAAC;AAE7D,eAAO,MAAM,uBAAuB,EAAE,sBAGrC,CAAC;AAiBF,wBAAgB,wBAAwB,IAAI,oBAAoB,CAY/D;AAID,eAAO,MAAM,UAAU,EAAE,QAExB,CAAC;AAIF,wBAAgB,kBAAkB,IAAI,QAAQ,CAU7C"}
@@ -17,6 +17,7 @@ export const DEFAULT_FEATURE_FLAGS = {
17
17
  gfi: { category: 'quiet', enabled: false },
18
18
  evolution_worker: { category: 'quiet', enabled: false },
19
19
  empathy_observer: { category: 'quiet', enabled: false },
20
+ painEvidenceAdmission: { category: 'quiet', enabled: false },
20
21
  // MVP-Gone (ADR-0014 §2.6)
21
22
  nocturnal: { category: 'gone', enabled: false },
22
23
  idle_trigger: { category: 'gone', enabled: false },
@@ -1 +1 @@
1
- {"version":3,"file":"pd-config-defaults.js","sourceRoot":"","sources":["../../../src/runtime-v2/config/pd-config-defaults.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAQL,iBAAiB,EACjB,oBAAoB,GACrB,MAAM,sBAAsB,CAAC;AAE9B,+EAA+E;AAE/E,MAAM,CAAC,MAAM,qBAAqB,GAAqC;IACrE,2BAA2B;IAC3B,MAAM,EAAc,EAAE,QAAQ,EAAE,MAAM,EAAG,OAAO,EAAE,IAAI,EAAE;IACxD,cAAc,EAAM,EAAE,QAAQ,EAAE,MAAM,EAAG,OAAO,EAAE,IAAI,EAAE;IACxD,aAAa,EAAO,EAAE,QAAQ,EAAE,MAAM,EAAG,OAAO,EAAE,IAAI,EAAE;IACxD,mBAAmB,EAAC,EAAE,QAAQ,EAAE,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE;IAEzD,4BAA4B;IAC5B,gBAAgB,EAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE;IACxD,GAAG,EAAiB,EAAE,QAAQ,EAAE,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE;IACzD,gBAAgB,EAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE;IACzD,gBAAgB,EAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE;IAEzD,2BAA2B;IAC3B,SAAS,EAAW,EAAE,QAAQ,EAAE,MAAM,EAAG,OAAO,EAAE,KAAK,EAAE;IACzD,YAAY,EAAQ,EAAE,QAAQ,EAAE,MAAM,EAAG,OAAO,EAAE,KAAK,EAAE;IACzD,cAAc,EAAM,EAAE,QAAQ,EAAE,MAAM,EAAG,OAAO,EAAE,KAAK,EAAE;IACzD,OAAO,EAAa,EAAE,QAAQ,EAAE,MAAM,EAAG,OAAO,EAAE,KAAK,EAAE;CAC1D,CAAC;AAEF,+EAA+E;AAE/E,MAAM,CAAC,MAAM,0BAA0B,GAAG,kBAAkB,CAAC;AAE7D,MAAM,CAAC,MAAM,uBAAuB,GAA2B;IAC7D,IAAI,EAAE,UAAU;IAChB,MAAM,EAAE,SAAS;CAClB,CAAC;AAEF,+EAA+E;AAE/E,MAAM,qBAAqB,GAAuC;IAChE,aAAa,EAAE,IAAI;IACnB,OAAO,EAAE,IAAI;IACb,WAAW,EAAE,KAAK;IAClB,MAAM,EAAE,IAAI;IACZ,SAAS,EAAE,IAAI;IACf,SAAS,EAAE,KAAK;IAChB,eAAe,EAAE,KAAK;IACtB,OAAO,EAAE,KAAK;IACd,kBAAkB,EAAE,KAAK;IACzB,eAAe,EAAE,KAAK;CACvB,CAAC;AAEF,MAAM,UAAU,wBAAwB;IACtC,MAAM,MAAM,GAAyC,EAAE,CAAC;IACxD,KAAK,MAAM,IAAI,IAAI,oBAAoB,EAAE,CAAC;QACxC,MAAM,CAAC,IAAI,CAAC,GAAG;YACb,OAAO,EAAE,qBAAqB,CAAC,IAAI,CAAC;YACpC,cAAc,EAAE,0BAA0B;SAC3C,CAAC;IACJ,CAAC;IACD,OAAO;QACL,cAAc,EAAE,0BAA0B;QAC1C,MAAM,EAAE,MAAyD;KAClE,CAAC;AACJ,CAAC;AAED,+EAA+E;AAE/E,MAAM,CAAC,MAAM,UAAU,GAAa;IAClC,WAAW,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE;CAChC,CAAC;AAEF,+EAA+E;AAE/E,MAAM,UAAU,kBAAkB;IAChC,OAAO;QACL,OAAO,EAAE,iBAAiB;QAC1B,QAAQ,EAAE,EAAE,GAAG,qBAAqB,EAAE;QACtC,eAAe,EAAE;YACf,CAAC,0BAA0B,CAAC,EAAE,EAAE,GAAG,uBAAuB,EAAE;SAC7D;QACD,cAAc,EAAE,wBAAwB,EAAE;QAC1C,EAAE,EAAE,EAAE,GAAG,UAAU,EAAE;KACtB,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"pd-config-defaults.js","sourceRoot":"","sources":["../../../src/runtime-v2/config/pd-config-defaults.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,18 @@
1
+ /**
2
+ * Source Descriptors Tests — PEAT-B1
3
+ *
4
+ * Direct tests for the source descriptor registry.
5
+ * This module defines the declarative policy mapping from SourceKind to default TriageDecision.
6
+ *
7
+ * Tests verify:
8
+ * - All source kinds have descriptors registered
9
+ * - Every descriptor has required fields (kind, defaultDecision, reason, nextAction, canUpgrade)
10
+ * - Descriptor invariants (owner_reported always admit, tool_failure never admit, etc.)
11
+ * - canUpgrade flag is correctly set for upgradable kinds
12
+ *
13
+ * ERR checklist:
14
+ * - ERR-002: Every descriptor carries reason + nextAction
15
+ * - ERR-005: Descriptors are data, not assumptions about callers
16
+ */
17
+ export {};
18
+ //# sourceMappingURL=source-descriptors.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"source-descriptors.test.d.ts","sourceRoot":"","sources":["../../../../src/runtime-v2/evidence-triage/__tests__/source-descriptors.test.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG"}