@principles/core 1.191.0 → 1.193.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.
@@ -1 +1 @@
1
- {"version":3,"file":"empathy-keyword-matching.d.ts","sourceRoot":"","sources":["../../src/prompt-builder/empathy-keyword-matching.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,mBAAmB,EAGnB,kBAAkB,EAClB,oBAAoB,EACrB,MAAM,oBAAoB,CAAC;AAO5B,wBAAgB,yBAAyB,CAAC,QAAQ,GAAE,IAAI,GAAG,IAAW,GAAG,mBAAmB,CA6B3F;AAED,wBAAgB,oBAAoB,CAClC,IAAI,EAAE,MAAM,EACZ,KAAK,EAAE,mBAAmB,EAC1B,MAAM,GAAE,oBAAqD,GAC5D,kBAAkB,CAiDpB;AAED,wBAAgB,mBAAmB,CACjC,KAAK,EAAE,mBAAmB,EAC1B,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE;IACtB,MAAM,EAAE,KAAK,GAAG,QAAQ,GAAG,QAAQ,CAAC;IACpC,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC;IACpB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB,CAAC,GACD;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,CAkDrD;AAED,wBAAgB,yBAAyB,CACvC,KAAK,EAAE,mBAAmB,EAC1B,0BAA0B,EAAE,MAAM,EAClC,MAAM,GAAE,oBAAqD,GAC5D,OAAO,CAQT;AAED,wBAAgB,sBAAsB,CAAC,KAAK,EAAE,mBAAmB,GAAG;IAClE,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,EAAE,MAAM,CAAC;IAClB,eAAe,EAAE,MAAM,CAAC;IACxB,WAAW,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,EAAE,CAAC;IAClE,sBAAsB,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,iBAAiB,EAAE,MAAM,CAAA;KAAE,EAAE,CAAC;CACvE,CAsBA"}
1
+ {"version":3,"file":"empathy-keyword-matching.d.ts","sourceRoot":"","sources":["../../src/prompt-builder/empathy-keyword-matching.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,mBAAmB,EAGnB,kBAAkB,EAClB,oBAAoB,EACrB,MAAM,oBAAoB,CAAC;AAO5B,wBAAgB,yBAAyB,CAAC,QAAQ,GAAE,IAAI,GAAG,IAAW,GAAG,mBAAmB,CA6B3F;AAED,wBAAgB,oBAAoB,CAClC,IAAI,EAAE,MAAM,EACZ,KAAK,EAAE,mBAAmB,EAC1B,MAAM,GAAE,oBAAqD,GAC5D,kBAAkB,CAiDpB;AAED,wBAAgB,mBAAmB,CACjC,KAAK,EAAE,mBAAmB,EAC1B,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE;IACtB,MAAM,EAAE,KAAK,GAAG,QAAQ,GAAG,QAAQ,CAAC;IACpC,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC;IACpB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB,CAAC,GACD;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,CAoDrD;AAED,wBAAgB,yBAAyB,CACvC,KAAK,EAAE,mBAAmB,EAC1B,0BAA0B,EAAE,MAAM,EAClC,MAAM,GAAE,oBAAqD,GAC5D,OAAO,CAQT;AAED,wBAAgB,sBAAsB,CAAC,KAAK,EAAE,mBAAmB,GAAG;IAClE,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,EAAE,MAAM,CAAC;IAClB,eAAe,EAAE,MAAM,CAAC;IACxB,WAAW,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,EAAE,CAAC;IAClE,sBAAsB,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,iBAAiB,EAAE,MAAM,CAAA;KAAE,EAAE,CAAC;CACvE,CAsBA"}
@@ -74,7 +74,7 @@ export function applyKeywordUpdates(store, updates) {
74
74
  for (const [term, update] of Object.entries(updates)) {
75
75
  switch (update.action) {
76
76
  case 'add':
77
- if (!store.terms[term]) {
77
+ if (!Object.hasOwn(store.terms, term)) {
78
78
  store.terms[term] = {
79
79
  weight: update.weight ?? 0.5,
80
80
  source: 'llm_discovered',
@@ -87,21 +87,24 @@ export function applyKeywordUpdates(store, updates) {
87
87
  }
88
88
  break;
89
89
  case 'update':
90
- if (store.terms[term]) {
90
+ if (Object.hasOwn(store.terms, term)) {
91
+ const entry = store.terms[term];
92
+ if (!entry)
93
+ break; // unreachable at runtime, satisfies TS narrowing
91
94
  if (update.weight !== undefined) {
92
- store.terms[term].weight = update.weight;
95
+ entry.weight = update.weight;
93
96
  }
94
97
  if (update.falsePositiveRate !== undefined) {
95
- store.terms[term].falsePositiveRate = update.falsePositiveRate;
98
+ entry.falsePositiveRate = update.falsePositiveRate;
96
99
  }
97
100
  if (update.examples) {
98
- store.terms[term].examples = update.examples;
101
+ entry.examples = update.examples;
99
102
  }
100
103
  updated++;
101
104
  }
102
105
  break;
103
106
  case 'remove':
104
- if (store.terms[term]) {
107
+ if (Object.hasOwn(store.terms, term)) {
105
108
  delete store.terms[term];
106
109
  removed++;
107
110
  }
@@ -1 +1 @@
1
- {"version":3,"file":"empathy-keyword-matching.js","sourceRoot":"","sources":["../../src/prompt-builder/empathy-keyword-matching.ts"],"names":[],"mappings":"AAOA,OAAO,EACL,qBAAqB,EACrB,8BAA8B,EAC9B,eAAe,GAChB,MAAM,oBAAoB,CAAC;AAE5B,MAAM,UAAU,yBAAyB,CAAC,WAAwB,IAAI;IACpE,MAAM,GAAG,GAAG,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;IACrC,MAAM,KAAK,GAAwC,EAAE,CAAC;IAEtD,KAAK,MAAM,IAAI,IAAI,qBAAqB,EAAE,CAAC;QACzC,MAAM,SAAS,GAAG,iBAAiB,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACpD,IAAI,QAAQ,KAAK,IAAI,IAAI,CAAC,SAAS,EAAE,CAAC;YACpC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG;gBACjB,MAAM,EAAE,IAAI,CAAC,MAAM;gBACnB,MAAM,EAAE,MAAM;gBACd,QAAQ,EAAE,CAAC;gBACX,iBAAiB,EAAE,IAAI,CAAC,wBAAwB,IAAI,IAAI;aACzD,CAAC;QACJ,CAAC;IACH,CAAC;IAED,MAAM,KAAK,GAAwB;QACjC,SAAS,EAAE,CAAC;QACZ,mBAAmB,EAAE,CAAC;QACtB,iBAAiB,EAAE,CAAC;KACrB,CAAC;IAEF,OAAO;QACL,OAAO,EAAE,CAAC;QACV,WAAW,EAAE,GAAG;QAChB,eAAe,EAAE,GAAG;QACpB,KAAK;QACL,KAAK;KACN,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,oBAAoB,CAClC,IAAY,EACZ,KAA0B,EAC1B,SAA+B,8BAA8B;IAE7D,IAAI,CAAC,IAAI,IAAI,OAAO,IAAI,KAAK,QAAQ,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAClE,OAAO;YACL,OAAO,EAAE,KAAK;YACd,KAAK,EAAE,CAAC;YACR,YAAY,EAAE,EAAE;YAChB,QAAQ,EAAE,MAAM;YAChB,UAAU,EAAE,CAAC;SACd,CAAC;IACJ,CAAC;IAED,MAAM,SAAS,GAAG,IAAI,CAAC,WAAW,EAAE,CAAC;IACrC,IAAI,UAAU,GAAG,CAAC,CAAC;IACnB,MAAM,YAAY,GAAa,EAAE,CAAC;IAElC,KAAK,MAAM,CAAC,IAAI,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE,CAAC;QACxD,IAAI,SAAS,CAAC,QAAQ,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,EAAE,CAAC;YAC3C,MAAM,cAAc,GAAG,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,GAAG,KAAK,CAAC,iBAAiB,CAAC,CAAC;YACpE,UAAU,IAAI,cAAc,CAAC;YAC7B,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YAExB,KAAK,CAAC,QAAQ,EAAE,CAAC;YACjB,KAAK,CAAC,SAAS,GAAG,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;QAC7C,CAAC;IACH,CAAC;IAED,MAAM,WAAW,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,UAAU,CAAC,CAAC;IAE5C,MAAM,SAAS,GAAG,WAAW,IAAI,MAAM,CAAC,cAAc,IAAI,YAAY,CAAC,MAAM,GAAG,CAAC,CAAC;IAElF,MAAM,YAAY,GAAG,YAAY,CAAC,KAAK,CAAC,CAAC,EAAE,MAAM,CAAC,kBAAkB,CAAC,CAAC;IAEtE,MAAM,cAAc,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,YAAY,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;IAC5D,MAAM,eAAe,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,WAAW,GAAG,GAAG,CAAC,CAAC;IACvD,MAAM,UAAU,GAAG,IAAI,CAAC,GAAG,CAAC,cAAc,EAAE,eAAe,CAAC,CAAC;IAE7D,MAAM,MAAM,GAAuB;QACjC,OAAO,EAAE,SAAS;QAClB,KAAK,EAAE,WAAW;QAClB,YAAY,EAAE,YAAY;QAC1B,QAAQ,EAAE,eAAe,CAAC,WAAW,CAAC;QACtC,UAAU;KACX,CAAC;IAEF,IAAI,SAAS,EAAE,CAAC;QACd,KAAK,CAAC,KAAK,CAAC,SAAS,IAAI,YAAY,CAAC,MAAM,CAAC;IAC/C,CAAC;IAED,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,MAAM,UAAU,mBAAmB,CACjC,KAA0B,EAC1B,OAME;IAEF,IAAI,KAAK,GAAG,CAAC,CAAC;IACd,IAAI,OAAO,GAAG,CAAC,CAAC;IAChB,IAAI,OAAO,GAAG,CAAC,CAAC;IAChB,MAAM,GAAG,GAAG,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;IAErC,KAAK,MAAM,CAAC,IAAI,EAAE,MAAM,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC;QACrD,QAAQ,MAAM,CAAC,MAAM,EAAE,CAAC;YACtB,KAAK,KAAK;gBACR,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC;oBACvB,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG;wBAClB,MAAM,EAAE,MAAM,CAAC,MAAM,IAAI,GAAG;wBAC5B,MAAM,EAAE,gBAAgB;wBACxB,QAAQ,EAAE,CAAC;wBACX,iBAAiB,EAAE,MAAM,CAAC,iBAAiB,IAAI,GAAG;wBAClD,QAAQ,EAAE,MAAM,CAAC,QAAQ;wBACzB,YAAY,EAAE,GAAG;qBAClB,CAAC;oBACF,KAAK,EAAE,CAAC;gBACV,CAAC;gBACD,MAAM;YAER,KAAK,QAAQ;gBACX,IAAI,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC;oBACtB,IAAI,MAAM,CAAC,MAAM,KAAK,SAAS,EAAE,CAAC;wBAChC,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC;oBAC3C,CAAC;oBACD,IAAI,MAAM,CAAC,iBAAiB,KAAK,SAAS,EAAE,CAAC;wBAC3C,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,iBAAiB,GAAG,MAAM,CAAC,iBAAiB,CAAC;oBACjE,CAAC;oBACD,IAAI,MAAM,CAAC,QAAQ,EAAE,CAAC;wBACpB,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,QAAQ,GAAG,MAAM,CAAC,QAAQ,CAAC;oBAC/C,CAAC;oBACD,OAAO,EAAE,CAAC;gBACZ,CAAC;gBACD,MAAM;YAER,KAAK,QAAQ;gBACX,IAAI,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC;oBACtB,OAAO,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;oBACzB,OAAO,EAAE,CAAC;gBACZ,CAAC;gBACD,MAAM;QACV,CAAC;IACH,CAAC;IAED,KAAK,CAAC,eAAe,GAAG,GAAG,CAAC;IAC5B,KAAK,CAAC,KAAK,CAAC,iBAAiB,EAAE,CAAC;IAEhC,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,OAAO,EAAE,CAAC;AACrC,CAAC;AAED,MAAM,UAAU,yBAAyB,CACvC,KAA0B,EAC1B,0BAAkC,EAClC,SAA+B,8BAA8B;IAE7D,MAAM,aAAa,GAAG,0BAA0B,IAAI,MAAM,CAAC,yBAAyB,CAAC;IAErF,MAAM,OAAO,GAAG,IAAI,IAAI,CAAC,KAAK,CAAC,eAAe,CAAC,CAAC,OAAO,EAAE,CAAC;IAC1D,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;IACvB,MAAM,YAAY,GAAG,CAAC,GAAG,GAAG,OAAO,CAAC,IAAI,MAAM,CAAC,sBAAsB,CAAC;IAEtE,OAAO,aAAa,IAAI,YAAY,CAAC;AACvC,CAAC;AAED,MAAM,UAAU,sBAAsB,CAAC,KAA0B;IAO/D,MAAM,KAAK,GAAG,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;IAC1C,MAAM,SAAS,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,KAAK,MAAM,CAAC,CAAC;IAC/D,MAAM,eAAe,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,KAAK,gBAAgB,CAAC,CAAC;IAE/E,MAAM,WAAW,GAAG,KAAK;SACtB,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,KAAK,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,CAAC,QAAQ,EAAE,MAAM,EAAE,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC;SAClF,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,GAAG,CAAC,CAAC,QAAQ,CAAC;SACvC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;IAEhB,MAAM,sBAAsB,GAAG,KAAK;SACjC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,iBAAiB,GAAG,GAAG,CAAC;SAC5C,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,KAAK,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,iBAAiB,EAAE,KAAK,CAAC,iBAAiB,EAAE,CAAC,CAAC;SAC9E,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,iBAAiB,GAAG,CAAC,CAAC,iBAAiB,CAAC,CAAC;IAE7D,OAAO;QACL,UAAU,EAAE,KAAK,CAAC,MAAM;QACxB,SAAS,EAAE,SAAS,CAAC,MAAM;QAC3B,eAAe,EAAE,eAAe,CAAC,MAAM;QACvC,WAAW;QACX,sBAAsB;KACvB,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"empathy-keyword-matching.js","sourceRoot":"","sources":["../../src/prompt-builder/empathy-keyword-matching.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=schema-float-precision.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"schema-float-precision.test.d.ts","sourceRoot":"","sources":["../../../src/runtime-v2/__tests__/schema-float-precision.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,290 @@
1
+ /**
2
+ * Schema Float Precision Regression Test (PRI-476 / M5)
3
+ *
4
+ * Prevents recurrence of P0-1: pain_events.score was declared INTEGER, which
5
+ * truncated floating-point pain scores (e.g., 39.9 → 39) and caused severity
6
+ * misclassification (39.9 should be 'moderate' ≥40, but 39 is 'mild').
7
+ *
8
+ * This test writes floating-point values into all REAL columns that carry
9
+ * semantic meaning (score, confidence) and asserts the read-back value
10
+ * preserves precision. If a schema change accidentally reverts REAL to
11
+ * INTEGER, the test fails.
12
+ *
13
+ * Scope (per PRI-476 acceptance criteria):
14
+ * - pain_events.score (trajectory.db) — the P0-1 field
15
+ * - approvals.confidence (state.db)
16
+ *
17
+ * Note: pain_events.confidence is hardcoded to 1 (integer) in the writer
18
+ * (pain-signal-observability.ts), so float-precision testing is not applicable.
19
+ * pi_artifacts has no REAL columns carrying semantic meaning, so it is excluded.
20
+ */
21
+ import { mkdtempSync, rmSync } from 'fs';
22
+ import { tmpdir } from 'os';
23
+ import { join } from 'path';
24
+ import Database from 'better-sqlite3';
25
+ import { describe, expect, it, afterEach } from 'vitest';
26
+ import { recordPainSignalObservability } from '../pain-signal-observability.js';
27
+ import { SqliteConnection } from '../store/sqlite-connection.js';
28
+ import { SqlitePIArtifactStore } from '../store/artifact/sqlite-pi-artifact-store.js';
29
+ import { SqliteApprovalQueueStore } from '../activation/sqlite-approval-store.js';
30
+ const tempDirs = [];
31
+ function makeWorkspace() {
32
+ const workspaceDir = mkdtempSync(join(tmpdir(), 'pd-float-precision-'));
33
+ tempDirs.push(workspaceDir);
34
+ return { workspaceDir, stateDir: join(workspaceDir, '.state') };
35
+ }
36
+ afterEach(() => {
37
+ for (const dir of tempDirs.splice(0)) {
38
+ rmSync(dir, { recursive: true, force: true });
39
+ }
40
+ });
41
+ describe('Schema float precision regression (PRI-476 / M5)', () => {
42
+ describe('pain_events.score preserves floating-point precision (P0-1 guard)', () => {
43
+ it('writes score=75.5 and reads back 75.5 (not 75)', () => {
44
+ const { workspaceDir, stateDir } = makeWorkspace();
45
+ recordPainSignalObservability({
46
+ workspaceDir,
47
+ stateDir,
48
+ canonicalPainId: 'canonical-float-001',
49
+ data: {
50
+ painId: 'float-test-001',
51
+ taskId: 'task-float-001',
52
+ painType: 'user_frustration',
53
+ source: 'manual',
54
+ reason: 'float precision test',
55
+ score: 75.5,
56
+ sessionId: 'cli',
57
+ agentId: 'pd-cli',
58
+ },
59
+ });
60
+ const db = new Database(join(stateDir, 'trajectory.db'), { readonly: true });
61
+ try {
62
+ const row = db.prepare('SELECT score FROM pain_events WHERE canonical_pain_id = ?')
63
+ .get('canonical-float-001');
64
+ // If score were INTEGER, 75.5 would be truncated to 75.
65
+ expect(row).toBeDefined();
66
+ expect(row?.score).toBe(75.5);
67
+ }
68
+ finally {
69
+ db.close();
70
+ }
71
+ });
72
+ it('writes score=39.9 and reads back 39.9 (not 39)', () => {
73
+ // P0-1 core case: INTEGER truncation would turn 39.9 into 39.
74
+ // This test guards the float precision of pain scores.
75
+ const { workspaceDir, stateDir } = makeWorkspace();
76
+ recordPainSignalObservability({
77
+ workspaceDir,
78
+ stateDir,
79
+ canonicalPainId: 'canonical-float-002',
80
+ data: {
81
+ painId: 'float-test-002',
82
+ taskId: 'task-float-002',
83
+ painType: 'user_frustration',
84
+ source: 'manual',
85
+ reason: 'float precision test',
86
+ score: 39.9,
87
+ sessionId: 'cli',
88
+ agentId: 'pd-cli',
89
+ },
90
+ });
91
+ const db = new Database(join(stateDir, 'trajectory.db'), { readonly: true });
92
+ try {
93
+ const row = db.prepare('SELECT score FROM pain_events WHERE canonical_pain_id = ?')
94
+ .get('canonical-float-002');
95
+ expect(row).toBeDefined();
96
+ expect(row?.score).toBe(39.9);
97
+ }
98
+ finally {
99
+ db.close();
100
+ }
101
+ });
102
+ it('writes score=40.0 (moderate boundary) and reads back 40.0', () => {
103
+ const { workspaceDir, stateDir } = makeWorkspace();
104
+ recordPainSignalObservability({
105
+ workspaceDir,
106
+ stateDir,
107
+ canonicalPainId: 'canonical-float-003',
108
+ data: {
109
+ painId: 'float-test-003',
110
+ taskId: 'task-float-003',
111
+ painType: 'user_frustration',
112
+ source: 'manual',
113
+ reason: 'moderate boundary test',
114
+ score: 40.0,
115
+ sessionId: 'cli',
116
+ agentId: 'pd-cli',
117
+ },
118
+ });
119
+ const db = new Database(join(stateDir, 'trajectory.db'), { readonly: true });
120
+ try {
121
+ const row = db.prepare('SELECT score, severity FROM pain_events WHERE canonical_pain_id = ?')
122
+ .get('canonical-float-003');
123
+ expect(row).toBeDefined();
124
+ expect(row?.score).toBe(40.0);
125
+ expect(row?.severity).toBe('moderate');
126
+ }
127
+ finally {
128
+ db.close();
129
+ }
130
+ });
131
+ it('writes score=0.333 (high precision) and reads back with ≤5 decimal precision', () => {
132
+ const { workspaceDir, stateDir } = makeWorkspace();
133
+ recordPainSignalObservability({
134
+ workspaceDir,
135
+ stateDir,
136
+ canonicalPainId: 'canonical-float-004',
137
+ data: {
138
+ painId: 'float-test-004',
139
+ taskId: 'task-float-004',
140
+ painType: 'user_frustration',
141
+ source: 'manual',
142
+ reason: 'high precision test',
143
+ score: 0.333,
144
+ sessionId: 'cli',
145
+ agentId: 'pd-cli',
146
+ },
147
+ });
148
+ const db = new Database(join(stateDir, 'trajectory.db'), { readonly: true });
149
+ try {
150
+ const row = db.prepare('SELECT score FROM pain_events WHERE canonical_pain_id = ?')
151
+ .get('canonical-float-004');
152
+ expect(row).toBeDefined();
153
+ // SQLite REAL is IEEE 754 double; 0.333 should be preserved.
154
+ expect(row?.score).toBeCloseTo(0.333, 5);
155
+ }
156
+ finally {
157
+ db.close();
158
+ }
159
+ });
160
+ });
161
+ describe('approvals.confidence preserves floating-point precision', () => {
162
+ it('writes confidence=0.85 and reads back 0.85', () => {
163
+ const { workspaceDir } = makeWorkspace();
164
+ const conn = new SqliteConnection({ workspaceDir });
165
+ try {
166
+ const db = conn.getDb();
167
+ // Seed parent task for FK validation
168
+ db.prepare("INSERT OR IGNORE INTO tasks (task_id, task_kind, status, created_at, updated_at)" +
169
+ " VALUES (?, 'diagnosis', 'pending', ?, ?)").run('task-conf-001', new Date().toISOString(), new Date().toISOString());
170
+ // Seed parent pi_artifact for FK validation
171
+ const artifactStore = new SqlitePIArtifactStore(conn);
172
+ const now = new Date().toISOString();
173
+ const artifact = {
174
+ artifactId: 'art-conf-001',
175
+ artifactKind: 'principle',
176
+ sourceTaskId: 'task-conf-001',
177
+ lineageArtifactIds: [],
178
+ validationStatus: 'pending',
179
+ contentJson: '{}',
180
+ createdAt: now,
181
+ updatedAt: now,
182
+ };
183
+ artifactStore.createArtifact(artifact);
184
+ // Enqueue approval with float confidence
185
+ const approvalStore = new SqliteApprovalQueueStore(conn);
186
+ approvalStore.enqueue({
187
+ artifactId: 'art-conf-001',
188
+ channel: 'prompt',
189
+ riskLevel: 'low',
190
+ confidence: 0.85,
191
+ summary: 'confidence precision test',
192
+ triggerReason: 'test',
193
+ }, now);
194
+ // Read back and verify precision
195
+ const row = db.prepare('SELECT confidence FROM approvals WHERE artifact_id = ?')
196
+ .get('art-conf-001');
197
+ expect(row).toBeDefined();
198
+ expect(row?.confidence).toBe(0.85);
199
+ }
200
+ finally {
201
+ conn.close();
202
+ }
203
+ });
204
+ it('writes confidence=0.333 and reads back 0.333', () => {
205
+ const { workspaceDir } = makeWorkspace();
206
+ const conn = new SqliteConnection({ workspaceDir });
207
+ try {
208
+ const db = conn.getDb();
209
+ db.prepare("INSERT OR IGNORE INTO tasks (task_id, task_kind, status, created_at, updated_at)" +
210
+ " VALUES (?, 'diagnosis', 'pending', ?, ?)").run('task-conf-002', new Date().toISOString(), new Date().toISOString());
211
+ const artifactStore = new SqlitePIArtifactStore(conn);
212
+ const now = new Date().toISOString();
213
+ artifactStore.createArtifact({
214
+ artifactId: 'art-conf-002',
215
+ artifactKind: 'principle',
216
+ sourceTaskId: 'task-conf-002',
217
+ lineageArtifactIds: [],
218
+ validationStatus: 'pending',
219
+ contentJson: '{}',
220
+ createdAt: now,
221
+ updatedAt: now,
222
+ });
223
+ const approvalStore = new SqliteApprovalQueueStore(conn);
224
+ approvalStore.enqueue({
225
+ artifactId: 'art-conf-002',
226
+ channel: 'prompt',
227
+ riskLevel: 'low',
228
+ confidence: 0.333,
229
+ summary: 'high precision confidence test',
230
+ triggerReason: 'test',
231
+ }, now);
232
+ const row = db.prepare('SELECT confidence FROM approvals WHERE artifact_id = ?')
233
+ .get('art-conf-002');
234
+ expect(row).toBeDefined();
235
+ expect(row?.confidence).toBeCloseTo(0.333, 5);
236
+ }
237
+ finally {
238
+ conn.close();
239
+ }
240
+ });
241
+ });
242
+ describe('schema column types are REAL (not INTEGER)', () => {
243
+ it('pain_events.score column type is REAL', () => {
244
+ const { workspaceDir, stateDir } = makeWorkspace();
245
+ // Trigger schema creation by recording a pain signal
246
+ recordPainSignalObservability({
247
+ workspaceDir,
248
+ stateDir,
249
+ canonicalPainId: 'canonical-schema-check-001',
250
+ data: {
251
+ painId: 'schema-check-001',
252
+ taskId: 'task-schema-001',
253
+ painType: 'user_frustration',
254
+ source: 'manual',
255
+ reason: 'schema type check',
256
+ score: 50,
257
+ sessionId: 'cli',
258
+ agentId: 'pd-cli',
259
+ },
260
+ });
261
+ const db = new Database(join(stateDir, 'trajectory.db'), { readonly: true });
262
+ try {
263
+ const cols = db.prepare('PRAGMA table_info(pain_events)').all();
264
+ const scoreCol = cols.find((c) => c.name === 'score');
265
+ expect(scoreCol).toBeDefined();
266
+ // SQLite type affinity: REAL type name gives REAL affinity.
267
+ // If someone changes this to INTEGER, the test fails.
268
+ expect(scoreCol?.type?.toUpperCase()).toBe('REAL');
269
+ }
270
+ finally {
271
+ db.close();
272
+ }
273
+ });
274
+ it('approvals.confidence column type is REAL', () => {
275
+ const { workspaceDir } = makeWorkspace();
276
+ const conn = new SqliteConnection({ workspaceDir });
277
+ try {
278
+ const db = conn.getDb();
279
+ const cols = db.prepare('PRAGMA table_info(approvals)').all();
280
+ const confidenceCol = cols.find((c) => c.name === 'confidence');
281
+ expect(confidenceCol).toBeDefined();
282
+ expect(confidenceCol?.type?.toUpperCase()).toBe('REAL');
283
+ }
284
+ finally {
285
+ conn.close();
286
+ }
287
+ });
288
+ });
289
+ });
290
+ //# sourceMappingURL=schema-float-precision.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"schema-float-precision.test.js","sourceRoot":"","sources":["../../../src/runtime-v2/__tests__/schema-float-precision.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=schema-orphan-detection.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"schema-orphan-detection.test.d.ts","sourceRoot":"","sources":["../../../src/runtime-v2/__tests__/schema-orphan-detection.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,158 @@
1
+ /**
2
+ * Schema Orphan Table Detection Test (PRI-475 / M2)
3
+ *
4
+ * Prevents recurrence of P3-12 (confirm_first_state orphan table): a table
5
+ * whose CREATE TABLE DDL remains in sqlite-connection.ts but has no write
6
+ * path (INSERT/REPLACE/UPDATE) in production code becomes an orphan —
7
+ * it misleads new developers and accumulates schema debt.
8
+ *
9
+ * Approach:
10
+ * 1. Read sqlite-connection.ts and extract all CREATE TABLE names.
11
+ * 2. For each table, scan production source files (*.ts, excluding *.test.ts)
12
+ * for INSERT/REPLACE/UPDATE statements referencing that table.
13
+ * 3. A table with no write path fails the test unless it is in the
14
+ * INTENTIONAL_EMPTY_TABLES allowlist (with a documented reason).
15
+ *
16
+ * This is a static source scan, not a runtime DB inspection, so it catches
17
+ * tables whose DDL exists but whose store class was deleted (the P3-12 case).
18
+ */
19
+ import { describe, it, expect } from 'vitest';
20
+ import * as fs from 'fs';
21
+ import * as path from 'path';
22
+ import { fileURLToPath } from 'url';
23
+ // ESM-safe __dirname derivation (packages/principles-core is "type": "module").
24
+ // Points to the source file location:
25
+ // .../packages/principles-core/src/runtime-v2/__tests__/
26
+ // sqlite-connection.ts is at .../packages/principles-core/src/runtime-v2/store/
27
+ const __dirname = path.dirname(fileURLToPath(import.meta.url));
28
+ const CONNECTION_FILE = path.resolve(__dirname, '../store/sqlite-connection.ts');
29
+ // PACKAGES_DIR is .../packages/ (contains all monorepo packages).
30
+ // From __tests__/ go up 4 levels: __tests__ -> runtime-v2 -> src -> principles-core -> packages
31
+ const PACKAGES_DIR = path.resolve(__dirname, '../../../..');
32
+ // Allowlist: tables that intentionally have no write path.
33
+ // Each entry MUST include a reason comment explaining why the table is empty.
34
+ const INTENTIONAL_EMPTY_TABLES = new Set([
35
+ // (none currently — all tables have write paths)
36
+ // To add an entry, append the table name and document why it is empty.
37
+ ]);
38
+ /**
39
+ * Extract table names from all CREATE TABLE IF NOT EXISTS statements
40
+ * in sqlite-connection.ts.
41
+ */
42
+ function extractCreatedTables(source) {
43
+ const tables = [];
44
+ const pattern = /CREATE\s+TABLE\s+IF\s+NOT\s+EXISTS\s+(\w+)/gi;
45
+ let match;
46
+ while ((match = pattern.exec(source)) !== null) {
47
+ const [, tableName] = match;
48
+ if (typeof tableName === 'string') {
49
+ tables.push(tableName);
50
+ }
51
+ }
52
+ return tables;
53
+ }
54
+ /**
55
+ * Collect all production .ts source files under packages/ (excluding tests).
56
+ * Returns absolute paths.
57
+ */
58
+ function collectProductionSourceFiles() {
59
+ const results = [];
60
+ function walk(dir) {
61
+ let entries;
62
+ try {
63
+ entries = fs.readdirSync(dir, { withFileTypes: true });
64
+ }
65
+ catch {
66
+ return;
67
+ }
68
+ for (const entry of entries) {
69
+ const fullPath = path.join(dir, entry.name);
70
+ if (entry.isDirectory()) {
71
+ // Skip node_modules, dist, .trae, .git
72
+ if (entry.name === 'node_modules' ||
73
+ entry.name === 'dist' ||
74
+ entry.name === '.trae' ||
75
+ entry.name === '.git') {
76
+ continue;
77
+ }
78
+ walk(fullPath);
79
+ }
80
+ else if (entry.isFile() &&
81
+ entry.name.endsWith('.ts') &&
82
+ !entry.name.endsWith('.test.ts') &&
83
+ !entry.name.endsWith('.spec.ts') &&
84
+ !entry.name.endsWith('.d.ts')) {
85
+ results.push(fullPath);
86
+ }
87
+ }
88
+ }
89
+ walk(PACKAGES_DIR);
90
+ return results;
91
+ }
92
+ /**
93
+ * Strip comments from TypeScript source so that commented-out SQL statements
94
+ * are not counted as write paths (avoids false negatives in orphan detection).
95
+ * Handles line comments (//) and block comments (slash-star ... star-slash).
96
+ * Simplified: does not parse string literals, but SQL rarely contains //.
97
+ */
98
+ function stripComments(source) {
99
+ // Strip block comments first (may span multiple lines)
100
+ let result = source.replace(/\/\*[\s\S]*?\*\//g, '');
101
+ // Strip line comments
102
+ result = result.replace(/\/\/.*$/gm, '');
103
+ return result;
104
+ }
105
+ /**
106
+ * Check whether a table name appears in any INSERT/REPLACE/UPDATE statement
107
+ * in the given source file content. Comments are stripped first to avoid
108
+ * false negatives from commented-out write paths.
109
+ */
110
+ function hasWritePath(table, fileContents) {
111
+ // Match INSERT INTO <table>, INSERT OR IGNORE INTO <table>,
112
+ // INSERT OR REPLACE INTO <table>, REPLACE INTO <table>,
113
+ // UPDATE <table>
114
+ const pattern = new RegExp(`(INSERT\\s+(OR\\s+(IGNORE|REPLACE)\\s+)?INTO|REPLACE\\s+INTO|UPDATE)\\s+${table}\\b`, 'i');
115
+ return fileContents.some((content) => pattern.test(stripComments(content)));
116
+ }
117
+ describe('Schema orphan table detection (PRI-475 / M2)', () => {
118
+ const connectionSource = fs.readFileSync(CONNECTION_FILE, 'utf-8');
119
+ const createdTables = extractCreatedTables(connectionSource);
120
+ const sourceFiles = collectProductionSourceFiles();
121
+ const fileContents = sourceFiles.map((f) => {
122
+ try {
123
+ return fs.readFileSync(f, 'utf-8');
124
+ }
125
+ catch {
126
+ return '';
127
+ }
128
+ });
129
+ it('sqlite-connection.ts should define at least one table', () => {
130
+ expect(createdTables.length).toBeGreaterThan(0);
131
+ });
132
+ it('confirm_first_state table should NOT exist (P3-12 regression guard)', () => {
133
+ // P3-12: confirm_first_state was an orphan table whose store class was
134
+ // deleted. The DDL was replaced with DROP IF EXISTS in PRI-473.
135
+ // This test fails if someone re-adds the CREATE TABLE statement.
136
+ expect(createdTables).not.toContain('confirm_first_state');
137
+ });
138
+ describe.each(createdTables)('table "%s" has a write path', (table) => {
139
+ it(`${table} should have at least one INSERT/REPLACE/UPDATE in production code`, () => {
140
+ const isAllowlisted = INTENTIONAL_EMPTY_TABLES.has(table);
141
+ const hasWrite = hasWritePath(table, fileContents);
142
+ if (isAllowlisted) {
143
+ // Allowlisted tables are expected to have no write path.
144
+ // If they gain one, that's fine — no assertion failure.
145
+ return;
146
+ }
147
+ expect(hasWrite).toBe(true);
148
+ });
149
+ });
150
+ it('INTENTIONAL_EMPTY_TABLES allowlist entries must all exist in schema', () => {
151
+ // If an allowlisted table no longer exists in the schema, the allowlist
152
+ // entry is stale and should be removed.
153
+ for (const allowlisted of INTENTIONAL_EMPTY_TABLES) {
154
+ expect(createdTables).toContain(allowlisted);
155
+ }
156
+ });
157
+ });
158
+ //# sourceMappingURL=schema-orphan-detection.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"schema-orphan-detection.test.js","sourceRoot":"","sources":["../../../src/runtime-v2/__tests__/schema-orphan-detection.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.191.0",
3
+ "version": "1.193.0",
4
4
  "description": "Universal Evolution SDK - framework-agnostic pain signal capture and principle injection",
5
5
  "type": "module",
6
6
  "main": "./dist/index.js",