Repository navigation
Description
Implementation: FlyBot (ours) — PR follows within 24h. Do not pick up without a pickup-ok comment on this issue.
Written-by: FlyBot Lead
Claimed-by: FlyBot Lead
Claim-Id: 1bb5154906c840448e0f4b00473c3864
Branch: dev/1-room-rail-bound
Base: 816d1a8
At: 2026-11-01T14:44:05Z
Implementation: FlyBot (ours) — PR follows within 24h. Do not pick up without a pickup-ok comment.
Written-by: FlyBot Lead
What happens
A room's board (scope.kind === 'group') cuts the archive page per room, but its column rail still decides the hedge from the Bot's own drawn done count against a full page. So a Bot whose drawn share of one room page is 18 done rows prints 18/18 — a number the page never established, because the room's archive holds more done cards than the 20 drawn.
Reported from the probe round on #2047: room archive 45 done cards, page draws 20, Bot a owns 18 of the drawn rows → rail reads 18/18, i.e. it still reads as a total, which is the same complaint #2045 was opened for, only on the room board.
Reproduction
Checkout 41458002136a05f4fff5476c802ade865c610f42 (the head of #2047, whose parent is main 816d1a8b) and add only the new test file, then cd core && node --import ./test/harness-resolve.mjs --test test/kanban.test.js:
13 tests / 12 pass / 1 fail, three runs identical.- red:
#2045: a Bot whose share of a full group page is drawn reads as a lower bound, not a total—expected: '18+ done',actual: '18/18'.
Expected
- Room scope: the page is cut by room, so any done row a Bot has drawn is only a lower bound → the rail hedges to
N+ donewhenever that Bot drew at least one done row on a full page (archiveFull && count.done > 0). - Bot scope unchanged: still
count.done >= ARCHIVE_SHOWN, so20 newest+20+ done,19/21,3/5stay exactly as Task board prints the 20-card archive page as the Done total #2045/Task board prints the 20-card archive page as the Done total #2047 settled them. - Short pages stay exact: on a non-full page the rail keeps
1/1,2/2.
Scope
core/src/client/kanban.js— the rail meta branch inBoardView:const capped = archiveFull && (scope?.kind === 'group' ? count.done > 0 : count.done >= ARCHIVE_SHOWN).core/test/kanban.test.js— two cases: the room-share lower bound (with1/1and2/2short-page assertions) and a nail for the existing M3 gap (count.total >= ARCHIVE_SHOWNmust go red:'0+ done' !== '0/20').docs/subsystems/core-client.md— one sentence on the two arms.changelog.d/<issue>-room-rail-bound.fixed.md, plus the regeneratedcore/client.js/patches/ds-bot/mirrors.
Depends on #2047: the rail meta block this issue edits only exists there. Land after #2047 merges and rebase onto the new main — this is not a duplicate of #2045 (that one is the Bot board header and rail; this one is the room arm).
Non-goals
- Task board prints the 20-card archive page as the Done total #2045's Bot-board readings (
20 newest,20+ done,19/21) are not re-decided here. - Two assertions that still have no unit coverage on that tree (empty board prints no rail meta; 21 optimistic rows still slice to 20) are a separate gap, not part of this fix.
Dedupe
Searched live main and closed issues for ARCHIVE_SHOWN, "group board rail" and "rail done total": only #2045 (open, in flight as #2047) and #1289 (archive card, closed) come up; no existing issue covers the room arm.
Activity
Read a room board's per-Bot done share as a lower bound (ThinkFlowLab…
HugoXK commentedon Nov 1, 2026
Release
Written-by: FlyBot Lead
Released: 1bb5154906c840448e0f4b00473c3864
Reason: merged as b99e6c9 (squash of #2058, tree 2363ed14 matches the tip 94bb765)
At: 2026-11-01T16:06:32Z