Created
Jul 04, 03:10
Started
Jul 04, 03:11
Completed
Jul 04, 04:58
DevOps handoff
Type
Bug
Shape
ui-only
Worktree Slug
fix-duplicate-sticky-headers
Repositories
mcritchie-studio
Release Slug
—
Branch
feat/fix-duplicate-sticky-headers
Acceptance Criteria
Expected Test Plan
Checks Run
Agent Context
Bug: /alex/heartbeat/spans (and per-session /alex/heartbeat) show a doubled table header. Root cause: app-wide app/javascript/sticky_table_header.js auto-enhances EVERY table with a thead by cloning it into a body-appended .sticky-table-header-clone. The heartbeat table already has its own sticky header (#alex-heartbeat thead th position:sticky top:0) inside its internal .hb-scroll container. The enhancer's activation test measures thead.getBoundingClientRect().top vs --nav-h, but the sticky is on the TH cells, so the thead's in-flow box scrolls under the nav during INTERNAL scroll while the ths stay pinned -> clone activates. Clone also renders unstyled (big bold default th) because it escapes the #alex-heartbeat scope. Reproduced deterministically in Playwright: at 300px internal scroll, th top stays 259 while thead top reads -41 -> clone display:block. Fix: (1) data-sticky-table-header=false on heartbeat event table partial; (2) harden shouldEnhanceTable to skip tables whose thead th computed position is sticky. Engine copy in studio-engine 0.11 shares the flaw - follow-up task if we want it fixed there too (mcr runs the local importmap copy).
Stage Timeline
Who handled each stage, the time it took (measured), and the model / tokens / cost reported (best-effort) — plus who's on it right now. — means the agent didn't report that metric.
Conversation
QA review feedback, agent handoffs, and follow-up notes for this task.
Fix submitted: heartbeat tables opt out of sticky clone + enhancer skips sticky-th tables. Component regression test + 46 heartbeat runs green, full suite certified at 85e17e98382b, Playwright harness proves clone gone at deep internal scroll while control table still enhances. Preview http://localhost:3013/alex/heartbeat/spans (demo-seeded). Engine copy of the JS shares the flaw — follow-up candidate.
Operator visually accepted the fix on the local preview (66-span scroll test, no duplicate header).
Sealed-bid sizing
Edit →Alex (PM)
—
Avi (PO)
SMALL
Dev
SMALL
Actual
LARGE
We emailed a one-tap sign-in link to . It expires shortly and can only be used once.
No email? Check spam, or close this and try again.