Created
Jul 01, 06:31
Started
Jul 01, 06:32
Completed
Jul 01, 12:12
DevOps handoff
Type
Feature
Shape
ui+db
Worktree Slug
polish-heartbeat-span-table
Repositories
mcritchie-studio
Release Slug
—
Branch
feat/polish-heartbeat-span-table
Acceptance Criteria
Expected Test Plan
Checks Run
Agent Context
Final piece of the narrated-events next-draft epic — the heartbeat UI (/alex/heartbeat, HeartbeatController#show, app/views/heartbeat/*). Release now has the backend: E1 resolves span outcomes + stamps atomic_actions.model + closes hanging spans; E2 added event grading. Addresses the operator's screenshot feedback on the current span table: (1) RENDER the outcome on each event row (category · reason → OUTCOME) and show an OPEN/in-progress span DISTINCTLY (badge) vs a closed one — outcomes now resolve so the '—' should fill in; the 'strange hanging event after PR submitted' now auto-closes via E1 but an open span should still read as in-progress, not a bug. (2) Add columns to EVENT rows: Pokemon (mascot), Model, Tokens, Cost — AGGREGATE from the rolled-up actions in @event_rows (sum tokens_in/out and cost across the span's actions; show the span's model via the actions' model / heartbeat_model_short). pokemon_lookup already exists; extend it to cover event mascots. Do the aggregation in the controller #show or a helper (heartbeat_helper.rb), not inline N+1. (3) FULL-COMMAND VIEW: a way to see the full tool input AND output for an action (currently truncated) — extend the existing drawer (_drawer, #feedback action) or an expand. (4) GRADE THE SPANS: add a grading editor (good/not RADIO + ~5-word slug + long-form + bank/discard) for BOTH Alex and McRitchie, POSTing to E2's endpoint: POST /alex/heartbeat/events/:id/grade (named heartbeat_event_grade), which returns JSON {id, atomic_action_id, atomic_event_id, grader, disposition, slug, long_form, banked, discarded}. Mirror the existing per-action _grade_editor / drawer UX; you may add a feedback_event GET drawer action. Keep the existing per-action grading path working. Mind the Alpine/Nokogiri test gotchas (feedback_board_alpine_integration_test_gotchas): x-data double-quotes, template x-if single-root, integration tests can't read Alpine-conditional DOM. Fresh worktree needs bin/rails tailwindcss:build before layout tests. Tests: integration for the grade-an-event flow (POST + persistence) and the column/outcome rendering; system-tier if feasible.
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.
No task feedback has been recorded yet.
Sealed-bid sizing
Edit →Alex (PM)
—
Avi (PO)
MEDIUM
Dev
MEDIUM
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.