@mneme-ai/core 2.30.0 → 2.32.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 (106) hide show
  1. package/dist/agent_manifest.d.ts +1 -1
  2. package/dist/agent_manifest.d.ts.map +1 -1
  3. package/dist/agent_manifest.js +22 -0
  4. package/dist/agent_manifest.js.map +1 -1
  5. package/dist/flywheel/controller.d.ts +51 -0
  6. package/dist/flywheel/controller.d.ts.map +1 -0
  7. package/dist/flywheel/controller.js +186 -0
  8. package/dist/flywheel/controller.js.map +1 -0
  9. package/dist/flywheel/flywheel.test.d.ts +2 -0
  10. package/dist/flywheel/flywheel.test.d.ts.map +1 -0
  11. package/dist/flywheel/flywheel.test.js +264 -0
  12. package/dist/flywheel/flywheel.test.js.map +1 -0
  13. package/dist/flywheel/fuse.d.ts +16 -0
  14. package/dist/flywheel/fuse.d.ts.map +1 -0
  15. package/dist/flywheel/fuse.js +132 -0
  16. package/dist/flywheel/fuse.js.map +1 -0
  17. package/dist/flywheel/harvest.d.ts +31 -0
  18. package/dist/flywheel/harvest.d.ts.map +1 -0
  19. package/dist/flywheel/harvest.js +286 -0
  20. package/dist/flywheel/harvest.js.map +1 -0
  21. package/dist/flywheel/index.d.ts +26 -0
  22. package/dist/flywheel/index.d.ts.map +1 -0
  23. package/dist/flywheel/index.js +19 -0
  24. package/dist/flywheel/index.js.map +1 -0
  25. package/dist/flywheel/liveness.d.ts +34 -0
  26. package/dist/flywheel/liveness.d.ts.map +1 -0
  27. package/dist/flywheel/liveness.js +63 -0
  28. package/dist/flywheel/liveness.js.map +1 -0
  29. package/dist/flywheel/personal_cheatsheet.d.ts +34 -0
  30. package/dist/flywheel/personal_cheatsheet.d.ts.map +1 -0
  31. package/dist/flywheel/personal_cheatsheet.js +95 -0
  32. package/dist/flywheel/personal_cheatsheet.js.map +1 -0
  33. package/dist/flywheel/prescribe.d.ts +20 -0
  34. package/dist/flywheel/prescribe.d.ts.map +1 -0
  35. package/dist/flywheel/prescribe.js +119 -0
  36. package/dist/flywheel/prescribe.js.map +1 -0
  37. package/dist/flywheel/reciprocity.d.ts +36 -0
  38. package/dist/flywheel/reciprocity.d.ts.map +1 -0
  39. package/dist/flywheel/reciprocity.js +113 -0
  40. package/dist/flywheel/reciprocity.js.map +1 -0
  41. package/dist/flywheel/types.d.ts +117 -0
  42. package/dist/flywheel/types.d.ts.map +1 -0
  43. package/dist/flywheel/types.js +25 -0
  44. package/dist/flywheel/types.js.map +1 -0
  45. package/dist/flywheel/vendor_bulletin.d.ts +44 -0
  46. package/dist/flywheel/vendor_bulletin.d.ts.map +1 -0
  47. package/dist/flywheel/vendor_bulletin.js +118 -0
  48. package/dist/flywheel/vendor_bulletin.js.map +1 -0
  49. package/dist/hgp/hgp.test.d.ts +2 -0
  50. package/dist/hgp/hgp.test.d.ts.map +1 -0
  51. package/dist/hgp/hgp.test.js +198 -0
  52. package/dist/hgp/hgp.test.js.map +1 -0
  53. package/dist/hgp/hgp_id.d.ts +18 -0
  54. package/dist/hgp/hgp_id.d.ts.map +1 -0
  55. package/dist/hgp/hgp_id.js +41 -0
  56. package/dist/hgp/hgp_id.js.map +1 -0
  57. package/dist/hgp/index.d.ts +12 -0
  58. package/dist/hgp/index.d.ts.map +1 -0
  59. package/dist/hgp/index.js +10 -0
  60. package/dist/hgp/index.js.map +1 -0
  61. package/dist/hgp/registry.d.ts +64 -0
  62. package/dist/hgp/registry.d.ts.map +1 -0
  63. package/dist/hgp/registry.js +221 -0
  64. package/dist/hgp/registry.js.map +1 -0
  65. package/dist/hgp/severity.d.ts +19 -0
  66. package/dist/hgp/severity.d.ts.map +1 -0
  67. package/dist/hgp/severity.js +46 -0
  68. package/dist/hgp/severity.js.map +1 -0
  69. package/dist/hgp/types.d.ts +60 -0
  70. package/dist/hgp/types.d.ts.map +1 -0
  71. package/dist/hgp/types.js +11 -0
  72. package/dist/hgp/types.js.map +1 -0
  73. package/dist/index.d.ts +3 -0
  74. package/dist/index.d.ts.map +1 -1
  75. package/dist/index.js +25 -0
  76. package/dist/index.js.map +1 -1
  77. package/dist/rewind/engine.d.ts +65 -0
  78. package/dist/rewind/engine.d.ts.map +1 -0
  79. package/dist/rewind/engine.js +473 -0
  80. package/dist/rewind/engine.js.map +1 -0
  81. package/dist/rewind/index.d.ts +13 -0
  82. package/dist/rewind/index.d.ts.map +1 -0
  83. package/dist/rewind/index.js +11 -0
  84. package/dist/rewind/index.js.map +1 -0
  85. package/dist/rewind/intent_class.d.ts +35 -0
  86. package/dist/rewind/intent_class.d.ts.map +1 -0
  87. package/dist/rewind/intent_class.js +141 -0
  88. package/dist/rewind/intent_class.js.map +1 -0
  89. package/dist/rewind/rewind.test.d.ts +2 -0
  90. package/dist/rewind/rewind.test.d.ts.map +1 -0
  91. package/dist/rewind/rewind.test.js +176 -0
  92. package/dist/rewind/rewind.test.js.map +1 -0
  93. package/dist/rewind/types.d.ts +140 -0
  94. package/dist/rewind/types.d.ts.map +1 -0
  95. package/dist/rewind/types.js +11 -0
  96. package/dist/rewind/types.js.map +1 -0
  97. package/dist/squadron/acgv_vaccine.d.ts.map +1 -1
  98. package/dist/squadron/acgv_vaccine.js +15 -0
  99. package/dist/squadron/acgv_vaccine.js.map +1 -1
  100. package/dist/truth_gate/claims.d.ts.map +1 -1
  101. package/dist/truth_gate/claims.js +38 -0
  102. package/dist/truth_gate/claims.js.map +1 -1
  103. package/dist/truth_gate/probes.d.ts.map +1 -1
  104. package/dist/truth_gate/probes.js +103 -1
  105. package/dist/truth_gate/probes.js.map +1 -1
  106. package/package.json +1 -1
@@ -0,0 +1,44 @@
1
+ /**
2
+ * v2.32.0 — Vendor Bulletin generator.
3
+ *
4
+ * Renders a shareable .md document from REWIND regression cards +
5
+ * HGP top-N + HONEST MIRROR perVendor data. This is the asymmetric
6
+ * leverage primitive: every user that posts a bulletin makes Mneme
7
+ * a force-multiplier vs funded competitors.
8
+ */
9
+ interface RewindCardLine {
10
+ seq?: number;
11
+ runAt?: string;
12
+ vendor?: string;
13
+ vendorVersion?: string;
14
+ regression?: string;
15
+ delta?: number;
16
+ weight?: number;
17
+ headline?: string;
18
+ }
19
+ interface HgpLine {
20
+ hgpId?: string;
21
+ severity?: number;
22
+ observeCount?: number;
23
+ vendorCounts?: Record<string, number>;
24
+ sample?: string;
25
+ lastSeen?: string;
26
+ }
27
+ interface MirrorLedgerLine {
28
+ finishedAt?: string;
29
+ perVendor?: Array<{
30
+ vendor?: string;
31
+ delta?: number;
32
+ weight?: number;
33
+ }>;
34
+ }
35
+ export interface BulletinData {
36
+ generatedAt: string;
37
+ rewindRegressions: RewindCardLine[];
38
+ hgpTop: HgpLine[];
39
+ mirrorLatest: MirrorLedgerLine | null;
40
+ }
41
+ export declare function gatherBulletinData(repoRoot: string, hgpTopN?: number): BulletinData;
42
+ export declare function renderBulletinMarkdown(data: BulletinData): string;
43
+ export {};
44
+ //# sourceMappingURL=vendor_bulletin.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"vendor_bulletin.d.ts","sourceRoot":"","sources":["../../src/flywheel/vendor_bulletin.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAKH,UAAU,cAAc;IACtB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,UAAU,OAAO;IACf,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,YAAY,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACtC,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,UAAU,gBAAgB;IACxB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,SAAS,CAAC,EAAE,KAAK,CAAC;QAAE,MAAM,CAAC,EAAE,MAAM,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,CAAC;QAAC,MAAM,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;CACzE;AAaD,MAAM,WAAW,YAAY;IAC3B,WAAW,EAAE,MAAM,CAAC;IACpB,iBAAiB,EAAE,cAAc,EAAE,CAAC;IACpC,MAAM,EAAE,OAAO,EAAE,CAAC;IAClB,YAAY,EAAE,gBAAgB,GAAG,IAAI,CAAC;CACvC;AAED,wBAAgB,kBAAkB,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,SAAI,GAAG,YAAY,CA4B9E;AAED,wBAAgB,sBAAsB,CAAC,IAAI,EAAE,YAAY,GAAG,MAAM,CAsDjE"}
@@ -0,0 +1,118 @@
1
+ /**
2
+ * v2.32.0 — Vendor Bulletin generator.
3
+ *
4
+ * Renders a shareable .md document from REWIND regression cards +
5
+ * HGP top-N + HONEST MIRROR perVendor data. This is the asymmetric
6
+ * leverage primitive: every user that posts a bulletin makes Mneme
7
+ * a force-multiplier vs funded competitors.
8
+ */
9
+ import { existsSync, readFileSync } from "node:fs";
10
+ import { join } from "node:path";
11
+ function readJsonl(p, limit) {
12
+ if (!existsSync(p))
13
+ return [];
14
+ try {
15
+ const body = readFileSync(p, "utf8");
16
+ const lines = body.split("\n").filter(Boolean).slice(-limit);
17
+ const out = [];
18
+ for (const ln of lines) {
19
+ try {
20
+ out.push(JSON.parse(ln));
21
+ }
22
+ catch { /* skip */ }
23
+ }
24
+ return out;
25
+ }
26
+ catch {
27
+ return [];
28
+ }
29
+ }
30
+ export function gatherBulletinData(repoRoot, hgpTopN = 5) {
31
+ const rewind = readJsonl(join(repoRoot, ".mneme", "rewind", "cards.jsonl"), 500)
32
+ .filter((c) => c.regression === "regression");
33
+ const hgpAll = readJsonl(join(repoRoot, ".mneme", "hgp", "registry.jsonl"), 5000);
34
+ // Collapse HGP by id (delta-ledger pattern), sort by severity, take top-N.
35
+ const byId = new Map();
36
+ for (const r of hgpAll) {
37
+ if (!r.hgpId)
38
+ continue;
39
+ const cur = byId.get(r.hgpId);
40
+ if (!cur) {
41
+ byId.set(r.hgpId, { ...r });
42
+ continue;
43
+ }
44
+ cur.lastSeen = (r.lastSeen ?? cur.lastSeen);
45
+ cur.observeCount = (cur.observeCount ?? 0) + (r.observeCount ?? 0);
46
+ cur.vendorCounts = { ...cur.vendorCounts };
47
+ for (const [v, c] of Object.entries(r.vendorCounts ?? {})) {
48
+ cur.vendorCounts[v] = (cur.vendorCounts[v] ?? 0) + c;
49
+ }
50
+ }
51
+ const hgpTop = Array.from(byId.values()).sort((a, b) => (b.severity ?? 0) - (a.severity ?? 0)).slice(0, hgpTopN);
52
+ const mirrorRows = readJsonl(join(repoRoot, ".mneme", "honest_mirror", "reports.jsonl"), 50);
53
+ const mirrorLatest = mirrorRows[mirrorRows.length - 1] ?? null;
54
+ return {
55
+ generatedAt: new Date().toISOString(),
56
+ rewindRegressions: rewind,
57
+ hgpTop,
58
+ mirrorLatest,
59
+ };
60
+ }
61
+ export function renderBulletinMarkdown(data) {
62
+ const lines = [];
63
+ lines.push(`# 📡 Mneme Vendor Bulletin`);
64
+ lines.push(``);
65
+ lines.push(`> Auto-generated from Mneme HONEST MIRROR + REWIND + HGP signals on ${data.generatedAt}.`);
66
+ lines.push(``);
67
+ if (data.rewindRegressions.length > 0) {
68
+ lines.push(`## 🪄 Vendor Regressions (REWIND)`);
69
+ lines.push(``);
70
+ lines.push(`| vendor | version | Δcorrectness | weight | seq |`);
71
+ lines.push(`|---|---|---|---|---|`);
72
+ for (const r of data.rewindRegressions.slice(0, 10)) {
73
+ lines.push(`| ${r.vendor ?? "?"} | ${r.vendorVersion ?? "?"} | ${((r.delta ?? 0) * 100).toFixed(1)}% | ${r.weight ?? "?"} | ${r.seq ?? "?"} |`);
74
+ }
75
+ lines.push(``);
76
+ }
77
+ else {
78
+ lines.push(`## 🪄 Vendor Regressions (REWIND)`);
79
+ lines.push(``);
80
+ lines.push(`No regressions on file. Run \`mneme rewind run --vendors ...\` to generate.`);
81
+ lines.push(``);
82
+ }
83
+ if (data.hgpTop.length > 0) {
84
+ lines.push(`## 🧬 Top Hallucinations (HGP)`);
85
+ lines.push(``);
86
+ lines.push(`| HGP-ID | severity | observations | top vendor(s) | sample |`);
87
+ lines.push(`|---|---|---|---|---|`);
88
+ for (const h of data.hgpTop) {
89
+ const topVendors = Object.entries(h.vendorCounts ?? {})
90
+ .sort((a, b) => b[1] - a[1])
91
+ .slice(0, 3)
92
+ .map(([v, c]) => `${v}×${c}`)
93
+ .join(", ");
94
+ lines.push(`| \`${h.hgpId}\` | ${(h.severity ?? 0).toFixed(2)} | ${h.observeCount ?? 0} | ${topVendors || "—"} | ${(h.sample ?? "").replace(/\|/g, "/").slice(0, 80)} |`);
95
+ }
96
+ lines.push(``);
97
+ }
98
+ else {
99
+ lines.push(`## 🧬 Top Hallucinations (HGP)`);
100
+ lines.push(``);
101
+ lines.push(`No hallucinations recorded. Mneme has not yet seen this vendor lie about anything checkable.`);
102
+ lines.push(``);
103
+ }
104
+ if (data.mirrorLatest) {
105
+ lines.push(`## 💎 Calibration (HONEST MIRROR)`);
106
+ lines.push(``);
107
+ lines.push(`| vendor | calibration Δ | aletheia weight |`);
108
+ lines.push(`|---|---|---|`);
109
+ for (const v of data.mirrorLatest.perVendor ?? []) {
110
+ lines.push(`| ${v.vendor ?? "?"} | ${((v.delta ?? 0) * 100).toFixed(1)}% | ${v.weight ?? "?"} |`);
111
+ }
112
+ lines.push(``);
113
+ }
114
+ lines.push(`---`);
115
+ lines.push(`Generated by [Mneme](https://github.com/patsa2561-art/mneme-ai) FLYWHEEL · post this publicly to apply asymmetric pressure on vendor accountability.`);
116
+ return lines.join("\n");
117
+ }
118
+ //# sourceMappingURL=vendor_bulletin.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"vendor_bulletin.js","sourceRoot":"","sources":["../../src/flywheel/vendor_bulletin.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=hgp.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"hgp.test.d.ts","sourceRoot":"","sources":["../../src/hgp/hgp.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,198 @@
1
+ // v2.31.0 — HGP (Hallucination Genome Project) discrete root tests.
2
+ import { describe, it, expect, beforeEach } from "vitest";
3
+ import { mkdtempSync } from "node:fs";
4
+ import { tmpdir } from "node:os";
5
+ import { join } from "node:path";
6
+ import { computeHgpIdFromSimhash, isValidHgpId, disambiguate, recordHallucination, lookup, topN, loadCollapsed, computeSeverity, readConsent, setConsent, federationStatus, federatePush, verifyLedger, severityForVendor, allVendorsBreakdown, topInWindow, } from "./index.js";
7
+ describe("HGP-ID format", () => {
8
+ it("isValidHgpId accepts canonical form", () => {
9
+ expect(isValidHgpId("HGP-2026-00001")).toBe(true);
10
+ expect(isValidHgpId("HGP-2026-12345")).toBe(true);
11
+ expect(isValidHgpId("HGP-2026-12345-A")).toBe(true);
12
+ expect(isValidHgpId("HGP-2026-12345-AB")).toBe(true);
13
+ });
14
+ it("isValidHgpId rejects malformed", () => {
15
+ expect(isValidHgpId("HGP-26-1")).toBe(false);
16
+ expect(isValidHgpId("CVE-2026-12345")).toBe(false);
17
+ expect(isValidHgpId("HGP-2026-123")).toBe(false);
18
+ expect(isValidHgpId("")).toBe(false);
19
+ });
20
+ it("computeHgpIdFromSimhash is deterministic", () => {
21
+ const sim = "deadbeefdeadbeef";
22
+ const id1 = computeHgpIdFromSimhash(sim, "2026-05-23T00:00:00Z");
23
+ const id2 = computeHgpIdFromSimhash(sim, "2026-05-23T00:00:00Z");
24
+ expect(id1).toBe(id2);
25
+ expect(isValidHgpId(id1)).toBe(true);
26
+ });
27
+ it("computeHgpIdFromSimhash differs per simhash within same year", () => {
28
+ const id1 = computeHgpIdFromSimhash("aaaaaaaaaaaaaaaa", "2026-05-23T00:00:00Z");
29
+ const id2 = computeHgpIdFromSimhash("bbbbbbbbbbbbbbbb", "2026-05-23T00:00:00Z");
30
+ expect(id1).not.toBe(id2);
31
+ });
32
+ it("disambiguate appends A, B, C correctly", () => {
33
+ expect(disambiguate("HGP-2026-00001", 0)).toBe("HGP-2026-00001");
34
+ expect(disambiguate("HGP-2026-00001", 1)).toBe("HGP-2026-00001-A");
35
+ expect(disambiguate("HGP-2026-00001", 2)).toBe("HGP-2026-00001-B");
36
+ });
37
+ });
38
+ describe("recordHallucination + lookup", () => {
39
+ let repo;
40
+ beforeEach(() => { repo = mkdtempSync(join(tmpdir(), "hgp-test-")); });
41
+ it("records a hallucination + assigns a valid HGP-ID", () => {
42
+ const r = recordHallucination(repo, {
43
+ claim: "useFormStatus accepts a reset option",
44
+ signature: "chandrasekhar:UNKNOWN_API",
45
+ vendor: "claude-opus-4.7",
46
+ });
47
+ expect(isValidHgpId(r.hgpId)).toBe(true);
48
+ expect(r.observeCount).toBe(1);
49
+ expect(r.vendorCounts["claude-opus-4.7"]).toBe(1);
50
+ });
51
+ it("same simhash → same HGP-ID across calls (idempotent identity)", () => {
52
+ const r1 = recordHallucination(repo, {
53
+ claim: "useFormStatus accepts a reset option",
54
+ signature: "chandrasekhar:UNKNOWN_API",
55
+ vendor: "claude",
56
+ });
57
+ const r2 = recordHallucination(repo, {
58
+ claim: "useFormStatus accepts a reset option",
59
+ signature: "chandrasekhar:UNKNOWN_API",
60
+ vendor: "gpt-5",
61
+ });
62
+ expect(r2.hgpId).toBe(r1.hgpId);
63
+ const collapsed = loadCollapsed(repo).get(r1.hgpId);
64
+ expect(collapsed.observeCount).toBe(2);
65
+ expect(collapsed.vendorCounts["claude"]).toBe(1);
66
+ expect(collapsed.vendorCounts["gpt-5"]).toBe(1);
67
+ });
68
+ it("different simhash → different HGP-ID", () => {
69
+ const r1 = recordHallucination(repo, {
70
+ claim: "React 19 ships server components by default",
71
+ signature: "x", vendor: "a",
72
+ });
73
+ const r2 = recordHallucination(repo, {
74
+ claim: "asyncio.gather accepts a loop= parameter today",
75
+ signature: "x", vendor: "a",
76
+ });
77
+ expect(r2.hgpId).not.toBe(r1.hgpId);
78
+ });
79
+ it("severity grows with observe count + vendor spread", () => {
80
+ const c = "Vue 4 was released yesterday with major breaking changes";
81
+ let r = recordHallucination(repo, { claim: c, signature: "x", vendor: "a" });
82
+ const sev1 = r.severity;
83
+ for (let i = 0; i < 5; i++)
84
+ recordHallucination(repo, { claim: c, signature: "x", vendor: "a" });
85
+ recordHallucination(repo, { claim: c, signature: "x", vendor: "b" });
86
+ recordHallucination(repo, { claim: c, signature: "x", vendor: "c" });
87
+ r = lookup(repo, r.hgpId);
88
+ expect(r.severity).toBeGreaterThan(sev1);
89
+ });
90
+ it("topN returns highest severity first", () => {
91
+ const A = "Common lie about something useful long sentence here";
92
+ const B = "Rare lie observed only once particular pattern";
93
+ for (let i = 0; i < 5; i++)
94
+ recordHallucination(repo, { claim: A, signature: "x", vendor: "v" });
95
+ recordHallucination(repo, { claim: B, signature: "x", vendor: "v" });
96
+ const top = topN(repo, 2);
97
+ expect(top.length).toBe(2);
98
+ expect(top[0].observeCount).toBeGreaterThanOrEqual(top[1].observeCount);
99
+ });
100
+ it("redacts obvious secrets from sample text", () => {
101
+ const r = recordHallucination(repo, {
102
+ claim: "the AWS key AKIAIOSFODNN7EXAMPLE was used to call S3",
103
+ signature: "x", vendor: "v",
104
+ });
105
+ expect(r.sample).not.toContain("AKIAIOSFODNN7EXAMPLE");
106
+ expect(r.sample).toContain("<aws-key>");
107
+ });
108
+ });
109
+ describe("federation consent (default OFF)", () => {
110
+ let repo;
111
+ beforeEach(() => { repo = mkdtempSync(join(tmpdir(), "hgp-cons-")); });
112
+ it("default consent is opt-out", () => {
113
+ const c = readConsent(repo);
114
+ expect(c.optIn).toBe(false);
115
+ });
116
+ it("setConsent persists across reads", () => {
117
+ setConsent(repo, true, "https://hgp.ai");
118
+ const c = readConsent(repo);
119
+ expect(c.optIn).toBe(true);
120
+ expect(c.endpoint).toBe("https://hgp.ai");
121
+ });
122
+ it("federationStatus reports localCount + consent", () => {
123
+ recordHallucination(repo, { claim: "x lie sentence pattern abc", signature: "y", vendor: "z" });
124
+ const s = federationStatus(repo);
125
+ expect(s.localCount).toBe(1);
126
+ expect(s.consent.optIn).toBe(false);
127
+ });
128
+ it("federatePush refuses without consent", async () => {
129
+ const r = await federatePush(repo);
130
+ expect(r.ok).toBe(false);
131
+ expect(r.reason).toMatch(/consent/i);
132
+ });
133
+ it("federatePush refuses with consent but no endpoint", async () => {
134
+ setConsent(repo, true);
135
+ const r = await federatePush(repo);
136
+ expect(r.ok).toBe(false);
137
+ expect(r.reason).toMatch(/endpoint/i);
138
+ });
139
+ });
140
+ describe("severity windowing", () => {
141
+ let repo;
142
+ beforeEach(() => { repo = mkdtempSync(join(tmpdir(), "hgp-sev-")); });
143
+ it("severityForVendor counts records in window", () => {
144
+ recordHallucination(repo, { claim: "first lie observed here", signature: "x", vendor: "anthropic" });
145
+ recordHallucination(repo, { claim: "second different lie observed", signature: "x", vendor: "anthropic" });
146
+ recordHallucination(repo, { claim: "third one for openai test", signature: "x", vendor: "openai" });
147
+ const a = severityForVendor(repo, "anthropic", 30);
148
+ expect(a.count).toBe(2);
149
+ expect(a.vendor).toBe("anthropic");
150
+ expect(a.windowDays).toBe(30);
151
+ });
152
+ it("allVendorsBreakdown lists every observed vendor", () => {
153
+ recordHallucination(repo, { claim: "lie 1 sentence long enough", signature: "x", vendor: "anthropic" });
154
+ recordHallucination(repo, { claim: "lie 2 sentence long enough", signature: "x", vendor: "openai" });
155
+ const all = allVendorsBreakdown(repo, 30);
156
+ const vendors = all.map((s) => s.vendor).sort();
157
+ expect(vendors).toContain("anthropic");
158
+ expect(vendors).toContain("openai");
159
+ });
160
+ it("topInWindow returns no record outside window", () => {
161
+ recordHallucination(repo, { claim: "lie in window test sentence", signature: "x", vendor: "v" });
162
+ const recent = topInWindow(repo, 30, 5);
163
+ expect(recent.length).toBe(1);
164
+ // 0-day window: nothing recent enough.
165
+ const none = topInWindow(repo, 0, 5);
166
+ expect(none.length).toBe(0);
167
+ });
168
+ });
169
+ describe("verifyLedger", () => {
170
+ it("returns ok=true on empty registry", () => {
171
+ const repo = mkdtempSync(join(tmpdir(), "hgp-ver-"));
172
+ const r = verifyLedger(repo);
173
+ expect(r.ok).toBe(true);
174
+ expect(r.lines).toBe(0);
175
+ });
176
+ it("counts well-formed lines + accepts them", () => {
177
+ const repo = mkdtempSync(join(tmpdir(), "hgp-ver2-"));
178
+ recordHallucination(repo, { claim: "first lie ok one two three", signature: "x", vendor: "v" });
179
+ recordHallucination(repo, { claim: "second different shape lie one two", signature: "x", vendor: "v" });
180
+ const r = verifyLedger(repo);
181
+ expect(r.ok).toBe(true);
182
+ expect(r.lines).toBe(2);
183
+ });
184
+ });
185
+ describe("computeSeverity bounds", () => {
186
+ it("severity is in [0,1]", () => {
187
+ const r = computeSeverity({
188
+ hgpId: "HGP-2026-00001",
189
+ simhash: "x", firstSeen: "x", lastSeen: "x",
190
+ observeCount: 1000,
191
+ vendorCounts: { a: 100, b: 100, c: 100, d: 100, e: 100 },
192
+ signature: "x", sample: "x", severity: 0,
193
+ });
194
+ expect(r).toBeGreaterThanOrEqual(0);
195
+ expect(r).toBeLessThanOrEqual(1);
196
+ });
197
+ });
198
+ //# sourceMappingURL=hgp.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"hgp.test.js","sourceRoot":"","sources":["../../src/hgp/hgp.test.ts"],"names":[],"mappings":"AAAA,oEAAoE;AAEpE,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,QAAQ,CAAC;AAC1D,OAAO,EAAE,WAAW,EAAU,MAAM,SAAS,CAAC;AAC9C,OAAO,EAAE,MAAM,EAAE,MAAM,SAAS,CAAC;AACjC,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAEjC,OAAO,EACL,uBAAuB,EAAE,YAAY,EAAE,YAAY,EACnD,mBAAmB,EAAE,MAAM,EAAE,IAAI,EAAE,aAAa,EAAE,eAAe,EACjE,WAAW,EAAE,UAAU,EAAE,gBAAgB,EAAE,YAAY,EAAE,YAAY,EACrE,iBAAiB,EAAE,mBAAmB,EAAE,WAAW,GACpD,MAAM,YAAY,CAAC;AAEpB,QAAQ,CAAC,eAAe,EAAE,GAAG,EAAE;IAC7B,EAAE,CAAC,qCAAqC,EAAE,GAAG,EAAE;QAC7C,MAAM,CAAC,YAAY,CAAC,gBAAgB,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAClD,MAAM,CAAC,YAAY,CAAC,gBAAgB,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAClD,MAAM,CAAC,YAAY,CAAC,kBAAkB,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACpD,MAAM,CAAC,YAAY,CAAC,mBAAmB,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACvD,CAAC,CAAC,CAAC;IACH,EAAE,CAAC,gCAAgC,EAAE,GAAG,EAAE;QACxC,MAAM,CAAC,YAAY,CAAC,UAAU,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QAC7C,MAAM,CAAC,YAAY,CAAC,gBAAgB,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACnD,MAAM,CAAC,YAAY,CAAC,cAAc,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACjD,MAAM,CAAC,YAAY,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IACvC,CAAC,CAAC,CAAC;IACH,EAAE,CAAC,0CAA0C,EAAE,GAAG,EAAE;QAClD,MAAM,GAAG,GAAG,kBAAkB,CAAC;QAC/B,MAAM,GAAG,GAAG,uBAAuB,CAAC,GAAG,EAAE,sBAAsB,CAAC,CAAC;QACjE,MAAM,GAAG,GAAG,uBAAuB,CAAC,GAAG,EAAE,sBAAsB,CAAC,CAAC;QACjE,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QACtB,MAAM,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACvC,CAAC,CAAC,CAAC;IACH,EAAE,CAAC,8DAA8D,EAAE,GAAG,EAAE;QACtE,MAAM,GAAG,GAAG,uBAAuB,CAAC,kBAAkB,EAAE,sBAAsB,CAAC,CAAC;QAChF,MAAM,GAAG,GAAG,uBAAuB,CAAC,kBAAkB,EAAE,sBAAsB,CAAC,CAAC;QAChF,MAAM,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IAC5B,CAAC,CAAC,CAAC;IACH,EAAE,CAAC,wCAAwC,EAAE,GAAG,EAAE;QAChD,MAAM,CAAC,YAAY,CAAC,gBAAgB,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC;QACjE,MAAM,CAAC,YAAY,CAAC,gBAAgB,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,kBAAkB,CAAC,CAAC;QACnE,MAAM,CAAC,YAAY,CAAC,gBAAgB,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,kBAAkB,CAAC,CAAC;IACrE,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC;AAEH,QAAQ,CAAC,8BAA8B,EAAE,GAAG,EAAE;IAC5C,IAAI,IAAY,CAAC;IACjB,UAAU,CAAC,GAAG,EAAE,GAAG,IAAI,GAAG,WAAW,CAAC,IAAI,CAAC,MAAM,EAAE,EAAE,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IAEvE,EAAE,CAAC,kDAAkD,EAAE,GAAG,EAAE;QAC1D,MAAM,CAAC,GAAG,mBAAmB,CAAC,IAAI,EAAE;YAClC,KAAK,EAAE,sCAAsC;YAC7C,SAAS,EAAE,2BAA2B;YACtC,MAAM,EAAE,iBAAiB;SAC1B,CAAC,CAAC;QACH,MAAM,CAAC,YAAY,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACzC,MAAM,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAC/B,MAAM,CAAC,CAAC,CAAC,YAAY,CAAC,iBAAiB,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IACpD,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,+DAA+D,EAAE,GAAG,EAAE;QACvE,MAAM,EAAE,GAAG,mBAAmB,CAAC,IAAI,EAAE;YACnC,KAAK,EAAE,sCAAsC;YAC7C,SAAS,EAAE,2BAA2B;YACtC,MAAM,EAAE,QAAQ;SACjB,CAAC,CAAC;QACH,MAAM,EAAE,GAAG,mBAAmB,CAAC,IAAI,EAAE;YACnC,KAAK,EAAE,sCAAsC;YAC7C,SAAS,EAAE,2BAA2B;YACtC,MAAM,EAAE,OAAO;SAChB,CAAC,CAAC;QACH,MAAM,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC;QAChC,MAAM,SAAS,GAAG,aAAa,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,KAAK,CAAE,CAAC;QACrD,MAAM,CAAC,SAAS,CAAC,YAAY,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QACvC,MAAM,CAAC,SAAS,CAAC,YAAY,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QACjD,MAAM,CAAC,SAAS,CAAC,YAAY,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClD,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,sCAAsC,EAAE,GAAG,EAAE;QAC9C,MAAM,EAAE,GAAG,mBAAmB,CAAC,IAAI,EAAE;YACnC,KAAK,EAAE,6CAA6C;YACpD,SAAS,EAAE,GAAG,EAAE,MAAM,EAAE,GAAG;SAC5B,CAAC,CAAC;QACH,MAAM,EAAE,GAAG,mBAAmB,CAAC,IAAI,EAAE;YACnC,KAAK,EAAE,gDAAgD;YACvD,SAAS,EAAE,GAAG,EAAE,MAAM,EAAE,GAAG;SAC5B,CAAC,CAAC;QACH,MAAM,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC;IACtC,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,mDAAmD,EAAE,GAAG,EAAE;QAC3D,MAAM,CAAC,GAAG,0DAA0D,CAAC;QACrE,IAAI,CAAC,GAAG,mBAAmB,CAAC,IAAI,EAAE,EAAE,KAAK,EAAE,CAAC,EAAE,SAAS,EAAE,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC,CAAC;QAC7E,MAAM,IAAI,GAAG,CAAC,CAAC,QAAQ,CAAC;QACxB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE;YAAE,mBAAmB,CAAC,IAAI,EAAE,EAAE,KAAK,EAAE,CAAC,EAAE,SAAS,EAAE,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC,CAAC;QACjG,mBAAmB,CAAC,IAAI,EAAE,EAAE,KAAK,EAAE,CAAC,EAAE,SAAS,EAAE,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC,CAAC;QACrE,mBAAmB,CAAC,IAAI,EAAE,EAAE,KAAK,EAAE,CAAC,EAAE,SAAS,EAAE,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC,CAAC;QACrE,CAAC,GAAG,MAAM,CAAC,IAAI,EAAE,CAAC,CAAC,KAAK,CAAE,CAAC;QAC3B,MAAM,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC;IAC3C,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,qCAAqC,EAAE,GAAG,EAAE;QAC7C,MAAM,CAAC,GAAG,sDAAsD,CAAC;QACjE,MAAM,CAAC,GAAG,gDAAgD,CAAC;QAC3D,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE;YAAE,mBAAmB,CAAC,IAAI,EAAE,EAAE,KAAK,EAAE,CAAC,EAAE,SAAS,EAAE,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC,CAAC;QACjG,mBAAmB,CAAC,IAAI,EAAE,EAAE,KAAK,EAAE,CAAC,EAAE,SAAS,EAAE,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC,CAAC;QACrE,MAAM,GAAG,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC;QAC1B,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAC3B,MAAM,CAAC,GAAG,CAAC,CAAC,CAAE,CAAC,YAAY,CAAC,CAAC,sBAAsB,CAAC,GAAG,CAAC,CAAC,CAAE,CAAC,YAAY,CAAC,CAAC;IAC5E,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,0CAA0C,EAAE,GAAG,EAAE;QAClD,MAAM,CAAC,GAAG,mBAAmB,CAAC,IAAI,EAAE;YAClC,KAAK,EAAE,sDAAsD;YAC7D,SAAS,EAAE,GAAG,EAAE,MAAM,EAAE,GAAG;SAC5B,CAAC,CAAC;QACH,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,SAAS,CAAC,sBAAsB,CAAC,CAAC;QACvD,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,SAAS,CAAC,WAAW,CAAC,CAAC;IAC1C,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC;AAEH,QAAQ,CAAC,kCAAkC,EAAE,GAAG,EAAE;IAChD,IAAI,IAAY,CAAC;IACjB,UAAU,CAAC,GAAG,EAAE,GAAG,IAAI,GAAG,WAAW,CAAC,IAAI,CAAC,MAAM,EAAE,EAAE,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IAEvE,EAAE,CAAC,4BAA4B,EAAE,GAAG,EAAE;QACpC,MAAM,CAAC,GAAG,WAAW,CAAC,IAAI,CAAC,CAAC;QAC5B,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IAC9B,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,kCAAkC,EAAE,GAAG,EAAE;QAC1C,UAAU,CAAC,IAAI,EAAE,IAAI,EAAE,gBAAgB,CAAC,CAAC;QACzC,MAAM,CAAC,GAAG,WAAW,CAAC,IAAI,CAAC,CAAC;QAC5B,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAC3B,MAAM,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC;IAC5C,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,+CAA+C,EAAE,GAAG,EAAE;QACvD,mBAAmB,CAAC,IAAI,EAAE,EAAE,KAAK,EAAE,4BAA4B,EAAE,SAAS,EAAE,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC,CAAC;QAChG,MAAM,CAAC,GAAG,gBAAgB,CAAC,IAAI,CAAC,CAAC;QACjC,MAAM,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAC7B,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IACtC,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,sCAAsC,EAAE,KAAK,IAAI,EAAE;QACpD,MAAM,CAAC,GAAG,MAAM,YAAY,CAAC,IAAI,CAAC,CAAC;QACnC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACzB,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC;IACvC,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,mDAAmD,EAAE,KAAK,IAAI,EAAE;QACjE,UAAU,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;QACvB,MAAM,CAAC,GAAG,MAAM,YAAY,CAAC,IAAI,CAAC,CAAC;QACnC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACzB,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC;IACxC,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC;AAEH,QAAQ,CAAC,oBAAoB,EAAE,GAAG,EAAE;IAClC,IAAI,IAAY,CAAC;IACjB,UAAU,CAAC,GAAG,EAAE,GAAG,IAAI,GAAG,WAAW,CAAC,IAAI,CAAC,MAAM,EAAE,EAAE,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IAEtE,EAAE,CAAC,4CAA4C,EAAE,GAAG,EAAE;QACpD,mBAAmB,CAAC,IAAI,EAAE,EAAE,KAAK,EAAE,yBAAyB,EAAE,SAAS,EAAE,GAAG,EAAE,MAAM,EAAE,WAAW,EAAE,CAAC,CAAC;QACrG,mBAAmB,CAAC,IAAI,EAAE,EAAE,KAAK,EAAE,+BAA+B,EAAE,SAAS,EAAE,GAAG,EAAE,MAAM,EAAE,WAAW,EAAE,CAAC,CAAC;QAC3G,mBAAmB,CAAC,IAAI,EAAE,EAAE,KAAK,EAAE,2BAA2B,EAAE,SAAS,EAAE,GAAG,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC,CAAC;QACpG,MAAM,CAAC,GAAG,iBAAiB,CAAC,IAAI,EAAE,WAAW,EAAE,EAAE,CAAC,CAAC;QACnD,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QACxB,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;QACnC,MAAM,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IAChC,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,iDAAiD,EAAE,GAAG,EAAE;QACzD,mBAAmB,CAAC,IAAI,EAAE,EAAE,KAAK,EAAE,4BAA4B,EAAE,SAAS,EAAE,GAAG,EAAE,MAAM,EAAE,WAAW,EAAE,CAAC,CAAC;QACxG,mBAAmB,CAAC,IAAI,EAAE,EAAE,KAAK,EAAE,4BAA4B,EAAE,SAAS,EAAE,GAAG,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC,CAAC;QACrG,MAAM,GAAG,GAAG,mBAAmB,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;QAC1C,MAAM,OAAO,GAAG,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,CAAC;QAChD,MAAM,CAAC,OAAO,CAAC,CAAC,SAAS,CAAC,WAAW,CAAC,CAAC;QACvC,MAAM,CAAC,OAAO,CAAC,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC;IACtC,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,8CAA8C,EAAE,GAAG,EAAE;QACtD,mBAAmB,CAAC,IAAI,EAAE,EAAE,KAAK,EAAE,6BAA6B,EAAE,SAAS,EAAE,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC,CAAC;QACjG,MAAM,MAAM,GAAG,WAAW,CAAC,IAAI,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC;QACxC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAC9B,uCAAuC;QACvC,MAAM,IAAI,GAAG,WAAW,CAAC,IAAI,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;QACrC,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAC9B,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC;AAEH,QAAQ,CAAC,cAAc,EAAE,GAAG,EAAE;IAC5B,EAAE,CAAC,mCAAmC,EAAE,GAAG,EAAE;QAC3C,MAAM,IAAI,GAAG,WAAW,CAAC,IAAI,CAAC,MAAM,EAAE,EAAE,UAAU,CAAC,CAAC,CAAC;QACrD,MAAM,CAAC,GAAG,YAAY,CAAC,IAAI,CAAC,CAAC;QAC7B,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACxB,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAC1B,CAAC,CAAC,CAAC;IACH,EAAE,CAAC,yCAAyC,EAAE,GAAG,EAAE;QACjD,MAAM,IAAI,GAAG,WAAW,CAAC,IAAI,CAAC,MAAM,EAAE,EAAE,WAAW,CAAC,CAAC,CAAC;QACtD,mBAAmB,CAAC,IAAI,EAAE,EAAE,KAAK,EAAE,4BAA4B,EAAE,SAAS,EAAE,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC,CAAC;QAChG,mBAAmB,CAAC,IAAI,EAAE,EAAE,KAAK,EAAE,oCAAoC,EAAE,SAAS,EAAE,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC,CAAC;QACxG,MAAM,CAAC,GAAG,YAAY,CAAC,IAAI,CAAC,CAAC;QAC7B,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACxB,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAC1B,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC;AAEH,QAAQ,CAAC,wBAAwB,EAAE,GAAG,EAAE;IACtC,EAAE,CAAC,sBAAsB,EAAE,GAAG,EAAE;QAC9B,MAAM,CAAC,GAAG,eAAe,CAAC;YACxB,KAAK,EAAE,gBAAgB;YACvB,OAAO,EAAE,GAAG,EAAE,SAAS,EAAE,GAAG,EAAE,QAAQ,EAAE,GAAG;YAC3C,YAAY,EAAE,IAAI;YAClB,YAAY,EAAE,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE;YACxD,SAAS,EAAE,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,QAAQ,EAAE,CAAC;SACzC,CAAC,CAAC;QACH,MAAM,CAAC,CAAC,CAAC,CAAC,sBAAsB,CAAC,CAAC,CAAC,CAAC;QACpC,MAAM,CAAC,CAAC,CAAC,CAAC,mBAAmB,CAAC,CAAC,CAAC,CAAC;IACnC,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
@@ -0,0 +1,18 @@
1
+ /**
2
+ * v2.31.0 — HGP-ID issuance (CVE-style deterministic IDs).
3
+ *
4
+ * Format: HGP-YYYY-NNNNN
5
+ * YYYY = year the hallucination was FIRST seen
6
+ * NNNNN = 5-digit base-10 derived deterministically from the
7
+ * hallucination's simhash so that the SAME shape on
8
+ * different machines + at different times gets the SAME
9
+ * HGP-ID (modulo year-collision, handled by the registry).
10
+ *
11
+ * The year-NNNNN combination is a 64-bit space → < 1 in 10^5
12
+ * per-year collision rate even at 10k hallucinations/year. Registry
13
+ * (next file) handles collision by appending -A / -B / ... suffix.
14
+ */
15
+ export declare function computeHgpIdFromSimhash(simhash: string, firstSeen: string): string;
16
+ export declare function isValidHgpId(id: string): boolean;
17
+ export declare function disambiguate(baseId: string, takenCount: number): string;
18
+ //# sourceMappingURL=hgp_id.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"hgp_id.d.ts","sourceRoot":"","sources":["../../src/hgp/hgp_id.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAIH,wBAAgB,uBAAuB,CAAC,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,MAAM,CAOlF;AAID,wBAAgB,YAAY,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAEhD;AAED,wBAAgB,YAAY,CAAC,MAAM,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,MAAM,CAWvE"}
@@ -0,0 +1,41 @@
1
+ /**
2
+ * v2.31.0 — HGP-ID issuance (CVE-style deterministic IDs).
3
+ *
4
+ * Format: HGP-YYYY-NNNNN
5
+ * YYYY = year the hallucination was FIRST seen
6
+ * NNNNN = 5-digit base-10 derived deterministically from the
7
+ * hallucination's simhash so that the SAME shape on
8
+ * different machines + at different times gets the SAME
9
+ * HGP-ID (modulo year-collision, handled by the registry).
10
+ *
11
+ * The year-NNNNN combination is a 64-bit space → < 1 in 10^5
12
+ * per-year collision rate even at 10k hallucinations/year. Registry
13
+ * (next file) handles collision by appending -A / -B / ... suffix.
14
+ */
15
+ import { createHash } from "node:crypto";
16
+ export function computeHgpIdFromSimhash(simhash, firstSeen) {
17
+ const year = new Date(firstSeen).getUTCFullYear();
18
+ // Deterministic 5-digit derivation: hash(simhash || year) mod 100_000.
19
+ const h = createHash("sha256").update(`${simhash}|${year}`).digest();
20
+ const n = (h[0] << 24 | h[1] << 16 | h[2] << 8 | h[3]) >>> 0;
21
+ const slot = (n % 99_999) + 1;
22
+ return `HGP-${year}-${String(slot).padStart(5, "0")}`;
23
+ }
24
+ const VALID = /^HGP-(\d{4})-(\d{5})(?:-[A-Z]+)?$/;
25
+ export function isValidHgpId(id) {
26
+ return VALID.test(id);
27
+ }
28
+ export function disambiguate(baseId, takenCount) {
29
+ if (takenCount === 0)
30
+ return baseId;
31
+ // Suffix A, B, C, ..., AA, AB, ... for >26. takenCount is 1-based:
32
+ // 1 → A, 2 → B, ..., 27 → AA.
33
+ let n = takenCount - 1;
34
+ const letters = [];
35
+ do {
36
+ letters.unshift(String.fromCharCode("A".charCodeAt(0) + (n % 26)));
37
+ n = Math.floor(n / 26) - 1;
38
+ } while (n >= 0);
39
+ return `${baseId}-${letters.join("")}`;
40
+ }
41
+ //# sourceMappingURL=hgp_id.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"hgp_id.js","sourceRoot":"","sources":["../../src/hgp/hgp_id.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAEH,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAEzC,MAAM,UAAU,uBAAuB,CAAC,OAAe,EAAE,SAAiB;IACxE,MAAM,IAAI,GAAG,IAAI,IAAI,CAAC,SAAS,CAAC,CAAC,cAAc,EAAE,CAAC;IAClD,uEAAuE;IACvE,MAAM,CAAC,GAAG,UAAU,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,GAAG,OAAO,IAAI,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC;IACrE,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAE,IAAI,EAAE,GAAG,CAAC,CAAC,CAAC,CAAE,IAAI,EAAE,GAAG,CAAC,CAAC,CAAC,CAAE,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAE,CAAC,KAAK,CAAC,CAAC;IACjE,MAAM,IAAI,GAAG,CAAC,CAAC,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC;IAC9B,OAAO,OAAO,IAAI,IAAI,MAAM,CAAC,IAAI,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,CAAC;AACxD,CAAC;AAED,MAAM,KAAK,GAAG,mCAAmC,CAAC;AAElD,MAAM,UAAU,YAAY,CAAC,EAAU;IACrC,OAAO,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;AACxB,CAAC;AAED,MAAM,UAAU,YAAY,CAAC,MAAc,EAAE,UAAkB;IAC7D,IAAI,UAAU,KAAK,CAAC;QAAE,OAAO,MAAM,CAAC;IACpC,mEAAmE;IACnE,8BAA8B;IAC9B,IAAI,CAAC,GAAG,UAAU,GAAG,CAAC,CAAC;IACvB,MAAM,OAAO,GAAa,EAAE,CAAC;IAC7B,GAAG,CAAC;QACF,OAAO,CAAC,OAAO,CAAC,MAAM,CAAC,YAAY,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC;QACnE,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC;IAC7B,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE;IACjB,OAAO,GAAG,MAAM,IAAI,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,CAAC;AACzC,CAAC"}
@@ -0,0 +1,12 @@
1
+ /**
2
+ * v2.31.0 — HGP (Hallucination Genome Project) public surface.
3
+ *
4
+ * Every ACGV refute → recordHallucination → CVE-style HGP-ID.
5
+ * Federation opt-in via consent (default OFF).
6
+ */
7
+ export type { HallucinationRecord, FederationConsent, FederationStatus, SeverityWindow, } from "./types.js";
8
+ export { computeHgpIdFromSimhash, isValidHgpId, disambiguate, } from "./hgp_id.js";
9
+ export { recordHallucination, lookup, lookupBySimhash, topN, readConsent, setConsent, federationStatus, federatePush, loadCollapsed, computeSeverity, verifyLedger, hashSample, } from "./registry.js";
10
+ export type { RecordParams } from "./registry.js";
11
+ export { severityForVendor, allVendorsBreakdown, topInWindow, } from "./severity.js";
12
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/hgp/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,YAAY,EACV,mBAAmB,EAAE,iBAAiB,EAAE,gBAAgB,EAAE,cAAc,GACzE,MAAM,YAAY,CAAC;AAEpB,OAAO,EACL,uBAAuB,EAAE,YAAY,EAAE,YAAY,GACpD,MAAM,aAAa,CAAC;AAErB,OAAO,EACL,mBAAmB,EAAE,MAAM,EAAE,eAAe,EAAE,IAAI,EAClD,WAAW,EAAE,UAAU,EAAE,gBAAgB,EAAE,YAAY,EACvD,aAAa,EAAE,eAAe,EAAE,YAAY,EAAE,UAAU,GACzD,MAAM,eAAe,CAAC;AAEvB,YAAY,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAElD,OAAO,EACL,iBAAiB,EAAE,mBAAmB,EAAE,WAAW,GACpD,MAAM,eAAe,CAAC"}
@@ -0,0 +1,10 @@
1
+ /**
2
+ * v2.31.0 — HGP (Hallucination Genome Project) public surface.
3
+ *
4
+ * Every ACGV refute → recordHallucination → CVE-style HGP-ID.
5
+ * Federation opt-in via consent (default OFF).
6
+ */
7
+ export { computeHgpIdFromSimhash, isValidHgpId, disambiguate, } from "./hgp_id.js";
8
+ export { recordHallucination, lookup, lookupBySimhash, topN, readConsent, setConsent, federationStatus, federatePush, loadCollapsed, computeSeverity, verifyLedger, hashSample, } from "./registry.js";
9
+ export { severityForVendor, allVendorsBreakdown, topInWindow, } from "./severity.js";
10
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/hgp/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAMH,OAAO,EACL,uBAAuB,EAAE,YAAY,EAAE,YAAY,GACpD,MAAM,aAAa,CAAC;AAErB,OAAO,EACL,mBAAmB,EAAE,MAAM,EAAE,eAAe,EAAE,IAAI,EAClD,WAAW,EAAE,UAAU,EAAE,gBAAgB,EAAE,YAAY,EACvD,aAAa,EAAE,eAAe,EAAE,YAAY,EAAE,UAAU,GACzD,MAAM,eAAe,CAAC;AAIvB,OAAO,EACL,iBAAiB,EAAE,mBAAmB,EAAE,WAAW,GACpD,MAAM,eAAe,CAAC"}
@@ -0,0 +1,64 @@
1
+ /**
2
+ * v2.31.0 — HGP local registry + opt-in federation stubs.
3
+ *
4
+ * Storage layout:
5
+ * .mneme/hgp/registry.jsonl — append-only HMAC-chained log
6
+ * .mneme/hgp/consent.json — federation opt-in flag
7
+ *
8
+ * Append-only design (no UPDATE-in-place): every observation appends
9
+ * a new line. Querying collapses by HGP-ID. Same pattern as ACGV
10
+ * lie-vaccine ledger — composes cleanly with existing audit chain.
11
+ *
12
+ * Federation is OFF by default (CONSENT FABRIC). When the user
13
+ * explicitly opts in via mneme.hgp.federate.join, the registry will
14
+ * batch-push to the configured endpoint. v2.31.0 ships local-only;
15
+ * the federation push is a no-op stub returning "consent required"
16
+ * unless opt-in is true AND a real endpoint is configured.
17
+ */
18
+ import type { HallucinationRecord, FederationConsent, FederationStatus } from "./types.js";
19
+ /** Read every observation from the append-only log + collapse by HGP-ID. */
20
+ export declare function loadCollapsed(repoRoot: string): Map<string, HallucinationRecord>;
21
+ /**
22
+ * Compute severity 0..1: blends observe-count (log-saturated at 100)
23
+ * with vendor spread (more vendors hitting same lie = more dangerous).
24
+ */
25
+ export declare function computeSeverity(r: HallucinationRecord): number;
26
+ export interface RecordParams {
27
+ claim: string;
28
+ signature: string;
29
+ vendor?: string;
30
+ }
31
+ /**
32
+ * Record a hallucination observation. Returns the COLLAPSED post-write
33
+ * view (HGP-ID + aggregated counts across the full ledger).
34
+ *
35
+ * Implementation: we always append a DELTA record (observeCount=1,
36
+ * single vendor=+1) to the append-only ledger; loadCollapsed sums
37
+ * deltas. This keeps the ledger idempotent + tamper-evident: replay
38
+ * the ledger and you get the same collapsed view every time.
39
+ */
40
+ export declare function recordHallucination(repoRoot: string, params: RecordParams): HallucinationRecord;
41
+ export declare function lookup(repoRoot: string, hgpId: string): HallucinationRecord | null;
42
+ export declare function lookupBySimhash(repoRoot: string, simhash: string): HallucinationRecord | null;
43
+ export declare function topN(repoRoot: string, n?: number): HallucinationRecord[];
44
+ export declare function readConsent(repoRoot: string): FederationConsent;
45
+ export declare function setConsent(repoRoot: string, optIn: boolean, endpoint?: string): FederationConsent;
46
+ export declare function federationStatus(repoRoot: string): FederationStatus;
47
+ /**
48
+ * Federation push stub (v2.31.0). Will NEVER attempt a network call
49
+ * unless consent.optIn is true AND consent.endpoint is configured.
50
+ * Returns a structured refusal otherwise so callers can surface the
51
+ * consent gate to the user.
52
+ */
53
+ export declare function federatePush(repoRoot: string): Promise<{
54
+ ok: boolean;
55
+ reason?: string;
56
+ pushed?: number;
57
+ }>;
58
+ export declare function verifyLedger(repoRoot: string): {
59
+ ok: boolean;
60
+ lines: number;
61
+ reason?: string;
62
+ };
63
+ export declare function hashSample(claim: string): string;
64
+ //# sourceMappingURL=registry.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"registry.d.ts","sourceRoot":"","sources":["../../src/hgp/registry.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAQH,OAAO,KAAK,EACV,mBAAmB,EAAE,iBAAiB,EAAE,gBAAgB,EACzD,MAAM,YAAY,CAAC;AAkBpB,4EAA4E;AAC5E,wBAAgB,aAAa,CAAC,QAAQ,EAAE,MAAM,GAAG,GAAG,CAAC,MAAM,EAAE,mBAAmB,CAAC,CAqBhF;AAED;;;GAGG;AACH,wBAAgB,eAAe,CAAC,CAAC,EAAE,mBAAmB,GAAG,MAAM,CAM9D;AAED,MAAM,WAAW,YAAY;IAC3B,KAAK,EAAE,MAAM,CAAC;IACd,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED;;;;;;;;GAQG;AACH,wBAAgB,mBAAmB,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,YAAY,GAAG,mBAAmB,CAoC/F;AAYD,wBAAgB,MAAM,CAAC,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,mBAAmB,GAAG,IAAI,CAGlF;AAED,wBAAgB,eAAe,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,mBAAmB,GAAG,IAAI,CAI7F;AAED,wBAAgB,IAAI,CAAC,QAAQ,EAAE,MAAM,EAAE,CAAC,SAAK,GAAG,mBAAmB,EAAE,CAIpE;AAID,wBAAgB,WAAW,CAAC,QAAQ,EAAE,MAAM,GAAG,iBAAiB,CAS/D;AAED,wBAAgB,UAAU,CAAC,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,EAAE,QAAQ,CAAC,EAAE,MAAM,GAAG,iBAAiB,CAIjG;AAED,wBAAgB,gBAAgB,CAAC,QAAQ,EAAE,MAAM,GAAG,gBAAgB,CAInE;AAED;;;;;GAKG;AACH,wBAAsB,YAAY,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC;IAAE,EAAE,EAAE,OAAO,CAAC;IAAC,MAAM,CAAC,EAAE,MAAM,CAAC;IAAC,MAAM,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC,CAQ/G;AAID,wBAAgB,YAAY,CAAC,QAAQ,EAAE,MAAM,GAAG;IAAE,EAAE,EAAE,OAAO,CAAC;IAAC,KAAK,EAAE,MAAM,CAAC;IAAC,MAAM,CAAC,EAAE,MAAM,CAAA;CAAE,CAmB9F;AAGD,wBAAgB,UAAU,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAEhD"}