Twinned from https://github.com/cfsh/ninefold/issues/661 by tools/beads/import_github.py's reconcile pass.
Suggestions from ninefold-reviewer's review of #645 (tools/pr/wrap_up.py + nflib/sessions.py). All four are below that review's severity floor — none changes a verdict or risks work — but they sit in one place: a *line* claiming something the check behind it did not establish, in a module whose whole design axis is 'an absence of evidence is not a pass'. Unclaimed.
1. check_tracked_file's PASS line asserts a result check_prs just contradicted. In tools/nflib/sessions.py, the if session.tracked: branch returns PASS with *'lists … — all merged or closed, per the PR check'*. That is true only when check_prs PASSed. #645's own pasted transcript shows the false case, two lines apart:
✗ PRs finished open: #647 (in tracked-prs.txt), #645 (head feat/reaper)
✓ tracked-prs ledger lists #645, #647 — all merged or closed, per the PR check
The verdict is still KEEP (BLOCK wins), so nothing acts on it — but the refusal report a human reads contains a flat contradiction. Either pass the PR check's state in, or word the line as 'not live work in its own right; see the PR check'.
2. check_tracked_file can PASS on evidence from a slug it does not name. survey() aggregates scratchpads and tracked_files across every tree of the topic (for t in mine), the -f5 residue included, while the check renders slug_for(session.worktree or session.root). So a session whose own workspace has no scratchpad — /tmp wiped by a reboot — but whose f5 tree once hosted a claude session gets PASS with *'N session directories under -root-nf-devs-<topic>'* when that slug holds nothing. UNPROVEN was the right answer, and this is the #618 shape the check exists to avoid. Narrow: it needs a session started inside an f5 worktree. The fix is to decide on the own tree's slug alone.
3. _issues_naming_sids takes GitHub's default page size. The search/issues call sets no per_page, and that API defaults to 30 items. More than 30 open issues naming one sid and the rest are invisible — and the truncated answer is the permissive one, the same direction #628 is about. Unreachable at this repo's scale (a chunk is a handful of issues), so this is belt-and-braces: set per_page=100, or compare total_count against the number of items returned and report a short read as a failed search rather than as a result.
4. notes/chunks.md puts item 4 on both sides of the same paragraph. The new ## wrap_up.py section says the report *'is items 1, 2 and 4 of the list above, verified against GitHub rather than remembered'*, and four lines later that *'items 3, 4 and 5 are printed as hand-checks rather than claimed'*. Both are half-right — item 4 is tracked-prs.txt empty (verified) and poll cron deleted (explicitly unverifiable; hand_checks says so). Split the item, or name the halves.
None.
No comments.