@mneme-ai/core 2.27.0 → 2.28.1

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.
@@ -0,0 +1,70 @@
1
+ // v2.28.0 — Discrete root tests for R1 vaccine numeric-fact guard.
2
+ // Each test PINS exactly one logic branch; if any branch regresses,
3
+ // the test fails forever. This is the BUG IMMUNITY PROTOCOL.
4
+ import { describe, it, expect } from "vitest";
5
+ import { numericsInSignature, numericsInClaim, vaccineConflictsWithClaim, } from "./vaccine_numeric_guard.js";
6
+ describe("R1 — numericsInSignature (BUG IMMUNITY)", () => {
7
+ it("extracts integer from `key=N` shape", () => {
8
+ expect(numericsInSignature("IMPOSSIBLE_REFUTE :: swarm_organ_count=8")).toEqual([{ key: "swarm_organ_count", value: 8 }]);
9
+ });
10
+ it("packs multi-segment version `key=2.19.34` into single comparable integer", () => {
11
+ const r = numericsInSignature("BLACK_HOLE :: version=2.19.34");
12
+ expect(r.length).toBe(1);
13
+ expect(r[0].key).toBe("version");
14
+ expect(r[0].value).toBe(2 * 1_000_000 + 19 * 1_000 + 34); // 2019034
15
+ });
16
+ it("packed values differ for adjacent versions (2.27.0 vs 2.28.0)", () => {
17
+ const a = numericsInSignature("X :: version=2.27.0")[0].value;
18
+ const b = numericsInSignature("X :: version=2.28.0")[0].value;
19
+ expect(a).not.toBe(b);
20
+ });
21
+ it("returns empty when no numerics", () => {
22
+ expect(numericsInSignature("HYPERBOLE :: cured cancer")).toEqual([]);
23
+ });
24
+ it("handles multiple key=N pairs", () => {
25
+ const r = numericsInSignature("foo=1 bar=2 baz=3");
26
+ expect(r.length).toBe(3);
27
+ });
28
+ });
29
+ describe("R1 — numericsInClaim (BUG IMMUNITY)", () => {
30
+ it("extracts `9 verification agents` shape", () => {
31
+ const r = numericsInClaim("Mneme has 9 verification agents");
32
+ expect(r.some((n) => n.value === 9 && /verification|agents/.test(n.key))).toBe(true);
33
+ });
34
+ it("extracts vN.M version shape (packed into single comparable int)", () => {
35
+ const r = numericsInClaim("Mneme v2.27.0 is great");
36
+ const expected = 2 * 1_000_000 + 27 * 1_000 + 0; // 2027000
37
+ expect(r.some((n) => n.value === expected && n.key === "version")).toBe(true);
38
+ });
39
+ it("returns empty for prose without numbers", () => {
40
+ expect(numericsInClaim("a quick brown fox").length).toBe(0);
41
+ });
42
+ });
43
+ describe("R1 — vaccineConflictsWithClaim (BUG IMMUNITY)", () => {
44
+ it("BURNS vaccine when sig says swarm_organ_count=8 + claim says 9 verification agents", () => {
45
+ const r = vaccineConflictsWithClaim("IMPOSSIBLE_REFUTE :: swarm_organ_count=8", "Mneme has 9 verification agents");
46
+ expect(r.conflict).toBe(true);
47
+ });
48
+ it("BURNS vaccine when sig says agents=8 + claim says 9 agents", () => {
49
+ const r = vaccineConflictsWithClaim("X :: agents=8", "9 agents");
50
+ expect(r.conflict).toBe(true);
51
+ });
52
+ it("BURNS vaccine when sig says tools=1290 + claim says 800 tools", () => {
53
+ const r = vaccineConflictsWithClaim("FAKE :: tools=1290", "the catalog has 800 tools");
54
+ expect(r.conflict).toBe(true);
55
+ });
56
+ it("KEEPS vaccine when sig has NO numerics", () => {
57
+ expect(vaccineConflictsWithClaim("HYPERBOLE :: cured cancer", "9 agents").conflict).toBe(false);
58
+ });
59
+ it("KEEPS vaccine when claim has NO numerics", () => {
60
+ expect(vaccineConflictsWithClaim("X :: agents=8", "Mneme is fast").conflict).toBe(false);
61
+ });
62
+ it("KEEPS vaccine when numbers match (true positive — vaccine still valid)", () => {
63
+ expect(vaccineConflictsWithClaim("X :: agents=8", "Mneme has 8 agents").conflict).toBe(false);
64
+ });
65
+ it("KEEPS vaccine when keys are semantically UNRELATED", () => {
66
+ // sig "agents=8" should not block a claim about "9 megabytes"
67
+ expect(vaccineConflictsWithClaim("X :: agents=8", "the file is 9 megabytes").conflict).toBe(false);
68
+ });
69
+ });
70
+ //# sourceMappingURL=vaccine_numeric_guard.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"vaccine_numeric_guard.test.js","sourceRoot":"","sources":["../../src/squadron/vaccine_numeric_guard.test.ts"],"names":[],"mappings":"AAAA,mEAAmE;AACnE,oEAAoE;AACpE,6DAA6D;AAE7D,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAC9C,OAAO,EACL,mBAAmB,EACnB,eAAe,EACf,yBAAyB,GAC1B,MAAM,4BAA4B,CAAC;AAEpC,QAAQ,CAAC,yCAAyC,EAAE,GAAG,EAAE;IACvD,EAAE,CAAC,qCAAqC,EAAE,GAAG,EAAE;QAC7C,MAAM,CAAC,mBAAmB,CAAC,0CAA0C,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,EAAE,GAAG,EAAE,mBAAmB,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;IAC5H,CAAC,CAAC,CAAC;IACH,EAAE,CAAC,0EAA0E,EAAE,GAAG,EAAE;QAClF,MAAM,CAAC,GAAG,mBAAmB,CAAC,+BAA+B,CAAC,CAAC;QAC/D,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QACzB,MAAM,CAAC,CAAC,CAAC,CAAC,CAAE,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;QAClC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAE,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,SAAS,GAAG,EAAE,GAAG,KAAK,GAAG,EAAE,CAAC,CAAC,CAAC,UAAU;IACvE,CAAC,CAAC,CAAC;IACH,EAAE,CAAC,+DAA+D,EAAE,GAAG,EAAE;QACvE,MAAM,CAAC,GAAG,mBAAmB,CAAC,qBAAqB,CAAC,CAAC,CAAC,CAAE,CAAC,KAAK,CAAC;QAC/D,MAAM,CAAC,GAAG,mBAAmB,CAAC,qBAAqB,CAAC,CAAC,CAAC,CAAE,CAAC,KAAK,CAAC;QAC/D,MAAM,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IACxB,CAAC,CAAC,CAAC;IACH,EAAE,CAAC,gCAAgC,EAAE,GAAG,EAAE;QACxC,MAAM,CAAC,mBAAmB,CAAC,2BAA2B,CAAC,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;IACvE,CAAC,CAAC,CAAC;IACH,EAAE,CAAC,8BAA8B,EAAE,GAAG,EAAE;QACtC,MAAM,CAAC,GAAG,mBAAmB,CAAC,mBAAmB,CAAC,CAAC;QACnD,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAC3B,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC;AAEH,QAAQ,CAAC,qCAAqC,EAAE,GAAG,EAAE;IACnD,EAAE,CAAC,wCAAwC,EAAE,GAAG,EAAE;QAChD,MAAM,CAAC,GAAG,eAAe,CAAC,iCAAiC,CAAC,CAAC;QAC7D,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,KAAK,CAAC,IAAI,qBAAqB,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACvF,CAAC,CAAC,CAAC;IACH,EAAE,CAAC,iEAAiE,EAAE,GAAG,EAAE;QACzE,MAAM,CAAC,GAAG,eAAe,CAAC,wBAAwB,CAAC,CAAC;QACpD,MAAM,QAAQ,GAAG,CAAC,GAAG,SAAS,GAAG,EAAE,GAAG,KAAK,GAAG,CAAC,CAAC,CAAC,UAAU;QAC3D,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,KAAK,QAAQ,IAAI,CAAC,CAAC,GAAG,KAAK,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAChF,CAAC,CAAC,CAAC;IACH,EAAE,CAAC,yCAAyC,EAAE,GAAG,EAAE;QACjD,MAAM,CAAC,eAAe,CAAC,mBAAmB,CAAC,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAC9D,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC;AAEH,QAAQ,CAAC,+CAA+C,EAAE,GAAG,EAAE;IAC7D,EAAE,CAAC,oFAAoF,EAAE,GAAG,EAAE;QAC5F,MAAM,CAAC,GAAG,yBAAyB,CAAC,0CAA0C,EAAE,iCAAiC,CAAC,CAAC;QACnH,MAAM,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAChC,CAAC,CAAC,CAAC;IACH,EAAE,CAAC,4DAA4D,EAAE,GAAG,EAAE;QACpE,MAAM,CAAC,GAAG,yBAAyB,CAAC,eAAe,EAAE,UAAU,CAAC,CAAC;QACjE,MAAM,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAChC,CAAC,CAAC,CAAC;IACH,EAAE,CAAC,+DAA+D,EAAE,GAAG,EAAE;QACvE,MAAM,CAAC,GAAG,yBAAyB,CAAC,oBAAoB,EAAE,2BAA2B,CAAC,CAAC;QACvF,MAAM,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAChC,CAAC,CAAC,CAAC;IACH,EAAE,CAAC,wCAAwC,EAAE,GAAG,EAAE;QAChD,MAAM,CAAC,yBAAyB,CAAC,2BAA2B,EAAE,UAAU,CAAC,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IAClG,CAAC,CAAC,CAAC;IACH,EAAE,CAAC,0CAA0C,EAAE,GAAG,EAAE;QAClD,MAAM,CAAC,yBAAyB,CAAC,eAAe,EAAE,eAAe,CAAC,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IAC3F,CAAC,CAAC,CAAC;IACH,EAAE,CAAC,wEAAwE,EAAE,GAAG,EAAE;QAChF,MAAM,CAAC,yBAAyB,CAAC,eAAe,EAAE,oBAAoB,CAAC,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IAChG,CAAC,CAAC,CAAC;IACH,EAAE,CAAC,oDAAoD,EAAE,GAAG,EAAE;QAC5D,8DAA8D;QAC9D,MAAM,CAAC,yBAAyB,CAAC,eAAe,EAAE,yBAAyB,CAAC,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IACrG,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@mneme-ai/core",
3
- "version": "2.27.0",
3
+ "version": "2.28.1",
4
4
  "description": "Core indexing, retrieval, and graph engine for Mneme",
5
5
  "type": "module",
6
6
  "main": "./dist/index.js",