Files
brain-of-reese/.agent/phases/todo/40_tuning_toggle_flash/00_phase.md
T
ducoterra 02c76ad328 chore(agent): phase roadmap from TODO.md — 8 phases (40–47), 24 tasks
Converts the 9 TODO items into an executable phase roadmap (Protocol B,
appended after phase 39):

- 40 tuning toggle anonymous flash (TODO L3)
- 41 sync fail-fast + modal when a model is down (TODO L4)
- 42 no reply autoscroll (TODO L5)
- 43 thinking scroll back — user scroll + gated autoscroll (TODO L7)
- 44 markdown tables (TODO L6)
- 45 agent unlimited tool calls behind BOR_AGENT_MAX_ROUNDS (TODO L8)
- 46 mobile hamburger nav (TODO L9)
- 47 quadlet + jinja import formats, A9 revision (TODO L10–L11)

Each phase carries a user story, a dedicated Playwright E2E suite plan,
and owner-locked decisions (R1 A9 format extension, R2 phase-37 budget
revision, A1–A5 scope decisions) confirmed 2026-08-27.

Also records the completed phases 30–39 todo/ -> complete/ moves that
were pending in the working tree. TODO.md is cleared (items now live in
.agent/phases/todo/).
2026-08-27 18:25:53 -04:00

3.4 KiB

Phase 40 — Tuning toggle anonymous flash

Source: TODO.md L3 — "Loading the page briefly shows the 'Tuning' button in the header even when the user isn't authenticated. Only show that if the user is authenticated." Story: .agent/user_stories/tuning-toggle-flash.md Context: Phase 15/34 shared header (frontend/assets/header.js owns #steering-toggle / #steering-panel on all six pages; anonymous → remove() post-whoami). The admin-only nav links already ship hidden (phase-19 contract) — the flashing control is the steering toggle button labeled "Tuning", which ships visible in all six pages and is removed only after /api/whoami resolves.

Objective

Kill the anonymous flash: the tuning toggle ships hidden in every page's markup and is revealed only when whoami says admin (the exact ship-hidden / reveal-for-admin contract the nav links use), so an anonymous user never sees the "Tuning" button — not for a single frame.

Dependencies

  • 39_configurable_brand (complete; last existing phase) — current header state: full shared bar on all six pages.
  • 19_shared_header / 16_admin_auth / 34_consistent_navbar (complete) — the fetchIsAdmin() gate, the ship-hidden nav contract, and the module-owned steering controls this task modifies.

Tasks

  1. 01_toggle_ships_hidden.md — add hidden to #steering-toggle in all six pages and reveal-for-admin in header.js; pin at source level.
  2. 02_flash_e2e_and_regression.md — story E2E suite (never-visible-for-anonymous, admin reveal, nav-contract regression) + regression pass + commit.

Testing & Quality

  • Unit: new tests/unit/test_steering_toggle_visibility.py — hidden present on #steering-toggle in all six HTML pages; header.js unhides for admin (line before refreshSteering()) and the anonymous remove() path is intact; any existing source-pin test asserting the exact old markup is updated (check tests/unit/test_shared_header.py, test_steering.py).
  • Coverage: frontend-only — the app/ >90% gate is unaffected (must stay unchanged).
  • E2E (mandatory, A16): tests/e2e/test_tuning_toggle_flash.py, run in isolation.

Completion Criteria

  • Anonymous load of every page: the toggle is never visible (MutationObserver records zero visible frames) and is absent from the DOM after load.
  • Admin load: toggle visible, panel opens, count badge correct — admin behavior unchanged.
  • uv run pytest green; uv run pytest --cov=app --cov-report=term-missing TOTAL unchanged.
  • uv run pytest tests/e2e/test_tuning_toggle_flash.py -v --no-cov green in isolation.
  • Regression E2E suites green in isolation: test_shared_header.py, test_global_tuning.py, test_steering.py, test_tuning_nav_link.py, test_smoke.py.
  • uv run ruff check . && uv run pyright clean.
  • UI Structure Check (AGENTS.md rule 5): no new focus targets; landmarks/contrast unchanged; no CDN.
  • One --no-gpg-sign commit; phase dir moved .agent/phases/todo/ → .agent/phases/complete/.

Locked decisions

  • A10 untouched — no API change; the fix is pure UI visibility off the existing /api/whoami gate.
  • A11 untouched — no new assets, no CDN.
  • Phase-16 contract preserved — anonymous still gets "absent, not hidden" (remove-from-DOM); this phase only removes the pre-whoami flash window.
  • A16/A17 honoured — one story E2E suite, one atomic commit.