@principles/core 1.75.0 → 1.77.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 (76) hide show
  1. package/dist/runtime-v2/__tests__/architecture-regression.test.js +14 -1
  2. package/dist/runtime-v2/__tests__/architecture-regression.test.js.map +1 -1
  3. package/dist/runtime-v2/__tests__/feedback/create-report.test.d.ts +2 -0
  4. package/dist/runtime-v2/__tests__/feedback/create-report.test.d.ts.map +1 -0
  5. package/dist/runtime-v2/__tests__/feedback/create-report.test.js +402 -0
  6. package/dist/runtime-v2/__tests__/feedback/create-report.test.js.map +1 -0
  7. package/dist/runtime-v2/__tests__/feedback/privacy-preview.test.d.ts +2 -0
  8. package/dist/runtime-v2/__tests__/feedback/privacy-preview.test.d.ts.map +1 -0
  9. package/dist/runtime-v2/__tests__/feedback/privacy-preview.test.js +128 -0
  10. package/dist/runtime-v2/__tests__/feedback/privacy-preview.test.js.map +1 -0
  11. package/dist/runtime-v2/__tests__/feedback/redact-sensitive.test.d.ts +2 -0
  12. package/dist/runtime-v2/__tests__/feedback/redact-sensitive.test.d.ts.map +1 -0
  13. package/dist/runtime-v2/__tests__/feedback/redact-sensitive.test.js +231 -0
  14. package/dist/runtime-v2/__tests__/feedback/redact-sensitive.test.js.map +1 -0
  15. package/dist/runtime-v2/__tests__/feedback/render-github-url.test.d.ts +2 -0
  16. package/dist/runtime-v2/__tests__/feedback/render-github-url.test.d.ts.map +1 -0
  17. package/dist/runtime-v2/__tests__/feedback/render-github-url.test.js +102 -0
  18. package/dist/runtime-v2/__tests__/feedback/render-github-url.test.js.map +1 -0
  19. package/dist/runtime-v2/__tests__/feedback/render-markdown.test.d.ts +2 -0
  20. package/dist/runtime-v2/__tests__/feedback/render-markdown.test.d.ts.map +1 -0
  21. package/dist/runtime-v2/__tests__/feedback/render-markdown.test.js +130 -0
  22. package/dist/runtime-v2/__tests__/feedback/render-markdown.test.js.map +1 -0
  23. package/dist/runtime-v2/__tests__/workspace-guidance-migration.test.d.ts +2 -0
  24. package/dist/runtime-v2/__tests__/workspace-guidance-migration.test.d.ts.map +1 -0
  25. package/dist/runtime-v2/__tests__/workspace-guidance-migration.test.js +328 -0
  26. package/dist/runtime-v2/__tests__/workspace-guidance-migration.test.js.map +1 -0
  27. package/dist/runtime-v2/feature-flags/__tests__/feature-flag-contract.test.js +11 -0
  28. package/dist/runtime-v2/feature-flags/__tests__/feature-flag-contract.test.js.map +1 -1
  29. package/dist/runtime-v2/feature-flags/feature-flag-contract.d.ts.map +1 -1
  30. package/dist/runtime-v2/feature-flags/feature-flag-contract.js +2 -1
  31. package/dist/runtime-v2/feature-flags/feature-flag-contract.js.map +1 -1
  32. package/dist/runtime-v2/feedback/create-report.d.ts +14 -0
  33. package/dist/runtime-v2/feedback/create-report.d.ts.map +1 -0
  34. package/dist/runtime-v2/feedback/create-report.js +257 -0
  35. package/dist/runtime-v2/feedback/create-report.js.map +1 -0
  36. package/dist/runtime-v2/feedback/feedback-types.d.ts +120 -0
  37. package/dist/runtime-v2/feedback/feedback-types.d.ts.map +1 -0
  38. package/dist/runtime-v2/feedback/feedback-types.js +243 -0
  39. package/dist/runtime-v2/feedback/feedback-types.js.map +1 -0
  40. package/dist/runtime-v2/feedback/index.d.ts +9 -0
  41. package/dist/runtime-v2/feedback/index.d.ts.map +1 -0
  42. package/dist/runtime-v2/feedback/index.js +11 -0
  43. package/dist/runtime-v2/feedback/index.js.map +1 -0
  44. package/dist/runtime-v2/feedback/internal-guards.d.ts +2 -0
  45. package/dist/runtime-v2/feedback/internal-guards.d.ts.map +1 -0
  46. package/dist/runtime-v2/feedback/internal-guards.js +6 -0
  47. package/dist/runtime-v2/feedback/internal-guards.js.map +1 -0
  48. package/dist/runtime-v2/feedback/privacy-preview.d.ts +14 -0
  49. package/dist/runtime-v2/feedback/privacy-preview.d.ts.map +1 -0
  50. package/dist/runtime-v2/feedback/privacy-preview.js +128 -0
  51. package/dist/runtime-v2/feedback/privacy-preview.js.map +1 -0
  52. package/dist/runtime-v2/feedback/redact-sensitive.d.ts +37 -0
  53. package/dist/runtime-v2/feedback/redact-sensitive.d.ts.map +1 -0
  54. package/dist/runtime-v2/feedback/redact-sensitive.js +272 -0
  55. package/dist/runtime-v2/feedback/redact-sensitive.js.map +1 -0
  56. package/dist/runtime-v2/feedback/render-github-url.d.ts +21 -0
  57. package/dist/runtime-v2/feedback/render-github-url.d.ts.map +1 -0
  58. package/dist/runtime-v2/feedback/render-github-url.js +57 -0
  59. package/dist/runtime-v2/feedback/render-github-url.js.map +1 -0
  60. package/dist/runtime-v2/feedback/render-markdown.d.ts +12 -0
  61. package/dist/runtime-v2/feedback/render-markdown.d.ts.map +1 -0
  62. package/dist/runtime-v2/feedback/render-markdown.js +166 -0
  63. package/dist/runtime-v2/feedback/render-markdown.js.map +1 -0
  64. package/dist/runtime-v2/feedback/safe-stringify.d.ts +6 -0
  65. package/dist/runtime-v2/feedback/safe-stringify.d.ts.map +1 -0
  66. package/dist/runtime-v2/feedback/safe-stringify.js +115 -0
  67. package/dist/runtime-v2/feedback/safe-stringify.js.map +1 -0
  68. package/dist/runtime-v2/index.d.ts +4 -0
  69. package/dist/runtime-v2/index.d.ts.map +1 -1
  70. package/dist/runtime-v2/index.js +9 -0
  71. package/dist/runtime-v2/index.js.map +1 -1
  72. package/dist/runtime-v2/workspace-guidance-migration.d.ts +12 -0
  73. package/dist/runtime-v2/workspace-guidance-migration.d.ts.map +1 -0
  74. package/dist/runtime-v2/workspace-guidance-migration.js +193 -0
  75. package/dist/runtime-v2/workspace-guidance-migration.js.map +1 -0
  76. package/package.json +5 -1
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=create-report.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"create-report.test.d.ts","sourceRoot":"","sources":["../../../../src/runtime-v2/__tests__/feedback/create-report.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,402 @@
1
+ // create-report.test.ts
2
+ // ERR-001/005/013: no `as` casts on untrusted input. Runtime validation via typeof + Object.hasOwn + isRecord.
3
+ // ERR-002: failure paths return {ok: false, errors} where each error has reason + nextAction.
4
+ // ERR-003: redact uses segment-exact key matching (covered in redact-sensitive.test.ts).
5
+ // ERR-014/016/017: bounded previews and BigInt-safe safeStringifyPreview.
6
+ import { describe, it, expect } from 'vitest';
7
+ import { normalizeFeedbackDraftInput, isFeedbackType, isUserSeverity, isFeedbackSource, isRecord, isString, isBoolean, } from '../../feedback/feedback-types.js';
8
+ import { createFeedbackReport } from '../../feedback/create-report.js';
9
+ describe('runtime validators', () => {
10
+ it('isFeedbackType accepts only spec-allowed values', () => {
11
+ expect(isFeedbackType('bug')).toBe(true);
12
+ expect(isFeedbackType('confusing')).toBe(true);
13
+ expect(isFeedbackType('privacy_concern')).toBe(true);
14
+ expect(isFeedbackType('feature_request')).toBe(true);
15
+ expect(isFeedbackType('other')).toBe(true);
16
+ expect(isFeedbackType('not-a-type')).toBe(false);
17
+ expect(isFeedbackType(42)).toBe(false);
18
+ expect(isFeedbackType(null)).toBe(false);
19
+ });
20
+ it('isUserSeverity accepts only low/medium/high', () => {
21
+ expect(isUserSeverity('low')).toBe(true);
22
+ expect(isUserSeverity('medium')).toBe(true);
23
+ expect(isUserSeverity('high')).toBe(true);
24
+ expect(isUserSeverity('critical')).toBe(false);
25
+ });
26
+ it('isFeedbackSource accepts only console/cli/agent', () => {
27
+ expect(isFeedbackSource('console')).toBe(true);
28
+ expect(isFeedbackSource('cli')).toBe(true);
29
+ expect(isFeedbackSource('agent')).toBe(true);
30
+ expect(isFeedbackSource('web')).toBe(false);
31
+ });
32
+ it('isRecord rejects null, arrays, primitives', () => {
33
+ expect(isRecord({})).toBe(true);
34
+ expect(isRecord(null)).toBe(false);
35
+ expect(isRecord([])).toBe(false);
36
+ expect(isRecord('str')).toBe(false);
37
+ expect(isRecord(42)).toBe(false);
38
+ });
39
+ it('isString / isBoolean type guards', () => {
40
+ expect(isString('a')).toBe(true);
41
+ expect(isString(1)).toBe(false);
42
+ expect(isBoolean(true)).toBe(true);
43
+ expect(isBoolean('true')).toBe(false);
44
+ });
45
+ });
46
+ describe('normalizeFeedbackDraftInput', () => {
47
+ it('accepts minimum required fields', () => {
48
+ const input = {
49
+ type: 'bug',
50
+ title: 'Broken page',
51
+ description: 'Cannot load',
52
+ };
53
+ const result = normalizeFeedbackDraftInput(input);
54
+ expect(result.ok).toBe(true);
55
+ if (!result.ok)
56
+ return;
57
+ expect(result.value.type).toBe('bug');
58
+ expect(result.value.title).toBe('Broken page');
59
+ expect(result.value.userText.description).toBe('Cannot load');
60
+ });
61
+ it('accepts full spec input with all optional fields', () => {
62
+ const input = {
63
+ type: 'privacy_concern',
64
+ title: 'Token in URL',
65
+ description: 'My token shows up in URL',
66
+ stepsToReproduce: '1. Open\n2. Reload',
67
+ expectedBehavior: 'No token in URL',
68
+ actualBehavior: 'Token visible',
69
+ userSeverity: 'high',
70
+ context: {
71
+ source: 'console',
72
+ page: '/overview',
73
+ painId: 'p-001',
74
+ principleId: 'pr-002',
75
+ approvalId: 'ap-003',
76
+ activationId: 'act-004',
77
+ updateAttemptId: 'up-005',
78
+ },
79
+ agentDraft: {
80
+ summary: 'agent observed token',
81
+ observedFailure: 'url token',
82
+ commandSummary: 'npm run dev',
83
+ },
84
+ };
85
+ const result = normalizeFeedbackDraftInput(input);
86
+ expect(result.ok).toBe(true);
87
+ if (!result.ok)
88
+ return;
89
+ expect(result.value.userText.stepsToReproduce).toBe('1. Open\n2. Reload');
90
+ expect(result.value.context?.source).toBe('console');
91
+ expect(result.value.context?.page).toBe('/overview');
92
+ expect(result.value.agentDraft?.summary).toBe('agent observed token');
93
+ });
94
+ it('rejects missing type', () => {
95
+ const result = normalizeFeedbackDraftInput({ title: 'x', description: 'y' });
96
+ expect(result.ok).toBe(false);
97
+ if (result.ok)
98
+ return;
99
+ const fieldNames = result.errors.map((e) => e.field);
100
+ expect(fieldNames).toContain('type');
101
+ expect(result.errors.every((e) => e.reason && e.nextAction)).toBe(true);
102
+ });
103
+ it('rejects missing title', () => {
104
+ const result = normalizeFeedbackDraftInput({ type: 'bug', description: 'y' });
105
+ expect(result.ok).toBe(false);
106
+ if (result.ok)
107
+ return;
108
+ expect(result.errors.some((e) => e.field === 'title')).toBe(true);
109
+ });
110
+ it('rejects missing description', () => {
111
+ const result = normalizeFeedbackDraftInput({ type: 'bug', title: 'x' });
112
+ expect(result.ok).toBe(false);
113
+ if (result.ok)
114
+ return;
115
+ expect(result.errors.some((e) => e.field === 'description')).toBe(true);
116
+ });
117
+ it('rejects invalid type', () => {
118
+ const result = normalizeFeedbackDraftInput({ type: 'not-real', title: 'x', description: 'y' });
119
+ expect(result.ok).toBe(false);
120
+ if (result.ok)
121
+ return;
122
+ expect(result.errors.some((e) => e.field === 'type')).toBe(true);
123
+ });
124
+ it('rejects invalid userSeverity', () => {
125
+ const result = normalizeFeedbackDraftInput({
126
+ type: 'bug', title: 'x', description: 'y', userSeverity: 'critical',
127
+ });
128
+ expect(result.ok).toBe(false);
129
+ if (result.ok)
130
+ return;
131
+ expect(result.errors.some((e) => e.field === 'userSeverity')).toBe(true);
132
+ });
133
+ it('rejects invalid context.source', () => {
134
+ const result = normalizeFeedbackDraftInput({
135
+ type: 'bug', title: 'x', description: 'y',
136
+ context: { source: 'web' },
137
+ });
138
+ expect(result.ok).toBe(false);
139
+ if (result.ok)
140
+ return;
141
+ expect(result.errors.some((e) => e.field === 'context.source')).toBe(true);
142
+ });
143
+ it('rejects non-object input', () => {
144
+ const result = normalizeFeedbackDraftInput('not an object');
145
+ expect(result.ok).toBe(false);
146
+ });
147
+ });
148
+ describe('createFeedbackReport', () => {
149
+ function validInput(overrides = {}) {
150
+ return {
151
+ type: 'bug',
152
+ title: 'Pain page broken',
153
+ description: 'Clicking pain link throws TypeError',
154
+ stepsToReproduce: '1. Open\n2. Click',
155
+ expectedBehavior: 'Page opens',
156
+ actualBehavior: 'Error',
157
+ userSeverity: 'high',
158
+ context: {
159
+ source: 'console',
160
+ page: '/overview',
161
+ painId: 'p-001',
162
+ },
163
+ ...overrides,
164
+ };
165
+ }
166
+ function validDiagnostics() {
167
+ return {
168
+ versions: { '@principles/core': '1.0.0' },
169
+ platform: { os: 'darwin', node: '20.0.0' },
170
+ featureFlags: { 'mvp-core': true },
171
+ canary: { status: 'available', summary: 'healthy' },
172
+ recentEvents: [
173
+ { type: 'pain_signal', at: '2026-06-01T00:00:00.000Z', summary: 'pain' },
174
+ ],
175
+ };
176
+ }
177
+ it('returns ok:false with structured errors on invalid input — no `as` cast path', () => {
178
+ const result = createFeedbackReport(null, {});
179
+ expect(result.ok).toBe(false);
180
+ if (result.ok)
181
+ return;
182
+ expect(result.errors.length).toBeGreaterThan(0);
183
+ expect(result.errors.every((e) => typeof e.reason === 'string' && typeof e.nextAction === 'string')).toBe(true);
184
+ });
185
+ it('returns ok:true with full FeedbackReport on valid input', () => {
186
+ const result = createFeedbackReport(validInput(), validDiagnostics());
187
+ expect(result.ok).toBe(true);
188
+ if (!result.ok)
189
+ return;
190
+ const report = result.report;
191
+ expect(report.id).toMatch(/^fb-/);
192
+ expect(report.type).toBe('bug');
193
+ expect(report.title).toBe('Pain page broken');
194
+ expect(report.userText.description).toBe('Clicking pain link throws TypeError');
195
+ expect(report.userText.userSeverity).toBe('high');
196
+ expect(report.outputs.markdown).toContain('Pain page broken');
197
+ expect(report.outputs.emailText).toContain('Pain page broken');
198
+ expect(report.outputs.githubIssueUrl).toContain('https://github.com/');
199
+ });
200
+ it('builds contextRefs from context fields', () => {
201
+ const result = createFeedbackReport(validInput(), validDiagnostics());
202
+ expect(result.ok).toBe(true);
203
+ if (!result.ok)
204
+ return;
205
+ const kinds = result.report.contextRefs.map((c) => c.kind);
206
+ expect(kinds).toContain('page');
207
+ expect(kinds).toContain('painId');
208
+ });
209
+ it('builds privacy section with includedSections, excludedByDefault, redactionNotes', () => {
210
+ const result = createFeedbackReport(validInput(), validDiagnostics());
211
+ expect(result.ok).toBe(true);
212
+ if (!result.ok)
213
+ return;
214
+ expect(result.report.privacy.includedSections.length).toBeGreaterThan(0);
215
+ expect(result.report.privacy.excludedByDefault.length).toBeGreaterThan(0);
216
+ });
217
+ it('redacts absolute paths in description (passed through pipeline)', () => {
218
+ const input = validInput({
219
+ description: 'Error at C:\\Users\\alice\\secret\\path.ts in this code',
220
+ });
221
+ const result = createFeedbackReport(input, validDiagnostics());
222
+ expect(result.ok).toBe(true);
223
+ if (!result.ok)
224
+ return;
225
+ const desc = result.report.userText.description;
226
+ expect(desc).toContain('<redacted-path>');
227
+ expect(desc).not.toContain('C:\\Users\\alice\\secret');
228
+ });
229
+ it('redacts token-like values in description', () => {
230
+ const input = validInput({
231
+ description: 'Token sk-abcdefghijklmnopqrstuvwxyz0123456789 was leaked',
232
+ });
233
+ const result = createFeedbackReport(input, validDiagnostics());
234
+ expect(result.ok).toBe(true);
235
+ if (!result.ok)
236
+ return;
237
+ expect(result.report.userText.description).toContain('[REDACTED]');
238
+ });
239
+ it('records canary unavailable as not-fatal (unavailableReason captured)', () => {
240
+ const diagnostics = {
241
+ ...validDiagnostics(),
242
+ canary: { status: 'unavailable', unavailableReason: 'no network' },
243
+ };
244
+ const result = createFeedbackReport(validInput(), diagnostics);
245
+ expect(result.ok).toBe(true);
246
+ if (!result.ok)
247
+ return;
248
+ expect(result.report.diagnosticSummary.canary.status).toBe('unavailable');
249
+ expect(result.report.diagnosticSummary.canary.unavailableReason).toBe('no network');
250
+ });
251
+ it('records version collection failure as not-fatal', () => {
252
+ const diagnostics = {
253
+ ...validDiagnostics(),
254
+ versions: { error: 'npm not found', unavailableReason: 'no package manager detected' },
255
+ };
256
+ const result = createFeedbackReport(validInput(), diagnostics);
257
+ expect(result.ok).toBe(true);
258
+ if (!result.ok)
259
+ return;
260
+ // The diagnosticSummary.versions is still present (we record what we have)
261
+ expect(result.report.diagnosticSummary.versions).toBeDefined();
262
+ });
263
+ it('generates outputs.markdown, outputs.emailText, outputs.githubIssueUrl (all non-empty)', () => {
264
+ const result = createFeedbackReport(validInput(), validDiagnostics());
265
+ expect(result.ok).toBe(true);
266
+ if (!result.ok)
267
+ return;
268
+ expect(result.report.outputs.markdown.length).toBeGreaterThan(0);
269
+ expect(result.report.outputs.emailText.length).toBeGreaterThan(0);
270
+ expect(result.report.outputs.githubIssueUrl.length).toBeGreaterThan(0);
271
+ });
272
+ it('githubIssueUrl has redacted title (paths → redacted-path)', () => {
273
+ const input = validInput({
274
+ title: 'Error at C:\\Users\\alice\\secret\\path.ts',
275
+ });
276
+ const result = createFeedbackReport(input, validDiagnostics());
277
+ expect(result.ok).toBe(true);
278
+ if (!result.ok)
279
+ return;
280
+ // The raw path should NOT appear in the URL
281
+ expect(result.report.outputs.githubIssueUrl).not.toContain('C%3A%5CUsers%5Calice%5Csecret');
282
+ });
283
+ it('non-object diagnostics → result is still ok (not-fatal; uses empty defaults)', () => {
284
+ const result = createFeedbackReport(validInput(), 'not-an-object');
285
+ expect(result.ok).toBe(true);
286
+ if (!result.ok)
287
+ return;
288
+ // Diagnostic summary still produced
289
+ expect(result.report.diagnosticSummary).toBeDefined();
290
+ });
291
+ it('agentDraft is preserved when provided', () => {
292
+ const input = validInput({
293
+ agentDraft: {
294
+ summary: 'agent saw this',
295
+ observedFailure: 'TypeError',
296
+ commandSummary: 'npm test',
297
+ },
298
+ });
299
+ const result = createFeedbackReport(input, validDiagnostics());
300
+ expect(result.ok).toBe(true);
301
+ if (!result.ok)
302
+ return;
303
+ // The agentDraft summary should appear in the report (e.g. in markdown)
304
+ expect(result.report.outputs.markdown).toContain('agent saw this');
305
+ });
306
+ it('redacts absolute paths in agentDraft.summary', () => {
307
+ const input = validInput({
308
+ agentDraft: {
309
+ summary: 'Error at C:\\Users\\alice\\secret\\path.ts in this code',
310
+ observedFailure: 'Crash at C:\\Users\\bob\\secret\\file.ts',
311
+ commandSummary: 'ran from D:\\Projects\\internal\\tool.ts',
312
+ },
313
+ });
314
+ const result = createFeedbackReport(input, validDiagnostics());
315
+ expect(result.ok).toBe(true);
316
+ if (!result.ok)
317
+ return;
318
+ const ad = result.report.agentDraft;
319
+ expect(ad).toBeDefined();
320
+ if (!ad)
321
+ return;
322
+ // summary should have redacted paths
323
+ expect(ad.summary).toContain('<redacted-path>');
324
+ expect(ad.summary).not.toContain('C:\\Users\\alice\\secret');
325
+ // observedFailure should also be redacted
326
+ if (ad.observedFailure) {
327
+ expect(ad.observedFailure).not.toContain('C:\\Users\\bob\\secret');
328
+ }
329
+ // commandSummary should also be redacted
330
+ if (ad.commandSummary) {
331
+ expect(ad.commandSummary).not.toContain('D:\\Projects\\internal');
332
+ }
333
+ });
334
+ it('redacts token and env values in agentDraft fields', () => {
335
+ const input = validInput({
336
+ agentDraft: {
337
+ summary: 'Token sk-abcdefghijklmnopqrstuvwxyz0123456789 was exposed',
338
+ observedFailure: 'OPENAI_API_KEY=sk-abc123def456 found in output',
339
+ commandSummary: 'export AWS_SECRET_KEY=abc123xyz789 and ran npm test',
340
+ },
341
+ });
342
+ const result = createFeedbackReport(input, validDiagnostics());
343
+ expect(result.ok).toBe(true);
344
+ if (!result.ok)
345
+ return;
346
+ const ad = result.report.agentDraft;
347
+ expect(ad).toBeDefined();
348
+ if (!ad)
349
+ return;
350
+ // summary: token-like value should be redacted
351
+ expect(ad.summary).not.toContain('sk-abcdefghijklmnopqrstuvwxyz0123456789');
352
+ expect(ad.summary).toContain('[REDACTED]');
353
+ // observedFailure: env-like value should be redacted
354
+ if (ad.observedFailure) {
355
+ expect(ad.observedFailure).not.toContain('sk-abc123def456');
356
+ }
357
+ // commandSummary: env-like value should be redacted
358
+ if (ad.commandSummary) {
359
+ expect(ad.commandSummary).not.toContain('AWS_SECRET_KEY=abc123xyz789');
360
+ }
361
+ });
362
+ it('handles BigInt in diagnostics without throwing (ERR-017)', () => {
363
+ const diagnostics = {
364
+ ...validDiagnostics(),
365
+ versions: { count: BigInt(9999999999999) },
366
+ };
367
+ let thrown = null;
368
+ try {
369
+ const result = createFeedbackReport(validInput(), diagnostics);
370
+ expect(result.ok).toBe(true);
371
+ }
372
+ catch (e) {
373
+ thrown = e;
374
+ }
375
+ expect(thrown).toBeNull();
376
+ });
377
+ it('records string redaction notes in privacy.redactionNotes when diagnostics contain token-like values', () => {
378
+ const diagnostics = {
379
+ ...validDiagnostics(),
380
+ versions: { buildLog: 'Key sk-ant-1234567890abcdef1234567890 injected here' },
381
+ };
382
+ const result = createFeedbackReport(validInput(), diagnostics);
383
+ expect(result.ok).toBe(true);
384
+ if (!result.ok)
385
+ return;
386
+ // The string redaction in redactInner should push a note when a token is found
387
+ // inside a string value of the diagnostic summary
388
+ expect(result.report.privacy.redactionNotes.some((n) => n.includes('redacted'))).toBe(true);
389
+ });
390
+ it('records string redaction notes when diagnostics contain absolute paths', () => {
391
+ const diagnostics = {
392
+ ...validDiagnostics(),
393
+ versions: { cwd: 'C:\\Users\\alice\\secret-project\\src' },
394
+ };
395
+ const result = createFeedbackReport(validInput(), diagnostics);
396
+ expect(result.ok).toBe(true);
397
+ if (!result.ok)
398
+ return;
399
+ expect(result.report.privacy.redactionNotes.some((n) => n.includes('redacted'))).toBe(true);
400
+ });
401
+ });
402
+ //# sourceMappingURL=create-report.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"create-report.test.js","sourceRoot":"","sources":["../../../../src/runtime-v2/__tests__/feedback/create-report.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=privacy-preview.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"privacy-preview.test.d.ts","sourceRoot":"","sources":["../../../../src/runtime-v2/__tests__/feedback/privacy-preview.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,128 @@
1
+ // privacy-preview.test.ts
2
+ // ERR-014/016/017: correct '\n' newlines, BigInt-safe safeStringifyPreview.
3
+ import { describe, it, expect } from 'vitest';
4
+ import { buildPrivacyPreview, buildEmailText, DEFAULT_INCLUDED_SECTIONS, DEFAULT_EXCLUDED_CATEGORIES, } from '../../feedback/privacy-preview.js';
5
+ function makeReport(overrides = {}) {
6
+ return {
7
+ id: 'fb-test-1',
8
+ createdAt: '2026-06-01T00:00:00.000Z',
9
+ type: 'bug',
10
+ title: 'Cannot open pain page',
11
+ userText: {
12
+ description: 'Clicking the pain link throws TypeError',
13
+ userSeverity: 'high',
14
+ },
15
+ diagnosticSummary: {
16
+ versions: { '@principles/core': '1.0.0' },
17
+ platform: { os: 'darwin' },
18
+ featureFlags: {},
19
+ canary: { status: 'available' },
20
+ recentEvents: [],
21
+ },
22
+ contextRefs: [],
23
+ privacy: {
24
+ includedSections: [...DEFAULT_INCLUDED_SECTIONS],
25
+ excludedByDefault: [...DEFAULT_EXCLUDED_CATEGORIES],
26
+ redactionNotes: [],
27
+ },
28
+ outputs: { markdown: '', emailText: '', githubIssueUrl: '' },
29
+ ...overrides,
30
+ };
31
+ }
32
+ describe('buildPrivacyPreview', () => {
33
+ it('includes default included sections (versions, platform, feature flags, canary, user text, IDs)', () => {
34
+ const preview = buildPrivacyPreview([]);
35
+ expect(preview.includedSections).toContain('versions');
36
+ expect(preview.includedSections).toContain('platform');
37
+ expect(preview.includedSections).toContain('featureFlags');
38
+ expect(preview.includedSections).toContain('canary');
39
+ expect(preview.includedSections).toContain('userText');
40
+ expect(preview.includedSections).toContain('contextIds');
41
+ });
42
+ it('includes default excluded categories (raw prompt, raw chat, raw trajectory, file contents, env vars, tokens, full paths, full stack traces)', () => {
43
+ const preview = buildPrivacyPreview([]);
44
+ expect(preview.excludedByDefault).toContain('rawPrompt');
45
+ expect(preview.excludedByDefault).toContain('rawChat');
46
+ expect(preview.excludedByDefault).toContain('rawTrajectory');
47
+ expect(preview.excludedByDefault).toContain('fileContents');
48
+ expect(preview.excludedByDefault).toContain('envVars');
49
+ expect(preview.excludedByDefault).toContain('tokens');
50
+ expect(preview.excludedByDefault).toContain('fullPaths');
51
+ expect(preview.excludedByDefault).toContain('fullStackTraces');
52
+ });
53
+ it('appends caller-provided redactionNotes to preview.redactionNotes', () => {
54
+ const preview = buildPrivacyPreview(['user text contained absolute path', 'tokens were redacted']);
55
+ expect(preview.redactionNotes).toContain('user text contained absolute path');
56
+ expect(preview.redactionNotes).toContain('tokens were redacted');
57
+ });
58
+ it('returns a fresh array (not the default mutable reference)', () => {
59
+ const a = buildPrivacyPreview([]);
60
+ const b = buildPrivacyPreview([]);
61
+ expect(a.includedSections).not.toBe(b.includedSections);
62
+ expect(a.excludedByDefault).not.toBe(b.excludedByDefault);
63
+ expect(a.redactionNotes).not.toBe(b.redactionNotes);
64
+ });
65
+ });
66
+ describe('buildEmailText', () => {
67
+ it('contains type, title, description', () => {
68
+ const report = makeReport();
69
+ const email = buildEmailText(report);
70
+ expect(email).toContain('bug');
71
+ expect(email).toContain('Cannot open pain page');
72
+ expect(email).toContain('Clicking the pain link throws TypeError');
73
+ });
74
+ it('uses real \\n newlines (not literal \\n)', () => {
75
+ const report = makeReport();
76
+ const email = buildEmailText(report);
77
+ expect(email.split('\n').length).toBeGreaterThan(3);
78
+ expect(email).not.toMatch(/\\n/);
79
+ });
80
+ it('includes privacy summary section', () => {
81
+ const report = makeReport();
82
+ const email = buildEmailText(report);
83
+ expect(email).toMatch(/privacy/i);
84
+ });
85
+ it('BigInt values do not throw (ERR-017 — safeStringifyPreview is BigInt-safe)', () => {
86
+ const report = makeReport({
87
+ diagnosticSummary: {
88
+ versions: { count: BigInt(9999999999999) },
89
+ platform: { os: 'linux' },
90
+ featureFlags: {},
91
+ canary: { status: 'unavailable', unavailableReason: 'offline' },
92
+ recentEvents: [],
93
+ },
94
+ });
95
+ let thrown = null;
96
+ try {
97
+ const email = buildEmailText(report);
98
+ expect(email).toBeDefined();
99
+ }
100
+ catch (e) {
101
+ thrown = e;
102
+ }
103
+ expect(thrown).toBeNull();
104
+ });
105
+ it('handles circular references in diagnosticSummary without throwing', () => {
106
+ const circular = { kind: 'versions' };
107
+ circular.self = circular;
108
+ const report = makeReport({
109
+ diagnosticSummary: {
110
+ versions: circular,
111
+ platform: { os: 'linux' },
112
+ featureFlags: {},
113
+ canary: { status: 'unavailable', unavailableReason: 'cycle detected' },
114
+ recentEvents: [],
115
+ },
116
+ });
117
+ let thrown = null;
118
+ try {
119
+ const email = buildEmailText(report);
120
+ expect(email).toBeDefined();
121
+ }
122
+ catch (e) {
123
+ thrown = e;
124
+ }
125
+ expect(thrown).toBeNull();
126
+ });
127
+ });
128
+ //# sourceMappingURL=privacy-preview.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"privacy-preview.test.js","sourceRoot":"","sources":["../../../../src/runtime-v2/__tests__/feedback/privacy-preview.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=redact-sensitive.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"redact-sensitive.test.d.ts","sourceRoot":"","sources":["../../../../src/runtime-v2/__tests__/feedback/redact-sensitive.test.ts"],"names":[],"mappings":""}