@principles/core 1.177.2 → 1.177.4

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.
@@ -0,0 +1,243 @@
1
+ /**
2
+ * Render GitHub URL Tests — Feedback Pipeline URL Builder
3
+ *
4
+ * Tests the GitHub issue draft URL builder with privacy-preserving redaction.
5
+ * This function is used to create feedback submission URLs.
6
+ *
7
+ * ERR checklist:
8
+ * - ERR-001/005: no `as FeedbackType` cast; use isFeedbackType validator
9
+ * - ERR-009/010: fail loud on invalid input
10
+ * - ERR-014/016: bounded body (MAX_URL_BODY_LENGTH)
11
+ */
12
+ import { describe, it, expect } from 'vitest';
13
+ import { buildGitHubIssueDraftUrl, MAX_URL_BODY_LENGTH, GITHUB_REPO, } from '../render-github-url.js';
14
+ describe('buildGitHubIssueDraftUrl', () => {
15
+ it('builds valid URL for bug feedback', () => {
16
+ const result = buildGitHubIssueDraftUrl('Test bug', 'bug', 'Short summary');
17
+ expect(result.ok).toBe(true);
18
+ if (result.ok) {
19
+ expect(result.url).toContain('github.com');
20
+ expect(result.url).toContain(GITHUB_REPO);
21
+ expect(result.url).toContain('/issues/new');
22
+ expect(result.url).toContain('title=');
23
+ // URL-encoded version of [bug]
24
+ expect(result.url).toContain('%5Bbug%5D');
25
+ }
26
+ });
27
+ it('builds valid URL for confusing feedback', () => {
28
+ const result = buildGitHubIssueDraftUrl('Confusing message', 'confusing', 'Summary');
29
+ expect(result.ok).toBe(true);
30
+ if (result.ok) {
31
+ expect(result.url).toContain('%5Bconfusing%5D');
32
+ }
33
+ });
34
+ it('builds valid URL for privacy_concern feedback', () => {
35
+ const result = buildGitHubIssueDraftUrl('Privacy issue', 'privacy_concern', 'Summary');
36
+ expect(result.ok).toBe(true);
37
+ if (result.ok) {
38
+ expect(result.url).toContain('%5Bprivacy_concern%5D');
39
+ }
40
+ });
41
+ it('builds valid URL for feature_request feedback', () => {
42
+ const result = buildGitHubIssueDraftUrl('New feature', 'feature_request', 'Summary');
43
+ expect(result.ok).toBe(true);
44
+ if (result.ok) {
45
+ expect(result.url).toContain('%5Bfeature_request%5D');
46
+ }
47
+ });
48
+ it('builds valid URL for other feedback', () => {
49
+ const result = buildGitHubIssueDraftUrl('General feedback', 'other', 'Summary');
50
+ expect(result.ok).toBe(true);
51
+ if (result.ok) {
52
+ expect(result.url).toContain('%5Bother%5D');
53
+ }
54
+ });
55
+ it('returns error for invalid feedback type', () => {
56
+ const result = buildGitHubIssueDraftUrl('Title', 'invalid_type', 'Summary');
57
+ expect(result.ok).toBe(false);
58
+ if (!result.ok) {
59
+ expect(result.error).toContain('invalid feedback type');
60
+ expect(result.nextAction).toContain('FeedbackType');
61
+ }
62
+ });
63
+ it('returns error for non-string title', () => {
64
+ // @ts-expect-error - testing non-string title for runtime validation
65
+ const result = buildGitHubIssueDraftUrl(null, 'bug', 'Summary');
66
+ expect(result.ok).toBe(false);
67
+ if (!result.ok) {
68
+ expect(result.error).toContain('title must be a string');
69
+ }
70
+ });
71
+ it('returns error for non-string shortSummary', () => {
72
+ // @ts-expect-error - testing non-string shortSummary for runtime validation
73
+ const result = buildGitHubIssueDraftUrl('Title', 'bug', null);
74
+ expect(result.ok).toBe(false);
75
+ if (!result.ok) {
76
+ expect(result.error).toContain('shortSummary must be a string');
77
+ }
78
+ });
79
+ it('redacts tokens in title', () => {
80
+ const result = buildGitHubIssueDraftUrl('Bug with sk-abc123def456ghi789jkl012mno345pqr678', 'bug', 'Summary');
81
+ expect(result.ok).toBe(true);
82
+ if (result.ok) {
83
+ // URL-encoded version of [REDACTED]
84
+ expect(result.url).toContain('%5BREDACTED%5D');
85
+ expect(result.url).not.toContain('sk-abc123');
86
+ }
87
+ });
88
+ it('redacts paths in title', () => {
89
+ const result = buildGitHubIssueDraftUrl('Bug at /home/alice/project', 'bug', 'Summary');
90
+ expect(result.ok).toBe(true);
91
+ if (result.ok) {
92
+ // URL-encoded version of <redacted-path>
93
+ expect(result.url).toContain('%3Credacted-path%3E');
94
+ expect(result.url).not.toContain('/home/alice');
95
+ }
96
+ });
97
+ it('redacts env vars in title', () => {
98
+ const result = buildGitHubIssueDraftUrl('Bug with API_KEY=secret123', 'bug', 'Summary');
99
+ expect(result.ok).toBe(true);
100
+ if (result.ok) {
101
+ // URL-encoded version of [REDACTED]
102
+ expect(result.url).toContain('%5BREDACTED%5D');
103
+ expect(result.url).not.toContain('secret123');
104
+ }
105
+ });
106
+ it('redacts tokens in shortSummary', () => {
107
+ const result = buildGitHubIssueDraftUrl('Title', 'bug', 'Summary with sk-abc123def456ghi789jkl012mno345pqr678');
108
+ expect(result.ok).toBe(true);
109
+ if (result.ok) {
110
+ // URL-encoded version of [REDACTED]
111
+ expect(result.url).toContain('%5BREDACTED%5D');
112
+ expect(result.url).not.toContain('sk-abc123');
113
+ }
114
+ });
115
+ it('truncates title to 200 chars', () => {
116
+ const longTitle = 'a'.repeat(300);
117
+ const result = buildGitHubIssueDraftUrl(longTitle, 'bug', 'Summary');
118
+ expect(result.ok).toBe(true);
119
+ if (result.ok) {
120
+ const decodedTitle = decodeURIComponent(result.url.split('title=')[1]?.split('&')[0] ?? '');
121
+ // [bug] (6 chars) + space (1 char) + 200 chars = 207 chars
122
+ expect(decodedTitle.length).toBeLessThanOrEqual(207);
123
+ }
124
+ });
125
+ it('truncates body to MAX_URL_BODY_LENGTH', () => {
126
+ const longSummary = 'a'.repeat(1000);
127
+ const result = buildGitHubIssueDraftUrl('Title', 'bug', longSummary);
128
+ expect(result.ok).toBe(true);
129
+ if (result.ok) {
130
+ const decodedBody = decodeURIComponent(result.url.split('body=')[1] ?? '');
131
+ expect(decodedBody.length).toBeLessThanOrEqual(MAX_URL_BODY_LENGTH);
132
+ }
133
+ });
134
+ it('URL-encodes title correctly', () => {
135
+ const result = buildGitHubIssueDraftUrl('Bug: test & more', 'bug', 'Summary');
136
+ expect(result.ok).toBe(true);
137
+ if (result.ok) {
138
+ // Check that special characters are encoded
139
+ expect(result.url).not.toContain('Bug: test & more');
140
+ // Check that colon and ampersand are encoded
141
+ expect(result.url).toContain('%3A'); // colon
142
+ expect(result.url).toContain('%26'); // ampersand
143
+ }
144
+ });
145
+ it('URL-encodes body correctly', () => {
146
+ const result = buildGitHubIssueDraftUrl('Title', 'bug', 'Summary with\nnewlines');
147
+ expect(result.ok).toBe(true);
148
+ if (result.ok) {
149
+ // Newlines should be encoded as %0A
150
+ expect(result.url).toContain('%0A');
151
+ }
152
+ });
153
+ it('handles empty title', () => {
154
+ const result = buildGitHubIssueDraftUrl('', 'bug', 'Summary');
155
+ expect(result.ok).toBe(true);
156
+ if (result.ok) {
157
+ // URL-encoded version of [bug]
158
+ expect(result.url).toContain('%5Bbug%5D');
159
+ }
160
+ });
161
+ it('handles empty shortSummary', () => {
162
+ const result = buildGitHubIssueDraftUrl('Title', 'bug', '');
163
+ expect(result.ok).toBe(true);
164
+ if (result.ok) {
165
+ expect(result.url).toContain('body=');
166
+ }
167
+ });
168
+ it('handles special characters in title', () => {
169
+ const result = buildGitHubIssueDraftUrl('Bug <script>alert(1)</script>', 'bug', 'Summary');
170
+ expect(result.ok).toBe(true);
171
+ if (result.ok) {
172
+ // Should be URL-encoded, not raw HTML
173
+ expect(result.url).not.toContain('<script>');
174
+ }
175
+ });
176
+ it('handles unicode in title', () => {
177
+ const result = buildGitHubIssueDraftUrl('Bug 测试 🎉', 'bug', 'Summary');
178
+ expect(result.ok).toBe(true);
179
+ if (result.ok) {
180
+ expect(result.url).toBeDefined();
181
+ }
182
+ });
183
+ it('handles unicode in shortSummary', () => {
184
+ const result = buildGitHubIssueDraftUrl('Title', 'bug', 'Summary 测试 🎉');
185
+ expect(result.ok).toBe(true);
186
+ if (result.ok) {
187
+ expect(result.url).toBeDefined();
188
+ }
189
+ });
190
+ it('constructs correct URL format', () => {
191
+ const result = buildGitHubIssueDraftUrl('Test', 'bug', 'Summary');
192
+ expect(result.ok).toBe(true);
193
+ if (result.ok) {
194
+ const url = result.url;
195
+ expect(url.startsWith('https://github.com/')).toBe(true);
196
+ expect(url).toContain(`${GITHUB_REPO}/issues/new`);
197
+ expect(url).toMatch(/title=[^&]+/);
198
+ expect(url).toMatch(/body=.+/);
199
+ }
200
+ });
201
+ it('preserves markdown structure in body', () => {
202
+ const result = buildGitHubIssueDraftUrl('Title', 'bug', '## Header\n\n- Item 1\n- Item 2');
203
+ expect(result.ok).toBe(true);
204
+ if (result.ok) {
205
+ const decodedBody = decodeURIComponent(result.url.split('body=')[1] ?? '');
206
+ expect(decodedBody).toContain('## Header');
207
+ expect(decodedBody).toContain('- Item 1');
208
+ }
209
+ });
210
+ it('handles all valid feedback types', () => {
211
+ const types = ['bug', 'confusing', 'privacy_concern', 'feature_request', 'other'];
212
+ for (const type of types) {
213
+ const result = buildGitHubIssueDraftUrl('Title', type, 'Summary');
214
+ expect(result.ok).toBe(true);
215
+ if (result.ok) {
216
+ // URL-encoded version of [type]
217
+ expect(result.url).toContain(`%5B${encodeURIComponent(type)}%5D`);
218
+ }
219
+ }
220
+ });
221
+ it('returns error for number feedback type', () => {
222
+ const result = buildGitHubIssueDraftUrl('Title', 42, 'Summary');
223
+ expect(result.ok).toBe(false);
224
+ if (!result.ok) {
225
+ expect(result.error).toContain('invalid feedback type');
226
+ }
227
+ });
228
+ it('returns error for object feedback type', () => {
229
+ const result = buildGitHubIssueDraftUrl('Title', {}, 'Summary');
230
+ expect(result.ok).toBe(false);
231
+ if (!result.ok) {
232
+ expect(result.error).toContain('invalid feedback type');
233
+ }
234
+ });
235
+ it('returns error for undefined feedback type', () => {
236
+ const result = buildGitHubIssueDraftUrl('Title', undefined, 'Summary');
237
+ expect(result.ok).toBe(false);
238
+ if (!result.ok) {
239
+ expect(result.error).toContain('invalid feedback type');
240
+ }
241
+ });
242
+ });
243
+ //# sourceMappingURL=render-github-url.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"render-github-url.test.js","sourceRoot":"","sources":["../../../../src/runtime-v2/feedback/__tests__/render-github-url.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,12 @@
1
+ /**
2
+ * Safe Stringify Tests — Feedback Pipeline Preview Helpers
3
+ *
4
+ * Tests the BigInt-safe + circular-ref-safe JSON-style stringifier.
5
+ * This function is used to safely preview values in feedback reports.
6
+ *
7
+ * ERR checklist:
8
+ * - ERR-017: BigInt-safe + circular-ref-safe
9
+ * - ERR-014/016: bounded output (max 2000 chars)
10
+ */
11
+ export {};
12
+ //# sourceMappingURL=safe-stringify.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"safe-stringify.test.d.ts","sourceRoot":"","sources":["../../../../src/runtime-v2/feedback/__tests__/safe-stringify.test.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG"}
@@ -0,0 +1,172 @@
1
+ /**
2
+ * Safe Stringify Tests — Feedback Pipeline Preview Helpers
3
+ *
4
+ * Tests the BigInt-safe + circular-ref-safe JSON-style stringifier.
5
+ * This function is used to safely preview values in feedback reports.
6
+ *
7
+ * ERR checklist:
8
+ * - ERR-017: BigInt-safe + circular-ref-safe
9
+ * - ERR-014/016: bounded output (max 2000 chars)
10
+ */
11
+ import { describe, it, expect } from 'vitest';
12
+ import { safeStringifyPreview } from '../safe-stringify.js';
13
+ describe('safeStringifyPreview', () => {
14
+ it('stringifies primitive values', () => {
15
+ expect(safeStringifyPreview('hello')).toBe('"hello"');
16
+ expect(safeStringifyPreview(42)).toBe('42');
17
+ expect(safeStringifyPreview(true)).toBe('true');
18
+ expect(safeStringifyPreview(false)).toBe('false');
19
+ expect(safeStringifyPreview(null)).toBe('null');
20
+ expect(safeStringifyPreview(undefined)).toBe('undefined');
21
+ });
22
+ it('stringifies simple objects', () => {
23
+ const obj = { name: 'test', count: 10 };
24
+ const result = safeStringifyPreview(obj);
25
+ expect(result).toBe('{"name":"test","count":10}');
26
+ });
27
+ it('stringifies arrays', () => {
28
+ const arr = [1, 2, 3];
29
+ const result = safeStringifyPreview(arr);
30
+ expect(result).toBe('[1,2,3]');
31
+ });
32
+ it('handles BigInt values', () => {
33
+ const obj = { big: BigInt('12345678901234567890') };
34
+ const result = safeStringifyPreview(obj);
35
+ expect(result).toContain('<bigint:');
36
+ expect(result).toContain('12345678901234567890');
37
+ });
38
+ it('handles circular references', () => {
39
+ const obj = { name: 'test' };
40
+ obj.self = obj;
41
+ const result = safeStringifyPreview(obj);
42
+ expect(result).toContain('<circular>');
43
+ });
44
+ it('handles circular references in arrays', () => {
45
+ const arr = [1, 2];
46
+ arr.push(arr);
47
+ const result = safeStringifyPreview(arr);
48
+ expect(result).toContain('<circular>');
49
+ });
50
+ it('handles nested circular references', () => {
51
+ const inner = { value: 'inner' };
52
+ const outer = { inner };
53
+ inner.outer = outer;
54
+ const result = safeStringifyPreview(outer);
55
+ expect(result).toContain('<circular>');
56
+ });
57
+ it('truncates long strings', () => {
58
+ const longString = 'a'.repeat(300);
59
+ const result = safeStringifyPreview(longString);
60
+ expect(result.length).toBeLessThan(300);
61
+ expect(result).toContain('…');
62
+ });
63
+ it('truncates output to 2000 chars', () => {
64
+ const obj = { data: 'a'.repeat(3000) };
65
+ const result = safeStringifyPreview(obj);
66
+ expect(result.length).toBeLessThanOrEqual(2001); // 2000 + '…'
67
+ });
68
+ it('handles deep nesting (depth limit)', () => {
69
+ const deep = { l1: { l2: { l3: { l4: { l5: { l6: { l7: 'deep' } } } } } } };
70
+ const result = safeStringifyPreview(deep);
71
+ expect(result).toBeDefined();
72
+ });
73
+ it('handles symbols', () => {
74
+ const obj = { sym: Symbol('test') };
75
+ const result = safeStringifyPreview(obj);
76
+ expect(result).toContain('<symbol>');
77
+ });
78
+ it('handles functions', () => {
79
+ const obj = { fn: () => 'test' };
80
+ const result = safeStringifyPreview(obj);
81
+ expect(result).toContain('<function>');
82
+ });
83
+ it('handles NaN', () => {
84
+ const obj = { nan: Number.NaN };
85
+ const result = safeStringifyPreview(obj);
86
+ expect(result).toContain('NaN');
87
+ });
88
+ it('handles Infinity', () => {
89
+ const obj = { inf: Number.POSITIVE_INFINITY };
90
+ const result = safeStringifyPreview(obj);
91
+ expect(result).toContain('NaN');
92
+ });
93
+ it('handles negative Infinity', () => {
94
+ const obj = { inf: Number.NEGATIVE_INFINITY };
95
+ const result = safeStringifyPreview(obj);
96
+ expect(result).toContain('NaN');
97
+ });
98
+ it('limits array length', () => {
99
+ const arr = Array.from({ length: 100 }, (_, i) => i);
100
+ const result = safeStringifyPreview(arr);
101
+ expect(result).toContain('…');
102
+ });
103
+ it('limits object keys', () => {
104
+ const obj = {};
105
+ for (let i = 0; i < 100; i++) {
106
+ obj[`key${i}`] = i;
107
+ }
108
+ const result = safeStringifyPreview(obj);
109
+ expect(result).toContain('…');
110
+ });
111
+ it('handles empty objects', () => {
112
+ expect(safeStringifyPreview({})).toBe('{}');
113
+ });
114
+ it('handles empty arrays', () => {
115
+ expect(safeStringifyPreview([])).toBe('[]');
116
+ });
117
+ it('handles nested objects', () => {
118
+ const obj = { outer: { inner: { value: 'nested' } } };
119
+ const result = safeStringifyPreview(obj);
120
+ expect(result).toBe('{"outer":{"inner":{"value":"nested"}}}');
121
+ });
122
+ it('handles mixed types in arrays', () => {
123
+ const arr = [1, 'two', true, null, { key: 'value' }];
124
+ const result = safeStringifyPreview(arr);
125
+ expect(result).toContain('1');
126
+ expect(result).toContain('two');
127
+ expect(result).toContain('true');
128
+ expect(result).toContain('null');
129
+ expect(result).toContain('key');
130
+ });
131
+ it('handles special characters in strings', () => {
132
+ const obj = { text: 'Hello\nWorld\t"quoted"' };
133
+ const result = safeStringifyPreview(obj);
134
+ expect(result).toContain('Hello');
135
+ expect(result).toContain('World');
136
+ expect(result).toContain('quoted');
137
+ });
138
+ it('handles unserializable objects gracefully', () => {
139
+ // Create an object that throws on property access
140
+ const obj = {};
141
+ Object.defineProperty(obj, 'thrower', {
142
+ get() { throw new Error('Cannot access'); },
143
+ enumerable: true,
144
+ });
145
+ const result = safeStringifyPreview(obj);
146
+ expect(result).toBe('<unserializable>');
147
+ });
148
+ it('handles Date objects', () => {
149
+ const obj = { date: new Date('2026-06-24') };
150
+ const result = safeStringifyPreview(obj);
151
+ // Date objects are treated as regular objects, resulting in "{}"
152
+ expect(result).toContain('date');
153
+ });
154
+ it('handles Map objects', () => {
155
+ const map = new Map([['key1', 'value1'], ['key2', 'value2']]);
156
+ const result = safeStringifyPreview(map);
157
+ expect(result).toBeDefined();
158
+ });
159
+ it('handles Set objects', () => {
160
+ const set = new Set([1, 2, 3]);
161
+ const result = safeStringifyPreview(set);
162
+ expect(result).toBeDefined();
163
+ });
164
+ it('handles null prototype objects', () => {
165
+ const obj = Object.create(null);
166
+ obj.key = 'value';
167
+ const result = safeStringifyPreview(obj);
168
+ expect(result).toContain('key');
169
+ expect(result).toContain('value');
170
+ });
171
+ });
172
+ //# sourceMappingURL=safe-stringify.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"safe-stringify.test.js","sourceRoot":"","sources":["../../../../src/runtime-v2/feedback/__tests__/safe-stringify.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=c2-live-runner-chain.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"c2-live-runner-chain.test.d.ts","sourceRoot":"","sources":["../../../../src/runtime-v2/internalization/__tests__/c2-live-runner-chain.test.ts"],"names":[],"mappings":""}