diff --git a/plugins/codex-lcm/src/redact-assignments.ts b/plugins/codex-lcm/src/redact-assignments.ts index 2bb3fa4..607d1d9 100644 --- a/plugins/codex-lcm/src/redact-assignments.ts +++ b/plugins/codex-lcm/src/redact-assignments.ts @@ -57,7 +57,10 @@ export function isBenignTokenMetric(key: string, value: unknown): boolean { } export function shouldRedactSecretKey(key: string, value: unknown): boolean { - return isSecretAssignmentKey(key) && !isBenignTokenMetric(key, value); + const parts = keyParts(key); + return isSecretAssignmentKey(key) && + !isBenignTokenMetric(key, value) && + !(typeof value === "boolean" && parts.length === 1 && parts[0] === "private"); } function redactSecretAssignmentLine(value: string, path: string, redactions: RedactionRecord[]): string { diff --git a/plugins/codex-lcm/tests/redact.test.ts b/plugins/codex-lcm/tests/redact.test.ts index fac1882..db3b396 100644 --- a/plugins/codex-lcm/tests/redact.test.ts +++ b/plugins/codex-lcm/tests/redact.test.ts @@ -24,6 +24,13 @@ test("redacts secret-like object keys recursively", () => { assert.equal(result.truncations.length, 0); }); +test("preserves a benign private package flag", () => { + const result = sanitizeForStorage({ private: true }); + + assert.deepEqual(result.value, { private: true }); + assert.equal(result.redactions.length, 0); +}); + test("preserves benign token budget and count metadata", () => { const result = sanitizeForStorage({ token_budget: 1200,