@mneme-ai/core 2.19.47 → 2.19.49
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/chronosheaf/base_space.d.ts +125 -0
- package/dist/chronosheaf/base_space.d.ts.map +1 -0
- package/dist/chronosheaf/base_space.js +216 -0
- package/dist/chronosheaf/base_space.js.map +1 -0
- package/dist/chronosheaf/index.d.ts +5 -0
- package/dist/chronosheaf/index.d.ts.map +1 -1
- package/dist/chronosheaf/index.js +5 -0
- package/dist/chronosheaf/index.js.map +1 -1
- package/dist/chronosheaf/live_update.d.ts +221 -0
- package/dist/chronosheaf/live_update.d.ts.map +1 -0
- package/dist/chronosheaf/live_update.js +332 -0
- package/dist/chronosheaf/live_update.js.map +1 -0
- package/dist/chronosheaf/live_update.test.d.ts +16 -0
- package/dist/chronosheaf/live_update.test.d.ts.map +1 -0
- package/dist/chronosheaf/live_update.test.js +405 -0
- package/dist/chronosheaf/live_update.test.js.map +1 -0
- package/dist/chronosheaf/storage.d.ts +90 -0
- package/dist/chronosheaf/storage.d.ts.map +1 -0
- package/dist/chronosheaf/storage.js +242 -0
- package/dist/chronosheaf/storage.js.map +1 -0
- package/dist/chronosheaf/storage.test.d.ts +2 -0
- package/dist/chronosheaf/storage.test.d.ts.map +1 -0
- package/dist/chronosheaf/storage.test.js +102 -0
- package/dist/chronosheaf/storage.test.js.map +1 -0
- package/dist/cosmic/aurelian_v1948.test.d.ts +2 -0
- package/dist/cosmic/aurelian_v1948.test.d.ts.map +1 -0
- package/dist/cosmic/aurelian_v1948.test.js +62 -0
- package/dist/cosmic/aurelian_v1948.test.js.map +1 -0
- package/dist/cosmic/aurelian_v1949.test.d.ts +2 -0
- package/dist/cosmic/aurelian_v1949.test.d.ts.map +1 -0
- package/dist/cosmic/aurelian_v1949.test.js +48 -0
- package/dist/cosmic/aurelian_v1949.test.js.map +1 -0
- package/dist/whats_new.d.ts.map +1 -1
- package/dist/whats_new.js +16 -0
- package/dist/whats_new.js.map +1 -1
- package/package.json +1 -1
|
@@ -0,0 +1,405 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* v2.19.48 — P3 base_space + P4 live_update test suite.
|
|
3
|
+
*
|
|
4
|
+
* Coverage targets:
|
|
5
|
+
* - base_space: CommitDag (ancestor cone, LCA, intersection), TimeInterval
|
|
6
|
+
* (contains, intersect), ScaleBand subset ordering, Presheaf
|
|
7
|
+
* (assign / sectionAt / restrict / null-safety).
|
|
8
|
+
* - live_update: empty cover early-exit, single-cycle happy path,
|
|
9
|
+
* H¹ alarm emission, persistence diagram birth/death, RG promotion,
|
|
10
|
+
* probe selection, Aczel self-inconsistency, preflight budget guard,
|
|
11
|
+
* event-cap memory bound, error-handler resilience.
|
|
12
|
+
*
|
|
13
|
+
* Total target: 30+ tests + cross-vector system test.
|
|
14
|
+
*/
|
|
15
|
+
import { describe, it, expect } from "vitest";
|
|
16
|
+
import { CommitDag, makeInterval, intervalContains, intervalIntersect, scaleIndex, scaleSubset, makeOpen, intersectOpens, Presheaf, SCALE_BANDS, } from "./base_space.js";
|
|
17
|
+
import { chronoSheafUpdate, newUpdateState, chronoSlo, preflightBudget, buildSelfAuditCover, } from "./live_update.js";
|
|
18
|
+
import { quineAtom, liarHyperset } from "./aczel.js";
|
|
19
|
+
import { normalise } from "./free_energy.js";
|
|
20
|
+
// ─── base_space tests ──────────────────────────────────────────────────
|
|
21
|
+
describe("v2.19.48 CHRONOSHEAF P3 · CommitDag", () => {
|
|
22
|
+
it("addCommit rejects invalid sha", () => {
|
|
23
|
+
const d = new CommitDag();
|
|
24
|
+
expect(() => d.addCommit("", [])).toThrow();
|
|
25
|
+
});
|
|
26
|
+
it("cone of a root commit contains only itself", () => {
|
|
27
|
+
const d = new CommitDag();
|
|
28
|
+
d.addCommit("root", []);
|
|
29
|
+
const c = d.cone("root");
|
|
30
|
+
expect(c.has("root")).toBe(true);
|
|
31
|
+
expect(c.size).toBe(1);
|
|
32
|
+
});
|
|
33
|
+
it("cone of a child contains parents transitively", () => {
|
|
34
|
+
const d = new CommitDag();
|
|
35
|
+
d.addCommit("a", []);
|
|
36
|
+
d.addCommit("b", ["a"]);
|
|
37
|
+
d.addCommit("c", ["b"]);
|
|
38
|
+
const c = d.cone("c");
|
|
39
|
+
expect(c.has("a")).toBe(true);
|
|
40
|
+
expect(c.has("b")).toBe(true);
|
|
41
|
+
expect(c.has("c")).toBe(true);
|
|
42
|
+
});
|
|
43
|
+
it("isAncestorOf detects strict ancestry", () => {
|
|
44
|
+
const d = new CommitDag();
|
|
45
|
+
d.addCommit("a", []);
|
|
46
|
+
d.addCommit("b", ["a"]);
|
|
47
|
+
expect(d.isAncestorOf("a", "b")).toBe(true);
|
|
48
|
+
expect(d.isAncestorOf("b", "a")).toBe(false);
|
|
49
|
+
});
|
|
50
|
+
});
|
|
51
|
+
describe("v2.19.48 CHRONOSHEAF P3 · TimeInterval", () => {
|
|
52
|
+
it("makeInterval rejects inverted bounds", () => {
|
|
53
|
+
expect(() => makeInterval(10, 5)).toThrow();
|
|
54
|
+
});
|
|
55
|
+
it("makeInterval rejects non-finite bounds", () => {
|
|
56
|
+
expect(() => makeInterval(NaN, 5)).toThrow();
|
|
57
|
+
expect(() => makeInterval(0, Infinity)).toThrow();
|
|
58
|
+
});
|
|
59
|
+
it("intervalContains is half-open", () => {
|
|
60
|
+
const iv = makeInterval(10, 20);
|
|
61
|
+
expect(intervalContains(iv, 10)).toBe(true);
|
|
62
|
+
expect(intervalContains(iv, 19.999)).toBe(true);
|
|
63
|
+
expect(intervalContains(iv, 20)).toBe(false);
|
|
64
|
+
});
|
|
65
|
+
it("intervalIntersect returns null on disjoint", () => {
|
|
66
|
+
const a = makeInterval(0, 5);
|
|
67
|
+
const b = makeInterval(10, 15);
|
|
68
|
+
expect(intervalIntersect(a, b)).toBeNull();
|
|
69
|
+
});
|
|
70
|
+
it("intervalIntersect returns overlap on overlap", () => {
|
|
71
|
+
const a = makeInterval(0, 10);
|
|
72
|
+
const b = makeInterval(5, 15);
|
|
73
|
+
const r = intervalIntersect(a, b);
|
|
74
|
+
expect(r).toEqual({ startMs: 5, endMs: 10 });
|
|
75
|
+
});
|
|
76
|
+
});
|
|
77
|
+
describe("v2.19.48 CHRONOSHEAF P3 · ScaleBand", () => {
|
|
78
|
+
it("file ⊆ org by subset relation", () => {
|
|
79
|
+
expect(scaleSubset("file", "org")).toBe(true);
|
|
80
|
+
});
|
|
81
|
+
it("org ⊄ file", () => {
|
|
82
|
+
expect(scaleSubset("org", "file")).toBe(false);
|
|
83
|
+
});
|
|
84
|
+
it("scaleIndex is monotonic across SCALE_BANDS", () => {
|
|
85
|
+
for (let i = 0; i + 1 < SCALE_BANDS.length; i++) {
|
|
86
|
+
expect(scaleIndex(SCALE_BANDS[i])).toBeLessThan(scaleIndex(SCALE_BANDS[i + 1]));
|
|
87
|
+
}
|
|
88
|
+
});
|
|
89
|
+
});
|
|
90
|
+
describe("v2.19.48 CHRONOSHEAF P3 · intersectOpens", () => {
|
|
91
|
+
it("intersects two opens at their LCA in the DAG", () => {
|
|
92
|
+
const dag = new CommitDag();
|
|
93
|
+
dag.addCommit("root", []);
|
|
94
|
+
dag.addCommit("a", ["root"]);
|
|
95
|
+
dag.addCommit("b", ["root"]);
|
|
96
|
+
const t = makeInterval(0, 100);
|
|
97
|
+
const oA = makeOpen("a", t, "repo");
|
|
98
|
+
const oB = makeOpen("b", t, "repo");
|
|
99
|
+
const inter = intersectOpens(dag, oA, oB);
|
|
100
|
+
expect(inter).not.toBeNull();
|
|
101
|
+
expect(inter.commitConeRoot).toBe("root");
|
|
102
|
+
});
|
|
103
|
+
it("returns null when no common ancestor exists", () => {
|
|
104
|
+
const dag = new CommitDag();
|
|
105
|
+
dag.addCommit("x", []);
|
|
106
|
+
dag.addCommit("y", []);
|
|
107
|
+
const t = makeInterval(0, 100);
|
|
108
|
+
const oA = makeOpen("x", t, "repo");
|
|
109
|
+
const oB = makeOpen("y", t, "repo");
|
|
110
|
+
expect(intersectOpens(dag, oA, oB)).toBeNull();
|
|
111
|
+
});
|
|
112
|
+
it("returns null when time intervals disjoint", () => {
|
|
113
|
+
const dag = new CommitDag();
|
|
114
|
+
dag.addCommit("r", []);
|
|
115
|
+
dag.addCommit("a", ["r"]);
|
|
116
|
+
const oA = makeOpen("a", makeInterval(0, 5), "repo");
|
|
117
|
+
const oB = makeOpen("a", makeInterval(10, 15), "repo");
|
|
118
|
+
expect(intersectOpens(dag, oA, oB)).toBeNull();
|
|
119
|
+
});
|
|
120
|
+
});
|
|
121
|
+
describe("v2.19.48 CHRONOSHEAF P3 · Presheaf", () => {
|
|
122
|
+
it("assignSection rejects length mismatch", () => {
|
|
123
|
+
const p = new Presheaf();
|
|
124
|
+
const o = makeOpen("c", makeInterval(0, 1), "repo");
|
|
125
|
+
p.registerClaims(o, ["a", "b"]);
|
|
126
|
+
expect(() => p.assignSection(o, [1, 2, 3])).toThrow();
|
|
127
|
+
});
|
|
128
|
+
it("assignSection rejects non-finite belief", () => {
|
|
129
|
+
const p = new Presheaf();
|
|
130
|
+
const o = makeOpen("c", makeInterval(0, 1), "repo");
|
|
131
|
+
p.registerClaims(o, ["a"]);
|
|
132
|
+
expect(() => p.assignSection(o, [NaN])).toThrow();
|
|
133
|
+
});
|
|
134
|
+
it("restrict projects shared claims correctly", () => {
|
|
135
|
+
const p = new Presheaf();
|
|
136
|
+
const u = makeOpen("c", makeInterval(0, 1), "repo");
|
|
137
|
+
const v = makeOpen("c", makeInterval(0, 1), "package");
|
|
138
|
+
p.registerClaims(u, ["a", "b", "c"]);
|
|
139
|
+
p.registerClaims(v, ["b", "c"]);
|
|
140
|
+
p.assignSection(u, [10, 20, 30]);
|
|
141
|
+
const r = p.restrict(u, v);
|
|
142
|
+
expect(r).toEqual([20, 30]);
|
|
143
|
+
});
|
|
144
|
+
it("sectionAt returns null for unassigned open", () => {
|
|
145
|
+
const p = new Presheaf();
|
|
146
|
+
const o = makeOpen("c", makeInterval(0, 1), "repo");
|
|
147
|
+
expect(p.sectionAt(o)).toBeNull();
|
|
148
|
+
});
|
|
149
|
+
});
|
|
150
|
+
// ─── live_update tests ─────────────────────────────────────────────────
|
|
151
|
+
function dummyOpen(id) {
|
|
152
|
+
const t = makeInterval(0, 1000);
|
|
153
|
+
const o = makeOpen("root", t, "repo");
|
|
154
|
+
return { ...o, id };
|
|
155
|
+
}
|
|
156
|
+
describe("v2.19.48 CHRONOSHEAF P4 · chronoSheafUpdate happy path", () => {
|
|
157
|
+
it("empty cover early-exit returns clean summary", () => {
|
|
158
|
+
const state = newUpdateState();
|
|
159
|
+
const events = [];
|
|
160
|
+
const r = chronoSheafUpdate({ commit: "x", nowMs: 1000, cover: [], claims: [], evidence: [] }, state, (e) => events.push(e));
|
|
161
|
+
expect(r.contradictionDetected).toBe(false);
|
|
162
|
+
expect(r.alarmsFired).toBe(0);
|
|
163
|
+
expect(events.length).toBe(0);
|
|
164
|
+
});
|
|
165
|
+
it("cover with consistent claims → no H¹ alarm", () => {
|
|
166
|
+
const state = newUpdateState();
|
|
167
|
+
const events = [];
|
|
168
|
+
const cover = [dummyOpen("A"), dummyOpen("B")];
|
|
169
|
+
const input = {
|
|
170
|
+
commit: "c1", nowMs: 1000,
|
|
171
|
+
cover,
|
|
172
|
+
claims: [{ claimId: "tool_count", value: 100, sites: ["A", "B"] }],
|
|
173
|
+
evidence: [
|
|
174
|
+
{ site: "A", confidence: 0.9, source: "registry" },
|
|
175
|
+
{ site: "B", confidence: 0.9, source: "cli" },
|
|
176
|
+
],
|
|
177
|
+
};
|
|
178
|
+
const r = chronoSheafUpdate(input, state, (e) => events.push(e));
|
|
179
|
+
expect(r.h1).toBe(0);
|
|
180
|
+
expect(r.alarmsFired).toBe(0);
|
|
181
|
+
});
|
|
182
|
+
it("cover with 3-cycle (no triple overlap) → H¹ = 1 alarm", () => {
|
|
183
|
+
const state = newUpdateState();
|
|
184
|
+
const events = [];
|
|
185
|
+
const cover = [dummyOpen("A"), dummyOpen("B"), dummyOpen("C")];
|
|
186
|
+
// Three claims, each pair-shared but no triple-shared.
|
|
187
|
+
const input = {
|
|
188
|
+
commit: "c1", nowMs: 1000,
|
|
189
|
+
cover,
|
|
190
|
+
claims: [
|
|
191
|
+
{ claimId: "ab", value: 1, sites: ["A", "B"] },
|
|
192
|
+
{ claimId: "bc", value: 1, sites: ["B", "C"] },
|
|
193
|
+
{ claimId: "ac", value: 1, sites: ["A", "C"] },
|
|
194
|
+
],
|
|
195
|
+
evidence: [
|
|
196
|
+
{ site: "A", confidence: 0.9, source: "v1" },
|
|
197
|
+
{ site: "B", confidence: 0.9, source: "v2" },
|
|
198
|
+
{ site: "C", confidence: 0.9, source: "v3" },
|
|
199
|
+
],
|
|
200
|
+
};
|
|
201
|
+
const r = chronoSheafUpdate(input, state, (e) => events.push(e));
|
|
202
|
+
expect(r.h1).toBe(1);
|
|
203
|
+
expect(r.alarmsFired).toBe(1);
|
|
204
|
+
const alarm = events.find((e) => e.kind === "h1_alarm");
|
|
205
|
+
expect(alarm).toBeTruthy();
|
|
206
|
+
});
|
|
207
|
+
});
|
|
208
|
+
describe("v2.19.48 CHRONOSHEAF P4 · persistence diagram + RG promotion", () => {
|
|
209
|
+
it("class birth then death produces a persistence pair", () => {
|
|
210
|
+
const state = newUpdateState();
|
|
211
|
+
const events = [];
|
|
212
|
+
const cover = [dummyOpen("A"), dummyOpen("B"), dummyOpen("C")];
|
|
213
|
+
const input1 = {
|
|
214
|
+
commit: "c1", nowMs: 1000,
|
|
215
|
+
cover,
|
|
216
|
+
claims: [
|
|
217
|
+
{ claimId: "ab", value: 1, sites: ["A", "B"] },
|
|
218
|
+
{ claimId: "bc", value: 1, sites: ["B", "C"] },
|
|
219
|
+
{ claimId: "ac", value: 1, sites: ["A", "C"] },
|
|
220
|
+
],
|
|
221
|
+
evidence: [
|
|
222
|
+
{ site: "A", confidence: 0.9, source: "v1" },
|
|
223
|
+
{ site: "B", confidence: 0.9, source: "v2" },
|
|
224
|
+
{ site: "C", confidence: 0.9, source: "v3" },
|
|
225
|
+
],
|
|
226
|
+
};
|
|
227
|
+
chronoSheafUpdate(input1, state, (e) => events.push(e));
|
|
228
|
+
expect(state.activeClasses.size).toBeGreaterThan(0);
|
|
229
|
+
// Cycle 2: cover with no triple → class persists OR dies depending on detection
|
|
230
|
+
const input2 = {
|
|
231
|
+
...input1, nowMs: 2000,
|
|
232
|
+
claims: [{ claimId: "tool_count", value: 100, sites: ["A", "B"] }],
|
|
233
|
+
};
|
|
234
|
+
chronoSheafUpdate(input2, state, (e) => events.push(e));
|
|
235
|
+
// After second cycle, the old class should have died (not detected again).
|
|
236
|
+
expect(events.some((e) => e.kind === "class_death")).toBe(true);
|
|
237
|
+
});
|
|
238
|
+
it("RG promotion fires after relevantThresholdMs elapses", () => {
|
|
239
|
+
const state = newUpdateState();
|
|
240
|
+
const events = [];
|
|
241
|
+
const cover = [dummyOpen("A"), dummyOpen("B"), dummyOpen("C")];
|
|
242
|
+
const claims = [
|
|
243
|
+
{ claimId: "ab", value: 1, sites: ["A", "B"] },
|
|
244
|
+
{ claimId: "bc", value: 1, sites: ["B", "C"] },
|
|
245
|
+
{ claimId: "ac", value: 1, sites: ["A", "C"] },
|
|
246
|
+
];
|
|
247
|
+
const evidence = [
|
|
248
|
+
{ site: "A", confidence: 0.9, source: "v1" },
|
|
249
|
+
{ site: "B", confidence: 0.9, source: "v2" },
|
|
250
|
+
{ site: "C", confidence: 0.9, source: "v3" },
|
|
251
|
+
];
|
|
252
|
+
chronoSheafUpdate({ commit: "c1", nowMs: 1000, cover, claims, evidence, relevantThresholdMs: 100 }, state, (e) => events.push(e));
|
|
253
|
+
chronoSheafUpdate({ commit: "c1", nowMs: 2000, cover, claims, evidence, relevantThresholdMs: 100 }, state, (e) => events.push(e));
|
|
254
|
+
expect(events.some((e) => e.kind === "promote_relevant")).toBe(true);
|
|
255
|
+
});
|
|
256
|
+
});
|
|
257
|
+
describe("v2.19.48 CHRONOSHEAF P4 · free-energy probe + Aczel self-check", () => {
|
|
258
|
+
it("selects probe with minimum G", () => {
|
|
259
|
+
const state = newUpdateState();
|
|
260
|
+
const events = [];
|
|
261
|
+
const cover = [dummyOpen("A")];
|
|
262
|
+
const input = {
|
|
263
|
+
commit: "c1", nowMs: 1000,
|
|
264
|
+
cover, claims: [], evidence: [{ site: "A", confidence: 0.9, source: "v" }],
|
|
265
|
+
probeCandidates: [
|
|
266
|
+
{ id: "good", predictedObs: normalise([0.9, 0.1]), predictedQz: normalise([0.7, 0.3]) },
|
|
267
|
+
{ id: "bad", predictedObs: normalise([0.1, 0.9]), predictedQz: normalise([0.5, 0.5]) },
|
|
268
|
+
],
|
|
269
|
+
probeScoring: { preferredObs: normalise([0.9, 0.1]), priorZ: normalise([0.5, 0.5]) },
|
|
270
|
+
};
|
|
271
|
+
const r = chronoSheafUpdate(input, state, (e) => events.push(e));
|
|
272
|
+
expect(r.probeSelected).toBe("good");
|
|
273
|
+
});
|
|
274
|
+
it("emits self_inconsistency for LIAR atoms", () => {
|
|
275
|
+
const state = newUpdateState();
|
|
276
|
+
const events = [];
|
|
277
|
+
const input = {
|
|
278
|
+
commit: "c1", nowMs: 1000,
|
|
279
|
+
cover: [dummyOpen("A")], claims: [],
|
|
280
|
+
evidence: [{ site: "A", confidence: 0.9, source: "v" }],
|
|
281
|
+
reflexiveStalks: [{ id: "honesty-gate", current: liarHyperset("L") }],
|
|
282
|
+
};
|
|
283
|
+
const r = chronoSheafUpdate(input, state, (e) => events.push(e));
|
|
284
|
+
expect(r.selfInconsistencies).toBe(1);
|
|
285
|
+
expect(events.some((e) => e.kind === "self_inconsistency")).toBe(true);
|
|
286
|
+
});
|
|
287
|
+
it("trustworthy Quine atom does NOT trigger self-inconsistency", () => {
|
|
288
|
+
const state = newUpdateState();
|
|
289
|
+
const events = [];
|
|
290
|
+
chronoSheafUpdate({
|
|
291
|
+
commit: "c1", nowMs: 1000,
|
|
292
|
+
cover: [dummyOpen("A")], claims: [],
|
|
293
|
+
evidence: [{ site: "A", confidence: 0.9, source: "v" }],
|
|
294
|
+
reflexiveStalks: [{ id: "trust-stalk", current: quineAtom() }],
|
|
295
|
+
}, state, (e) => events.push(e));
|
|
296
|
+
expect(events.some((e) => e.kind === "self_inconsistency")).toBe(false);
|
|
297
|
+
});
|
|
298
|
+
});
|
|
299
|
+
describe("v2.19.48 CHRONOSHEAF P4 · safety + budget + memory", () => {
|
|
300
|
+
it("preflightBudget rejects cover > 64", () => {
|
|
301
|
+
const cover = Array.from({ length: 100 }, (_, i) => dummyOpen(`S${i}`));
|
|
302
|
+
const r = preflightBudget({ commit: "c", nowMs: 0, cover, claims: [], evidence: [] });
|
|
303
|
+
expect(r.ok).toBe(false);
|
|
304
|
+
});
|
|
305
|
+
it("preflightBudget rejects claims > 1000", () => {
|
|
306
|
+
const cover = [dummyOpen("A")];
|
|
307
|
+
const claims = Array.from({ length: 2000 }, (_, i) => ({ claimId: `c${i}`, value: 0, sites: ["A"] }));
|
|
308
|
+
const r = preflightBudget({ commit: "c", nowMs: 0, cover, claims, evidence: [] });
|
|
309
|
+
expect(r.ok).toBe(false);
|
|
310
|
+
});
|
|
311
|
+
it("preflightBudget accepts realistic input", () => {
|
|
312
|
+
const cover = Array.from({ length: 20 }, (_, i) => dummyOpen(`S${i}`));
|
|
313
|
+
const claims = Array.from({ length: 100 }, (_, i) => ({ claimId: `c${i}`, value: 0, sites: ["S0"] }));
|
|
314
|
+
expect(preflightBudget({ commit: "c", nowMs: 0, cover, claims, evidence: [] }).ok).toBe(true);
|
|
315
|
+
});
|
|
316
|
+
it("event log capped at 10000 entries", () => {
|
|
317
|
+
const state = newUpdateState();
|
|
318
|
+
const cover = [dummyOpen("A")];
|
|
319
|
+
for (let i = 0; i < 10500; i++) {
|
|
320
|
+
chronoSheafUpdate({
|
|
321
|
+
commit: "c", nowMs: i, cover, claims: [],
|
|
322
|
+
evidence: [],
|
|
323
|
+
}, state, () => { });
|
|
324
|
+
}
|
|
325
|
+
expect(state.events.length).toBeLessThanOrEqual(10_000);
|
|
326
|
+
});
|
|
327
|
+
it("emitter throws are swallowed (resilience)", () => {
|
|
328
|
+
const state = newUpdateState();
|
|
329
|
+
const cover = [dummyOpen("A"), dummyOpen("B"), dummyOpen("C")];
|
|
330
|
+
const r = chronoSheafUpdate({
|
|
331
|
+
commit: "c", nowMs: 1000, cover,
|
|
332
|
+
claims: [
|
|
333
|
+
{ claimId: "ab", value: 1, sites: ["A", "B"] },
|
|
334
|
+
{ claimId: "bc", value: 1, sites: ["B", "C"] },
|
|
335
|
+
{ claimId: "ac", value: 1, sites: ["A", "C"] },
|
|
336
|
+
],
|
|
337
|
+
evidence: [
|
|
338
|
+
{ site: "A", confidence: 0.9, source: "v" },
|
|
339
|
+
{ site: "B", confidence: 0.9, source: "v" },
|
|
340
|
+
{ site: "C", confidence: 0.9, source: "v" },
|
|
341
|
+
],
|
|
342
|
+
}, state, () => { throw new Error("emitter explodes"); });
|
|
343
|
+
expect(r.alarmsFired).toBe(1);
|
|
344
|
+
});
|
|
345
|
+
});
|
|
346
|
+
describe("v2.19.48 CHRONOSHEAF P4 · SLO + cover helpers", () => {
|
|
347
|
+
it("chronoSlo summarises detected contradictions", () => {
|
|
348
|
+
const state = newUpdateState();
|
|
349
|
+
const cover = [dummyOpen("A"), dummyOpen("B"), dummyOpen("C")];
|
|
350
|
+
chronoSheafUpdate({
|
|
351
|
+
commit: "c", nowMs: 1000, cover,
|
|
352
|
+
claims: [
|
|
353
|
+
{ claimId: "ab", value: 1, sites: ["A", "B"] },
|
|
354
|
+
{ claimId: "bc", value: 1, sites: ["B", "C"] },
|
|
355
|
+
{ claimId: "ac", value: 1, sites: ["A", "C"] },
|
|
356
|
+
],
|
|
357
|
+
evidence: [
|
|
358
|
+
{ site: "A", confidence: 0.9, source: "v" },
|
|
359
|
+
{ site: "B", confidence: 0.9, source: "v" },
|
|
360
|
+
{ site: "C", confidence: 0.9, source: "v" },
|
|
361
|
+
],
|
|
362
|
+
}, state, () => { });
|
|
363
|
+
const s = chronoSlo(state);
|
|
364
|
+
expect(s.totalCycles).toBe(1);
|
|
365
|
+
expect(s.contradictionsDetected).toBe(1);
|
|
366
|
+
expect(s.activeContradictions).toBe(1);
|
|
367
|
+
});
|
|
368
|
+
it("buildSelfAuditCover creates one open per site", () => {
|
|
369
|
+
const dag = new CommitDag();
|
|
370
|
+
dag.addCommit("root", []);
|
|
371
|
+
const cover = buildSelfAuditCover(dag, "root", ["registry", "cli", "release_manifest"], 1000);
|
|
372
|
+
expect(cover.length).toBe(3);
|
|
373
|
+
expect(new Set(cover.map((o) => o.id)).size).toBe(3);
|
|
374
|
+
});
|
|
375
|
+
});
|
|
376
|
+
// ─── system test: the v2.19.40 honesty.audit_whats_new bug class ───────
|
|
377
|
+
describe("v2.19.48 CHRONOSHEAF · SYSTEM TEST (the v2.19.40 honesty bug class)", () => {
|
|
378
|
+
it("catches the v2.19.40 N1 case: registry says 712 but CLI says 711 (no triple kills H¹)", () => {
|
|
379
|
+
const state = newUpdateState();
|
|
380
|
+
const events = [];
|
|
381
|
+
const cover = [dummyOpen("registry"), dummyOpen("cli"), dummyOpen("release_manifest")];
|
|
382
|
+
const input = {
|
|
383
|
+
commit: "c1", nowMs: 1000,
|
|
384
|
+
cover,
|
|
385
|
+
// Three claim sites with pairwise shared but no triple overlap.
|
|
386
|
+
claims: [
|
|
387
|
+
{ claimId: "count", value: 712, sites: ["registry", "cli"] },
|
|
388
|
+
{ claimId: "count2", value: 711, sites: ["cli", "release_manifest"] },
|
|
389
|
+
{ claimId: "count3", value: 712, sites: ["registry", "release_manifest"] },
|
|
390
|
+
],
|
|
391
|
+
evidence: [
|
|
392
|
+
{ site: "registry", confidence: 0.95, source: "registry-scan" },
|
|
393
|
+
{ site: "cli", confidence: 0.95, source: "cli-introspect" },
|
|
394
|
+
{ site: "release_manifest", confidence: 0.95, source: "manifest-parse" },
|
|
395
|
+
],
|
|
396
|
+
};
|
|
397
|
+
const r = chronoSheafUpdate(input, state, (e) => events.push(e));
|
|
398
|
+
// 3-cycle pairwise without triple → H¹ ≥ 1 → alarm.
|
|
399
|
+
expect(r.h1).toBeGreaterThanOrEqual(1);
|
|
400
|
+
expect(r.alarmsFired).toBeGreaterThanOrEqual(1);
|
|
401
|
+
const alarm = events.find((e) => e.kind === "h1_alarm");
|
|
402
|
+
expect(alarm).toBeTruthy();
|
|
403
|
+
});
|
|
404
|
+
});
|
|
405
|
+
//# sourceMappingURL=live_update.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"live_update.test.js","sourceRoot":"","sources":["../../src/chronosheaf/live_update.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,90 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* v2.19.49 — CHRONOSHEAF storage adapter (P5 spec).
|
|
3
|
+
*
|
|
4
|
+
* .mneme/chronosheaf/cover.json — current open cover
|
|
5
|
+
* .mneme/chronosheaf/cech.json — Čech complex serialised
|
|
6
|
+
* .mneme/chronosheaf/persistence.jsonl — persistence diagram (append-only)
|
|
7
|
+
* .mneme/chronosheaf/rg_fixed_points.json — promoted relevant operators
|
|
8
|
+
* .mneme/chronosheaf/chain.jsonl — HMAC chain (every state change)
|
|
9
|
+
*
|
|
10
|
+
* All writes are HMAC-chained (composes with APOSTILLE + ETERNITY).
|
|
11
|
+
* Reads are tamper-detected via chain replay.
|
|
12
|
+
*
|
|
13
|
+
* Spec mandate: "compose กับ replay log เดิม" — we re-use the same
|
|
14
|
+
* chain pattern as APOSTILLE: each entry carries `prevSig` linking
|
|
15
|
+
* to the previous entry's signature, so any tampered cell breaks
|
|
16
|
+
* the chain at the next verify.
|
|
17
|
+
*
|
|
18
|
+
* Engineering qualities (per user mandate):
|
|
19
|
+
* - Atomic writes via rename(temp, final) to avoid partial states.
|
|
20
|
+
* - Best-effort: missing dir → mkdir; corrupt file → safe-default.
|
|
21
|
+
* - Never throws on the read path (always returns null on error).
|
|
22
|
+
* - HMAC secret env-overridable via MNEME_CHRONOSHEAF_SECRET.
|
|
23
|
+
* - Append-only persistence.jsonl bounded at 100K entries via rotation.
|
|
24
|
+
*/
|
|
25
|
+
declare const PROTOCOL_VERSION: 1;
|
|
26
|
+
export interface ChainEntry {
|
|
27
|
+
v: typeof PROTOCOL_VERSION;
|
|
28
|
+
/** Sequence number (monotonic per chain). */
|
|
29
|
+
seq: number;
|
|
30
|
+
/** Logical kind of write (cover / cech / persistence / rg_fixed / state). */
|
|
31
|
+
kind: string;
|
|
32
|
+
/** Wall-clock timestamp (ms). */
|
|
33
|
+
ts: number;
|
|
34
|
+
/** Content hash of the payload that was written. */
|
|
35
|
+
payloadSha256: string;
|
|
36
|
+
/** Previous chain entry's signature ('' for the genesis entry). */
|
|
37
|
+
prevSig: string;
|
|
38
|
+
/** HMAC over the canonicalised body (everything above + this entry). */
|
|
39
|
+
sig: string;
|
|
40
|
+
}
|
|
41
|
+
export interface StorageInput<T> {
|
|
42
|
+
/** Logical kind (file basename without extension). */
|
|
43
|
+
kind: "cover" | "cech" | "persistence" | "rg_fixed_points" | "state" | string;
|
|
44
|
+
/** Payload to write — serialised to JSON. */
|
|
45
|
+
payload: T;
|
|
46
|
+
/** Optional secret override. */
|
|
47
|
+
secret?: string;
|
|
48
|
+
/** Optional explicit timestamp (defaults to Date.now). */
|
|
49
|
+
nowMs?: number;
|
|
50
|
+
}
|
|
51
|
+
export interface StorageOutput {
|
|
52
|
+
/** Path the file was written to. */
|
|
53
|
+
path: string;
|
|
54
|
+
/** Chain entry recorded for this write. */
|
|
55
|
+
entry: ChainEntry;
|
|
56
|
+
/** Total chain length after this entry. */
|
|
57
|
+
chainLength: number;
|
|
58
|
+
}
|
|
59
|
+
/** Compute the storage root for a given repo. */
|
|
60
|
+
export declare function storageRoot(repoRoot: string): string;
|
|
61
|
+
/** Ensure storage dir exists (idempotent). Never throws. */
|
|
62
|
+
export declare function ensureStorageDir(repoRoot: string): string;
|
|
63
|
+
/** Read the chain length without parsing every entry (last entry's seq + 1). */
|
|
64
|
+
export declare function chainLength(repoRoot: string): number;
|
|
65
|
+
/** Last chain signature (the head). '' if chain is empty. */
|
|
66
|
+
export declare function chainHead(repoRoot: string): string;
|
|
67
|
+
/**
|
|
68
|
+
* Persist a payload + append a chain entry. Atomic: writes to a temp
|
|
69
|
+
* file first then renames into place to avoid half-written state.
|
|
70
|
+
* Append-only chain.jsonl is bounded at 100K entries (rotated to .old).
|
|
71
|
+
*/
|
|
72
|
+
export declare function persist<T>(repoRoot: string, input: StorageInput<T>): StorageOutput;
|
|
73
|
+
/** Read a stored payload back. Returns null on any error (never throws). */
|
|
74
|
+
export declare function readStored<T>(repoRoot: string, kind: string): T | null;
|
|
75
|
+
/** Verify the entire chain. Returns { ok, brokenAt?, reason? }. */
|
|
76
|
+
export declare function verifyChain(repoRoot: string, secret?: string): {
|
|
77
|
+
ok: boolean;
|
|
78
|
+
entries: number;
|
|
79
|
+
brokenAt?: number;
|
|
80
|
+
reason?: string;
|
|
81
|
+
};
|
|
82
|
+
/** Summary used by the SLO dashboard. */
|
|
83
|
+
export declare function storageStats(repoRoot: string): {
|
|
84
|
+
storageRoot: string;
|
|
85
|
+
filesPresent: string[];
|
|
86
|
+
chainEntries: number;
|
|
87
|
+
chainHeadSig: string;
|
|
88
|
+
};
|
|
89
|
+
export {};
|
|
90
|
+
//# sourceMappingURL=storage.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"storage.d.ts","sourceRoot":"","sources":["../../src/chronosheaf/storage.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AAMH,QAAA,MAAM,gBAAgB,EAAG,CAAU,CAAC;AAEpC,MAAM,WAAW,UAAU;IACzB,CAAC,EAAE,OAAO,gBAAgB,CAAC;IAC3B,6CAA6C;IAC7C,GAAG,EAAE,MAAM,CAAC;IACZ,6EAA6E;IAC7E,IAAI,EAAE,MAAM,CAAC;IACb,iCAAiC;IACjC,EAAE,EAAE,MAAM,CAAC;IACX,oDAAoD;IACpD,aAAa,EAAE,MAAM,CAAC;IACtB,mEAAmE;IACnE,OAAO,EAAE,MAAM,CAAC;IAChB,wEAAwE;IACxE,GAAG,EAAE,MAAM,CAAC;CACb;AAED,MAAM,WAAW,YAAY,CAAC,CAAC;IAC7B,sDAAsD;IACtD,IAAI,EAAE,OAAO,GAAG,MAAM,GAAG,aAAa,GAAG,iBAAiB,GAAG,OAAO,GAAG,MAAM,CAAC;IAC9E,6CAA6C;IAC7C,OAAO,EAAE,CAAC,CAAC;IACX,gCAAgC;IAChC,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,0DAA0D;IAC1D,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,aAAa;IAC5B,oCAAoC;IACpC,IAAI,EAAE,MAAM,CAAC;IACb,2CAA2C;IAC3C,KAAK,EAAE,UAAU,CAAC;IAClB,2CAA2C;IAC3C,WAAW,EAAE,MAAM,CAAC;CACrB;AAqBD,iDAAiD;AACjD,wBAAgB,WAAW,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,CAEpD;AAED,4DAA4D;AAC5D,wBAAgB,gBAAgB,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,CAIzD;AAED,gFAAgF;AAChF,wBAAgB,WAAW,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,CAUpD;AAED,6DAA6D;AAC7D,wBAAgB,SAAS,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,CAUlD;AAED;;;;GAIG;AACH,wBAAgB,OAAO,CAAC,CAAC,EAAE,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE,YAAY,CAAC,CAAC,CAAC,GAAG,aAAa,CA4ClF;AAyBD,4EAA4E;AAC5E,wBAAgB,UAAU,CAAC,CAAC,EAAE,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,CAAC,GAAG,IAAI,CActE;AAED,mEAAmE;AACnE,wBAAgB,WAAW,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,GAAG;IAAE,EAAE,EAAE,OAAO,CAAC;IAAC,OAAO,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAAC,MAAM,CAAC,EAAE,MAAM,CAAA;CAAE,CAwBnI;AAED,yCAAyC;AACzC,wBAAgB,YAAY,CAAC,QAAQ,EAAE,MAAM,GAAG;IAC9C,WAAW,EAAE,MAAM,CAAC;IACpB,YAAY,EAAE,MAAM,EAAE,CAAC;IACvB,YAAY,EAAE,MAAM,CAAC;IACrB,YAAY,EAAE,MAAM,CAAC;CACtB,CAYA"}
|