TODO.md L3-L5 converted to executable phases (protocol B - append):
- 85_mobile_menu_gate_overlap (L3): the phase-79 token gate (z 500, fixed
full-viewport) sits above the sticky header (z 20), so an
unauthenticated visitor's tap on the mobile hamburger hits the gate
overlay and the menu is unreachable until login. Reproduced:
elementFromPoint at the toggle resolves to #auth-gate on every shell
view; real clicks are intercepted. Fix: gate at z 15 (below the
header + its mobile dropdown), #main stays inert-locked; the
phase-46 E2E's programmatic-click workaround becomes a real click +
a new TODO-regression pin.
- 86_history_page_width (L4): at 375px the History page panned ~250px
into a blank region (document scrollWidth 626) although the table
scrolled fine inside its card. Root cause: the .visually-hidden
Actions header span is position:absolute with no positioned ancestor,
so its 1px box (at the 640px table's right edge) leaks into the
document's scrollable overflow. Fix: position:relative on the shared
.table-wrap card (the identical Tokens-view defect, measured 618, is
fixed by the same rule; RAG is clean and pinned). New E2E story.
- 87_big_read_progress (L5): after a tool read the UI sat on a static
'Reading <path>' line while the model prefilled the big context -
the turn looked frozen. Frontend-only: a ticking '(Ns)' suffix on
the latest tool line after 5s of frame silence (settle on the next
frame, live-only - restored lines stay timer-free) + the existing
10s aria-only typing clock promoted to a visible 'Ns' hint. New
source-level unit pins + slow-proxy E2E story (deterministic >=6s
gaps via the mock tool flow).
TODO.md cleared (items now live in .agents/phases/todo/). The pre-existing
uncommitted 81-84 phases + remediation_plan.md are a separate workstream
and are NOT part of this commit.