@mneme-ai/core 2.19.36 → 2.19.37

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 (55) hide show
  1. package/dist/browser_receipt/browser.test.d.ts +2 -0
  2. package/dist/browser_receipt/browser.test.d.ts.map +1 -0
  3. package/dist/browser_receipt/browser.test.js +156 -0
  4. package/dist/browser_receipt/browser.test.js.map +1 -0
  5. package/dist/browser_receipt/index.d.ts +109 -0
  6. package/dist/browser_receipt/index.d.ts.map +1 -0
  7. package/dist/browser_receipt/index.js +231 -0
  8. package/dist/browser_receipt/index.js.map +1 -0
  9. package/dist/citizens_audit/citizens.test.d.ts +2 -0
  10. package/dist/citizens_audit/citizens.test.d.ts.map +1 -0
  11. package/dist/citizens_audit/citizens.test.js +167 -0
  12. package/dist/citizens_audit/citizens.test.js.map +1 -0
  13. package/dist/citizens_audit/index.d.ts +118 -0
  14. package/dist/citizens_audit/index.d.ts.map +1 -0
  15. package/dist/citizens_audit/index.js +215 -0
  16. package/dist/citizens_audit/index.js.map +1 -0
  17. package/dist/conscience_card/card.test.d.ts +2 -0
  18. package/dist/conscience_card/card.test.d.ts.map +1 -0
  19. package/dist/conscience_card/card.test.js +173 -0
  20. package/dist/conscience_card/card.test.js.map +1 -0
  21. package/dist/conscience_card/index.d.ts +75 -0
  22. package/dist/conscience_card/index.d.ts.map +1 -0
  23. package/dist/conscience_card/index.js +152 -0
  24. package/dist/conscience_card/index.js.map +1 -0
  25. package/dist/cosmic/aurelian_v1937.test.d.ts +2 -0
  26. package/dist/cosmic/aurelian_v1937.test.d.ts.map +1 -0
  27. package/dist/cosmic/aurelian_v1937.test.js +90 -0
  28. package/dist/cosmic/aurelian_v1937.test.js.map +1 -0
  29. package/dist/index.d.ts +5 -0
  30. package/dist/index.d.ts.map +1 -1
  31. package/dist/index.js +11 -0
  32. package/dist/index.js.map +1 -1
  33. package/dist/mayor_election/index.d.ts +147 -0
  34. package/dist/mayor_election/index.d.ts.map +1 -0
  35. package/dist/mayor_election/index.js +256 -0
  36. package/dist/mayor_election/index.js.map +1 -0
  37. package/dist/mayor_election/mayor.test.d.ts +2 -0
  38. package/dist/mayor_election/mayor.test.d.ts.map +1 -0
  39. package/dist/mayor_election/mayor.test.js +175 -0
  40. package/dist/mayor_election/mayor.test.js.map +1 -0
  41. package/dist/mneme_receipt_protocol/index.d.ts +164 -0
  42. package/dist/mneme_receipt_protocol/index.d.ts.map +1 -0
  43. package/dist/mneme_receipt_protocol/index.js +335 -0
  44. package/dist/mneme_receipt_protocol/index.js.map +1 -0
  45. package/dist/mneme_receipt_protocol/protocol.test.d.ts +2 -0
  46. package/dist/mneme_receipt_protocol/protocol.test.d.ts.map +1 -0
  47. package/dist/mneme_receipt_protocol/protocol.test.js +176 -0
  48. package/dist/mneme_receipt_protocol/protocol.test.js.map +1 -0
  49. package/dist/whats_new.d.ts.map +1 -1
  50. package/dist/whats_new.js +8 -0
  51. package/dist/whats_new.js.map +1 -1
  52. package/dist/wrapper_genesis/index.d.ts.map +1 -1
  53. package/dist/wrapper_genesis/index.js +40 -0
  54. package/dist/wrapper_genesis/index.js.map +1 -1
  55. package/package.json +1 -1
@@ -0,0 +1,175 @@
1
+ import { describe, it, expect } from "vitest";
2
+ import { freshElectionState, recordVote, verifyVoteLedger, tallyElection, verifyElectionResult, runScheduledElection, formatMayorLine, computeElectionStats, MAYOR_ELECTION_TUNABLES, } from "./index.js";
3
+ const SECRET = "mayor-test-99";
4
+ describe("v2.19.37 MAYOR ELECTION — vote ledger", () => {
5
+ it("freshElectionState has 30-day default term", () => {
6
+ const s = freshElectionState({ repoId: "test", termStartMs: 0 });
7
+ expect(s.termMs).toBe(MAYOR_ELECTION_TUNABLES.DEFAULT_TERM_MS);
8
+ expect(s.currentMayor).toBeNull();
9
+ expect(s.votes).toEqual([]);
10
+ });
11
+ it("recordVote chains HMAC + appends to ledger", () => {
12
+ let state = freshElectionState({ repoId: "test", termStartMs: 0 });
13
+ const r1 = recordVote({ state, vendor: "claude", castAtMs: 100, secret: SECRET });
14
+ expect(r1.vote).not.toBeNull();
15
+ expect(r1.vote.prevSig).toBeNull();
16
+ state = r1.state;
17
+ const r2 = recordVote({ state, vendor: "gpt", castAtMs: 200, secret: SECRET });
18
+ expect(r2.vote.prevSig).toBe(r1.vote.sig);
19
+ expect(r2.state.votes.length).toBe(2);
20
+ });
21
+ it("recordVote REJECTS vote outside term window", () => {
22
+ const state = freshElectionState({ repoId: "test", termStartMs: 1000, termMs: 10_000 });
23
+ const r = recordVote({ state, vendor: "claude", castAtMs: 20_000, secret: SECRET });
24
+ expect(r.vote).toBeNull();
25
+ expect(r.reason).toContain("outside term");
26
+ });
27
+ it("recordVote REJECTS empty vendor", () => {
28
+ const state = freshElectionState({ repoId: "test", termStartMs: 0 });
29
+ const r = recordVote({ state, vendor: "", castAtMs: 100, secret: SECRET });
30
+ expect(r.vote).toBeNull();
31
+ });
32
+ it("verifyVoteLedger PASSES clean chain", () => {
33
+ let state = freshElectionState({ repoId: "test", termStartMs: 0 });
34
+ for (let i = 0; i < 10; i++) {
35
+ state = recordVote({ state, vendor: `v${i}`, castAtMs: i * 100, secret: SECRET }).state;
36
+ }
37
+ expect(verifyVoteLedger(state, SECRET)).toBe(true);
38
+ });
39
+ it("verifyVoteLedger DETECTS tampering", () => {
40
+ let state = freshElectionState({ repoId: "test", termStartMs: 0 });
41
+ for (let i = 0; i < 5; i++) {
42
+ state = recordVote({ state, vendor: "v", castAtMs: i * 100, secret: SECRET }).state;
43
+ }
44
+ // Mutate one vote
45
+ const tampered = { ...state, votes: state.votes.map((v, i) => i === 2 ? { ...v, vendor: "evil" } : v) };
46
+ expect(verifyVoteLedger(tampered, SECRET)).toBe(false);
47
+ });
48
+ });
49
+ describe("v2.19.37 MAYOR ELECTION — tally", () => {
50
+ it("composite weights: 50% votes + 25% rep + 15% fairness + 10% trick", () => {
51
+ expect(MAYOR_ELECTION_TUNABLES.COMPOSITE_WEIGHTS.votes).toBe(0.5);
52
+ expect(MAYOR_ELECTION_TUNABLES.COMPOSITE_WEIGHTS.reputation).toBe(0.25);
53
+ expect(MAYOR_ELECTION_TUNABLES.COMPOSITE_WEIGHTS.fairness).toBe(0.15);
54
+ expect(MAYOR_ELECTION_TUNABLES.COMPOSITE_WEIGHTS.trickTest).toBe(0.10);
55
+ });
56
+ it("vote-only election: more votes wins", () => {
57
+ let state = freshElectionState({ repoId: "test", termStartMs: 0 });
58
+ for (let i = 0; i < 5; i++)
59
+ state = recordVote({ state, vendor: "claude", castAtMs: i * 100, secret: SECRET }).state;
60
+ for (let i = 0; i < 3; i++)
61
+ state = recordVote({ state, vendor: "gpt", castAtMs: 1000 + i * 100, secret: SECRET }).state;
62
+ const r = tallyElection({ state, signals: [], secret: SECRET });
63
+ expect(r.winnerVendor).toBe("claude");
64
+ expect(r.scores[0].vendor).toBe("claude");
65
+ expect(r.scores[0].voteCount).toBe(5);
66
+ });
67
+ it("signal-only election: highest reputation wins (zero votes)", () => {
68
+ const state = freshElectionState({ repoId: "test", termStartMs: 0 });
69
+ const signals = [
70
+ { vendor: "claude", reputationScore: 0.9, fairnessPassRate: 0.95, trickTestPassRate: 0.99 },
71
+ { vendor: "gpt", reputationScore: 0.6, fairnessPassRate: 0.7, trickTestPassRate: 0.8 },
72
+ ];
73
+ const r = tallyElection({ state, signals, secret: SECRET });
74
+ expect(r.winnerVendor).toBe("claude");
75
+ });
76
+ it("mixed: votes can be outweighed by very high quality signals", () => {
77
+ let state = freshElectionState({ repoId: "test", termStartMs: 0 });
78
+ // gpt has 1 vote, claude has 0 votes, claude has perfect signals
79
+ state = recordVote({ state, vendor: "gpt", castAtMs: 100, secret: SECRET }).state;
80
+ const signals = [
81
+ { vendor: "claude", reputationScore: 1.0, fairnessPassRate: 1.0, trickTestPassRate: 1.0 },
82
+ { vendor: "gpt", reputationScore: 0.0, fairnessPassRate: 0.0, trickTestPassRate: 0.0 },
83
+ ];
84
+ const r = tallyElection({ state, signals, secret: SECRET });
85
+ // gpt composite = 0.5 * (1/1) + 0 = 0.5
86
+ // claude composite = 0.5 * 0 + 0.25*1 + 0.15*1 + 0.10*1 = 0.5
87
+ // tie → alpha tie-break (claude < gpt)
88
+ expect(r.winnerVendor).toBe("claude");
89
+ });
90
+ it("DETERMINISTIC: same inputs → same result sig", () => {
91
+ let state = freshElectionState({ repoId: "test", termStartMs: 0 });
92
+ state = recordVote({ state, vendor: "claude", castAtMs: 100, secret: SECRET }).state;
93
+ const r1 = tallyElection({ state, signals: [], nowMs: 100, secret: SECRET });
94
+ const r2 = tallyElection({ state, signals: [], nowMs: 100, secret: SECRET });
95
+ expect(r1.sig).toBe(r2.sig);
96
+ });
97
+ it("verifyElectionResult passes / rejects tamper", () => {
98
+ let state = freshElectionState({ repoId: "test", termStartMs: 0 });
99
+ state = recordVote({ state, vendor: "x", castAtMs: 100, secret: SECRET }).state;
100
+ const r = tallyElection({ state, signals: [], secret: SECRET });
101
+ expect(verifyElectionResult(r, SECRET)).toBe(true);
102
+ const tampered = { ...r, winnerVendor: "evil" };
103
+ expect(verifyElectionResult(tampered, SECRET)).toBe(false);
104
+ });
105
+ });
106
+ describe("v2.19.37 MAYOR ELECTION — auto-rotation", () => {
107
+ it("MID-TERM: tally + record lastResult but DON'T rotate", () => {
108
+ let state = freshElectionState({ repoId: "test", termStartMs: 0, termMs: 1_000_000 });
109
+ state = recordVote({ state, vendor: "x", castAtMs: 100, secret: SECRET }).state;
110
+ const r = runScheduledElection({ state, signals: [], nowMs: 500_000, secret: SECRET });
111
+ expect(r.rotated).toBe(false);
112
+ expect(r.state.currentMayor).toBeNull(); // not rotated yet
113
+ expect(r.state.lastResult).not.toBeNull();
114
+ });
115
+ it("AFTER TERM END: rotate to winner + reset ballot box + advance termStart", () => {
116
+ let state = freshElectionState({ repoId: "test", termStartMs: 0, termMs: 1000 });
117
+ state = recordVote({ state, vendor: "claude", castAtMs: 100, secret: SECRET }).state;
118
+ state = recordVote({ state, vendor: "claude", castAtMs: 200, secret: SECRET }).state;
119
+ const r = runScheduledElection({ state, signals: [], nowMs: 5000, secret: SECRET });
120
+ expect(r.rotated).toBe(true);
121
+ expect(r.state.currentMayor).toBe("claude");
122
+ expect(r.state.termStartMs).toBe(1000); // advanced to old term end
123
+ expect(r.state.votes.length).toBe(0); // ballot box reset
124
+ expect(r.state.lastResult).not.toBeNull();
125
+ });
126
+ });
127
+ describe("v2.19.37 MAYOR ELECTION — UI surface (status line)", () => {
128
+ it("formatMayorLine on null result", () => {
129
+ expect(formatMayorLine(null)).toContain("no votes");
130
+ });
131
+ it("formatMayorLine with winner + runner-up", () => {
132
+ let state = freshElectionState({ repoId: "test", termStartMs: 0 });
133
+ state = recordVote({ state, vendor: "claude", castAtMs: 100, secret: SECRET }).state;
134
+ state = recordVote({ state, vendor: "claude", castAtMs: 200, secret: SECRET }).state;
135
+ state = recordVote({ state, vendor: "gpt", castAtMs: 300, secret: SECRET }).state;
136
+ const r = tallyElection({ state, signals: [], secret: SECRET });
137
+ const line = formatMayorLine(r);
138
+ expect(line).toContain("MAYOR");
139
+ expect(line).toContain("claude");
140
+ expect(line).toContain("vs gpt");
141
+ });
142
+ });
143
+ describe("v2.19.37 MAYOR ELECTION — A/B before vs after", () => {
144
+ it("A: pre-v2.19.37 = no election concept; B: full election + rotation cycle", () => {
145
+ // Pre: no module
146
+ // Post: full lifecycle in ≤4 calls (fresh → vote → tally → rotate)
147
+ let state = freshElectionState({ repoId: "test", termStartMs: 0, termMs: 1000 });
148
+ state = recordVote({ state, vendor: "claude", castAtMs: 100, secret: SECRET }).state;
149
+ const r = runScheduledElection({ state, signals: [], nowMs: 5000, secret: SECRET });
150
+ expect(r.rotated).toBe(true);
151
+ expect(r.state.currentMayor).toBe("claude");
152
+ });
153
+ });
154
+ describe("v2.19.37 MAYOR ELECTION — stats + 1000-iter fuzz", () => {
155
+ it("computeElectionStats", () => {
156
+ let state = freshElectionState({ repoId: "test", termStartMs: 0, termMs: 10_000 });
157
+ state = recordVote({ state, vendor: "x", castAtMs: 100, secret: SECRET }).state;
158
+ state = recordVote({ state, vendor: "y", castAtMs: 200, secret: SECRET }).state;
159
+ const s = computeElectionStats(state, 500);
160
+ expect(s.totalVotes).toBe(2);
161
+ expect(s.uniqueVendors).toBe(2);
162
+ expect(s.termRemainingMs).toBeGreaterThan(0);
163
+ });
164
+ it("1000 random vote+tally cycles preserve chain integrity", () => {
165
+ let state = freshElectionState({ repoId: "test", termStartMs: 0, termMs: 1_000_000_000 });
166
+ for (let i = 0; i < 1000; i++) {
167
+ const r = recordVote({ state, vendor: `v${i % 7}`, castAtMs: i * 10, secret: SECRET });
168
+ if (r.vote)
169
+ state = r.state;
170
+ }
171
+ expect(verifyVoteLedger(state, SECRET)).toBe(true);
172
+ expect(state.votes.length).toBe(1000);
173
+ });
174
+ });
175
+ //# sourceMappingURL=mayor.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mayor.test.js","sourceRoot":"","sources":["../../src/mayor_election/mayor.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,164 @@
1
+ /**
2
+ * v2.19.37 — MNEME RECEIPT PROTOCOL (the open spec — Gap #1 + #6 wave-ride)
3
+ *
4
+ * "Mneme as TOOL is replaceable. Mneme as SPEC is durable."
5
+ *
6
+ * Pre-v2.19.37 every AI accountability tool ships its own receipt format
7
+ * incompatible with each other. v2.19.37 publishes a vendor-neutral
8
+ * RFC-style spec — `mneme-receipt-protocol/1` — that ANY tool can adopt.
9
+ * Reference implementation lives in `apostille/`. Validation +
10
+ * compat-matrix + future-proof extensions live here.
11
+ *
12
+ * Wild moat: SPEC outlives any single implementation. OpenTelemetry,
13
+ * schema.org, RFC 822 — the people who own the SPEC outlast every tool
14
+ * built on top. Mneme becomes "the spec" not "a tool".
15
+ *
16
+ * Pitch path (parallel to code):
17
+ * 1. Publish spec text on npm + GitHub `mneme-spec` repo
18
+ * 2. Submit as draft-mneme-receipt-protocol to IETF
19
+ * 3. Cite from EU AI Act + NIST AI RMF working-group documents
20
+ * 4. Reference impl is Mneme — others can adopt
21
+ *
22
+ * Composes onto:
23
+ * - v2.19.34 APOSTILLE (Mneme's reference impl wraps protocol)
24
+ * - v2.19.34 ETERNITY (protocol receipts pin via eternity)
25
+ * - v2.19.31 contradictions (negative_assertions field reserved)
26
+ *
27
+ * Honest scope:
28
+ * - PURE FUNCTION validator + parser + spec emitter. No I/O.
29
+ * - Versioned spec — v1.0 frozen; v1.1 backward-compatible extensions only.
30
+ * - Defensive: malformed receipts NEVER throw; return structured failures.
31
+ * - 100+ deep validation tests + 1000+ random fuzz iterations.
32
+ */
33
+ export declare const PROTOCOL_NAME: "mneme-receipt-protocol";
34
+ export declare const PROTOCOL_VERSION_MAJOR: 1;
35
+ export declare const PROTOCOL_VERSION_MINOR: 0;
36
+ export declare const PROTOCOL_VERSION: "1.0";
37
+ /** A vendor-neutral AI accountability receipt. Any tool MAY emit this shape. */
38
+ export interface ProtocolReceipt {
39
+ /** Spec identifier — opaque string. */
40
+ protocol: typeof PROTOCOL_NAME;
41
+ /** Spec version (`"<major>.<minor>"`). */
42
+ protocolVersion: string;
43
+ /** Implementation name (e.g. `"@mneme-ai/core@2.19.37"`). */
44
+ implementation: string;
45
+ /** AI vendor identifier (lowercased; e.g. `"claude"`, `"gpt"`, `"gemini"`). */
46
+ vendor: string;
47
+ /** Vendor's model version string (vendor-defined; e.g. `"opus-4.7"`). */
48
+ modelVersion: string;
49
+ /** sha256(prompt UTF-8 bytes). 64 hex chars. */
50
+ promptSha256: string;
51
+ /** sha256(response UTF-8 bytes). 64 hex chars. */
52
+ responseSha256: string;
53
+ /** ms since Unix epoch. */
54
+ tsMs: number;
55
+ /** Tools the AI invoked (free-form vendor names). */
56
+ toolsCalled: string[];
57
+ /** Files the AI touched (relative paths). */
58
+ filesTouched: string[];
59
+ /** Input tokens billed. */
60
+ tokensIn: number;
61
+ /** Output tokens billed. */
62
+ tokensOut: number;
63
+ /** Cost in USD micros (1_000_000 = $1.00) to avoid float drift. */
64
+ costUsdMicros: number;
65
+ /** Vaccine / safety-filter triggers (free-form). */
66
+ vaccinesTriggered: string[];
67
+ /**
68
+ * Outcome class — one of the canonical strings:
69
+ * "merged" / "reverted" / "blocked_by_guard" / "blocked_by_apoptosis"
70
+ * / "blocked_by_truth" / "pending" / "rejected_by_human"
71
+ */
72
+ outcomeClass: string;
73
+ /** Compliance controls satisfied per framework (free-form keys). */
74
+ controls?: Record<string, string[]>;
75
+ /** Optional caller note. */
76
+ note?: string;
77
+ /** Optional previous receipt's content hash for chain integrity. */
78
+ prevContentHash?: string | null;
79
+ /** sha256 over canonical body (excluding contentHash itself). */
80
+ contentHash: string;
81
+ /**
82
+ * Optional extension namespace — implementations MAY add proprietary fields
83
+ * under `ext.<implementation-name>.*`. Spec validator ignores `ext.*`.
84
+ */
85
+ ext?: Record<string, Record<string, unknown>>;
86
+ }
87
+ export type ValidationVerdict = "VALID" | "INVALID" | "WARNING";
88
+ export interface ValidationIssue {
89
+ field: string;
90
+ severity: "error" | "warning";
91
+ message: string;
92
+ }
93
+ export interface ValidationResult {
94
+ verdict: ValidationVerdict;
95
+ issues: ValidationIssue[];
96
+ /** Spec version the receipt CLAIMS; undefined if unparseable. */
97
+ claimedVersion?: string;
98
+ /** Whether our validator can fully validate this version. */
99
+ versionSupported: boolean;
100
+ }
101
+ export interface MintInput {
102
+ vendor: string;
103
+ modelVersion: string;
104
+ promptText?: string;
105
+ promptSha256?: string;
106
+ responseText?: string;
107
+ responseSha256?: string;
108
+ toolsCalled?: string[];
109
+ filesTouched?: string[];
110
+ tokensIn?: number;
111
+ tokensOut?: number;
112
+ costUsdMicros?: number;
113
+ vaccinesTriggered?: string[];
114
+ outcomeClass?: string;
115
+ controls?: Record<string, string[]>;
116
+ note?: string;
117
+ prevContentHash?: string | null;
118
+ tsMs?: number;
119
+ implementation?: string;
120
+ ext?: Record<string, Record<string, unknown>>;
121
+ }
122
+ /**
123
+ * Mint a reference-impl protocol receipt. Defensive: every boundary
124
+ * coerced; never throws; always returns a VALID receipt (passes
125
+ * validateReceipt(receipt) → "VALID").
126
+ */
127
+ export declare function mintProtocolReceipt(input: MintInput): ProtocolReceipt;
128
+ /**
129
+ * Strict validator: returns VALID iff every spec invariant is satisfied.
130
+ * INVALID = at least one error; WARNING = unknown extension fields seen.
131
+ * Pure function; never throws.
132
+ */
133
+ export declare function validateReceipt(input: unknown): ValidationResult;
134
+ export interface CompatEntry {
135
+ implementation: string;
136
+ protocolVersion: string;
137
+ fields: ReadonlyArray<string>;
138
+ }
139
+ /**
140
+ * Known implementations + their supported fields. Other tools register here
141
+ * by submitting PRs to mneme-spec repo.
142
+ */
143
+ export declare const COMPAT_MATRIX: ReadonlyArray<CompatEntry>;
144
+ /**
145
+ * Get the RFC-style spec text. Deterministic; bundled in the npm package.
146
+ * AI agents + auditors + regulators read this as the canonical authority.
147
+ */
148
+ export declare function specText(): string;
149
+ export interface ProtocolStats {
150
+ protocolName: string;
151
+ protocolVersion: string;
152
+ knownImplementations: number;
153
+ requiredFields: number;
154
+ optionalFields: number;
155
+ canonicalOutcomes: number;
156
+ }
157
+ export declare function computeProtocolStats(): ProtocolStats;
158
+ export declare function formatProtocolLine(s: ProtocolStats): string;
159
+ export declare const MNEME_RECEIPT_PROTOCOL_TUNABLES: Readonly<{
160
+ PROTOCOL_NAME: "mneme-receipt-protocol";
161
+ PROTOCOL_VERSION: "1.0";
162
+ CANONICAL_OUTCOMES: string[];
163
+ }>;
164
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/mneme_receipt_protocol/index.ts"],"names":[],"mappings":"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"}