@cavelang/store 0.14.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 +22 -3
- package/dist/src/index.d.ts +1 -0
- package/dist/src/index.d.ts.map +1 -1
- package/dist/src/index.js +1 -0
- package/dist/src/index.js.map +1 -1
- package/dist/src/resolve.d.ts +105 -0
- package/dist/src/resolve.d.ts.map +1 -0
- package/dist/src/resolve.js +0 -0
- package/dist/src/resolve.js.map +1 -0
- package/dist/src/store.d.ts +40 -1
- package/dist/src/store.d.ts.map +1 -1
- package/dist/src/store.js +92 -15
- package/dist/src/store.js.map +1 -1
- package/package.json +3 -3
- package/src/index.ts +1 -0
- package/src/resolve.ts +0 -0
- package/src/store.ts +111 -15
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 §
|
|
108
|
-
|
|
109
|
-
|
|
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.
|
package/dist/src/index.d.ts
CHANGED
package/dist/src/index.d.ts.map
CHANGED
|
@@ -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
package/dist/src/index.js.map
CHANGED
|
@@ -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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"}
|
package/dist/src/store.d.ts
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 } 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
|
package/dist/src/store.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"store.d.ts","sourceRoot":"","sources":["../../src/store.ts"],"names":[],"mappings":"AAAA
|
|
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
|
|
30
|
-
*
|
|
31
|
-
* claim key — both assert the same link)
|
|
32
|
-
*
|
|
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
|
|
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
|
-
)
|
|
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 ?
|
|
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 (${
|
|
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 (${
|
|
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 (${
|
|
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 (${
|
|
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
|
package/dist/src/store.js.map
CHANGED
|
@@ -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.
|
|
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/
|
|
36
|
-
"@cavelang/
|
|
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
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
|
|
33
|
-
*
|
|
34
|
-
* claim key — both assert the same link)
|
|
35
|
-
*
|
|
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
|
|
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
|
-
)
|
|
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 ?
|
|
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 (${
|
|
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 (${
|
|
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 (${
|
|
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 (${
|
|
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
|
},
|