@mneme-ai/core 2.93.0 → 2.95.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 (45) hide show
  1. package/dist/agent_manifest.d.ts +0 -2
  2. package/dist/agent_manifest.d.ts.map +1 -1
  3. package/dist/agent_manifest.js +45 -0
  4. package/dist/agent_manifest.js.map +1 -1
  5. package/dist/lexicon/aup_audit.d.ts +74 -0
  6. package/dist/lexicon/aup_audit.d.ts.map +1 -0
  7. package/dist/lexicon/aup_audit.js +118 -0
  8. package/dist/lexicon/aup_audit.js.map +1 -0
  9. package/dist/lexicon/dual_surface.d.ts.map +1 -1
  10. package/dist/lexicon/dual_surface.js +27 -0
  11. package/dist/lexicon/dual_surface.js.map +1 -1
  12. package/dist/lexicon/index.d.ts +1 -0
  13. package/dist/lexicon/index.d.ts.map +1 -1
  14. package/dist/lexicon/index.js +1 -0
  15. package/dist/lexicon/index.js.map +1 -1
  16. package/dist/lexicon/lexicon.test.js +45 -0
  17. package/dist/lexicon/lexicon.test.js.map +1 -1
  18. package/dist/lexicon/mappings.d.ts +4 -2
  19. package/dist/lexicon/mappings.d.ts.map +1 -1
  20. package/dist/lexicon/mappings.js +31 -0
  21. package/dist/lexicon/mappings.js.map +1 -1
  22. package/dist/notifier/agent_files.js +2 -2
  23. package/dist/notifier/agent_files.js.map +1 -1
  24. package/dist/pulse.d.ts.map +1 -1
  25. package/dist/pulse.js +23 -5
  26. package/dist/pulse.js.map +1 -1
  27. package/dist/truth_gate/claims.d.ts.map +1 -1
  28. package/dist/truth_gate/claims.js +7 -0
  29. package/dist/truth_gate/claims.js.map +1 -1
  30. package/dist/truth_gate/probes.d.ts.map +1 -1
  31. package/dist/truth_gate/probes.js +78 -0
  32. package/dist/truth_gate/probes.js.map +1 -1
  33. package/dist/upgrade_visibility/index.d.ts +1 -0
  34. package/dist/upgrade_visibility/index.d.ts.map +1 -1
  35. package/dist/upgrade_visibility/index.js +1 -0
  36. package/dist/upgrade_visibility/index.js.map +1 -1
  37. package/dist/upgrade_visibility/notify_state.d.ts +51 -0
  38. package/dist/upgrade_visibility/notify_state.d.ts.map +1 -0
  39. package/dist/upgrade_visibility/notify_state.js +88 -0
  40. package/dist/upgrade_visibility/notify_state.js.map +1 -0
  41. package/dist/upgrade_visibility/notify_state.test.d.ts +11 -0
  42. package/dist/upgrade_visibility/notify_state.test.d.ts.map +1 -0
  43. package/dist/upgrade_visibility/notify_state.test.js +60 -0
  44. package/dist/upgrade_visibility/notify_state.test.js.map +1 -0
  45. package/package.json +1 -1
@@ -30,6 +30,7 @@
30
30
  export { acquireLock, releaseLock, readLock, isLocked, formatLock, type LockState, type AcquireResult, type AcquireOptions, } from "./mutex.js";
31
31
  export { recordUpgrade, listUpgrades, lastFailure, lastSuccess, verifyChain, formatUpgradeLog, type UpgradeEntry, type RecordUpgradeOptions, } from "./exit_log.js";
32
32
  export { isInsideNpmInstall, isUpgradeSafeRightNow, formatDetection, type DetectionResult, } from "./npm_detector.js";
33
+ export { classifyUpgradeSeverity, shouldSurfaceUpgrade, upgradeAlreadyNotified, markUpgradeNotified, readNotifyState, type UpgradeSeverity, type NotifyState, } from "./notify_state.js";
33
34
  import { lastFailure, lastSuccess } from "./exit_log.js";
34
35
  /** One-shot doctor: is it safe to attempt an upgrade right now? Pure
35
36
  * read-only — never mutates state. */
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/upgrade_visibility/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4BG;AAEH,OAAO,EACL,WAAW,EAAE,WAAW,EAAE,QAAQ,EAAE,QAAQ,EAAE,UAAU,EACxD,KAAK,SAAS,EAAE,KAAK,aAAa,EAAE,KAAK,cAAc,GACxD,MAAM,YAAY,CAAC;AAEpB,OAAO,EACL,aAAa,EAAE,YAAY,EAAE,WAAW,EAAE,WAAW,EAAE,WAAW,EAAE,gBAAgB,EACpF,KAAK,YAAY,EAAE,KAAK,oBAAoB,GAC7C,MAAM,eAAe,CAAC;AAEvB,OAAO,EACL,kBAAkB,EAAE,qBAAqB,EAAE,eAAe,EAC1D,KAAK,eAAe,GACrB,MAAM,mBAAmB,CAAC;AAI3B,OAAO,EAAE,WAAW,EAAE,WAAW,EAAgB,MAAM,eAAe,CAAC;AAEvE;uCACuC;AACvC,MAAM,WAAW,mBAAmB;IAClC,KAAK,EAAE,OAAO,CAAC;IACf,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,aAAa,EAAE,UAAU,CAAC,OAAO,WAAW,CAAC,CAAC;IAC9C,aAAa,EAAE,UAAU,CAAC,OAAO,WAAW,CAAC,CAAC;IAC9C,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED,wBAAgB,aAAa,CAAC,QAAQ,EAAE,MAAM,GAAG,mBAAmB,CAiBnE;AAED,wBAAgB,YAAY,CAAC,CAAC,EAAE,mBAAmB,GAAG,MAAM,CAsB3D"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/upgrade_visibility/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4BG;AAEH,OAAO,EACL,WAAW,EAAE,WAAW,EAAE,QAAQ,EAAE,QAAQ,EAAE,UAAU,EACxD,KAAK,SAAS,EAAE,KAAK,aAAa,EAAE,KAAK,cAAc,GACxD,MAAM,YAAY,CAAC;AAEpB,OAAO,EACL,aAAa,EAAE,YAAY,EAAE,WAAW,EAAE,WAAW,EAAE,WAAW,EAAE,gBAAgB,EACpF,KAAK,YAAY,EAAE,KAAK,oBAAoB,GAC7C,MAAM,eAAe,CAAC;AAEvB,OAAO,EACL,kBAAkB,EAAE,qBAAqB,EAAE,eAAe,EAC1D,KAAK,eAAe,GACrB,MAAM,mBAAmB,CAAC;AAE3B,OAAO,EACL,uBAAuB,EAAE,oBAAoB,EAAE,sBAAsB,EAAE,mBAAmB,EAAE,eAAe,EAC3G,KAAK,eAAe,EAAE,KAAK,WAAW,GACvC,MAAM,mBAAmB,CAAC;AAI3B,OAAO,EAAE,WAAW,EAAE,WAAW,EAAgB,MAAM,eAAe,CAAC;AAEvE;uCACuC;AACvC,MAAM,WAAW,mBAAmB;IAClC,KAAK,EAAE,OAAO,CAAC;IACf,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,aAAa,EAAE,UAAU,CAAC,OAAO,WAAW,CAAC,CAAC;IAC9C,aAAa,EAAE,UAAU,CAAC,OAAO,WAAW,CAAC,CAAC;IAC9C,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED,wBAAgB,aAAa,CAAC,QAAQ,EAAE,MAAM,GAAG,mBAAmB,CAiBnE;AAED,wBAAgB,YAAY,CAAC,CAAC,EAAE,mBAAmB,GAAG,MAAM,CAsB3D"}
@@ -30,6 +30,7 @@
30
30
  export { acquireLock, releaseLock, readLock, isLocked, formatLock, } from "./mutex.js";
31
31
  export { recordUpgrade, listUpgrades, lastFailure, lastSuccess, verifyChain, formatUpgradeLog, } from "./exit_log.js";
32
32
  export { isInsideNpmInstall, isUpgradeSafeRightNow, formatDetection, } from "./npm_detector.js";
33
+ export { classifyUpgradeSeverity, shouldSurfaceUpgrade, upgradeAlreadyNotified, markUpgradeNotified, readNotifyState, } from "./notify_state.js";
33
34
  import { isUpgradeSafeRightNow } from "./npm_detector.js";
34
35
  import { isLocked, readLock } from "./mutex.js";
35
36
  import { lastFailure, lastSuccess, listUpgrades } from "./exit_log.js";
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/upgrade_visibility/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/upgrade_visibility/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,51 @@
1
+ /**
2
+ * v2.94.0 — WHISPER NOT NAG, precisely (the first ETHOS action · docs/ALETHEIA.md §XI).
3
+ *
4
+ * Removing a notice entirely would be hiding something important — ETHOS broken
5
+ * another way. The discipline is "speak proportional to importance, once per new
6
+ * fact": dedupe the upgrade notice BY VERSION (whisper once per new `latest`, then
7
+ * stay quiet until `latest` changes again), under SEVERITY TIERS:
8
+ * • security → surface ALWAYS (a duty, not a nag)
9
+ * • feature → whisper ONCE per new latest, then silent
10
+ * • cosmetic → inbox/glyph only (never the loud pulse block)
11
+ *
12
+ * It preserves the de-worm vow (v2.78): INFORM, never COMMAND; no auto-upgrade;
13
+ * manual-only; never hide a security upgrade. This only REDUCES repetition.
14
+ *
15
+ * Honest scope: severity is derived from the semver delta (the only thing knowable
16
+ * from installed-vs-npm-latest). "security" is an EXPLICIT-flag tier — Mneme does
17
+ * not pretend to auto-detect a security release from a version number; if a caller
18
+ * (or a future advisory feed) sets `security: true`, the always-surface duty fires.
19
+ */
20
+ export type UpgradeSeverity = "security" | "feature" | "cosmetic";
21
+ export interface NotifyState {
22
+ /** The `latest` version we last surfaced the loud upgrade notice for. */
23
+ lastNotifiedVersion: string | null;
24
+ lastNotifiedAt: number;
25
+ lastSeverity: UpgradeSeverity | null;
26
+ }
27
+ /**
28
+ * Classify the importance of an upgrade from the semver delta. A major OR minor
29
+ * bump is a "feature" (whisper once); a patch-only bump is "cosmetic" (inbox/glyph
30
+ * only). An explicit `security` flag overrides to the always-surface tier. If either
31
+ * version is unparseable, default to "feature" (safer to whisper once than to hide).
32
+ */
33
+ export declare function classifyUpgradeSeverity(current: string, latest: string, opts?: {
34
+ security?: boolean;
35
+ }): UpgradeSeverity;
36
+ /** Read the persisted notify-state. Never throws. */
37
+ export declare function readNotifyState(repoRoot: string): NotifyState;
38
+ /** True if we already surfaced the loud upgrade notice for this exact `latest`. Pure read. */
39
+ export declare function upgradeAlreadyNotified(repoRoot: string, latest: string): boolean;
40
+ /** Record that we surfaced the loud notice for `latest`. Best-effort; never throws. */
41
+ export declare function markUpgradeNotified(repoRoot: string, latest: string, severity: UpgradeSeverity, now?: number): void;
42
+ /**
43
+ * THE GATE — should the pulse surface the LOUD upgrade notice this turn?
44
+ * security → always (duty)
45
+ * cosmetic → never (inbox/glyph only)
46
+ * feature → only if this `latest` hasn't been surfaced yet (whisper once per new version)
47
+ * Pure read (does NOT mark — the caller marks once after deciding, to keep the
48
+ * [INFO] block and the inbox surfacing consistent within one pulse). Never throws.
49
+ */
50
+ export declare function shouldSurfaceUpgrade(repoRoot: string, latest: string, severity: UpgradeSeverity): boolean;
51
+ //# sourceMappingURL=notify_state.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"notify_state.d.ts","sourceRoot":"","sources":["../../src/upgrade_visibility/notify_state.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AAKH,MAAM,MAAM,eAAe,GAAG,UAAU,GAAG,SAAS,GAAG,UAAU,CAAC;AAElE,MAAM,WAAW,WAAW;IAC1B,yEAAyE;IACzE,mBAAmB,EAAE,MAAM,GAAG,IAAI,CAAC;IACnC,cAAc,EAAE,MAAM,CAAC;IACvB,YAAY,EAAE,eAAe,GAAG,IAAI,CAAC;CACtC;AAQD;;;;;GAKG;AACH,wBAAgB,uBAAuB,CAAC,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,GAAE;IAAE,QAAQ,CAAC,EAAE,OAAO,CAAA;CAAO,GAAG,eAAe,CAQ3H;AAID,qDAAqD;AACrD,wBAAgB,eAAe,CAAC,QAAQ,EAAE,MAAM,GAAG,WAAW,CAS7D;AAED,8FAA8F;AAC9F,wBAAgB,sBAAsB,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAEhF;AAED,uFAAuF;AACvF,wBAAgB,mBAAmB,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,eAAe,EAAE,GAAG,GAAE,MAAmB,GAAG,IAAI,CAM/H;AAED;;;;;;;GAOG;AACH,wBAAgB,oBAAoB,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,eAAe,GAAG,OAAO,CAIzG"}
@@ -0,0 +1,88 @@
1
+ /**
2
+ * v2.94.0 — WHISPER NOT NAG, precisely (the first ETHOS action · docs/ALETHEIA.md §XI).
3
+ *
4
+ * Removing a notice entirely would be hiding something important — ETHOS broken
5
+ * another way. The discipline is "speak proportional to importance, once per new
6
+ * fact": dedupe the upgrade notice BY VERSION (whisper once per new `latest`, then
7
+ * stay quiet until `latest` changes again), under SEVERITY TIERS:
8
+ * • security → surface ALWAYS (a duty, not a nag)
9
+ * • feature → whisper ONCE per new latest, then silent
10
+ * • cosmetic → inbox/glyph only (never the loud pulse block)
11
+ *
12
+ * It preserves the de-worm vow (v2.78): INFORM, never COMMAND; no auto-upgrade;
13
+ * manual-only; never hide a security upgrade. This only REDUCES repetition.
14
+ *
15
+ * Honest scope: severity is derived from the semver delta (the only thing knowable
16
+ * from installed-vs-npm-latest). "security" is an EXPLICIT-flag tier — Mneme does
17
+ * not pretend to auto-detect a security release from a version number; if a caller
18
+ * (or a future advisory feed) sets `security: true`, the always-surface duty fires.
19
+ */
20
+ import { existsSync, mkdirSync, readFileSync, writeFileSync } from "node:fs";
21
+ import { join } from "node:path";
22
+ function parseSemver(v) {
23
+ const m = /^v?(\d+)\.(\d+)\.(\d+)/.exec(String(v ?? "").trim());
24
+ if (!m)
25
+ return null;
26
+ return [parseInt(m[1], 10), parseInt(m[2], 10), parseInt(m[3], 10)];
27
+ }
28
+ /**
29
+ * Classify the importance of an upgrade from the semver delta. A major OR minor
30
+ * bump is a "feature" (whisper once); a patch-only bump is "cosmetic" (inbox/glyph
31
+ * only). An explicit `security` flag overrides to the always-surface tier. If either
32
+ * version is unparseable, default to "feature" (safer to whisper once than to hide).
33
+ */
34
+ export function classifyUpgradeSeverity(current, latest, opts = {}) {
35
+ if (opts.security === true)
36
+ return "security";
37
+ const c = parseSemver(current);
38
+ const l = parseSemver(latest);
39
+ if (!c || !l)
40
+ return "feature";
41
+ if (l[0] !== c[0] || l[1] !== c[1])
42
+ return "feature"; // major or minor delta
43
+ if (l[2] !== c[2])
44
+ return "cosmetic"; // patch-only delta
45
+ return "cosmetic"; // equal (shouldn't reach when updateAvailable)
46
+ }
47
+ function statePath(repoRoot) { return join(repoRoot, ".mneme", "upgrade_visibility", "notify-state.json"); }
48
+ /** Read the persisted notify-state. Never throws. */
49
+ export function readNotifyState(repoRoot) {
50
+ try {
51
+ const p = statePath(repoRoot);
52
+ if (existsSync(p)) {
53
+ const s = JSON.parse(readFileSync(p, "utf8"));
54
+ return { lastNotifiedVersion: s.lastNotifiedVersion ?? null, lastNotifiedAt: s.lastNotifiedAt ?? 0, lastSeverity: s.lastSeverity ?? null };
55
+ }
56
+ }
57
+ catch { /* */ }
58
+ return { lastNotifiedVersion: null, lastNotifiedAt: 0, lastSeverity: null };
59
+ }
60
+ /** True if we already surfaced the loud upgrade notice for this exact `latest`. Pure read. */
61
+ export function upgradeAlreadyNotified(repoRoot, latest) {
62
+ return readNotifyState(repoRoot).lastNotifiedVersion === String(latest ?? "");
63
+ }
64
+ /** Record that we surfaced the loud notice for `latest`. Best-effort; never throws. */
65
+ export function markUpgradeNotified(repoRoot, latest, severity, now = Date.now()) {
66
+ try {
67
+ const dir = join(repoRoot, ".mneme", "upgrade_visibility");
68
+ mkdirSync(dir, { recursive: true });
69
+ writeFileSync(statePath(repoRoot), JSON.stringify({ lastNotifiedVersion: String(latest ?? ""), lastNotifiedAt: now, lastSeverity: severity }), "utf8");
70
+ }
71
+ catch { /* */ }
72
+ }
73
+ /**
74
+ * THE GATE — should the pulse surface the LOUD upgrade notice this turn?
75
+ * security → always (duty)
76
+ * cosmetic → never (inbox/glyph only)
77
+ * feature → only if this `latest` hasn't been surfaced yet (whisper once per new version)
78
+ * Pure read (does NOT mark — the caller marks once after deciding, to keep the
79
+ * [INFO] block and the inbox surfacing consistent within one pulse). Never throws.
80
+ */
81
+ export function shouldSurfaceUpgrade(repoRoot, latest, severity) {
82
+ if (severity === "security")
83
+ return true;
84
+ if (severity === "cosmetic")
85
+ return false;
86
+ return !upgradeAlreadyNotified(repoRoot, latest);
87
+ }
88
+ //# sourceMappingURL=notify_state.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"notify_state.js","sourceRoot":"","sources":["../../src/upgrade_visibility/notify_state.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,11 @@
1
+ /**
2
+ * v2.94.0 — WHISPER, DON'T NAG (the first ETHOS action). notify-state tests.
3
+ *
4
+ * W1 classifyUpgradeSeverity — security flag · feature (major/minor) · cosmetic (patch)
5
+ * W2 feature bump → whisper ONCE per new latest; silent after; a NEW latest re-whispers
6
+ * W3 security → surface ALWAYS (a duty, never deduped)
7
+ * W4 cosmetic → never the loud block (inbox/glyph only)
8
+ * W5 de-worm vow preserved — the notice is never an auto-action; reducing repetition only
9
+ */
10
+ export {};
11
+ //# sourceMappingURL=notify_state.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"notify_state.test.d.ts","sourceRoot":"","sources":["../../src/upgrade_visibility/notify_state.test.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG"}
@@ -0,0 +1,60 @@
1
+ /**
2
+ * v2.94.0 — WHISPER, DON'T NAG (the first ETHOS action). notify-state tests.
3
+ *
4
+ * W1 classifyUpgradeSeverity — security flag · feature (major/minor) · cosmetic (patch)
5
+ * W2 feature bump → whisper ONCE per new latest; silent after; a NEW latest re-whispers
6
+ * W3 security → surface ALWAYS (a duty, never deduped)
7
+ * W4 cosmetic → never the loud block (inbox/glyph only)
8
+ * W5 de-worm vow preserved — the notice is never an auto-action; reducing repetition only
9
+ */
10
+ import { describe, it, expect } from "vitest";
11
+ import { mkdtempSync } from "node:fs";
12
+ import { tmpdir } from "node:os";
13
+ import { join } from "node:path";
14
+ import { classifyUpgradeSeverity, shouldSurfaceUpgrade, markUpgradeNotified, upgradeAlreadyNotified } from "./notify_state.js";
15
+ function repo() { return mkdtempSync(join(tmpdir(), "notify-")); }
16
+ describe("v2.94.0 WHISPER — upgrade notify-state (version-dedupe + severity)", () => {
17
+ it("W1 classifyUpgradeSeverity — security / feature(major,minor) / cosmetic(patch)", () => {
18
+ expect(classifyUpgradeSeverity("2.93.0", "2.94.0", { security: true })).toBe("security");
19
+ expect(classifyUpgradeSeverity("2.93.0", "3.0.0")).toBe("feature"); // major
20
+ expect(classifyUpgradeSeverity("2.93.0", "2.94.0")).toBe("feature"); // minor
21
+ expect(classifyUpgradeSeverity("2.93.0", "2.93.1")).toBe("cosmetic"); // patch only
22
+ expect(classifyUpgradeSeverity("2.93.0", "garbage")).toBe("feature"); // unparseable → safer to whisper
23
+ });
24
+ it("W2 feature bump → whisper ONCE per new latest; silent after; new latest re-whispers", () => {
25
+ const r = repo();
26
+ // first sight of 2.94.0 → surface
27
+ expect(shouldSurfaceUpgrade(r, "2.94.0", "feature")).toBe(true);
28
+ markUpgradeNotified(r, "2.94.0", "feature");
29
+ // same latest again → silent (the nag is gone)
30
+ expect(shouldSurfaceUpgrade(r, "2.94.0", "feature")).toBe(false);
31
+ expect(shouldSurfaceUpgrade(r, "2.94.0", "feature")).toBe(false);
32
+ expect(upgradeAlreadyNotified(r, "2.94.0")).toBe(true);
33
+ // a genuinely NEW latest → whisper once more
34
+ expect(shouldSurfaceUpgrade(r, "2.95.0", "feature")).toBe(true);
35
+ markUpgradeNotified(r, "2.95.0", "feature");
36
+ expect(shouldSurfaceUpgrade(r, "2.95.0", "feature")).toBe(false);
37
+ // ...but the OLD one stays silent (we moved on)
38
+ expect(upgradeAlreadyNotified(r, "2.95.0")).toBe(true);
39
+ });
40
+ it("W3 security → surface ALWAYS (a duty, never deduped)", () => {
41
+ const r = repo();
42
+ markUpgradeNotified(r, "2.94.0", "security");
43
+ // even already-notified, security surfaces every time
44
+ expect(shouldSurfaceUpgrade(r, "2.94.0", "security")).toBe(true);
45
+ expect(shouldSurfaceUpgrade(r, "2.94.0", "security")).toBe(true);
46
+ });
47
+ it("W4 cosmetic → never the loud block (inbox/glyph only)", () => {
48
+ const r = repo();
49
+ expect(shouldSurfaceUpgrade(r, "2.93.1", "cosmetic")).toBe(false);
50
+ expect(shouldSurfaceUpgrade(r, "2.93.2", "cosmetic")).toBe(false);
51
+ });
52
+ it("W5 reducing repetition only — distinct latests are tracked independently", () => {
53
+ const r = repo();
54
+ expect(upgradeAlreadyNotified(r, "2.94.0")).toBe(false);
55
+ markUpgradeNotified(r, "2.94.0", "feature");
56
+ expect(upgradeAlreadyNotified(r, "2.94.0")).toBe(true);
57
+ expect(upgradeAlreadyNotified(r, "2.95.0")).toBe(false); // a different version is its own decision
58
+ });
59
+ });
60
+ //# sourceMappingURL=notify_state.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"notify_state.test.js","sourceRoot":"","sources":["../../src/upgrade_visibility/notify_state.test.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@mneme-ai/core",
3
- "version": "2.93.0",
3
+ "version": "2.95.0",
4
4
  "description": "Core indexing, retrieval, and graph engine for Mneme",
5
5
  "type": "module",
6
6
  "main": "./dist/index.js",