From e2bed52751257dc2209a6b106b246a984669afd5 Mon Sep 17 00:00:00 2001 From: ducoterra Date: Mon, 7 Sep 2026 21:12:03 -0400 Subject: [PATCH] chore(agent): phase roadmap from TODO.md, 3 phases (85-87) 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 ' 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. --- .../85_mobile_menu_gate_overlap/00_phase.md | 55 ++++++++++++++ .../01_gate_below_header.md | 30 ++++++++ .../02_e2e_pin_updates.md | 31 ++++++++ .../03_verify_and_commit.md | 31 ++++++++ .../todo/86_history_page_width/00_phase.md | 53 ++++++++++++++ .../01_table_wrap_fix.md | 30 ++++++++ .../02_e2e_story_suite.md | 31 ++++++++ .../03_verify_and_commit.md | 32 ++++++++ .../todo/87_big_read_progress/00_phase.md | 73 +++++++++++++++++++ .../01_typing_elapsed_hint.md | 43 +++++++++++ .../02_tool_line_elapsed.md | 55 ++++++++++++++ .../03_e2e_story_suite.md | 44 +++++++++++ .../04_verify_and_commit.md | 32 ++++++++ 13 files changed, 540 insertions(+) create mode 100644 .agents/phases/todo/85_mobile_menu_gate_overlap/00_phase.md create mode 100644 .agents/phases/todo/85_mobile_menu_gate_overlap/01_gate_below_header.md create mode 100644 .agents/phases/todo/85_mobile_menu_gate_overlap/02_e2e_pin_updates.md create mode 100644 .agents/phases/todo/85_mobile_menu_gate_overlap/03_verify_and_commit.md create mode 100644 .agents/phases/todo/86_history_page_width/00_phase.md create mode 100644 .agents/phases/todo/86_history_page_width/01_table_wrap_fix.md create mode 100644 .agents/phases/todo/86_history_page_width/02_e2e_story_suite.md create mode 100644 .agents/phases/todo/86_history_page_width/03_verify_and_commit.md create mode 100644 .agents/phases/todo/87_big_read_progress/00_phase.md create mode 100644 .agents/phases/todo/87_big_read_progress/01_typing_elapsed_hint.md create mode 100644 .agents/phases/todo/87_big_read_progress/02_tool_line_elapsed.md create mode 100644 .agents/phases/todo/87_big_read_progress/03_e2e_story_suite.md create mode 100644 .agents/phases/todo/87_big_read_progress/04_verify_and_commit.md diff --git a/.agents/phases/todo/85_mobile_menu_gate_overlap/00_phase.md b/.agents/phases/todo/85_mobile_menu_gate_overlap/00_phase.md new file mode 100644 index 0000000..2636549 --- /dev/null +++ b/.agents/phases/todo/85_mobile_menu_gate_overlap/00_phase.md @@ -0,0 +1,55 @@ +# Phase 85 — Keep the mobile menu reachable while the token gate is up + +**Source:** `TODO.md` L3 — "Only on the chat page, and only when navigating there directly, does the hamburger menu on mobile not work. It works on every other page, but clicking it from the chat page does not expand the menu. This makes the menu inaccessible on mobile. Note that when logging in the hamburger menu works as expected, so it's something specifically about the chat page that breaks it." +**Story:** n/a (owner bug report — `TODO.md` L3, 2026-09-07) +**Context:** `frontend/assets/token-gate.js` (phase 79 task 05 — `mountGate(lockRoot, onAuthed)`: anonymous → the gate is revealed and `lockRoot.inert = true` (`#main`); the phase-79 contract line "the gate is the only interactive surface; the header is locked out with the rest of the page"), `frontend/index.html` (the body-level `