@mneme-ai/core 2.98.0 → 2.100.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.js +1 -1
- package/dist/agent_manifest.js.map +1 -1
- package/dist/hydra/chain.d.ts +6 -3
- package/dist/hydra/chain.d.ts.map +1 -1
- package/dist/hydra/chain.js +19 -5
- package/dist/hydra/chain.js.map +1 -1
- package/dist/hydra/chain.test.js +15 -0
- package/dist/hydra/chain.test.js.map +1 -1
- package/dist/hydra/chain_guard.d.ts +71 -0
- package/dist/hydra/chain_guard.d.ts.map +1 -0
- package/dist/hydra/chain_guard.js +154 -0
- package/dist/hydra/chain_guard.js.map +1 -0
- package/dist/hydra/chain_guard.test.d.ts +2 -0
- package/dist/hydra/chain_guard.test.d.ts.map +1 -0
- package/dist/hydra/chain_guard.test.js +85 -0
- package/dist/hydra/chain_guard.test.js.map +1 -0
- package/dist/hydra/index.d.ts +1 -0
- package/dist/hydra/index.d.ts.map +1 -1
- package/dist/hydra/index.js +1 -0
- package/dist/hydra/index.js.map +1 -1
- package/dist/truth_gate/probes.d.ts.map +1 -1
- package/dist/truth_gate/probes.js +29 -0
- package/dist/truth_gate/probes.js.map +1 -1
- package/package.json +1 -1
package/dist/hydra/chain.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"chain.js","sourceRoot":"","sources":["../../src/hydra/chain.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;GA0BG;AAEH,OAAO,EAAqC,SAAS,EAAE,MAAM,aAAa,CAAC;AAC3E,OAAO,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AAC9C,OAAO,EAAE,oBAAoB,EAAE,MAAM,aAAa,CAAC;AACnD,OAAO,EAAE,YAAY,EAAE,aAAa,EAAsB,MAAM,sBAAsB,CAAC;
|
|
1
|
+
{"version":3,"file":"chain.js","sourceRoot":"","sources":["../../src/hydra/chain.ts"],"names":[],"mappings":"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"}
|
package/dist/hydra/chain.test.js
CHANGED
|
@@ -55,6 +55,21 @@ describe("v2.98 HYDRA PROVENANCE CHAIN", () => {
|
|
|
55
55
|
expect(g.tamperCaught).toBe(true);
|
|
56
56
|
expect(g.score).toBe(100);
|
|
57
57
|
});
|
|
58
|
+
it("binds anchor metadata (git commit sha) into the signature — tamper caught", () => {
|
|
59
|
+
const cb1 = forgeCodebook(C1, { minHits: 2 }).codebook;
|
|
60
|
+
const cb2 = forgeCodebook(C2, { minHits: 2 }).codebook;
|
|
61
|
+
let chain = [];
|
|
62
|
+
chain = appendToChain(process.cwd(), chain, cb1, 1700000000000, { commit: "abc123", subject: "init" }).chain;
|
|
63
|
+
chain = appendToChain(process.cwd(), chain, cb2, 1700000000001, { commit: "def456", subject: "add beta" }).chain;
|
|
64
|
+
expect(verifyChain(chain).ok).toBe(true);
|
|
65
|
+
expect(chain[1].meta.commit).toBe("def456");
|
|
66
|
+
// Forge the anchor (claim a different commit produced this state) → caught.
|
|
67
|
+
const clone = JSON.parse(JSON.stringify(chain));
|
|
68
|
+
clone[1].meta.commit = "HACKED";
|
|
69
|
+
const v = verifyChain(clone);
|
|
70
|
+
expect(v.ok).toBe(false);
|
|
71
|
+
expect(v.brokenAt).toBe(1);
|
|
72
|
+
});
|
|
58
73
|
it("STABILITY — total functions never throw on garbage", () => {
|
|
59
74
|
expect(() => verifyChain(null)).not.toThrow();
|
|
60
75
|
expect(verifyChain(null).ok).toBe(false);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"chain.test.js","sourceRoot":"","sources":["../../src/hydra/chain.test.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"chain.test.js","sourceRoot":"","sources":["../../src/hydra/chain.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* v2.100.0 — HYDRA · GUARD × CHAIN fusion ("temporal guarded replay").
|
|
3
|
+
*
|
|
4
|
+
* The two gems become one. The PROVENANCE CHAIN (v2.98) already records
|
|
5
|
+
* every codebook delta with a seq. The GUARD (v2.97) redacts stale content.
|
|
6
|
+
* Here the chain computes its OWN atrophy clock — no external age source —
|
|
7
|
+
* and drives the guard: a phrase that was added long ago and never touched
|
|
8
|
+
* since is STALE; replaying with `--guard` redacts exactly those.
|
|
9
|
+
*
|
|
10
|
+
* So you can replay the codebook at any past step, and the entries that had
|
|
11
|
+
* already gone cold by then expand only to their signed abstract — the AI
|
|
12
|
+
* gets the *shape* of old knowledge but cannot quote rotten detail. The
|
|
13
|
+
* staleness is derived deterministically from the chain's own history, and
|
|
14
|
+
* (the Padgett rule) only PROVEN-old entries go stale — anything we can't
|
|
15
|
+
* prove is old stays fresh.
|
|
16
|
+
*
|
|
17
|
+
* STABILITY: every function is total. Garbage chain / bad index / empty →
|
|
18
|
+
* the safest, smallest result, never a throw.
|
|
19
|
+
*/
|
|
20
|
+
import { type Codebook } from "./engine.js";
|
|
21
|
+
import { type CodebookDelta } from "./chain.js";
|
|
22
|
+
import { type TrustLevel } from "./guard.js";
|
|
23
|
+
/**
|
|
24
|
+
* For the codebook that exists at `uptoIndex`, the seq at which each
|
|
25
|
+
* surviving phrase was most recently ADDED (i.e. last touched). Pure;
|
|
26
|
+
* never throws. A phrase removed and re-added gets the later seq (it's
|
|
27
|
+
* "fresh" again); a phrase added once and left alone keeps its old seq.
|
|
28
|
+
*/
|
|
29
|
+
export declare function phraseAddedSeq(chain: CodebookDelta[], uptoIndex: number): Map<string, number>;
|
|
30
|
+
export interface TemporalTrust {
|
|
31
|
+
trustMap: Record<string, TrustLevel>;
|
|
32
|
+
freshCount: number;
|
|
33
|
+
staleCount: number;
|
|
34
|
+
/** the index the trust was computed at. */
|
|
35
|
+
atIndex: number;
|
|
36
|
+
}
|
|
37
|
+
/**
|
|
38
|
+
* Derive a trust map for the codebook at `uptoIndex` FROM THE CHAIN'S OWN
|
|
39
|
+
* HISTORY. An entry is stale when its age (deltas since last touched)
|
|
40
|
+
* exceeds `halfLifeDeltas * 2` — the same "proven-old, else fresh"
|
|
41
|
+
* discipline as the atrophy clock. Total; never throws.
|
|
42
|
+
*/
|
|
43
|
+
export declare function trustMapFromChain(chain: CodebookDelta[], uptoIndex: number, halfLifeDeltas: number): TemporalTrust;
|
|
44
|
+
export interface GuardedReplay {
|
|
45
|
+
ok: boolean;
|
|
46
|
+
codebook: Codebook | null;
|
|
47
|
+
trust: TemporalTrust;
|
|
48
|
+
reason: string;
|
|
49
|
+
}
|
|
50
|
+
/**
|
|
51
|
+
* Replay the codebook at `index` AND attach the chain-derived trust map.
|
|
52
|
+
* Combine with expandGuarded(encoded, codebook, trustFromMap(trust.trustMap))
|
|
53
|
+
* to get a stale-aware, byte-lossless-for-fresh, redacted-for-cold view of
|
|
54
|
+
* any past step. Total; never throws.
|
|
55
|
+
*/
|
|
56
|
+
export declare function guardedReplay(chain: CodebookDelta[], index: number, halfLifeDeltas: number): GuardedReplay;
|
|
57
|
+
export interface GuardedChainGauntlet {
|
|
58
|
+
/** trust derivation is deterministic (same chain → same map). */
|
|
59
|
+
deterministic: boolean;
|
|
60
|
+
/** an entry added at the tip is NEVER stale. */
|
|
61
|
+
freshAtTip: boolean;
|
|
62
|
+
/** only PROVEN-old entries are marked stale (no over-redaction). */
|
|
63
|
+
provenOnly: boolean;
|
|
64
|
+
/** guarded replay is total on garbage (never throws). */
|
|
65
|
+
stable: boolean;
|
|
66
|
+
/** 0–100. 100 ⟺ all hold. */
|
|
67
|
+
score: number;
|
|
68
|
+
}
|
|
69
|
+
/** Prove the fusion's invariants over a real chain. Total. */
|
|
70
|
+
export declare function guardedChainGauntlet(chain: CodebookDelta[], halfLifeDeltas: number): GuardedChainGauntlet;
|
|
71
|
+
//# sourceMappingURL=chain_guard.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"chain_guard.d.ts","sourceRoot":"","sources":["../../src/hydra/chain_guard.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AAEH,OAAO,EAAE,KAAK,QAAQ,EAAE,MAAM,aAAa,CAAC;AAC5C,OAAO,EAAe,KAAK,aAAa,EAAE,MAAM,YAAY,CAAC;AAC7D,OAAO,EAAE,KAAK,UAAU,EAAE,MAAM,YAAY,CAAC;AAE7C;;;;;GAKG;AACH,wBAAgB,cAAc,CAAC,KAAK,EAAE,aAAa,EAAE,EAAE,SAAS,EAAE,MAAM,GAAG,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAW7F;AAED,MAAM,WAAW,aAAa;IAC5B,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC;IACrC,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC;IACnB,2CAA2C;IAC3C,OAAO,EAAE,MAAM,CAAC;CACjB;AAED;;;;;GAKG;AACH,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,aAAa,EAAE,EAAE,SAAS,EAAE,MAAM,EAAE,cAAc,EAAE,MAAM,GAAG,aAAa,CAmBlH;AAED,MAAM,WAAW,aAAa;IAC5B,EAAE,EAAE,OAAO,CAAC;IACZ,QAAQ,EAAE,QAAQ,GAAG,IAAI,CAAC;IAC1B,KAAK,EAAE,aAAa,CAAC;IACrB,MAAM,EAAE,MAAM,CAAC;CAChB;AAED;;;;;GAKG;AACH,wBAAgB,aAAa,CAAC,KAAK,EAAE,aAAa,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,cAAc,EAAE,MAAM,GAAG,aAAa,CAS1G;AAED,MAAM,WAAW,oBAAoB;IACnC,iEAAiE;IACjE,aAAa,EAAE,OAAO,CAAC;IACvB,gDAAgD;IAChD,UAAU,EAAE,OAAO,CAAC;IACpB,oEAAoE;IACpE,UAAU,EAAE,OAAO,CAAC;IACpB,yDAAyD;IACzD,MAAM,EAAE,OAAO,CAAC;IAChB,6BAA6B;IAC7B,KAAK,EAAE,MAAM,CAAC;CACf;AAED,8DAA8D;AAC9D,wBAAgB,oBAAoB,CAAC,KAAK,EAAE,aAAa,EAAE,EAAE,cAAc,EAAE,MAAM,GAAG,oBAAoB,CAoCzG"}
|
|
@@ -0,0 +1,154 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* v2.100.0 — HYDRA · GUARD × CHAIN fusion ("temporal guarded replay").
|
|
3
|
+
*
|
|
4
|
+
* The two gems become one. The PROVENANCE CHAIN (v2.98) already records
|
|
5
|
+
* every codebook delta with a seq. The GUARD (v2.97) redacts stale content.
|
|
6
|
+
* Here the chain computes its OWN atrophy clock — no external age source —
|
|
7
|
+
* and drives the guard: a phrase that was added long ago and never touched
|
|
8
|
+
* since is STALE; replaying with `--guard` redacts exactly those.
|
|
9
|
+
*
|
|
10
|
+
* So you can replay the codebook at any past step, and the entries that had
|
|
11
|
+
* already gone cold by then expand only to their signed abstract — the AI
|
|
12
|
+
* gets the *shape* of old knowledge but cannot quote rotten detail. The
|
|
13
|
+
* staleness is derived deterministically from the chain's own history, and
|
|
14
|
+
* (the Padgett rule) only PROVEN-old entries go stale — anything we can't
|
|
15
|
+
* prove is old stays fresh.
|
|
16
|
+
*
|
|
17
|
+
* STABILITY: every function is total. Garbage chain / bad index / empty →
|
|
18
|
+
* the safest, smallest result, never a throw.
|
|
19
|
+
*/
|
|
20
|
+
import { replayChain } from "./chain.js";
|
|
21
|
+
/**
|
|
22
|
+
* For the codebook that exists at `uptoIndex`, the seq at which each
|
|
23
|
+
* surviving phrase was most recently ADDED (i.e. last touched). Pure;
|
|
24
|
+
* never throws. A phrase removed and re-added gets the later seq (it's
|
|
25
|
+
* "fresh" again); a phrase added once and left alone keeps its old seq.
|
|
26
|
+
*/
|
|
27
|
+
export function phraseAddedSeq(chain, uptoIndex) {
|
|
28
|
+
const seqOf = new Map();
|
|
29
|
+
if (!Array.isArray(chain))
|
|
30
|
+
return seqOf;
|
|
31
|
+
const end = Math.min(uptoIndex, chain.length - 1);
|
|
32
|
+
for (let i = 0; i <= end; i++) {
|
|
33
|
+
const d = chain[i];
|
|
34
|
+
if (!d)
|
|
35
|
+
continue;
|
|
36
|
+
if (Array.isArray(d.removed))
|
|
37
|
+
for (const p of d.removed)
|
|
38
|
+
seqOf.delete(p);
|
|
39
|
+
if (Array.isArray(d.added))
|
|
40
|
+
for (const a of d.added)
|
|
41
|
+
if (a && typeof a.phrase === "string")
|
|
42
|
+
seqOf.set(a.phrase, d.seq);
|
|
43
|
+
}
|
|
44
|
+
return seqOf;
|
|
45
|
+
}
|
|
46
|
+
/**
|
|
47
|
+
* Derive a trust map for the codebook at `uptoIndex` FROM THE CHAIN'S OWN
|
|
48
|
+
* HISTORY. An entry is stale when its age (deltas since last touched)
|
|
49
|
+
* exceeds `halfLifeDeltas * 2` — the same "proven-old, else fresh"
|
|
50
|
+
* discipline as the atrophy clock. Total; never throws.
|
|
51
|
+
*/
|
|
52
|
+
export function trustMapFromChain(chain, uptoIndex, halfLifeDeltas) {
|
|
53
|
+
const empty = { trustMap: {}, freshCount: 0, staleCount: 0, atIndex: uptoIndex };
|
|
54
|
+
try {
|
|
55
|
+
if (!Array.isArray(chain) || chain.length === 0 || !(halfLifeDeltas > 0))
|
|
56
|
+
return empty;
|
|
57
|
+
const at = Math.min(Math.max(0, uptoIndex), chain.length - 1);
|
|
58
|
+
const r = replayChain(chain, at);
|
|
59
|
+
if (!r.ok || !r.codebook)
|
|
60
|
+
return { ...empty, atIndex: at };
|
|
61
|
+
const addedSeq = phraseAddedSeq(chain, at);
|
|
62
|
+
const trustMap = {};
|
|
63
|
+
let fresh = 0, stale = 0;
|
|
64
|
+
for (const e of r.codebook.entries) {
|
|
65
|
+
if (!e || typeof e.phrase !== "string")
|
|
66
|
+
continue;
|
|
67
|
+
const added = addedSeq.get(e.phrase);
|
|
68
|
+
const age = typeof added === "number" ? at - added : 0; // unknown ⇒ treat as just-added (fresh)
|
|
69
|
+
if (age > halfLifeDeltas * 2) {
|
|
70
|
+
trustMap[e.sym] = "stale";
|
|
71
|
+
stale++;
|
|
72
|
+
}
|
|
73
|
+
else
|
|
74
|
+
fresh++;
|
|
75
|
+
}
|
|
76
|
+
return { trustMap, freshCount: fresh, staleCount: stale, atIndex: at };
|
|
77
|
+
}
|
|
78
|
+
catch {
|
|
79
|
+
return empty;
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
/**
|
|
83
|
+
* Replay the codebook at `index` AND attach the chain-derived trust map.
|
|
84
|
+
* Combine with expandGuarded(encoded, codebook, trustFromMap(trust.trustMap))
|
|
85
|
+
* to get a stale-aware, byte-lossless-for-fresh, redacted-for-cold view of
|
|
86
|
+
* any past step. Total; never throws.
|
|
87
|
+
*/
|
|
88
|
+
export function guardedReplay(chain, index, halfLifeDeltas) {
|
|
89
|
+
try {
|
|
90
|
+
if (!Array.isArray(chain) || chain.length === 0)
|
|
91
|
+
return { ok: false, codebook: null, trust: { trustMap: {}, freshCount: 0, staleCount: 0, atIndex: index }, reason: "empty chain" };
|
|
92
|
+
const at = Math.min(Math.max(0, index), chain.length - 1);
|
|
93
|
+
const r = replayChain(chain, at);
|
|
94
|
+
if (!r.ok || !r.codebook)
|
|
95
|
+
return { ok: false, codebook: null, trust: { trustMap: {}, freshCount: 0, staleCount: 0, atIndex: at }, reason: r.reason };
|
|
96
|
+
const trust = trustMapFromChain(chain, at, halfLifeDeltas);
|
|
97
|
+
return { ok: true, codebook: r.codebook, trust, reason: "replayed + trust derived from chain history" };
|
|
98
|
+
}
|
|
99
|
+
catch (e) {
|
|
100
|
+
return { ok: false, codebook: null, trust: { trustMap: {}, freshCount: 0, staleCount: 0, atIndex: index }, reason: `threw: ${e.message}` };
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
/** Prove the fusion's invariants over a real chain. Total. */
|
|
104
|
+
export function guardedChainGauntlet(chain, halfLifeDeltas) {
|
|
105
|
+
try {
|
|
106
|
+
// Nothing to prove on an empty/invalid chain → score 0 (not a vacuous pass).
|
|
107
|
+
if (!Array.isArray(chain) || chain.length === 0)
|
|
108
|
+
return { deterministic: false, freshAtTip: false, provenOnly: false, stable: true, score: 0 };
|
|
109
|
+
const a = trustMapFromChain(chain, chain.length - 1, halfLifeDeltas);
|
|
110
|
+
const b = trustMapFromChain(chain, chain.length - 1, halfLifeDeltas);
|
|
111
|
+
const deterministic = JSON.stringify(a.trustMap) === JSON.stringify(b.trustMap);
|
|
112
|
+
// Entries added in the LAST delta must not be stale at the tip.
|
|
113
|
+
const tip = chain[chain.length - 1];
|
|
114
|
+
let freshAtTip = true;
|
|
115
|
+
if (tip && Array.isArray(tip.added)) {
|
|
116
|
+
const r = replayChain(chain, chain.length - 1);
|
|
117
|
+
const cb = r.codebook;
|
|
118
|
+
if (cb) {
|
|
119
|
+
const tipPhrases = new Set(tip.added.map((x) => x.phrase));
|
|
120
|
+
for (const e of cb.entries)
|
|
121
|
+
if (tipPhrases.has(e.phrase) && a.trustMap[e.sym] === "stale")
|
|
122
|
+
freshAtTip = false;
|
|
123
|
+
}
|
|
124
|
+
}
|
|
125
|
+
// proven-only: every stale entry genuinely has age > halfLife*2.
|
|
126
|
+
let provenOnly = true;
|
|
127
|
+
const addedSeq = phraseAddedSeq(chain, chain.length - 1);
|
|
128
|
+
const r2 = replayChain(chain, chain.length - 1);
|
|
129
|
+
if (r2.codebook) {
|
|
130
|
+
for (const e of r2.codebook.entries) {
|
|
131
|
+
if (a.trustMap[e.sym] === "stale") {
|
|
132
|
+
const added = addedSeq.get(e.phrase);
|
|
133
|
+
const age = typeof added === "number" ? (chain.length - 1) - added : 0;
|
|
134
|
+
if (!(age > halfLifeDeltas * 2))
|
|
135
|
+
provenOnly = false;
|
|
136
|
+
}
|
|
137
|
+
}
|
|
138
|
+
}
|
|
139
|
+
let stable = true;
|
|
140
|
+
try {
|
|
141
|
+
guardedReplay(null, 5, 0);
|
|
142
|
+
trustMapFromChain(undefined, 0, -1);
|
|
143
|
+
}
|
|
144
|
+
catch {
|
|
145
|
+
stable = false;
|
|
146
|
+
}
|
|
147
|
+
const perfect = deterministic && freshAtTip && provenOnly && stable;
|
|
148
|
+
return { deterministic, freshAtTip, provenOnly, stable, score: perfect ? 100 : 0 };
|
|
149
|
+
}
|
|
150
|
+
catch {
|
|
151
|
+
return { deterministic: false, freshAtTip: false, provenOnly: false, stable: false, score: 0 };
|
|
152
|
+
}
|
|
153
|
+
}
|
|
154
|
+
//# sourceMappingURL=chain_guard.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"chain_guard.js","sourceRoot":"","sources":["../../src/hydra/chain_guard.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"chain_guard.test.d.ts","sourceRoot":"","sources":["../../src/hydra/chain_guard.test.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,85 @@
|
|
|
1
|
+
import { describe, it, expect } from "vitest";
|
|
2
|
+
import { forgeCodebook, compress, sha256Hex } from "./index.js";
|
|
3
|
+
import { appendToChain } from "./chain.js";
|
|
4
|
+
import { expandGuarded, trustFromMap } from "./guard.js";
|
|
5
|
+
import { trustMapFromChain, guardedReplay, guardedChainGauntlet, phraseAddedSeq } from "./chain_guard.js";
|
|
6
|
+
// An evolving corpus: "ancient axiom" lands at delta 0 and is never touched
|
|
7
|
+
// again; new phrases arrive in later deltas. So by the tip, the ancient one
|
|
8
|
+
// has aged out while the recent ones are fresh.
|
|
9
|
+
// Each "fact" line is repeated so its phrase earns a positive MDL slot. The
|
|
10
|
+
// corpus is cumulative: the ancient line lands at delta 0 and is never
|
|
11
|
+
// touched again; new lines arrive in later deltas → by the tip the ancient
|
|
12
|
+
// one has aged out while the brand-new one is fresh.
|
|
13
|
+
const L_ANCIENT = "ancient axiom holds forever and ever. ".repeat(4);
|
|
14
|
+
const L_MIDDLE = "middle rule connects all things here. ".repeat(4);
|
|
15
|
+
const L_RECENT = "recent fact arrives as the newest one. ".repeat(4);
|
|
16
|
+
const L_NEW = "brand new thing just landed today hot. ".repeat(4);
|
|
17
|
+
const STEPS = [
|
|
18
|
+
L_ANCIENT,
|
|
19
|
+
L_ANCIENT + "\n" + L_MIDDLE,
|
|
20
|
+
L_ANCIENT + "\n" + L_MIDDLE + "\n" + L_RECENT,
|
|
21
|
+
L_ANCIENT + "\n" + L_MIDDLE + "\n" + L_RECENT + "\n" + L_NEW,
|
|
22
|
+
];
|
|
23
|
+
function buildChain() {
|
|
24
|
+
let chain = [];
|
|
25
|
+
STEPS.forEach((c, i) => { chain = appendToChain(process.cwd(), chain, forgeCodebook(c, { minHits: 2 }).codebook, 1700000000000 + i).chain; });
|
|
26
|
+
return chain;
|
|
27
|
+
}
|
|
28
|
+
describe("v2.100 HYDRA · GUARD × CHAIN — temporal guarded replay", () => {
|
|
29
|
+
it("derives staleness from the chain's OWN history (deterministic)", () => {
|
|
30
|
+
const chain = buildChain();
|
|
31
|
+
const a = trustMapFromChain(chain, chain.length - 1, 1);
|
|
32
|
+
const b = trustMapFromChain(chain, chain.length - 1, 1);
|
|
33
|
+
expect(JSON.stringify(a.trustMap)).toBe(JSON.stringify(b.trustMap));
|
|
34
|
+
expect(a.staleCount + a.freshCount).toBeGreaterThan(0);
|
|
35
|
+
});
|
|
36
|
+
it("a phrase added at delta 0, untouched, is STALE at the tip; tip-added is FRESH", () => {
|
|
37
|
+
const chain = buildChain();
|
|
38
|
+
const t = trustMapFromChain(chain, chain.length - 1, 1); // halfLife*2 = 2 deltas
|
|
39
|
+
const r = guardedReplay(chain, chain.length - 1, 1);
|
|
40
|
+
const cb = r.codebook;
|
|
41
|
+
const ancient = cb.entries.find((e) => e.phrase.includes("ancient axiom"));
|
|
42
|
+
const brandNew = cb.entries.find((e) => e.phrase.includes("brand new thing"));
|
|
43
|
+
if (ancient)
|
|
44
|
+
expect(t.trustMap[ancient.sym]).toBe("stale"); // old → redacted
|
|
45
|
+
if (brandNew)
|
|
46
|
+
expect(t.trustMap[brandNew.sym]).toBeUndefined(); // just added → fresh
|
|
47
|
+
});
|
|
48
|
+
it("END-TO-END: guarded expansion redacts cold content, keeps fresh byte-exact", () => {
|
|
49
|
+
const chain = buildChain();
|
|
50
|
+
const tipCorpus = STEPS[STEPS.length - 1];
|
|
51
|
+
const r = guardedReplay(chain, chain.length - 1, 1);
|
|
52
|
+
const cb = r.codebook;
|
|
53
|
+
const encoded = compress(tipCorpus, cb);
|
|
54
|
+
const guarded = expandGuarded(encoded, cb, trustFromMap(r.trust.trustMap));
|
|
55
|
+
// ancient (cold) content is redacted; fresh content survives byte-exact.
|
|
56
|
+
expect(guarded.includes("ancient axiom holds forever")).toBe(false);
|
|
57
|
+
expect(guarded).toContain("brand new thing just landed");
|
|
58
|
+
// identity of the redacted region stays verifiable
|
|
59
|
+
const ancient = cb.entries.find((e) => e.phrase.includes("ancient axiom"));
|
|
60
|
+
expect(guarded).toContain(sha256Hex(ancient.phrase).slice(0, 16));
|
|
61
|
+
});
|
|
62
|
+
it("phraseAddedSeq tracks re-add freshness (remove then re-add ⇒ newer seq)", () => {
|
|
63
|
+
const chain = buildChain();
|
|
64
|
+
const seqs = phraseAddedSeq(chain, chain.length - 1);
|
|
65
|
+
// recent phrases were added at later seqs than ancient ones.
|
|
66
|
+
const ancientSeq = [...seqs.entries()].find(([p]) => p.includes("ancient axiom"))?.[1] ?? -1;
|
|
67
|
+
const newSeq = [...seqs.entries()].find(([p]) => p.includes("brand new thing"))?.[1] ?? -1;
|
|
68
|
+
expect(newSeq).toBeGreaterThan(ancientSeq);
|
|
69
|
+
});
|
|
70
|
+
it("guarded-chain gauntlet scores 100 (deterministic ∧ freshAtTip ∧ provenOnly ∧ stable)", () => {
|
|
71
|
+
const g = guardedChainGauntlet(buildChain(), 1);
|
|
72
|
+
expect(g.deterministic).toBe(true);
|
|
73
|
+
expect(g.freshAtTip).toBe(true);
|
|
74
|
+
expect(g.provenOnly).toBe(true);
|
|
75
|
+
expect(g.stable).toBe(true);
|
|
76
|
+
expect(g.score).toBe(100);
|
|
77
|
+
});
|
|
78
|
+
it("STABILITY — total on garbage", () => {
|
|
79
|
+
expect(() => trustMapFromChain(null, 0, 1)).not.toThrow();
|
|
80
|
+
expect(guardedReplay(undefined, 3, 1).ok).toBe(false);
|
|
81
|
+
expect(guardedChainGauntlet([], 1).score).toBe(0);
|
|
82
|
+
expect(trustMapFromChain([], 0, 1).staleCount).toBe(0);
|
|
83
|
+
});
|
|
84
|
+
});
|
|
85
|
+
//# sourceMappingURL=chain_guard.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"chain_guard.test.js","sourceRoot":"","sources":["../../src/hydra/chain_guard.test.ts"],"names":[],"mappings":"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"}
|
package/dist/hydra/index.d.ts
CHANGED
|
@@ -23,6 +23,7 @@ export * from "./analytic.js";
|
|
|
23
23
|
export * from "./attest.js";
|
|
24
24
|
export * from "./guard.js";
|
|
25
25
|
export * from "./chain.js";
|
|
26
|
+
export * from "./chain_guard.js";
|
|
26
27
|
import type { Codebook } from "./engine.js";
|
|
27
28
|
import { type ForgeOpts, type ForgeResult, type Gauntlet } from "./analytic.js";
|
|
28
29
|
import { type EnergyCert } from "./attest.js";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/hydra/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AAEH,cAAc,aAAa,CAAC;AAC5B,cAAc,WAAW,CAAC;AAC1B,cAAc,eAAe,CAAC;AAC9B,cAAc,aAAa,CAAC;AAC5B,cAAc,YAAY,CAAC;AAC3B,cAAc,YAAY,CAAC;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/hydra/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AAEH,cAAc,aAAa,CAAC;AAC5B,cAAc,WAAW,CAAC;AAC1B,cAAc,eAAe,CAAC;AAC9B,cAAc,aAAa,CAAC;AAC5B,cAAc,YAAY,CAAC;AAC3B,cAAc,YAAY,CAAC;AAC3B,cAAc,kBAAkB,CAAC;AAEjC,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AAE5C,OAAO,EAA2B,KAAK,SAAS,EAAE,KAAK,WAAW,EAAE,KAAK,QAAQ,EAAE,MAAM,eAAe,CAAC;AACzG,OAAO,EAAsD,KAAK,UAAU,EAAE,MAAM,aAAa,CAAC;AAClG,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAE1D;;;;;;;GAOG;AACH,MAAM,WAAW,gBAAgB;IAC/B,IAAI,EAAE,yBAAyB,CAAC;IAChC,CAAC,EAAE,CAAC,CAAC;IACL,QAAQ,EAAE,QAAQ,CAAC;IACnB,gDAAgD;IAChD,OAAO,EAAE,aAAa,CAAC;IACvB,qEAAqE;IACrE,OAAO,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,UAAU,EAAE,MAAM,CAAC;QAAC,WAAW,EAAE,MAAM,CAAA;KAAE,CAAC;IACnE,YAAY,EAAE,MAAM,CAAC;CACtB;AAED,wBAAgB,gBAAgB,CAAC,EAAE,EAAE,QAAQ,EAAE,OAAO,EAAE,aAAa,GAAG,gBAAgB,CAavF;AAED;;;;;GAKG;AACH,MAAM,WAAW,aAAa;IAC5B,KAAK,EAAE,MAAM,CAAC;IACd,GAAG,EAAE,MAAM,CAAC;IACZ,MAAM,EAAE,MAAM,CAAC;CAChB;AACD,wBAAgB,UAAU,CAAC,EAAE,EAAE,QAAQ,GAAG,aAAa,EAAE,CAMxD;AAED,MAAM,WAAW,gBAAgB;IAC/B,KAAK,EAAE,WAAW,CAAC;IACnB,QAAQ,EAAE,QAAQ,CAAC;IACnB,OAAO,EAAE,aAAa,CAAC;IACvB,MAAM,EAAE,UAAU,CAAC;IACnB,QAAQ,EAAE,gBAAgB,CAAC;IAC3B,MAAM,EAAE,aAAa,EAAE,CAAC;CACzB;AAED;;;GAGG;AACH,wBAAgB,UAAU,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,EAAE,IAAI,GAAE,SAAc,GAAG,gBAAgB,CAQ/G"}
|
package/dist/hydra/index.js
CHANGED
|
@@ -23,6 +23,7 @@ export * from "./analytic.js";
|
|
|
23
23
|
export * from "./attest.js";
|
|
24
24
|
export * from "./guard.js";
|
|
25
25
|
export * from "./chain.js";
|
|
26
|
+
export * from "./chain_guard.js";
|
|
26
27
|
import { sha256Hex } from "./engine.js";
|
|
27
28
|
import { forgeCodebook, gauntlet } from "./analytic.js";
|
|
28
29
|
import { signCodebook, mintEnergyCert, canonicalizeCodebook } from "./attest.js";
|
package/dist/hydra/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/hydra/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AAEH,cAAc,aAAa,CAAC;AAC5B,cAAc,WAAW,CAAC;AAC1B,cAAc,eAAe,CAAC;AAC9B,cAAc,aAAa,CAAC;AAC5B,cAAc,YAAY,CAAC;AAC3B,cAAc,YAAY,CAAC;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/hydra/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AAEH,cAAc,aAAa,CAAC;AAC5B,cAAc,WAAW,CAAC;AAC1B,cAAc,eAAe,CAAC;AAC9B,cAAc,aAAa,CAAC;AAC5B,cAAc,YAAY,CAAC;AAC3B,cAAc,YAAY,CAAC;AAC3B,cAAc,kBAAkB,CAAC;AAGjC,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AACxC,OAAO,EAAE,aAAa,EAAE,QAAQ,EAAmD,MAAM,eAAe,CAAC;AACzG,OAAO,EAAE,YAAY,EAAE,cAAc,EAAE,oBAAoB,EAAmB,MAAM,aAAa,CAAC;AAsBlG,MAAM,UAAU,gBAAgB,CAAC,EAAY,EAAE,OAAsB;IACnE,OAAO;QACL,IAAI,EAAE,yBAAyB;QAC/B,CAAC,EAAE,CAAC;QACJ,QAAQ,EAAE,EAAE;QACZ,OAAO;QACP,OAAO,EAAE;YACP,IAAI,EAAE,4HAA4H;YAClI,UAAU,EAAE,EAAE,CAAC,IAAI;YACnB,WAAW,EAAE,EAAE,CAAC,KAAK;SACtB;QACD,YAAY,EAAE,SAAS,CAAC,oBAAoB,CAAC,EAAE,CAAC,CAAC;KAClD,CAAC;AACJ,CAAC;AAaD,MAAM,UAAU,UAAU,CAAC,EAAY;IACrC,OAAO,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;QAC5B,KAAK,EAAE,gBAAgB,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,GAAG,CAAC,eAAe,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,MAAM,CAAC,EAAE;QACrF,GAAG,EAAE,CAAC,CAAC,GAAG;QACV,MAAM,EAAE,CAAC,CAAC,MAAM;KACjB,CAAC,CAAC,CAAC;AACN,CAAC;AAWD;;;GAGG;AACH,MAAM,UAAU,UAAU,CAAC,QAAgB,EAAE,MAAc,EAAE,EAAU,EAAE,OAAkB,EAAE;IAC3F,MAAM,KAAK,GAAG,aAAa,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;IAC1C,MAAM,CAAC,GAAG,QAAQ,CAAC,MAAM,EAAE,KAAK,CAAC,QAAQ,CAAC,CAAC;IAC3C,MAAM,OAAO,GAAG,YAAY,CAAC,QAAQ,EAAE,KAAK,CAAC,QAAQ,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC;IAC9D,MAAM,MAAM,GAAG,cAAc,CAAC,QAAQ,EAAE,KAAK,CAAC,QAAQ,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC;IAC/D,MAAM,QAAQ,GAAG,gBAAgB,CAAC,KAAK,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;IAC3D,MAAM,MAAM,GAAG,UAAU,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;IAC1C,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAE,CAAC,EAAE,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,CAAC;AACnE,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"probes.d.ts","sourceRoot":"","sources":["../../src/truth_gate/probes.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAKH,OAAO,KAAK,EAAE,KAAK,EAAE,YAAY,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;
|
|
1
|
+
{"version":3,"file":"probes.d.ts","sourceRoot":"","sources":["../../src/truth_gate/probes.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAKH,OAAO,KAAK,EAAE,KAAK,EAAE,YAAY,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AA6zFnE,eAAO,MAAM,UAAU,EAAE,aAAa,CAAC,KAAK,CAAU,CAAC;AAEvD,wBAAgB,SAAS,CAAC,EAAE,EAAE,MAAM,GAAG,KAAK,GAAG,SAAS,CAEvD;AAED,wBAAsB,QAAQ,CAAC,EAAE,EAAE,MAAM,EAAE,GAAG,EAAE,YAAY,GAAG,OAAO,CAAC,WAAW,CAAC,CAQlF"}
|
|
@@ -342,6 +342,35 @@ const probes = [
|
|
|
342
342
|
}
|
|
343
343
|
},
|
|
344
344
|
},
|
|
345
|
+
{
|
|
346
|
+
id: "probe.hydra.temporal_guarded_replay",
|
|
347
|
+
kind: "boolean",
|
|
348
|
+
description: "HYDRA GUARD × CHAIN fusion (v2.100.0 — every flow wired): the provenance chain computes its OWN atrophy clock and drives the guard. Replaying a past step, an entry added long ago and never touched is STALE and expands only to a signed abstract (cold knowledge redacted; fresh kept byte-exact). Trust is derived deterministically from chain history; only PROVEN-old entries go stale (Padgett: unknown ⇒ fresh). This probe builds a 4-step chain where an ancient phrase ages out while a tip phrase stays fresh, then asserts END-TO-END: guarded expansion redacts the cold phrase, keeps the fresh one byte-exact, and the fusion gauntlet = 100 (deterministic ∧ freshAtTip ∧ provenOnly ∧ stable).",
|
|
349
|
+
run: async (ctx) => {
|
|
350
|
+
const t0 = Date.now();
|
|
351
|
+
void ctx;
|
|
352
|
+
try {
|
|
353
|
+
const H = await import("../hydra/index.js");
|
|
354
|
+
const anc = "ancient axiom holds forever and ever. ".repeat(4);
|
|
355
|
+
const nw = "brand new thing just landed today hot. ".repeat(4);
|
|
356
|
+
const steps = [anc, anc + "\nx rule one connects here now. ".repeat(4), anc + "\nx rule one connects here now. ".repeat(4) + "\ny fact two arrives newest one. ".repeat(4), anc + "\nx rule one connects here now. ".repeat(4) + "\ny fact two arrives newest one. ".repeat(4) + "\n" + nw];
|
|
357
|
+
let chain = [];
|
|
358
|
+
steps.forEach((c, i) => { chain = H.appendToChain(process.cwd(), chain, H.forgeCodebook(c, { minHits: 2 }).codebook, 1700000000000 + i).chain; });
|
|
359
|
+
const tipCorpus = steps[steps.length - 1];
|
|
360
|
+
const r = H.guardedReplay(chain, chain.length - 1, 1);
|
|
361
|
+
const cb = r.codebook;
|
|
362
|
+
const guarded = H.expandGuarded(H.compress(tipCorpus, cb), cb, H.trustFromMap(r.trust.trustMap));
|
|
363
|
+
const coldRedacted = !guarded.includes("ancient axiom holds forever and ever");
|
|
364
|
+
const freshKept = guarded.includes("brand new thing just landed today hot");
|
|
365
|
+
const g = H.guardedChainGauntlet(chain, 1);
|
|
366
|
+
const ok = g.score === 100 && coldRedacted && freshKept && r.trust.staleCount > 0;
|
|
367
|
+
return { value: ok ? 1 : 0, evidence: `gauntlet=${g.score} coldRedacted=${coldRedacted} freshKept=${freshKept} stale=${r.trust.staleCount} fresh=${r.trust.freshCount} det=${g.deterministic} provenOnly=${g.provenOnly}`, dtMs: Date.now() - t0 };
|
|
368
|
+
}
|
|
369
|
+
catch (e) {
|
|
370
|
+
return { value: 0, evidence: `threw: ${e.message}`, dtMs: Date.now() - t0 };
|
|
371
|
+
}
|
|
372
|
+
},
|
|
373
|
+
},
|
|
345
374
|
{
|
|
346
375
|
id: "probe.hydra.provenance_chain",
|
|
347
376
|
kind: "boolean",
|