@cavelang/store 0.15.0 → 0.17.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.
package/README.md CHANGED
@@ -52,6 +52,19 @@ store.exportText({ current: true }) // canonical CAVE text back out
52
52
  different actors keeps separate belief series (§9.4). A written `@src:`
53
53
  always wins; `raw_line` stays as authored. Interchange replay (`cave
54
54
  import`) passes no source, preserving exported keys.
55
+ - **Contradiction resolution is opt-in** (§26): `{ resolve: true }` on
56
+ traversal reads only the winners — coexisting series about one fact
57
+ (claim key modulo `src:` contexts and polarity) collapse to the row the
58
+ policy picks: precedence class (max over the row's sources), then
59
+ reliability-weighted confidence (min over sources), then tx. The policy
60
+ merges a built-in ladder (`cli` 4 > `agent`/`action` 3 > root 2 >
61
+ `rule` 1) with in-band `source/<name> HAS precedence:` /
62
+ `HAS reliability:` claims, matched to `src:` contexts by longest
63
+ segment prefix; the declarations themselves resolve under the built-ins
64
+ alone, so ingested text cannot self-elevate. Winners come back
65
+ verbatim — resolution filters, it never rewrites — and it composes with
66
+ `aliases`, which widens groups through the closure (the §13.6
67
+ pick-a-winner story).
55
68
 
56
69
  ## API
57
70
 
@@ -61,6 +74,9 @@ store.exportText({ current: true }) // canonical CAVE text back out
61
74
  | `insertResult(result, {source})` | | append a pre-canonicalized `@cavelang/canonical` result |
62
75
  | `currentBeliefs({minConf})` | §13.5 | latest row per key |
63
76
  | `currentBelief(key)` / `history(key)` | §9.1 | one fact's belief series |
77
+ | `resolvedBeliefs({aliases})` | §26 | one winner per resolution group |
78
+ | `contested({aliases})` | §26.4 | contested groups, candidates ranked winner-first — the fusion feed |
79
+ | `resolutionPolicy()` | §26.3 | effective policy: built-ins merged with in-band declarations |
64
80
  | `claimsAbout(entity, {aliases})` | §13.5 | both directions, all rows |
65
81
  | `forward(entity)` / `reverse(entity)` | §13.3 | named traversal, inverse-aware |
66
82
  | `aliasesOf(entity)` | §13.6 | the entity's alias closure |
@@ -104,6 +120,9 @@ Covers the §9.1 belief series, §5.5 one-fact-two-names invariants
104
120
  materialized inverses), every §13.5 query, the §13.6 alias closure
105
121
  (merge, unmerge by retraction, opt-in traversal, union semantics), the
106
122
  §9.5 provenance stamping (written `@src:` wins, per-actor series,
107
- cross-actor retraction, stamped round-trips), the §11.2 topic reads,
108
- edge persistence, registry rebuild across reopen, transactional strict
109
- ingest and export round-trips.
123
+ cross-actor retraction, stamped round-trips), the §26 resolution policy
124
+ (human-over-ingest precedence, reliability weighting, longest-prefix
125
+ specificity, polarity contests, no self-elevation, alias-widened
126
+ groups, contested ranking), the §11.2 topic reads, edge persistence,
127
+ registry rebuild across reopen, transactional strict ingest and export
128
+ round-trips.
@@ -11,6 +11,7 @@
11
11
  * // → [{ verb: 'CONTAINS', rel: 'PART-OF', source: 'monorepo', … }]
12
12
  * ```
13
13
  */
14
+ export * as Resolve from './resolve.ts';
14
15
  export * as Row from './row.ts';
15
16
  export * as Schema from './schema.ts';
16
17
  export { defaultDbPath, open } from './store.ts';
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAEH,OAAO,KAAK,GAAG,MAAM,UAAU,CAAA;AAC/B,OAAO,KAAK,MAAM,MAAM,aAAa,CAAA;AACrC,OAAO,EAAE,aAAa,EAAE,IAAI,EAAE,MAAM,YAAY,CAAA;AAChD,YAAY,EAAE,aAAa,EAAE,WAAW,EAAE,YAAY,EAAE,WAAW,EAAE,KAAK,EAAE,eAAe,EAAE,MAAM,YAAY,CAAA"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAEH,OAAO,KAAK,OAAO,MAAM,cAAc,CAAA;AACvC,OAAO,KAAK,GAAG,MAAM,UAAU,CAAA;AAC/B,OAAO,KAAK,MAAM,MAAM,aAAa,CAAA;AACrC,OAAO,EAAE,aAAa,EAAE,IAAI,EAAE,MAAM,YAAY,CAAA;AAChD,YAAY,EAAE,aAAa,EAAE,WAAW,EAAE,YAAY,EAAE,WAAW,EAAE,KAAK,EAAE,eAAe,EAAE,MAAM,YAAY,CAAA"}
package/dist/src/index.js CHANGED
@@ -11,6 +11,7 @@
11
11
  * // → [{ verb: 'CONTAINS', rel: 'PART-OF', source: 'monorepo', … }]
12
12
  * ```
13
13
  */
14
+ export * as Resolve from "./resolve.js";
14
15
  export * as Row from "./row.js";
15
16
  export * as Schema from "./schema.js";
16
17
  export { defaultDbPath, open } from "./store.js";
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAEH,OAAO,KAAK,GAAG,MAAM,UAAU,CAAA;AAC/B,OAAO,KAAK,MAAM,MAAM,aAAa,CAAA;AACrC,OAAO,EAAE,aAAa,EAAE,IAAI,EAAE,MAAM,YAAY,CAAA"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAEH,OAAO,KAAK,OAAO,MAAM,cAAc,CAAA;AACvC,OAAO,KAAK,GAAG,MAAM,UAAU,CAAA;AAC/B,OAAO,KAAK,MAAM,MAAM,aAAa,CAAA;AACrC,OAAO,EAAE,aAAa,EAAE,IAAI,EAAE,MAAM,YAAY,CAAA"}
@@ -0,0 +1,105 @@
1
+ /**
2
+ * Contradiction resolution (spec §26) — the explicit, configurable policy
3
+ * that picks one winner per fact among coexisting current beliefs.
4
+ *
5
+ * §9.4 tolerates contradictions at write time; §9.5 actor stamps, content
6
+ * sources, negation and aliased names (§13.6) all fork belief series about
7
+ * one fact on purpose. Latest-tx resolves *within* a series; this module
8
+ * resolves *across* them:
9
+ *
10
+ * - the **resolution group** of a current row is its claim key with every
11
+ * `src:` context removed and the negation flag dropped (§26.1) —
12
+ * sources say who asserted a fact, polarity is the contest;
13
+ * - **candidates** are the current row of each series in the group,
14
+ * excluding retracted rows (`@ 0%` neither wins nor blocks);
15
+ * - the **winner** compares precedence class (max over the row's
16
+ * sources), then reliability-weighted confidence (min over sources),
17
+ * then latest tx (§26.2);
18
+ * - the policy is declared **in-band** as `source/<name> HAS precedence:`
19
+ * / `HAS reliability:` claims matched to `src:` contexts by longest
20
+ * path prefix (§26.3), over the built-in ladder below. Policy claims
21
+ * themselves resolve under the built-ins alone — bootstrapping ends
22
+ * there, so an ingested document can never elevate its own batch above
23
+ * the humans and agents it is answerable to.
24
+ *
25
+ * Resolution is a read mode: nothing is rewritten, the winner is a stored
26
+ * row returned verbatim.
27
+ */
28
+ import type { DatabaseSync } from 'node:sqlite';
29
+ import type * as Row from './row.ts';
30
+ /** One effective policy entry (spec §26.3). */
31
+ export type Entry = {
32
+ /**
33
+ * `source/`-relative path the entry covers by whole-segment prefix:
34
+ * `''` is the root (every source, and rows with no source), `'cli'`,
35
+ * `'agent'`, `'ingest/93a0'`. The most specific match of each
36
+ * dimension applies.
37
+ */
38
+ readonly prefix: string;
39
+ /** Precedence class — higher outranks (spec §26.2). */
40
+ readonly precedence?: number;
41
+ /** Reliability weight `0..1` multiplying stored confidence (spec §26.2). */
42
+ readonly reliability?: number;
43
+ };
44
+ /** A current row scored and ranked inside its resolution group. */
45
+ export type Ranked = Row.t & {
46
+ /** The resolution group key (claim key modulo `src:` contexts and polarity). */
47
+ readonly res_group: string;
48
+ /** Precedence class of the row's sources (spec §26.2). */
49
+ readonly res_class: number;
50
+ /** Reliability-weighted confidence — ranks, never rewrites `conf`. */
51
+ readonly res_conf: number;
52
+ /** 1 = the group's winner. */
53
+ readonly res_rank: number;
54
+ };
55
+ /** A fact more than one series currently speaks about (spec §26.4). */
56
+ export type Contested = {
57
+ /** The resolution group key. */
58
+ readonly group: string;
59
+ /** Candidates ranked by the policy — the winner first. */
60
+ readonly rows: readonly Ranked[];
61
+ };
62
+ /**
63
+ * The built-in default ladder (spec §26.3): human corrections outrank
64
+ * agent writes, which outrank source material (content sources,
65
+ * `connect`, `ingest`, unstamped rows), which outranks derived claims.
66
+ * Overridable by declaring the same subject in-band.
67
+ */
68
+ export declare const builtins: readonly Entry[];
69
+ /**
70
+ * Reads the effective resolution policy (spec §26.3): the built-in ladder
71
+ * merged with current positive in-band `source[/<path>] HAS precedence:`
72
+ * / `HAS reliability:` declarations. When several series declare one
73
+ * (subject, dimension) — different actors, per §9.5 — the contest is
74
+ * resolved under the **built-ins alone**: class of the declaring sources,
75
+ * then confidence, then tx.
76
+ *
77
+ * `currentSql` is the current-belief universe to read declarations from —
78
+ * the caller's, so an as-of query reads the policy as of its boundary
79
+ * (§12.3).
80
+ */
81
+ export declare const readPolicy: (db: DatabaseSync, currentSql: string) => Entry[];
82
+ /**
83
+ * SQL over `currentSql` (a current-belief SELECT, §13.5) scoring and
84
+ * ranking every supported current row inside its resolution group
85
+ * (spec §26.1–§26.2): the row columns plus `res_group`, `res_class`,
86
+ * `res_conf` (reliability-weighted) and `res_rank` (1 = winner).
87
+ *
88
+ * With `aliases`, group keys widen through the alias closure — the
89
+ * caller MUST have an `alias_pair(a, b)` recursive CTE in scope (the
90
+ * §13.6 transitive closure over current positive `ALIAS` edges); entity
91
+ * parts of the key resolve to their closure group's smallest name, for
92
+ * grouping only — returned rows keep their stored spelling.
93
+ */
94
+ export declare const rankedSql: (entries: readonly Entry[], currentSql: string, options?: {
95
+ aliases?: boolean;
96
+ }) => string;
97
+ /**
98
+ * SQL for the resolved universe (spec §26.4): one winner row per
99
+ * resolution group, plain `cave_claim` columns. Same `aliases` contract
100
+ * as {@link rankedSql}.
101
+ */
102
+ export declare const resolvedSql: (entries: readonly Entry[], currentSql: string, options?: {
103
+ aliases?: boolean;
104
+ }) => string;
105
+ //# sourceMappingURL=resolve.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"resolve.d.ts","sourceRoot":"","sources":["../../src/resolve.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;GA0BG;AAEH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,aAAa,CAAA;AAC/C,OAAO,KAAK,KAAK,GAAG,MAAM,UAAU,CAAA;AAEpC,+CAA+C;AAC/C,MAAM,MAAM,KAAK,GAAG;IAClB;;;;;OAKG;IACH,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAA;IACvB,uDAAuD;IACvD,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,CAAA;IAC5B,4EAA4E;IAC5E,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,CAAA;CAC9B,CAAA;AAED,mEAAmE;AACnE,MAAM,MAAM,MAAM,GAAG,GAAG,CAAC,CAAC,GAAG;IAC3B,gFAAgF;IAChF,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAA;IAC1B,0DAA0D;IAC1D,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAA;IAC1B,sEAAsE;IACtE,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAA;IACzB,8BAA8B;IAC9B,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAA;CAC1B,CAAA;AAED,uEAAuE;AACvE,MAAM,MAAM,SAAS,GAAG;IACtB,gCAAgC;IAChC,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAA;IACtB,0DAA0D;IAC1D,QAAQ,CAAC,IAAI,EAAE,SAAS,MAAM,EAAE,CAAA;CACjC,CAAA;AAED;;;;;GAKG;AACH,eAAO,MAAM,QAAQ,EAAE,SAAS,KAAK,EAMpC,CAAA;AA0DD;;;;;;;;;;;GAWG;AACH,eAAO,MAAM,UAAU,GAAI,IAAI,YAAY,EAAE,YAAY,MAAM,KAAG,KAAK,EAwCtE,CAAA;AAaD;;;;;;;;;;;GAWG;AACH,eAAO,MAAM,SAAS,GACpB,SAAS,SAAS,KAAK,EAAE,EACzB,YAAY,MAAM,EAClB,UAAS;IAAE,OAAO,CAAC,EAAE,OAAO,CAAA;CAAO,KAClC,MAsCF,CAAA;AAED;;;;GAIG;AACH,eAAO,MAAM,WAAW,GACtB,SAAS,SAAS,KAAK,EAAE,EACzB,YAAY,MAAM,EAClB,UAAS;IAAE,OAAO,CAAC,EAAE,OAAO,CAAA;CAAO,KAClC,MAC4F,CAAA"}
Binary file
@@ -0,0 +1 @@
1
+ {"version":3,"file":"resolve.js","sourceRoot":"","sources":["../../src/resolve.ts"],"names":[],"mappings":"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"}
@@ -11,11 +11,16 @@
11
11
  * lines via FTS5;
12
12
  * - appends can stamp actor provenance (spec §9.5): pass `source` and every
13
13
  * claim without a `src:` context gets `@src:<actor>` — applied before the
14
- * claim key is computed, so different actors keep separate belief series.
14
+ * claim key is computed, so different actors keep separate belief series;
15
+ * - contradiction resolution (spec §26): coexisting series about one fact
16
+ * resolve to one winner by precedence class, reliability-weighted
17
+ * confidence and tx — `resolvedBeliefs`, `contested`, and the `resolve`
18
+ * traversal opt-in.
15
19
  */
16
20
  import { DatabaseSync } from 'node:sqlite';
17
21
  import { Claim } from '@cavelang/core';
18
22
  import * as Canonical from '@cavelang/canonical';
23
+ import * as Resolve from './resolve.ts';
19
24
  import * as Row from './row.ts';
20
25
  export type IngestResult = {
21
26
  /** ids of inserted claim rows, in document order. */
@@ -59,6 +64,14 @@ export type TraverseOptions = {
59
64
  * Union-of-rows: matching widens, returned rows keep their stored names.
60
65
  */
61
66
  readonly aliases?: boolean;
67
+ /**
68
+ * Traverse resolved winners only (spec §26, default `false`): when
69
+ * several series assert one fact — actor stamps, content sources,
70
+ * polarity — the resolution policy picks one and the rest are
71
+ * invisible. Composes with `aliases`, which widens resolution groups
72
+ * through the closure.
73
+ */
74
+ readonly resolve?: boolean;
62
75
  };
63
76
  export type Store = ReturnType<typeof open>;
64
77
  /**
@@ -107,6 +120,32 @@ export declare const open: (path?: string, options?: {
107
120
  currentBelief(claimKey: string): undefined | Row.t;
108
121
  /** Full belief series of one claim key, oldest first (spec §9.1). */
109
122
  history(claimKey: string): Row.t[];
123
+ /**
124
+ * The effective resolution policy (spec §26.3): the built-in ladder
125
+ * merged with current in-band `source[/<path>] HAS precedence:` /
126
+ * `HAS reliability:` declarations, sorted by prefix.
127
+ */
128
+ resolutionPolicy(): Resolve.Entry[];
129
+ /**
130
+ * Resolved current beliefs (spec §26): one winner per resolution
131
+ * group — coexisting series about one fact (actor stamps, content
132
+ * sources, polarity) collapse to the row the policy picks; the rest
133
+ * are invisible. Oldest first, rows returned verbatim. With
134
+ * `aliases`, groups widen through the alias closure (spec §26.1).
135
+ */
136
+ resolvedBeliefs(options_?: {
137
+ aliases?: boolean;
138
+ }): Row.t[];
139
+ /**
140
+ * Contested facts (spec §26.4): resolution groups where more than one
141
+ * candidate currently speaks, each candidate scored (`res_class`,
142
+ * `res_conf`) and ranked — the winner first. The feed for fusion
143
+ * (§10.1 combines a contested group's numeric estimates instead of
144
+ * picking) and for the `cave resolve` view.
145
+ */
146
+ contested(options_?: {
147
+ aliases?: boolean;
148
+ }): Resolve.Contested[];
110
149
  /**
111
150
  * The alias closure of an entity (spec §13.6): the entity itself plus
112
151
  * every name reachable through current positive `ALIAS` claims, read as
@@ -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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"}
package/dist/src/store.js CHANGED
@@ -11,11 +11,16 @@
11
11
  * lines via FTS5;
12
12
  * - appends can stamp actor provenance (spec §9.5): pass `source` and every
13
13
  * claim without a `src:` context gets `@src:<actor>` — applied before the
14
- * claim key is computed, so different actors keep separate belief series.
14
+ * claim key is computed, so different actors keep separate belief series;
15
+ * - contradiction resolution (spec §26): coexisting series about one fact
16
+ * resolve to one winner by precedence class, reliability-weighted
17
+ * confidence and tx — `resolvedBeliefs`, `contested`, and the `resolve`
18
+ * traversal opt-in.
15
19
  */
16
20
  import { DatabaseSync } from 'node:sqlite';
17
21
  import { Claim, Context, Key, Uuidv7, Verb } from '@cavelang/core';
18
22
  import * as Canonical from '@cavelang/canonical';
23
+ import * as Resolve from "./resolve.js";
19
24
  import * as Row from "./row.js";
20
25
  import * as Schema from "./schema.js";
21
26
  const currentSql = `
@@ -26,24 +31,40 @@ JOIN (
26
31
  ) latest ON c.claim_key = latest.claim_key AND c.tx = latest.max_tx
27
32
  `;
28
33
  /**
29
- * Alias closure (spec §13.6): current positive `ALIAS` claims as undirected
30
- * edges (`ALIAS` has no `REVERSE`, so each written direction is its own
31
- * claim key — both assert the same link), walked recursively from a seed
32
- * entity. Retraction unmerges: `a ALIAS b @ 0%` drops that direction's edge.
33
- * The seed is the query's single positional parameter.
34
+ * Alias edges (spec §13.6): current positive `ALIAS` claims read as
35
+ * undirected (`ALIAS` has no `REVERSE`, so each written direction is its
36
+ * own claim key — both assert the same link). Retraction unmerges:
37
+ * `a ALIAS b @ 0%` drops that direction's edge.
34
38
  */
35
- const aliasClosureSql = `
36
- WITH RECURSIVE alias_edge(a, b) AS (
39
+ const aliasEdgeSql = `alias_edge(a, b) AS (
37
40
  SELECT c.subject, c.object FROM (${currentSql}) c
38
41
  WHERE c.verb = 'ALIAS' AND c.negated = 0 AND c.conf > 0 AND c.object IS NOT NULL
39
42
  UNION
40
43
  SELECT c.object, c.subject FROM (${currentSql}) c
41
44
  WHERE c.verb = 'ALIAS' AND c.negated = 0 AND c.conf > 0 AND c.object IS NOT NULL
42
- ), alias_closure(name) AS (
45
+ )`;
46
+ /**
47
+ * The closure walked from a seed entity — the seed is the query's first
48
+ * positional parameter. Requires `alias_edge` in scope.
49
+ */
50
+ const aliasSeedSql = `alias_closure(name) AS (
43
51
  SELECT ?
44
52
  UNION
45
53
  SELECT e.b FROM alias_closure s JOIN alias_edge e ON e.a = s.name
46
- )
54
+ )`;
55
+ /**
56
+ * The full transitive closure as ordered pairs — every two names currently
57
+ * believed to denote one entity. Resolution grouping widens through it
58
+ * (spec §26.1). Requires `alias_edge` in scope.
59
+ */
60
+ const aliasPairSql = `alias_pair(a, b) AS (
61
+ SELECT a, b FROM alias_edge
62
+ UNION
63
+ SELECT p.a, e.b FROM alias_pair p JOIN alias_edge e ON e.a = p.b
64
+ )`;
65
+ /** Seeded alias closure (spec §13.6), ready to prefix a SELECT. */
66
+ const aliasClosureSql = `
67
+ WITH RECURSIVE ${aliasEdgeSql}, ${aliasSeedSql}
47
68
  `;
48
69
  /** Stamps `@src:<source>` on a claim without a source context (spec §9.5). */
49
70
  const stampSource = (claim, source) => source === undefined || Context.hasSource(claim.contexts) ?
@@ -176,7 +197,20 @@ export const open = (path = ':memory:', options = {}) => {
176
197
  * must be prepended when `aliases` is set).
177
198
  */
178
199
  const entityMatch = (column, options) => options.aliases === true ? `${column} IN (SELECT name FROM alias_closure)` : `${column} = ?`;
179
- const withAliases = (options) => options.aliases === true ? aliasClosureSql : '';
200
+ const withAliases = (options) => options.aliases === true ?
201
+ // Resolution grouping needs the pair closure too (spec §26.1).
202
+ (options.resolve === true ?
203
+ `\nWITH RECURSIVE ${aliasEdgeSql}, ${aliasPairSql}, ${aliasSeedSql}\n` :
204
+ aliasClosureSql) :
205
+ '';
206
+ const readPolicy = () => Resolve.readPolicy(db, currentSql);
207
+ /**
208
+ * Row universe of a traversal: current beliefs, or the §26 resolved
209
+ * winners among them when `resolve` is set.
210
+ */
211
+ const universe = (options) => options.resolve === true ?
212
+ Resolve.resolvedSql(readPolicy(), currentSql, { aliases: options.aliases === true }) :
213
+ currentSql;
180
214
  return {
181
215
  /** Raw database handle — used by `@cavelang/query`; treat as read-only. */
182
216
  db,
@@ -220,6 +254,49 @@ export const open = (path = ':memory:', options = {}) => {
220
254
  history(claimKey) {
221
255
  return rows('SELECT * FROM cave_claim WHERE claim_key = ? ORDER BY tx', claimKey);
222
256
  },
257
+ /**
258
+ * The effective resolution policy (spec §26.3): the built-in ladder
259
+ * merged with current in-band `source[/<path>] HAS precedence:` /
260
+ * `HAS reliability:` declarations, sorted by prefix.
261
+ */
262
+ resolutionPolicy() {
263
+ return readPolicy();
264
+ },
265
+ /**
266
+ * Resolved current beliefs (spec §26): one winner per resolution
267
+ * group — coexisting series about one fact (actor stamps, content
268
+ * sources, polarity) collapse to the row the policy picks; the rest
269
+ * are invisible. Oldest first, rows returned verbatim. With
270
+ * `aliases`, groups widen through the alias closure (spec §26.1).
271
+ */
272
+ resolvedBeliefs(options_ = {}) {
273
+ const aliases = options_.aliases === true;
274
+ const prefix = aliases ? `WITH RECURSIVE ${aliasEdgeSql}, ${aliasPairSql}\n` : '';
275
+ return rows(`${prefix}SELECT * FROM (${Resolve.resolvedSql(readPolicy(), currentSql, { aliases })}) ORDER BY tx`);
276
+ },
277
+ /**
278
+ * Contested facts (spec §26.4): resolution groups where more than one
279
+ * candidate currently speaks, each candidate scored (`res_class`,
280
+ * `res_conf`) and ranked — the winner first. The feed for fusion
281
+ * (§10.1 combines a contested group's numeric estimates instead of
282
+ * picking) and for the `cave resolve` view.
283
+ */
284
+ contested(options_ = {}) {
285
+ const aliases = options_.aliases === true;
286
+ const prefix = aliases ? `WITH RECURSIVE ${aliasEdgeSql}, ${aliasPairSql}\n` : '';
287
+ const ranked = rows(`${prefix}SELECT * FROM (${Resolve.rankedSql(readPolicy(), currentSql, { aliases })}) ORDER BY res_group, res_rank`);
288
+ const groups = [];
289
+ for (const row of ranked) {
290
+ const last = groups[groups.length - 1];
291
+ if (last !== undefined && last.group === row.res_group) {
292
+ last.rows.push(row);
293
+ }
294
+ else {
295
+ groups.push({ group: row.res_group, rows: [row] });
296
+ }
297
+ }
298
+ return groups.filter(group => group.rows.length > 1);
299
+ },
223
300
  /**
224
301
  * The alias closure of an entity (spec §13.6): the entity itself plus
225
302
  * every name reachable through current positive `ALIAS` claims, read as
@@ -241,7 +318,7 @@ export const open = (path = ':memory:', options = {}) => {
241
318
  },
242
319
  /** Forward reads: current relational facts with `entity` as subject (spec §13.3). */
243
320
  forward(entity, options_ = {}) {
244
- return rows(`${withAliases(options_)} SELECT * FROM (${currentSql}) WHERE ${entityMatch('subject', options_)} AND object IS NOT NULL${traversalFilter(options_)} ORDER BY tx`, entity).map(row => ({ verb: row.verb, target: row.object, row }));
321
+ return rows(`${withAliases(options_)} SELECT * FROM (${universe(options_)}) WHERE ${entityMatch('subject', options_)} AND object IS NOT NULL${traversalFilter(options_)} ORDER BY tx`, entity).map(row => ({ verb: row.verb, target: row.object, row }));
245
322
  },
246
323
  /**
247
324
  * Inverse reads (spec §13.3): current relational facts
@@ -249,7 +326,7 @@ export const open = (path = ':memory:', options = {}) => {
249
326
  * when one is declared.
250
327
  */
251
328
  reverse(entity, options_ = {}) {
252
- return rows(`${withAliases(options_)} SELECT * FROM (${currentSql}) WHERE ${entityMatch('object', options_)} AND object IS NOT NULL${traversalFilter(options_)} ORDER BY tx`, entity).map(row => {
329
+ return rows(`${withAliases(options_)} SELECT * FROM (${universe(options_)}) WHERE ${entityMatch('object', options_)} AND object IS NOT NULL${traversalFilter(options_)} ORDER BY tx`, entity).map(row => {
253
330
  const rel = Canonical.Registry.inverseOf(registry, row.verb);
254
331
  return { verb: row.verb, ...rel === undefined ? {} : { rel }, source: row.subject, row };
255
332
  });
@@ -272,11 +349,11 @@ export const open = (path = ':memory:', options = {}) => {
272
349
  },
273
350
  /** Members of a topic — forward `CONTAINS` traversal (spec §11.2). */
274
351
  topicMembers(topic, options_ = {}) {
275
- return rows(`${withAliases(options_)} SELECT * FROM (${currentSql}) WHERE ${entityMatch('subject', options_)} AND verb = 'CONTAINS' AND object IS NOT NULL${traversalFilter(options_)} ORDER BY tx`, topic).map(row => row.object);
352
+ return rows(`${withAliases(options_)} SELECT * FROM (${universe(options_)}) WHERE ${entityMatch('subject', options_)} AND verb = 'CONTAINS' AND object IS NOT NULL${traversalFilter(options_)} ORDER BY tx`, topic).map(row => row.object);
276
353
  },
277
354
  /** Topics containing an entity — the inverse `CONTAINS` read (spec §11.2). */
278
355
  topicsOf(entity, options_ = {}) {
279
- return rows(`${withAliases(options_)} SELECT * FROM (${currentSql}) WHERE ${entityMatch('object', options_)} AND verb = 'CONTAINS'${traversalFilter(options_)} ORDER BY tx`, entity).map(row => row.subject);
356
+ return rows(`${withAliases(options_)} SELECT * FROM (${universe(options_)}) WHERE ${entityMatch('object', options_)} AND verb = 'CONTAINS'${traversalFilter(options_)} ORDER BY tx`, entity).map(row => row.subject);
280
357
  },
281
358
  /**
282
359
  * Full-text search, newest first. The query is treated as a literal
@@ -1 +1 @@
1
- {"version":3,"file":"store.js","sourceRoot":"","sources":["../../src/store.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"store.js","sourceRoot":"","sources":["../../src/store.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@cavelang/store",
3
- "version": "0.15.0",
3
+ "version": "0.17.0",
4
4
  "type": "module",
5
5
  "description": "CAVE persistence on node:sqlite — §13 storage model, append-only belief series, inverse-aware reads.",
6
6
  "license": "CC0-1.0",
@@ -32,8 +32,8 @@
32
32
  "access": "public"
33
33
  },
34
34
  "dependencies": {
35
- "@cavelang/core": "0.15.0",
36
- "@cavelang/canonical": "0.15.0"
35
+ "@cavelang/canonical": "0.17.0",
36
+ "@cavelang/core": "0.17.0"
37
37
  },
38
38
  "scripts": {
39
39
  "build": "tsc -b",
package/src/index.ts CHANGED
@@ -12,6 +12,7 @@
12
12
  * ```
13
13
  */
14
14
 
15
+ export * as Resolve from './resolve.ts'
15
16
  export * as Row from './row.ts'
16
17
  export * as Schema from './schema.ts'
17
18
  export { defaultDbPath, open } from './store.ts'
package/src/resolve.ts ADDED
Binary file
package/src/store.ts CHANGED
@@ -11,12 +11,17 @@
11
11
  * lines via FTS5;
12
12
  * - appends can stamp actor provenance (spec §9.5): pass `source` and every
13
13
  * claim without a `src:` context gets `@src:<actor>` — applied before the
14
- * claim key is computed, so different actors keep separate belief series.
14
+ * claim key is computed, so different actors keep separate belief series;
15
+ * - contradiction resolution (spec §26): coexisting series about one fact
16
+ * resolve to one winner by precedence class, reliability-weighted
17
+ * confidence and tx — `resolvedBeliefs`, `contested`, and the `resolve`
18
+ * traversal opt-in.
15
19
  */
16
20
 
17
21
  import { DatabaseSync } from 'node:sqlite'
18
22
  import { Claim, Context, Key, Uuidv7, Verb } from '@cavelang/core'
19
23
  import * as Canonical from '@cavelang/canonical'
24
+ import * as Resolve from './resolve.ts'
20
25
  import * as Row from './row.ts'
21
26
  import * as Schema from './schema.ts'
22
27
 
@@ -29,24 +34,43 @@ JOIN (
29
34
  `
30
35
 
31
36
  /**
32
- * Alias closure (spec §13.6): current positive `ALIAS` claims as undirected
33
- * edges (`ALIAS` has no `REVERSE`, so each written direction is its own
34
- * claim key — both assert the same link), walked recursively from a seed
35
- * entity. Retraction unmerges: `a ALIAS b @ 0%` drops that direction's edge.
36
- * The seed is the query's single positional parameter.
37
+ * Alias edges (spec §13.6): current positive `ALIAS` claims read as
38
+ * undirected (`ALIAS` has no `REVERSE`, so each written direction is its
39
+ * own claim key — both assert the same link). Retraction unmerges:
40
+ * `a ALIAS b @ 0%` drops that direction's edge.
37
41
  */
38
- const aliasClosureSql = `
39
- WITH RECURSIVE alias_edge(a, b) AS (
42
+ const aliasEdgeSql = `alias_edge(a, b) AS (
40
43
  SELECT c.subject, c.object FROM (${currentSql}) c
41
44
  WHERE c.verb = 'ALIAS' AND c.negated = 0 AND c.conf > 0 AND c.object IS NOT NULL
42
45
  UNION
43
46
  SELECT c.object, c.subject FROM (${currentSql}) c
44
47
  WHERE c.verb = 'ALIAS' AND c.negated = 0 AND c.conf > 0 AND c.object IS NOT NULL
45
- ), alias_closure(name) AS (
48
+ )`
49
+
50
+ /**
51
+ * The closure walked from a seed entity — the seed is the query's first
52
+ * positional parameter. Requires `alias_edge` in scope.
53
+ */
54
+ const aliasSeedSql = `alias_closure(name) AS (
46
55
  SELECT ?
47
56
  UNION
48
57
  SELECT e.b FROM alias_closure s JOIN alias_edge e ON e.a = s.name
49
- )
58
+ )`
59
+
60
+ /**
61
+ * The full transitive closure as ordered pairs — every two names currently
62
+ * believed to denote one entity. Resolution grouping widens through it
63
+ * (spec §26.1). Requires `alias_edge` in scope.
64
+ */
65
+ const aliasPairSql = `alias_pair(a, b) AS (
66
+ SELECT a, b FROM alias_edge
67
+ UNION
68
+ SELECT p.a, e.b FROM alias_pair p JOIN alias_edge e ON e.a = p.b
69
+ )`
70
+
71
+ /** Seeded alias closure (spec §13.6), ready to prefix a SELECT. */
72
+ const aliasClosureSql = `
73
+ WITH RECURSIVE ${aliasEdgeSql}, ${aliasSeedSql}
50
74
  `
51
75
 
52
76
  export type IngestResult = {
@@ -101,6 +125,14 @@ export type TraverseOptions = {
101
125
  * Union-of-rows: matching widens, returned rows keep their stored names.
102
126
  */
103
127
  readonly aliases?: boolean
128
+ /**
129
+ * Traverse resolved winners only (spec §26, default `false`): when
130
+ * several series assert one fact — actor stamps, content sources,
131
+ * polarity — the resolution policy picks one and the rest are
132
+ * invisible. Composes with `aliases`, which widens resolution groups
133
+ * through the closure.
134
+ */
135
+ readonly resolve?: boolean
104
136
  }
105
137
 
106
138
  export type Store = ReturnType<typeof open>
@@ -262,7 +294,24 @@ export const open = (path: string = ':memory:', options: { registry?: Canonical.
262
294
  options.aliases === true ? `${column} IN (SELECT name FROM alias_closure)` : `${column} = ?`
263
295
 
264
296
  const withAliases = (options: TraverseOptions): string =>
265
- options.aliases === true ? aliasClosureSql : ''
297
+ options.aliases === true ?
298
+ // Resolution grouping needs the pair closure too (spec §26.1).
299
+ (options.resolve === true ?
300
+ `\nWITH RECURSIVE ${aliasEdgeSql}, ${aliasPairSql}, ${aliasSeedSql}\n` :
301
+ aliasClosureSql) :
302
+ ''
303
+
304
+ const readPolicy = (): Resolve.Entry[] =>
305
+ Resolve.readPolicy(db, currentSql)
306
+
307
+ /**
308
+ * Row universe of a traversal: current beliefs, or the §26 resolved
309
+ * winners among them when `resolve` is set.
310
+ */
311
+ const universe = (options: TraverseOptions): string =>
312
+ options.resolve === true ?
313
+ Resolve.resolvedSql(readPolicy(), currentSql, { aliases: options.aliases === true }) :
314
+ currentSql
266
315
 
267
316
  return {
268
317
  /** Raw database handle — used by `@cavelang/query`; treat as read-only. */
@@ -317,6 +366,53 @@ export const open = (path: string = ':memory:', options: { registry?: Canonical.
317
366
  return rows('SELECT * FROM cave_claim WHERE claim_key = ? ORDER BY tx', claimKey)
318
367
  },
319
368
 
369
+ /**
370
+ * The effective resolution policy (spec §26.3): the built-in ladder
371
+ * merged with current in-band `source[/<path>] HAS precedence:` /
372
+ * `HAS reliability:` declarations, sorted by prefix.
373
+ */
374
+ resolutionPolicy(): Resolve.Entry[] {
375
+ return readPolicy()
376
+ },
377
+
378
+ /**
379
+ * Resolved current beliefs (spec §26): one winner per resolution
380
+ * group — coexisting series about one fact (actor stamps, content
381
+ * sources, polarity) collapse to the row the policy picks; the rest
382
+ * are invisible. Oldest first, rows returned verbatim. With
383
+ * `aliases`, groups widen through the alias closure (spec §26.1).
384
+ */
385
+ resolvedBeliefs(options_: { aliases?: boolean } = {}): Row.t[] {
386
+ const aliases = options_.aliases === true
387
+ const prefix = aliases ? `WITH RECURSIVE ${aliasEdgeSql}, ${aliasPairSql}\n` : ''
388
+ return rows(`${prefix}SELECT * FROM (${Resolve.resolvedSql(readPolicy(), currentSql, { aliases })}) ORDER BY tx`)
389
+ },
390
+
391
+ /**
392
+ * Contested facts (spec §26.4): resolution groups where more than one
393
+ * candidate currently speaks, each candidate scored (`res_class`,
394
+ * `res_conf`) and ranked — the winner first. The feed for fusion
395
+ * (§10.1 combines a contested group's numeric estimates instead of
396
+ * picking) and for the `cave resolve` view.
397
+ */
398
+ contested(options_: { aliases?: boolean } = {}): Resolve.Contested[] {
399
+ const aliases = options_.aliases === true
400
+ const prefix = aliases ? `WITH RECURSIVE ${aliasEdgeSql}, ${aliasPairSql}\n` : ''
401
+ const ranked = rows(
402
+ `${prefix}SELECT * FROM (${Resolve.rankedSql(readPolicy(), currentSql, { aliases })}) ORDER BY res_group, res_rank`
403
+ ) as Resolve.Ranked[]
404
+ const groups: { group: string, rows: Resolve.Ranked[] }[] = []
405
+ for (const row of ranked) {
406
+ const last = groups[groups.length - 1]
407
+ if (last !== undefined && last.group === row.res_group) {
408
+ last.rows.push(row)
409
+ } else {
410
+ groups.push({ group: row.res_group, rows: [row] })
411
+ }
412
+ }
413
+ return groups.filter(group => group.rows.length > 1)
414
+ },
415
+
320
416
  /**
321
417
  * The alias closure of an entity (spec §13.6): the entity itself plus
322
418
  * every name reachable through current positive `ALIAS` claims, read as
@@ -344,7 +440,7 @@ export const open = (path: string = ':memory:', options: { registry?: Canonical.
344
440
  /** Forward reads: current relational facts with `entity` as subject (spec §13.3). */
345
441
  forward(entity: string, options_: TraverseOptions = {}): ForwardFact[] {
346
442
  return rows(
347
- `${withAliases(options_)} SELECT * FROM (${currentSql}) WHERE ${entityMatch('subject', options_)} AND object IS NOT NULL${traversalFilter(options_)} ORDER BY tx`,
443
+ `${withAliases(options_)} SELECT * FROM (${universe(options_)}) WHERE ${entityMatch('subject', options_)} AND object IS NOT NULL${traversalFilter(options_)} ORDER BY tx`,
348
444
  entity
349
445
  ).map(row => ({ verb: row.verb, target: row.object!, row }))
350
446
  },
@@ -356,7 +452,7 @@ export const open = (path: string = ':memory:', options: { registry?: Canonical.
356
452
  */
357
453
  reverse(entity: string, options_: TraverseOptions = {}): ReverseFact[] {
358
454
  return rows(
359
- `${withAliases(options_)} SELECT * FROM (${currentSql}) WHERE ${entityMatch('object', options_)} AND object IS NOT NULL${traversalFilter(options_)} ORDER BY tx`,
455
+ `${withAliases(options_)} SELECT * FROM (${universe(options_)}) WHERE ${entityMatch('object', options_)} AND object IS NOT NULL${traversalFilter(options_)} ORDER BY tx`,
360
456
  entity
361
457
  ).map(row => {
362
458
  const rel = Canonical.Registry.inverseOf(registry, row.verb)
@@ -385,7 +481,7 @@ export const open = (path: string = ':memory:', options: { registry?: Canonical.
385
481
  /** Members of a topic — forward `CONTAINS` traversal (spec §11.2). */
386
482
  topicMembers(topic: string, options_: TraverseOptions = {}): string[] {
387
483
  return rows(
388
- `${withAliases(options_)} SELECT * FROM (${currentSql}) WHERE ${entityMatch('subject', options_)} AND verb = 'CONTAINS' AND object IS NOT NULL${traversalFilter(options_)} ORDER BY tx`,
484
+ `${withAliases(options_)} SELECT * FROM (${universe(options_)}) WHERE ${entityMatch('subject', options_)} AND verb = 'CONTAINS' AND object IS NOT NULL${traversalFilter(options_)} ORDER BY tx`,
389
485
  topic
390
486
  ).map(row => row.object!)
391
487
  },
@@ -393,7 +489,7 @@ export const open = (path: string = ':memory:', options: { registry?: Canonical.
393
489
  /** Topics containing an entity — the inverse `CONTAINS` read (spec §11.2). */
394
490
  topicsOf(entity: string, options_: TraverseOptions = {}): string[] {
395
491
  return rows(
396
- `${withAliases(options_)} SELECT * FROM (${currentSql}) WHERE ${entityMatch('object', options_)} AND verb = 'CONTAINS'${traversalFilter(options_)} ORDER BY tx`,
492
+ `${withAliases(options_)} SELECT * FROM (${universe(options_)}) WHERE ${entityMatch('object', options_)} AND verb = 'CONTAINS'${traversalFilter(options_)} ORDER BY tx`,
397
493
  entity
398
494
  ).map(row => row.subject)
399
495
  },