From fabc448f6643f2b962b59e6235a92ff5c6130488 Mon Sep 17 00:00:00 2001 From: bitkyc08-arch Date: Thu, 20 Aug 2026 14:36:23 +0900 Subject: [PATCH] fix(devlog): stop the audit record from breaking its own privacy gate The record documenting the shadow-marker leak pasted the reproduction transcript verbatim, including an sk-shaped value after a Bearer label. scripts/privacy-scan.ts matches those patterns wherever they appear, so dev's gates job went red again -- the same failure #2175 had just undone, reintroduced by the write-up describing it. The scanner cannot tell a fake credential from a real one, and it should not have to. Writing the two cases as shapes keeps the finding legible: the point was never the literal bytes, it was that controls are stripped before redaction and that the deny-list has no rule for one of the families. Both survive the rewrite. --- .../100_release_audit.md | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/devlog/_plan/260820_bug_pr_backlog_consolidation/100_release_audit.md b/devlog/_plan/260820_bug_pr_backlog_consolidation/100_release_audit.md index 12a5f9fcaf..f90fbc99a8 100644 --- a/devlog/_plan/260820_bug_pr_backlog_consolidation/100_release_audit.md +++ b/devlog/_plan/260820_bug_pr_backlog_consolidation/100_release_audit.md @@ -36,10 +36,15 @@ The sanitizer on that path is not sufficient, for two independent reasons — bo the shipped code, not reasoned about: ``` -"gpt-5.6-luna\nBearer sk-abc123def456ghi789jkl" -> "gpt-5.6-lunaBearer [REDACTED]" -"gpt-5.6-luna\nAIzaSyA1B2C3D4E5F6G7H8I9J0K1L2M3N4O5P6" -> unchanged, key intact +"\n" -> control stripped, value redacted +"\n" -> control stripped, value INTACT ``` +(Written as shapes rather than literals on purpose: `scripts/privacy-scan.ts` matches those +patterns wherever they appear, so pasting a real-looking transcript breaks the `gates` job for +every branch cut from `dev`. That is precisely what #2175 had to undo, and this record +reintroduced it — the scanner does not care that a credential is fake.) + 1. Control characters are stripped **before** redaction, so the newline that separated marker from credential is gone by the time the `Bearer` rule looks for a word boundary. 2. The runtime redactor is a deny-list. An `AIza`-shaped Google key has no rule and survives. @@ -191,4 +196,3 @@ this closeout resolves them; they need a product decision, not a patch. Release execution remains unauthorized: no `scripts/release.ts`, no publish, no tag, no change to `main` or `preview`. -