Twinned from https://github.com/cfsh/ninefold/issues/672 by tools/beads/import_github.py's reconcile pass.
Suggestions from ninefold-reviewer's review of #645 (87cd3e8, CONVERGED). All below the gate's severity floor — none of them blocks anything. #661 was the first round and is closed; this is what is left after it, plus what the last two commits added.
Two are the same shape as F3, the sharpest finding on that PR: a check that returns PASS having measured nothing. Neither is reachable through wrap_up.py today; both are reachable through reap.py (#647), which runs the same checks against sessions nobody has local knowledge of.
check_commits: a successful rev-list whose output is not a number reads as zero. tools/nflib/sessions.py, counts.append((tree, int(text) if text.isdigit() else 0)). result.ok and non-numeric output is the one combination that lands on the permissive side of a delete decision — *no commit exists only here* — with nothing having been counted. git rev-list --count either fails or prints an integer, so it is unreachable today; that is also exactly why it would be missed if it ever stopped being. UNPROVEN is the right answer, alongside the not result.ok arm two lines up.check_clean returns PASS for a session with no registered worktrees. The loop over session.trees does nothing and the detail reads 0 tree(s) clean, ignored build output aside. wrap_up.py cannot reach it (locate refuses without a registered worktree), but survey does group a stray-only session and reap.py audits those. Nothing is removed in that state, so the cost is a report line asserting a proof that did not run — F3's shape at a much smaller radius.check_tracked_file's UNPROVEN message names a slug nobody has. slug = slug_for(session.worktree or session.root). With no own tree that renders the *devs root's* slug, which no scratchpad ever lives under — in the one message whose whole job is to tell a human where to look.wrap_up.py's main() catches ProcError but not the ValueError Gh.json raises on non-JSON output from a *successful* gh. The removal path is covered (tidy_branch swallows both), but during the audit phase it escapes as a traceback. Nothing has been removed by then, so it is cosmetic; one more except next to the existing one.ChecklistSurfacesTest.NOT_CHECKLISTS can hold an entry for a file that does not exist. tools/office/reap.py is listed there and lands only in #647 — deliberate, and correct the moment that PR merges. But nothing fails if an entry outlives its file, which is the same silent drift the test itself exists to catch. An existence assertion over the entries meant to exist closes it.Unclaimed and unlabelled — inert backlog, per CLAUDE.md.
None.
No comments.