@mneme-ai/core 3.90.0 → 3.92.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/boot/index.js +1 -1
- package/dist/boot/index.js.map +1 -1
- package/dist/change_gate/change_gate.test.d.ts +2 -0
- package/dist/change_gate/change_gate.test.d.ts.map +1 -0
- package/dist/change_gate/change_gate.test.js +22 -0
- package/dist/change_gate/change_gate.test.js.map +1 -0
- package/dist/change_gate/index.d.ts +49 -0
- package/dist/change_gate/index.d.ts.map +1 -0
- package/dist/change_gate/index.js +57 -0
- package/dist/change_gate/index.js.map +1 -0
- package/dist/equiv_receipt/equiv_receipt.test.d.ts +2 -0
- package/dist/equiv_receipt/equiv_receipt.test.d.ts.map +1 -0
- package/dist/equiv_receipt/equiv_receipt.test.js +45 -0
- package/dist/equiv_receipt/equiv_receipt.test.js.map +1 -0
- package/dist/equiv_receipt/index.d.ts +73 -0
- package/dist/equiv_receipt/index.d.ts.map +1 -0
- package/dist/equiv_receipt/index.js +137 -0
- package/dist/equiv_receipt/index.js.map +1 -0
- package/dist/index.d.ts +3 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +3 -0
- package/dist/index.js.map +1 -1
- package/dist/intent_gateway/index.d.ts.map +1 -1
- package/dist/intent_gateway/index.js +3 -0
- package/dist/intent_gateway/index.js.map +1 -1
- package/dist/scar_vaccine/index.d.ts +75 -0
- package/dist/scar_vaccine/index.d.ts.map +1 -0
- package/dist/scar_vaccine/index.js +85 -0
- package/dist/scar_vaccine/index.js.map +1 -0
- package/dist/scar_vaccine/scar_vaccine.test.d.ts +2 -0
- package/dist/scar_vaccine/scar_vaccine.test.d.ts.map +1 -0
- package/dist/scar_vaccine/scar_vaccine.test.js +36 -0
- package/dist/scar_vaccine/scar_vaccine.test.js.map +1 -0
- package/package.json +1 -1
package/dist/boot/index.js
CHANGED
|
@@ -44,7 +44,7 @@ export const DECISION_TABLE = [
|
|
|
44
44
|
{ when: "user asks 'how much has Mneme saved me?' / about cost", tool: "mneme.treasury.report · CLI: mneme savings --price-per-1k <usd>", why: "the measured, signed input-tokens (and USD at the user's price) saved — only counts content routed through Mneme" },
|
|
45
45
|
{ when: "user (or a CEO/owner) asks 'what has Mneme actually DONE for me / which agent / is it worth it' — or you just caught/blocked/gated/saved something", tool: "CLI: mneme proof · log one with: mneme proof record --agent <id> --kind <hallucination_caught|leak_blocked|injection_neutralized|command_gated|token_saved|confirmed|unknown_flagged>", why: "LIVE PROOF — a measured, per-agent scorecard of real assists (harms prevented + tokens saved), counted not claimed. Log an assist whenever an organ helps; show the scorecard to prove value per agent / per day" },
|
|
46
46
|
{ when: "user asks if a repo/dependency is safe to build on, how risky/clean a codebase is, or who the key person is", tool: "mneme.xray.scan { gitUrl | repoPath } · CLI: mneme xray", why: "a signed, deterministic repo audit (grade · secrets · bus-factor · coupling) + Context Air Quality + Keystone/Action-plan — no LLM guesses a number" },
|
|
47
|
-
{ when: "BEFORE you edit a function, rename/drop a DB table, or change an API route — to see what ELSE breaks across layers — OR the user asks to SEE/visualize the project", tool: "mneme.graph.blast { name } · mneme.graph.mermaid { name } · CLI: mneme graph blast/stats/mermaid/view <name>", why: "CROSS-LAYER GRAPH — now reads JS/TS · Python · Go · Rust · Ruby. Links 4 layers: 💼 BUSINESS (rules from PRD/markdown, prove-or-unknown anchoring) ↔ 🌐 API (endpoints from route files) ↔ ⚙ CODE (functions) ↔ 🗄 DATA (db tables from the Prisma/SQL schema). `blast` = the cross-layer blast radius (edit a function → which tables it writes + which endpoints reach it). `mermaid` = a flowchart string you render INLINE in the chat to SHOW the user. `view` = a self-contained offline interactive HTML — the 🛰 IMPACT RADAR (center=the change · sectors=layers · rings=blast hop-distance · animated sweep+pulse · click a node to re-center; no name = a project-overview GALAXY you click into; --style lanes for a tiered SVG), signed by fingerprint. `card` = a static PNG/SVG share card (1200×630). `pr` (mneme.graph.pr) = the cross-layer blast radius of a whole git diff/PR — which DB tables + API routes + business rules the change set touches (a GitHub Action posts it on every PR). `check` (mneme.graph.check) = BEFORE applying a multi-file edit, flag a DB table/route/rule the diff touches that the user did NOT mention → route to the human. `reverse` (mneme.graph.reverse) = DROP SAFETY: before removing a table/endpoint, everything that depends on it + SAFE/RISKY/CRITICAL. `health` (mneme.graph.health) = cross-layer KEYSTONES (sole-writer single-points-of-failure) + ORPHANS (dead code); SCOPE COVENANT (world-first): mneme.scope.verify {intent, allow, diff} → HONORED/BREACHED signed verdict that an autonomous edit stayed within the architectural scope it DECLARED (the unpromised file/table/endpoint it reached); mneme.scope.fidelity = each agent's cross-vendor scope-keeping track record (Wilson-LB). GRAPHQL BREAKING: mneme.graphql.breaking {base} → diff GraphQL SDL surface (Query/Mutation/Subscription); removed-op or retyped-return = BREAKING (clients break). API BREAKING-CHANGE: mneme.api.breaking {base} → which endpoints removed/added vs a base ref, + which REMOVED ones are still CONSUMED (BREAKING, names the consumer) vs POSSIBLY breaking; cross-repo break git cant see. MEASURED ACCURACY: mneme.accuracy.report → real precision/recall/F1 per extractor on a labeled corpus (proves accuracy, not claims it; deterministic≠accurate). PROVABLE CROSS-LAYER: mneme.graph.prove {kind:drop|reaches} → extracts facts from the graph + the logic engine PROVES unsafe_to_drop(table) with a proof chain to the cited blocker (or LIKELY_SAFE=no structural blocker), or proves an endpoint reaches a table; heuristic→PROOF. THE LOGIC ENGINE: mneme.logic.check {facts,rules,mutexes,goal} → is a reasoning chain SOUND (not are facts true): PROVEN+proof-tree / CONTRADICTED (premises entail mutually-exclusive pair) / UNKNOWN (does not follow, never false). For checking an AI agents own argument before acting. CROSS-SERVICE: mneme.services.graph → across MANY repos/services, which service calls whose endpoints (producer↔consumer) + DANGLING calls to an endpoint no service produces; org-scale blast radius git cant see. ARCHITECTURAL INVARIANTS: mneme.invariants.check {mine?:true} → MINE the invariants the repo already upholds (zero-config, proven-at-mine-time) OR prove declared rules; HOLDS/VIOLATED+counterexample. ARCH FIREWALL: mneme.arch.firewall {baseline} → the gate for AI-generated change: PASS/WARN/BLOCK on whether the current code violates a load-bearing contract (severity weighted by contract age; declared policies honoured). On BLOCK do NOT commit. DEAD-PATH DETECTOR: mneme.arch.dead_paths → architectural data-flow smells: write-only tables (written never read), read-only tables, functions reachable from no endpoint (dead-code candidates). CONTRACT MAP: mneme.arch.contract_map {since} → mine ALL contracts, rank by age=load-bearing (FOUNDATIONAL near-sacred → RECENT fragile); one repo-wide view of what to respect vs revise. INVARIANT LINEAGE: mneme.arch.lineage {invariant,since} → the AGE of a contract: the commit it was first established + held since (mirror of bisect); old=load-bearing near-sacred, young=fragile. ARCHITECTURAL REGRESSIONS: mneme.arch.regressions {since} → self-diagnosing capstone: mine contracts upheld at baseline, re-prove at HEAD, bisect each break to commit+author (read before touching a repo). CHANGE-COUPLING: mneme.arch.coupling {since} → HIDDEN dependencies the code conceals but git history reveals: files that change together with NO graph link (implicit deps) vs STRUCTURAL (graph explains). CROSS-LAYER HOTSPOTS: mneme.arch.hotspots {since} → ranked refactor targets = files that churn (git) AND are cross-layer entangled (graph); sharper than churn×complexity. ARCHITECTURAL DECAY: mneme.arch.decay {since,samples} → is the architecture getting MORE entangled over time (ERODING/STABLE/IMPROVING) + coupling velocity + worst-step commit; structural-debt time-series. ARCHITECTURAL BISECT: mneme.arch.bisect {invariant,since} → git-bisect for a contract: the exact commit+author where an architectural invariant first broke (replays graph across history). ARCHITECTURAL-INVARIANTS: mneme.invariants.check → prove team-declared rules (table single-writer/private/guarded · endpoint exists) → HOLDS/VIOLATED+counterexample, design-by-contract for architecture. ARCHITECTURE LOCK: mneme.arch.check → package-lock for accountability; CI gate fails on a REGRESSION vs the committed contract (removed endpoint=BREAKING, new authz gap=SECURITY); additions fine; re-lock=reviewed act. THE FRONT DOOR — mneme.review (CLI `mneme review` [--base ref]) → one Codebase Accountability Report: graph + risk hotspots + authz gaps + untested keystones (the whole cross-layer suite in one call). ONBOARDING PATH: mneme.onboard.path → orient in an unfamiliar repo fast — real data-flows (entry→handler→callees→tables+rules), sensitive first. RISK HOTSPOTS: mneme.risk.hotspots → the ONE ranked list of the riskiest cross-layer nodes (keystone × untested × sensitive × authz-gap, fused) — the single what-to-guard-first answer. BLAST-AWARE COMMIT MSG: mneme.commit.suggest → generate an honest commit message from the diff impact. INTENT-vs-IMPACT: mneme.commit.check {message,diff} → a trivial-sounding commit (chore / fix-typo) that secretly rewrites a keystone/touches unmentioned tables = MISMATCH (mislabel/scope-creep). CROSS-LAYER AUTHZ GAP: mneme.authz.scan → endpoints whose handler reaches a WRITE to a sensitive table (accounts/payments) with NO auth function on the path (security smell to review first, may be middleware). CRITICAL UNTESTED SURFACE: mneme.testgap.scan → keystones/tables/endpoints NO test mentions (line-coverage-hidden risk); pass a diff → does THIS change reach untested critical surface. CROSS-AGENT COLLISION (world-first): mneme.collision.detect {changeSets:[{agent,diff}]} → where 2 concurrent agents/branches CONVERGE on the same table/endpoint/function across DIFFERENT files (the conflict git is blind to) + severity HIGH/MEDIUM/LOW. `benchmark` = measured extractor precision/recall; `drift --base <ref>` = architectural drift (cross-layer couplings that appeared/disappeared since a commit). The hosted xray server also serves it: GET /api/radar?gitUrl=<public repo> renders the radar for ANY public repo with no install. Deterministic, no LLM — every node/edge derives from a real file (nothing hallucinated); business→code links are anchored only on an explicit annotation or a strong name match, else the rule stays ORPHAN/UNKNOWN (never a guessed link). ★HONEST: reachable COUPLING to inspect, not a proven runtime break; bodies region-approximated, not a full AST" },
|
|
47
|
+
{ when: "BEFORE you edit a function, rename/drop a DB table, or change an API route — to see what ELSE breaks across layers — OR the user asks to SEE/visualize the project", tool: "mneme.graph.blast { name } · mneme.graph.mermaid { name } · CLI: mneme graph blast/stats/mermaid/view <name>", why: "CROSS-LAYER GRAPH — now reads JS/TS · Python · Go · Rust · Ruby. Links 4 layers: 💼 BUSINESS (rules from PRD/markdown, prove-or-unknown anchoring) ↔ 🌐 API (endpoints from route files) ↔ ⚙ CODE (functions) ↔ 🗄 DATA (db tables from the Prisma/SQL schema). `blast` = the cross-layer blast radius (edit a function → which tables it writes + which endpoints reach it). `mermaid` = a flowchart string you render INLINE in the chat to SHOW the user. `view` = a self-contained offline interactive HTML — the 🛰 IMPACT RADAR (center=the change · sectors=layers · rings=blast hop-distance · animated sweep+pulse · click a node to re-center; no name = a project-overview GALAXY you click into; --style lanes for a tiered SVG), signed by fingerprint. `card` = a static PNG/SVG share card (1200×630). `pr` (mneme.graph.pr) = the cross-layer blast radius of a whole git diff/PR — which DB tables + API routes + business rules the change set touches (a GitHub Action posts it on every PR). `check` (mneme.graph.check) = BEFORE applying a multi-file edit, flag a DB table/route/rule the diff touches that the user did NOT mention → route to the human. `reverse` (mneme.graph.reverse) = DROP SAFETY: before removing a table/endpoint, everything that depends on it + SAFE/RISKY/CRITICAL. `health` (mneme.graph.health) = cross-layer KEYSTONES (sole-writer single-points-of-failure) + ORPHANS (dead code); SCOPE COVENANT (world-first): mneme.scope.verify {intent, allow, diff} → HONORED/BREACHED signed verdict that an autonomous edit stayed within the architectural scope it DECLARED (the unpromised file/table/endpoint it reached); mneme.scope.fidelity = each agent's cross-vendor scope-keeping track record (Wilson-LB). GRAPHQL BREAKING: mneme.graphql.breaking {base} → diff GraphQL SDL surface (Query/Mutation/Subscription); removed-op or retyped-return = BREAKING (clients break). API BREAKING-CHANGE: mneme.api.breaking {base} → which endpoints removed/added vs a base ref, + which REMOVED ones are still CONSUMED (BREAKING, names the consumer) vs POSSIBLY breaking; cross-repo break git cant see. MEASURED ACCURACY: mneme.accuracy.report → real precision/recall/F1 per extractor on a labeled corpus (proves accuracy, not claims it; deterministic≠accurate). PROVABLE CROSS-LAYER: mneme.graph.prove {kind:drop|reaches} → extracts facts from the graph + the logic engine PROVES unsafe_to_drop(table) with a proof chain to the cited blocker (or LIKELY_SAFE=no structural blocker), or proves an endpoint reaches a table; heuristic→PROOF. THE LOGIC ENGINE: mneme.logic.check {facts,rules,mutexes,goal} → is a reasoning chain SOUND (not are facts true): PROVEN+proof-tree / CONTRADICTED (premises entail mutually-exclusive pair) / UNKNOWN (does not follow, never false). For checking an AI agents own argument before acting. CROSS-SERVICE: mneme.services.graph → across MANY repos/services, which service calls whose endpoints (producer↔consumer) + DANGLING calls to an endpoint no service produces; org-scale blast radius git cant see. ARCHITECTURAL INVARIANTS: mneme.invariants.check {mine?:true} → MINE the invariants the repo already upholds (zero-config, proven-at-mine-time) OR prove declared rules; HOLDS/VIOLATED+counterexample. CHANGE GATE: mneme.change.gate {baseline} → the ONE call before commit: fuses scar-vaccine + firewall → PASS/WARN/BLOCK. EQUIVALENCE RECEIPT: mneme.equiv.check {oldFn,newFn,args} → prove a PURE-fn refactor did not change behavior (differential boundary test → signed receipt or counterexample). SCAR VACCINE: mneme.scar.check {code,files} → inject the org past-mistake lesson BEFORE you commit; fires on the mistake-shape, quiet when the fix(antibody) is present. ARCH FIREWALL: mneme.arch.firewall {baseline} → the gate for AI-generated change: PASS/WARN/BLOCK on whether the current code violates a load-bearing contract (severity weighted by contract age; declared policies honoured). On BLOCK do NOT commit. DEAD-PATH DETECTOR: mneme.arch.dead_paths → architectural data-flow smells: write-only tables (written never read), read-only tables, functions reachable from no endpoint (dead-code candidates). CONTRACT MAP: mneme.arch.contract_map {since} → mine ALL contracts, rank by age=load-bearing (FOUNDATIONAL near-sacred → RECENT fragile); one repo-wide view of what to respect vs revise. INVARIANT LINEAGE: mneme.arch.lineage {invariant,since} → the AGE of a contract: the commit it was first established + held since (mirror of bisect); old=load-bearing near-sacred, young=fragile. ARCHITECTURAL REGRESSIONS: mneme.arch.regressions {since} → self-diagnosing capstone: mine contracts upheld at baseline, re-prove at HEAD, bisect each break to commit+author (read before touching a repo). CHANGE-COUPLING: mneme.arch.coupling {since} → HIDDEN dependencies the code conceals but git history reveals: files that change together with NO graph link (implicit deps) vs STRUCTURAL (graph explains). CROSS-LAYER HOTSPOTS: mneme.arch.hotspots {since} → ranked refactor targets = files that churn (git) AND are cross-layer entangled (graph); sharper than churn×complexity. ARCHITECTURAL DECAY: mneme.arch.decay {since,samples} → is the architecture getting MORE entangled over time (ERODING/STABLE/IMPROVING) + coupling velocity + worst-step commit; structural-debt time-series. ARCHITECTURAL BISECT: mneme.arch.bisect {invariant,since} → git-bisect for a contract: the exact commit+author where an architectural invariant first broke (replays graph across history). ARCHITECTURAL-INVARIANTS: mneme.invariants.check → prove team-declared rules (table single-writer/private/guarded · endpoint exists) → HOLDS/VIOLATED+counterexample, design-by-contract for architecture. ARCHITECTURE LOCK: mneme.arch.check → package-lock for accountability; CI gate fails on a REGRESSION vs the committed contract (removed endpoint=BREAKING, new authz gap=SECURITY); additions fine; re-lock=reviewed act. THE FRONT DOOR — mneme.review (CLI `mneme review` [--base ref]) → one Codebase Accountability Report: graph + risk hotspots + authz gaps + untested keystones (the whole cross-layer suite in one call). ONBOARDING PATH: mneme.onboard.path → orient in an unfamiliar repo fast — real data-flows (entry→handler→callees→tables+rules), sensitive first. RISK HOTSPOTS: mneme.risk.hotspots → the ONE ranked list of the riskiest cross-layer nodes (keystone × untested × sensitive × authz-gap, fused) — the single what-to-guard-first answer. BLAST-AWARE COMMIT MSG: mneme.commit.suggest → generate an honest commit message from the diff impact. INTENT-vs-IMPACT: mneme.commit.check {message,diff} → a trivial-sounding commit (chore / fix-typo) that secretly rewrites a keystone/touches unmentioned tables = MISMATCH (mislabel/scope-creep). CROSS-LAYER AUTHZ GAP: mneme.authz.scan → endpoints whose handler reaches a WRITE to a sensitive table (accounts/payments) with NO auth function on the path (security smell to review first, may be middleware). CRITICAL UNTESTED SURFACE: mneme.testgap.scan → keystones/tables/endpoints NO test mentions (line-coverage-hidden risk); pass a diff → does THIS change reach untested critical surface. CROSS-AGENT COLLISION (world-first): mneme.collision.detect {changeSets:[{agent,diff}]} → where 2 concurrent agents/branches CONVERGE on the same table/endpoint/function across DIFFERENT files (the conflict git is blind to) + severity HIGH/MEDIUM/LOW. `benchmark` = measured extractor precision/recall; `drift --base <ref>` = architectural drift (cross-layer couplings that appeared/disappeared since a commit). The hosted xray server also serves it: GET /api/radar?gitUrl=<public repo> renders the radar for ANY public repo with no install. Deterministic, no LLM — every node/edge derives from a real file (nothing hallucinated); business→code links are anchored only on an explicit annotation or a strong name match, else the rule stays ORPHAN/UNKNOWN (never a guessed link). ★HONEST: reachable COUPLING to inspect, not a proven runtime break; bodies region-approximated, not a full AST" },
|
|
48
48
|
{ when: "you know what the user WANTS but not which of ~1000 tools fits", tool: "mneme.gateway.route { text } · CLI: mneme matrix search \"<intent>\"", why: "intent → the right tool, ranked (BM25 + curated-trigger wisdom, no LLM) — so you never need to memorise tool names" },
|
|
49
49
|
{ when: "you just made (or are reviewing) a git commit and provenance matters", tool: "mneme.attest.verify · CLI: mneme attest commit / verify / install-hook", why: "sign each commit into a tamper-evident, OFFLINE-verifiable trail (which AI made it · what changed · the screen that ran) — `git log` becomes provable, no trust required" },
|
|
50
50
|
{ when: "BEFORE a risky action (push:main · deploy:prod · add a dependency · touch .env/secrets)", tool: "mneme.engagement.scan { kind, paths, license }", why: "robots.txt-for-agents — check the action against the repo's signed Engagement Policy → ALLOW / NEEDS_COSIGN / BLOCK before you act" },
|
package/dist/boot/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/boot/index.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/boot/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"change_gate.test.d.ts","sourceRoot":"","sources":["../../src/change_gate/change_gate.test.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import { describe, it, expect } from "vitest";
|
|
2
|
+
import { composeGate, gateReport, changeGateGauntlet } from "./index.js";
|
|
3
|
+
const fwBlock = { verdict: "BLOCK", blockedBy: [{ rule: "table wallet single-writer", finalSeverity: "critical", counterexample: "2 writers: a, b" }], findings: [{ rule: "table wallet single-writer", finalSeverity: "critical", waived: false }] };
|
|
4
|
+
const fwWarn = { verdict: "WARN", blockedBy: [], findings: [{ rule: "table x single-writer", finalSeverity: "high", waived: false }] };
|
|
5
|
+
const fwPass = { verdict: "PASS", blockedBy: [], findings: [] };
|
|
6
|
+
const scarFire = { fires: true, firing: [{ scar: { id: "SCAR-double-charge", severity: "critical", lesson: "use idempotency key" } }], immune: [], report: "" };
|
|
7
|
+
const scarQuiet = { fires: false, firing: [], immune: [], report: "" };
|
|
8
|
+
describe("change_gate", () => {
|
|
9
|
+
it("gauntlet is 100", () => expect(changeGateGauntlet().score).toBe(100));
|
|
10
|
+
it("firewall BLOCK ⇒ BLOCK", () => expect(composeGate(fwBlock, scarQuiet).verdict).toBe("BLOCK"));
|
|
11
|
+
it("firewall WARN ⇒ WARN", () => expect(composeGate(fwWarn, scarQuiet).verdict).toBe("WARN"));
|
|
12
|
+
it("scar fire ⇒ WARN with the lesson", () => {
|
|
13
|
+
const g = composeGate(fwPass, scarFire);
|
|
14
|
+
expect(g.verdict).toBe("WARN");
|
|
15
|
+
expect(g.reasons.some((r) => /SCAR-double-charge/.test(r))).toBe(true);
|
|
16
|
+
});
|
|
17
|
+
it("clean ⇒ PASS", () => expect(composeGate(fwPass, scarQuiet).verdict).toBe("PASS"));
|
|
18
|
+
it("BLOCK dominates a co-occurring scar", () => expect(composeGate(fwBlock, scarFire).verdict).toBe("BLOCK"));
|
|
19
|
+
it("gateReport renders the verdict", () => expect(gateReport(composeGate(fwBlock, scarQuiet))).toMatch(/BLOCK/));
|
|
20
|
+
it("null inputs never throw", () => { expect(() => composeGate(null, null)).not.toThrow(); expect(composeGate(null, null).verdict).toBe("PASS"); });
|
|
21
|
+
});
|
|
22
|
+
//# sourceMappingURL=change_gate.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"change_gate.test.js","sourceRoot":"","sources":["../../src/change_gate/change_gate.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* CHANGE GATE — the single call an AI agent makes before it commits.
|
|
3
|
+
*
|
|
4
|
+
* The productized surface of the AI-native trust SaaS: instead of remembering to run the scar vaccine,
|
|
5
|
+
* the firewall, and the regression check separately, an agent (or CI) asks ONE question — "is this change
|
|
6
|
+
* safe to commit?" — and gets ONE verdict (PASS / WARN / BLOCK) that fuses:
|
|
7
|
+
* • PREVENT — the SCAR VACCINE (does this repeat a past mistake without the fix?)
|
|
8
|
+
* • VERIFY — the ARCHITECTURAL FIREWALL (does this break a load-bearing contract?)
|
|
9
|
+
*
|
|
10
|
+
* This module owns the pure COMPOSITION (given the two sub-verdicts → one verdict + the reasons). The
|
|
11
|
+
* CLI/MCP gather the inputs (the staged diff for the vaccine, the baseline for the firewall) and run the
|
|
12
|
+
* two engines; this fuses them so the agent has a single, honest gate.
|
|
13
|
+
*
|
|
14
|
+
* Composition: a firewall BLOCK blocks (a load-bearing contract is broken — the hard stop). A firewall
|
|
15
|
+
* WARN, or any scar that fires, is a WARN (heed it, but it doesn't hard-block — a young contract or a
|
|
16
|
+
* past-mistake-shape is advice, not a wall). Otherwise PASS.
|
|
17
|
+
*
|
|
18
|
+
* ★HONEST (DIAKRISIS): the gate is exactly as strong as its inputs — the firewall's verdict is
|
|
19
|
+
* re-checkable (but a violation can be an intended evolution, hence waivers) and the scar match is a
|
|
20
|
+
* lexical-shape heuristic (a candidate, not proof). BLOCK = a load-bearing contract is broken and not
|
|
21
|
+
* waived; WARN = look before you commit; PASS = neither gate objected (not a proof the change is correct).
|
|
22
|
+
*/
|
|
23
|
+
import { type FirewallVerdict } from "../arch_firewall/index.js";
|
|
24
|
+
import { type ScarVerdict } from "../scar_vaccine/index.js";
|
|
25
|
+
export interface GateVerdict {
|
|
26
|
+
verdict: "PASS" | "WARN" | "BLOCK";
|
|
27
|
+
reasons: string[];
|
|
28
|
+
firewall: {
|
|
29
|
+
verdict: string;
|
|
30
|
+
blocking: number;
|
|
31
|
+
findings: number;
|
|
32
|
+
} | null;
|
|
33
|
+
scar: {
|
|
34
|
+
fires: boolean;
|
|
35
|
+
firing: number;
|
|
36
|
+
} | null;
|
|
37
|
+
}
|
|
38
|
+
export declare function composeGate(fw: FirewallVerdict | null, scar: ScarVerdict | null): GateVerdict;
|
|
39
|
+
export declare function gateReport(g: GateVerdict): string;
|
|
40
|
+
export interface ChangeGateGauntlet {
|
|
41
|
+
score: 0 | 100;
|
|
42
|
+
checks: Array<{
|
|
43
|
+
name: string;
|
|
44
|
+
pass: boolean;
|
|
45
|
+
detail: string;
|
|
46
|
+
}>;
|
|
47
|
+
}
|
|
48
|
+
export declare function changeGateGauntlet(): ChangeGateGauntlet;
|
|
49
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/change_gate/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,OAAO,EAAE,KAAK,eAAe,EAAE,MAAM,2BAA2B,CAAC;AACjE,OAAO,EAAE,KAAK,WAAW,EAAE,MAAM,0BAA0B,CAAC;AAE5D,MAAM,WAAW,WAAW;IAC1B,OAAO,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,CAAC;IACnC,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,QAAQ,EAAE;QAAE,OAAO,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAA;KAAE,GAAG,IAAI,CAAC;IACzE,IAAI,EAAE;QAAE,KAAK,EAAE,OAAO,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,GAAG,IAAI,CAAC;CACjD;AAED,wBAAgB,WAAW,CAAC,EAAE,EAAE,eAAe,GAAG,IAAI,EAAE,IAAI,EAAE,WAAW,GAAG,IAAI,GAAG,WAAW,CAiB7F;AAED,wBAAgB,UAAU,CAAC,CAAC,EAAE,WAAW,GAAG,MAAM,CAGjD;AAGD,MAAM,WAAW,kBAAkB;IAAG,KAAK,EAAE,CAAC,GAAG,GAAG,CAAC;IAAC,MAAM,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,OAAO,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,CAAC,CAAA;CAAE;AACtH,wBAAgB,kBAAkB,IAAI,kBAAkB,CAsBvD"}
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
export function composeGate(fw, scar) {
|
|
2
|
+
const reasons = [];
|
|
3
|
+
const fwBlock = fw?.verdict === "BLOCK";
|
|
4
|
+
const fwWarn = fw?.verdict === "WARN";
|
|
5
|
+
const scarFires = !!scar?.fires;
|
|
6
|
+
if (fwBlock)
|
|
7
|
+
for (const f of (fw?.blockedBy ?? []))
|
|
8
|
+
reasons.push(`🛑 BLOCK · contract "${f.rule}" (${f.finalSeverity})${f.counterexample ? ` — ${f.counterexample}` : ""}`);
|
|
9
|
+
if (fwWarn)
|
|
10
|
+
for (const f of (fw?.findings ?? []).filter((x) => !x.waived).slice(0, 3))
|
|
11
|
+
reasons.push(`🟠 WARN · contract "${f.rule}" (${f.finalSeverity})`);
|
|
12
|
+
if (scarFires)
|
|
13
|
+
for (const h of (scar?.firing ?? []))
|
|
14
|
+
reasons.push(`🧬 SCAR · ${h.scar.id} (${h.scar.severity}) — ${h.scar.lesson}`);
|
|
15
|
+
const verdict = fwBlock ? "BLOCK" : (fwWarn || scarFires) ? "WARN" : "PASS";
|
|
16
|
+
if (verdict === "PASS")
|
|
17
|
+
reasons.push("✅ no scar repeated, no load-bearing contract broken");
|
|
18
|
+
return {
|
|
19
|
+
verdict, reasons,
|
|
20
|
+
firewall: fw ? { verdict: fw.verdict, blocking: fw.blockedBy?.length ?? 0, findings: fw.findings?.length ?? 0 } : null,
|
|
21
|
+
scar: scar ? { fires: scar.fires, firing: scar.firing?.length ?? 0 } : null,
|
|
22
|
+
};
|
|
23
|
+
}
|
|
24
|
+
export function gateReport(g) {
|
|
25
|
+
const head = g.verdict === "BLOCK" ? "🛑 CHANGE GATE — BLOCK (do not commit)" : g.verdict === "WARN" ? "🟠 CHANGE GATE — WARN (look before you commit)" : "✅ CHANGE GATE — PASS";
|
|
26
|
+
return [head, ...g.reasons.map((r) => " " + r)].join("\n");
|
|
27
|
+
}
|
|
28
|
+
export function changeGateGauntlet() {
|
|
29
|
+
const fwBlock = { verdict: "BLOCK", blockedBy: [{ rule: "table wallet single-writer", finalSeverity: "critical", counterexample: "2 writers: a, b" }], findings: [{ rule: "table wallet single-writer", finalSeverity: "critical", waived: false }] };
|
|
30
|
+
const fwWarn = { verdict: "WARN", blockedBy: [], findings: [{ rule: "table x single-writer", finalSeverity: "high", waived: false }] };
|
|
31
|
+
const fwPass = { verdict: "PASS", blockedBy: [], findings: [] };
|
|
32
|
+
const scarFire = { fires: true, firing: [{ scar: { id: "SCAR-double-charge", severity: "critical", lesson: "use idempotency key" } }], immune: [], report: "" };
|
|
33
|
+
const scarQuiet = { fires: false, firing: [], immune: [], report: "" };
|
|
34
|
+
const block = composeGate(fwBlock, scarQuiet).verdict === "BLOCK";
|
|
35
|
+
const warnFromFw = composeGate(fwWarn, scarQuiet).verdict === "WARN";
|
|
36
|
+
const warnFromScar = composeGate(fwPass, scarFire).verdict === "WARN" && composeGate(fwPass, scarFire).reasons.some((r) => /SCAR-double-charge/.test(r));
|
|
37
|
+
const pass = composeGate(fwPass, scarQuiet).verdict === "PASS";
|
|
38
|
+
const blockWins = composeGate(fwBlock, scarFire).verdict === "BLOCK"; // a hard block dominates
|
|
39
|
+
const total = (() => { try {
|
|
40
|
+
composeGate(null, null);
|
|
41
|
+
gateReport(composeGate(null, null));
|
|
42
|
+
return true;
|
|
43
|
+
}
|
|
44
|
+
catch {
|
|
45
|
+
return false;
|
|
46
|
+
} })();
|
|
47
|
+
const checks = [
|
|
48
|
+
{ name: "FIREWALL-BLOCK⇒BLOCK", pass: block, detail: "a broken load-bearing contract hard-blocks the commit" },
|
|
49
|
+
{ name: "FIREWALL-WARN⇒WARN", pass: warnFromFw, detail: "a non-blocking firewall finding is a WARN" },
|
|
50
|
+
{ name: "SCAR-FIRE⇒WARN", pass: warnFromScar, detail: "a fired scar (past mistake) is a WARN with the lesson surfaced" },
|
|
51
|
+
{ name: "CLEAN⇒PASS", pass: pass, detail: "no scar + no contract break → PASS" },
|
|
52
|
+
{ name: "BLOCK-DOMINATES", pass: blockWins, detail: "BLOCK wins over a co-occurring scar/warn" },
|
|
53
|
+
{ name: "TOTAL", pass: total, detail: "null inputs never throw" },
|
|
54
|
+
];
|
|
55
|
+
return { score: checks.every((c) => c.pass) ? 100 : 0, checks };
|
|
56
|
+
}
|
|
57
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/change_gate/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"equiv_receipt.test.d.ts","sourceRoot":"","sources":["../../src/equiv_receipt/equiv_receipt.test.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
import { describe, it, expect } from "vitest";
|
|
2
|
+
import { genInputs, differential, outputsEqual, buildReceipt, checkEquivalence, equivReceiptGauntlet } from "./index.js";
|
|
3
|
+
const spec = [{ name: "price", type: "number" }, { name: "qty", type: "int" }];
|
|
4
|
+
const v1 = (p, q) => q >= 10 ? p * q * 0.8 : q >= 5 ? p * q * 0.9 : p * q;
|
|
5
|
+
const v2 = (p, q) => { const r = q >= 10 ? 0.8 : q >= 5 ? 0.9 : 1.0; return p * q * r; };
|
|
6
|
+
const vBad = (p, q) => { const r = q > 10 ? 0.8 : q > 5 ? 0.9 : 1.0; return p * q * r; };
|
|
7
|
+
describe("equiv_receipt", () => {
|
|
8
|
+
it("gauntlet is 100", () => expect(equivReceiptGauntlet().score).toBe(100));
|
|
9
|
+
it("an equivalent refactor verifies over many inputs", () => {
|
|
10
|
+
const r = checkEquivalence(v1, v2, spec);
|
|
11
|
+
expect(r.equivalent).toBe(true);
|
|
12
|
+
expect(r.inputsTested).toBeGreaterThan(100);
|
|
13
|
+
expect(r.counterexample).toBeNull();
|
|
14
|
+
});
|
|
15
|
+
it("a boundary bug (>= → >) is caught at a threshold", () => {
|
|
16
|
+
const r = checkEquivalence(v1, vBad, spec);
|
|
17
|
+
expect(r.equivalent).toBe(false);
|
|
18
|
+
expect([5, 6, 10, 11]).toContain(r.counterexample.input[1]);
|
|
19
|
+
});
|
|
20
|
+
it("genInputs is deterministic", () => {
|
|
21
|
+
expect(JSON.stringify(genInputs(spec))).toBe(JSON.stringify(genInputs(spec)));
|
|
22
|
+
});
|
|
23
|
+
it("outputsEqual: epsilon numbers, deep objects", () => {
|
|
24
|
+
expect(outputsEqual(0.1 + 0.2, 0.3)).toBe(true);
|
|
25
|
+
expect(outputsEqual({ a: [1, 2] }, { a: [1, 2] })).toBe(true);
|
|
26
|
+
expect(outputsEqual(1, 2)).toBe(false);
|
|
27
|
+
});
|
|
28
|
+
it("differing throw behavior is a counterexample", () => {
|
|
29
|
+
const ok = (x) => x;
|
|
30
|
+
const boom = (x) => { if (x === 0)
|
|
31
|
+
throw new Error("x"); return x; };
|
|
32
|
+
const r = checkEquivalence(ok, boom, [{ name: "x", type: "int" }]);
|
|
33
|
+
expect(r.equivalent).toBe(false);
|
|
34
|
+
});
|
|
35
|
+
it("buildReceipt hashes source + carries the verdict", () => {
|
|
36
|
+
const r = buildReceipt("f", "a", "b", { equivalent: true, inputsTested: 5, counterexample: null, errored: 0 });
|
|
37
|
+
expect(r.claim).toBe("BEHAVIORAL-EQUIVALENCE");
|
|
38
|
+
expect(r.oldHash).not.toBe(r.newHash);
|
|
39
|
+
});
|
|
40
|
+
it("never throws on garbage", () => {
|
|
41
|
+
expect(() => differential(null, null, [])).not.toThrow();
|
|
42
|
+
expect(() => genInputs(null)).not.toThrow();
|
|
43
|
+
});
|
|
44
|
+
});
|
|
45
|
+
//# sourceMappingURL=equiv_receipt.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"equiv_receipt.test.js","sourceRoot":"","sources":["../../src/equiv_receipt/equiv_receipt.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAC9C,OAAO,EAAE,SAAS,EAAE,YAAY,EAAE,YAAY,EAAE,YAAY,EAAE,gBAAgB,EAAE,oBAAoB,EAAE,MAAM,YAAY,CAAC;AAEzH,MAAM,IAAI,GAAG,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,QAAiB,EAAE,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,KAAc,EAAE,CAAC,CAAC;AACjG,MAAM,EAAE,GAAG,CAAC,CAAS,EAAE,CAAS,EAAE,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;AAC1F,MAAM,EAAE,GAAG,CAAC,CAAS,EAAE,CAAS,EAAE,EAAE,GAAG,MAAM,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;AACzG,MAAM,IAAI,GAAG,CAAC,CAAS,EAAE,CAAS,EAAE,EAAE,GAAG,MAAM,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;AAEzG,QAAQ,CAAC,eAAe,EAAE,GAAG,EAAE;IAC7B,EAAE,CAAC,iBAAiB,EAAE,GAAG,EAAE,CAAC,MAAM,CAAC,oBAAoB,EAAE,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;IAE5E,EAAE,CAAC,kDAAkD,EAAE,GAAG,EAAE;QAC1D,MAAM,CAAC,GAAG,gBAAgB,CAAC,EAAW,EAAE,EAAW,EAAE,IAAI,CAAC,CAAC;QAC3D,MAAM,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAChC,MAAM,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,eAAe,CAAC,GAAG,CAAC,CAAC;QAC5C,MAAM,CAAC,CAAC,CAAC,cAAc,CAAC,CAAC,QAAQ,EAAE,CAAC;IACtC,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,kDAAkD,EAAE,GAAG,EAAE;QAC1D,MAAM,CAAC,GAAG,gBAAgB,CAAC,EAAW,EAAE,IAAa,EAAE,IAAI,CAAC,CAAC;QAC7D,MAAM,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACjC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,cAAe,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;IAC/D,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,4BAA4B,EAAE,GAAG,EAAE;QACpC,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAChF,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,6CAA6C,EAAE,GAAG,EAAE;QACrD,MAAM,CAAC,YAAY,CAAC,GAAG,GAAG,GAAG,EAAE,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAChD,MAAM,CAAC,YAAY,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAC9D,MAAM,CAAC,YAAY,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IACzC,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,8CAA8C,EAAE,GAAG,EAAE;QACtD,MAAM,EAAE,GAAG,CAAC,CAAS,EAAE,EAAE,CAAC,CAAC,CAAC;QAC5B,MAAM,IAAI,GAAG,CAAC,CAAS,EAAE,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC;YAAE,MAAM,IAAI,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC;QAC7E,MAAM,CAAC,GAAG,gBAAgB,CAAC,EAAW,EAAE,IAAa,EAAE,CAAC,EAAE,IAAI,EAAE,GAAG,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC;QACrF,MAAM,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IACnC,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,kDAAkD,EAAE,GAAG,EAAE;QAC1D,MAAM,CAAC,GAAG,YAAY,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE,UAAU,EAAE,IAAI,EAAE,YAAY,EAAE,CAAC,EAAE,cAAc,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC,CAAC;QAC/G,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,wBAAwB,CAAC,CAAC;QAC/C,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC;IACxC,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,yBAAyB,EAAE,GAAG,EAAE;QACjC,MAAM,CAAC,GAAG,EAAE,CAAC,YAAY,CAAC,IAAa,EAAE,IAAa,EAAE,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,EAAE,CAAC;QAC3E,MAAM,CAAC,GAAG,EAAE,CAAC,SAAS,CAAC,IAAa,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,EAAE,CAAC;IACvD,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
|
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* BEHAVIORAL-EQUIVALENCE RECEIPTS — prove an AI refactor didn't silently change behavior.
|
|
3
|
+
*
|
|
4
|
+
* "The tests pass" proves almost nothing — a unit test written at qty=7 stays green while a refactor
|
|
5
|
+
* flips `>=` to `>` and silently breaks every boundary. When an AI rewrites a function claiming to
|
|
6
|
+
* preserve behavior, this DIFFERENTIALLY TESTS old vs new over inputs SEEDED WITH THE BOUNDARIES where
|
|
7
|
+
* off-by-one bugs live (plus a deterministic fuzz fill), and returns either a precise COUNTEREXAMPLE or
|
|
8
|
+
* an equivalence verdict that can be wrapped in a signed receipt and trusted by CI instead of a promise.
|
|
9
|
+
*
|
|
10
|
+
* This module owns the deterministic ENGINE: boundary+fuzz input generation by argument type, an
|
|
11
|
+
* order-insensitive output comparison, the differential runner (takes the two functions), and the
|
|
12
|
+
* receipt BODY (claim + content hashes). Signing is done by the caller's notary (the MCP layer wraps the
|
|
13
|
+
* body in an Ed25519 `_proof`), so a receipt verifies offline.
|
|
14
|
+
*
|
|
15
|
+
* ★HONEST (DIAKRISIS): equivalence here is EMPIRICAL over a finite, boundary-biased sample — a strong
|
|
16
|
+
* signal (far stronger than example-based unit tests), NOT a formal proof of total equivalence; a
|
|
17
|
+
* difference that only shows on an input class the generator doesn't cover can be missed (the receipt
|
|
18
|
+
* states exactly how many inputs were tested). It is sound for PURE functions; a function with
|
|
19
|
+
* side-effects / IO / DB needs a snapshot-or-mock harness the caller supplies — that harder case is
|
|
20
|
+
* exactly where the moat is, and this engine is the seed of it.
|
|
21
|
+
*/
|
|
22
|
+
export type ArgType = "number" | "int" | "string" | "bool";
|
|
23
|
+
export interface ArgSpec {
|
|
24
|
+
name: string;
|
|
25
|
+
type: ArgType;
|
|
26
|
+
}
|
|
27
|
+
/** Deterministic input rows: a capped cartesian over per-arg boundaries + a deterministic LCG fuzz fill. */
|
|
28
|
+
export declare function genInputs(spec: ReadonlyArray<ArgSpec>, opts?: {
|
|
29
|
+
fuzz?: number;
|
|
30
|
+
cartesianCap?: number;
|
|
31
|
+
}): unknown[][];
|
|
32
|
+
/** Order-insensitive value comparison (numbers within epsilon; deep for objects/arrays). */
|
|
33
|
+
export declare function outputsEqual(a: unknown, b: unknown): boolean;
|
|
34
|
+
export interface DiffResult {
|
|
35
|
+
equivalent: boolean;
|
|
36
|
+
inputsTested: number;
|
|
37
|
+
counterexample: {
|
|
38
|
+
input: unknown[];
|
|
39
|
+
old: unknown;
|
|
40
|
+
new: unknown;
|
|
41
|
+
} | null;
|
|
42
|
+
errored: number;
|
|
43
|
+
}
|
|
44
|
+
/** Run old vs new over the inputs; first disagreement (or differing throw behavior) is the counterexample. */
|
|
45
|
+
export declare function differential(oldFn: (...a: unknown[]) => unknown, newFn: (...a: unknown[]) => unknown, inputs: ReadonlyArray<ReadonlyArray<unknown>>): DiffResult;
|
|
46
|
+
export interface EquivReceipt {
|
|
47
|
+
claim: "BEHAVIORAL-EQUIVALENCE";
|
|
48
|
+
subject: string;
|
|
49
|
+
equivalent: boolean;
|
|
50
|
+
inputsTested: number;
|
|
51
|
+
oldHash: string;
|
|
52
|
+
newHash: string;
|
|
53
|
+
counterexample: DiffResult["counterexample"];
|
|
54
|
+
}
|
|
55
|
+
/** Build the receipt body (the MCP layer signs it). */
|
|
56
|
+
export declare function buildReceipt(subject: string, oldSrc: string, newSrc: string, r: DiffResult): EquivReceipt;
|
|
57
|
+
/** High-level: generate inputs, run the differential, return the receipt body. */
|
|
58
|
+
export declare function checkEquivalence(oldFn: (...a: unknown[]) => unknown, newFn: (...a: unknown[]) => unknown, spec: ReadonlyArray<ArgSpec>, opts?: {
|
|
59
|
+
subject?: string;
|
|
60
|
+
oldSrc?: string;
|
|
61
|
+
newSrc?: string;
|
|
62
|
+
fuzz?: number;
|
|
63
|
+
}): EquivReceipt;
|
|
64
|
+
export interface EquivReceiptGauntlet {
|
|
65
|
+
score: 0 | 100;
|
|
66
|
+
checks: Array<{
|
|
67
|
+
name: string;
|
|
68
|
+
pass: boolean;
|
|
69
|
+
detail: string;
|
|
70
|
+
}>;
|
|
71
|
+
}
|
|
72
|
+
export declare function equivReceiptGauntlet(): EquivReceiptGauntlet;
|
|
73
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/equiv_receipt/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,MAAM,MAAM,OAAO,GAAG,QAAQ,GAAG,KAAK,GAAG,QAAQ,GAAG,MAAM,CAAC;AAC3D,MAAM,WAAW,OAAO;IAAG,IAAI,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,OAAO,CAAA;CAAE;AAUxD,4GAA4G;AAC5G,wBAAgB,SAAS,CAAC,IAAI,EAAE,aAAa,CAAC,OAAO,CAAC,EAAE,IAAI,CAAC,EAAE;IAAE,IAAI,CAAC,EAAE,MAAM,CAAC;IAAC,YAAY,CAAC,EAAE,MAAM,CAAA;CAAE,GAAG,OAAO,EAAE,EAAE,CAsBpH;AAED,4FAA4F;AAC5F,wBAAgB,YAAY,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,OAAO,GAAG,OAAO,CAK5D;AAED,MAAM,WAAW,UAAU;IAAG,UAAU,EAAE,OAAO,CAAC;IAAC,YAAY,EAAE,MAAM,CAAC;IAAC,cAAc,EAAE;QAAE,KAAK,EAAE,OAAO,EAAE,CAAC;QAAC,GAAG,EAAE,OAAO,CAAC;QAAC,GAAG,EAAE,OAAO,CAAA;KAAE,GAAG,IAAI,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE;AACnK,8GAA8G;AAC9G,wBAAgB,YAAY,CAAC,KAAK,EAAE,CAAC,GAAG,CAAC,EAAE,OAAO,EAAE,KAAK,OAAO,EAAE,KAAK,EAAE,CAAC,GAAG,CAAC,EAAE,OAAO,EAAE,KAAK,OAAO,EAAE,MAAM,EAAE,aAAa,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC,GAAG,UAAU,CAUhK;AAKD,MAAM,WAAW,YAAY;IAAG,KAAK,EAAE,wBAAwB,CAAC;IAAC,OAAO,EAAE,MAAM,CAAC;IAAC,UAAU,EAAE,OAAO,CAAC;IAAC,YAAY,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAC;IAAC,cAAc,EAAE,UAAU,CAAC,gBAAgB,CAAC,CAAA;CAAE;AAC7M,uDAAuD;AACvD,wBAAgB,YAAY,CAAC,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC,EAAE,UAAU,GAAG,YAAY,CAEzG;AAED,kFAAkF;AAClF,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,CAAC,GAAG,CAAC,EAAE,OAAO,EAAE,KAAK,OAAO,EAAE,KAAK,EAAE,CAAC,GAAG,CAAC,EAAE,OAAO,EAAE,KAAK,OAAO,EAAE,IAAI,EAAE,aAAa,CAAC,OAAO,CAAC,EAAE,IAAI,CAAC,EAAE;IAAE,OAAO,CAAC,EAAE,MAAM,CAAC;IAAC,MAAM,CAAC,EAAE,MAAM,CAAC;IAAC,MAAM,CAAC,EAAE,MAAM,CAAC;IAAC,IAAI,CAAC,EAAE,MAAM,CAAA;CAAE,GAAG,YAAY,CAInO;AAGD,MAAM,WAAW,oBAAoB;IAAG,KAAK,EAAE,CAAC,GAAG,GAAG,CAAC;IAAC,MAAM,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,OAAO,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,CAAC,CAAA;CAAE;AACxH,wBAAgB,oBAAoB,IAAI,oBAAoB,CAwB3D"}
|
|
@@ -0,0 +1,137 @@
|
|
|
1
|
+
const NUM_BOUNDARIES = [0, 1, -1, 0.5, -0.5, 2, 5, 10, 100, -100, 9.99, 1000];
|
|
2
|
+
const INT_BOUNDARIES = [0, 1, -1, 2, 3, 4, 5, 6, 9, 10, 11, 100, -10];
|
|
3
|
+
const STR_BOUNDARIES = ["", " ", "a", "abc", "0", "null", " trim ", "ABCdef123"];
|
|
4
|
+
const BOOL_BOUNDARIES = [true, false];
|
|
5
|
+
function boundariesFor(t) {
|
|
6
|
+
return t === "number" ? NUM_BOUNDARIES : t === "int" ? INT_BOUNDARIES : t === "string" ? STR_BOUNDARIES : BOOL_BOUNDARIES;
|
|
7
|
+
}
|
|
8
|
+
/** Deterministic input rows: a capped cartesian over per-arg boundaries + a deterministic LCG fuzz fill. */
|
|
9
|
+
export function genInputs(spec, opts) {
|
|
10
|
+
const args = spec ?? [];
|
|
11
|
+
if (!args.length)
|
|
12
|
+
return [[]];
|
|
13
|
+
const fuzz = opts?.fuzz ?? 1500;
|
|
14
|
+
const cap = opts?.cartesianCap ?? 4000;
|
|
15
|
+
const cols = args.map((a) => boundariesFor(a.type));
|
|
16
|
+
// bounded cartesian product of boundaries
|
|
17
|
+
const rows = [[]];
|
|
18
|
+
for (const col of cols) {
|
|
19
|
+
const next = [];
|
|
20
|
+
for (const row of rows) {
|
|
21
|
+
for (const v of col) {
|
|
22
|
+
next.push([...row, v]);
|
|
23
|
+
if (next.length >= cap)
|
|
24
|
+
break;
|
|
25
|
+
}
|
|
26
|
+
if (next.length >= cap)
|
|
27
|
+
break;
|
|
28
|
+
}
|
|
29
|
+
rows.length = 0;
|
|
30
|
+
rows.push(...next);
|
|
31
|
+
}
|
|
32
|
+
// deterministic LCG fuzz (no Math.random — receipts must be reproducible)
|
|
33
|
+
let s = 2166136261 >>> 0;
|
|
34
|
+
const rnd = () => { s = (Math.imul(s, 1103515245) + 12345) >>> 0; return s / 0xffffffff; };
|
|
35
|
+
for (let i = 0; i < fuzz; i++) {
|
|
36
|
+
rows.push(args.map((a) => a.type === "number" ? Math.round(rnd() * 2000 - 1000) / 10
|
|
37
|
+
: a.type === "int" ? Math.floor(rnd() * 200 - 50)
|
|
38
|
+
: a.type === "string" ? "s" + Math.floor(rnd() * 1000)
|
|
39
|
+
: rnd() > 0.5));
|
|
40
|
+
}
|
|
41
|
+
return rows;
|
|
42
|
+
}
|
|
43
|
+
/** Order-insensitive value comparison (numbers within epsilon; deep for objects/arrays). */
|
|
44
|
+
export function outputsEqual(a, b) {
|
|
45
|
+
if (Object.is(a, b))
|
|
46
|
+
return true;
|
|
47
|
+
if (typeof a === "number" && typeof b === "number")
|
|
48
|
+
return Math.abs(a - b) < 1e-9 || (Number.isNaN(a) && Number.isNaN(b));
|
|
49
|
+
if (a && b && typeof a === "object" && typeof b === "object") {
|
|
50
|
+
try {
|
|
51
|
+
return JSON.stringify(a) === JSON.stringify(b);
|
|
52
|
+
}
|
|
53
|
+
catch {
|
|
54
|
+
return false;
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
return false;
|
|
58
|
+
}
|
|
59
|
+
/** Run old vs new over the inputs; first disagreement (or differing throw behavior) is the counterexample. */
|
|
60
|
+
export function differential(oldFn, newFn, inputs) {
|
|
61
|
+
let errored = 0;
|
|
62
|
+
for (const input of inputs ?? []) {
|
|
63
|
+
let a, b, ae = false, be = false;
|
|
64
|
+
try {
|
|
65
|
+
a = oldFn(...input);
|
|
66
|
+
}
|
|
67
|
+
catch {
|
|
68
|
+
ae = true;
|
|
69
|
+
}
|
|
70
|
+
try {
|
|
71
|
+
b = newFn(...input);
|
|
72
|
+
}
|
|
73
|
+
catch {
|
|
74
|
+
be = true;
|
|
75
|
+
}
|
|
76
|
+
if (ae || be) {
|
|
77
|
+
errored++;
|
|
78
|
+
if (ae !== be)
|
|
79
|
+
return { equivalent: false, inputsTested: inputs.length, counterexample: { input: [...input], old: ae ? "<throw>" : a, new: be ? "<throw>" : b }, errored };
|
|
80
|
+
continue;
|
|
81
|
+
}
|
|
82
|
+
if (!outputsEqual(a, b))
|
|
83
|
+
return { equivalent: false, inputsTested: inputs.length, counterexample: { input: [...input], old: a, new: b }, errored };
|
|
84
|
+
}
|
|
85
|
+
return { equivalent: true, inputsTested: (inputs ?? []).length, counterexample: null, errored };
|
|
86
|
+
}
|
|
87
|
+
// tiny FNV-1a (avoid importing node:crypto into the pure core; the MCP layer adds the Ed25519 proof)
|
|
88
|
+
function fnv1a(s) { let h = 2166136261 >>> 0; for (let i = 0; i < s.length; i++) {
|
|
89
|
+
h ^= s.charCodeAt(i);
|
|
90
|
+
h = Math.imul(h, 16777619) >>> 0;
|
|
91
|
+
} return ("00000000" + h.toString(16)).slice(-8); }
|
|
92
|
+
/** Build the receipt body (the MCP layer signs it). */
|
|
93
|
+
export function buildReceipt(subject, oldSrc, newSrc, r) {
|
|
94
|
+
return { claim: "BEHAVIORAL-EQUIVALENCE", subject, equivalent: r.equivalent, inputsTested: r.inputsTested, oldHash: fnv1a(String(oldSrc ?? "")), newHash: fnv1a(String(newSrc ?? "")), counterexample: r.counterexample };
|
|
95
|
+
}
|
|
96
|
+
/** High-level: generate inputs, run the differential, return the receipt body. */
|
|
97
|
+
export function checkEquivalence(oldFn, newFn, spec, opts) {
|
|
98
|
+
const inputs = genInputs(spec, { fuzz: opts?.fuzz });
|
|
99
|
+
const r = differential(oldFn, newFn, inputs);
|
|
100
|
+
return buildReceipt(opts?.subject ?? "fn", opts?.oldSrc ?? oldFn.toString(), opts?.newSrc ?? newFn.toString(), r);
|
|
101
|
+
}
|
|
102
|
+
export function equivReceiptGauntlet() {
|
|
103
|
+
const spec = [{ name: "price", type: "number" }, { name: "qty", type: "int" }];
|
|
104
|
+
const v1 = (price, qty) => qty >= 10 ? price * qty * 0.8 : qty >= 5 ? price * qty * 0.9 : price * qty;
|
|
105
|
+
const v2 = (price, qty) => { const rate = qty >= 10 ? 0.8 : qty >= 5 ? 0.9 : 1.0; return price * qty * rate; }; // equivalent
|
|
106
|
+
const vBad = (price, qty) => { const rate = qty > 10 ? 0.8 : qty > 5 ? 0.9 : 1.0; return price * qty * rate; }; // >= became >
|
|
107
|
+
const eq = checkEquivalence(v1, v2, spec);
|
|
108
|
+
const bad = checkEquivalence(v1, vBad, spec);
|
|
109
|
+
const equivOK = eq.equivalent === true && eq.inputsTested > 100 && eq.counterexample === null;
|
|
110
|
+
// the boundary bug is caught at qty=5 or qty=10 (where a unit test at qty=7 stays green)
|
|
111
|
+
const boundaryCaught = bad.equivalent === false && bad.counterexample != null && (() => { const q = bad.counterexample.input[1]; return q === 5 || q === 10 || q === 6 || q === 11; })();
|
|
112
|
+
// genInputs is deterministic (same inputs every run) → receipts reproducible
|
|
113
|
+
const gi1 = JSON.stringify(genInputs(spec));
|
|
114
|
+
const gi2 = JSON.stringify(genInputs(spec));
|
|
115
|
+
const deterministic = gi1 === gi2;
|
|
116
|
+
const hashOK = eq.oldHash !== eq.newHash; // different source → different content hash
|
|
117
|
+
const total = (() => { try {
|
|
118
|
+
differential(null, null, []);
|
|
119
|
+
genInputs(null);
|
|
120
|
+
outputsEqual({ a: 1 }, { a: 1 });
|
|
121
|
+
checkEquivalence(((x) => x), ((x) => x), [{ name: "x", type: "number" }]);
|
|
122
|
+
return true;
|
|
123
|
+
}
|
|
124
|
+
catch {
|
|
125
|
+
return false;
|
|
126
|
+
} })();
|
|
127
|
+
const idem = checkEquivalence(((x) => x * 2), ((x) => x + x), [{ name: "x", type: "number" }]).equivalent === true;
|
|
128
|
+
const checks = [
|
|
129
|
+
{ name: "EQUIVALENT-REFACTOR", pass: equivOK, detail: "a table-driven rewrite of a tiered function is proven equivalent over 100s of inputs" },
|
|
130
|
+
{ name: "BOUNDARY-BUG-CAUGHT", pass: boundaryCaught, detail: ">= → > is caught with a counterexample exactly at a threshold (qty 5/10) — where example tests miss it" },
|
|
131
|
+
{ name: "DETERMINISTIC-INPUTS", pass: deterministic, detail: "input generation is reproducible (no Math.random) → receipts are reproducible" },
|
|
132
|
+
{ name: "CONTENT-HASH", pass: hashOK && idem, detail: "old/new source hashed into the receipt; a genuinely-equivalent rewrite (x*2 vs x+x) verifies" },
|
|
133
|
+
{ name: "TOTAL", pass: total, detail: "null/garbage never throws" },
|
|
134
|
+
];
|
|
135
|
+
return { score: checks.every((c) => c.pass) ? 100 : 0, checks };
|
|
136
|
+
}
|
|
137
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/equiv_receipt/index.ts"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts
CHANGED
|
@@ -219,6 +219,9 @@ export * as archRegressions from "./arch_regressions/index.js";
|
|
|
219
219
|
export * as archLineage from "./arch_lineage/index.js";
|
|
220
220
|
export * as deadPath from "./dead_path/index.js";
|
|
221
221
|
export * as archFirewall from "./arch_firewall/index.js";
|
|
222
|
+
export * as scarVaccine from "./scar_vaccine/index.js";
|
|
223
|
+
export * as equivReceipt from "./equiv_receipt/index.js";
|
|
224
|
+
export * as changeGate from "./change_gate/index.js";
|
|
222
225
|
export * as moat from "./moat/index.js";
|
|
223
226
|
export * as symbiosis from "./symbiosis/index.js";
|
|
224
227
|
export * as truthKernel from "./truth_kernel/index.js";
|