Repository navigation
fix(ticket-117): preserve JetBrains Local History during cleanup - #150
Conversation
There was a problem hiding this comment.
Validator approval after policy checks for exact head e93e8502b663355cb29c7a2004688dded1292f39.
Ticket: ticket-117
Correlation ID: fixos117-e93e850-20261031
Model: zai/glm-5.3
Reviewed diff chunks: 2
Advisory LLM verdict: APPROVE
Advisory summary: Reviewed all 2 diff chunk(s). Change removes unsafe bulk deletion of ~/.cache/JetBrains roots (which can contain irreplaceable LocalHistory and Toolbox/recovery state) from the explicit --jetbrains cleanup path, while preserving stale Toolbox channel and unused version-data cleanup. Help text, policy table, JSON previews, and CLI docs are consistently updated, and a user-facing advisory explains the protection. Tests cover preservation under --yes and absence of cache roots in JSON output. All required checks passed. | This chunk shows test coverage asserting that JetBrains cleanup excludes cache-root candidates from the deletion plan and surfaces a LocalHistory advisory, matching the PR's stated protective intent. The test parses JSON CLI output, verifies exit code 0, checks no candidate paths fall under the cache root, and confirms the advisory mentions LocalHistory. No code defects or security concerns are visible in this chunk, and all required checks passed.
Advisory findings: none
The LLM output above is advisory and was not used as the approval trust root.
Semantic review prerequisite: not_required; policy 676cb4516bbfed2a000e40b9b1b6e4a430ecc761ec546aeb53d721a1905cfdd7.
Actual PR impact radar
Exact range: dc5de059fe93ddce373c048499976242abfaa167...e93e8502b663355cb29c7a2004688dded1292f39
Change digest: 0fb77c2ef09198a880dd98204433fa65f82517249e3ecb6dde4a6b6af5b12853
Score: 68/100 (L), estimated 84 min, split recommended: true
Affected services/components: repository-wide/unclassified
Machine-readable radar JSONL and SVG
{"actual_change":{"additions":175,"base_sha":"dc5de059fe93ddce373c048499976242abfaa167","binary_files":0,"categories":{"code":2,"configuration":1,"docs":1,"tests":1},"change_digest":"0fb77c2ef09198a880dd98204433fa65f82517249e3ecb6dde4a6b6af5b12853","comparison":"dc5de059fe93ddce373c048499976242abfaa167...e93e8502b663355cb29c7a2004688dded1292f39","deletions":24,"file_count":5,"files":["fixos/cli/_cleanup_space.py","fixos/cli/cleanup_cmd.py","project/ticket-117/README.md","project/ticket-117/intent.json","tests/unit/test_cleanup_space.py"],"head_sha":"e93e8502b663355cb29c7a2004688dded1292f39","service_count":0,"services":[]},"assessment_mode":"observed-pr","axes":{"coupling":5,"delivery":3,"scope":4,"uncertainty":3,"validation":2},"complexity":"L","confidence":0.9,"diagnostics":["RADAR-ACCEPTANCE-MISSING","RADAR-BUDGET-EXCEEDED"],"estimate":{"budget_minutes":30,"minutes":84,"within_budget":false},"impact":{"components":["Toolbox","deletion","fixos","installation","project","tests","text"],"files":["Toolbox/recovery","deletion/unsafe","fixos/cli/_cleanup_space.py","fixos/cli/cleanup_cmd.py","installation/version-data","project/ticket-117/README.md","project/ticket-117/intent.json","tests/unit/test_cleanup_space.py","text/JSON"],"public_interfaces":[],"runtime_dependencies":0},"schema":"subactor.ticket-radar/v1","score":68,"split":{"parts":[{"estimated_minutes":11,"name":"Implement Toolbox","scope":["Toolbox"]},{"estimated_minutes":11,"name":"Implement deletion","scope":["deletion"]},{"estimated_minutes":11,"name":"Implement fixos","scope":["fixos"]},{"estimated_minutes":11,"name":"Implement installation","scope":["installation"]},{"estimated_minutes":11,"name":"Implement project","scope":["project"]},{"estimated_minutes":15,"name":"Validate and project to trackers","scope":["tests","planfile","github/gitlab/jira projections"]}],"reason":"estimated_minutes_exceed_budget","recommended":true},"standards":[{"id":"wellmanifest/dsl","revision":"6c60fc4e0dd1f1bb74f46a7745e28019908d1203","version":"0.1.0-dev"},{"id":"wellmanifest/ticket-lifecycle","revision":"5bf581907a87b46a13a73e6c033d3abe4d9a306f","version":"0.1.0-dev"},{"id":"wellmanifest/git-lifecycle","revision":"7d77d4b7af57e69bc75c3a0290b3a4805c5c4438","version":"0.2.0-dev"},{"id":"wellmanifest/logs","revision":"48c284ef7a069055c0bcb6b900147ce5e65f8b43","version":"0.3.0"}],"ticket_ref":"ticket-117"}<svg xmlns="http://www.w3.org/2000/svg" width="128" height="128" viewBox="0 0 128 128" role="img"><title>ticket-117: fix(ticket-117): preserve JetBrains Local History during cleanup</title><rect width="128" height="128" rx="12" fill="#f8fafc"/><g stroke-width="1"><polygon points="64,55 72,61 69,71 59,71 56,61" fill="none" stroke="#d7dde5"/><polygon points="64,47 80,59 74,78 54,78 48,59" fill="none" stroke="#d7dde5"/><polygon points="64,38 89,56 79,85 49,85 39,56" fill="none" stroke="#d7dde5"/><polygon points="64,30 97,53 84,92 44,92 31,53" fill="none" stroke="#d7dde5"/><polygon points="64,21 105,51 89,99 39,99 23,51" fill="none" stroke="#d7dde5"/><line x1="64" y1="64" x2="64" y2="21" stroke="#aab4c0"/><line x1="64" y1="64" x2="105" y2="51" stroke="#aab4c0"/><line x1="64" y1="64" x2="89" y2="99" stroke="#aab4c0"/><line x1="64" y1="64" x2="39" y2="99" stroke="#aab4c0"/><line x1="64" y1="64" x2="23" y2="51" stroke="#aab4c0"/></g><polygon points="64,30 105,51 79,85 54,78 39,56" fill="#fb923c" fill-opacity="0.45" stroke="#c2410c" stroke-width="2"/><circle cx="64" cy="64" r="3" fill="#c2410c"/><g font-family="sans-serif" font-size="7" fill="#334155"><text x="64" y="11" text-anchor="middle">SCO</text><text x="114" y="48" text-anchor="middle">COU</text><text x="95" y="107" text-anchor="middle">UNC</text><text x="33" y="107" text-anchor="middle">VAL</text><text x="14" y="48" text-anchor="middle">DEL</text></g><text x="64" y="124" text-anchor="middle" font-family="sans-serif" font-size="8" fill="#0f172a">L · 84m</text></svg>DECISION D-117-4513
TICKET ticket-117
HEAD_SHA e93e8502b663355cb29c7a2004688dded1292f39
CORRELATION_ID fixos117-e93e850-20261031
ACTOR agent:ifuri-validator-agent[bot]
APPLIED_RULE P-CORE-015
INPUT author_login = "tom-sapletta-com"
INPUT observed_checks = ["test-summary=PASS","test-alpine=PASS","test-ubuntu=PASS","test-debian=PASS","test-fedora=PASS","test-arch=PASS","governance / remote lifecycle=PASS","test (3.12)=PASS","test (3.11)=PASS","governance / enforce=PASS","test (3.10)=PASS","onedev/local-verify=PASS"]
INPUT required_checks = ["onedev/local-verify","test (3.10)","test (3.11)","test (3.12)","test-summary"]
INPUT required_checks_source = "protected registry (env/request)"
INPUT reviewer_login = "ifuri-validator-agent[bot]"
INPUT semantic_review_assessment = {"schema":"subactor.validator/semantic-review-assessment/v1","subject":{"repository":"semcod/fixos","pull_request":150,"head_sha":"e93e8502b663355cb29c7a2004688dded1292f39","base_sha":"dc5de059fe93ddce373c048499976242abfaa167","diff_sha256":"4d21b4dbea6a2a161de4967e69b4ac2b9b1d62b2a80c91e151cac89445635ca9"},"policy":{"policy_schema":"subactor.validator/semantic-review-policy/v1","policy_version":1,"policy_sha256":"676cb4516bbfed2a000e40b9b1b6e4a430ecc761ec546aeb53d721a1905cfdd7","required":false,"critical_paths":[],"observed_paths":["fixos/cli/_cleanup_space.py","fixos/cli/cleanup_cmd.py","project/ticket-117/README.md","project/ticket-117/intent.json","tests/unit/test_cleanup_space.py"]},"grounding":"full-diff-not-per-finding-proof","execution_authority":false,"status":"not_required","reason":null,"review_sha256":null,"unresolved":[]}
INPUT superseded_checks = []
INPUT ticket_radar_receipt = {"schema":"subactor.ticket-radar/v1","base_sha":"dc5de059fe93ddce373c048499976242abfaa167","head_sha":"e93e8502b663355cb29c7a2004688dded1292f39","change_digest":"0fb77c2ef09198a880dd98204433fa65f82517249e3ecb6dde4a6b6af5b12853","score":68,"complexity":"L","estimated_minutes":84,"split_recommended":true,"services":[],"authority":"ADVISORY","promotion":"FORBIDDEN"}
VERDICT APPROVE AUTHORITY DETERMINISTIC
REJECTED REQUEST_CHANGES BECAUSE NO_UNSAFE_CHANGE_REASON_FOUND
ADVISORY llm_verdict = "APPROVE" MODEL "zai/glm-5.3"
ASSERT VERDICT_AUTHORITY != "ADVISORY"
The explicit JetBrains cleanup command selected whole IDE system-cache roots. Running --jetbrains --yes could delete LocalHistory file revisions and Toolbox/recovery state. Exclude these mixed roots from bulk candidates, explain the protection in text/JSON previews, and update the existing help and cleanup description. Existing stale installation/version-data eligibility remains.
Ticket: ticket-117
Validation: three regressions reproduced the original deletion/unsafe preview. All 58 affected tests pass, including preservation of real fixture file bytes and continued stale channel removal. Changed-file Ruff passes; managed governance and protected full checks validate the final commit. Deployment performs no cleanup of host IDE data.