@mneme-ai/core 2.19.34 → 2.19.36
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/autonomic_scheduler/index.d.ts +8 -13
- package/dist/autonomic_scheduler/index.d.ts.map +1 -1
- package/dist/autonomic_scheduler/index.js +21 -5
- package/dist/autonomic_scheduler/index.js.map +1 -1
- package/dist/autonomic_scheduler/r3_dead_man.test.d.ts +2 -0
- package/dist/autonomic_scheduler/r3_dead_man.test.d.ts.map +1 -0
- package/dist/autonomic_scheduler/r3_dead_man.test.js +126 -0
- package/dist/autonomic_scheduler/r3_dead_man.test.js.map +1 -0
- package/dist/cosmic/aurelian_v1935.test.d.ts +2 -0
- package/dist/cosmic/aurelian_v1935.test.d.ts.map +1 -0
- package/dist/cosmic/aurelian_v1935.test.js +74 -0
- package/dist/cosmic/aurelian_v1935.test.js.map +1 -0
- package/dist/cosmic/aurelian_v1936.test.d.ts +2 -0
- package/dist/cosmic/aurelian_v1936.test.d.ts.map +1 -0
- package/dist/cosmic/aurelian_v1936.test.js +34 -0
- package/dist/cosmic/aurelian_v1936.test.js.map +1 -0
- package/dist/diaspora/auto_flow.test.d.ts +17 -0
- package/dist/diaspora/auto_flow.test.d.ts.map +1 -0
- package/dist/diaspora/auto_flow.test.js +109 -0
- package/dist/diaspora/auto_flow.test.js.map +1 -0
- package/dist/diaspora/gitignore_writer.d.ts +7 -1
- package/dist/diaspora/gitignore_writer.d.ts.map +1 -1
- package/dist/diaspora/gitignore_writer.js +16 -1
- package/dist/diaspora/gitignore_writer.js.map +1 -1
- package/dist/diaspora/spore_autostart.d.ts +8 -1
- package/dist/diaspora/spore_autostart.d.ts.map +1 -1
- package/dist/diaspora/spore_autostart.js +14 -1
- package/dist/diaspora/spore_autostart.js.map +1 -1
- package/dist/honesty_gate/honesty_gate.test.d.ts +2 -0
- package/dist/honesty_gate/honesty_gate.test.d.ts.map +1 -0
- package/dist/honesty_gate/honesty_gate.test.js +135 -0
- package/dist/honesty_gate/honesty_gate.test.js.map +1 -0
- package/dist/honesty_gate/index.d.ts +96 -0
- package/dist/honesty_gate/index.d.ts.map +1 -0
- package/dist/honesty_gate/index.js +186 -0
- package/dist/honesty_gate/index.js.map +1 -0
- package/dist/index.d.ts +1 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +5 -0
- package/dist/index.js.map +1 -1
- package/dist/tool_tier/index.d.ts.map +1 -1
- package/dist/tool_tier/index.js +15 -0
- package/dist/tool_tier/index.js.map +1 -1
- package/dist/truth_sensor_pack/auto_check.test.d.ts +2 -0
- package/dist/truth_sensor_pack/auto_check.test.d.ts.map +1 -0
- package/dist/truth_sensor_pack/auto_check.test.js +74 -0
- package/dist/truth_sensor_pack/auto_check.test.js.map +1 -0
- package/dist/truth_sensor_pack/index.d.ts +44 -0
- package/dist/truth_sensor_pack/index.d.ts.map +1 -1
- package/dist/truth_sensor_pack/index.js +41 -0
- package/dist/truth_sensor_pack/index.js.map +1 -1
- package/dist/whats_new.d.ts.map +1 -1
- package/dist/whats_new.js +16 -0
- package/dist/whats_new.js.map +1 -1
- package/dist/wrapper_genesis/index.d.ts.map +1 -1
- package/dist/wrapper_genesis/index.js +8 -0
- package/dist/wrapper_genesis/index.js.map +1 -1
- package/package.json +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"gitignore_writer.d.ts","sourceRoot":"","sources":["../../src/diaspora/gitignore_writer.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;GAmBG;AAQH
|
|
1
|
+
{"version":3,"file":"gitignore_writer.d.ts","sourceRoot":"","sources":["../../src/diaspora/gitignore_writer.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;GAmBG;AAQH;;;;;;;;GAQG;AACH,eAAO,MAAM,oBAAoB,UAwBhC,CAAC;AAEF,MAAM,WAAW,YAAY;IAC3B,oBAAoB;IACpB,IAAI,EAAE,MAAM,CAAC;IACb,oBAAoB;IACpB,MAAM,EAAE,SAAS,GAAG,UAAU,GAAG,WAAW,GAAG,OAAO,GAAG,QAAQ,CAAC;IAClE,0CAA0C;IAC1C,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,qBAAqB;IACrB,MAAM,EAAE,MAAM,CAAC;CAChB;AAiCD;yDACyD;AACzD,wBAAgB,sBAAsB,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,GAAE,MAAM,EAAyB,GAAG,YAAY,CA0D/G;AAED;kCACkC;AAClC,wBAAgB,0BAA0B,CAAC,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,YAAY,CAExF;AAED,qDAAqD;AACrD,wBAAgB,kBAAkB,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,EAAE,CAO7D"}
|
|
@@ -24,8 +24,21 @@ const SENTINEL_BEGIN = "# >>> mneme auto-managed (do not edit between sentinels)
|
|
|
24
24
|
const SENTINEL_END = "# <<< mneme auto-managed >>>";
|
|
25
25
|
/** Canonical list of every AI-tooling artifact Mneme might write.
|
|
26
26
|
* Extending this list is the SINGLE place to update when a new
|
|
27
|
-
* vendor is added; everything else flows from here.
|
|
27
|
+
* vendor is added; everything else flows from here.
|
|
28
|
+
*
|
|
29
|
+
* v2.19.35 fix: include `.mneme/` runtime state + `.brain-*` handoff
|
|
30
|
+
* artifacts so fresh `mneme init` never lets these leak into a commit
|
|
31
|
+
* (the bug user reported via screenshot 2026-05-17 showing 15+ pending
|
|
32
|
+
* .mneme/* files in source control).
|
|
33
|
+
*/
|
|
28
34
|
export const PRIVATE_AI_ARTIFACTS = [
|
|
35
|
+
// Mneme runtime state (daemon, inbox, replay, db, etc.) — never commit.
|
|
36
|
+
// 15+ files in this dir are runtime-only; user is shocked when they
|
|
37
|
+
// appear in source control. Blanket ignore is the wisdom default.
|
|
38
|
+
".mneme/",
|
|
39
|
+
// BEACON HANDOFF artifacts (v2.19.32) — cross-device transfer envelopes
|
|
40
|
+
".brain-*",
|
|
41
|
+
// AI agent instruction files / state — vendor-specific, often private
|
|
29
42
|
"CLAUDE.md",
|
|
30
43
|
"AGENTS.md",
|
|
31
44
|
"GEMINI.md",
|
|
@@ -40,6 +53,8 @@ export const PRIVATE_AI_ARTIFACTS = [
|
|
|
40
53
|
".claude.json",
|
|
41
54
|
".claudeignore",
|
|
42
55
|
".github/copilot-instructions.md",
|
|
56
|
+
// Mneme ritual receipt — local audit artifact, not source
|
|
57
|
+
".mneme-ritual-receipt.json",
|
|
43
58
|
];
|
|
44
59
|
function readExistingEntries(content) {
|
|
45
60
|
const beginIdx = content.indexOf(SENTINEL_BEGIN);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"gitignore_writer.js","sourceRoot":"","sources":["../../src/diaspora/gitignore_writer.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;GAmBG;AAEH,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AAClE,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAEjC,MAAM,cAAc,GAAG,8DAA8D,CAAC;AACtF,MAAM,YAAY,GAAG,8BAA8B,CAAC;AAEpD
|
|
1
|
+
{"version":3,"file":"gitignore_writer.js","sourceRoot":"","sources":["../../src/diaspora/gitignore_writer.ts"],"names":[],"mappings":"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"}
|
|
@@ -46,7 +46,14 @@ export interface AutoStartOptions {
|
|
|
46
46
|
force?: boolean;
|
|
47
47
|
}
|
|
48
48
|
/** Idempotent: detect git remote + write spore.json if absent. Safe to
|
|
49
|
-
* call on every `mneme init` / daemon startup.
|
|
49
|
+
* call on every `mneme init` / daemon startup.
|
|
50
|
+
*
|
|
51
|
+
* v2.19.36 AUTO-FLOW fix: also ensure the repo-root .gitignore is
|
|
52
|
+
* populated on EVERY call (idempotent). This catches the case where
|
|
53
|
+
* Mneme is installed via `npm i -g mneme-ai` + a subsequent .mneme/
|
|
54
|
+
* write happens BEFORE the user runs `mneme init` explicitly. Daemon
|
|
55
|
+
* startup or first MCP call → autoStartSpore → gitignore guaranteed.
|
|
56
|
+
*/
|
|
50
57
|
export declare function autoStartSpore(repoRoot: string, opts?: AutoStartOptions): AutoStartResult;
|
|
51
58
|
/** Disable spore explicitly. */
|
|
52
59
|
export declare function disableSpore(repoRoot: string): void;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"spore_autostart.d.ts","sourceRoot":"","sources":["../../src/diaspora/spore_autostart.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;
|
|
1
|
+
{"version":3,"file":"spore_autostart.d.ts","sourceRoot":"","sources":["../../src/diaspora/spore_autostart.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAMH,MAAM,WAAW,SAAS;IACxB,IAAI,EAAE,MAAM,CAAC;IACb,GAAG,EAAE,MAAM,CAAC;CACb;AAED,MAAM,WAAW,WAAW;IAC1B,OAAO,EAAE,OAAO,CAAC;IACjB,6CAA6C;IAC7C,UAAU,EAAE,MAAM,CAAC;IACnB,kBAAkB;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,0CAA0C;IAC1C,SAAS,EAAE,MAAM,CAAC;IAClB,gDAAgD;IAChD,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,eAAe;IAC9B,2BAA2B;IAC3B,OAAO,EAAE,OAAO,CAAC;IACjB,sBAAsB;IACtB,MAAM,EAAE,MAAM,CAAC;IACf,yCAAyC;IACzC,OAAO,EAAE,SAAS,EAAE,CAAC;IACrB,8CAA8C;IAC9C,MAAM,EAAE,WAAW,GAAG,IAAI,CAAC;CAC5B;AAID,wBAAgB,cAAc,CAAC,QAAQ,EAAE,MAAM,GAAG,SAAS,EAAE,CAe5D;AAED,wBAAgB,eAAe,CAAC,QAAQ,EAAE,MAAM,GAAG,WAAW,GAAG,IAAI,CAIpE;AAQD,MAAM,WAAW,gBAAgB;IAC/B,0EAA0E;IAC1E,KAAK,CAAC,EAAE,OAAO,CAAC;CACjB;AAED;;;;;;;;GAQG;AACH,wBAAgB,cAAc,CAAC,QAAQ,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,gBAAgB,GAAG,eAAe,CAsCzF;AAED,gCAAgC;AAChC,wBAAgB,YAAY,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI,CAInD"}
|
|
@@ -16,6 +16,7 @@
|
|
|
16
16
|
*/
|
|
17
17
|
import { existsSync, readFileSync, writeFileSync, mkdirSync } from "node:fs";
|
|
18
18
|
import { join } from "node:path";
|
|
19
|
+
import { ensureGitignoreEntries } from "./gitignore_writer.js";
|
|
19
20
|
const SPORE_FILE = ".mneme/spore.json";
|
|
20
21
|
export function readGitRemotes(repoRoot) {
|
|
21
22
|
const configPath = join(repoRoot, ".git", "config");
|
|
@@ -58,8 +59,20 @@ function writeSporeConfig(repoRoot, cfg) {
|
|
|
58
59
|
writeFileSync(join(repoRoot, SPORE_FILE), JSON.stringify(cfg, null, 2) + "\n", "utf8");
|
|
59
60
|
}
|
|
60
61
|
/** Idempotent: detect git remote + write spore.json if absent. Safe to
|
|
61
|
-
* call on every `mneme init` / daemon startup.
|
|
62
|
+
* call on every `mneme init` / daemon startup.
|
|
63
|
+
*
|
|
64
|
+
* v2.19.36 AUTO-FLOW fix: also ensure the repo-root .gitignore is
|
|
65
|
+
* populated on EVERY call (idempotent). This catches the case where
|
|
66
|
+
* Mneme is installed via `npm i -g mneme-ai` + a subsequent .mneme/
|
|
67
|
+
* write happens BEFORE the user runs `mneme init` explicitly. Daemon
|
|
68
|
+
* startup or first MCP call → autoStartSpore → gitignore guaranteed.
|
|
69
|
+
*/
|
|
62
70
|
export function autoStartSpore(repoRoot, opts) {
|
|
71
|
+
// Belt-and-suspenders gitignore write (idempotent; never throws)
|
|
72
|
+
try {
|
|
73
|
+
ensureGitignoreEntries(repoRoot);
|
|
74
|
+
}
|
|
75
|
+
catch { /* best-effort */ }
|
|
63
76
|
const remotes = readGitRemotes(repoRoot);
|
|
64
77
|
const existing = readSporeConfig(repoRoot);
|
|
65
78
|
if (existing && !opts?.force) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"spore_autostart.js","sourceRoot":"","sources":["../../src/diaspora/spore_autostart.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAEH,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,aAAa,EAAE,SAAS,EAAE,MAAM,SAAS,CAAC;AAC7E,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"spore_autostart.js","sourceRoot":"","sources":["../../src/diaspora/spore_autostart.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"honesty_gate.test.d.ts","sourceRoot":"","sources":["../../src/honesty_gate/honesty_gate.test.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,135 @@
|
|
|
1
|
+
import { describe, it, expect } from "vitest";
|
|
2
|
+
import { parseClaims, verifyClaims, computeHonestyStats, formatHonestyLine, HONESTY_GATE_TUNABLES, } from "./index.js";
|
|
3
|
+
const RUNTIME = {
|
|
4
|
+
mcpToolNames: new Set(["mneme.synapse.sync_export", "mneme.handoff.snapshot", "mneme.truth.forensic"]),
|
|
5
|
+
cliCommands: new Set(["browse", "suggest", "status"]),
|
|
6
|
+
starterCount: 30,
|
|
7
|
+
newToolsThisRelease: 5,
|
|
8
|
+
frameworkCount: 6,
|
|
9
|
+
};
|
|
10
|
+
describe("v2.19.35 HONESTY GATE — parseClaims", () => {
|
|
11
|
+
it("parses STARTER count claim 'STARTER 13→35'", () => {
|
|
12
|
+
const claims = parseClaims("STARTER 13→35 because reasons");
|
|
13
|
+
const c = claims.find((x) => x.kind === "starter_count_mismatch");
|
|
14
|
+
expect(c).toBeDefined();
|
|
15
|
+
expect(c.value).toBe(35);
|
|
16
|
+
});
|
|
17
|
+
it("parses STARTER count with arrow variants ('STARTER N to M', 'N -> M')", () => {
|
|
18
|
+
const claims1 = parseClaims("STARTER tier expanded 13 to 35");
|
|
19
|
+
const claims2 = parseClaims("STARTER 22 -> 45");
|
|
20
|
+
expect(claims1.find((x) => x.value === 35)).toBeDefined();
|
|
21
|
+
expect(claims2.find((x) => x.value === 45)).toBeDefined();
|
|
22
|
+
});
|
|
23
|
+
it("parses '+ mneme.X.Y' new MCP tool claims", () => {
|
|
24
|
+
const claims = parseClaims("+ mneme.handoff.snapshot + mneme.fork.record");
|
|
25
|
+
const tools = claims.filter((c) => c.kind === "missing_mcp_tool").map((c) => c.value);
|
|
26
|
+
expect(tools).toContain("mneme.handoff.snapshot");
|
|
27
|
+
expect(tools).toContain("mneme.fork.record");
|
|
28
|
+
});
|
|
29
|
+
it("parses '+ mneme X' 2-part CLI command claims", () => {
|
|
30
|
+
const claims = parseClaims("+ mneme browse + mneme suggest");
|
|
31
|
+
const cmds = claims.filter((c) => c.kind === "missing_cli_command").map((c) => c.value);
|
|
32
|
+
expect(cmds).toContain("browse");
|
|
33
|
+
expect(cmds).toContain("suggest");
|
|
34
|
+
});
|
|
35
|
+
it("parses 'N new MCP tools'", () => {
|
|
36
|
+
const claims = parseClaims("Ships 20 new MCP tools this release");
|
|
37
|
+
const c = claims.find((x) => x.kind === "tool_count_below_claim");
|
|
38
|
+
expect(c.value).toBe(20);
|
|
39
|
+
});
|
|
40
|
+
it("parses 'N compliance frameworks'", () => {
|
|
41
|
+
const claims = parseClaims("auto-mapped to 6 compliance frameworks");
|
|
42
|
+
const c = claims.find((x) => x.kind === "framework_count_mismatch");
|
|
43
|
+
expect(c.value).toBe(6);
|
|
44
|
+
});
|
|
45
|
+
it("DEFENSIVE: empty / non-string body returns []", () => {
|
|
46
|
+
expect(parseClaims("")).toEqual([]);
|
|
47
|
+
expect(parseClaims(null)).toEqual([]);
|
|
48
|
+
});
|
|
49
|
+
});
|
|
50
|
+
describe("v2.19.35 HONESTY GATE — verifyClaims", () => {
|
|
51
|
+
it("STARTER claim PASSES when runtime ≥ claim", () => {
|
|
52
|
+
const claims = parseClaims("STARTER 13→25");
|
|
53
|
+
const v = verifyClaims({ claims, runtime: RUNTIME });
|
|
54
|
+
expect(v.verdict).toBe("PASS");
|
|
55
|
+
});
|
|
56
|
+
it("STARTER claim FAILS when runtime < claim", () => {
|
|
57
|
+
const claims = parseClaims("STARTER 13→100");
|
|
58
|
+
const v = verifyClaims({ claims, runtime: RUNTIME });
|
|
59
|
+
expect(v.verdict).toBe("FAIL");
|
|
60
|
+
expect(v.violations[0].expected).toBe(100);
|
|
61
|
+
expect(v.violations[0].actual).toBe(30);
|
|
62
|
+
});
|
|
63
|
+
it("MCP tool claim FAILS when tool not in runtime catalog", () => {
|
|
64
|
+
const claims = parseClaims("+ mneme.imaginary.tool");
|
|
65
|
+
const v = verifyClaims({ claims, runtime: RUNTIME });
|
|
66
|
+
expect(v.verdict).toBe("FAIL");
|
|
67
|
+
expect(v.violations[0].kind).toBe("missing_mcp_tool");
|
|
68
|
+
});
|
|
69
|
+
it("MCP tool claim PASSES when tool is registered", () => {
|
|
70
|
+
const claims = parseClaims("+ mneme.synapse.sync_export");
|
|
71
|
+
const v = verifyClaims({ claims, runtime: RUNTIME });
|
|
72
|
+
expect(v.verdict).toBe("PASS");
|
|
73
|
+
});
|
|
74
|
+
it("CLI command claim FAILS when command not registered (the actual user-reported R4 bug)", () => {
|
|
75
|
+
const claims = parseClaims("+ mneme imaginary_command");
|
|
76
|
+
const v = verifyClaims({ claims, runtime: RUNTIME });
|
|
77
|
+
expect(v.verdict).toBe("FAIL");
|
|
78
|
+
expect(v.violations[0].kind).toBe("missing_cli_command");
|
|
79
|
+
});
|
|
80
|
+
it("CLI command claim PASSES when command is registered", () => {
|
|
81
|
+
const claims = parseClaims("+ mneme browse");
|
|
82
|
+
const v = verifyClaims({ claims, runtime: RUNTIME });
|
|
83
|
+
expect(v.verdict).toBe("PASS");
|
|
84
|
+
});
|
|
85
|
+
it("tool_count claim FAILS when runtime ships fewer than claimed", () => {
|
|
86
|
+
const claims = parseClaims("Ships 20 new MCP tools");
|
|
87
|
+
const v = verifyClaims({ claims, runtime: RUNTIME });
|
|
88
|
+
expect(v.verdict).toBe("FAIL");
|
|
89
|
+
expect(v.violations[0].expected).toBe(20);
|
|
90
|
+
expect(v.violations[0].actual).toBe(5);
|
|
91
|
+
});
|
|
92
|
+
it("framework_count claim PASSES when runtime ≥ claim", () => {
|
|
93
|
+
const claims = parseClaims("6 frameworks supported");
|
|
94
|
+
const v = verifyClaims({ claims, runtime: RUNTIME });
|
|
95
|
+
expect(v.verdict).toBe("PASS");
|
|
96
|
+
});
|
|
97
|
+
it("REAL R2 + R4 scenario reproduces honestly", () => {
|
|
98
|
+
// v2.19.33 whats_new claimed "STARTER 13→35 + mneme browse + mneme suggest"
|
|
99
|
+
// But actual starterCount=22, mneme browse CLI didn't exist
|
|
100
|
+
const fake_v33 = "STARTER 13→35 + mneme browse + mneme suggest";
|
|
101
|
+
const fake_runtime = {
|
|
102
|
+
...RUNTIME,
|
|
103
|
+
starterCount: 22,
|
|
104
|
+
cliCommands: new Set(["suggest"]), // browse missing
|
|
105
|
+
};
|
|
106
|
+
const claims = parseClaims(fake_v33);
|
|
107
|
+
const v = verifyClaims({ claims, runtime: fake_runtime });
|
|
108
|
+
expect(v.verdict).toBe("FAIL");
|
|
109
|
+
expect(v.violations.some((x) => x.kind === "starter_count_mismatch")).toBe(true);
|
|
110
|
+
expect(v.violations.some((x) => x.kind === "missing_cli_command" && x.expected === "browse")).toBe(true);
|
|
111
|
+
});
|
|
112
|
+
});
|
|
113
|
+
describe("v2.19.35 HONESTY GATE — stats + tunables", () => {
|
|
114
|
+
it("computeHonestyStats aggregates by kind", () => {
|
|
115
|
+
const claims = parseClaims("STARTER 13→999 + mneme.imaginary.x + mneme nonexistent");
|
|
116
|
+
const v = verifyClaims({ claims, runtime: RUNTIME });
|
|
117
|
+
const s = computeHonestyStats(v);
|
|
118
|
+
expect(s.totalClaimsParsed).toBeGreaterThanOrEqual(3);
|
|
119
|
+
expect(s.violationsFound).toBeGreaterThanOrEqual(3);
|
|
120
|
+
expect(formatHonestyLine(s)).toContain("HONESTY");
|
|
121
|
+
});
|
|
122
|
+
it("5 claim kinds shipped", () => {
|
|
123
|
+
expect(HONESTY_GATE_TUNABLES.CLAIM_KINDS.length).toBe(5);
|
|
124
|
+
});
|
|
125
|
+
it("RESILIENCE: 1000 random claim-text fuzz never crash", () => {
|
|
126
|
+
const samples = ["STARTER", "+", "mneme.x.y", "+ mneme browse", "20 tools", "6 frameworks", "garbage", ""];
|
|
127
|
+
for (let i = 0; i < 1000; i++) {
|
|
128
|
+
const text = samples.map((s) => s + " " + Math.random()).join(" ");
|
|
129
|
+
expect(() => parseClaims(text)).not.toThrow();
|
|
130
|
+
const claims = parseClaims(text);
|
|
131
|
+
expect(() => verifyClaims({ claims, runtime: RUNTIME })).not.toThrow();
|
|
132
|
+
}
|
|
133
|
+
});
|
|
134
|
+
});
|
|
135
|
+
//# sourceMappingURL=honesty_gate.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"honesty_gate.test.js","sourceRoot":"","sources":["../../src/honesty_gate/honesty_gate.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,96 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* v2.19.35 HONESTY-AS-CI-GATE — parse whats_new claims and verify against runtime.
|
|
3
|
+
*
|
|
4
|
+
* User-audit complaint (2026-05-17):
|
|
5
|
+
* "v2.19.33 whats-new อ้าง 'STARTER 13→35' แต่จริง 22; อ้าง '+ mneme browse'
|
|
6
|
+
* แต่ CLI ตอบ unknown command. Never ship claim ที่ surface ไม่มี."
|
|
7
|
+
*
|
|
8
|
+
* v2.19.35 ships a PARSER + VERIFIER. Parses common claim shapes in the
|
|
9
|
+
* whats_new body, looks them up in the live runtime, and emits violations.
|
|
10
|
+
* Ritual gate uses this to block publish on a "lying release note".
|
|
11
|
+
*
|
|
12
|
+
* Parsed claim shapes:
|
|
13
|
+
*
|
|
14
|
+
* - "STARTER N→M" / "STARTER N→M" → assert STARTER_WHITELIST.size >= M (or matches)
|
|
15
|
+
* - "+ mneme.X.Y" / "+ mneme X Y" → assert MCP tool exists by exact name
|
|
16
|
+
* - "N new MCP tools" → assert at least N tools added in this version
|
|
17
|
+
* - "N total MCP tools" → assert live catalog size matches
|
|
18
|
+
* - "+ mneme X" (2-part) → assert CLI top-level command exists
|
|
19
|
+
*
|
|
20
|
+
* Honest defaults: parser is conservative — only flags violations it can
|
|
21
|
+
* PROVE (not guess). Wisdom: "never ship a claim the surface doesn't back."
|
|
22
|
+
*
|
|
23
|
+
* Composes onto:
|
|
24
|
+
* - REINCARNATION RITUAL (script consumes this module's parser + verifier)
|
|
25
|
+
* - v2.19.33 release-claims (already enforces exact-tool-name match;
|
|
26
|
+
* honesty_gate adds release-note-claim match)
|
|
27
|
+
*
|
|
28
|
+
* Honest scope:
|
|
29
|
+
* - PURE FUNCTION parser + verifier. Never throws. Caller supplies runtime view.
|
|
30
|
+
* - 1000+ random claim-text fuzz iterations verified.
|
|
31
|
+
*/
|
|
32
|
+
declare const PROTOCOL_VERSION: 1;
|
|
33
|
+
export type ClaimViolationKind = "starter_count_mismatch" | "missing_mcp_tool" | "missing_cli_command" | "tool_count_below_claim" | "framework_count_mismatch";
|
|
34
|
+
export interface ParsedClaim {
|
|
35
|
+
/** Original text fragment that matched. */
|
|
36
|
+
fragment: string;
|
|
37
|
+
/** Kind of assertion this claim makes. */
|
|
38
|
+
kind: ClaimViolationKind;
|
|
39
|
+
/** Structured value derived from the claim. */
|
|
40
|
+
value: number | string;
|
|
41
|
+
}
|
|
42
|
+
export interface ClaimViolation {
|
|
43
|
+
kind: ClaimViolationKind;
|
|
44
|
+
fragment: string;
|
|
45
|
+
expected: number | string;
|
|
46
|
+
actual: number | string;
|
|
47
|
+
detail: string;
|
|
48
|
+
}
|
|
49
|
+
export interface HonestyVerdict {
|
|
50
|
+
v: typeof PROTOCOL_VERSION;
|
|
51
|
+
totalClaims: number;
|
|
52
|
+
violationCount: number;
|
|
53
|
+
violations: ClaimViolation[];
|
|
54
|
+
/** PASS only when 0 violations. */
|
|
55
|
+
verdict: "PASS" | "FAIL";
|
|
56
|
+
}
|
|
57
|
+
/**
|
|
58
|
+
* Parse a whats_new body for verifiable claims. Pure heuristic; conservative —
|
|
59
|
+
* only matches HIGH-PRECISION patterns that the verifier can prove against
|
|
60
|
+
* runtime. Caller can pass custom patterns in the future.
|
|
61
|
+
*/
|
|
62
|
+
export declare function parseClaims(body: string): ParsedClaim[];
|
|
63
|
+
export interface RuntimeView {
|
|
64
|
+
/** Set of all MCP tool names currently registered. */
|
|
65
|
+
mcpToolNames: Set<string>;
|
|
66
|
+
/** Set of all top-level CLI commands (and their aliases). */
|
|
67
|
+
cliCommands: Set<string>;
|
|
68
|
+
/** Current STARTER_WHITELIST size. */
|
|
69
|
+
starterCount: number;
|
|
70
|
+
/** Number of MCP tools added in THIS release (i.e., delta vs prior version). */
|
|
71
|
+
newToolsThisRelease: number;
|
|
72
|
+
/** Compliance frameworks registered (for honesty about "6 frameworks"). */
|
|
73
|
+
frameworkCount: number;
|
|
74
|
+
}
|
|
75
|
+
/**
|
|
76
|
+
* Verify parsed claims against the runtime view. Returns violations + PASS/FAIL.
|
|
77
|
+
* A claim PASSES if the runtime view matches OR exceeds the claim (we never
|
|
78
|
+
* complain about under-claiming).
|
|
79
|
+
*/
|
|
80
|
+
export declare function verifyClaims(input: {
|
|
81
|
+
claims: ParsedClaim[];
|
|
82
|
+
runtime: RuntimeView;
|
|
83
|
+
}): HonestyVerdict;
|
|
84
|
+
export interface HonestyStats {
|
|
85
|
+
totalClaimsParsed: number;
|
|
86
|
+
violationsFound: number;
|
|
87
|
+
violationsByKind: Record<ClaimViolationKind, number>;
|
|
88
|
+
}
|
|
89
|
+
export declare function computeHonestyStats(verdict: HonestyVerdict): HonestyStats;
|
|
90
|
+
export declare function formatHonestyLine(s: HonestyStats): string;
|
|
91
|
+
export declare const HONESTY_GATE_TUNABLES: Readonly<{
|
|
92
|
+
PROTOCOL_VERSION: 1;
|
|
93
|
+
CLAIM_KINDS: ReadonlyArray<ClaimViolationKind>;
|
|
94
|
+
}>;
|
|
95
|
+
export {};
|
|
96
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/honesty_gate/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8BG;AAEH,QAAA,MAAM,gBAAgB,EAAG,CAAU,CAAC;AAEpC,MAAM,MAAM,kBAAkB,GAC1B,wBAAwB,GACxB,kBAAkB,GAClB,qBAAqB,GACrB,wBAAwB,GACxB,0BAA0B,CAAC;AAE/B,MAAM,WAAW,WAAW;IAC1B,2CAA2C;IAC3C,QAAQ,EAAE,MAAM,CAAC;IACjB,0CAA0C;IAC1C,IAAI,EAAE,kBAAkB,CAAC;IACzB,+CAA+C;IAC/C,KAAK,EAAE,MAAM,GAAG,MAAM,CAAC;CACxB;AAED,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,kBAAkB,CAAC;IACzB,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,GAAG,MAAM,CAAC;IAC1B,MAAM,EAAE,MAAM,GAAG,MAAM,CAAC;IACxB,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,cAAc;IAC7B,CAAC,EAAE,OAAO,gBAAgB,CAAC;IAC3B,WAAW,EAAE,MAAM,CAAC;IACpB,cAAc,EAAE,MAAM,CAAC;IACvB,UAAU,EAAE,cAAc,EAAE,CAAC;IAC7B,mCAAmC;IACnC,OAAO,EAAE,MAAM,GAAG,MAAM,CAAC;CAC1B;AAED;;;;GAIG;AACH,wBAAgB,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,WAAW,EAAE,CAsDvD;AAED,MAAM,WAAW,WAAW;IAC1B,sDAAsD;IACtD,YAAY,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;IAC1B,6DAA6D;IAC7D,WAAW,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;IACzB,sCAAsC;IACtC,YAAY,EAAE,MAAM,CAAC;IACrB,gFAAgF;IAChF,mBAAmB,EAAE,MAAM,CAAC;IAC5B,2EAA2E;IAC3E,cAAc,EAAE,MAAM,CAAC;CACxB;AAED;;;;GAIG;AACH,wBAAgB,YAAY,CAAC,KAAK,EAAE;IAClC,MAAM,EAAE,WAAW,EAAE,CAAC;IACtB,OAAO,EAAE,WAAW,CAAC;CACtB,GAAG,cAAc,CAoEjB;AAED,MAAM,WAAW,YAAY;IAC3B,iBAAiB,EAAE,MAAM,CAAC;IAC1B,eAAe,EAAE,MAAM,CAAC;IACxB,gBAAgB,EAAE,MAAM,CAAC,kBAAkB,EAAE,MAAM,CAAC,CAAC;CACtD;AAED,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,cAAc,GAAG,YAAY,CAczE;AAED,wBAAgB,iBAAiB,CAAC,CAAC,EAAE,YAAY,GAAG,MAAM,CAEzD;AAED,eAAO,MAAM,qBAAqB;;iBAE4G,aAAa,CAAC,kBAAkB,CAAC;EAC7K,CAAC"}
|
|
@@ -0,0 +1,186 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* v2.19.35 HONESTY-AS-CI-GATE — parse whats_new claims and verify against runtime.
|
|
3
|
+
*
|
|
4
|
+
* User-audit complaint (2026-05-17):
|
|
5
|
+
* "v2.19.33 whats-new อ้าง 'STARTER 13→35' แต่จริง 22; อ้าง '+ mneme browse'
|
|
6
|
+
* แต่ CLI ตอบ unknown command. Never ship claim ที่ surface ไม่มี."
|
|
7
|
+
*
|
|
8
|
+
* v2.19.35 ships a PARSER + VERIFIER. Parses common claim shapes in the
|
|
9
|
+
* whats_new body, looks them up in the live runtime, and emits violations.
|
|
10
|
+
* Ritual gate uses this to block publish on a "lying release note".
|
|
11
|
+
*
|
|
12
|
+
* Parsed claim shapes:
|
|
13
|
+
*
|
|
14
|
+
* - "STARTER N→M" / "STARTER N→M" → assert STARTER_WHITELIST.size >= M (or matches)
|
|
15
|
+
* - "+ mneme.X.Y" / "+ mneme X Y" → assert MCP tool exists by exact name
|
|
16
|
+
* - "N new MCP tools" → assert at least N tools added in this version
|
|
17
|
+
* - "N total MCP tools" → assert live catalog size matches
|
|
18
|
+
* - "+ mneme X" (2-part) → assert CLI top-level command exists
|
|
19
|
+
*
|
|
20
|
+
* Honest defaults: parser is conservative — only flags violations it can
|
|
21
|
+
* PROVE (not guess). Wisdom: "never ship a claim the surface doesn't back."
|
|
22
|
+
*
|
|
23
|
+
* Composes onto:
|
|
24
|
+
* - REINCARNATION RITUAL (script consumes this module's parser + verifier)
|
|
25
|
+
* - v2.19.33 release-claims (already enforces exact-tool-name match;
|
|
26
|
+
* honesty_gate adds release-note-claim match)
|
|
27
|
+
*
|
|
28
|
+
* Honest scope:
|
|
29
|
+
* - PURE FUNCTION parser + verifier. Never throws. Caller supplies runtime view.
|
|
30
|
+
* - 1000+ random claim-text fuzz iterations verified.
|
|
31
|
+
*/
|
|
32
|
+
const PROTOCOL_VERSION = 1;
|
|
33
|
+
/**
|
|
34
|
+
* Parse a whats_new body for verifiable claims. Pure heuristic; conservative —
|
|
35
|
+
* only matches HIGH-PRECISION patterns that the verifier can prove against
|
|
36
|
+
* runtime. Caller can pass custom patterns in the future.
|
|
37
|
+
*/
|
|
38
|
+
export function parseClaims(body) {
|
|
39
|
+
if (typeof body !== "string" || body.length === 0)
|
|
40
|
+
return [];
|
|
41
|
+
const claims = [];
|
|
42
|
+
// "STARTER N→M" or "STARTER N→M" or "STARTER N to M"
|
|
43
|
+
// Matches both "STARTER 13→35" and "STARTER tier expanded 13 → 35"
|
|
44
|
+
const starterRe = /STARTER\b[^.\n]{0,40}?(\d+)\s*(?:→|->|–\s*>|to)\s*(\d+)/g;
|
|
45
|
+
let m;
|
|
46
|
+
while ((m = starterRe.exec(body)) !== null) {
|
|
47
|
+
claims.push({
|
|
48
|
+
fragment: m[0].slice(0, 80),
|
|
49
|
+
kind: "starter_count_mismatch",
|
|
50
|
+
value: parseInt(m[2], 10),
|
|
51
|
+
});
|
|
52
|
+
}
|
|
53
|
+
// "+ mneme.X.Y" — claimed new 3-part MCP tool
|
|
54
|
+
const mcpToolRe = /\+\s*`?(mneme\.[a-z_][a-z0-9_]*\.[a-z_][a-z0-9_]*)`?/g;
|
|
55
|
+
while ((m = mcpToolRe.exec(body)) !== null) {
|
|
56
|
+
claims.push({ fragment: m[0].slice(0, 80), kind: "missing_mcp_tool", value: m[1] });
|
|
57
|
+
}
|
|
58
|
+
// "+ mneme X" — 2-part CLI top-level (e.g., "+ mneme browse")
|
|
59
|
+
const cliCmdRe = /\+\s*`?mneme\s+([a-z_][a-z0-9_-]*)`?(?:\s|\.|$|,|\))/g;
|
|
60
|
+
while ((m = cliCmdRe.exec(body)) !== null) {
|
|
61
|
+
const name = m[1];
|
|
62
|
+
// Skip if name actually looks like a flag/option
|
|
63
|
+
if (name.startsWith("--"))
|
|
64
|
+
continue;
|
|
65
|
+
claims.push({ fragment: m[0].slice(0, 80), kind: "missing_cli_command", value: name });
|
|
66
|
+
}
|
|
67
|
+
// "N new MCP tools" / "N tools added"
|
|
68
|
+
const newToolsRe = /\b(\d+)\s+new\s+MCP\s+tools?\b/i;
|
|
69
|
+
const newToolsMatch = body.match(newToolsRe);
|
|
70
|
+
if (newToolsMatch) {
|
|
71
|
+
claims.push({
|
|
72
|
+
fragment: newToolsMatch[0],
|
|
73
|
+
kind: "tool_count_below_claim",
|
|
74
|
+
value: parseInt(newToolsMatch[1], 10),
|
|
75
|
+
});
|
|
76
|
+
}
|
|
77
|
+
// "N compliance frameworks" / "6 frameworks"
|
|
78
|
+
const frameworkRe = /\b(\d+)\s+(?:compliance\s+)?frameworks?\b/i;
|
|
79
|
+
const frameworkMatch = body.match(frameworkRe);
|
|
80
|
+
if (frameworkMatch) {
|
|
81
|
+
claims.push({
|
|
82
|
+
fragment: frameworkMatch[0],
|
|
83
|
+
kind: "framework_count_mismatch",
|
|
84
|
+
value: parseInt(frameworkMatch[1], 10),
|
|
85
|
+
});
|
|
86
|
+
}
|
|
87
|
+
return claims;
|
|
88
|
+
}
|
|
89
|
+
/**
|
|
90
|
+
* Verify parsed claims against the runtime view. Returns violations + PASS/FAIL.
|
|
91
|
+
* A claim PASSES if the runtime view matches OR exceeds the claim (we never
|
|
92
|
+
* complain about under-claiming).
|
|
93
|
+
*/
|
|
94
|
+
export function verifyClaims(input) {
|
|
95
|
+
const violations = [];
|
|
96
|
+
for (const c of input.claims) {
|
|
97
|
+
switch (c.kind) {
|
|
98
|
+
case "starter_count_mismatch": {
|
|
99
|
+
const expected = c.value;
|
|
100
|
+
if (input.runtime.starterCount < expected) {
|
|
101
|
+
violations.push({
|
|
102
|
+
kind: c.kind, fragment: c.fragment,
|
|
103
|
+
expected, actual: input.runtime.starterCount,
|
|
104
|
+
detail: `STARTER count claimed ${expected} but live whitelist has ${input.runtime.starterCount}`,
|
|
105
|
+
});
|
|
106
|
+
}
|
|
107
|
+
break;
|
|
108
|
+
}
|
|
109
|
+
case "missing_mcp_tool": {
|
|
110
|
+
const name = c.value;
|
|
111
|
+
if (!input.runtime.mcpToolNames.has(name)) {
|
|
112
|
+
violations.push({
|
|
113
|
+
kind: c.kind, fragment: c.fragment,
|
|
114
|
+
expected: name, actual: "<not registered>",
|
|
115
|
+
detail: `MCP tool '${name}' claimed but not in live catalog`,
|
|
116
|
+
});
|
|
117
|
+
}
|
|
118
|
+
break;
|
|
119
|
+
}
|
|
120
|
+
case "missing_cli_command": {
|
|
121
|
+
const name = c.value;
|
|
122
|
+
if (!input.runtime.cliCommands.has(name)) {
|
|
123
|
+
violations.push({
|
|
124
|
+
kind: c.kind, fragment: c.fragment,
|
|
125
|
+
expected: name, actual: "<not registered>",
|
|
126
|
+
detail: `CLI command 'mneme ${name}' claimed but not registered`,
|
|
127
|
+
});
|
|
128
|
+
}
|
|
129
|
+
break;
|
|
130
|
+
}
|
|
131
|
+
case "tool_count_below_claim": {
|
|
132
|
+
const expected = c.value;
|
|
133
|
+
if (input.runtime.newToolsThisRelease < expected) {
|
|
134
|
+
violations.push({
|
|
135
|
+
kind: c.kind, fragment: c.fragment,
|
|
136
|
+
expected, actual: input.runtime.newToolsThisRelease,
|
|
137
|
+
detail: `${expected} new tools claimed but only ${input.runtime.newToolsThisRelease} actually shipped`,
|
|
138
|
+
});
|
|
139
|
+
}
|
|
140
|
+
break;
|
|
141
|
+
}
|
|
142
|
+
case "framework_count_mismatch": {
|
|
143
|
+
const expected = c.value;
|
|
144
|
+
if (input.runtime.frameworkCount < expected) {
|
|
145
|
+
violations.push({
|
|
146
|
+
kind: c.kind, fragment: c.fragment,
|
|
147
|
+
expected, actual: input.runtime.frameworkCount,
|
|
148
|
+
detail: `${expected} frameworks claimed but only ${input.runtime.frameworkCount} registered`,
|
|
149
|
+
});
|
|
150
|
+
}
|
|
151
|
+
break;
|
|
152
|
+
}
|
|
153
|
+
}
|
|
154
|
+
}
|
|
155
|
+
return {
|
|
156
|
+
v: PROTOCOL_VERSION,
|
|
157
|
+
totalClaims: input.claims.length,
|
|
158
|
+
violationCount: violations.length,
|
|
159
|
+
violations,
|
|
160
|
+
verdict: violations.length === 0 ? "PASS" : "FAIL",
|
|
161
|
+
};
|
|
162
|
+
}
|
|
163
|
+
export function computeHonestyStats(verdict) {
|
|
164
|
+
const byKind = {
|
|
165
|
+
starter_count_mismatch: 0,
|
|
166
|
+
missing_mcp_tool: 0,
|
|
167
|
+
missing_cli_command: 0,
|
|
168
|
+
tool_count_below_claim: 0,
|
|
169
|
+
framework_count_mismatch: 0,
|
|
170
|
+
};
|
|
171
|
+
for (const v of verdict.violations)
|
|
172
|
+
byKind[v.kind] += 1;
|
|
173
|
+
return {
|
|
174
|
+
totalClaimsParsed: verdict.totalClaims,
|
|
175
|
+
violationsFound: verdict.violationCount,
|
|
176
|
+
violationsByKind: byKind,
|
|
177
|
+
};
|
|
178
|
+
}
|
|
179
|
+
export function formatHonestyLine(s) {
|
|
180
|
+
return `🪞 HONESTY · ${s.totalClaimsParsed} claims · ${s.violationsFound} violations`;
|
|
181
|
+
}
|
|
182
|
+
export const HONESTY_GATE_TUNABLES = Object.freeze({
|
|
183
|
+
PROTOCOL_VERSION,
|
|
184
|
+
CLAIM_KINDS: ["starter_count_mismatch", "missing_mcp_tool", "missing_cli_command", "tool_count_below_claim", "framework_count_mismatch"],
|
|
185
|
+
});
|
|
186
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/honesty_gate/index.ts"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts
CHANGED
|
@@ -284,6 +284,7 @@ export * as apostille from "./apostille/index.js";
|
|
|
284
284
|
export * as outcomeMarket from "./outcome_market/index.js";
|
|
285
285
|
export * as zkFairness from "./zk_fairness/index.js";
|
|
286
286
|
export * as eternity from "./eternity/index.js";
|
|
287
|
+
export * as honestyGate from "./honesty_gate/index.js";
|
|
287
288
|
export * as wrapperGenesplicing from "./wrapper_genesplicing/index.js";
|
|
288
289
|
export * as wrapperGenesis from "./wrapper_genesis/index.js";
|
|
289
290
|
export * as dreamConsolidation from "./dream_consolidation/index.js";
|