security: fail cache-trash permanent deletion closed - #263
Conversation
|
Note Reviews pausedIt looks like this branch is under active development. To avoid overwhelming you with review comments due to an influx of new commits, CodeRabbit has automatically paused this review. You can configure this behavior by changing the Use the following commands to manage reviews:
Use the checkboxes below for quick actions:
No actionable comments were generated in the recent review. 🎉 ℹ️ Recent review info⚙️ Run configurationConfiguration used: Organization UI Review profile: CHILL Plan: Pro Plus Run ID: 📒 Files selected for processing (5)
Included review availability: Your plan provides up to 1 included review per hour; 0 remain after this review. 📝 WalkthroughWalkthrough캐시 Trash 영구 삭제 경로를 제거하고 읽기 전용 증거 수집과 fail-closed 오류 반환으로 전환했습니다. 비 macOS Unix에서는 유효한 Changes캐시 Trash fail-closed 전환
릴리스 아티팩트 검증
Estimated code review effort: 4 (Complex) | ~45 minutes Merge Risk: 🟡 Moderate · up to The change makes permanent cache-Trash deletion fail closed and avoids treating browser profile roots as disposable cache, preventing unintended filesystem mutation. The current head is not merge-ready because required validation checks are still queued or pending and must reach terminal success before merge progression. Sequence Diagram(s)sequenceDiagram
participant CLI
participant CacheCleanup
participant FileSystem
CLI->>CacheCleanup: 읽기 전용 purge 조회 요청
CacheCleanup->>FileSystem: XDG Trash 또는 기본 Trash에서 후보 수집
FileSystem-->>CacheCleanup: 후보 목록과 스냅샷 반환
CacheCleanup-->>CLI: proven_cache_trash_snapshot과 proven_cache_trash 출력
CLI->>CacheCleanup: 실행 purge 요청
CacheCleanup-->>CLI: cache-trash-identity-bound-permanent-delete-unavailable 오류 반환
🚥 Pre-merge checks | ✅ 4 | ❌ 1❌ Failed checks (1 warning)
✅ Passed checks (4 passed)
Full details: Docstring CoverageExplanation Docstring coverage is 62.90% which is insufficient. The required threshold is 80.00%. Docstring coverage is scoped to functions touched by this diff. Analyzed 62 functions across 34 files. (1 skipped: 1 unsupported.)
✨ Finishing Touches 💡 1📝 Generate docstrings 💡
🧪 Generate unit tests (beta)
Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out. Comment |
7bd7540 to
50a897e
Compare
Pull request was converted to draft
|
Fresh stack repair: canonical parent #264 is now |
Scope
Canonical cache-Trash security repair for issue #170. This line owns the fail-closed irreversible-deletion boundary plus directly required cache/provider identity contracts and operator/ADR evidence. Release/Test foundation remains owned by parent #264; canonical product/public documentation remains downstream in #315.
Current exact state — 2026-09-05 KST
main:0e90f9cebadbd7f59606baaec4ca1d2f178c899a;3e33229b4157a084a1985a1c7e952f98a64f25e3;d9b7fcf83bc0799fc9d53d0b739d87dfa42a54b6;scripts/ci/workflow-concurrency-contract.test.mjsandsrc/lib/releaseSbomPublicationContract.test.tscontract-test repairs; no cache-security production owner blob was overwritten;Security behavior
--purge-proven-cache-trashremains read-only review evidence.--execute --purge-proven-cache-trashfails closed withcache-trash-identity-bound-permanent-delete-unavailablebefore journal or filesystem mutation.ADR-0002 is superseded by Proposed ADR-0012 only for permanent cache-Trash deletion. Reversible per-item cleanup remains historical design context. A future irreversible implementation requires full descendant identity, approval freshness, stable object/directory-bound mutation authority, replacement-race proof, durable pending/terminal recovery without repeated deletion, strict candidate scope, and platform-specific evidence.
Fresh review of historical #303 found a separate provider-cache
PermanentPurgepath that still stages via pathnamefs::renamebefore irreversible removal. That older line is not an exception to this safety contract and remains Draft pending owner repair; it must not be merged around #263.Required before merge
#264 exact-head Release
33937972244is terminal success, while Test33937972239, Security Scan33937972188, SAST33937972193, and CodeQL33937972182remain queued. Keep Draft until #264 is integrated or equivalently present on protected lineage and one unchanged #263 exact head satisfies every applicable native/central Test/Release/Security/SAST/coverage/package/SBOM/provenance/review/ruleset gate with zero valid current findings. Pending, queued, skipped-required, failed, stale, predecessor, synthetic, status-only, model-only, or infrastructure-only evidence is non-passing. No self-approval, force-push, destructive rebase, gate weakening, or predecessor-evidence transfer.