@mneme-ai/core 2.87.0 → 2.89.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.
@@ -0,0 +1,315 @@
1
+ /**
2
+ * v2.89.0 — 💎 THE AXIOM LATTICE · ALETHEIA's living proof graph.
3
+ *
4
+ * The savant doesn't just answer one claim and forget it (that was v2.88). A real
5
+ * savant — Padgett "sees frames connected by lines", never forgets, and CANNOT
6
+ * hold two opposing truths. The Axiom Lattice is that faculty made real: a
7
+ * persistent, hash-chained, Ed25519-signed graph of every assertion ALETHEIA has
8
+ * made — offline-verifiable, tamper-evident, self-correcting.
9
+ *
10
+ * It realises three savant axes + two vows at once:
11
+ * • Graph perception — claims are nodes; lineage + dependency are edges.
12
+ * • Anti-abstraction — lossless: the exact claim + verdict + proof, never summarised away.
13
+ * • Proof, not belief — `whyTrue` walks the lineage back to bedrock (deterministic) sensors.
14
+ * • Never Forget — append-only, hash-chained, signed; retrievable forever.
15
+ * • Trust Nothing — `verifyLattice` re-verifies every node + the chain, OFFLINE.
16
+ *
17
+ * Two superhuman behaviours no LLM can do structurally:
18
+ * 1. CONTRADICTION DETECTION — recording a claim that opposes an existing TRUE
19
+ * surfaces the conflict as the LOUDEST signal (the savant can't hold both).
20
+ * 2. RETRACTION CASCADE (truth-maintenance) — when a claim is refuted, every
21
+ * claim that DEPENDED on it is automatically marked PENDING_REVERIFY + a
22
+ * signed retraction frame is written. Change one fact → the multiverse knows.
23
+ *
24
+ * Built on NOTARY (signing/chain) — no new crypto. Never throws.
25
+ */
26
+ import { existsSync, mkdirSync, readFileSync, appendFileSync, writeFileSync } from "node:fs";
27
+ import { join } from "node:path";
28
+ import { createHash } from "node:crypto";
29
+ import { issueReceipt, verifyReceipt } from "../notary/index.js";
30
+ const NEG_RE = /\b(not|isn't|aren't|never|no longer|doesn't|don't|won't|cannot|can't)\b|ไม่ใช่|ไม่ได้|ไม่/i;
31
+ const STOP = new Set(["the", "a", "an", "is", "are", "was", "were", "be", "been", "of", "to", "in", "on", "at", "by", "for", "with", "and", "or", "it", "this", "that", "=", "==", "equals", "เป็น", "คือ", "ที่", "ใน"]);
32
+ /** Normalise a claim's SUBJECT: lowercase, strip negation + values + stopwords,
33
+ * token-sort. Two claims about the same thing collapse to the same key, so a
34
+ * contradiction (same subject, opposing verdict/value) becomes detectable. */
35
+ export function normalizeSubject(claim) {
36
+ const c = String(claim ?? "").toLowerCase();
37
+ const head = c.split(/\s*(?:=|==|\bis\b|\bare\b|\bequals\b|\bคือ\b|\bเป็น\b)\s*/)[0] ?? c;
38
+ const tokens = head
39
+ .replace(NEG_RE, " ")
40
+ .replace(/[^\p{L}\p{N}\s._-]/gu, " ")
41
+ .split(/\s+/)
42
+ .map((t) => t.trim())
43
+ .filter((t) => t.length > 0 && !STOP.has(t));
44
+ return [...new Set(tokens)].sort().join(" ");
45
+ }
46
+ /** Extract the VALUE side of a "subject <copula> value" claim (for value-conflict). */
47
+ function extractValue(claim) {
48
+ const m = /(?:=|==|\bis\b|\bare\b|\bequals\b|\bคือ\b|\bเป็น\b)\s*(.+)$/i.exec(String(claim ?? ""));
49
+ if (!m)
50
+ return null;
51
+ return m[1].trim().toLowerCase().replace(/[.;]+$/, "");
52
+ }
53
+ function hasNegation(claim) {
54
+ return NEG_RE.test(String(claim ?? ""));
55
+ }
56
+ function latticeDir(repoRoot) { return join(repoRoot, ".mneme", "aletheia"); }
57
+ function latticePath(repoRoot) { return join(latticeDir(repoRoot), "lattice.jsonl"); }
58
+ /** Read every lattice node. Never throws — a corrupt line is skipped. */
59
+ export function readLattice(repoRoot) {
60
+ try {
61
+ const p = latticePath(repoRoot);
62
+ if (!existsSync(p))
63
+ return [];
64
+ const out = [];
65
+ for (const line of readFileSync(p, "utf8").split("\n")) {
66
+ const s = line.trim();
67
+ if (!s)
68
+ continue;
69
+ try {
70
+ out.push(JSON.parse(s));
71
+ }
72
+ catch { /* skip corrupt */ }
73
+ }
74
+ return out;
75
+ }
76
+ catch {
77
+ return [];
78
+ }
79
+ }
80
+ function writeAll(repoRoot, nodes) {
81
+ mkdirSync(latticeDir(repoRoot), { recursive: true });
82
+ writeFileSync(latticePath(repoRoot), nodes.map((n) => JSON.stringify(n)).join("\n") + (nodes.length ? "\n" : ""), "utf8");
83
+ }
84
+ /**
85
+ * Detect contradictions between an incoming (claim, verdict) and the ACTIVE
86
+ * nodes already in the lattice. Three modes, strongest first. Never throws.
87
+ */
88
+ export function detectContradictions(repoRoot, claim, verdict) {
89
+ const out = [];
90
+ if (verdict === "UNKNOWN")
91
+ return out; // UNKNOWN asserts nothing → can't contradict
92
+ const subj = normalizeSubject(claim);
93
+ if (!subj)
94
+ return out;
95
+ const incNeg = hasNegation(claim);
96
+ const incVal = extractValue(claim);
97
+ for (const n of readLattice(repoRoot)) {
98
+ if (n.status !== "ACTIVE" || n.verdict === "UNKNOWN")
99
+ continue;
100
+ if (n.subject !== subj)
101
+ continue;
102
+ // (1) opposite-verdict on the same subject: one TRUE, one FALSE.
103
+ if (n.verdict !== verdict) {
104
+ out.push({ kind: "opposite-verdict", existing: n.id, incoming: claim, detail: `"${n.claim}" is ${n.verdict} but "${claim}" is ${verdict}` });
105
+ continue;
106
+ }
107
+ // Both assert the SAME polarity (e.g. both TRUE) on the same subject — look for
108
+ // a semantic conflict that two co-true claims cannot both hold.
109
+ if (verdict === "TRUE") {
110
+ // (2) negation-pair: one says X, the other says NOT X — both can't be true.
111
+ if (incNeg !== hasNegation(n.claim)) {
112
+ out.push({ kind: "negation-pair", existing: n.id, incoming: claim, detail: `"${n.claim}" and "${claim}" assert opposite polarity of the same subject` });
113
+ continue;
114
+ }
115
+ // (3) value-conflict: same subject "= value", different values — both can't be true.
116
+ const exVal = extractValue(n.claim);
117
+ if (incVal && exVal && incVal !== exVal) {
118
+ out.push({ kind: "value-conflict", existing: n.id, incoming: claim, detail: `subject resolves to "${exVal}" and "${incVal}" — mutually exclusive` });
119
+ }
120
+ }
121
+ }
122
+ return out;
123
+ }
124
+ /**
125
+ * Append a signed, hash-chained node to the lattice. Detects contradictions vs
126
+ * the existing ACTIVE truths FIRST (the loudest signal) and returns them.
127
+ * Lossless (Refusal 2). Never throws — degrades to an unsigned node if NOTARY fails.
128
+ */
129
+ export function recordAssertion(repoRoot, input, opts = {}) {
130
+ const claim = String(input.claim ?? "");
131
+ const verdict = input.verdict;
132
+ const contradictions = detectContradictions(repoRoot, claim, verdict);
133
+ const existing = readLattice(repoRoot);
134
+ const seq = existing.length;
135
+ const last = existing[existing.length - 1];
136
+ const prev = last ? (last.receipt?.receiptId ?? last.id) : null;
137
+ const id = createHash("sha256").update(`${seq}|${claim}|${verdict}`).digest("hex").slice(0, 16);
138
+ const at = opts.now ?? opts.issuedAt ?? Date.now();
139
+ let receipt = null;
140
+ try {
141
+ receipt = issueReceipt(repoRoot, {
142
+ kind: "claim-verdict",
143
+ subject: id,
144
+ payload: { engine: "aletheia-lattice", seq, claim, verdict, pTrue: input.pTrue, dependsOn: opts.dependsOn ?? [] },
145
+ prev,
146
+ issuedAt: opts.issuedAt ?? at,
147
+ });
148
+ }
149
+ catch {
150
+ receipt = null;
151
+ }
152
+ const node = {
153
+ id, seq, claim, subject: normalizeSubject(claim), verdict, pTrue: input.pTrue,
154
+ lineageSummary: input.lineageSummary ?? [], dependsOn: opts.dependsOn ?? [],
155
+ status: "ACTIVE", at, prev, receipt,
156
+ };
157
+ try {
158
+ mkdirSync(latticeDir(repoRoot), { recursive: true });
159
+ appendFileSync(latticePath(repoRoot), JSON.stringify(node) + "\n", "utf8");
160
+ }
161
+ catch { /* best-effort persistence */ }
162
+ return { node, contradictions };
163
+ }
164
+ /** Walk the proof of a claim: its lineage (sensors) + its dependency nodes, back
165
+ * toward bedrock (deterministic sensors like `arithmetic` are axioms). Never throws. */
166
+ export function whyTrue(repoRoot, claimOrId) {
167
+ const nodes = readLattice(repoRoot);
168
+ const byId = new Map(nodes.map((n) => [n.id, n]));
169
+ const target = byId.get(claimOrId) ?? [...nodes].reverse().find((n) => n.claim === claimOrId);
170
+ if (!target)
171
+ return { found: false, proof: [] };
172
+ const proof = [];
173
+ const seen = new Set();
174
+ const walk = (n, depth) => {
175
+ if (seen.has(n.id)) {
176
+ proof.push(`${" ".repeat(depth)}↺ (already shown) ${n.claim}`);
177
+ return;
178
+ }
179
+ seen.add(n.id);
180
+ const bedrock = n.lineageSummary.includes("arithmetic") ? " [bedrock: deterministic]" : "";
181
+ const sig = n.receipt ? "(signed)" : "(unsigned)";
182
+ const mark = n.verdict === "TRUE" ? "✓" : n.verdict === "FALSE" ? "✗" : "?";
183
+ proof.push(`${" ".repeat(depth)}${mark} ${n.claim} — via ${n.lineageSummary.join("+") || "?"}${bedrock} ${sig}`);
184
+ for (const dep of n.dependsOn) {
185
+ const d = byId.get(dep);
186
+ if (d)
187
+ walk(d, depth + 1);
188
+ else
189
+ proof.push(`${" ".repeat(depth + 1)}âš  missing dependency ${dep}`);
190
+ }
191
+ };
192
+ walk(target, 0);
193
+ return { found: true, node: target, proof };
194
+ }
195
+ /**
196
+ * Retract a claim and CASCADE: every ACTIVE node that (transitively) depended on
197
+ * it is marked PENDING_REVERIFY — its proof rested on a now-refuted fact, so it
198
+ * must be re-verified before it can be trusted again. Writes a signed retraction
199
+ * frame. The truth-maintenance heart of the savant. Never throws.
200
+ */
201
+ export function retract(repoRoot, claimOrId, reason, opts = {}) {
202
+ const nodes = readLattice(repoRoot);
203
+ const target = nodes.find((n) => n.id === claimOrId) ?? [...nodes].reverse().find((n) => n.claim === claimOrId && n.status === "ACTIVE");
204
+ if (!target)
205
+ return { retracted: [], cascade: [], retractionReceiptId: null };
206
+ const retracted = [];
207
+ const cascade = [];
208
+ target.status = "RETRACTED";
209
+ retracted.push(target.id);
210
+ // BFS over dependents (nodes whose dependsOn includes a retracted/pending id).
211
+ let frontier = new Set([target.id]);
212
+ for (let guard = 0; guard < nodes.length + 1 && frontier.size; guard++) {
213
+ const next = new Set();
214
+ for (const n of nodes) {
215
+ if (n.status !== "ACTIVE")
216
+ continue;
217
+ if (n.dependsOn.some((d) => frontier.has(d))) {
218
+ n.status = "PENDING_REVERIFY";
219
+ cascade.push(n.id);
220
+ next.add(n.id);
221
+ }
222
+ }
223
+ frontier = next;
224
+ }
225
+ let retractionReceiptId = null;
226
+ try {
227
+ const r = issueReceipt(repoRoot, {
228
+ kind: "claim-verdict",
229
+ subject: `retract:${target.id}`,
230
+ payload: { engine: "aletheia-lattice", action: "retract", target: target.id, reason, cascade },
231
+ issuedAt: opts.issuedAt,
232
+ });
233
+ retractionReceiptId = r.receiptId;
234
+ }
235
+ catch {
236
+ retractionReceiptId = null;
237
+ }
238
+ writeAll(repoRoot, nodes);
239
+ return { retracted, cascade, retractionReceiptId };
240
+ }
241
+ /** Live lattice status: counts + open contradictions among ACTIVE truths + chain integrity. */
242
+ export function latticeStatus(repoRoot) {
243
+ const nodes = readLattice(repoRoot);
244
+ let active = 0, retracted = 0, pending = 0;
245
+ for (const n of nodes) {
246
+ if (n.status === "ACTIVE")
247
+ active++;
248
+ else if (n.status === "RETRACTED")
249
+ retracted++;
250
+ else
251
+ pending++;
252
+ }
253
+ let open = 0;
254
+ const activeNodes = nodes.filter((n) => n.status === "ACTIVE" && n.verdict !== "UNKNOWN");
255
+ for (let i = 0; i < activeNodes.length; i++) {
256
+ for (let j = i + 1; j < activeNodes.length; j++) {
257
+ const a = activeNodes[i], b = activeNodes[j];
258
+ if (a.subject !== b.subject)
259
+ continue;
260
+ if (a.verdict !== b.verdict) {
261
+ open++;
262
+ continue;
263
+ }
264
+ if (a.verdict === "TRUE") {
265
+ if (hasNegation(a.claim) !== hasNegation(b.claim)) {
266
+ open++;
267
+ continue;
268
+ }
269
+ const va = extractValue(a.claim), vb = extractValue(b.claim);
270
+ if (va && vb && va !== vb)
271
+ open++;
272
+ }
273
+ }
274
+ }
275
+ return { nodes: nodes.length, active, retracted, pending, openContradictions: open, chainValid: verifyLattice(repoRoot).ok };
276
+ }
277
+ /**
278
+ * Re-verify the entire lattice OFFLINE: for every signed node (1) its NOTARY
279
+ * receipt's Ed25519 signature is valid, (2) the node's claim/verdict MATCH the
280
+ * signed payload (so editing the jsonl body is caught), and (3) each node's
281
+ * `prev` matches the predecessor's receiptId (the chain is intact). This is the
282
+ * savant's "Trust Nothing — including itself". Never throws.
283
+ */
284
+ export function verifyLattice(repoRoot) {
285
+ const nodes = readLattice(repoRoot);
286
+ const badSignatures = [];
287
+ let prevReceipt = null;
288
+ for (const n of nodes) {
289
+ // (3) chain continuity
290
+ if (n.prev !== prevReceipt) {
291
+ return { ok: false, nodes: nodes.length, brokenAt: n.seq, badSignatures };
292
+ }
293
+ if (n.receipt) {
294
+ // (1) signature valid
295
+ let sigOk = false;
296
+ try {
297
+ sigOk = verifyReceipt(n.receipt).valid;
298
+ }
299
+ catch {
300
+ sigOk = false;
301
+ }
302
+ // (2) node body matches the signed payload (tamper detection)
303
+ const pl = (n.receipt.payload ?? {});
304
+ const bodyMatches = pl.claim === n.claim && pl.verdict === n.verdict;
305
+ if (!sigOk || !bodyMatches)
306
+ badSignatures.push(n.id);
307
+ prevReceipt = n.receipt.receiptId;
308
+ }
309
+ else {
310
+ prevReceipt = n.id;
311
+ }
312
+ }
313
+ return { ok: badSignatures.length === 0, nodes: nodes.length, badSignatures };
314
+ }
315
+ //# sourceMappingURL=lattice.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"lattice.js","sourceRoot":"","sources":["../../src/truth_kernel/lattice.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,18 @@
1
+ /**
2
+ * v2.89.0 — 💎 AXIOM LATTICE tests (ALETHEIA's living proof graph).
3
+ *
4
+ * L1 record + read round-trip; node is signed + hash-chained
5
+ * L2 contradiction: opposite-verdict (same subject, TRUE vs FALSE)
6
+ * L3 contradiction: negation-pair (X vs not-X, both TRUE)
7
+ * L4 contradiction: value-conflict (subject = two different values, both TRUE)
8
+ * L5 no false contradiction across DIFFERENT subjects / against UNKNOWN
9
+ * L6 whyTrue walks the proof to bedrock (deterministic) through dependencies
10
+ * L7 retract CASCADE — dependents → PENDING_REVERIFY + signed frame
11
+ * L8 verifyLattice OFFLINE — clean chain ok; tamper the body → caught; forge a
12
+ * receipt verdict → caught; break the chain (delete a middle node) → caught
13
+ * L9 latticeStatus counts (active/retracted/pending) + open contradictions
14
+ * L10 QUAN — never throws over fuzz; chain stays valid across N random records
15
+ * L11 assertClaim({record}) persists + surfaces contradictions end-to-end
16
+ */
17
+ export {};
18
+ //# sourceMappingURL=lattice.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"lattice.test.d.ts","sourceRoot":"","sources":["../../src/truth_kernel/lattice.test.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG"}
@@ -0,0 +1,175 @@
1
+ /**
2
+ * v2.89.0 — 💎 AXIOM LATTICE tests (ALETHEIA's living proof graph).
3
+ *
4
+ * L1 record + read round-trip; node is signed + hash-chained
5
+ * L2 contradiction: opposite-verdict (same subject, TRUE vs FALSE)
6
+ * L3 contradiction: negation-pair (X vs not-X, both TRUE)
7
+ * L4 contradiction: value-conflict (subject = two different values, both TRUE)
8
+ * L5 no false contradiction across DIFFERENT subjects / against UNKNOWN
9
+ * L6 whyTrue walks the proof to bedrock (deterministic) through dependencies
10
+ * L7 retract CASCADE — dependents → PENDING_REVERIFY + signed frame
11
+ * L8 verifyLattice OFFLINE — clean chain ok; tamper the body → caught; forge a
12
+ * receipt verdict → caught; break the chain (delete a middle node) → caught
13
+ * L9 latticeStatus counts (active/retracted/pending) + open contradictions
14
+ * L10 QUAN — never throws over fuzz; chain stays valid across N random records
15
+ * L11 assertClaim({record}) persists + surfaces contradictions end-to-end
16
+ */
17
+ import { describe, it, expect } from "vitest";
18
+ import { mkdtempSync, writeFileSync } from "node:fs";
19
+ import { tmpdir } from "node:os";
20
+ import { join } from "node:path";
21
+ import { recordAssertion, detectContradictions, whyTrue, retract, latticeStatus, verifyLattice, readLattice, normalizeSubject, } from "./lattice.js";
22
+ import { assertClaim } from "./aletheia.js";
23
+ function repo() { return mkdtempSync(join(tmpdir(), "lattice-")); }
24
+ const T = 1_700_000_000_000;
25
+ function latPath(r) { return join(r, ".mneme", "aletheia", "lattice.jsonl"); }
26
+ describe("v2.89.0 💎 AXIOM LATTICE — ALETHEIA's living proof graph", () => {
27
+ it("L1 record + read round-trip; node is signed + hash-chained", () => {
28
+ const r = repo();
29
+ const a = recordAssertion(r, { claim: "2+2=4", verdict: "TRUE", pTrue: 1, lineageSummary: ["arithmetic"] }, { issuedAt: T });
30
+ expect(a.node.verdict).toBe("TRUE");
31
+ expect(a.node.receipt).not.toBeNull();
32
+ expect(a.node.prev).toBeNull(); // first node = root
33
+ const b = recordAssertion(r, { claim: "10*10=100", verdict: "TRUE", pTrue: 1, lineageSummary: ["arithmetic"] }, { issuedAt: T });
34
+ expect(b.node.prev).toBe(a.node.receipt.receiptId); // chained
35
+ expect(readLattice(r).length).toBe(2);
36
+ });
37
+ it("L2 contradiction: opposite-verdict", () => {
38
+ const r = repo();
39
+ recordAssertion(r, { claim: "2+2=4", verdict: "TRUE", pTrue: 1, lineageSummary: ["arithmetic"] }, { issuedAt: T });
40
+ const c = recordAssertion(r, { claim: "2+2=4", verdict: "FALSE", pTrue: 0, lineageSummary: ["arithmetic"] }, { issuedAt: T });
41
+ expect(c.contradictions.map((x) => x.kind)).toContain("opposite-verdict");
42
+ });
43
+ it("L3 contradiction: negation-pair", () => {
44
+ const r = repo();
45
+ recordAssertion(r, { claim: "mneme is written in TypeScript", verdict: "TRUE", pTrue: 0.9 }, { issuedAt: T });
46
+ const c = recordAssertion(r, { claim: "mneme is not written in TypeScript", verdict: "TRUE", pTrue: 0.9 }, { issuedAt: T });
47
+ expect(c.contradictions.map((x) => x.kind)).toContain("negation-pair");
48
+ });
49
+ it("L4 contradiction: value-conflict", () => {
50
+ const r = repo();
51
+ recordAssertion(r, { claim: "the project version is 1.2", verdict: "TRUE", pTrue: 0.9 }, { issuedAt: T });
52
+ const c = recordAssertion(r, { claim: "the project version is 1.3", verdict: "TRUE", pTrue: 0.9 }, { issuedAt: T });
53
+ expect(c.contradictions.map((x) => x.kind)).toContain("value-conflict");
54
+ });
55
+ it("L5 no false contradiction across different subjects / against UNKNOWN", () => {
56
+ const r = repo();
57
+ recordAssertion(r, { claim: "the sky is blue", verdict: "TRUE", pTrue: 0.9 }, { issuedAt: T });
58
+ expect(detectContradictions(r, "the grass is green", "TRUE").length).toBe(0); // different subject
59
+ expect(detectContradictions(r, "the sky is blue", "UNKNOWN").length).toBe(0); // UNKNOWN asserts nothing
60
+ // re-affirming the SAME claim+verdict is not a contradiction
61
+ expect(detectContradictions(r, "the sky is blue", "TRUE").length).toBe(0);
62
+ });
63
+ it("L6 whyTrue walks the proof to bedrock through dependencies", () => {
64
+ const r = repo();
65
+ const a = recordAssertion(r, { claim: "2+2=4", verdict: "TRUE", pTrue: 1, lineageSummary: ["arithmetic"] }, { issuedAt: T });
66
+ const b = recordAssertion(r, { claim: "the sum check passes", verdict: "TRUE", pTrue: 0.9, lineageSummary: ["apoptosis"] }, { issuedAt: T, dependsOn: [a.node.id] });
67
+ const w = whyTrue(r, b.node.id);
68
+ expect(w.found).toBe(true);
69
+ expect(w.proof.length).toBeGreaterThanOrEqual(2);
70
+ expect(w.proof.some((l) => l.includes("bedrock"))).toBe(true); // reaches the deterministic axiom
71
+ expect(whyTrue(r, "no such claim").found).toBe(false);
72
+ });
73
+ it("L7 retract CASCADE — dependents → PENDING_REVERIFY + signed frame", () => {
74
+ const r = repo();
75
+ const a = recordAssertion(r, { claim: "base fact", verdict: "TRUE", pTrue: 0.9 }, { issuedAt: T });
76
+ const b = recordAssertion(r, { claim: "derived from base", verdict: "TRUE", pTrue: 0.9 }, { issuedAt: T, dependsOn: [a.node.id] });
77
+ const c = recordAssertion(r, { claim: "derived from derived", verdict: "TRUE", pTrue: 0.9 }, { issuedAt: T, dependsOn: [b.node.id] });
78
+ const res = retract(r, a.node.id, "refuted", { issuedAt: T });
79
+ expect(res.retracted).toContain(a.node.id);
80
+ expect(res.cascade).toContain(b.node.id); // direct dependent
81
+ expect(res.cascade).toContain(c.node.id); // transitive dependent
82
+ expect(res.retractionReceiptId).not.toBeNull();
83
+ const nodes = readLattice(r);
84
+ expect(nodes.find((n) => n.id === a.node.id).status).toBe("RETRACTED");
85
+ expect(nodes.find((n) => n.id === b.node.id).status).toBe("PENDING_REVERIFY");
86
+ expect(nodes.find((n) => n.id === c.node.id).status).toBe("PENDING_REVERIFY");
87
+ });
88
+ it("L8 verifyLattice OFFLINE — clean ok; body-tamper / forged-receipt / broken-chain all caught", () => {
89
+ const mk = () => {
90
+ const r = repo();
91
+ recordAssertion(r, { claim: "alpha is true", verdict: "TRUE", pTrue: 0.9 }, { issuedAt: T });
92
+ recordAssertion(r, { claim: "beta is true", verdict: "TRUE", pTrue: 0.9 }, { issuedAt: T });
93
+ recordAssertion(r, { claim: "gamma is true", verdict: "TRUE", pTrue: 0.9 }, { issuedAt: T });
94
+ return r;
95
+ };
96
+ // clean
97
+ expect(verifyLattice(mk()).ok).toBe(true);
98
+ // (a) tamper the NODE BODY (flip a verdict in the jsonl) → mismatch vs signed payload
99
+ {
100
+ const r = mk();
101
+ const nodes = readLattice(r);
102
+ nodes[1].verdict = "FALSE";
103
+ writeFileSync(latPath(r), nodes.map((n) => JSON.stringify(n)).join("\n") + "\n", "utf8");
104
+ const v = verifyLattice(r);
105
+ expect(v.ok).toBe(false);
106
+ expect(v.badSignatures).toContain(nodes[1].id);
107
+ }
108
+ // (b) forge the VERDICT inside the signed receipt payload → Ed25519 sig breaks
109
+ {
110
+ const r = mk();
111
+ const nodes = readLattice(r);
112
+ nodes[1].receipt.payload.verdict = "FALSE";
113
+ nodes[1].verdict = "FALSE"; // keep body consistent so only the sig check fails
114
+ writeFileSync(latPath(r), nodes.map((n) => JSON.stringify(n)).join("\n") + "\n", "utf8");
115
+ expect(verifyLattice(r).ok).toBe(false);
116
+ }
117
+ // (c) break the CHAIN — delete the middle node so prev no longer matches
118
+ {
119
+ const r = mk();
120
+ const nodes = readLattice(r);
121
+ const without = [nodes[0], nodes[2]];
122
+ writeFileSync(latPath(r), without.map((n) => JSON.stringify(n)).join("\n") + "\n", "utf8");
123
+ const v = verifyLattice(r);
124
+ expect(v.ok).toBe(false);
125
+ expect(v.brokenAt).toBe(nodes[2].seq);
126
+ }
127
+ });
128
+ it("L9 latticeStatus counts + open contradictions among ACTIVE truths only", () => {
129
+ const r = repo();
130
+ recordAssertion(r, { claim: "x is red", verdict: "TRUE", pTrue: 0.9 }, { issuedAt: T });
131
+ recordAssertion(r, { claim: "x is not red", verdict: "TRUE", pTrue: 0.9 }, { issuedAt: T }); // contradiction
132
+ const a = recordAssertion(r, { claim: "y is fine", verdict: "TRUE", pTrue: 0.9 }, { issuedAt: T });
133
+ let s = latticeStatus(r);
134
+ expect(s.nodes).toBe(3);
135
+ expect(s.active).toBe(3);
136
+ expect(s.openContradictions).toBe(1);
137
+ expect(s.chainValid).toBe(true);
138
+ // retracting one side closes the contradiction
139
+ retract(r, a.node.id, "n/a", { issuedAt: T });
140
+ retract(r, readLattice(r)[1].id, "resolved", { issuedAt: T });
141
+ s = latticeStatus(r);
142
+ expect(s.openContradictions).toBe(0);
143
+ expect(s.retracted).toBe(2);
144
+ });
145
+ it("L10 QUAN — never throws over fuzz; chain stays valid across random records", () => {
146
+ const r = repo();
147
+ for (let i = 0; i < 50; i++) {
148
+ const claim = ["", " ", `fact ${i}`, `v = ${i}`, `${i}+${i}=${i * 2}`, "weird chars", `${i} is not ${i}`][i % 7];
149
+ const verdict = ["TRUE", "FALSE", "UNKNOWN"][i % 3];
150
+ expect(() => recordAssertion(r, { claim, verdict, pTrue: (i % 10) / 10 }, { issuedAt: T })).not.toThrow();
151
+ }
152
+ expect(verifyLattice(r).ok).toBe(true);
153
+ expect(() => latticeStatus(r)).not.toThrow();
154
+ expect(() => normalizeSubject("")).not.toThrow();
155
+ expect(() => whyTrue(r, "nothing")).not.toThrow();
156
+ expect(() => retract(r, "nothing", "x", { issuedAt: T })).not.toThrow();
157
+ });
158
+ it("L11 assertClaim({record}) persists + surfaces contradictions end-to-end", async () => {
159
+ const r = repo();
160
+ const t1 = await assertClaim(r, "2+2=4", { record: true, issuedAt: T });
161
+ expect(t1.verdict).toBe("TRUE");
162
+ expect(t1.latticeNodeId).toBeTruthy();
163
+ expect(t1.contradictions).toEqual([]);
164
+ // assert the SAME subject with the opposite truth → contradiction surfaced inline
165
+ // (force it via custom sensor so we get a definite FALSE on the same subject)
166
+ const t2 = await assertClaim(r, "2+2=4", {
167
+ record: true, issuedAt: T,
168
+ sensors: [{ id: "forced", weight: 2, run: () => ({ sensor: "forced", verdict: "FALSE", confidence: 1 }) }],
169
+ });
170
+ expect(t2.verdict).toBe("FALSE");
171
+ expect(t2.contradictions?.some((c) => c.kind === "opposite-verdict")).toBe(true);
172
+ expect(verifyLattice(r).ok).toBe(true);
173
+ });
174
+ });
175
+ //# sourceMappingURL=lattice.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"lattice.test.js","sourceRoot":"","sources":["../../src/truth_kernel/lattice.test.ts"],"names":[],"mappings":"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"}