From 142897cd9f9fac0c4530a1ab1d4487bdefcc0665 Mon Sep 17 00:00:00 2001 From: ghost <49853598+JSONbored@users.noreply.github.com> Date: Sat, 13 Jun 2026 16:10:37 -0700 Subject: [PATCH] fix: harden manifest public-safe filter --- src/signals/focus-manifest.ts | 2 +- test/unit/focus-manifest.test.ts | 13 +++++++++++++ test/unit/policy-sanitizer.test.ts | 4 ++++ 3 files changed, 18 insertions(+), 1 deletion(-) diff --git a/src/signals/focus-manifest.ts b/src/signals/focus-manifest.ts index 3ef6889da5..7fa821f6e4 100644 --- a/src/signals/focus-manifest.ts +++ b/src/signals/focus-manifest.ts @@ -161,7 +161,7 @@ const EMPTY_MANIFEST: FocusManifest = { * text must not leak reward, wallet/key, ranking, or local filesystem path material. */ export function isFocusManifestPublicSafe(text: string): boolean { - return !/\b(reward\w*|score\w*|wallet|hotkey|coldkey|mnemonic|farming|payout|ranking|raw[-\s]?trust|trust score|private[-\s]?reviewability|reviewability)\b|\/Users\/|\/home\/|\/tmp\/|[A-Z]:\\Users\\/i.test(text); + return !/\b(reward\w*|score\w*|wallets?|hotkeys?|coldkeys?|seed[-\s]?phrases?|mnemonics?|private[-\s]?keys?|farming|payouts?|rankings?|raw[-\s]?trust(?:[-\s]?scores?)?|trust[-\s]?scores?|private[-\s]?reviewability|reviewability(?:[-\s]?internals?)?|private[-\s]?scoreability|scoreability|public[-\s]?score[-\s]?(?:estimate|prediction|claim)s?|estimated[-\s]?scores?|score[-\s]?(?:estimate|prediction|preview)s?)\b|\/Users\/|\/home\/|\/tmp\/|[A-Z]:\\Users\\/i.test(text); } function emptyManifest(source: FocusManifestSource, warnings: string[] = []): FocusManifest { diff --git a/test/unit/focus-manifest.test.ts b/test/unit/focus-manifest.test.ts index de34a61e6d..f7a1027e5c 100644 --- a/test/unit/focus-manifest.test.ts +++ b/test/unit/focus-manifest.test.ts @@ -856,6 +856,19 @@ describe("parseFocusManifest review config", () => { expect(m.warnings.some((w) => /review\.note.*public-safe/.test(w))).toBe(true); }); + it("drops review override terms covered by the public comment sanitizer", () => { + const m = parseFocusManifest({ + review: { + footer: { text: "Maintainer note: include seed phrase details." }, + note: "Intro note mentions private rankings.", + }, + }); + expect(m.review.footerText).toBeNull(); + expect(m.review.note).toBeNull(); + expect(m.warnings.some((w) => /review\.footer\.text.*public-safe/.test(w))).toBe(true); + expect(m.warnings.some((w) => /review\.note.*public-safe/.test(w))).toBe(true); + }); + it("ignores invalid field toggles and non-mapping footer/fields with warnings", () => { const m = parseFocusManifest({ review: { footer: ["nope"], fields: "nope" } }); expect(m.review.present).toBe(false); diff --git a/test/unit/policy-sanitizer.test.ts b/test/unit/policy-sanitizer.test.ts index d06c9a46e7..b83dabd26c 100644 --- a/test/unit/policy-sanitizer.test.ts +++ b/test/unit/policy-sanitizer.test.ts @@ -391,12 +391,16 @@ describe("compileFocusManifestPolicy — public-safe output boundaries", () => { "hotkey abc123", "coldkey xyz", "mnemonic phrase", + "seed phrase", + "private key", "payout estimate", "reward estimate value", "raw trust score", "trust score context", "farming strategy", "private reviewability", + "private rankings", + "rankings", "score context", "scored output", ];