@mneme-ai/core 2.46.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.
- package/dist/index.d.ts +1 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +4 -0
- package/dist/index.js.map +1 -1
- package/dist/nemesis/calibration_corpus.d.ts +40 -0
- package/dist/nemesis/calibration_corpus.d.ts.map +1 -0
- package/dist/nemesis/calibration_corpus.js +148 -0
- package/dist/nemesis/calibration_corpus.js.map +1 -0
- package/dist/nemesis/classifier_calibrated.d.ts +48 -0
- package/dist/nemesis/classifier_calibrated.d.ts.map +1 -0
- package/dist/nemesis/classifier_calibrated.js +185 -0
- package/dist/nemesis/classifier_calibrated.js.map +1 -0
- package/dist/nemesis/eu_ai_act_stamp.d.ts +1 -0
- package/dist/nemesis/eu_ai_act_stamp.d.ts.map +1 -1
- package/dist/nemesis/eu_ai_act_stamp.js +25 -4
- package/dist/nemesis/eu_ai_act_stamp.js.map +1 -1
- package/dist/nemesis/features.d.ts.map +1 -1
- package/dist/nemesis/features.js +54 -10
- package/dist/nemesis/features.js.map +1 -1
- package/dist/nemesis/index.d.ts +6 -0
- package/dist/nemesis/index.d.ts.map +1 -1
- package/dist/nemesis/index.js +9 -0
- package/dist/nemesis/index.js.map +1 -1
- package/dist/nemesis/key_management.d.ts +30 -0
- package/dist/nemesis/key_management.d.ts.map +1 -0
- package/dist/nemesis/key_management.js +91 -0
- package/dist/nemesis/key_management.js.map +1 -0
- package/dist/nemesis/learning_loop.d.ts +45 -0
- package/dist/nemesis/learning_loop.d.ts.map +1 -0
- package/dist/nemesis/learning_loop.js +116 -0
- package/dist/nemesis/learning_loop.js.map +1 -0
- package/dist/nemesis/nemesis_to_conclave.d.ts +42 -0
- package/dist/nemesis/nemesis_to_conclave.d.ts.map +1 -0
- package/dist/nemesis/nemesis_to_conclave.js +74 -0
- package/dist/nemesis/nemesis_to_conclave.js.map +1 -0
- package/dist/nemesis/vendor_reconcile.d.ts +38 -0
- package/dist/nemesis/vendor_reconcile.d.ts.map +1 -0
- package/dist/nemesis/vendor_reconcile.js +50 -0
- package/dist/nemesis/vendor_reconcile.js.map +1 -0
- package/dist/release_gate/probe_coverage.d.ts +56 -0
- package/dist/release_gate/probe_coverage.d.ts.map +1 -0
- package/dist/release_gate/probe_coverage.js +116 -0
- package/dist/release_gate/probe_coverage.js.map +1 -0
- package/dist/truth_gate/claims.d.ts.map +1 -1
- package/dist/truth_gate/claims.js +15 -0
- package/dist/truth_gate/claims.js.map +1 -1
- package/dist/truth_gate/probes.d.ts.map +1 -1
- package/dist/truth_gate/probes.js +62 -1
- package/dist/truth_gate/probes.js.map +1 -1
- package/package.json +1 -1
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* v2.47.0 — NEMESIS SELF-CALIBRATING LEARNING LOOP.
|
|
3
|
+
*
|
|
4
|
+
* Wild idea no other agent-fingerprinter has: every CONFIRMED identity
|
|
5
|
+
* verdict appends the fixture to a per-repo calibration ledger; the
|
|
6
|
+
* classifier periodically recomputes stats from (seed + ledger) so the
|
|
7
|
+
* detector improves forever from real-world usage.
|
|
8
|
+
*
|
|
9
|
+
* Academic paper: trained once on 33,580 PRs, frozen.
|
|
10
|
+
* NEMESIS: starts at ≥95% on seed corpus + improves every CONFIRMED
|
|
11
|
+
* verdict for the rest of the install's life.
|
|
12
|
+
*
|
|
13
|
+
* Privacy: ledger lives ONLY in `.mneme/nemesis/calibration-ledger.jsonl`
|
|
14
|
+
* (local-first). Opt-in via env var `MNEME_NEMESIS_LEARN=1` (default
|
|
15
|
+
* OFF — user must explicitly enable to avoid silent data accumulation).
|
|
16
|
+
*
|
|
17
|
+
* Defensive: never throws; ledger cap 1000 rows.
|
|
18
|
+
*/
|
|
19
|
+
import type { CorpusEntry, VendorStats } from "./calibration_corpus.js";
|
|
20
|
+
import type { Fixture, VendorId } from "./types.js";
|
|
21
|
+
export interface AppendResult {
|
|
22
|
+
ok: boolean;
|
|
23
|
+
reason?: string;
|
|
24
|
+
appended: boolean;
|
|
25
|
+
/** Reason for skip (user not opted in / verdict not CONFIRMED). */
|
|
26
|
+
skipReason?: string;
|
|
27
|
+
}
|
|
28
|
+
/**
|
|
29
|
+
* Append a CONFIRMED-verdict fixture to the calibration ledger.
|
|
30
|
+
* No-ops when MNEME_NEMESIS_LEARN is not set.
|
|
31
|
+
*/
|
|
32
|
+
export declare function appendCalibrationEntry(repoRoot: string, vendor: VendorId, fixture: Fixture): AppendResult;
|
|
33
|
+
export declare function readCalibrationLedger(repoRoot: string): CorpusEntry[];
|
|
34
|
+
/** Recompute per-vendor stats from (seed corpus + repo ledger). */
|
|
35
|
+
export declare function recomputeStats(repoRoot: string): Map<VendorId, VendorStats>;
|
|
36
|
+
export interface CalibrationStatus {
|
|
37
|
+
learnEnabled: boolean;
|
|
38
|
+
seedCount: number;
|
|
39
|
+
ledgerCount: number;
|
|
40
|
+
totalCount: number;
|
|
41
|
+
perVendor: Partial<Record<VendorId, number>>;
|
|
42
|
+
ledgerPath: string;
|
|
43
|
+
}
|
|
44
|
+
export declare function calibrationStatus(repoRoot: string): CalibrationStatus;
|
|
45
|
+
//# sourceMappingURL=learning_loop.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"learning_loop.d.ts","sourceRoot":"","sources":["../../src/nemesis/learning_loop.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AAIH,OAAO,KAAK,EAAE,WAAW,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAC;AACxE,OAAO,KAAK,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAmBpD,MAAM,WAAW,YAAY;IAC3B,EAAE,EAAE,OAAO,CAAC;IACZ,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,OAAO,CAAC;IAClB,mEAAmE;IACnE,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED;;;GAGG;AACH,wBAAgB,sBAAsB,CACpC,QAAQ,EAAE,MAAM,EAChB,MAAM,EAAE,QAAQ,EAChB,OAAO,EAAE,OAAO,GACf,YAAY,CA0Bd;AAED,wBAAgB,qBAAqB,CAAC,QAAQ,EAAE,MAAM,GAAG,WAAW,EAAE,CAerE;AAED,mEAAmE;AACnE,wBAAgB,cAAc,CAAC,QAAQ,EAAE,MAAM,GAAG,GAAG,CAAC,QAAQ,EAAE,WAAW,CAAC,CAI3E;AAED,MAAM,WAAW,iBAAiB;IAChC,YAAY,EAAE,OAAO,CAAC;IACtB,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,EAAE,MAAM,CAAC;IACpB,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,EAAE,OAAO,CAAC,MAAM,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC,CAAC;IAC7C,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,wBAAgB,iBAAiB,CAAC,QAAQ,EAAE,MAAM,GAAG,iBAAiB,CAerE"}
|
|
@@ -0,0 +1,116 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* v2.47.0 — NEMESIS SELF-CALIBRATING LEARNING LOOP.
|
|
3
|
+
*
|
|
4
|
+
* Wild idea no other agent-fingerprinter has: every CONFIRMED identity
|
|
5
|
+
* verdict appends the fixture to a per-repo calibration ledger; the
|
|
6
|
+
* classifier periodically recomputes stats from (seed + ledger) so the
|
|
7
|
+
* detector improves forever from real-world usage.
|
|
8
|
+
*
|
|
9
|
+
* Academic paper: trained once on 33,580 PRs, frozen.
|
|
10
|
+
* NEMESIS: starts at ≥95% on seed corpus + improves every CONFIRMED
|
|
11
|
+
* verdict for the rest of the install's life.
|
|
12
|
+
*
|
|
13
|
+
* Privacy: ledger lives ONLY in `.mneme/nemesis/calibration-ledger.jsonl`
|
|
14
|
+
* (local-first). Opt-in via env var `MNEME_NEMESIS_LEARN=1` (default
|
|
15
|
+
* OFF — user must explicitly enable to avoid silent data accumulation).
|
|
16
|
+
*
|
|
17
|
+
* Defensive: never throws; ledger cap 1000 rows.
|
|
18
|
+
*/
|
|
19
|
+
import { existsSync, mkdirSync, readFileSync, writeFileSync, appendFileSync } from "node:fs";
|
|
20
|
+
import { join } from "node:path";
|
|
21
|
+
import { buildSeedCorpus, computeStats } from "./calibration_corpus.js";
|
|
22
|
+
const LEDGER_CAP = 1000;
|
|
23
|
+
function isLearnEnabled() {
|
|
24
|
+
return process.env["MNEME_NEMESIS_LEARN"] === "1" || process.env["MNEME_NEMESIS_LEARN"] === "true";
|
|
25
|
+
}
|
|
26
|
+
function dirOf(repoRoot) {
|
|
27
|
+
const dir = join(repoRoot, ".mneme", "nemesis");
|
|
28
|
+
try {
|
|
29
|
+
if (!existsSync(dir))
|
|
30
|
+
mkdirSync(dir, { recursive: true });
|
|
31
|
+
}
|
|
32
|
+
catch { /* */ }
|
|
33
|
+
return dir;
|
|
34
|
+
}
|
|
35
|
+
function ledgerPath(repoRoot) {
|
|
36
|
+
return join(dirOf(repoRoot), "calibration-ledger.jsonl");
|
|
37
|
+
}
|
|
38
|
+
/**
|
|
39
|
+
* Append a CONFIRMED-verdict fixture to the calibration ledger.
|
|
40
|
+
* No-ops when MNEME_NEMESIS_LEARN is not set.
|
|
41
|
+
*/
|
|
42
|
+
export function appendCalibrationEntry(repoRoot, vendor, fixture) {
|
|
43
|
+
if (!isLearnEnabled()) {
|
|
44
|
+
return { ok: true, appended: false, skipReason: "MNEME_NEMESIS_LEARN not enabled (opt-in only)" };
|
|
45
|
+
}
|
|
46
|
+
if (!vendor || vendor === "unknown") {
|
|
47
|
+
return { ok: true, appended: false, skipReason: "vendor missing or unknown" };
|
|
48
|
+
}
|
|
49
|
+
try {
|
|
50
|
+
const path = ledgerPath(repoRoot);
|
|
51
|
+
// Roll the ledger if it's at cap.
|
|
52
|
+
if (existsSync(path)) {
|
|
53
|
+
try {
|
|
54
|
+
const body = readFileSync(path, "utf8");
|
|
55
|
+
const lines = body.split("\n").filter(Boolean);
|
|
56
|
+
if (lines.length >= LEDGER_CAP) {
|
|
57
|
+
const trimmed = lines.slice(-(LEDGER_CAP - 1));
|
|
58
|
+
writeFileSync(path, trimmed.join("\n") + "\n");
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
catch { /* */ }
|
|
62
|
+
}
|
|
63
|
+
const entry = { at: new Date().toISOString(), vendor, fixture };
|
|
64
|
+
appendFileSync(path, JSON.stringify(entry) + "\n");
|
|
65
|
+
return { ok: true, appended: true };
|
|
66
|
+
}
|
|
67
|
+
catch (e) {
|
|
68
|
+
return { ok: false, reason: e.message, appended: false };
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
export function readCalibrationLedger(repoRoot) {
|
|
72
|
+
try {
|
|
73
|
+
const path = ledgerPath(repoRoot);
|
|
74
|
+
if (!existsSync(path))
|
|
75
|
+
return [];
|
|
76
|
+
const body = readFileSync(path, "utf8");
|
|
77
|
+
const out = [];
|
|
78
|
+
for (const ln of body.split("\n")) {
|
|
79
|
+
if (!ln.trim())
|
|
80
|
+
continue;
|
|
81
|
+
try {
|
|
82
|
+
const j = JSON.parse(ln);
|
|
83
|
+
if (j && j.vendor && j.fixture)
|
|
84
|
+
out.push({ vendor: j.vendor, fixture: j.fixture });
|
|
85
|
+
}
|
|
86
|
+
catch { /* skip */ }
|
|
87
|
+
}
|
|
88
|
+
return out;
|
|
89
|
+
}
|
|
90
|
+
catch {
|
|
91
|
+
return [];
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
/** Recompute per-vendor stats from (seed corpus + repo ledger). */
|
|
95
|
+
export function recomputeStats(repoRoot) {
|
|
96
|
+
const seed = buildSeedCorpus();
|
|
97
|
+
const learned = readCalibrationLedger(repoRoot);
|
|
98
|
+
return computeStats([...seed, ...learned]);
|
|
99
|
+
}
|
|
100
|
+
export function calibrationStatus(repoRoot) {
|
|
101
|
+
const seed = buildSeedCorpus();
|
|
102
|
+
const learned = readCalibrationLedger(repoRoot);
|
|
103
|
+
const perVendor = {};
|
|
104
|
+
for (const e of [...seed, ...learned]) {
|
|
105
|
+
perVendor[e.vendor] = (perVendor[e.vendor] ?? 0) + 1;
|
|
106
|
+
}
|
|
107
|
+
return {
|
|
108
|
+
learnEnabled: isLearnEnabled(),
|
|
109
|
+
seedCount: seed.length,
|
|
110
|
+
ledgerCount: learned.length,
|
|
111
|
+
totalCount: seed.length + learned.length,
|
|
112
|
+
perVendor,
|
|
113
|
+
ledgerPath: ledgerPath(repoRoot),
|
|
114
|
+
};
|
|
115
|
+
}
|
|
116
|
+
//# sourceMappingURL=learning_loop.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"learning_loop.js","sourceRoot":"","sources":["../../src/nemesis/learning_loop.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AAEH,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,YAAY,EAAE,aAAa,EAAE,cAAc,EAAE,MAAM,SAAS,CAAC;AAC7F,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAGjC,OAAO,EAAE,eAAe,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAC;AAExE,MAAM,UAAU,GAAG,IAAI,CAAC;AAExB,SAAS,cAAc;IACrB,OAAO,OAAO,CAAC,GAAG,CAAC,qBAAqB,CAAC,KAAK,GAAG,IAAI,OAAO,CAAC,GAAG,CAAC,qBAAqB,CAAC,KAAK,MAAM,CAAC;AACrG,CAAC;AAED,SAAS,KAAK,CAAC,QAAgB;IAC7B,MAAM,GAAG,GAAG,IAAI,CAAC,QAAQ,EAAE,QAAQ,EAAE,SAAS,CAAC,CAAC;IAChD,IAAI,CAAC;QAAC,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC;YAAE,SAAS,CAAC,GAAG,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAAC,CAAC;IAAC,MAAM,CAAC,CAAC,KAAK,CAAC,CAAC;IAClF,OAAO,GAAG,CAAC;AACb,CAAC;AAED,SAAS,UAAU,CAAC,QAAgB;IAClC,OAAO,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,EAAE,0BAA0B,CAAC,CAAC;AAC3D,CAAC;AAUD;;;GAGG;AACH,MAAM,UAAU,sBAAsB,CACpC,QAAgB,EAChB,MAAgB,EAChB,OAAgB;IAEhB,IAAI,CAAC,cAAc,EAAE,EAAE,CAAC;QACtB,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,UAAU,EAAE,+CAA+C,EAAE,CAAC;IACpG,CAAC;IACD,IAAI,CAAC,MAAM,IAAI,MAAM,KAAK,SAAS,EAAE,CAAC;QACpC,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,UAAU,EAAE,2BAA2B,EAAE,CAAC;IAChF,CAAC;IACD,IAAI,CAAC;QACH,MAAM,IAAI,GAAG,UAAU,CAAC,QAAQ,CAAC,CAAC;QAClC,kCAAkC;QAClC,IAAI,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC;YACrB,IAAI,CAAC;gBACH,MAAM,IAAI,GAAG,YAAY,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;gBACxC,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;gBAC/C,IAAI,KAAK,CAAC,MAAM,IAAI,UAAU,EAAE,CAAC;oBAC/B,MAAM,OAAO,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,UAAU,GAAG,CAAC,CAAC,CAAC,CAAC;oBAC/C,aAAa,CAAC,IAAI,EAAE,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,CAAC;gBACjD,CAAC;YACH,CAAC;YAAC,MAAM,CAAC,CAAC,KAAK,CAAC,CAAC;QACnB,CAAC;QACD,MAAM,KAAK,GAAG,EAAE,EAAE,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC;QAChE,cAAc,CAAC,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC,CAAC;QACnD,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;IACtC,CAAC;IAAC,OAAO,CAAC,EAAE,CAAC;QACX,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,MAAM,EAAG,CAAW,CAAC,OAAO,EAAE,QAAQ,EAAE,KAAK,EAAE,CAAC;IACtE,CAAC;AACH,CAAC;AAED,MAAM,UAAU,qBAAqB,CAAC,QAAgB;IACpD,IAAI,CAAC;QACH,MAAM,IAAI,GAAG,UAAU,CAAC,QAAQ,CAAC,CAAC;QAClC,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC;YAAE,OAAO,EAAE,CAAC;QACjC,MAAM,IAAI,GAAG,YAAY,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;QACxC,MAAM,GAAG,GAAkB,EAAE,CAAC;QAC9B,KAAK,MAAM,EAAE,IAAI,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC;YAClC,IAAI,CAAC,EAAE,CAAC,IAAI,EAAE;gBAAE,SAAS;YACzB,IAAI,CAAC;gBACH,MAAM,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,EAAE,CAAgB,CAAC;gBACxC,IAAI,CAAC,IAAI,CAAC,CAAC,MAAM,IAAI,CAAC,CAAC,OAAO;oBAAE,GAAG,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,OAAO,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC;YACrF,CAAC;YAAC,MAAM,CAAC,CAAC,UAAU,CAAC,CAAC;QACxB,CAAC;QACD,OAAO,GAAG,CAAC;IACb,CAAC;IAAC,MAAM,CAAC;QAAC,OAAO,EAAE,CAAC;IAAC,CAAC;AACxB,CAAC;AAED,mEAAmE;AACnE,MAAM,UAAU,cAAc,CAAC,QAAgB;IAC7C,MAAM,IAAI,GAAG,eAAe,EAAE,CAAC;IAC/B,MAAM,OAAO,GAAG,qBAAqB,CAAC,QAAQ,CAAC,CAAC;IAChD,OAAO,YAAY,CAAC,CAAC,GAAG,IAAI,EAAE,GAAG,OAAO,CAAC,CAAC,CAAC;AAC7C,CAAC;AAWD,MAAM,UAAU,iBAAiB,CAAC,QAAgB;IAChD,MAAM,IAAI,GAAG,eAAe,EAAE,CAAC;IAC/B,MAAM,OAAO,GAAG,qBAAqB,CAAC,QAAQ,CAAC,CAAC;IAChD,MAAM,SAAS,GAAsC,EAAE,CAAC;IACxD,KAAK,MAAM,CAAC,IAAI,CAAC,GAAG,IAAI,EAAE,GAAG,OAAO,CAAC,EAAE,CAAC;QACtC,SAAS,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC;IACvD,CAAC;IACD,OAAO;QACL,YAAY,EAAE,cAAc,EAAE;QAC9B,SAAS,EAAE,IAAI,CAAC,MAAM;QACtB,WAAW,EAAE,OAAO,CAAC,MAAM;QAC3B,UAAU,EAAE,IAAI,CAAC,MAAM,GAAG,OAAO,CAAC,MAAM;QACxC,SAAS;QACT,UAAU,EAAE,UAAU,CAAC,QAAQ,CAAC;KACjC,CAAC;AACJ,CAAC"}
|
|
@@ -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,
|
|
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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"}
|