@principles/core 1.240.3 → 1.240.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,2 @@
1
+ export {};
2
+ //# sourceMappingURL=principle-injector.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"principle-injector.test.d.ts","sourceRoot":"","sources":["../src/principle-injector.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,158 @@
1
+ import { describe, it, expect } from 'vitest';
2
+ import { DefaultPrincipleInjector } from './principle-injector.js';
3
+ function makeP(id, text, opts = {}) {
4
+ return {
5
+ id,
6
+ text,
7
+ priority: opts.priority ?? 'P1',
8
+ createdAt: opts.createdAt ?? '2026-01-01T00:00:00.000Z',
9
+ };
10
+ }
11
+ describe('DefaultPrincipleInjector', () => {
12
+ describe('formatForInjection', () => {
13
+ it('formats principle with id and text', () => {
14
+ const injector = new DefaultPrincipleInjector();
15
+ expect(injector.formatForInjection(makeP('P0-001', 'Be careful'))).toBe('- [P0-001] Be careful');
16
+ });
17
+ it('handles empty text', () => {
18
+ const injector = new DefaultPrincipleInjector();
19
+ expect(injector.formatForInjection(makeP('P1-001', ''))).toBe('- [P1-001] ');
20
+ });
21
+ });
22
+ describe('getRelevantPrinciples', () => {
23
+ it('returns empty array for empty input', () => {
24
+ const injector = new DefaultPrincipleInjector();
25
+ const context = { domain: 'test', sessionId: 's1', budgetChars: 4000 };
26
+ const result = injector.getRelevantPrinciples([], context);
27
+ expect(result).toEqual([]);
28
+ });
29
+ it('returns empty array for null input', () => {
30
+ const injector = new DefaultPrincipleInjector();
31
+ const context = { domain: 'test', sessionId: 's1', budgetChars: 4000 };
32
+ const result = injector.getRelevantPrinciples(null, context);
33
+ expect(result).toEqual([]);
34
+ });
35
+ it('P0 principles are always included (forced)', () => {
36
+ const injector = new DefaultPrincipleInjector();
37
+ const p0 = makeP('P0-001', 'Critical principle', { priority: 'P0' });
38
+ const p1 = makeP('P1-001', 'Normal principle', { priority: 'P1' });
39
+ const context = { domain: 'test', sessionId: 's1', budgetChars: 4000 };
40
+ const result = injector.getRelevantPrinciples([p0, p1], context);
41
+ expect(result).toContainEqual(expect.objectContaining({ id: 'P0-001' }));
42
+ });
43
+ it('P0 included even when exceeding budget', () => {
44
+ const injector = new DefaultPrincipleInjector();
45
+ const p0 = makeP('P0-001', 'X'.repeat(5000), { priority: 'P0' });
46
+ const context = { domain: 'test', sessionId: 's1', budgetChars: 100 };
47
+ const result = injector.getRelevantPrinciples([p0], context);
48
+ expect(result).toHaveLength(1);
49
+ expect(result[0]?.id).toBe('P0-001');
50
+ });
51
+ it('P0 principles sorted by createdAt (oldest first)', () => {
52
+ const injector = new DefaultPrincipleInjector();
53
+ const p0Old = makeP('P0-001', 'Old', { priority: 'P0', createdAt: '2026-01-01T00:00:00.000Z' });
54
+ const p0New = makeP('P0-002', 'New', { priority: 'P0', createdAt: '2026-06-01T00:00:00.000Z' });
55
+ const context = { domain: 'test', sessionId: 's1', budgetChars: 4000 };
56
+ const result = injector.getRelevantPrinciples([p0New, p0Old], context);
57
+ expect(result[0]?.id).toBe('P0-001');
58
+ expect(result[1]?.id).toBe('P0-002');
59
+ });
60
+ it('P1 principles sorted by priority then createdAt', () => {
61
+ const injector = new DefaultPrincipleInjector();
62
+ const p1Old = makeP('P1-001', 'Old', { priority: 'P1', createdAt: '2026-01-01T00:00:00.000Z' });
63
+ const p1New = makeP('P1-002', 'New', { priority: 'P1', createdAt: '2026-06-01T00:00:00.000Z' });
64
+ const context = { domain: 'test', sessionId: 's1', budgetChars: 4000 };
65
+ const result = injector.getRelevantPrinciples([p1New, p1Old], context);
66
+ expect(result[0]?.id).toBe('P1-001');
67
+ expect(result[1]?.id).toBe('P1-002');
68
+ });
69
+ it('maskedPrincipleIds filters out excluded principles', () => {
70
+ const injector = new DefaultPrincipleInjector();
71
+ const p0 = makeP('P0-001', 'Critical', { priority: 'P0' });
72
+ const p1 = makeP('P1-001', 'Masked', { priority: 'P1' });
73
+ const context = {
74
+ domain: 'test',
75
+ sessionId: 's1',
76
+ budgetChars: 4000,
77
+ maskedPrincipleIds: new Set(['P1-001']),
78
+ };
79
+ const result = injector.getRelevantPrinciples([p0, p1], context);
80
+ expect(result).toHaveLength(1);
81
+ expect(result[0]?.id).toBe('P0-001');
82
+ });
83
+ it('maskedPrincipleIds empty set has no effect', () => {
84
+ const injector = new DefaultPrincipleInjector();
85
+ const p0 = makeP('P0-001', 'Critical', { priority: 'P0' });
86
+ const p1 = makeP('P1-001', 'Normal', { priority: 'P1' });
87
+ const context = {
88
+ domain: 'test',
89
+ sessionId: 's1',
90
+ budgetChars: 4000,
91
+ maskedPrincipleIds: new Set(),
92
+ };
93
+ const result = injector.getRelevantPrinciples([p0, p1], context);
94
+ expect(result).toHaveLength(2);
95
+ });
96
+ it('all masked principles returns empty', () => {
97
+ const injector = new DefaultPrincipleInjector();
98
+ const p0 = makeP('P0-001', 'Critical', { priority: 'P0' });
99
+ const context = {
100
+ domain: 'test',
101
+ sessionId: 's1',
102
+ budgetChars: 4000,
103
+ maskedPrincipleIds: new Set(['P0-001']),
104
+ };
105
+ const result = injector.getRelevantPrinciples([p0], context);
106
+ expect(result).toEqual([]);
107
+ });
108
+ it('throws on unknown priority', () => {
109
+ const injector = new DefaultPrincipleInjector();
110
+ const invalidP = { id: 'P9-001', text: 'Invalid', priority: 'P9', createdAt: '2026-01-01T00:00:00.000Z' };
111
+ const context = { domain: 'test', sessionId: 's1', budgetChars: 4000 };
112
+ expect(() => injector.getRelevantPrinciples([invalidP], context)).toThrow('Unknown principle priority: P9');
113
+ });
114
+ it('undefined priority defaults to P1', () => {
115
+ const injector = new DefaultPrincipleInjector();
116
+ // Construct directly without `makeP` so the `priority` field is genuinely
117
+ // absent. `makeP` applies `opts.priority ?? 'P1'`, which would mask the
118
+ // undefined-priority branch (priorityValue() falls back to 'P1').
119
+ const p = { id: 'P-001', text: 'Default', createdAt: '2026-01-01T00:00:00.000Z' };
120
+ const context = { domain: 'test', sessionId: 's1', budgetChars: 4000 };
121
+ const result = injector.getRelevantPrinciples([p], context);
122
+ expect(result).toHaveLength(1);
123
+ });
124
+ it('P1 before P2 in priority order', () => {
125
+ const injector = new DefaultPrincipleInjector();
126
+ const p1 = makeP('P1-001', 'P1', { priority: 'P1' });
127
+ const p2 = makeP('P2-001', 'P2', { priority: 'P2' });
128
+ const context = { domain: 'test', sessionId: 's1', budgetChars: 4000 };
129
+ const result = injector.getRelevantPrinciples([p2, p1], context);
130
+ expect(result[0]?.id).toBe('P1-001');
131
+ expect(result[1]?.id).toBe('P2-001');
132
+ });
133
+ it('P0 fills budget first, then P1/P2', () => {
134
+ const injector = new DefaultPrincipleInjector();
135
+ const p0 = makeP('P0-001', 'Critical', { priority: 'P0' });
136
+ const p1a = makeP('P1-001', 'A'.repeat(100), { priority: 'P1' });
137
+ const p1b = makeP('P1-002', 'B'.repeat(100), { priority: 'P1' });
138
+ const context = { domain: 'test', sessionId: 's1', budgetChars: 300 };
139
+ const result = injector.getRelevantPrinciples([p1a, p0, p1b], context);
140
+ expect(result[0]?.id).toBe('P0-001');
141
+ expect(result.length).toBeGreaterThanOrEqual(2);
142
+ });
143
+ it('returns empty when all principles are masked', () => {
144
+ const injector = new DefaultPrincipleInjector();
145
+ const p0 = makeP('P0-001', 'P0', { priority: 'P0' });
146
+ const p1 = makeP('P1-001', 'P1', { priority: 'P1' });
147
+ const context = {
148
+ domain: 'test',
149
+ sessionId: 's1',
150
+ budgetChars: 4000,
151
+ maskedPrincipleIds: new Set(['P0-001', 'P1-001']),
152
+ };
153
+ const result = injector.getRelevantPrinciples([p0, p1], context);
154
+ expect(result).toEqual([]);
155
+ });
156
+ });
157
+ });
158
+ //# sourceMappingURL=principle-injector.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"principle-injector.test.js","sourceRoot":"","sources":["../src/principle-injector.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=trajectory-store.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"trajectory-store.test.d.ts","sourceRoot":"","sources":["../src/trajectory-store.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,251 @@
1
+ import { describe, it, expect, beforeEach, afterEach } from 'vitest';
2
+ import { join } from 'path';
3
+ import { mkdirSync, rmSync } from 'fs';
4
+ import Database from 'better-sqlite3';
5
+ import { listCorrectionSamples, reviewCorrectionSample, } from './trajectory-store.js';
6
+ describe('trajectory-store', () => {
7
+ let tmpDir;
8
+ beforeEach(() => {
9
+ tmpDir = join(process.cwd(), 'tmp-test-trajectory-store-' + Date.now());
10
+ mkdirSync(tmpDir, { recursive: true });
11
+ });
12
+ afterEach(() => {
13
+ try {
14
+ rmSync(tmpDir, { recursive: true, force: true });
15
+ }
16
+ catch {
17
+ // Best-effort cleanup; ignore errors on tmp teardown.
18
+ }
19
+ });
20
+ function setupTestDb(dbPath) {
21
+ const db = new Database(dbPath);
22
+ db.exec(`
23
+ CREATE TABLE correction_samples (
24
+ sample_id TEXT PRIMARY KEY,
25
+ session_id TEXT NOT NULL,
26
+ bad_assistant_turn_id INTEGER NOT NULL,
27
+ user_correction_turn_id INTEGER NOT NULL,
28
+ recovery_tool_span_json TEXT NOT NULL,
29
+ diff_excerpt TEXT NOT NULL,
30
+ principle_ids_json TEXT NOT NULL,
31
+ quality_score REAL NOT NULL,
32
+ review_status TEXT NOT NULL,
33
+ export_mode TEXT NOT NULL,
34
+ created_at TEXT NOT NULL,
35
+ updated_at TEXT NOT NULL
36
+ );
37
+ CREATE TABLE sample_reviews (
38
+ review_id INTEGER PRIMARY KEY AUTOINCREMENT,
39
+ sample_id TEXT NOT NULL,
40
+ review_status TEXT NOT NULL,
41
+ note TEXT,
42
+ created_at TEXT NOT NULL,
43
+ FOREIGN KEY (sample_id) REFERENCES correction_samples(sample_id)
44
+ );
45
+ `);
46
+ const now = '2026-06-01T00:00:00.000Z';
47
+ db.prepare(`
48
+ INSERT INTO correction_samples (sample_id, session_id, bad_assistant_turn_id, user_correction_turn_id,
49
+ recovery_tool_span_json, diff_excerpt, principle_ids_json, quality_score,
50
+ review_status, export_mode, created_at, updated_at)
51
+ VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
52
+ `).run('sample-001', 'session-001', 1, 2, '{"tool":"edit"}', 'diff content', '["P0-001"]', 0.9, 'pending', 'redacted', now, now);
53
+ db.prepare(`
54
+ INSERT INTO correction_samples (sample_id, session_id, bad_assistant_turn_id, user_correction_turn_id,
55
+ recovery_tool_span_json, diff_excerpt, principle_ids_json, quality_score,
56
+ review_status, export_mode, created_at, updated_at)
57
+ VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
58
+ `).run('sample-002', 'session-001', 3, 4, '{"tool":"delete"}', 'diff content 2', '["P1-001"]', 0.8, 'approved', 'raw', now, now);
59
+ db.prepare(`
60
+ INSERT INTO correction_samples (sample_id, session_id, bad_assistant_turn_id, user_correction_turn_id,
61
+ recovery_tool_span_json, diff_excerpt, principle_ids_json, quality_score,
62
+ review_status, export_mode, created_at, updated_at)
63
+ VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
64
+ `).run('sample-003', 'session-002', 5, 6, '{"tool":"create"}', 'diff content 3', '[]', 0.7, 'rejected', 'redacted', now, now);
65
+ db.close();
66
+ }
67
+ describe('listCorrectionSamples', () => {
68
+ it('returns empty array when DB does not exist', () => {
69
+ const result = listCorrectionSamples(tmpDir);
70
+ expect(result).toEqual([]);
71
+ });
72
+ it('returns pending samples by default', () => {
73
+ const dbPath = join(tmpDir, '.state', '.trajectory.db');
74
+ mkdirSync(join(tmpDir, '.state'), { recursive: true });
75
+ setupTestDb(dbPath);
76
+ const result = listCorrectionSamples(tmpDir);
77
+ expect(result).toHaveLength(1);
78
+ expect(result[0]?.sampleId).toBe('sample-001');
79
+ expect(result[0]?.reviewStatus).toBe('pending');
80
+ });
81
+ it('returns approved samples when filtered', () => {
82
+ const dbPath = join(tmpDir, '.state', '.trajectory.db');
83
+ mkdirSync(join(tmpDir, '.state'), { recursive: true });
84
+ setupTestDb(dbPath);
85
+ const result = listCorrectionSamples(tmpDir, 'approved');
86
+ expect(result).toHaveLength(1);
87
+ expect(result[0]?.sampleId).toBe('sample-002');
88
+ });
89
+ it('returns rejected samples when filtered', () => {
90
+ const dbPath = join(tmpDir, '.state', '.trajectory.db');
91
+ mkdirSync(join(tmpDir, '.state'), { recursive: true });
92
+ setupTestDb(dbPath);
93
+ const result = listCorrectionSamples(tmpDir, 'rejected');
94
+ expect(result).toHaveLength(1);
95
+ expect(result[0]?.sampleId).toBe('sample-003');
96
+ });
97
+ it('returns samples with all expected fields', () => {
98
+ const dbPath = join(tmpDir, '.state', '.trajectory.db');
99
+ mkdirSync(join(tmpDir, '.state'), { recursive: true });
100
+ setupTestDb(dbPath);
101
+ const result = listCorrectionSamples(tmpDir);
102
+ const [sample] = result;
103
+ expect(sample?.sampleId).toBe('sample-001');
104
+ expect(sample?.sessionId).toBe('session-001');
105
+ expect(sample?.badAssistantTurnId).toBe(1);
106
+ expect(sample?.userCorrectionTurnId).toBe(2);
107
+ expect(sample?.recoveryToolSpanJson).toBe('{"tool":"edit"}');
108
+ expect(sample?.diffExcerpt).toBe('diff content');
109
+ expect(sample?.principleIdsJson).toBe('["P0-001"]');
110
+ expect(sample?.qualityScore).toBe(0.9);
111
+ expect(sample?.reviewStatus).toBe('pending');
112
+ expect(sample?.exportMode).toBe('redacted');
113
+ expect(typeof sample?.createdAt).toBe('string');
114
+ expect(typeof sample?.updatedAt).toBe('string');
115
+ });
116
+ it('returns empty array on database error', () => {
117
+ const dbPath = join(tmpDir, '.state', '.trajectory.db');
118
+ mkdirSync(join(tmpDir, '.state'), { recursive: true });
119
+ const db = new Database(dbPath);
120
+ db.close();
121
+ const result = listCorrectionSamples(tmpDir);
122
+ expect(result).toEqual([]);
123
+ });
124
+ it('orders by created_at DESC', () => {
125
+ const dbPath = join(tmpDir, '.state', '.trajectory.db');
126
+ mkdirSync(join(tmpDir, '.state'), { recursive: true });
127
+ setupTestDb(dbPath);
128
+ const db = new Database(dbPath);
129
+ db.prepare(`
130
+ INSERT INTO correction_samples (sample_id, session_id, bad_assistant_turn_id, user_correction_turn_id,
131
+ recovery_tool_span_json, diff_excerpt, principle_ids_json, quality_score,
132
+ review_status, export_mode, created_at, updated_at)
133
+ VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
134
+ `).run('sample-004', 'session-001', 7, 8, '{"tool":"move"}', 'diff content 4', '["P0-002"]', 0.95, 'pending', 'redacted', '2026-06-02T00:00:00.000Z', '2026-06-02T00:00:00.000Z');
135
+ db.close();
136
+ const result = listCorrectionSamples(tmpDir);
137
+ expect(result).toHaveLength(2);
138
+ expect(result[0]?.sampleId).toBe('sample-004');
139
+ expect(result[1]?.sampleId).toBe('sample-001');
140
+ });
141
+ it('handles NULL optional fields gracefully', () => {
142
+ const dbPath = join(tmpDir, '.state', '.trajectory.db');
143
+ mkdirSync(join(tmpDir, '.state'), { recursive: true });
144
+ const db = new Database(dbPath);
145
+ db.exec(`
146
+ CREATE TABLE correction_samples (
147
+ sample_id TEXT PRIMARY KEY,
148
+ session_id TEXT NOT NULL,
149
+ bad_assistant_turn_id INTEGER NOT NULL,
150
+ user_correction_turn_id INTEGER NOT NULL,
151
+ recovery_tool_span_json TEXT,
152
+ diff_excerpt TEXT,
153
+ principle_ids_json TEXT,
154
+ quality_score REAL NOT NULL,
155
+ review_status TEXT NOT NULL,
156
+ export_mode TEXT NOT NULL,
157
+ created_at TEXT NOT NULL,
158
+ updated_at TEXT NOT NULL
159
+ );
160
+ `);
161
+ const now = '2026-06-01T00:00:00.000Z';
162
+ db.prepare(`
163
+ INSERT INTO correction_samples (sample_id, session_id, bad_assistant_turn_id, user_correction_turn_id,
164
+ recovery_tool_span_json, diff_excerpt, principle_ids_json, quality_score,
165
+ review_status, export_mode, created_at, updated_at)
166
+ VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
167
+ `).run('sample-null', 'session-001', 1, 2, null, null, null, 0.5, 'pending', 'redacted', now, now);
168
+ db.close();
169
+ const result = listCorrectionSamples(tmpDir);
170
+ expect(result).toHaveLength(1);
171
+ expect(result[0]?.recoveryToolSpanJson).toBe('');
172
+ expect(result[0]?.diffExcerpt).toBe('');
173
+ expect(result[0]?.principleIdsJson).toBe('[]');
174
+ });
175
+ });
176
+ describe('reviewCorrectionSample', () => {
177
+ it('approves a pending sample', () => {
178
+ const dbPath = join(tmpDir, '.state', '.trajectory.db');
179
+ mkdirSync(join(tmpDir, '.state'), { recursive: true });
180
+ setupTestDb(dbPath);
181
+ const result = reviewCorrectionSample('sample-001', 'approved', 'Looks good', tmpDir);
182
+ expect(result.sampleId).toBe('sample-001');
183
+ expect(result.reviewStatus).toBe('approved');
184
+ const db = new Database(dbPath);
185
+ const row = db.prepare('SELECT review_status FROM correction_samples WHERE sample_id = ?').get('sample-001');
186
+ expect(row?.review_status).toBe('approved');
187
+ const reviewRow = db.prepare('SELECT * FROM sample_reviews WHERE sample_id = ?').get('sample-001');
188
+ expect(reviewRow?.review_status).toBe('approved');
189
+ expect(reviewRow?.note).toBe('Looks good');
190
+ db.close();
191
+ });
192
+ it('rejects a pending sample', () => {
193
+ const dbPath = join(tmpDir, '.state', '.trajectory.db');
194
+ mkdirSync(join(tmpDir, '.state'), { recursive: true });
195
+ setupTestDb(dbPath);
196
+ const result = reviewCorrectionSample('sample-001', 'rejected', 'Not applicable', tmpDir);
197
+ expect(result.sampleId).toBe('sample-001');
198
+ expect(result.reviewStatus).toBe('rejected');
199
+ const db = new Database(dbPath);
200
+ const row = db.prepare('SELECT review_status FROM correction_samples WHERE sample_id = ?').get('sample-001');
201
+ expect(row?.review_status).toBe('rejected');
202
+ db.close();
203
+ });
204
+ it('throws error when sample not found', () => {
205
+ const dbPath = join(tmpDir, '.state', '.trajectory.db');
206
+ mkdirSync(join(tmpDir, '.state'), { recursive: true });
207
+ setupTestDb(dbPath);
208
+ expect(() => reviewCorrectionSample('sample-unknown', 'approved', 'Note', tmpDir)).toThrow('Sample not found: sample-unknown');
209
+ });
210
+ it('throws error when DB does not exist', () => {
211
+ expect(() => reviewCorrectionSample('sample-001', 'approved', 'Note', tmpDir)).toThrow(/Database not found/);
212
+ });
213
+ it('updates updated_at timestamp', () => {
214
+ const dbPath = join(tmpDir, '.state', '.trajectory.db');
215
+ mkdirSync(join(tmpDir, '.state'), { recursive: true });
216
+ setupTestDb(dbPath);
217
+ const db = new Database(dbPath);
218
+ const before = db.prepare('SELECT updated_at FROM correction_samples WHERE sample_id = ?').get('sample-001');
219
+ db.close();
220
+ const result = reviewCorrectionSample('sample-001', 'approved', '', tmpDir);
221
+ const db2 = new Database(dbPath);
222
+ const after = db2.prepare('SELECT updated_at FROM correction_samples WHERE sample_id = ?').get('sample-001');
223
+ db2.close();
224
+ expect(result.updatedAt).toBe(after?.updated_at);
225
+ expect(after?.updated_at).not.toBe(before?.updated_at);
226
+ });
227
+ it('handles undefined note', () => {
228
+ const dbPath = join(tmpDir, '.state', '.trajectory.db');
229
+ mkdirSync(join(tmpDir, '.state'), { recursive: true });
230
+ setupTestDb(dbPath);
231
+ const result = reviewCorrectionSample('sample-001', 'approved', undefined, tmpDir);
232
+ expect(result.reviewStatus).toBe('approved');
233
+ const db = new Database(dbPath);
234
+ const reviewRow = db.prepare('SELECT note FROM sample_reviews WHERE sample_id = ?').get('sample-001');
235
+ expect(reviewRow?.note).toBe(null);
236
+ db.close();
237
+ });
238
+ it('handles empty note', () => {
239
+ const dbPath = join(tmpDir, '.state', '.trajectory.db');
240
+ mkdirSync(join(tmpDir, '.state'), { recursive: true });
241
+ setupTestDb(dbPath);
242
+ const result = reviewCorrectionSample('sample-001', 'approved', '', tmpDir);
243
+ expect(result.reviewStatus).toBe('approved');
244
+ const db = new Database(dbPath);
245
+ const reviewRow = db.prepare('SELECT note FROM sample_reviews WHERE sample_id = ?').get('sample-001');
246
+ expect(reviewRow?.note).toBe('');
247
+ db.close();
248
+ });
249
+ });
250
+ });
251
+ //# sourceMappingURL=trajectory-store.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"trajectory-store.test.js","sourceRoot":"","sources":["../src/trajectory-store.test.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@principles/core",
3
- "version": "1.240.3",
3
+ "version": "1.240.4",
4
4
  "description": "Universal Evolution SDK - framework-agnostic pain signal capture and principle injection",
5
5
  "type": "module",
6
6
  "main": "./dist/index.js",