Files
brain-of-reese/.agents/phases/complete/40_tuning_toggle_flash/00_phase.md
T
ducoterra dbf2af26c6 refactor(agents): migrate .agent/ planning tree to .agents/
Standardize on the .agents/ directory (shared with project skills):
phases/, user_stories/, reports/, screenshots/, validate.sh, and
phase-sessions/ + pipeline.log all move to .agents/ (git mv preserves
history; runtime artifacts move alongside).

Updates every reference in AGENTS.md, README.md, .gitignore, app
docstrings, and test story headers. Historical KB content in data/
and the runtime pipeline.log transcript are left untouched.
2026-09-05 10:57:07 -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: .agents/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 .agents/phases/todo/ → .agents/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.