@mneme-ai/core 2.26.1 → 2.28.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.
Files changed (47) hide show
  1. package/dist/diaspora/http_bridge.d.ts.map +1 -1
  2. package/dist/diaspora/http_bridge.js +15 -4
  3. package/dist/diaspora/http_bridge.js.map +1 -1
  4. package/dist/index.d.ts +1 -0
  5. package/dist/index.d.ts.map +1 -1
  6. package/dist/index.js +8 -0
  7. package/dist/index.js.map +1 -1
  8. package/dist/polygraph/index.js +21 -0
  9. package/dist/polygraph/index.js.map +1 -1
  10. package/dist/pulse.js +18 -0
  11. package/dist/pulse.js.map +1 -1
  12. package/dist/squadron/acgv.d.ts.map +1 -1
  13. package/dist/squadron/acgv.js +52 -37
  14. package/dist/squadron/acgv.js.map +1 -1
  15. package/dist/squadron/vaccine_numeric_guard.d.ts +65 -0
  16. package/dist/squadron/vaccine_numeric_guard.d.ts.map +1 -0
  17. package/dist/squadron/vaccine_numeric_guard.js +146 -0
  18. package/dist/squadron/vaccine_numeric_guard.js.map +1 -0
  19. package/dist/squadron/vaccine_numeric_guard.test.d.ts +2 -0
  20. package/dist/squadron/vaccine_numeric_guard.test.d.ts.map +1 -0
  21. package/dist/squadron/vaccine_numeric_guard.test.js +61 -0
  22. package/dist/squadron/vaccine_numeric_guard.test.js.map +1 -0
  23. package/dist/truth_gate/claims.d.ts +27 -0
  24. package/dist/truth_gate/claims.d.ts.map +1 -0
  25. package/dist/truth_gate/claims.js +134 -0
  26. package/dist/truth_gate/claims.js.map +1 -0
  27. package/dist/truth_gate/engine.d.ts +42 -0
  28. package/dist/truth_gate/engine.d.ts.map +1 -0
  29. package/dist/truth_gate/engine.js +218 -0
  30. package/dist/truth_gate/engine.js.map +1 -0
  31. package/dist/truth_gate/index.d.ts +9 -0
  32. package/dist/truth_gate/index.d.ts.map +1 -0
  33. package/dist/truth_gate/index.js +8 -0
  34. package/dist/truth_gate/index.js.map +1 -0
  35. package/dist/truth_gate/probes.d.ts +13 -0
  36. package/dist/truth_gate/probes.d.ts.map +1 -0
  37. package/dist/truth_gate/probes.js +316 -0
  38. package/dist/truth_gate/probes.js.map +1 -0
  39. package/dist/truth_gate/truth_gate.test.d.ts +2 -0
  40. package/dist/truth_gate/truth_gate.test.d.ts.map +1 -0
  41. package/dist/truth_gate/truth_gate.test.js +75 -0
  42. package/dist/truth_gate/truth_gate.test.js.map +1 -0
  43. package/dist/truth_gate/types.d.ts +102 -0
  44. package/dist/truth_gate/types.d.ts.map +1 -0
  45. package/dist/truth_gate/types.js +30 -0
  46. package/dist/truth_gate/types.js.map +1 -0
  47. package/package.json +1 -1
@@ -0,0 +1,134 @@
1
+ /**
2
+ * v2.27.0 — TRUTH GATE marketing claim catalog.
3
+ *
4
+ * Each entry is a CLAIM-vs-PROBE binding. When a claim drifts from the
5
+ * probe's measurement, the gate flags it. The catalog is curated from
6
+ * the user's deep-stress-test matrix (2026-05-22):
7
+ *
8
+ * "74.7% fewer tokens" → probe.capabilities.tokens
9
+ * "9 verification agents" → probe.verifier.agent_count
10
+ * "SUPERNOVA self-heal supervisor" → probe.supernova.auto_respawn
11
+ * "Phoenix Resurrection" → probe.phoenix.activates_by_default
12
+ * "Ollama detected ★★★★" → probe.embedder.tier
13
+ * "HMAC-chained replay.jsonl" → probe.replay_file.exists
14
+ * "audit-log: Compliance-grade" → probe.audit_log.enabled_by_default
15
+ * "3 seed chromosomes" → probe.lineage.seed_chromosomes
16
+ *
17
+ * Each claim also has a SEVERITY: block (ship-blocker if drifts) /
18
+ * warn (surface but ship) / info (track only).
19
+ *
20
+ * The catalog is intentionally OPINIONATED about the truth: every
21
+ * non-trivial Mneme marketing claim must have a probe. New claims
22
+ * without a probe binding ship with severity=info + a note that they
23
+ * are unmeasured.
24
+ */
25
+ export const CLAIM_CATALOG = [
26
+ {
27
+ id: "claim.tokens.capabilities_lt_25k",
28
+ source: "README · positioning",
29
+ text: "Mneme keeps mneme.capabilities response under 25K bytes (skinny default)",
30
+ kind: "numeric",
31
+ asserted: { value: 25_000, op: "<", unit: "bytes" },
32
+ probeId: "probe.capabilities.bytes",
33
+ severity: "block",
34
+ },
35
+ {
36
+ id: "claim.tokens.capabilities_tokens_lt_8k",
37
+ source: "README · positioning",
38
+ text: "Default mneme.capabilities response is under ~8K tokens (was 80K before v2.26)",
39
+ kind: "numeric",
40
+ asserted: { value: 8000, op: "<", unit: "tokens" },
41
+ probeId: "probe.capabilities.tokens",
42
+ severity: "block",
43
+ },
44
+ {
45
+ id: "claim.verifier.at_least_9_agents",
46
+ source: "README · ACGV pipeline section",
47
+ text: "Mneme runs at least 9 verification agents in parallel",
48
+ kind: "numeric",
49
+ asserted: { value: 9, op: ">=", unit: "agents" },
50
+ probeId: "probe.verifier.agent_count",
51
+ severity: "warn",
52
+ },
53
+ {
54
+ id: "claim.supernova.in_band_only",
55
+ source: "v2.27.0 honest correction (was: SUPERNOVA auto-respawn)",
56
+ text: "SUPERNOVA tracks daemon restart cycles IN-BAND only; cross-process respawn requires `mneme autoboot install`",
57
+ kind: "boolean",
58
+ asserted: { value: 0, op: "=", tolerance: 0 },
59
+ probeId: "probe.supernova.auto_respawn",
60
+ severity: "warn",
61
+ },
62
+ {
63
+ id: "claim.phoenix.opt_in",
64
+ source: "v2.27.0 honest correction (was: Phoenix installs by default)",
65
+ text: "Phoenix Resurrection mechanisms (schtasks/startupFolder/registryRun) are AVAILABLE but require `mneme autoboot install`",
66
+ kind: "boolean",
67
+ asserted: { value: 0, op: "=", tolerance: 0 },
68
+ probeId: "probe.phoenix.activates_by_default",
69
+ severity: "warn",
70
+ },
71
+ {
72
+ id: "claim.embedder.ollama_when_available",
73
+ source: "doctor + embeddings status",
74
+ text: "When Ollama is running, Mneme picks the Ollama embedder (★★★★) not Bundled (★★★)",
75
+ kind: "string",
76
+ probeId: "probe.embedder.tier",
77
+ severity: "block",
78
+ },
79
+ {
80
+ id: "claim.replay.file_exists",
81
+ source: "audit-log marketing",
82
+ text: "HMAC-chained replay.jsonl ships in .mneme/",
83
+ kind: "boolean",
84
+ asserted: { value: 1, op: "=", tolerance: 0 },
85
+ probeId: "probe.replay_file.exists",
86
+ severity: "warn",
87
+ },
88
+ {
89
+ id: "claim.audit_log.opt_in",
90
+ source: "v2.27.0 honest correction (was: enabled by default)",
91
+ text: "Audit-log is OPT-IN for SOC2/PCI-DSS; enable with `mneme audit-log enable` per the consent-fabric Bill of Rights",
92
+ kind: "boolean",
93
+ asserted: { value: 0, op: "=", tolerance: 0 },
94
+ probeId: "probe.audit_log.enabled_by_default",
95
+ severity: "info",
96
+ },
97
+ {
98
+ id: "claim.lineage.3_seed_chromosomes",
99
+ source: "auto-onboarding section",
100
+ text: "Fresh install auto-seeds 3 chromosomes",
101
+ kind: "numeric",
102
+ asserted: { value: 3, op: ">=", unit: "chromosomes" },
103
+ probeId: "probe.lineage.seed_chromosomes",
104
+ severity: "warn",
105
+ },
106
+ {
107
+ id: "claim.gauntlet.perfect_score",
108
+ source: "v2.26.1 release notes",
109
+ text: "PEAK GAUNTLET self-grade is 100/100",
110
+ kind: "numeric",
111
+ asserted: { value: 100, op: "=", tolerance: 0, unit: "score" },
112
+ probeId: "probe.peak_gauntlet.overall",
113
+ severity: "block",
114
+ },
115
+ {
116
+ id: "claim.stderr.structured_log",
117
+ source: "v2.24.0 M16 fix",
118
+ text: "Server emits structured stderr log (≥ 200 bytes per session)",
119
+ kind: "numeric",
120
+ asserted: { value: 200, op: ">=", unit: "bytes" },
121
+ probeId: "probe.stderr.session_bytes",
122
+ severity: "warn",
123
+ },
124
+ {
125
+ id: "claim.tool_count.at_least_800",
126
+ source: "Catalog growth doc",
127
+ text: "Mneme catalog has at least 800 tools",
128
+ kind: "numeric",
129
+ asserted: { value: 800, op: ">=", unit: "tools" },
130
+ probeId: "probe.tool_count",
131
+ severity: "info",
132
+ },
133
+ ];
134
+ //# sourceMappingURL=claims.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"claims.js","sourceRoot":"","sources":["../../src/truth_gate/claims.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,42 @@
1
+ /**
2
+ * v2.27.0 — TRUTH GATE engine.
3
+ *
4
+ * Drives the claim → probe → verdict pipeline + emits an HMAC-signed
5
+ * truth matrix.
6
+ */
7
+ import type { TruthMatrix, ProbeContext } from "./types.js";
8
+ export declare function __resetTruthChainForTest(): void;
9
+ /**
10
+ * Reconcile every claim in the catalog against its probe + emit a
11
+ * tamper-evident truth matrix.
12
+ */
13
+ export declare function reconcileAll(ctx: ProbeContext): Promise<TruthMatrix>;
14
+ export declare function storeMatrix(repoRoot: string, m: TruthMatrix): {
15
+ path: string;
16
+ ledger: string;
17
+ };
18
+ export declare function readLatestMatrix(repoRoot: string): TruthMatrix | null;
19
+ export interface MatrixLedgerEntry {
20
+ seq: number;
21
+ scannedAt: string;
22
+ truthScore: number;
23
+ pass: number;
24
+ drift: number;
25
+ refuted: number;
26
+ trafficLight: TruthMatrix["trafficLight"];
27
+ headline: string;
28
+ hmac: string;
29
+ bodyDigest: string;
30
+ file: string;
31
+ }
32
+ export declare function listMatrices(repoRoot: string, limit?: number): MatrixLedgerEntry[];
33
+ /** Verify a matrix's HMAC against a previous chain link. */
34
+ export declare function verifyMatrix(m: TruthMatrix, prevLink?: string): {
35
+ ok: true;
36
+ } | {
37
+ ok: false;
38
+ reason: string;
39
+ };
40
+ /** Render a short text view for terminal. */
41
+ export declare function renderShort(m: TruthMatrix): string[];
42
+ //# sourceMappingURL=engine.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"engine.d.ts","sourceRoot":"","sources":["../../src/truth_gate/engine.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAMH,OAAO,KAAK,EACgC,WAAW,EAAE,YAAY,EACpE,MAAM,YAAY,CAAC;AAuCpB,wBAAgB,wBAAwB,IAAI,IAAI,CAAgC;AAEhF;;;GAGG;AACH,wBAAsB,YAAY,CAAC,GAAG,EAAE,YAAY,GAAG,OAAO,CAAC,WAAW,CAAC,CA8D1E;AAUD,wBAAgB,WAAW,CAAC,QAAQ,EAAE,MAAM,EAAE,CAAC,EAAE,WAAW,GAAG;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,CAqB9F;AAED,wBAAgB,gBAAgB,CAAC,QAAQ,EAAE,MAAM,GAAG,WAAW,GAAG,IAAI,CAQrE;AAED,MAAM,WAAW,iBAAiB;IAChC,GAAG,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,MAAM,CAAC;IAAC,UAAU,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAC;IACjG,YAAY,EAAE,WAAW,CAAC,cAAc,CAAC,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,UAAU,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;CAC7G;AAED,wBAAgB,YAAY,CAAC,QAAQ,EAAE,MAAM,EAAE,KAAK,SAAK,GAAG,iBAAiB,EAAE,CAO9E;AAED,4DAA4D;AAC5D,wBAAgB,YAAY,CAAC,CAAC,EAAE,WAAW,EAAE,QAAQ,GAAE,MAAmB,GAAG;IAAE,EAAE,EAAE,IAAI,CAAA;CAAE,GAAG;IAAE,EAAE,EAAE,KAAK,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,CAQxH;AAED,6CAA6C;AAC7C,wBAAgB,WAAW,CAAC,CAAC,EAAE,WAAW,GAAG,MAAM,EAAE,CAmBpD"}
@@ -0,0 +1,218 @@
1
+ /**
2
+ * v2.27.0 — TRUTH GATE engine.
3
+ *
4
+ * Drives the claim → probe → verdict pipeline + emits an HMAC-signed
5
+ * truth matrix.
6
+ */
7
+ import { createHash, createHmac } from "node:crypto";
8
+ import { existsSync, mkdirSync, writeFileSync, appendFileSync, readFileSync, readdirSync } from "node:fs";
9
+ import { join } from "node:path";
10
+ import { CLAIM_CATALOG } from "./claims.js";
11
+ import { runProbe } from "./probes.js";
12
+ const HMAC_KEY = process.env["MNEME_TRUTH_KEY"] ?? "mneme-truth-gate-v1";
13
+ const CHAIN_SEED = "0".repeat(64);
14
+ function canon(v) {
15
+ if (v === null || typeof v !== "object")
16
+ return JSON.stringify(v);
17
+ if (Array.isArray(v))
18
+ return "[" + v.map(canon).join(",") + "]";
19
+ const keys = Object.keys(v).sort();
20
+ return "{" + keys.map((k) => JSON.stringify(k) + ":" + canon(v[k])).join(",") + "}";
21
+ }
22
+ function sha(s) { return createHash("sha256").update(s).digest("hex"); }
23
+ function hmacOf(prev, payload) {
24
+ return createHmac("sha256", HMAC_KEY).update(prev + "|" + payload).digest("hex");
25
+ }
26
+ function compareNumeric(asserted, measured) {
27
+ const tol = asserted.tolerance ?? 0;
28
+ switch (asserted.op) {
29
+ case "<": return measured < asserted.value ? "pass" : "drift";
30
+ case "<=": return measured <= asserted.value ? "pass" : "drift";
31
+ case ">": return measured > asserted.value ? "pass" : "drift";
32
+ case ">=": return measured >= asserted.value ? "pass" : "drift";
33
+ case "=": return Math.abs(measured - asserted.value) <= tol ? "pass" : "drift";
34
+ case "~=": return Math.abs(measured - asserted.value) <= Math.max(tol, asserted.value * 0.1) ? "pass" : "drift";
35
+ default: return "unmeasured";
36
+ }
37
+ }
38
+ function compareBoolean(asserted, measured) {
39
+ const wantTrue = asserted.value === 1;
40
+ if (measured === wantTrue)
41
+ return "pass";
42
+ return wantTrue ? "refuted" : "drift";
43
+ }
44
+ let lastChainLink = CHAIN_SEED;
45
+ export function __resetTruthChainForTest() { lastChainLink = CHAIN_SEED; }
46
+ /**
47
+ * Reconcile every claim in the catalog against its probe + emit a
48
+ * tamper-evident truth matrix.
49
+ */
50
+ export async function reconcileAll(ctx) {
51
+ const scannedAt = new Date().toISOString();
52
+ const entries = [];
53
+ for (const claim of CLAIM_CATALOG) {
54
+ const probe = await runProbe(claim.probeId, ctx);
55
+ let verdict;
56
+ let reason;
57
+ if (probe.value === null) {
58
+ verdict = "unmeasured";
59
+ reason = `probe ${claim.probeId} returned null: ${probe.evidence}`;
60
+ }
61
+ else if (claim.kind === "numeric" && claim.asserted) {
62
+ if (typeof probe.value !== "number") {
63
+ verdict = "unmeasured";
64
+ reason = `probe value is not numeric: ${String(probe.value).slice(0, 100)}`;
65
+ }
66
+ else {
67
+ verdict = compareNumeric(claim.asserted, probe.value);
68
+ reason = `asserted ${claim.asserted.op} ${claim.asserted.value}${claim.asserted.unit ? " " + claim.asserted.unit : ""}; measured ${probe.value}`;
69
+ }
70
+ }
71
+ else if (claim.kind === "boolean" && claim.asserted) {
72
+ if (typeof probe.value !== "boolean") {
73
+ verdict = "unmeasured";
74
+ reason = `probe value is not boolean: ${String(probe.value).slice(0, 100)}`;
75
+ }
76
+ else {
77
+ verdict = compareBoolean(claim.asserted, probe.value);
78
+ reason = `asserted ${claim.asserted.value === 1 ? "true" : "false"}; measured ${probe.value}`;
79
+ }
80
+ }
81
+ else if (claim.kind === "string") {
82
+ // String claims don't enforce a specific value (since the probe
83
+ // returns the live string); they just record what was observed.
84
+ // Verdict = pass when probe returned non-null.
85
+ verdict = probe.value ? "pass" : "unmeasured";
86
+ reason = `live = ${String(probe.value).slice(0, 100)}`;
87
+ }
88
+ else {
89
+ verdict = "unmeasured";
90
+ reason = "no comparison rule";
91
+ }
92
+ entries.push({ claim, probe, verdict, reason });
93
+ }
94
+ const pass = entries.filter((e) => e.verdict === "pass").length;
95
+ const drift = entries.filter((e) => e.verdict === "drift").length;
96
+ const refuted = entries.filter((e) => e.verdict === "refuted").length;
97
+ const unmeasured = entries.filter((e) => e.verdict === "unmeasured").length;
98
+ const measured = pass + drift + refuted;
99
+ const truthScore = measured > 0 ? Math.round((pass / measured) * 100) : 0;
100
+ let trafficLight;
101
+ let headline;
102
+ if (truthScore >= 95 && refuted === 0) {
103
+ trafficLight = "green";
104
+ headline = `🟢 TRUTHFUL — ${pass}/${measured} claims match measured reality (score ${truthScore}/100)`;
105
+ }
106
+ else if (truthScore >= 70) {
107
+ trafficLight = "yellow";
108
+ headline = `🟡 MIXED — ${drift + refuted} drift/refuted; ${pass} pass (score ${truthScore}/100)`;
109
+ }
110
+ else {
111
+ trafficLight = "red";
112
+ headline = `🔴 REFUTED — only ${pass}/${measured} claims hold up (score ${truthScore}/100)`;
113
+ }
114
+ const body = {
115
+ spec: { name: "MNEME-TRUTH-GATE", version: "1.0" },
116
+ scannedAt,
117
+ cwd: ctx.cwd,
118
+ totalClaims: entries.length,
119
+ entries,
120
+ summary: { pass, drift, refuted, unmeasured, truthScore },
121
+ headline,
122
+ trafficLight,
123
+ };
124
+ const bodyDigest = sha(canon(body));
125
+ lastChainLink = hmacOf(lastChainLink, bodyDigest);
126
+ return { ...body, hmac: lastChainLink, seq: parseInt(lastChainLink.slice(0, 8), 16), bodyDigest };
127
+ }
128
+ // ── Persistence ──────────────────────────────────────────────────────
129
+ function dirOf(repoRoot) {
130
+ const d = join(repoRoot, ".mneme", "truth_gate");
131
+ if (!existsSync(d))
132
+ mkdirSync(d, { recursive: true });
133
+ return d;
134
+ }
135
+ export function storeMatrix(repoRoot, m) {
136
+ const d = dirOf(repoRoot);
137
+ const stamp = m.scannedAt.replace(/[:.]/g, "-");
138
+ const path = join(d, `${String(m.seq).padStart(10, "0")}-${stamp}.json`);
139
+ writeFileSync(path, JSON.stringify(m, null, 2) + "\n");
140
+ const ledger = join(d, "matrix.jsonl");
141
+ const skim = {
142
+ seq: m.seq,
143
+ scannedAt: m.scannedAt,
144
+ truthScore: m.summary.truthScore,
145
+ pass: m.summary.pass,
146
+ drift: m.summary.drift,
147
+ refuted: m.summary.refuted,
148
+ trafficLight: m.trafficLight,
149
+ headline: m.headline,
150
+ hmac: m.hmac,
151
+ bodyDigest: m.bodyDigest,
152
+ file: path,
153
+ };
154
+ appendFileSync(ledger, JSON.stringify(skim) + "\n");
155
+ return { path, ledger };
156
+ }
157
+ export function readLatestMatrix(repoRoot) {
158
+ const d = dirOf(repoRoot);
159
+ if (!existsSync(d))
160
+ return null;
161
+ const files = readdirSync(d).filter((n) => n.endsWith(".json")).sort();
162
+ if (files.length === 0)
163
+ return null;
164
+ try {
165
+ return JSON.parse(readFileSync(join(d, files[files.length - 1]), "utf8"));
166
+ }
167
+ catch {
168
+ return null;
169
+ }
170
+ }
171
+ export function listMatrices(repoRoot, limit = 30) {
172
+ const p = join(dirOf(repoRoot), "matrix.jsonl");
173
+ if (!existsSync(p))
174
+ return [];
175
+ const lines = readFileSync(p, "utf8").split("\n").filter(Boolean);
176
+ const out = [];
177
+ for (const l of lines.slice(-limit)) {
178
+ try {
179
+ out.push(JSON.parse(l));
180
+ }
181
+ catch { /* skip */ }
182
+ }
183
+ return out;
184
+ }
185
+ /** Verify a matrix's HMAC against a previous chain link. */
186
+ export function verifyMatrix(m, prevLink = CHAIN_SEED) {
187
+ const { hmac, seq: _s, bodyDigest, ...body } = m;
188
+ void _s;
189
+ const recomputed = sha(canon(body));
190
+ if (recomputed !== bodyDigest)
191
+ return { ok: false, reason: "bodyDigest mismatch" };
192
+ const expected = hmacOf(prevLink, recomputed);
193
+ if (expected !== hmac)
194
+ return { ok: false, reason: "hmac mismatch" };
195
+ return { ok: true };
196
+ }
197
+ /** Render a short text view for terminal. */
198
+ export function renderShort(m) {
199
+ return [
200
+ m.headline,
201
+ ``,
202
+ `Scanned at: ${m.scannedAt}`,
203
+ `Score: ${m.summary.truthScore}/100`,
204
+ `Pass: ${m.summary.pass}/${m.totalClaims}`,
205
+ `Drift: ${m.summary.drift}`,
206
+ `Refuted: ${m.summary.refuted}`,
207
+ `Unmeasured: ${m.summary.unmeasured}`,
208
+ ``,
209
+ `Drifted / refuted claims:`,
210
+ ...m.entries
211
+ .filter((e) => e.verdict === "drift" || e.verdict === "refuted")
212
+ .slice(0, 10)
213
+ .map((e) => ` [${e.verdict.toUpperCase().padEnd(7)}] ${e.claim.id} · ${e.reason}`),
214
+ ``,
215
+ `HMAC: ${m.hmac.slice(0, 16)}… (seq ${m.seq})`,
216
+ ];
217
+ }
218
+ //# sourceMappingURL=engine.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"engine.js","sourceRoot":"","sources":["../../src/truth_gate/engine.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,9 @@
1
+ /**
2
+ * v2.27.0 — MARKETING TRUTH GATE public surface.
3
+ */
4
+ export * from "./types.js";
5
+ export { CLAIM_CATALOG } from "./claims.js";
6
+ export { ALL_PROBES, runProbe, probeById } from "./probes.js";
7
+ export { reconcileAll, storeMatrix, readLatestMatrix, listMatrices, verifyMatrix, renderShort, __resetTruthChainForTest, } from "./engine.js";
8
+ export type { MatrixLedgerEntry } from "./engine.js";
9
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/truth_gate/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,cAAc,YAAY,CAAC;AAC3B,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC5C,OAAO,EAAE,UAAU,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAC9D,OAAO,EACL,YAAY,EAAE,WAAW,EAAE,gBAAgB,EAAE,YAAY,EACzD,YAAY,EAAE,WAAW,EAAE,wBAAwB,GACpD,MAAM,aAAa,CAAC;AACrB,YAAY,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC"}
@@ -0,0 +1,8 @@
1
+ /**
2
+ * v2.27.0 — MARKETING TRUTH GATE public surface.
3
+ */
4
+ export * from "./types.js";
5
+ export { CLAIM_CATALOG } from "./claims.js";
6
+ export { ALL_PROBES, runProbe, probeById } from "./probes.js";
7
+ export { reconcileAll, storeMatrix, readLatestMatrix, listMatrices, verifyMatrix, renderShort, __resetTruthChainForTest, } from "./engine.js";
8
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/truth_gate/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,cAAc,YAAY,CAAC;AAC3B,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC5C,OAAO,EAAE,UAAU,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAC9D,OAAO,EACL,YAAY,EAAE,WAAW,EAAE,gBAAgB,EAAE,YAAY,EACzD,YAAY,EAAE,WAAW,EAAE,wBAAwB,GACpD,MAAM,aAAa,CAAC"}
@@ -0,0 +1,13 @@
1
+ /**
2
+ * v2.27.0 — TRUTH GATE probes.
3
+ *
4
+ * Each probe answers ONE measurable question about Mneme's behavior.
5
+ * Probes are pure functions of cwd; no network unless documented. The
6
+ * probe id is the binding key between marketing claims (in the catalog)
7
+ * and live measurement.
8
+ */
9
+ import type { Probe, ProbeContext, ProbeResult } from "./types.js";
10
+ export declare const ALL_PROBES: ReadonlyArray<Probe>;
11
+ export declare function probeById(id: string): Probe | undefined;
12
+ export declare function runProbe(id: string, ctx: ProbeContext): Promise<ProbeResult>;
13
+ //# sourceMappingURL=probes.d.ts.map
@@ -0,0 +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;AA6RnE,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"}