@cavelang/store 0.34.0 → 0.36.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 (73) hide show
  1. package/README.md +884 -15
  2. package/dist/src/backup.d.ts.map +1 -1
  3. package/dist/src/backup.js +143 -70
  4. package/dist/src/backup.js.map +1 -1
  5. package/dist/src/capture-claim.d.ts +4 -0
  6. package/dist/src/capture-claim.d.ts.map +1 -0
  7. package/dist/src/capture-claim.js +26 -0
  8. package/dist/src/capture-claim.js.map +1 -0
  9. package/dist/src/descriptor.d.ts +3 -0
  10. package/dist/src/descriptor.d.ts.map +1 -0
  11. package/dist/src/descriptor.js +21 -0
  12. package/dist/src/descriptor.js.map +1 -0
  13. package/dist/src/error-message.d.ts +3 -0
  14. package/dist/src/error-message.d.ts.map +1 -0
  15. package/dist/src/error-message.js +10 -0
  16. package/dist/src/error-message.js.map +1 -0
  17. package/dist/src/index.d.ts +1 -1
  18. package/dist/src/index.d.ts.map +1 -1
  19. package/dist/src/locate.d.ts +13 -1
  20. package/dist/src/locate.d.ts.map +1 -1
  21. package/dist/src/locate.js +35 -13
  22. package/dist/src/locate.js.map +1 -1
  23. package/dist/src/node-adapter.d.ts.map +1 -1
  24. package/dist/src/node-adapter.js +29 -1
  25. package/dist/src/node-adapter.js.map +1 -1
  26. package/dist/src/provenance.d.ts +4 -0
  27. package/dist/src/provenance.d.ts.map +1 -1
  28. package/dist/src/provenance.js +36 -1
  29. package/dist/src/provenance.js.map +1 -1
  30. package/dist/src/query-sql.d.ts.map +1 -1
  31. package/dist/src/query-sql.js +4 -2
  32. package/dist/src/query-sql.js.map +1 -1
  33. package/dist/src/read-snapshot.d.ts +4 -0
  34. package/dist/src/read-snapshot.d.ts.map +1 -0
  35. package/dist/src/read-snapshot.js +22 -0
  36. package/dist/src/read-snapshot.js.map +1 -0
  37. package/dist/src/record.d.ts.map +1 -1
  38. package/dist/src/record.js +102 -25
  39. package/dist/src/record.js.map +1 -1
  40. package/dist/src/resolve.d.ts.map +1 -1
  41. package/dist/src/resolve.js +42 -18
  42. package/dist/src/resolve.js.map +1 -1
  43. package/dist/src/row.d.ts.map +1 -1
  44. package/dist/src/row.js +45 -17
  45. package/dist/src/row.js.map +1 -1
  46. package/dist/src/runtime.d.ts.map +1 -1
  47. package/dist/src/runtime.js +8 -4
  48. package/dist/src/runtime.js.map +1 -1
  49. package/dist/src/schema.d.ts +1 -2
  50. package/dist/src/schema.d.ts.map +1 -1
  51. package/dist/src/schema.js +116 -15
  52. package/dist/src/schema.js.map +1 -1
  53. package/dist/src/store.d.ts +17 -5
  54. package/dist/src/store.d.ts.map +1 -1
  55. package/dist/src/store.js +451 -104
  56. package/dist/src/store.js.map +1 -1
  57. package/package.json +4 -4
  58. package/src/backup.ts +141 -65
  59. package/src/capture-claim.ts +30 -0
  60. package/src/descriptor.ts +19 -0
  61. package/src/error-message.ts +8 -0
  62. package/src/index.ts +1 -1
  63. package/src/locate.ts +45 -13
  64. package/src/node-adapter.ts +28 -1
  65. package/src/provenance.ts +33 -1
  66. package/src/query-sql.ts +4 -2
  67. package/src/read-snapshot.ts +21 -0
  68. package/src/record.ts +102 -26
  69. package/src/resolve.ts +43 -20
  70. package/src/row.ts +29 -2
  71. package/src/runtime.ts +8 -4
  72. package/src/schema.ts +117 -18
  73. package/src/store.ts +452 -125
package/dist/src/row.js CHANGED
@@ -67,21 +67,49 @@ export const toColumns = (claim) => {
67
67
  * @returns canonical claim reconstructed from a row plus its side tables.
68
68
  * `sigmaLevel` collapses to `undefined` at the semantic default of 2.
69
69
  */
70
- export const toClaim = (row, contexts, tags) => Claim.of({
71
- subject: parseTerm(row.subject),
72
- verb: row.verb,
73
- negated: row.negated !== 0,
74
- payload: row.object !== null ? Claim.relation(parseTerm(row.object)) :
75
- row.attribute !== null && row.value_text !== null ? Claim.attribute(row.attribute, parseValue(row.value_text)) :
76
- row.value_text !== null ? Claim.metric(parseValue(row.value_text)) :
77
- Claim.none,
78
- contexts,
79
- tags: tags.map(tag => tag.value === null ? { key: tag.key } : { key: tag.key, value: tag.value }),
80
- conf: row.conf,
81
- importance: row.importance !== 0,
82
- ...row.delta_text !== null ? { delta: parseValue(row.delta_text) } : {},
83
- ...row.sigma_level !== null && row.sigma_level !== 2 ? { sigmaLevel: row.sigma_level } : {},
84
- ...row.comment !== null ? { comment: row.comment } : {},
85
- raw: row.raw_line
86
- });
70
+ export const toClaim = (row, contexts, tags) => {
71
+ for (const field of ['negated', 'importance', 'value_approx']) {
72
+ if (row[field] !== 0 && row[field] !== 1) {
73
+ throw new TypeError(`stored claim ${field} must be 0 or 1`);
74
+ }
75
+ }
76
+ if (row.object !== null && (row.attribute !== null || row.value_text !== null)) {
77
+ throw new TypeError('stored claim payload cannot combine an object with an attribute or value');
78
+ }
79
+ if (row.attribute !== null && row.value_text === null) {
80
+ throw new TypeError('stored claim attribute payload requires a value');
81
+ }
82
+ const claim = Claim.of({
83
+ subject: parseTerm(row.subject),
84
+ verb: row.verb,
85
+ negated: row.negated !== 0,
86
+ payload: row.object !== null ? Claim.relation(parseTerm(row.object)) :
87
+ row.attribute !== null && row.value_text !== null ? Claim.attribute(row.attribute, parseValue(row.value_text)) :
88
+ row.value_text !== null ? Claim.metric(parseValue(row.value_text)) :
89
+ Claim.none,
90
+ contexts,
91
+ tags: tags.map(tag => tag.value === null ? { key: tag.key } : { key: tag.key, value: tag.value }),
92
+ conf: row.conf,
93
+ importance: row.importance !== 0,
94
+ ...row.delta_text !== null ? { delta: parseValue(row.delta_text) } : {},
95
+ ...row.sigma_level !== null && row.sigma_level !== 2 ? { sigmaLevel: row.sigma_level } : {},
96
+ ...row.comment !== null ? { comment: row.comment } : {},
97
+ raw: row.raw_line
98
+ });
99
+ const value = claim.payload.kind === 'attribute' || claim.payload.kind === 'metric'
100
+ ? claim.payload.value : undefined;
101
+ const expected = {
102
+ value_num: value?.num ?? null,
103
+ value_unit: value?.unit ?? null,
104
+ value_approx: value?.approx === true ? 1 : 0,
105
+ delta_num: claim.delta?.num ?? null,
106
+ delta_unit: claim.delta?.unit ?? null
107
+ };
108
+ for (const field of Object.keys(expected)) {
109
+ if (row[field] !== expected[field]) {
110
+ throw new TypeError(`stored claim ${field} does not agree with its authored value`);
111
+ }
112
+ }
113
+ return claim;
114
+ };
87
115
  //# sourceMappingURL=row.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"row.js","sourceRoot":"","sources":["../../src/row.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"row.js","sourceRoot":"","sources":["../../src/row.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"runtime.d.ts","sourceRoot":"","sources":["../../src/runtime.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,SAAS,MAAM,qBAAqB,CAAA;AAChD,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,cAAc,CAAA;AAG3C,OAAO,KAAK,EAAE,MAAM,EAAE,KAAK,IAAI,SAAS,EAAE,MAAM,YAAY,CAAA;AAE5D,MAAM,MAAM,KAAK,GAAG,SAAS,GAAG;IAC9B;;;OAGG;IACH,QAAQ,CAAC,YAAY,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,SAAS,CAAC,QAAQ,CAAC,CAAC,CAAA;CAC9D,CAAA;AAED,MAAM,MAAM,WAAW,GAAG;IACxB,QAAQ,CAAC,QAAQ,CAAC,EAAE,SAAS,CAAC,QAAQ,CAAC,CAAC,CAAA;IACxC,0FAA0F;IAC1F,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAA;CACzB,CAAA;AAgDD,2EAA2E;AAC3E,eAAO,MAAM,QAAQ,GACnB,SAAS,OAAO,EAChB,OAAM,MAAmB,EACzB,UAAS,WAAgB,KACxB,KAOF,CAAA"}
1
+ {"version":3,"file":"runtime.d.ts","sourceRoot":"","sources":["../../src/runtime.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,SAAS,MAAM,qBAAqB,CAAA;AAChD,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,cAAc,CAAA;AAG3C,OAAO,KAAK,EAAE,MAAM,EAAE,KAAK,IAAI,SAAS,EAAE,MAAM,YAAY,CAAA;AAE5D,MAAM,MAAM,KAAK,GAAG,SAAS,GAAG;IAC9B;;;OAGG;IACH,QAAQ,CAAC,YAAY,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,SAAS,CAAC,QAAQ,CAAC,CAAC,CAAA;CAC9D,CAAA;AAED,MAAM,MAAM,WAAW,GAAG;IACxB,QAAQ,CAAC,QAAQ,CAAC,EAAE,SAAS,CAAC,QAAQ,CAAC,CAAC,CAAA;IACxC,0FAA0F;IAC1F,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAA;CACzB,CAAA;AAmDD,2EAA2E;AAC3E,eAAO,MAAM,QAAQ,GACnB,SAAS,OAAO,EAChB,OAAM,MAAmB,EACzB,UAAS,WAAgB,KACxB,KAQF,CAAA"}
@@ -11,9 +11,12 @@ const declarationsAsOf = (store, asOf) => {
11
11
  SELECT subject, verb, object FROM cave_claim
12
12
  WHERE tx ${boundary.operator} ?
13
13
  AND negated = 0 AND object IS NOT NULL AND verb IN ('REVERSE', 'RENAMED-TO', 'IS')
14
- AND id NOT IN (SELECT child_id FROM cave_edge WHERE role IN ('WHEN', 'VIA', 'BECAUSE'))
14
+ AND id NOT IN (
15
+ SELECT e.child_id FROM cave_edge e JOIN cave_claim parent ON parent.id = e.parent_id
16
+ WHERE e.role IN ('WHEN', 'VIA', 'BECAUSE') AND parent.tx ${boundary.operator} ?
17
+ )
15
18
  ORDER BY tx
16
- `).all(boundary.tx);
19
+ `).all(boundary.tx, boundary.tx);
17
20
  };
18
21
  const applyDeclarations = (baseRegistry, declarations) => {
19
22
  let registry = baseRegistry;
@@ -34,8 +37,9 @@ const applyDeclarations = (baseRegistry, declarations) => {
34
37
  };
35
38
  /** Open a CAVE store with an explicitly selected SQLite implementation. */
36
39
  export const openWith = (adapter, path = ':memory:', options = {}) => {
37
- const baseRegistry = options.registry ?? Canonical.standardRegistry;
38
- const store = openStore(adapter, path, options);
40
+ const { registry, access } = options;
41
+ const baseRegistry = registry ?? Canonical.standardRegistry;
42
+ const store = openStore(adapter, path, { registry: baseRegistry, access });
39
43
  return Object.assign(store, {
40
44
  registryAsOf: (asOf) => applyDeclarations(baseRegistry, declarationsAsOf(store, asOf))
41
45
  });
@@ -1 +1 @@
1
- {"version":3,"file":"runtime.js","sourceRoot":"","sources":["../../src/runtime.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,gBAAgB,CAAA;AACrC,OAAO,KAAK,SAAS,MAAM,qBAAqB,CAAA;AAEhD,OAAO,KAAK,QAAQ,MAAM,gBAAgB,CAAA;AAC1C,OAAO,EAAE,IAAI,IAAI,SAAS,EAAE,MAAM,YAAY,CAAA;AAuB9C,MAAM,gBAAgB,GAAG,CAAC,KAAgB,EAAE,IAAY,EAAiB,EAAE;IACzE,MAAM,QAAQ,GAAG,QAAQ,CAAC,YAAY,CAAC,IAAI,CAAC,CAAA;IAC5C,IAAI,QAAQ,KAAK,SAAS,EAAE,CAAC;QAC3B,MAAM,IAAI,KAAK,CAAC,qCAAqC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,EAAE,CAAC,CAAA;IAC9E,CAAC;IACD,OAAO,KAAK,CAAC,EAAE,CAAC,OAAO,CAAC;;eAEX,QAAQ,CAAC,QAAQ;;;;GAI7B,CAAC,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,CAAkB,CAAA;AACtC,CAAC,CAAA;AAED,MAAM,iBAAiB,GAAG,CACxB,YAAkC,EAClC,YAAoC,EACd,EAAE;IACxB,IAAI,QAAQ,GAAG,YAAY,CAAA;IAC3B,KAAK,MAAM,WAAW,IAAI,YAAY,EAAE,CAAC;QACvC,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,WAAW,CAAC,OAAO,CAAC;YAAE,SAAQ;QACpD,IAAI,WAAW,CAAC,IAAI,KAAK,SAAS,IAAI,IAAI,CAAC,WAAW,CAAC,WAAW,CAAC,MAAM,CAAC,EAAE,CAAC;YAC3E,QAAQ,GAAG,SAAS,CAAC,QAAQ,CAAC,cAAc,CAC1C,QAAQ,EACR,WAAW,CAAC,OAAO,EACnB,WAAW,CAAC,MAAM,CACnB,CAAC,QAAQ,CAAA;QACZ,CAAC;aAAM,IAAI,WAAW,CAAC,IAAI,KAAK,YAAY,IAAI,IAAI,CAAC,WAAW,CAAC,WAAW,CAAC,MAAM,CAAC,EAAE,CAAC;YACrF,QAAQ,GAAG,SAAS,CAAC,QAAQ,CAAC,aAAa,CACzC,QAAQ,EACR,WAAW,CAAC,OAAO,EACnB,WAAW,CAAC,MAAM,CACnB,CAAC,QAAQ,CAAA;QACZ,CAAC;aAAM,IAAI,WAAW,CAAC,IAAI,KAAK,IAAI,IAAI,WAAW,CAAC,MAAM,KAAK,MAAM,EAAE,CAAC;YACtE,QAAQ,GAAG,SAAS,CAAC,QAAQ,CAAC,WAAW,CAAC,QAAQ,EAAE,WAAW,CAAC,OAAO,CAAC,CAAA;QAC1E,CAAC;IACH,CAAC;IACD,OAAO,QAAQ,CAAA;AACjB,CAAC,CAAA;AAED,2EAA2E;AAC3E,MAAM,CAAC,MAAM,QAAQ,GAAG,CACtB,OAAgB,EAChB,OAAe,UAAU,EACzB,UAAuB,EAAE,EAClB,EAAE;IACT,MAAM,YAAY,GAAG,OAAO,CAAC,QAAQ,IAAI,SAAS,CAAC,gBAAgB,CAAA;IACnE,MAAM,KAAK,GAAG,SAAS,CAAC,OAAO,EAAE,IAAI,EAAE,OAAO,CAAC,CAAA;IAC/C,OAAO,MAAM,CAAC,MAAM,CAAC,KAAK,EAAE;QAC1B,YAAY,EAAE,CAAC,IAAY,EAAwB,EAAE,CACnD,iBAAiB,CAAC,YAAY,EAAE,gBAAgB,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;KACjE,CAAC,CAAA;AACJ,CAAC,CAAA"}
1
+ {"version":3,"file":"runtime.js","sourceRoot":"","sources":["../../src/runtime.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,gBAAgB,CAAA;AACrC,OAAO,KAAK,SAAS,MAAM,qBAAqB,CAAA;AAEhD,OAAO,KAAK,QAAQ,MAAM,gBAAgB,CAAA;AAC1C,OAAO,EAAE,IAAI,IAAI,SAAS,EAAE,MAAM,YAAY,CAAA;AAuB9C,MAAM,gBAAgB,GAAG,CAAC,KAAgB,EAAE,IAAY,EAAiB,EAAE;IACzE,MAAM,QAAQ,GAAG,QAAQ,CAAC,YAAY,CAAC,IAAI,CAAC,CAAA;IAC5C,IAAI,QAAQ,KAAK,SAAS,EAAE,CAAC;QAC3B,MAAM,IAAI,KAAK,CAAC,qCAAqC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,EAAE,CAAC,CAAA;IAC9E,CAAC;IACD,OAAO,KAAK,CAAC,EAAE,CAAC,OAAO,CAAC;;eAEX,QAAQ,CAAC,QAAQ;;;;mEAImC,QAAQ,CAAC,QAAQ;;;GAGjF,CAAC,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,EAAE,QAAQ,CAAC,EAAE,CAAkB,CAAA;AACnD,CAAC,CAAA;AAED,MAAM,iBAAiB,GAAG,CACxB,YAAkC,EAClC,YAAoC,EACd,EAAE;IACxB,IAAI,QAAQ,GAAG,YAAY,CAAA;IAC3B,KAAK,MAAM,WAAW,IAAI,YAAY,EAAE,CAAC;QACvC,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,WAAW,CAAC,OAAO,CAAC;YAAE,SAAQ;QACpD,IAAI,WAAW,CAAC,IAAI,KAAK,SAAS,IAAI,IAAI,CAAC,WAAW,CAAC,WAAW,CAAC,MAAM,CAAC,EAAE,CAAC;YAC3E,QAAQ,GAAG,SAAS,CAAC,QAAQ,CAAC,cAAc,CAC1C,QAAQ,EACR,WAAW,CAAC,OAAO,EACnB,WAAW,CAAC,MAAM,CACnB,CAAC,QAAQ,CAAA;QACZ,CAAC;aAAM,IAAI,WAAW,CAAC,IAAI,KAAK,YAAY,IAAI,IAAI,CAAC,WAAW,CAAC,WAAW,CAAC,MAAM,CAAC,EAAE,CAAC;YACrF,QAAQ,GAAG,SAAS,CAAC,QAAQ,CAAC,aAAa,CACzC,QAAQ,EACR,WAAW,CAAC,OAAO,EACnB,WAAW,CAAC,MAAM,CACnB,CAAC,QAAQ,CAAA;QACZ,CAAC;aAAM,IAAI,WAAW,CAAC,IAAI,KAAK,IAAI,IAAI,WAAW,CAAC,MAAM,KAAK,MAAM,EAAE,CAAC;YACtE,QAAQ,GAAG,SAAS,CAAC,QAAQ,CAAC,WAAW,CAAC,QAAQ,EAAE,WAAW,CAAC,OAAO,CAAC,CAAA;QAC1E,CAAC;IACH,CAAC;IACD,OAAO,QAAQ,CAAA;AACjB,CAAC,CAAA;AAED,2EAA2E;AAC3E,MAAM,CAAC,MAAM,QAAQ,GAAG,CACtB,OAAgB,EAChB,OAAe,UAAU,EACzB,UAAuB,EAAE,EAClB,EAAE;IACT,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,GAAG,OAAO,CAAA;IACpC,MAAM,YAAY,GAAG,QAAQ,IAAI,SAAS,CAAC,gBAAgB,CAAA;IAC3D,MAAM,KAAK,GAAG,SAAS,CAAC,OAAO,EAAE,IAAI,EAAE,EAAE,QAAQ,EAAE,YAAY,EAAE,MAAM,EAAE,CAAC,CAAA;IAC1E,OAAO,MAAM,CAAC,MAAM,CAAC,KAAK,EAAE;QAC1B,YAAY,EAAE,CAAC,IAAY,EAAwB,EAAE,CACnD,iBAAiB,CAAC,YAAY,EAAE,gBAAgB,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;KACjE,CAAC,CAAA;AACJ,CAAC,CAAA"}
@@ -1,7 +1,6 @@
1
1
  /** Ordered, transactional storage schema migrations (spec §13). */
2
2
  import type { Capabilities, Database } from './adapter.ts';
3
- export declare const currentVersion = 1;
4
- /** Default Node/FTS5 schema SQL retained for callers that inspect the DDL. */
3
+ export declare const currentVersion = 2;
5
4
  export declare const ddl: string;
6
5
  export declare const versionOf: (db: Database) => number;
7
6
  export declare const validate: (db: Database, version: number, schema?: string) => void;
@@ -1 +1 @@
1
- {"version":3,"file":"schema.d.ts","sourceRoot":"","sources":["../../src/schema.ts"],"names":[],"mappings":"AAAA,mEAAmE;AAEnE,OAAO,KAAK,EAAE,YAAY,EAAE,QAAQ,EAAE,MAAM,cAAc,CAAA;AAG1D,eAAO,MAAM,cAAc,IAAI,CAAA;AAoF/B,8EAA8E;AAC9E,eAAO,MAAM,GAAG,QAAgC,CAAA;AAoBhD,eAAO,MAAM,SAAS,GAAI,IAAI,QAAQ,KAAG,MAC2C,CAAA;AA0BpF,eAAO,MAAM,QAAQ,GAAI,IAAI,QAAQ,EAAE,SAAS,MAAM,EAAE,eAAe,KAAG,IAwBzE,CAAA;AAED;;;;GAIG;AACH,eAAO,MAAM,KAAK,GAAI,IAAI,QAAQ,KAAG,IAYpC,CAAA;AAED;;;;GAIG;AACH,eAAO,MAAM,IAAI,GACf,IAAI,QAAQ,EACZ,eAAc,YAGb,KACA,IA+BF,CAAA"}
1
+ {"version":3,"file":"schema.d.ts","sourceRoot":"","sources":["../../src/schema.ts"],"names":[],"mappings":"AAAA,mEAAmE;AAEnE,OAAO,KAAK,EAAE,YAAY,EAAE,QAAQ,EAAO,MAAM,cAAc,CAAA;AAI/D,eAAO,MAAM,cAAc,IAAI,CAAA;AAsF/B,eAAO,MAAM,GAAG,QAAsD,CAAA;AAqBtE,eAAO,MAAM,SAAS,GAAI,IAAI,QAAQ,KAAG,MAC2C,CAAA;AAyDpF,eAAO,MAAM,QAAQ,GAAI,IAAI,QAAQ,EAAE,SAAS,MAAM,EAAE,eAAe,KAAG,IAwFzE,CAAA;AAED;;;;GAIG;AACH,eAAO,MAAM,KAAK,GAAI,IAAI,QAAQ,KAAG,IAYpC,CAAA;AAED;;;;GAIG;AACH,eAAO,MAAM,IAAI,GACf,IAAI,QAAQ,EACZ,eAAc,YAGb,KACA,IAgCF,CAAA"}
@@ -1,6 +1,7 @@
1
1
  /** Ordered, transactional storage schema migrations (spec §13). */
2
2
  import * as Provenance from "./provenance.js";
3
- export const currentVersion = 1;
3
+ import { errorMessage } from "./error-message.js";
4
+ export const currentVersion = 2;
4
5
  const ddlBeforeFts = `
5
6
  CREATE TABLE IF NOT EXISTS cave_claim (
6
7
  id TEXT PRIMARY KEY, -- UUIDv7
@@ -82,7 +83,8 @@ CREATE VIRTUAL TABLE IF NOT EXISTS cave_fts USING ${fullText}(
82
83
  );
83
84
  `;
84
85
  /** Default Node/FTS5 schema SQL retained for callers that inspect the DDL. */
85
- export const ddl = ddlBeforeFts + ftsDdl('fts5');
86
+ const transactionIndexDdl = 'CREATE INDEX IF NOT EXISTS idx_cave_tx ON cave_claim (tx);';
87
+ export const ddl = ddlBeforeFts + ftsDdl('fts5') + transactionIndexDdl;
86
88
  const ddlFor = (capabilities) => ddlBeforeFts + ftsDdl(capabilities.fullText);
87
89
  const migrations = [
88
90
  {
@@ -91,17 +93,29 @@ const migrations = [
91
93
  db.exec(ddlFor(capabilities));
92
94
  Provenance.backfill(db);
93
95
  }
94
- }
96
+ },
97
+ { version: 2, up: db => { db.exec(transactionIndexDdl); } }
95
98
  ];
96
99
  export const versionOf = (db) => db.prepare('PRAGMA user_version').get().user_version;
97
100
  const requiredTables = [
98
101
  'cave_claim', 'cave_context', 'cave_provenance', 'cave_tag', 'cave_edge', 'cave_fts'
99
102
  ];
100
103
  const requiredIndexes = [
101
- 'idx_cave_claim_key_tx', 'idx_cave_subject', 'idx_cave_verb', 'idx_cave_object',
102
- 'idx_cave_attribute', 'idx_cave_conf', 'idx_cave_context', 'idx_cave_context_claim',
103
- 'idx_cave_provenance_lookup', 'idx_cave_tag_key', 'idx_cave_tag_claim',
104
- 'idx_cave_edge_parent', 'idx_cave_edge_child', 'idx_cave_edge_role'
104
+ ['idx_cave_claim_key_tx', 'cave_claim', ['claim_key', 'tx']],
105
+ ['idx_cave_subject', 'cave_claim', ['subject']],
106
+ ['idx_cave_verb', 'cave_claim', ['verb']],
107
+ ['idx_cave_object', 'cave_claim', ['object']],
108
+ ['idx_cave_attribute', 'cave_claim', ['attribute']],
109
+ ['idx_cave_conf', 'cave_claim', ['conf']],
110
+ ['idx_cave_context', 'cave_context', ['context']],
111
+ ['idx_cave_context_claim', 'cave_context', ['claim_id', 'context']],
112
+ ['idx_cave_provenance_lookup', 'cave_provenance', ['dimension', 'value', 'claim_id']],
113
+ ['idx_cave_tag_key', 'cave_tag', ['key', 'value']],
114
+ ['idx_cave_tag_claim', 'cave_tag', ['claim_id', 'key', 'value']],
115
+ ['idx_cave_edge_parent', 'cave_edge', ['parent_id']],
116
+ ['idx_cave_edge_child', 'cave_edge', ['child_id']],
117
+ ['idx_cave_edge_role', 'cave_edge', ['role']],
118
+ ['idx_cave_tx', 'cave_claim', ['tx']]
105
119
  ];
106
120
  const requiredColumns = {
107
121
  cave_claim: [
@@ -115,23 +129,111 @@ const requiredColumns = {
115
129
  cave_edge: ['parent_id', 'role', 'child_id'],
116
130
  cave_fts: ['claim_id', 'subject', 'verb', 'object', 'attribute', 'value_text', 'comment', 'raw_line']
117
131
  };
132
+ const requiredPrimaryKeys = {
133
+ cave_claim: ['id'],
134
+ cave_provenance: ['claim_id', 'dimension', 'value']
135
+ };
136
+ const numericClaimColumns = new Set([
137
+ 'negated', 'value_num', 'value_approx', 'delta_num', 'sigma_level', 'conf', 'importance'
138
+ ]);
139
+ const fractionalClaimColumns = new Set(['value_num', 'delta_num', 'sigma_level', 'conf']);
140
+ // SQLite checks INT before CHAR/CLOB/TEXT: CHARINT is integer-affinity.
141
+ const affinityFamily = (type) => {
142
+ const declared = String(type).toUpperCase();
143
+ if (declared.includes('INT'))
144
+ return 'numeric';
145
+ if (/CHAR|CLOB|TEXT/.test(declared))
146
+ return 'TEXT';
147
+ if (declared === '' || declared.includes('BLOB'))
148
+ return 'BLOB';
149
+ // INTEGER, REAL and NUMERIC all retain numeric comparison semantics.
150
+ return 'numeric';
151
+ };
118
152
  export const validate = (db, version, schema = 'main') => {
119
153
  if (!/^[A-Za-z_][A-Za-z0-9_]*$/.test(schema)) {
120
154
  throw new Error(`CAVE: invalid SQLite schema name ${JSON.stringify(schema)}`);
121
155
  }
156
+ const indexes = requiredIndexes.filter(([name]) => version >= 2 || name !== 'idx_cave_tx');
157
+ const tables = new Map(db.prepare(`PRAGMA ${schema}.table_list`).all().map(row => [row.name, row]));
158
+ const indexLists = new Map();
159
+ const indexesOf = (table) => {
160
+ let rows = indexLists.get(table);
161
+ if (rows === undefined) {
162
+ rows = db.prepare(`PRAGMA ${schema}.index_list(${table})`).all();
163
+ indexLists.set(table, rows);
164
+ }
165
+ return rows;
166
+ };
122
167
  const objects = new Map(db.prepare(`SELECT name, type FROM ${schema}.sqlite_schema WHERE name LIKE 'cave_%' OR name LIKE 'idx_cave_%'`)
123
168
  .all().map(row => [row.name, row.type]));
124
169
  const problems = [
125
- ...requiredTables.flatMap(name => objects.has(name) ? [] : [`missing table ${name}`]),
126
- ...requiredIndexes.flatMap(name => objects.get(name) === 'index' ? [] : [`missing index ${name}`]),
170
+ ...requiredTables.flatMap(name => objects.get(name) === 'table' ? [] : [`missing table ${name}`]),
171
+ ...indexes
172
+ .flatMap(([name]) => objects.get(name) === 'index' ? [] : [`missing index ${name}`]),
127
173
  ...Object.entries(requiredColumns).flatMap(([table, required]) => {
128
174
  if (!objects.has(table)) {
129
175
  return [];
130
176
  }
131
- const columns = new Set(db.prepare(`PRAGMA ${schema}.table_info(${table})`).all().map(row => row.name));
132
- return required.flatMap(column => columns.has(column) ? [] : [`missing column ${table}.${column}`]);
177
+ const info = db.prepare(`PRAGMA ${schema}.table_info(${table})`).all();
178
+ const columns = new Set(info.map(row => row.name));
179
+ const expectedKey = requiredPrimaryKeys[table];
180
+ const key = info.filter(row => Number(row.pk) > 0)
181
+ .sort((left, right) => Number(left.pk) - Number(right.pk)).map(row => row.name);
182
+ let binaryKey = true;
183
+ if (expectedKey !== undefined) {
184
+ const primary = indexesOf(table).find(row => row.origin === 'pk');
185
+ const name = typeof primary?.name === 'string' ? primary.name : undefined;
186
+ const indexed = name === undefined ? [] :
187
+ db.prepare(`PRAGMA ${schema}.index_xinfo("${name.replaceAll('"', '""')}")`).all()
188
+ .filter(row => Number(row.key) === 1);
189
+ binaryKey = indexed.length === expectedKey.length &&
190
+ indexed.every(row => String(row.coll).toUpperCase() === 'BINARY');
191
+ }
192
+ return [
193
+ ...required.flatMap(column => columns.has(column) ? [] : [`missing column ${table}.${column}`]),
194
+ ...info.flatMap(row => {
195
+ const column = String(row.name);
196
+ // FTS virtual columns have module-defined storage, not ordinary affinity.
197
+ if (table === 'cave_fts' || !required.includes(column))
198
+ return [];
199
+ const strict = Number(tables.get(table)?.strict) === 1;
200
+ const declared = String(row.type).toUpperCase();
201
+ if (strict && table === 'cave_claim' && fractionalClaimColumns.has(column) && declared !== 'REAL') {
202
+ return [`incompatible column ${table}.${column}: expected REAL in a STRICT table`];
203
+ }
204
+ const expected = table === 'cave_claim' && numericClaimColumns.has(column) ? 'numeric' : 'TEXT';
205
+ const affinity = strict && declared === 'ANY' ? 'BLOB' : affinityFamily(row.type);
206
+ return affinity === expected ? [] :
207
+ [`incompatible column ${table}.${column}: expected ${expected} affinity`];
208
+ }),
209
+ ...(expectedKey !== undefined && (!binaryKey || key.length !== expectedKey.length || key.some((name, index) => name !== expectedKey[index]))
210
+ ? [`incompatible table ${table}: expected primary key (${expectedKey.join(', ')}) with BINARY collation`] : [])
211
+ ];
133
212
  })
134
213
  ];
214
+ if (objects.get('cave_fts') === 'table') {
215
+ const searchTable = tables.get('cave_fts');
216
+ if (searchTable?.type !== 'virtual') {
217
+ problems.push('incompatible table cave_fts: expected a virtual table for full-text search');
218
+ }
219
+ else {
220
+ const searchColumns = db.prepare(`PRAGMA ${schema}.table_xinfo(cave_fts)`).all();
221
+ if (!searchColumns.some(row => row.name === 'cave_fts' && Number(row.hidden) === 1)) {
222
+ problems.push('incompatible table cave_fts: missing the hidden full-text search column');
223
+ }
224
+ }
225
+ }
226
+ for (const [name, table, expected] of indexes) {
227
+ if (objects.get(name) !== 'index')
228
+ continue;
229
+ const columns = db.prepare(`PRAGMA ${schema}.index_xinfo(${name})`).all()
230
+ .filter(row => Number(row.key) === 1);
231
+ const index = indexesOf(table).find(row => row.name === name);
232
+ if (index === undefined || Number(index.unique) !== 0 || Number(index.partial) !== 0 ||
233
+ columns.length !== expected.length || columns.some((column, position) => column.name !== expected[position] || String(column.coll).toUpperCase() !== 'BINARY')) {
234
+ problems.push(`incompatible index ${name}: expected non-unique ${table}(${expected.map(column => `${column} COLLATE BINARY`).join(', ')}) without a partial predicate`);
235
+ }
236
+ }
135
237
  if (problems.length > 0) {
136
238
  throw new Error(`CAVE: schema version ${version} is incompatible: ${problems.join(', ')}`);
137
239
  }
@@ -184,11 +286,10 @@ export const init = (db, capabilities = {
184
286
  try {
185
287
  db.exec('ROLLBACK');
186
288
  }
187
- catch {
188
- // SQLite may already have rolled back a failed statement.
289
+ catch (rollbackError) {
290
+ throw new AggregateError([error, rollbackError], `CAVE: schema migration ${version} -> ${migration.version} failed: ${errorMessage(error)}; rollback also failed: ${errorMessage(rollbackError)}`, { cause: error });
189
291
  }
190
- const detail = error instanceof Error ? error.message : String(error);
191
- throw new Error(`CAVE: schema migration ${version} -> ${migration.version} failed: ${detail}`);
292
+ throw new Error(`CAVE: schema migration ${version} -> ${migration.version} failed: ${errorMessage(error)}`, { cause: error });
192
293
  }
193
294
  }
194
295
  validate(db, version);
@@ -1 +1 @@
1
- {"version":3,"file":"schema.js","sourceRoot":"","sources":["../../src/schema.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"schema.js","sourceRoot":"","sources":["../../src/schema.ts"],"names":[],"mappings":"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"}
@@ -67,7 +67,9 @@ export type AppendOptions = {
67
67
  * Explicit row identity (spec §28.1), index-aligned with the result's
68
68
  * claims: a claim with an id here is replayed under it — inserted with
69
69
  * `id = tx = ids[i]` when absent, skipped when the store already has the
70
- * row — and the generator observes it (spec §28.2). Claims without an
70
+ * row — and the generator observes it (spec §28.2). Every supplied ID
71
+ * used by a claim must be a canonical lowercase UUIDv7; the whole batch
72
+ * is validated before any ID is observed or row is inserted. Claims without an
71
73
  * entry mint fresh ids as usual. Edges deduplicate against stored edges
72
74
  * in this mode, so replaying a sync export is idempotent end to end.
73
75
  */
@@ -138,7 +140,7 @@ export declare const open: (adapter: Adapter, path?: string, options?: {
138
140
  adapter: Adapter;
139
141
  /** Raw adapter database handle — used by `@cavelang/query`; treat as read-only. */
140
142
  db: import("./adapter.ts").Database;
141
- /** Current verb registry (input registry + stored + ingested declarations). */
143
+ /** Current verb registry; refreshes declarations committed by other connections. */
142
144
  registry: () => Canonical.Registry.t;
143
145
  /** Configured registry before any in-band declarations are applied. */
144
146
  baseRegistry: () => Canonical.Registry.t;
@@ -154,8 +156,12 @@ export declare const open: (adapter: Adapter, path?: string, options?: {
154
156
  * nested appends and their registry declarations. Nestable
155
157
  * (savepoints) — the write gate wraps ingest + check in one of these
156
158
  * (spec §20.3).
159
+ * The callback receives `outermost`: only that scope commits the
160
+ * database; a nested scope merely releases its savepoint.
157
161
  */
158
- transaction: <T>(body: () => T) => T;
162
+ transaction: <T>(body: (context: {
163
+ readonly outermost: boolean;
164
+ }) => T) => T;
159
165
  /**
160
166
  * Parses, canonicalizes and appends CAVE text. Lenient by default —
161
167
  * problems are returned, valid lines still land (spec §1.6); pass
@@ -240,11 +246,14 @@ export declare const open: (adapter: Adapter, path?: string, options?: {
240
246
  * would otherwise parse as a column filter); pass `raw` to use full
241
247
  * FTS5 MATCH syntax. `limit` caps the rows inside the query itself,
242
248
  * so a broad search never materializes more than the caller reads.
249
+ * `currentOnly` selects non-retracted current rows before that cap;
250
+ * omission retains historical search.
243
251
  */
244
252
  search(query: string, options_?: {
245
253
  raw?: boolean;
246
254
  limit?: number;
247
255
  maxSensitivity?: Sensitivity.Level;
256
+ currentOnly?: boolean;
248
257
  }): Row.t[];
249
258
  /**
250
259
  * Appends edges between *existing* claim rows (spec §13.2) — the
@@ -270,8 +279,9 @@ export declare const open: (adapter: Adapter, path?: string, options?: {
270
279
  * Emits the store as canonical CAVE text — all rows in transaction
271
280
  * order, or only current beliefs with `current`. With `tx`, every
272
281
  * claim line is preceded by its §28.4 transaction annotation
273
- * (`;@ <tx>`), so the text carries row identity: `cave sync` replays
274
- * it idempotently, plain `cave import` reads it unchanged.
282
+ * (`;@ <tx>` with optional JSON provenance), so text carries identity
283
+ * and exact dimensions: `cave sync` replays it idempotently, while plain
284
+ * `cave import` ignores annotation metadata.
275
285
  *
276
286
  * In current-only export an edge endpoint may be a superseded row;
277
287
  * dropping such edges would silently un-condition current claims and
@@ -284,6 +294,8 @@ export declare const open: (adapter: Adapter, path?: string, options?: {
284
294
  tx?: boolean;
285
295
  maxSensitivity?: Sensitivity.Level;
286
296
  }): string;
297
+ /** Register synchronous dependent-resource cleanup; returns an unsubscribe function. */
298
+ onClose(callback: () => void): () => void;
287
299
  close(): void;
288
300
  };
289
301
  //# sourceMappingURL=store.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"store.d.ts","sourceRoot":"","sources":["../../src/store.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"store.d.ts","sourceRoot":"","sources":["../../src/store.ts"],"names":[],"mappings":"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"}