@mneme-ai/core 2.90.0 β 2.91.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 +2 -0
- package/dist/agent_manifest.js.map +1 -1
- package/dist/index.d.ts +1 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +8 -0
- package/dist/index.js.map +1 -1
- package/dist/truth_gate/claims.d.ts.map +1 -1
- package/dist/truth_gate/claims.js +7 -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 +41 -0
- package/dist/truth_gate/probes.js.map +1 -1
- package/dist/truth_kernel/anamnesis.d.ts +172 -0
- package/dist/truth_kernel/anamnesis.d.ts.map +1 -0
- package/dist/truth_kernel/anamnesis.js +335 -0
- package/dist/truth_kernel/anamnesis.js.map +1 -0
- package/dist/truth_kernel/anamnesis.test.d.ts +15 -0
- package/dist/truth_kernel/anamnesis.test.d.ts.map +1 -0
- package/dist/truth_kernel/anamnesis.test.js +136 -0
- package/dist/truth_kernel/anamnesis.test.js.map +1 -0
- package/package.json +1 -1
|
@@ -0,0 +1,136 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* v2.91.0 β πβ₯ ANAMNESIS tests (compute once, recollect forever).
|
|
3
|
+
*
|
|
4
|
+
* N1 canonicalForm β meaning-preserving paraphrase collapse (arith forms, words, commutative sort, case/space)
|
|
5
|
+
* N2 NO false collision β word order preserved; different values β ; non-commutative not sorted
|
|
6
|
+
* N3 recollect-or-recompute β first computes, repeat recollects (~0), compute runs exactly once
|
|
7
|
+
* N4 re-verify EVERY hit β tampered body / forged sig / stale / invalidated all force recompute
|
|
8
|
+
* N5 freshness window β within ttl β recollect, past ttl β recompute; ttl 0 = eternal axiom
|
|
9
|
+
* N6 energy ledger β anamnesisStats totals + mintEnergyCertificate signs the savings
|
|
10
|
+
* N7 cross-vendor export/import β added, idempotent, forged (claim-swap) dropped
|
|
11
|
+
* N8 Anamnesis Gauntlet β recollection-rate > 0 AND stale-serve-rate === 0
|
|
12
|
+
* N9 QUAN β never throws over fuzz; always 3-valued
|
|
13
|
+
*/
|
|
14
|
+
import { describe, it, expect } from "vitest";
|
|
15
|
+
import { mkdtempSync, readFileSync, writeFileSync } from "node:fs";
|
|
16
|
+
import { tmpdir } from "node:os";
|
|
17
|
+
import { join } from "node:path";
|
|
18
|
+
import { canonicalForm, canonicalClaimKey, recollectOrCompute, recollectAssertion, isTrustworthy, invalidate, anamnesisStats, mintEnergyCertificate, exportProofs, importProofs, runAnamnesisGauntlet, } from "./anamnesis.js";
|
|
19
|
+
function repo() { return mkdtempSync(join(tmpdir(), "anamnesis-")); }
|
|
20
|
+
const T = 1_700_000_000_000;
|
|
21
|
+
const storeFile = (r) => join(r, ".mneme", "anamnesis", "proofs.jsonl");
|
|
22
|
+
const proveTrue = (costTokens = 1800, ttlMs = 0) => () => Promise.resolve({ verdict: "TRUE", lineage: [{ sensor: "flash", verdict: "TRUE", weight: 1 }], ttlMs, costTokens });
|
|
23
|
+
describe("v2.91.0 πβ₯ ANAMNESIS β compute once, recollect forever", () => {
|
|
24
|
+
it("N1 canonicalForm β meaning-preserving paraphrase collapse", () => {
|
|
25
|
+
const k = (s) => canonicalClaimKey(s);
|
|
26
|
+
// four arithmetic paraphrases β one key
|
|
27
|
+
expect(new Set(["2+2=4", "2 + 2 = 4", "two plus two equals four", "4 = 2 + 2"].map(k)).size).toBe(1);
|
|
28
|
+
// commutative operands sorted (3*4 β‘ 4*3)
|
|
29
|
+
expect(k("3*4=12")).toBe(k("4*3=12"));
|
|
30
|
+
expect(k("5+7=12")).toBe(k("7+5=12"));
|
|
31
|
+
// case + whitespace + trailing punctuation
|
|
32
|
+
expect(k("React 19 ships RSC")).toBe(k("react 19 ships rsc."));
|
|
33
|
+
// number-words in prose
|
|
34
|
+
expect(canonicalForm("ten times ten = 100")).toBe(canonicalForm("10*10=100"));
|
|
35
|
+
});
|
|
36
|
+
it("N2 NO false collision β the savant won't trade safety for hit-rate", () => {
|
|
37
|
+
const k = (s) => canonicalClaimKey(s);
|
|
38
|
+
expect(k("dog bites man")).not.toBe(k("man bites dog")); // word order is meaning
|
|
39
|
+
expect(k("2+2=4")).not.toBe(k("2+2=5")); // different value
|
|
40
|
+
expect(k("10-3=7")).not.toBe(k("3-10=7")); // subtraction NOT commutative β not sorted
|
|
41
|
+
});
|
|
42
|
+
it("N3 recollect-or-recompute β compute runs exactly once across repeats + paraphrases", async () => {
|
|
43
|
+
const r = repo();
|
|
44
|
+
let computeCalls = 0;
|
|
45
|
+
const compute = () => { computeCalls++; return proveTrue(1800, 0)(); };
|
|
46
|
+
const a = await recollectOrCompute(r, "2+2=4", compute, { now: T, agent: "claude" });
|
|
47
|
+
const b = await recollectOrCompute(r, "2 + 2 = 4", compute, { now: T + 10, agent: "gpt" }); // paraphrase
|
|
48
|
+
const c = await recollectOrCompute(r, "two plus two equals four", compute, { now: T + 20 }); // paraphrase
|
|
49
|
+
expect(a.source).toBe("recompute");
|
|
50
|
+
expect(b.source).toBe("recollect");
|
|
51
|
+
expect(c.source).toBe("recollect");
|
|
52
|
+
expect(b.energySavedTokens).toBe(1800);
|
|
53
|
+
expect(computeCalls).toBe(1); // β the whole point: proven once, recollected forever
|
|
54
|
+
});
|
|
55
|
+
it("N4 re-verify EVERY hit β tampered body / forged sig / invalidated all force recompute", async () => {
|
|
56
|
+
// (a) tamper the stored verdict in the jsonl β next ask must recompute (body β signed payload)
|
|
57
|
+
{
|
|
58
|
+
const r = repo();
|
|
59
|
+
await recollectOrCompute(r, "2+2=4", proveTrue(), { now: T });
|
|
60
|
+
const rec = JSON.parse(readFileSync(storeFile(r), "utf8").trim());
|
|
61
|
+
rec.verdict = "FALSE";
|
|
62
|
+
writeFileSync(storeFile(r), JSON.stringify(rec) + "\n", "utf8");
|
|
63
|
+
const again = await recollectOrCompute(r, "2+2=4", proveTrue(), { now: T + 5 });
|
|
64
|
+
expect(again.source).toBe("recompute");
|
|
65
|
+
expect(again.reason).toBe("forged");
|
|
66
|
+
}
|
|
67
|
+
// (b) invalidate β recompute
|
|
68
|
+
{
|
|
69
|
+
const r = repo();
|
|
70
|
+
await recollectOrCompute(r, "the version is 1.2", proveTrue(1800, 999999), { now: T });
|
|
71
|
+
expect(invalidate(r, "the version is 1.2", "shipped 1.3")).toBe(true);
|
|
72
|
+
const again = await recollectOrCompute(r, "the version is 1.2", proveTrue(1800, 999999), { now: T + 5 });
|
|
73
|
+
expect(again.source).toBe("recompute");
|
|
74
|
+
expect(again.reason).toBe("invalidated");
|
|
75
|
+
}
|
|
76
|
+
});
|
|
77
|
+
it("N5 freshness window β within ttl recollect, past ttl recompute; ttl 0 eternal", async () => {
|
|
78
|
+
const r = repo();
|
|
79
|
+
await recollectOrCompute(r, "weather is sunny today", proveTrue(1800, 1000), { now: T }); // 1s ttl
|
|
80
|
+
expect((await recollectOrCompute(r, "weather is sunny today", proveTrue(1800, 1000), { now: T + 500 })).source).toBe("recollect");
|
|
81
|
+
expect((await recollectOrCompute(r, "weather is sunny today", proveTrue(1800, 1000), { now: T + 5000 })).source).toBe("recompute"); // stale
|
|
82
|
+
// eternal axiom (ttl 0) recollects far in the future
|
|
83
|
+
const r2 = repo();
|
|
84
|
+
await recollectOrCompute(r2, "2+2=4", proveTrue(1800, 0), { now: T });
|
|
85
|
+
expect((await recollectOrCompute(r2, "2+2=4", proveTrue(1800, 0), { now: T + 10 ** 12 })).source).toBe("recollect");
|
|
86
|
+
});
|
|
87
|
+
it("N6 energy ledger β stats total + signed savings certificate", async () => {
|
|
88
|
+
const r = repo();
|
|
89
|
+
await recollectOrCompute(r, "2+2=4", proveTrue(1800, 0), { now: T });
|
|
90
|
+
await recollectOrCompute(r, "2+2=4", proveTrue(1800, 0), { now: T + 1 });
|
|
91
|
+
await recollectOrCompute(r, "2+2=4", proveTrue(1800, 0), { now: T + 2 });
|
|
92
|
+
const s = anamnesisStats(r);
|
|
93
|
+
expect(s.records).toBe(1);
|
|
94
|
+
expect(s.recollections).toBe(2);
|
|
95
|
+
expect(s.totalEnergySavedTokens).toBe(3600); // 2 recollections Γ 1800
|
|
96
|
+
const cert = await mintEnergyCertificate(r, { windowStartMs: T, windowEndMs: T + 10 });
|
|
97
|
+
expect(cert.totalTokensSaved).toBe(3600);
|
|
98
|
+
expect(typeof cert.hmac).toBe("string");
|
|
99
|
+
});
|
|
100
|
+
it("N7 cross-vendor export/import β added, idempotent, forged claim-swap dropped", async () => {
|
|
101
|
+
const a = repo();
|
|
102
|
+
await recollectOrCompute(a, "2+2=4", proveTrue(), { now: T });
|
|
103
|
+
await recollectOrCompute(a, "10*10=100", proveTrue(), { now: T });
|
|
104
|
+
const bundle = exportProofs(a, "agentA");
|
|
105
|
+
expect(bundle.proofs.length).toBe(2);
|
|
106
|
+
const dest = repo();
|
|
107
|
+
expect(importProofs(dest, bundle).added).toBe(2);
|
|
108
|
+
expect(importProofs(dest, bundle).duplicate).toBe(2); // idempotent
|
|
109
|
+
// forge: swap a claimKey but keep the (now-mismatched) valid signature β dropped
|
|
110
|
+
const forged = JSON.parse(JSON.stringify(bundle));
|
|
111
|
+
forged.proofs[0].claimKey = "deadbeef";
|
|
112
|
+
expect(importProofs(repo(), forged).rejectedForged).toBe(1);
|
|
113
|
+
});
|
|
114
|
+
it("N8 Anamnesis Gauntlet β recollection-rate > 0 AND stale-serve-rate 0%", async () => {
|
|
115
|
+
const g = await runAnamnesisGauntlet(repo(), [
|
|
116
|
+
"2+2=4", "2 + 2 = 4", "two plus two equals four", "10*10=100", "ten times ten = 100", "2+2=4",
|
|
117
|
+
], { now: T });
|
|
118
|
+
expect(g.recollectionRate).toBeGreaterThan(0);
|
|
119
|
+
expect(g.staleServeRate).toBe(0); // never serves an unre-verifiable proof
|
|
120
|
+
expect(g.energySavedTokens).toBeGreaterThan(0);
|
|
121
|
+
expect(g.recomputes).toBe(2); // only 2 distinct facts
|
|
122
|
+
});
|
|
123
|
+
it("N9 QUAN β never throws over fuzz; always 3-valued; isTrustworthy total", async () => {
|
|
124
|
+
const r = repo();
|
|
125
|
+
for (let i = 0; i < 40; i++) {
|
|
126
|
+
const claim = ["", " ", `${i}+${i}=${i * 2}`, `claim ${i}`, "weirdο»Ώchars", `${i} is not ${i}`][i % 6];
|
|
127
|
+
const out = await recollectAssertion(r, claim, { now: T });
|
|
128
|
+
expect(["TRUE", "FALSE", "UNKNOWN"]).toContain(out.verdict);
|
|
129
|
+
}
|
|
130
|
+
expect(() => canonicalForm("")).not.toThrow();
|
|
131
|
+
expect(() => anamnesisStats(r)).not.toThrow();
|
|
132
|
+
const fakeRec = { claimKey: "x", verdict: "TRUE", receipt: null, ttlMs: 0, computedAt: 0, invalidated: false };
|
|
133
|
+
expect(isTrustworthy(fakeRec, T)).toBe(false); // unsigned β never trustworthy
|
|
134
|
+
});
|
|
135
|
+
});
|
|
136
|
+
//# sourceMappingURL=anamnesis.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"anamnesis.test.js","sourceRoot":"","sources":["../../src/truth_kernel/anamnesis.test.ts"],"names":[],"mappings":"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"}
|