Created
Jul 01, 15:02
Started
Jul 01, 15:04
Completed
Jul 01, 15:46
DevOps handoff
Type
Feature
Shape
ui-only
Worktree Slug
pretty-json-wider-drawer
Repositories
mcritchie-studio
Release Slug
—
Branch
feat/pretty-json-wider-drawer
Acceptance Criteria
Expected Test Plan
Checks Run
Agent Context
In the /alex/heartbeat drill-down drawer (click an action → drawer shows INPUT and OUTPUT), the tool input/output currently render as a raw ESCAPED JSON string (e.g. {"type":"text","file":{...,"content":"<%# ...\n ..."}}). Make them PRETTY: parse the JSON and render formatted (2-space indent, real newlines instead of \n, keys/values readable) inside a monospace <pre> that wraps/scrolls. If a payload is not valid JSON, fall back to the raw string safely (never error). ALSO double the drawer/slide-over WIDTH so the formatted JSON is easy to read (find the current drawer width class/style and ~2x it; keep it capped so it doesn't cover the whole viewport). This is view-only — do NOT touch the controller data or the aggregation (a sibling backend task is populating tokens/cost in parallel; the Tokens/Cost drawer ROWS already exist, leave them). Mind Alpine/Tailwind gotchas (x-data double-quotes, x-show owns display). Files: app/views/heartbeat/_drawer.html.erb, _event_drawer.html.erb, and the drawer width (likely a Tailwind width class in show.html.erb or the partial, or app/assets app.css). Pretty-printing can be server-side (JSON.pretty_generate in a helper) or client-side (Alpine) — prefer server-side helper for testability. Tests: component/integration asserting the drawer renders indented JSON + real newlines for a JSON payload and raw text for a non-JSON payload. Part of narrated-events epic — project_opsd_learning_layer.
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)
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.