Say the right thing about risk, and stop reading whole repos to draw a row - #85
Merged
Conversation
…a row Six defects from review, all in the 작업 screen shipped by 69a318c. The warning marker was wrong in both directions at once, for two independent reasons. `protectedWorktrees` filtered on `verdict != "reclaimable"`, and `reclaimable` is not a value scree emits -- the vocabulary is `protected` / `rebuildable` / `unreadable`. The filter therefore matched everything, and every rebuildable worktree was reported as work the user must protect. `unreadable` now has its own name: it is not safe, but calling it protected claims knowledge nobody has. Git state came from `ArchiveCandidate`, which `rankCandidates` builds by dropping `.unsafe` repos. That is right for "what could be retired" and exactly wrong as a project's git state, because dirty trees, unpushed commits and missing remotes are what make a repo unsafe -- so the repos carrying the most valuable work disappeared and were drawn as having nothing wrong, while clean long-dormant repos got a warning triangle for being dormant, which is the very reason they are good candidates. Repo assessment and retirement eligibility are now separate: every scanned repo keeps its verdict, `isRetirementEligible` decides whether there is a retirement to review, and dormancy is stated as a note rather than a risk. Expanding a project read every transcript in it. `shown` was `expanded ? project.conversations : prefix(3)`, so one click on a repo holding 2,767 sessions built 2,767 rows and handed all of their paths to the title reader. The previous commit called that "bounded to what is visible"; expanded is the whole project, not the viewport. Now a page at a time, which keeps the two-click path and bounds the read to what is actually shown. Three more, smaller but the same kind of mistake: - Conversations whose workspace could not be resolved were dropped by the builder, and a test had fixed that as intended. The Gemini collector deliberately leaves the workspace empty rather than guessing, so this discovered conversations and then hid them. They now group under 연결되지 않은 대화, sorted last. - Project identity was case-sensitive, regressing the case folding scree's lineage does for a documented reason: macOS is case-insensitive by default and each provider records its own casing, so one folder became two projects. Keyed on the folded path now, displayed with its real spelling. - Project grouping derived its roots from retirement candidates, which made "does /repo/subdir belong to /repo" depend on whether /repo survived the archive classifier. Roots now come from every git path the audit saw. The retirement sheet was using the browser's grouping to answer a retirement question. It shows the binder's own result again -- binding count by confidence, and coverage -- and refuses to conclude "nothing would be lost" from an incomplete pass. Its title said "은퇴하시겠습니까?" over a permanently disabled primary button, which is a confirmation dialog that cannot confirm; it reviews, and now says so. Python 633 · Modore 261 · MothballCore 120. The release audit caught two local user paths in the new comments and tests; fixed.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Six defects from review of
69a318c, in priority order.The warning marker was wrong in both directions, for two independent reasons
Wrong vocabulary.
protectedWorktreesfiltered onverdict != "reclaimable"— andreclaimableis not a value scree emits. The vocabulary isprotected/rebuildable/unreadable, so the filter matched everything and every rebuildable worktree was reported as work the user must protect.unreadablenow gets its own name and its own row: not safe, but calling it protected claims knowledge nobody has.Wrong authority. Git state came from
ArchiveCandidate, whichrankCandidatesbuilds by dropping.unsaferepos. Right for "what could be retired", exactly wrong as a project's git state — dirty trees, unpushed commits and missing remotes are what makes a repo unsafe:assessReposkeeps every scanned repo;isRetirementEligibledecides whether there is a retirement to review.Expanding a project read every transcript in it
shownwasexpanded ? project.conversations : prefix(3). One click on a repo holding 2,767 sessions built 2,767 rows and handed all their paths to the title reader. The previous commit called this "bounded to what is visible" — expanded is the whole project, not the viewport. Now a page (50) at a time with 더 보기, which keeps the two-click path and bounds the read to what is on screen.Three more of the same kind
연결되지 않은 대화, sorted last./repo/subdirbelong to/repo" depend on whether/reposurvived the archive classifier. Roots now come from every git path the audit saw.Retirement sheet
It was answering a retirement question with the browser's grouping. It shows the binder's own result again — binding count by confidence, plus coverage — and refuses to conclude "nothing would be lost" from an incomplete pass. Title said "은퇴하시겠습니까?" over a permanently disabled primary button; that is a confirmation dialog that cannot confirm, so it now reads as a review with a single 닫기.
Verification
--check-onlyclean.