@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.
- package/dist/agent_manifest.d.ts.map +1 -1
- package/dist/agent_manifest.js +13 -0
- package/dist/agent_manifest.js.map +1 -1
- package/dist/index.d.ts +2 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +17 -0
- package/dist/index.js.map +1 -1
- package/dist/truth_gate/claims.d.ts.map +1 -1
- package/dist/truth_gate/claims.js +14 -0
- package/dist/truth_gate/claims.js.map +1 -1
- package/dist/truth_gate/probes.d.ts.map +1 -1
- package/dist/truth_gate/probes.js +72 -0
- package/dist/truth_gate/probes.js.map +1 -1
- package/dist/truth_kernel/aletheia.d.ts +135 -0
- package/dist/truth_kernel/aletheia.d.ts.map +1 -0
- package/dist/truth_kernel/aletheia.js +280 -0
- package/dist/truth_kernel/aletheia.js.map +1 -0
- package/dist/truth_kernel/aletheia.test.d.ts +15 -0
- package/dist/truth_kernel/aletheia.test.d.ts.map +1 -0
- package/dist/truth_kernel/aletheia.test.js +0 -0
- package/dist/truth_kernel/aletheia.test.js.map +1 -0
- package/dist/truth_kernel/lattice.d.ts +141 -0
- package/dist/truth_kernel/lattice.d.ts.map +1 -0
- package/dist/truth_kernel/lattice.js +315 -0
- package/dist/truth_kernel/lattice.js.map +1 -0
- package/dist/truth_kernel/lattice.test.d.ts +18 -0
- package/dist/truth_kernel/lattice.test.d.ts.map +1 -0
- package/dist/truth_kernel/lattice.test.js +175 -0
- package/dist/truth_kernel/lattice.test.js.map +1 -0
- package/package.json +80 -80
|
@@ -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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"}
|