fix: release Windows ACL temp-path memos - #840
Conversation
|
Important Review skippedDraft detected. Please check the settings in the CodeRabbit UI or the ⚙️ Run configurationConfiguration used: Path: .coderabbit.yaml Review profile: ASSERTIVE Plan: Pro Plus Run ID: You can disable this status message by setting the Use the checkbox below for a quick retry:
Comment |
|
Maintainer triage: this is a valuable focused fix. It removes the confirmed Windows process-lifetime temp-path memo leak while preserving fail-closed handling when a residual file remains, and the focused coverage is broad across the affected write paths. The branch currently conflicts with |
|
Superseded by #892, which implements this defect's fix natively on top of the wave-1 retained-state framework (the PR's shape was used as a reference; see the PR description in #892 for the defect-specific deltas, including where the framework already covered part of it). Thank you for the contribution — the analysis in this PR drove the fix. |
Campaign preparation (docs-only): five units under devlog/_plan/260802_wtN_* with 000 research + 010 implementation roadmaps, claim ledgers verified by a lunasearch fan-out (Anthropic 1M windows, Copilot mixed-wire, DeepSeek service_tier, WHATWG extension origins, POSIX rename-over-symlink). wt1 update-path: PR lidge-jun#871, issue lidge-jun#879 (star-prompt deferral leakage), lidge-jun#557 optional wt2 zero-leak: PRs lidge-jun#840 lidge-jun#841 lidge-jun#843 lidge-jun#844 lidge-jun#845 lidge-jun#847 (tracker lidge-jun#820) wt3 provider-wire: PRs lidge-jun#746 lidge-jun#860 lidge-jun#839/lidge-jun#854, issue lidge-jun#875 triage, lidge-jun#616/lidge-jun#837 optional wt4 server-config: PRs lidge-jun#850 (CORS origin confusion), lidge-jun#869 (symlink destruction) wt5 windows-service: PRs lidge-jun#868, lidge-jun#861 (issue lidge-jun#848)
… bounds Three explorer passes found wave-1 landings already on dev (77243d9 framework, d1408b9 continuation cap+spill, 034d320 cache caps, a616078 translator budgets), so the campaign narrows to refinements: lidge-jun#841 admission boundary (direct-spill oversized, bounded snapshot read, bounded replay), lidge-jun#847 collector per-call scope + mandatory budget + 502 normalization, lidge-jun#844 incremental frames + typed partial-EOF, lidge-jun#845 NOOP (superseded), lidge-jun#843 fixed-size SHA-256 key identities, lidge-jun#840 ACL timeout-memo release + destination keying.
…tion The sync atomic writer hardened each unique temp without a destination memo key, so one ACL timeout minted a permanent required:<unique-temp> memo per write; forgetHardenedSecretPath only cleared the success set. forgetEphemeralSecretPath now releases the success memo and both timeout namespaces for a proven-absent temp (rename, unlink, ENOENT), wired through every atomic writer, the OpenAI tier backups, response spills, tray replacements, and management tokens. Sync config writes, tray, management-auth, and prompt-journal temps key their timeouts by the stable destination, matching the async writer — destination memos are intentional anti-restall state and are never touched by the ephemeral release. Refines lidge-jun#840.
Summary
Part of #820. This intentionally extracts the confirmed Windows leak into a focused change instead of coupling it to #829.
Verification
bun run typecheckbun run privacy:scanbun test tests/windows-secret-acl.test.ts tests/config.test.ts tests/server-management-auth.test.ts tests/windows-tray.test.ts(167 pass)react,react/jsx-dev-runtime)Compatibility
Stable destination/directory memo behavior and fail-closed ACL policy are unchanged. Only one-shot temp path entries are released after rename/unlink or proven
ENOENT.