Twinned from https://github.com/cfsh/ninefold/issues/834 by tools/beads/import_github.py's reconcile pass.
Unclaimed. Prescriptive — do this, don't re-derive it. Sequencing decision from #832: delete the board *before* fleet exists, not after.
> "Delete the Session Board _before_ even building fleet. Right now we're barely using session board." — aedanpope, #832
This is a deletion PR, not a redesign. Nothing here is a direction call.
tools/office/board.py and tools/tests/test_board.py.tools/office/audit_sessions.py and tools/tests/test_audit_sessions.py. Its docstring says why it can go too: its entire job is reconciling a hand-edited board against live sessions (#635) — with no board, there is nothing to reconcile.tools/office/reap.py: the _board_note function and both call sites (currently main(), under --apply and dry-run), and the "the board is unusable as a gate in either direction" framing in the module docstring (~line 40-46). reap.py stops mentioning a board at all — it already only *prints a note for a human*, never writes one, so nothing downstream depends on this beyond the print.- tools/nflib/gh.py (~line 605-614) — a docstring example names board.py as the caller motivating a JSON-over-stdin mutation helper. Reword the example off board.py; keep the underlying helper (other callers still need atomic body writes).
- tools/pr/rebuild_f5.py (~line 659) and tools/pr/session_start.py (~line 122) — prose references to audit_sessions.py. Update to say what actually reconciles session state now (nothing, until fleet lands — say that plainly rather than leaving a dangling filename).
- .claude/commands/triage.md — remove the "regenerate the board" step (~line 120-126: "Regenerate the board (#398) — both tables, sequencing notes, conventions...") and the board bullet in the pre-read list (~line 34, ~152). /triage still classifies issues into chunks and assigns sessions; it stops publishing a board artifact as its side effect.
- CLAUDE.md:
- Line 36 (Chunks, your board row, the wrap-up checklist, CLAIM/RELEASE) — drop "your board row".
- Line 37 (The operator's half — board drift, /triage, reaping) — drop "board drift,".
- Line 268 (wrap-up: board row set to wrapped, then ./tools/pr/wrap_up.py --remove) — drop the board-row clause; wrap-up no longer writes anywhere but the ledger and the worktree.
- Line 171 (meta → the session board) — reword generically ("meta → a board or roster, never a work item", matching notes/operating.md's existing phrasing) since meta is a label class, not specifically #398; check for other live meta-labelled issues before assuming the label itself is now unused.
- notes/chunks.md — delete the ## Your row on the board section (~line 10-27) entirely, and the wrap-up-checklist bullet that references writing it (~line 117, ~159's "It does not write the board either").
- notes/operating.md — delete the ## The board (#398) section. Leave a one-line pointer to fleet in its place ("state that was here now derives live — see tools/fleet/") so a reader mid-sentence in this file isn't left wondering where it went; don't backfill fleet's own docs here, that's the follow-up issue's job.
- notes/office.md — trim the board references at ~line 17-19 and ~32 (the audit_sessions.py mention goes with it).
Do not touch design_docs/006-the-coders-front-door.md. It's a historical design doc recording reasoning at a point in time — S12 in it already anticipated this exact deletion. Editing past design docs to match current state defeats their purpose as a record.
Close it, don't delete it — GitHub issue deletion is irreversible and needs org-owner permissions; closing preserves the history anyone linked. Unpin it. Closing comment: point at this PR and at #832 (the fleet project) as the successor, one line, no essay — the history in the issue body already explains what it was.
Comment-and-close, linking this PR:
poll.py --check reporting CHANGED every tick because the board escaped per-session scoping. No board to escape scoping.--board parsed but the report always names #398. No board flag once there's no board.board.py into callers that still hand-roll the compare-and-swap race. No board.py to wire into._board_note naming refused-reap sessions) becomes moot as part of the reap.py edit above. Items 1, 3, 4, 5 are unrelated reap.py findings and stay open. Leave a comment on #656 noting item 2 resolved-by-deletion when this PR lands; don't close the issue../presubmit.py after the deletions — the point is that nothing outside the files above imports board.py or audit_sessions.py; if presubmit finds a caller this list missed, that caller belongs in this PR too, not a follow-up.
None.
No comments.