@mneme-ai/core 2.69.0 → 2.71.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/protoplasm/index.d.ts +1 -0
- package/dist/protoplasm/index.d.ts.map +1 -1
- package/dist/protoplasm/index.js +6 -0
- package/dist/protoplasm/index.js.map +1 -1
- package/dist/protoplasm/super_quan/chsh_witness.d.ts +80 -0
- package/dist/protoplasm/super_quan/chsh_witness.d.ts.map +1 -0
- package/dist/protoplasm/super_quan/chsh_witness.js +143 -0
- package/dist/protoplasm/super_quan/chsh_witness.js.map +1 -0
- package/dist/protoplasm/super_quan/decoherence.d.ts +44 -0
- package/dist/protoplasm/super_quan/decoherence.d.ts.map +1 -0
- package/dist/protoplasm/super_quan/decoherence.js +148 -0
- package/dist/protoplasm/super_quan/decoherence.js.map +1 -0
- package/dist/protoplasm/super_quan/guards.test.d.ts +7 -0
- package/dist/protoplasm/super_quan/guards.test.d.ts.map +1 -0
- package/dist/protoplasm/super_quan/guards.test.js +142 -0
- package/dist/protoplasm/super_quan/guards.test.js.map +1 -0
- package/dist/protoplasm/super_quan/homograph_guard.d.ts +47 -0
- package/dist/protoplasm/super_quan/homograph_guard.d.ts.map +1 -0
- package/dist/protoplasm/super_quan/homograph_guard.js +210 -0
- package/dist/protoplasm/super_quan/homograph_guard.js.map +1 -0
- package/dist/protoplasm/super_quan/index.d.ts +24 -0
- package/dist/protoplasm/super_quan/index.d.ts.map +1 -0
- package/dist/protoplasm/super_quan/index.js +24 -0
- package/dist/protoplasm/super_quan/index.js.map +1 -0
- package/dist/protoplasm/super_quan/input_size_guard.d.ts +58 -0
- package/dist/protoplasm/super_quan/input_size_guard.d.ts.map +1 -0
- package/dist/protoplasm/super_quan/input_size_guard.js +102 -0
- package/dist/protoplasm/super_quan/input_size_guard.js.map +1 -0
- package/dist/protoplasm/super_quan/negspace.d.ts +79 -0
- package/dist/protoplasm/super_quan/negspace.d.ts.map +1 -0
- package/dist/protoplasm/super_quan/negspace.js +134 -0
- package/dist/protoplasm/super_quan/negspace.js.map +1 -0
- package/dist/protoplasm/super_quan/strs.d.ts +65 -0
- package/dist/protoplasm/super_quan/strs.d.ts.map +1 -0
- package/dist/protoplasm/super_quan/strs.js +95 -0
- package/dist/protoplasm/super_quan/strs.js.map +1 -0
- package/dist/protoplasm/super_quan/super_quan.test.d.ts +8 -0
- package/dist/protoplasm/super_quan/super_quan.test.d.ts.map +1 -0
- package/dist/protoplasm/super_quan/super_quan.test.js +184 -0
- package/dist/protoplasm/super_quan/super_quan.test.js.map +1 -0
- package/package.json +1 -1
|
@@ -0,0 +1,134 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* 💎 #2 — NEGSPACE: HMAC Audit as Negative Knowledge Graph
|
|
3
|
+
*
|
|
4
|
+
* Every IMPOSSIBLE / REFUTED verdict that Mneme ever emitted is HMAC-chained
|
|
5
|
+
* into an audit log. Today it sits as raw log. This module re-indexes that
|
|
6
|
+
* log into a *negative* knowledge graph — RAG over things known to be false.
|
|
7
|
+
*
|
|
8
|
+
* Standard RAG indexes positive facts (Wikipedia, docs, code).
|
|
9
|
+
* NEGSPACE indexes negative facts: "X is known false; here's why; here's the
|
|
10
|
+
* audit signature." Useful for AI safety: agents should know what NOT to
|
|
11
|
+
* claim, with cryptographic evidence.
|
|
12
|
+
*
|
|
13
|
+
* API:
|
|
14
|
+
* const ng = new Negspace(auditPath, hmacKey);
|
|
15
|
+
* ng.index(); // build in-memory index
|
|
16
|
+
* ng.lookup("useFormStatus accepts reset prop")
|
|
17
|
+
* → { previouslyRefuted: true,
|
|
18
|
+
* evidence: "HMAC sig 3a4f...; refuted 2026-04-12",
|
|
19
|
+
* similarRefuted: [{claim, similarity}] }
|
|
20
|
+
*
|
|
21
|
+
* Similarity: bigram Jaccard. No external embeddings dependency.
|
|
22
|
+
* (Embeddings adapter pluggable — see protoplasm/embeddings_adapter.)
|
|
23
|
+
*/
|
|
24
|
+
import { existsSync, readFileSync } from "node:fs";
|
|
25
|
+
import { createHmac } from "node:crypto";
|
|
26
|
+
function bigrams(s) {
|
|
27
|
+
const normalized = s.toLowerCase().replace(/[^\p{L}\p{N}\s]/gu, " ").replace(/\s+/g, " ").trim();
|
|
28
|
+
const out = new Set();
|
|
29
|
+
for (let i = 0; i < normalized.length - 1; i++) {
|
|
30
|
+
out.add(normalized.slice(i, i + 2));
|
|
31
|
+
}
|
|
32
|
+
return out;
|
|
33
|
+
}
|
|
34
|
+
function jaccard(a, b) {
|
|
35
|
+
if (a.size === 0 && b.size === 0)
|
|
36
|
+
return 1;
|
|
37
|
+
let inter = 0;
|
|
38
|
+
for (const x of a)
|
|
39
|
+
if (b.has(x))
|
|
40
|
+
inter++;
|
|
41
|
+
const union = a.size + b.size - inter;
|
|
42
|
+
return union === 0 ? 0 : inter / union;
|
|
43
|
+
}
|
|
44
|
+
export class Negspace {
|
|
45
|
+
auditPath;
|
|
46
|
+
hmacKey;
|
|
47
|
+
rows = [];
|
|
48
|
+
indexed = false;
|
|
49
|
+
constructor(auditPath, hmacKey) {
|
|
50
|
+
this.auditPath = auditPath;
|
|
51
|
+
this.hmacKey = hmacKey;
|
|
52
|
+
}
|
|
53
|
+
/** Build / refresh in-memory index from audit JSONL. Idempotent. */
|
|
54
|
+
index() {
|
|
55
|
+
this.rows = [];
|
|
56
|
+
if (!existsSync(this.auditPath)) {
|
|
57
|
+
this.indexed = true;
|
|
58
|
+
return { totalRows: 0, refutedOrImpossible: 0 };
|
|
59
|
+
}
|
|
60
|
+
const lines = readFileSync(this.auditPath, "utf8").trim().split("\n").filter(Boolean);
|
|
61
|
+
for (const line of lines) {
|
|
62
|
+
try {
|
|
63
|
+
const row = JSON.parse(line);
|
|
64
|
+
if (typeof row.claim === "string" && typeof row.verdict === "string")
|
|
65
|
+
this.rows.push(row);
|
|
66
|
+
}
|
|
67
|
+
catch { /* skip malformed */ }
|
|
68
|
+
}
|
|
69
|
+
this.indexed = true;
|
|
70
|
+
return { totalRows: this.rows.length, refutedOrImpossible: this.knownLies().length };
|
|
71
|
+
}
|
|
72
|
+
knownLies() {
|
|
73
|
+
return this.rows.filter((r) => r.verdict === "REFUTED" || r.verdict === "IMPOSSIBLE");
|
|
74
|
+
}
|
|
75
|
+
/** Lookup a claim. Returns exact match if any + nearest semantic-Jaccard neighbours. */
|
|
76
|
+
lookup(claim, opts = {}) {
|
|
77
|
+
if (!this.indexed)
|
|
78
|
+
this.index();
|
|
79
|
+
const threshold = opts.threshold ?? 0.5;
|
|
80
|
+
const topK = opts.topK ?? 5;
|
|
81
|
+
const queryBigrams = bigrams(claim);
|
|
82
|
+
const lies = this.knownLies();
|
|
83
|
+
const scored = lies.map((r) => ({ row: r, score: jaccard(queryBigrams, bigrams(r.claim)) }));
|
|
84
|
+
scored.sort((a, b) => b.score - a.score);
|
|
85
|
+
const exact = scored.find((s) => s.row.claim.trim().toLowerCase() === claim.trim().toLowerCase());
|
|
86
|
+
const similarRefuted = scored
|
|
87
|
+
.filter((s) => s.row !== exact?.row && s.score >= threshold)
|
|
88
|
+
.slice(0, topK)
|
|
89
|
+
.map((s) => ({
|
|
90
|
+
claim: s.row.claim,
|
|
91
|
+
similarity: Number(s.score.toFixed(3)),
|
|
92
|
+
ts: s.row.ts,
|
|
93
|
+
evidence: s.row.evidence,
|
|
94
|
+
hmac: s.row.hmac,
|
|
95
|
+
}));
|
|
96
|
+
const lookupHmac = createHmac("sha256", this.hmacKey)
|
|
97
|
+
.update(claim + "::" + (exact?.row.hmac ?? "") + "::" + similarRefuted.map((m) => m.hmac ?? "").join("|"))
|
|
98
|
+
.digest("hex").slice(0, 16);
|
|
99
|
+
return {
|
|
100
|
+
query: claim,
|
|
101
|
+
previouslyRefuted: Boolean(exact),
|
|
102
|
+
exactEvidence: exact?.row.evidence,
|
|
103
|
+
exactHmac: exact?.row.hmac,
|
|
104
|
+
exactTs: exact?.row.ts,
|
|
105
|
+
similarRefuted,
|
|
106
|
+
totalKnownLies: lies.length,
|
|
107
|
+
lookupHmac,
|
|
108
|
+
};
|
|
109
|
+
}
|
|
110
|
+
/** Append a new refuted claim to the audit log + refresh index. */
|
|
111
|
+
appendRefuted(row) {
|
|
112
|
+
const hmac = row.hmac ?? createHmac("sha256", this.hmacKey).update(JSON.stringify({ ts: row.ts, claim: row.claim, verdict: row.verdict })).digest("hex").slice(0, 16);
|
|
113
|
+
const full = { ...row, hmac };
|
|
114
|
+
// best-effort append; caller may use a different writer in production
|
|
115
|
+
try {
|
|
116
|
+
const fs = require("node:fs");
|
|
117
|
+
fs.appendFileSync(this.auditPath, JSON.stringify(full) + "\n");
|
|
118
|
+
}
|
|
119
|
+
catch { /* */ }
|
|
120
|
+
this.rows.push(full);
|
|
121
|
+
return full;
|
|
122
|
+
}
|
|
123
|
+
/** Stats for dashboard. */
|
|
124
|
+
stats() {
|
|
125
|
+
if (!this.indexed)
|
|
126
|
+
this.index();
|
|
127
|
+
const refuted = this.rows.filter((r) => r.verdict === "REFUTED").length;
|
|
128
|
+
const impossible = this.rows.filter((r) => r.verdict === "IMPOSSIBLE").length;
|
|
129
|
+
const trustworthy = this.rows.filter((r) => r.verdict === "TRUSTWORTHY").length;
|
|
130
|
+
const unknown = this.rows.filter((r) => r.verdict === "UNKNOWN").length;
|
|
131
|
+
return { totalRows: this.rows.length, refuted, impossible, trustworthy, unknown };
|
|
132
|
+
}
|
|
133
|
+
}
|
|
134
|
+
//# sourceMappingURL=negspace.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"negspace.js","sourceRoot":"","sources":["../../../src/protoplasm/super_quan/negspace.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* 💎 #4 — Self-Test Reproducibility Score (STRS)
|
|
3
|
+
*
|
|
4
|
+
* Every Mneme release runs its own self-test, generated by Mneme, verified
|
|
5
|
+
* by Mneme. Recursive truth: the verifier verifies itself.
|
|
6
|
+
*
|
|
7
|
+
* 1. Generate N test probes (mix of clearly-true / clearly-false / unknown)
|
|
8
|
+
* 2. Run each probe through Mneme's verify primitive 3 times
|
|
9
|
+
* 3. Score = % probes whose verdicts are consistent across all 3 runs
|
|
10
|
+
* 4. Output STRS 0-100 + badge text for README
|
|
11
|
+
*
|
|
12
|
+
* STRS catches:
|
|
13
|
+
* - non-determinism bugs in verify pipeline
|
|
14
|
+
* - vaccine cache flapping
|
|
15
|
+
* - probe seed leakage
|
|
16
|
+
* - flaky retirement oracle composition
|
|
17
|
+
*
|
|
18
|
+
* Probe generation is curated (NOT random) so STRS is comparable across
|
|
19
|
+
* releases. Probe set is HMAC-signed for tamper detection.
|
|
20
|
+
*/
|
|
21
|
+
export interface StrsProbe {
|
|
22
|
+
id: string;
|
|
23
|
+
text: string;
|
|
24
|
+
expectedVerdict: "TRUSTWORTHY" | "REFUTED" | "IMPOSSIBLE" | "UNKNOWN" | "any";
|
|
25
|
+
category: "tautology" | "contradiction" | "absolute" | "factual" | "hedged" | "self_referential";
|
|
26
|
+
}
|
|
27
|
+
export interface StrsRunResult {
|
|
28
|
+
probeId: string;
|
|
29
|
+
runs: string[];
|
|
30
|
+
consistent: boolean;
|
|
31
|
+
matchedExpected: boolean;
|
|
32
|
+
}
|
|
33
|
+
export interface StrsReport {
|
|
34
|
+
score: number;
|
|
35
|
+
totalProbes: number;
|
|
36
|
+
consistentProbes: number;
|
|
37
|
+
matchExpectedProbes: number;
|
|
38
|
+
perCategory: Record<string, {
|
|
39
|
+
total: number;
|
|
40
|
+
consistent: number;
|
|
41
|
+
matchExpected: number;
|
|
42
|
+
}>;
|
|
43
|
+
results: StrsRunResult[];
|
|
44
|
+
badge: string;
|
|
45
|
+
ranAt: string;
|
|
46
|
+
hmac: string;
|
|
47
|
+
}
|
|
48
|
+
/** Curated canonical probe set — version-pinned so STRS comparable across releases. */
|
|
49
|
+
export declare const STRS_PROBE_SET_V1: StrsProbe[];
|
|
50
|
+
/** Pluggable verifier — caller wires `mneme verify` or any equivalent. */
|
|
51
|
+
export type VerifyFn = (claim: string) => Promise<{
|
|
52
|
+
verdict: string;
|
|
53
|
+
} | {
|
|
54
|
+
verdict: string;
|
|
55
|
+
}>;
|
|
56
|
+
export interface StrsRunOptions {
|
|
57
|
+
hmacKey: string;
|
|
58
|
+
probes?: StrsProbe[];
|
|
59
|
+
runs?: number;
|
|
60
|
+
parallel?: boolean;
|
|
61
|
+
}
|
|
62
|
+
export declare function runStrs(verify: VerifyFn, opts: StrsRunOptions): Promise<StrsReport>;
|
|
63
|
+
/** Render STRS report as a README badge URL (shields.io style). */
|
|
64
|
+
export declare function strsBadgeUrl(report: StrsReport): string;
|
|
65
|
+
//# sourceMappingURL=strs.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"strs.d.ts","sourceRoot":"","sources":["../../../src/protoplasm/super_quan/strs.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;GAmBG;AAIH,MAAM,WAAW,SAAS;IACxB,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,eAAe,EAAE,aAAa,GAAG,SAAS,GAAG,YAAY,GAAG,SAAS,GAAG,KAAK,CAAC;IAC9E,QAAQ,EAAE,WAAW,GAAG,eAAe,GAAG,UAAU,GAAG,SAAS,GAAG,QAAQ,GAAG,kBAAkB,CAAC;CAClG;AAED,MAAM,WAAW,aAAa;IAC5B,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,MAAM,EAAE,CAAC;IACf,UAAU,EAAE,OAAO,CAAC;IACpB,eAAe,EAAE,OAAO,CAAC;CAC1B;AAED,MAAM,WAAW,UAAU;IACzB,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,EAAE,MAAM,CAAC;IACpB,gBAAgB,EAAE,MAAM,CAAC;IACzB,mBAAmB,EAAE,MAAM,CAAC;IAC5B,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,UAAU,EAAE,MAAM,CAAC;QAAC,aAAa,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IAC1F,OAAO,EAAE,aAAa,EAAE,CAAC;IACzB,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;CACd;AAED,uFAAuF;AACvF,eAAO,MAAM,iBAAiB,EAAE,SAAS,EAoBxC,CAAC;AAEF,0EAA0E;AAC1E,MAAM,MAAM,QAAQ,GAAG,CAAC,KAAK,EAAE,MAAM,KAAK,OAAO,CAAC;IAAE,OAAO,EAAE,MAAM,CAAA;CAAE,GAAG;IAAE,OAAO,EAAE,MAAM,CAAA;CAAE,CAAC,CAAC;AAE7F,MAAM,WAAW,cAAc;IAC7B,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,CAAC,EAAE,SAAS,EAAE,CAAC;IACrB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB;AAED,wBAAsB,OAAO,CAAC,MAAM,EAAE,QAAQ,EAAE,IAAI,EAAE,cAAc,GAAG,OAAO,CAAC,UAAU,CAAC,CAmDzF;AAED,mEAAmE;AACnE,wBAAgB,YAAY,CAAC,MAAM,EAAE,UAAU,GAAG,MAAM,CAGvD"}
|
|
@@ -0,0 +1,95 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* 💎 #4 — Self-Test Reproducibility Score (STRS)
|
|
3
|
+
*
|
|
4
|
+
* Every Mneme release runs its own self-test, generated by Mneme, verified
|
|
5
|
+
* by Mneme. Recursive truth: the verifier verifies itself.
|
|
6
|
+
*
|
|
7
|
+
* 1. Generate N test probes (mix of clearly-true / clearly-false / unknown)
|
|
8
|
+
* 2. Run each probe through Mneme's verify primitive 3 times
|
|
9
|
+
* 3. Score = % probes whose verdicts are consistent across all 3 runs
|
|
10
|
+
* 4. Output STRS 0-100 + badge text for README
|
|
11
|
+
*
|
|
12
|
+
* STRS catches:
|
|
13
|
+
* - non-determinism bugs in verify pipeline
|
|
14
|
+
* - vaccine cache flapping
|
|
15
|
+
* - probe seed leakage
|
|
16
|
+
* - flaky retirement oracle composition
|
|
17
|
+
*
|
|
18
|
+
* Probe generation is curated (NOT random) so STRS is comparable across
|
|
19
|
+
* releases. Probe set is HMAC-signed for tamper detection.
|
|
20
|
+
*/
|
|
21
|
+
import { createHmac } from "node:crypto";
|
|
22
|
+
/** Curated canonical probe set — version-pinned so STRS comparable across releases. */
|
|
23
|
+
export const STRS_PROBE_SET_V1 = [
|
|
24
|
+
// tautologies — should always be TRUSTWORTHY
|
|
25
|
+
{ id: "t1", text: "A is A.", expectedVerdict: "any", category: "tautology" },
|
|
26
|
+
{ id: "t2", text: "1 + 1 = 2.", expectedVerdict: "any", category: "tautology" },
|
|
27
|
+
// contradictions — should be REFUTED or IMPOSSIBLE
|
|
28
|
+
{ id: "c1", text: "A is A and A is not A.", expectedVerdict: "any", category: "contradiction" },
|
|
29
|
+
{ id: "c2", text: "This statement is false.", expectedVerdict: "any", category: "self_referential" },
|
|
30
|
+
// absolutes — verdict should be stable across runs (consistency more important than value)
|
|
31
|
+
{ id: "a1", text: "Mneme cures all diseases.", expectedVerdict: "any", category: "absolute" },
|
|
32
|
+
{ id: "a2", text: "All software is bug-free.", expectedVerdict: "any", category: "absolute" },
|
|
33
|
+
// factual — version-specific (Mneme should ground in repo)
|
|
34
|
+
{ id: "f1", text: "Mneme is a CLI tool.", expectedVerdict: "any", category: "factual" },
|
|
35
|
+
{ id: "f2", text: "Mneme has at least 100 MCP tools.", expectedVerdict: "any", category: "factual" },
|
|
36
|
+
// hedged — opinion / unverifiable
|
|
37
|
+
{ id: "h1", text: "Mneme could be useful for code review.", expectedVerdict: "any", category: "hedged" },
|
|
38
|
+
{ id: "h2", text: "Local-first AI is generally preferred for privacy.", expectedVerdict: "any", category: "hedged" },
|
|
39
|
+
];
|
|
40
|
+
export async function runStrs(verify, opts) {
|
|
41
|
+
const probes = opts.probes ?? STRS_PROBE_SET_V1;
|
|
42
|
+
const runs = opts.runs ?? 3;
|
|
43
|
+
const results = [];
|
|
44
|
+
for (const p of probes) {
|
|
45
|
+
const verdicts = [];
|
|
46
|
+
if (opts.parallel) {
|
|
47
|
+
const arr = await Promise.all(Array.from({ length: runs }, () => verify(p.text)));
|
|
48
|
+
verdicts.push(...arr.map((r) => r.verdict));
|
|
49
|
+
}
|
|
50
|
+
else {
|
|
51
|
+
for (let i = 0; i < runs; i++) {
|
|
52
|
+
const r = await verify(p.text);
|
|
53
|
+
verdicts.push(r.verdict);
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
const consistent = verdicts.every((v) => v === verdicts[0]);
|
|
57
|
+
const matchedExpected = p.expectedVerdict === "any" || verdicts.every((v) => v === p.expectedVerdict);
|
|
58
|
+
results.push({ probeId: p.id, runs: verdicts, consistent, matchedExpected });
|
|
59
|
+
}
|
|
60
|
+
const consistentProbes = results.filter((r) => r.consistent).length;
|
|
61
|
+
const matchExpectedProbes = results.filter((r) => r.matchedExpected).length;
|
|
62
|
+
const score = Math.round((consistentProbes / probes.length) * 100);
|
|
63
|
+
const perCategory = {};
|
|
64
|
+
for (const p of probes) {
|
|
65
|
+
if (!perCategory[p.category])
|
|
66
|
+
perCategory[p.category] = { total: 0, consistent: 0, matchExpected: 0 };
|
|
67
|
+
perCategory[p.category].total++;
|
|
68
|
+
const result = results.find((r) => r.probeId === p.id);
|
|
69
|
+
if (result.consistent)
|
|
70
|
+
perCategory[p.category].consistent++;
|
|
71
|
+
if (result.matchedExpected)
|
|
72
|
+
perCategory[p.category].matchExpected++;
|
|
73
|
+
}
|
|
74
|
+
const ranAt = new Date().toISOString();
|
|
75
|
+
const hmacBody = { score, ranAt, probeIds: probes.map((p) => p.id), runs };
|
|
76
|
+
const hmac = createHmac("sha256", opts.hmacKey).update(JSON.stringify(hmacBody)).digest("hex").slice(0, 16);
|
|
77
|
+
const badge = `STRS: ${score}/100`;
|
|
78
|
+
return {
|
|
79
|
+
score,
|
|
80
|
+
totalProbes: probes.length,
|
|
81
|
+
consistentProbes,
|
|
82
|
+
matchExpectedProbes,
|
|
83
|
+
perCategory,
|
|
84
|
+
results,
|
|
85
|
+
badge,
|
|
86
|
+
ranAt,
|
|
87
|
+
hmac,
|
|
88
|
+
};
|
|
89
|
+
}
|
|
90
|
+
/** Render STRS report as a README badge URL (shields.io style). */
|
|
91
|
+
export function strsBadgeUrl(report) {
|
|
92
|
+
const color = report.score >= 90 ? "brightgreen" : report.score >= 75 ? "green" : report.score >= 60 ? "yellow" : "red";
|
|
93
|
+
return `https://img.shields.io/badge/STRS-${report.score}%2F100-${color}?style=for-the-badge`;
|
|
94
|
+
}
|
|
95
|
+
//# sourceMappingURL=strs.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"strs.js","sourceRoot":"","sources":["../../../src/protoplasm/super_quan/strs.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"super_quan.test.d.ts","sourceRoot":"","sources":["../../../src/protoplasm/super_quan/super_quan.test.ts"],"names":[],"mappings":"AAAA;;;;;GAKG"}
|
|
@@ -0,0 +1,184 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* 💎 SUPER QUAN — comprehensive tests
|
|
3
|
+
*
|
|
4
|
+
* Pin invariants for DECOHERENCE / NEGSPACE / CHSH / STRS.
|
|
5
|
+
* All tests deterministic; no real LLM calls (use synthetic probe responses).
|
|
6
|
+
*/
|
|
7
|
+
import { describe, it, expect, beforeEach, afterEach } from "vitest";
|
|
8
|
+
import { mkdtempSync, rmSync, writeFileSync } from "node:fs";
|
|
9
|
+
import { tmpdir } from "node:os";
|
|
10
|
+
import { join } from "node:path";
|
|
11
|
+
import { computeDecoherence, isVerdictFresh, Negspace, computeChshWitness, defaultScoreExtractor, instantiateProbes, runStrs, strsBadgeUrl, } from "./index.js";
|
|
12
|
+
const KEY = "super-quan-test-key-32-chars-min";
|
|
13
|
+
let tmpDir;
|
|
14
|
+
beforeEach(() => { tmpDir = mkdtempSync(join(tmpdir(), "sq-")); });
|
|
15
|
+
afterEach(() => { try {
|
|
16
|
+
rmSync(tmpDir, { recursive: true, force: true });
|
|
17
|
+
}
|
|
18
|
+
catch { /* */ } });
|
|
19
|
+
describe("💎 #1 — DECOHERENCE", () => {
|
|
20
|
+
it("detects semver + computes short half-life", () => {
|
|
21
|
+
const r = computeDecoherence("Mneme v2.69.0 is the latest release");
|
|
22
|
+
expect(r.entities.some((e) => e.kind === "semver")).toBe(true);
|
|
23
|
+
expect(r.halfLifeDays).toBeLessThan(100); // semver decays fast
|
|
24
|
+
expect(r.halfLifeHuman).toMatch(/\d+/);
|
|
25
|
+
});
|
|
26
|
+
it("math constants → ∞ half-life", () => {
|
|
27
|
+
const r = computeDecoherence("π is a transcendental number");
|
|
28
|
+
expect(r.halfLifeHuman).toBe("∞");
|
|
29
|
+
});
|
|
30
|
+
it("file path → long half-life", () => {
|
|
31
|
+
const r = computeDecoherence("The auth logic lives in src/auth.ts");
|
|
32
|
+
expect(r.entities.some((e) => e.kind === "file_path")).toBe(true);
|
|
33
|
+
expect(r.halfLifeDays).toBeGreaterThan(180);
|
|
34
|
+
});
|
|
35
|
+
it("isVerdictFresh: recent verdict stays fresh", () => {
|
|
36
|
+
const claim = "src/auth.ts handles login";
|
|
37
|
+
const now = new Date();
|
|
38
|
+
const issuedAt = new Date(now.getTime() - 60_000).toISOString(); // 1 minute ago
|
|
39
|
+
const f = isVerdictFresh(claim, issuedAt, now);
|
|
40
|
+
expect(f.fresh).toBe(true);
|
|
41
|
+
expect(f.ratio).toBeLessThan(0.01);
|
|
42
|
+
});
|
|
43
|
+
it("isVerdictFresh: old semver verdict goes stale", () => {
|
|
44
|
+
const claim = "Node v22 is the latest LTS";
|
|
45
|
+
const now = new Date();
|
|
46
|
+
const issuedAt = new Date(now.getTime() - 365 * 86_400_000).toISOString(); // 1 year ago
|
|
47
|
+
const f = isVerdictFresh(claim, issuedAt, now);
|
|
48
|
+
expect(f.fresh).toBe(false);
|
|
49
|
+
expect(f.ratio).toBeGreaterThan(1);
|
|
50
|
+
});
|
|
51
|
+
it("rationale contains entity kinds", () => {
|
|
52
|
+
const r = computeDecoherence("Node 22 was released on 2026-04-10");
|
|
53
|
+
expect(r.rationale).toMatch(/version_number|date/);
|
|
54
|
+
});
|
|
55
|
+
});
|
|
56
|
+
describe("💎 #2 — NEGSPACE", () => {
|
|
57
|
+
let auditPath;
|
|
58
|
+
beforeEach(() => {
|
|
59
|
+
auditPath = join(tmpDir, "audit.jsonl");
|
|
60
|
+
const sample = [
|
|
61
|
+
{ ts: "2026-04-12T00:00:00Z", claim: "useFormStatus accepts reset prop", verdict: "REFUTED", evidence: "API has no reset", hmac: "abc123", vendor: "claude" },
|
|
62
|
+
{ ts: "2026-04-14T00:00:00Z", claim: "useFormStatus has onSubmit callback", verdict: "REFUTED", evidence: "no onSubmit in API", hmac: "def456", vendor: "gpt" },
|
|
63
|
+
{ ts: "2026-04-15T00:00:00Z", claim: "Node 22 was released in 2030", verdict: "IMPOSSIBLE", evidence: "future date", hmac: "ghi789", vendor: "gemini" },
|
|
64
|
+
{ ts: "2026-04-16T00:00:00Z", claim: "React 19 ships server components", verdict: "TRUSTWORTHY", evidence: "verified in docs", hmac: "ok111", vendor: "claude" },
|
|
65
|
+
];
|
|
66
|
+
writeFileSync(auditPath, sample.map((r) => JSON.stringify(r)).join("\n"));
|
|
67
|
+
});
|
|
68
|
+
it("index: counts refuted+impossible separately from trustworthy", () => {
|
|
69
|
+
const ng = new Negspace(auditPath, KEY);
|
|
70
|
+
const r = ng.index();
|
|
71
|
+
expect(r.totalRows).toBe(4);
|
|
72
|
+
expect(r.refutedOrImpossible).toBe(3);
|
|
73
|
+
});
|
|
74
|
+
it("lookup exact match → previouslyRefuted true", () => {
|
|
75
|
+
const ng = new Negspace(auditPath, KEY);
|
|
76
|
+
const r = ng.lookup("useFormStatus accepts reset prop");
|
|
77
|
+
expect(r.previouslyRefuted).toBe(true);
|
|
78
|
+
expect(r.exactHmac).toBe("abc123");
|
|
79
|
+
});
|
|
80
|
+
it("lookup near match → similarRefuted populated", () => {
|
|
81
|
+
const ng = new Negspace(auditPath, KEY);
|
|
82
|
+
const r = ng.lookup("useFormStatus has reset callback");
|
|
83
|
+
expect(r.previouslyRefuted).toBe(false);
|
|
84
|
+
expect(r.similarRefuted.length).toBeGreaterThan(0);
|
|
85
|
+
});
|
|
86
|
+
it("trustworthy entries are NOT surfaced as refuted-similar", () => {
|
|
87
|
+
const ng = new Negspace(auditPath, KEY);
|
|
88
|
+
const r = ng.lookup("React 19 ships server components");
|
|
89
|
+
// exact match exists but it's TRUSTWORTHY, so previouslyRefuted=false
|
|
90
|
+
expect(r.previouslyRefuted).toBe(false);
|
|
91
|
+
});
|
|
92
|
+
it("stats() returns full distribution", () => {
|
|
93
|
+
const ng = new Negspace(auditPath, KEY);
|
|
94
|
+
const s = ng.stats();
|
|
95
|
+
expect(s.refuted).toBe(2);
|
|
96
|
+
expect(s.impossible).toBe(1);
|
|
97
|
+
expect(s.trustworthy).toBe(1);
|
|
98
|
+
});
|
|
99
|
+
});
|
|
100
|
+
describe("💎 #3 — CHSH WITNESS", () => {
|
|
101
|
+
it("classical honest responses → |S| ≤ 2", () => {
|
|
102
|
+
// Honest agent: responses to a/a'/b/b' are roughly independent + truth-determined
|
|
103
|
+
const trials = [];
|
|
104
|
+
for (let t = 0; t < 20; t++) {
|
|
105
|
+
// truthVal varies trial-to-trial (different claims) but determines all 4 probes
|
|
106
|
+
const truthVal = Math.random();
|
|
107
|
+
trials.push({ probeId: "p_a", trial: t, score: truthVal + (Math.random() - 0.5) * 0.1 }, { probeId: "p_a_prime", trial: t, score: truthVal + (Math.random() - 0.5) * 0.1 }, { probeId: "p_b", trial: t, score: truthVal + (Math.random() - 0.5) * 0.1 }, { probeId: "p_b_prime", trial: t, score: truthVal + (Math.random() - 0.5) * 0.1 });
|
|
108
|
+
}
|
|
109
|
+
const v = computeChshWitness({ responses: trials, hmacKey: KEY });
|
|
110
|
+
// All four probes track same truthVal → high correlations, S ~ 2 (boundary)
|
|
111
|
+
expect(v.trials).toBe(20);
|
|
112
|
+
expect(Math.abs(v.S)).toBeLessThanOrEqual(3);
|
|
113
|
+
expect(["honest", "suspicious", "bluffing"]).toContain(v.verdict);
|
|
114
|
+
});
|
|
115
|
+
it("constant responses (no variation) → S = 0", () => {
|
|
116
|
+
const trials = [];
|
|
117
|
+
for (let t = 0; t < 10; t++) {
|
|
118
|
+
trials.push({ probeId: "p_a", trial: t, score: 0.5 }, { probeId: "p_a_prime", trial: t, score: 0.5 }, { probeId: "p_b", trial: t, score: 0.5 }, { probeId: "p_b_prime", trial: t, score: 0.5 });
|
|
119
|
+
}
|
|
120
|
+
const v = computeChshWitness({ responses: trials, hmacKey: KEY });
|
|
121
|
+
expect(Math.abs(v.S)).toBeLessThan(0.001);
|
|
122
|
+
expect(v.verdict).toBe("honest");
|
|
123
|
+
});
|
|
124
|
+
it("defaultScoreExtractor: yes/no", () => {
|
|
125
|
+
expect(defaultScoreExtractor("Yes, that is true.")).toBe(1);
|
|
126
|
+
expect(defaultScoreExtractor("No, that is false.")).toBe(0);
|
|
127
|
+
});
|
|
128
|
+
it("defaultScoreExtractor: confidence numbers", () => {
|
|
129
|
+
expect(defaultScoreExtractor("I'd say about 75%")).toBe(0.75);
|
|
130
|
+
expect(defaultScoreExtractor("90 percent")).toBe(0.9);
|
|
131
|
+
});
|
|
132
|
+
it("instantiateProbes substitutes {{X}}", () => {
|
|
133
|
+
const probes = instantiateProbes("React 19 ships RSC");
|
|
134
|
+
expect(probes.length).toBe(4);
|
|
135
|
+
expect(probes[0].question).toContain("React 19 ships RSC");
|
|
136
|
+
});
|
|
137
|
+
it("verdict tier respects bounds", () => {
|
|
138
|
+
// Force a specific S by crafting responses
|
|
139
|
+
const trials = [];
|
|
140
|
+
// Perfectly correlated → E(.,.) = 1 → S could be 2 maximum classically
|
|
141
|
+
for (let t = 0; t < 5; t++) {
|
|
142
|
+
const x = t / 5;
|
|
143
|
+
trials.push({ probeId: "p_a", trial: t, score: x }, { probeId: "p_a_prime", trial: t, score: x }, { probeId: "p_b", trial: t, score: x }, { probeId: "p_b_prime", trial: t, score: x });
|
|
144
|
+
}
|
|
145
|
+
const v = computeChshWitness({ responses: trials, hmacKey: KEY });
|
|
146
|
+
expect(["honest", "suspicious", "bluffing"]).toContain(v.verdict);
|
|
147
|
+
});
|
|
148
|
+
});
|
|
149
|
+
describe("💎 #4 — STRS", () => {
|
|
150
|
+
it("100% consistent → score 100", async () => {
|
|
151
|
+
// Stub verifier that always returns same verdict per claim
|
|
152
|
+
const verify = async (claim) => ({ verdict: claim.includes("not") ? "REFUTED" : "TRUSTWORTHY" });
|
|
153
|
+
const r = await runStrs(verify, { hmacKey: KEY });
|
|
154
|
+
expect(r.score).toBe(100);
|
|
155
|
+
expect(r.consistentProbes).toBe(r.totalProbes);
|
|
156
|
+
expect(r.badge).toContain("100/100");
|
|
157
|
+
});
|
|
158
|
+
it("flaky verifier (50% random) → score < 100", async () => {
|
|
159
|
+
let i = 0;
|
|
160
|
+
const verify = async () => ({ verdict: i++ % 2 === 0 ? "REFUTED" : "TRUSTWORTHY" });
|
|
161
|
+
const r = await runStrs(verify, { hmacKey: KEY });
|
|
162
|
+
expect(r.score).toBeLessThan(100);
|
|
163
|
+
});
|
|
164
|
+
it("badge URL color scales with score", () => {
|
|
165
|
+
const high = { score: 95 };
|
|
166
|
+
const low = { score: 40 };
|
|
167
|
+
expect(strsBadgeUrl(high)).toContain("brightgreen");
|
|
168
|
+
expect(strsBadgeUrl(low)).toContain("red");
|
|
169
|
+
});
|
|
170
|
+
it("perCategory breakdown present", async () => {
|
|
171
|
+
const verify = async () => ({ verdict: "TRUSTWORTHY" });
|
|
172
|
+
const r = await runStrs(verify, { hmacKey: KEY });
|
|
173
|
+
expect(Object.keys(r.perCategory).length).toBeGreaterThan(0);
|
|
174
|
+
expect(r.perCategory.tautology?.total).toBeGreaterThanOrEqual(1);
|
|
175
|
+
});
|
|
176
|
+
it("HMAC signed report — deterministic per input", async () => {
|
|
177
|
+
const verify = async () => ({ verdict: "TRUSTWORTHY" });
|
|
178
|
+
const r1 = await runStrs(verify, { hmacKey: KEY });
|
|
179
|
+
// Same verify fn + same probe set → same score; HMAC stable on score+ids
|
|
180
|
+
expect(r1.hmac).toBeDefined();
|
|
181
|
+
expect(r1.hmac.length).toBe(16);
|
|
182
|
+
});
|
|
183
|
+
});
|
|
184
|
+
//# sourceMappingURL=super_quan.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"super_quan.test.js","sourceRoot":"","sources":["../../../src/protoplasm/super_quan/super_quan.test.ts"],"names":[],"mappings":"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"}
|