Agents Builders

Fix duplicate sticky headers

Archived
fix-duplicate-sticky-headers

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

QA URL

Production URL

ui

Acceptance Criteria

  • Heartbeat span tables opt out of sticky clone
  • Enhancer skips tables with sticky header cells
  • No duplicate header bar on heartbeat pages

Expected Test Plan

  • component

Checks Run

  • [component] bin/rails test test/integration/heartbeat_all_spans_test.rb — opt-out attribute regression (failed pre-fix, green post-fix)
  • [component] heartbeat integration set green: all_spans, alex_heartbeat, feedback, event_grade, agent_section (46 runs)
  • playwright harness: patched enhancer skips sticky-th table at 300px internal scroll; control body-flow table still clones
  • [full-suite@85e17e98382b3d4d8cd5a32bda4d83c47eb4e28a] bin/rails test green
  • [rubocop@85e17e98382b3d4d8cd5a32bda4d83c47eb4e28a] bin/rubocop clean

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.

Sizing Avi · PO SMALL Dev SMALL Actual LARGE ≠ forecast
  1. Created Designed
    L Lickitung
    Lickitung
    Model
    Duration
    Tokens
    Cost
    Completed Jul 04, 03:10 · 4 days ago
    api
  2. Designed Building
    L Lickitung
    Lickitung
    Model
    claude-fable-5
    Duration
    1 minute
    Tokens
    957,829
    Cost
    ~$1.26
    Started Jul 04, 03:10
    Completed Jul 04, 03:11 · 4 days ago
    cli
  3. Building Submitted
    L Lickitung
    Lickitung
    Model
    claude-fable-5
    Duration
    17 minutes
    Tokens
    8,289,552
    Cost
    ~$10.48
    Started Jul 04, 03:11
    Completed Jul 04, 03:27 · 4 days ago
    cli
  4. Submitted Reviewed Review Activity
    S Shannon
    Shannon primary
    A Alex
    Alex light
    Model
    claude-fable-5
    Duration
    20 minutes
    Tokens
    3,384,220
    Cost
    ~$8.31
    Started Jul 04, 03:27
    Completed Jul 04, 03:47 · 4 days ago
    cli
  5. Reviewed Assembled
    S Steffon
    Steffon
    Model
    claude-fable-5
    Duration
    under a minute
    Tokens
    Cost
    Started Jul 04, 03:47
    Completed Jul 04, 03:48 · 4 days ago
  6. Assembled Shipped
    A Avi
    Avi
    Model
    claude-fable-5
    Duration
    about 1 hour
    Tokens
    Cost
    Started Jul 04, 03:48
    Completed Jul 04, 04:58 · 4 days ago
  7. Shipped Archived
    Model
    Duration
    about 16 hours
    Tokens
    Cost
    Started Jul 04, 04:58
    Completed Jul 04, 20:46 · 4 days ago

Conversation

QA review feedback, agent handoffs, and follow-up notes for this task.

Handoff 4 days ago

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.

Comment 4 days ago

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