@mneme-ai/core 2.47.0 → 2.48.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (37) hide show
  1. package/dist/index.d.ts +1 -0
  2. package/dist/index.d.ts.map +1 -1
  3. package/dist/index.js +4 -0
  4. package/dist/index.js.map +1 -1
  5. package/dist/nemesis/classifier_calibrated.d.ts.map +1 -1
  6. package/dist/nemesis/classifier_calibrated.js +19 -0
  7. package/dist/nemesis/classifier_calibrated.js.map +1 -1
  8. package/dist/nemesis/eu_ai_act_stamp.d.ts +1 -0
  9. package/dist/nemesis/eu_ai_act_stamp.d.ts.map +1 -1
  10. package/dist/nemesis/eu_ai_act_stamp.js +25 -4
  11. package/dist/nemesis/eu_ai_act_stamp.js.map +1 -1
  12. package/dist/nemesis/features.d.ts.map +1 -1
  13. package/dist/nemesis/features.js +54 -10
  14. package/dist/nemesis/features.js.map +1 -1
  15. package/dist/nemesis/index.d.ts +2 -0
  16. package/dist/nemesis/index.d.ts.map +1 -1
  17. package/dist/nemesis/index.js +3 -0
  18. package/dist/nemesis/index.js.map +1 -1
  19. package/dist/nemesis/nemesis_to_conclave.d.ts +42 -0
  20. package/dist/nemesis/nemesis_to_conclave.d.ts.map +1 -0
  21. package/dist/nemesis/nemesis_to_conclave.js +74 -0
  22. package/dist/nemesis/nemesis_to_conclave.js.map +1 -0
  23. package/dist/nemesis/vendor_reconcile.d.ts +38 -0
  24. package/dist/nemesis/vendor_reconcile.d.ts.map +1 -0
  25. package/dist/nemesis/vendor_reconcile.js +50 -0
  26. package/dist/nemesis/vendor_reconcile.js.map +1 -0
  27. package/dist/release_gate/probe_coverage.d.ts +56 -0
  28. package/dist/release_gate/probe_coverage.d.ts.map +1 -0
  29. package/dist/release_gate/probe_coverage.js +116 -0
  30. package/dist/release_gate/probe_coverage.js.map +1 -0
  31. package/dist/truth_gate/claims.d.ts.map +1 -1
  32. package/dist/truth_gate/claims.js +15 -0
  33. package/dist/truth_gate/claims.js.map +1 -1
  34. package/dist/truth_gate/probes.d.ts.map +1 -1
  35. package/dist/truth_gate/probes.js +52 -0
  36. package/dist/truth_gate/probes.js.map +1 -1
  37. package/package.json +1 -1
@@ -0,0 +1,42 @@
1
+ /**
2
+ * v2.48.0 — NEMESIS → CONCLAVE closed feedback loop (F6).
3
+ *
4
+ * Closes the integration gap from v2.47 audit ("⚠ → conclave weights
5
+ * EMPTY"). When NEMESIS catches a vendor lying about identity, that
6
+ * verdict feeds back into CONCLAVE's vote-weight ledger so the dishonest
7
+ * vendor gets DOWN-WEIGHTED across all of Mneme's consensus mechanisms.
8
+ *
9
+ * Weight delta logic:
10
+ * IMPOSSIBLE vendor (claimed != detected, conf ≥ 0.65) → -0.20
11
+ * DISPUTED vendor (claimed != detected, conf < 0.65) → -0.05
12
+ * CONFIRMED vendor (claim == detected) → +0.05 (max +0.10)
13
+ * INCONCLUSIVE → 0
14
+ *
15
+ * The same `.mneme/honest_mirror_weights.json` file that HONEST MIRROR
16
+ * (v2.30) and CONCLAVE (v2.29) read — we write into it with a
17
+ * `source: "nemesis"` audit tag so downstream consumers know who
18
+ * adjusted the weight.
19
+ */
20
+ import type { IdentityVerdictKind } from "./types.js";
21
+ export interface VerdictInput {
22
+ verdict: IdentityVerdictKind;
23
+ claimedVendor: string;
24
+ fingerprintConfidence: number;
25
+ }
26
+ export interface WeightDelta {
27
+ targetVendor: string;
28
+ delta: number;
29
+ reason: string;
30
+ }
31
+ export declare function computeWeightDelta(input: VerdictInput): WeightDelta;
32
+ export interface ApplyResult {
33
+ ok: boolean;
34
+ reason?: string;
35
+ delta?: WeightDelta;
36
+ /** New cumulative weight for the vendor. */
37
+ newWeight?: number;
38
+ /** Where the change landed. */
39
+ weightsPath?: string;
40
+ }
41
+ export declare function applyToConclave(repoRoot: string, input: VerdictInput): ApplyResult;
42
+ //# sourceMappingURL=nemesis_to_conclave.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"nemesis_to_conclave.d.ts","sourceRoot":"","sources":["../../src/nemesis/nemesis_to_conclave.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AAIH,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,YAAY,CAAC;AAEtD,MAAM,WAAW,YAAY;IAC3B,OAAO,EAAE,mBAAmB,CAAC;IAC7B,aAAa,EAAE,MAAM,CAAC;IACtB,qBAAqB,EAAE,MAAM,CAAC;CAC/B;AAED,MAAM,WAAW,WAAW;IAC1B,YAAY,EAAE,MAAM,CAAC;IACrB,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,YAAY,GAAG,WAAW,CAanE;AAED,MAAM,WAAW,WAAW;IAC1B,EAAE,EAAE,OAAO,CAAC;IACZ,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,KAAK,CAAC,EAAE,WAAW,CAAC;IACpB,4CAA4C;IAC5C,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,+BAA+B;IAC/B,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAaD,wBAAgB,eAAe,CAAC,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE,YAAY,GAAG,WAAW,CAuBlF"}
@@ -0,0 +1,74 @@
1
+ /**
2
+ * v2.48.0 — NEMESIS → CONCLAVE closed feedback loop (F6).
3
+ *
4
+ * Closes the integration gap from v2.47 audit ("⚠ → conclave weights
5
+ * EMPTY"). When NEMESIS catches a vendor lying about identity, that
6
+ * verdict feeds back into CONCLAVE's vote-weight ledger so the dishonest
7
+ * vendor gets DOWN-WEIGHTED across all of Mneme's consensus mechanisms.
8
+ *
9
+ * Weight delta logic:
10
+ * IMPOSSIBLE vendor (claimed != detected, conf ≥ 0.65) → -0.20
11
+ * DISPUTED vendor (claimed != detected, conf < 0.65) → -0.05
12
+ * CONFIRMED vendor (claim == detected) → +0.05 (max +0.10)
13
+ * INCONCLUSIVE → 0
14
+ *
15
+ * The same `.mneme/honest_mirror_weights.json` file that HONEST MIRROR
16
+ * (v2.30) and CONCLAVE (v2.29) read — we write into it with a
17
+ * `source: "nemesis"` audit tag so downstream consumers know who
18
+ * adjusted the weight.
19
+ */
20
+ import { existsSync, mkdirSync, readFileSync, writeFileSync } from "node:fs";
21
+ import { join } from "node:path";
22
+ export function computeWeightDelta(input) {
23
+ const claimed = input.claimedVendor ?? "";
24
+ const conf = Number.isFinite(input.fingerprintConfidence) ? input.fingerprintConfidence : 0;
25
+ switch (input.verdict) {
26
+ case "IMPOSSIBLE":
27
+ return { targetVendor: claimed, delta: -0.20 * Math.min(1, conf + 0.1), reason: `IMPOSSIBLE identity-lie (conf ${conf.toFixed(2)})` };
28
+ case "DISPUTED":
29
+ return { targetVendor: claimed, delta: -0.05, reason: `DISPUTED identity` };
30
+ case "CONFIRMED":
31
+ return { targetVendor: claimed, delta: Math.min(0.10, conf * 0.10), reason: `CONFIRMED identity (conf ${conf.toFixed(2)})` };
32
+ default:
33
+ return { targetVendor: claimed, delta: 0, reason: "INCONCLUSIVE — no weight change" };
34
+ }
35
+ }
36
+ function readWeights(path) {
37
+ try {
38
+ if (!existsSync(path))
39
+ return {};
40
+ return JSON.parse(readFileSync(path, "utf8"));
41
+ }
42
+ catch {
43
+ return {};
44
+ }
45
+ }
46
+ export function applyToConclave(repoRoot, input) {
47
+ if (!repoRoot)
48
+ return { ok: false, reason: "repoRoot required" };
49
+ const delta = computeWeightDelta(input);
50
+ if (delta.delta === 0)
51
+ return { ok: true, delta, reason: "no-op (INCONCLUSIVE)" };
52
+ try {
53
+ const dir = join(repoRoot, ".mneme");
54
+ if (!existsSync(dir))
55
+ mkdirSync(dir, { recursive: true });
56
+ const path = join(dir, "honest_mirror_weights.json");
57
+ const weights = readWeights(path);
58
+ const existing = weights[delta.targetVendor] ?? { weight: 1.0 };
59
+ // Clamp final weight to [0.20, 1.50]
60
+ const next = Math.max(0.20, Math.min(1.50, existing.weight + delta.delta));
61
+ weights[delta.targetVendor] = {
62
+ ...existing,
63
+ weight: next,
64
+ source: "nemesis",
65
+ updatedAt: new Date().toISOString(),
66
+ };
67
+ writeFileSync(path, JSON.stringify(weights, null, 2));
68
+ return { ok: true, delta, newWeight: next, weightsPath: path };
69
+ }
70
+ catch (e) {
71
+ return { ok: false, reason: e.message, delta };
72
+ }
73
+ }
74
+ //# sourceMappingURL=nemesis_to_conclave.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"nemesis_to_conclave.js","sourceRoot":"","sources":["../../src/nemesis/nemesis_to_conclave.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,38 @@
1
+ /**
2
+ * v2.48.0 — NEMESIS VENDOR RECONCILER (B4 fix).
3
+ *
4
+ * Two systems write a "vendor" field:
5
+ * 1. env_scan: reads CLAUDECODE / CURSOR_AGENT / ... env vars
6
+ * 2. cli-activity.jsonl: records the vendor active at MCP call time
7
+ *
8
+ * They diverge when:
9
+ * - Cursor user runs a Claude Code MCP tool in a side-terminal (env=cursor,
10
+ * activity=claude-code)
11
+ * - User pipes commands across sessions
12
+ * - Auto-init vs first AI handshake race
13
+ *
14
+ * NEMESIS treats env_scan as HIGHEST PRIORITY when its confidence ≥ 0.5
15
+ * (env vars are forge-resistant; activity logs can be retroactively
16
+ * edited or set by a misbehaving agent).
17
+ *
18
+ * Pure deterministic. Caller decides what to DO with the reconciled
19
+ * vendor (e.g. write it back to cli-activity ledger).
20
+ */
21
+ import type { VendorId } from "./types.js";
22
+ export interface ReconcileInput {
23
+ envVendor: string;
24
+ envConfidence: number;
25
+ activityVendor?: string;
26
+ }
27
+ export interface ReconcileVerdict {
28
+ /** Canonical vendor: what NEMESIS thinks the truth is. */
29
+ canonical: VendorId | string;
30
+ /** True when envVendor != activityVendor and both are non-unknown. */
31
+ divergent: boolean;
32
+ /** Which source was chosen. */
33
+ source: "env" | "activity" | "neither";
34
+ /** Optional reason string for audit trail. */
35
+ reason: string;
36
+ }
37
+ export declare function reconcileVendor(input: ReconcileInput): ReconcileVerdict;
38
+ //# sourceMappingURL=vendor_reconcile.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"vendor_reconcile.d.ts","sourceRoot":"","sources":["../../src/nemesis/vendor_reconcile.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;GAmBG;AAEH,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAE3C,MAAM,WAAW,cAAc;IAC7B,SAAS,EAAE,MAAM,CAAC;IAClB,aAAa,EAAE,MAAM,CAAC;IACtB,cAAc,CAAC,EAAE,MAAM,CAAC;CACzB;AAED,MAAM,WAAW,gBAAgB;IAC/B,0DAA0D;IAC1D,SAAS,EAAE,QAAQ,GAAG,MAAM,CAAC;IAC7B,sEAAsE;IACtE,SAAS,EAAE,OAAO,CAAC;IACnB,+BAA+B;IAC/B,MAAM,EAAE,KAAK,GAAG,UAAU,GAAG,SAAS,CAAC;IACvC,8CAA8C;IAC9C,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,wBAAgB,eAAe,CAAC,KAAK,EAAE,cAAc,GAAG,gBAAgB,CA8BvE"}
@@ -0,0 +1,50 @@
1
+ /**
2
+ * v2.48.0 — NEMESIS VENDOR RECONCILER (B4 fix).
3
+ *
4
+ * Two systems write a "vendor" field:
5
+ * 1. env_scan: reads CLAUDECODE / CURSOR_AGENT / ... env vars
6
+ * 2. cli-activity.jsonl: records the vendor active at MCP call time
7
+ *
8
+ * They diverge when:
9
+ * - Cursor user runs a Claude Code MCP tool in a side-terminal (env=cursor,
10
+ * activity=claude-code)
11
+ * - User pipes commands across sessions
12
+ * - Auto-init vs first AI handshake race
13
+ *
14
+ * NEMESIS treats env_scan as HIGHEST PRIORITY when its confidence ≥ 0.5
15
+ * (env vars are forge-resistant; activity logs can be retroactively
16
+ * edited or set by a misbehaving agent).
17
+ *
18
+ * Pure deterministic. Caller decides what to DO with the reconciled
19
+ * vendor (e.g. write it back to cli-activity ledger).
20
+ */
21
+ export function reconcileVendor(input) {
22
+ const env = (input.envVendor ?? "").trim();
23
+ const env_c = Number.isFinite(input.envConfidence) ? input.envConfidence : 0;
24
+ const act = (input.activityVendor ?? "").trim();
25
+ const envKnown = env && env !== "unknown";
26
+ const actKnown = act && act !== "unknown";
27
+ // Both unknown
28
+ if (!envKnown && !actKnown) {
29
+ return { canonical: "unknown", divergent: false, source: "neither", reason: "neither source reports a known vendor" };
30
+ }
31
+ // Only activity known
32
+ if (!envKnown && actKnown) {
33
+ return { canonical: act, divergent: false, source: "activity", reason: "env is unknown; using activity vendor" };
34
+ }
35
+ // Only env known
36
+ if (envKnown && !actKnown) {
37
+ return { canonical: env, divergent: false, source: "env", reason: "activity is unknown; using env vendor" };
38
+ }
39
+ // Both known + match
40
+ if (env === act) {
41
+ return { canonical: env, divergent: false, source: "env", reason: "env and activity agree" };
42
+ }
43
+ // Both known + diverge: env wins when its confidence ≥ 0.5
44
+ if (env_c >= 0.5) {
45
+ return { canonical: env, divergent: true, source: "env", reason: `env (${env}, conf ${env_c.toFixed(2)}) overrides activity (${act}) — env vars are forge-resistant` };
46
+ }
47
+ // Weak env evidence: trust activity
48
+ return { canonical: act, divergent: true, source: "activity", reason: `env confidence ${env_c.toFixed(2)} < 0.5; using activity vendor (${act})` };
49
+ }
50
+ //# sourceMappingURL=vendor_reconcile.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"vendor_reconcile.js","sourceRoot":"","sources":["../../src/nemesis/vendor_reconcile.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;GAmBG;AAqBH,MAAM,UAAU,eAAe,CAAC,KAAqB;IACnD,MAAM,GAAG,GAAG,CAAC,KAAK,CAAC,SAAS,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;IAC3C,MAAM,KAAK,GAAG,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,CAAC;IAC7E,MAAM,GAAG,GAAG,CAAC,KAAK,CAAC,cAAc,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;IAEhD,MAAM,QAAQ,GAAG,GAAG,IAAI,GAAG,KAAK,SAAS,CAAC;IAC1C,MAAM,QAAQ,GAAG,GAAG,IAAI,GAAG,KAAK,SAAS,CAAC;IAE1C,eAAe;IACf,IAAI,CAAC,QAAQ,IAAI,CAAC,QAAQ,EAAE,CAAC;QAC3B,OAAO,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE,KAAK,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,uCAAuC,EAAE,CAAC;IACxH,CAAC;IACD,sBAAsB;IACtB,IAAI,CAAC,QAAQ,IAAI,QAAQ,EAAE,CAAC;QAC1B,OAAO,EAAE,SAAS,EAAE,GAAG,EAAE,SAAS,EAAE,KAAK,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,uCAAuC,EAAE,CAAC;IACnH,CAAC;IACD,iBAAiB;IACjB,IAAI,QAAQ,IAAI,CAAC,QAAQ,EAAE,CAAC;QAC1B,OAAO,EAAE,SAAS,EAAE,GAAG,EAAE,SAAS,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,uCAAuC,EAAE,CAAC;IAC9G,CAAC;IACD,qBAAqB;IACrB,IAAI,GAAG,KAAK,GAAG,EAAE,CAAC;QAChB,OAAO,EAAE,SAAS,EAAE,GAAG,EAAE,SAAS,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,wBAAwB,EAAE,CAAC;IAC/F,CAAC;IACD,2DAA2D;IAC3D,IAAI,KAAK,IAAI,GAAG,EAAE,CAAC;QACjB,OAAO,EAAE,SAAS,EAAE,GAAG,EAAE,SAAS,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,QAAQ,GAAG,UAAU,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,yBAAyB,GAAG,kCAAkC,EAAE,CAAC;IACzK,CAAC;IACD,oCAAoC;IACpC,OAAO,EAAE,SAAS,EAAE,GAAG,EAAE,SAAS,EAAE,IAAI,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,kBAAkB,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,kCAAkC,GAAG,GAAG,EAAE,CAAC;AACrJ,CAAC"}
@@ -0,0 +1,56 @@
1
+ /**
2
+ * v2.48.0 — RELEASE GATE: MANDATORY probe-coverage check.
3
+ *
4
+ * Root-cause fix for "feature velocity > probe velocity" bug class.
5
+ * Pre-v2.48 pattern: new `mneme.<verb>.<sub>` tool ships in code,
6
+ * `chore(release)` tags the version, BUT no TRUTH GATE probe exists
7
+ * for the new tool. Result: bugs in the new feature slip through every
8
+ * release because no measurement binds the marketing claim to live
9
+ * behavior.
10
+ *
11
+ * This module provides a check that the release script (scripts/release.mjs)
12
+ * calls before allowing `git tag`. New tools in the agent_manifest catalog
13
+ * must EITHER have a matching `claim.<topic>` binding in CLAIM_CATALOG
14
+ * OR be on an explicit whitelist (read-only / informational / experimental).
15
+ */
16
+ export interface ProbeCoverageInput {
17
+ /** List of NEW tool names introduced in this release (e.g. from agent_manifest diff). */
18
+ newTools: string[];
19
+ /** Known claim IDs currently registered in the TRUTH GATE catalog. */
20
+ knownClaims: string[];
21
+ /** Override the whitelist (for tests). */
22
+ exemptOverride?: ReadonlySet<string>;
23
+ }
24
+ export interface ProbeCoverageResult {
25
+ ok: boolean;
26
+ /** Tools that have neither a matching claim nor exemption. */
27
+ uncovered: string[];
28
+ /** Tools that matched at least one claim. */
29
+ covered: Array<{
30
+ tool: string;
31
+ via: "claim" | "exempt";
32
+ }>;
33
+ /** Helpful next-step suggestion. */
34
+ hint: string;
35
+ }
36
+ /**
37
+ * Heuristic for matching tool → claim: extract the SECOND segment of
38
+ * the tool name (e.g. `mneme.nemesis.classify` → `nemesis`) and check
39
+ * if any claim id contains that key (e.g. `claim.nemesis.world_first`).
40
+ * Tools matching at least one claim are covered.
41
+ */
42
+ export declare function checkProbeCoverage(input: ProbeCoverageInput): ProbeCoverageResult;
43
+ /**
44
+ * Convenience: load the agent_manifest catalog + claim catalog from
45
+ * disk + run the check. Returns a structured envelope the release
46
+ * script can consume.
47
+ */
48
+ export interface CrossCheckResult {
49
+ ok: boolean;
50
+ totalTools: number;
51
+ totalClaims: number;
52
+ uncovered: string[];
53
+ hint: string;
54
+ }
55
+ export declare function crossCheckFromDisk(repoRoot: string): CrossCheckResult;
56
+ //# sourceMappingURL=probe_coverage.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"probe_coverage.d.ts","sourceRoot":"","sources":["../../src/release_gate/probe_coverage.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAmCH,MAAM,WAAW,kBAAkB;IACjC,yFAAyF;IACzF,QAAQ,EAAE,MAAM,EAAE,CAAC;IACnB,sEAAsE;IACtE,WAAW,EAAE,MAAM,EAAE,CAAC;IACtB,0CAA0C;IAC1C,cAAc,CAAC,EAAE,WAAW,CAAC,MAAM,CAAC,CAAC;CACtC;AAED,MAAM,WAAW,mBAAmB;IAClC,EAAE,EAAE,OAAO,CAAC;IACZ,8DAA8D;IAC9D,SAAS,EAAE,MAAM,EAAE,CAAC;IACpB,6CAA6C;IAC7C,OAAO,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,GAAG,EAAE,OAAO,GAAG,QAAQ,CAAA;KAAE,CAAC,CAAC;IAC1D,oCAAoC;IACpC,IAAI,EAAE,MAAM,CAAC;CACd;AAED;;;;;GAKG;AACH,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,kBAAkB,GAAG,mBAAmB,CA6BjF;AAED;;;;GAIG;AACH,MAAM,WAAW,gBAAgB;IAC/B,EAAE,EAAE,OAAO,CAAC;IACZ,UAAU,EAAE,MAAM,CAAC;IACnB,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,EAAE,MAAM,EAAE,CAAC;IACpB,IAAI,EAAE,MAAM,CAAC;CACd;AAED,wBAAgB,kBAAkB,CAAC,QAAQ,EAAE,MAAM,GAAG,gBAAgB,CA2BrE"}
@@ -0,0 +1,116 @@
1
+ /**
2
+ * v2.48.0 — RELEASE GATE: MANDATORY probe-coverage check.
3
+ *
4
+ * Root-cause fix for "feature velocity > probe velocity" bug class.
5
+ * Pre-v2.48 pattern: new `mneme.<verb>.<sub>` tool ships in code,
6
+ * `chore(release)` tags the version, BUT no TRUTH GATE probe exists
7
+ * for the new tool. Result: bugs in the new feature slip through every
8
+ * release because no measurement binds the marketing claim to live
9
+ * behavior.
10
+ *
11
+ * This module provides a check that the release script (scripts/release.mjs)
12
+ * calls before allowing `git tag`. New tools in the agent_manifest catalog
13
+ * must EITHER have a matching `claim.<topic>` binding in CLAIM_CATALOG
14
+ * OR be on an explicit whitelist (read-only / informational / experimental).
15
+ */
16
+ import { existsSync, readFileSync } from "node:fs";
17
+ import { join } from "node:path";
18
+ // Whitelist of tools that are EXEMPT from probe-coverage (read-only /
19
+ // trivially safe / experimental). New tools should AVOID this list;
20
+ // it's the escape hatch, not the default.
21
+ const COVERAGE_EXEMPT = new Set([
22
+ "mneme.welcome",
23
+ "mneme.capabilities",
24
+ "mneme.release_notes",
25
+ "mneme.version",
26
+ "mneme.health",
27
+ "mneme.verify_self",
28
+ "mneme.system.health",
29
+ "mneme.system.upgrade",
30
+ "mneme.system.bootstrap",
31
+ "mneme.system.cleanse_history",
32
+ // Trivially-pure helpers
33
+ "mneme.nemesis.fingerprint",
34
+ "mneme.nemesis.env_scan",
35
+ "mneme.nemesis.calibration_status",
36
+ "mneme.nemesis.detect_tooling",
37
+ "mneme.nemesis.verify_stamp",
38
+ "mneme.nemesis.eu_stamp",
39
+ "mneme.nemesis.install_hook",
40
+ "mneme.nemesis.drift_check",
41
+ "mneme.nemesis.replay_check",
42
+ "mneme.argus.eyes",
43
+ "mneme.argus.adapters",
44
+ "mneme.argus.hydra",
45
+ "mneme.argus.verify",
46
+ ]);
47
+ /**
48
+ * Heuristic for matching tool → claim: extract the SECOND segment of
49
+ * the tool name (e.g. `mneme.nemesis.classify` → `nemesis`) and check
50
+ * if any claim id contains that key (e.g. `claim.nemesis.world_first`).
51
+ * Tools matching at least one claim are covered.
52
+ */
53
+ export function checkProbeCoverage(input) {
54
+ const exempt = input.exemptOverride ?? COVERAGE_EXEMPT;
55
+ const claims = input.knownClaims ?? [];
56
+ const covered = [];
57
+ const uncovered = [];
58
+ for (const tool of input.newTools) {
59
+ if (exempt.has(tool)) {
60
+ covered.push({ tool, via: "exempt" });
61
+ continue;
62
+ }
63
+ const seg = tool.split(".")[1] ?? "";
64
+ if (!seg) {
65
+ uncovered.push(tool);
66
+ continue;
67
+ }
68
+ // Match: any claim id contains the segment.
69
+ const hit = claims.some((c) => c.toLowerCase().includes(seg.toLowerCase()));
70
+ if (hit)
71
+ covered.push({ tool, via: "claim" });
72
+ else
73
+ uncovered.push(tool);
74
+ }
75
+ const ok = uncovered.length === 0;
76
+ return {
77
+ ok,
78
+ uncovered,
79
+ covered,
80
+ hint: ok
81
+ ? "all new tools have probe coverage"
82
+ : `${uncovered.length} new tool(s) lack TRUTH GATE probe binding. Either: (a) add a probe.<topic> + claim.<topic> to packages/core/src/truth_gate/{probes,claims}.ts, or (b) add the tool to COVERAGE_EXEMPT in packages/core/src/release_gate/probe_coverage.ts with a written justification.`,
83
+ };
84
+ }
85
+ export function crossCheckFromDisk(repoRoot) {
86
+ try {
87
+ const manifestPath = join(repoRoot, "packages", "core", "src", "agent_manifest.ts");
88
+ const claimsPath = join(repoRoot, "packages", "core", "src", "truth_gate", "claims.ts");
89
+ if (!existsSync(manifestPath) || !existsSync(claimsPath)) {
90
+ return { ok: true, totalTools: 0, totalClaims: 0, uncovered: [], hint: "release-gate skipped: source files missing" };
91
+ }
92
+ const manifestBody = readFileSync(manifestPath, "utf8");
93
+ const claimsBody = readFileSync(claimsPath, "utf8");
94
+ // Extract tool names: `command: "mneme <verb> ..."` AND `name: "mneme.<verb>.<sub>"` from MCP tool files.
95
+ const toolMatches = manifestBody.match(/command:\s*["']mneme\s+([a-z_][a-z0-9_]*)\s+([a-z_][a-z0-9_]*)/gi) ?? [];
96
+ const tools = new Set();
97
+ for (const m of toolMatches) {
98
+ const inner = m.match(/mneme\s+([a-z_][a-z0-9_]*)\s+([a-z_][a-z0-9_]*)/i);
99
+ if (inner)
100
+ tools.add(`mneme.${inner[1]}.${inner[2]}`);
101
+ }
102
+ const claimMatches = claimsBody.match(/id:\s*["'](claim\.[a-z0-9_.]+)["']/gi) ?? [];
103
+ const claims = [];
104
+ for (const m of claimMatches) {
105
+ const inner = m.match(/(claim\.[a-z0-9_.]+)/i);
106
+ if (inner)
107
+ claims.push(inner[1]);
108
+ }
109
+ const r = checkProbeCoverage({ newTools: Array.from(tools), knownClaims: claims });
110
+ return { ok: r.ok, totalTools: tools.size, totalClaims: claims.length, uncovered: r.uncovered, hint: r.hint };
111
+ }
112
+ catch (e) {
113
+ return { ok: true, totalTools: 0, totalClaims: 0, uncovered: [], hint: `release-gate skipped: ${e.message}` };
114
+ }
115
+ }
116
+ //# sourceMappingURL=probe_coverage.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"probe_coverage.js","sourceRoot":"","sources":["../../src/release_gate/probe_coverage.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"claims.d.ts","sourceRoot":"","sources":["../../src/truth_gate/claims.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AAEH,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AAExC,eAAO,MAAM,aAAa,EAAE,aAAa,CAAC,KAAK,CA+N9C,CAAC"}
1
+ {"version":3,"file":"claims.d.ts","sourceRoot":"","sources":["../../src/truth_gate/claims.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AAEH,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AAExC,eAAO,MAAM,aAAa,EAAE,aAAa,CAAC,KAAK,CA8O9C,CAAC"}
@@ -206,6 +206,21 @@ export const CLAIM_CATALOG = [
206
206
  probeId: "probe.nemesis.world_first_agent_fingerprinter",
207
207
  severity: "block",
208
208
  },
209
+ // ── v2.48.0 — NEMESIS classify accuracy on REAL (held-out) corpus ───
210
+ // F7 from v2.47 audit: pre-v2.48 the only accuracy probe ran on the
211
+ // SEED corpus (100% by construction). Real-world bugs (B1: header-less
212
+ // diff) slipped through because seed always had headers. This new
213
+ // probe runs a 7-fixture held-out corpus with header-less + naturalistic
214
+ // variation; requires ≥85% accuracy. Severity=block → drift breaks tag.
215
+ {
216
+ id: "claim.nemesis.real_accuracy_85",
217
+ source: "v2.48.0 release notes",
218
+ text: "NEMESIS calibrated classifier achieves ≥85% accuracy on a HELD-OUT real-corpus-shaped fixture set (header-less diffs + natural variation) — not just the seed corpus",
219
+ kind: "numeric",
220
+ asserted: { value: 1, op: "=", unit: "boolean" },
221
+ probeId: "probe.nemesis.classify_accuracy_real_corpus",
222
+ severity: "block",
223
+ },
209
224
  // ── v2.45.0 — AUTO-INIT zero-command-install self-verify ────────────
210
225
  {
211
226
  id: "claim.auto_init.zero_command",
@@ -1 +1 @@
1
- {"version":3,"file":"claims.js","sourceRoot":"","sources":["../../src/truth_gate/claims.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"claims.js","sourceRoot":"","sources":["../../src/truth_gate/claims.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"probes.d.ts","sourceRoot":"","sources":["../../src/truth_gate/probes.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAKH,OAAO,KAAK,EAAE,KAAK,EAAE,YAAY,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAmwBnE,eAAO,MAAM,UAAU,EAAE,aAAa,CAAC,KAAK,CAAU,CAAC;AAEvD,wBAAgB,SAAS,CAAC,EAAE,EAAE,MAAM,GAAG,KAAK,GAAG,SAAS,CAEvD;AAED,wBAAsB,QAAQ,CAAC,EAAE,EAAE,MAAM,EAAE,GAAG,EAAE,YAAY,GAAG,OAAO,CAAC,WAAW,CAAC,CAQlF"}
1
+ {"version":3,"file":"probes.d.ts","sourceRoot":"","sources":["../../src/truth_gate/probes.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAKH,OAAO,KAAK,EAAE,KAAK,EAAE,YAAY,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAszBnE,eAAO,MAAM,UAAU,EAAE,aAAa,CAAC,KAAK,CAAU,CAAC;AAEvD,wBAAgB,SAAS,CAAC,EAAE,EAAE,MAAM,GAAG,KAAK,GAAG,SAAS,CAEvD;AAED,wBAAsB,QAAQ,CAAC,EAAE,EAAE,MAAM,EAAE,GAAG,EAAE,YAAY,GAAG,OAAO,CAAC,WAAW,CAAC,CAQlF"}
@@ -602,6 +602,58 @@ const probes = [
602
602
  }
603
603
  },
604
604
  },
605
+ // ── NEMESIS real-corpus classify accuracy probe (v2.48.0 F7) ─────────
606
+ // Runs the CALIBRATED classifier against a held-out "real-corpus-shaped"
607
+ // fixture set + asserts ≥85% accuracy. This corpus uses HEADER-LESS
608
+ // diffs + naturalistic variations to catch the v2.47 B1 root cause
609
+ // (no-header parser failure → conditional_density=0 → wrong vendor).
610
+ {
611
+ id: "probe.nemesis.classify_accuracy_real_corpus",
612
+ kind: "numeric",
613
+ description: "1 when CALIBRATED classifier achieves ≥85% accuracy on a HELD-OUT real-corpus-shaped fixture set (header-less diffs + natural language variation). 0 on accuracy drop.",
614
+ run: async () => {
615
+ try {
616
+ const m = await import("../nemesis/index.js");
617
+ // Held-out corpus: each fixture deliberately differs from seed
618
+ // (header-less + different commit lengths + varied wording).
619
+ // The accuracy bar is 85% — strict but achievable given v2.48
620
+ // universal diff parser fix.
621
+ const fixtures = [
622
+ // Claude — header-less, 7 ifs, single short commit
623
+ { expected: "claude-code", diff: "+export function classify(x) {\n+ if (a) return 1;\n+ if (b) return 2;\n+ if (c) return 3;\n+ if (d) return 4;\n+ if (e) return 5;\n+ if (f) return 6;\n+ if (g) return 7;\n+ return null;\n+}\n", prDescription: "Branching helper.", commitMessages: ["classify: route input by shape"] },
624
+ // Claude — diff-git header, 8 ifs
625
+ { expected: "claude-code", diff: "diff --git a/x.ts b/x.ts\n+if (a) return 1;\n+if (b) return 2;\n+if (c) return 3;\n+if (d) return 4;\n+if (e) return 5;\n+if (f) return 6;\n+if (g) return 7;\n+if (h) return 8;\n", prDescription: "Multiple guards.", commitMessages: ["add guards"] },
626
+ // Cursor — bullets + links
627
+ { expected: "cursor", diff: "+const x = 1;\n", prDescription: "## Changes\n- a\n- b\n- c\n- [d](https://a)\n- [e](https://b)\n- [f](https://c)\n", commitMessages: ["add const x"] },
628
+ // Cursor — different bullet count
629
+ { expected: "cursor", diff: "+const y = 2;\n", prDescription: "## Changes\n- one\n- two\n- three\n- four\n- [doc1](https://x)\n- [doc2](https://y)\n- [doc3](https://z)\n- [doc4](https://w)\n", commitMessages: ["add const y"] },
630
+ // Devin — 8 files distributed
631
+ { expected: "devin", diff: ["+const a=1;", "diff --git a/b.ts b/b.ts", "+const b=2;", "diff --git a/c.ts b/c.ts", "+const c=3;", "diff --git a/d.ts b/d.ts", "+const d=4;", "diff --git a/e.ts b/e.ts", "+const e=5;", "diff --git a/f.ts b/f.ts", "+const f=6;", "diff --git a/g.ts b/g.ts", "+const g=7;", "diff --git a/h.ts b/h.ts", "+const h=8;"].join("\n"), prDescription: "Refactor.", commitMessages: ["refactor a\n- update\n- adjust\n- remove", "refactor b\n- update\n- adjust\n- remove", "refactor c\n- update\n- adjust\n- remove"] },
632
+ // Copilot — 1 file + very long PR
633
+ { expected: "copilot", diff: "diff --git a/single.py b/single.py\n+def a(): pass\n+def b(): pass\n+def c(): pass\n+def d(): pass\n+def e(): pass\n", prDescription: "This pull request introduces multiple helper functions to the single.py module. ".repeat(15), commitMessages: ["add helpers"] },
634
+ // Codex — short PR + multiline bullet commits
635
+ { expected: "codex", diff: "diff --git a/x.js b/x.js\n+function foo(x) { return x; }\n", prDescription: "Add foo.", commitMessages: ["feat: foo\n- a\n- b\n- c\n- d", "fix: tweak\n- e\n- f\n- g"] },
636
+ ];
637
+ let correct = 0;
638
+ for (const f of fixtures) {
639
+ const fp = m.extractFingerprint({ diff: f.diff, prDescription: f.prDescription, commitMessages: f.commitMessages });
640
+ const v = m.classifyAgentCalibrated(fp);
641
+ if (v.topVendor === f.expected)
642
+ correct++;
643
+ }
644
+ const accuracy = correct / fixtures.length;
645
+ const ok = accuracy >= 0.85;
646
+ return {
647
+ value: ok ? 1 : 0,
648
+ evidence: ok ? `real-corpus accuracy ${correct}/${fixtures.length} = ${(accuracy * 100).toFixed(0)}% ≥ 85%` : `real-corpus accuracy ${correct}/${fixtures.length} = ${(accuracy * 100).toFixed(0)}% < 85%`,
649
+ detail: { correct, total: fixtures.length, accuracy },
650
+ };
651
+ }
652
+ catch (e) {
653
+ return { value: null, evidence: `probe threw: ${e.message}` };
654
+ }
655
+ },
656
+ },
605
657
  // ── AUTO-INIT zero-command-install probe (v2.45.0) ───────────────────
606
658
  //
607
659
  // Marketing claim: "Mneme bootstraps on first MCP tool call — user