diff --git a/docs/BACKLOG.md b/docs/BACKLOG.md index e3142125..26452540 100644 --- a/docs/BACKLOG.md +++ b/docs/BACKLOG.md @@ -2702,7 +2702,9 @@ Note the item is **not** "the scanner is broken" โ€” it is that the token *sourc ## 325. Leak gate's home-path detector is case-blind on Windows paths -> ๐Ÿ”ข **Filed 2026-08-01 โ€” not started.** Value **6/10** ยท Difficulty **2/10** ยท _quick win_. A structural detector in a required merge context โ€” the one control meant to work in a fork with no token source โ€” fires on one of four spellings of the same Windows home path (`_HOME_PATH` compiles with no flags and matches a literal `Users`, `scripts/security/scan_forbidden.py:99-106`), against the module's own "fail toward more detection" rule, though the disclosure is an OS account name and the tree holds zero live hits; an inline `(?i:)` on the drive-letter arm only (whole-pattern `re.I` measured 47 false positives), the sibling two-character `_WORKTREE_SLUG:92` edit, and casing fixtures beside the sole canonical-case test at `tests/test_scan_tokens_source.py:559-577`. +> โœ… **Closed 2026-08-05 โ€” shipped in #177 (commit `88703a3a`), an ancestor of `main`.** The fix and its regression tests landed folded into that batch, not on a branch of this item's name. The `_HOME_PATH` drive-letter arm case-folds inline (`scripts/security/scan_forbidden.py:114-121`) โ€” scoped to that arm, so the POSIX `/users/` REST route stays unmatched (whole-pattern `re.I` would have measured 47 false positives) โ€” and the sibling `_WORKTREE_SLUG` folds whole (`:96`); casing fixtures at `tests/test_scan_tokens_source.py:701,731` pass. Value **6/10** ยท Difficulty **2/10** ยท _quick win_. + +> **AMENDED 2026-08-05 โ€” the What / Why / Proposed / Source block below is the historical filing record, not current state.** Read it as the finding that scoped this work, not as a live gap: the fix and its regression tests shipped in #177 (see the CLOSED banner above). The `_HOME_PATH` snippet quoted under **What** (a literal `Users`, compiled with no flags) is the PRE-fix pattern; the shipped detector folds the drive-letter arm inline at `scripts/security/scan_forbidden.py:114-121` and the `_WORKTREE_SLUG` sibling folds whole at `:96`. The four-spelling FIRES/MISSED table records the pre-fix behaviour, the **Proposed** steps are all built, and the line anchors together with the "Verified open at HEAD (`12efbffc`)" line reflect the state at filing, not today. > **Note on the examples below.** Every path here writes the account segment as the placeholder ``, because `_HOME_PATH`'s negative lookahead exempts a segment beginning `<` โ€” a literal account name in this item would trip the very gate it describes. Read `` as "a real login name"; the FIRES/MISSED column describes what happens once one is substituted. This is [#322](BACKLOG.md) in miniature: a placeholder written into tracked prose is itself scanned.