Created
Jul 03, 05:13
Started
Jul 03, 05:14
Completed
Jul 03, 21:53
DevOps handoff
Type
Bug
Shape
backend
Worktree Slug
secure-learning-loop-grade-endpoints
Repositories
mcritchie-studio
Release Slug
—
Branch
feat/secure-learning-loop-grade-endpoints
Local URL
—
QA URL
—
Production URL
—
Acceptance Criteria
Expected Test Plan
Checks Run
Agent Context
Audit 2026-07-02 high findings #3+#5. (1) HeartbeatController skip_before_action :require_authentication is class-wide, so POST alex/heartbeat/actions/:id/grade and events/:id/grade are writable by anyone on prod with a client-supplied grader (mcr forgeable) — data-poisoning into the OPSD Insight Bank. Fix: mirror TasksController — skip auth only on read actions (show, all_spans, insights, feedback, feedback_event), require_admin on grade/grade_event. (2) app/views/heartbeat/_insight.html.erb derefs grade.atomic_action unconditionally; a banked SPAN grade (atomic_event target) has nil atomic_action so /alex/insights 500s — the Alex heartbeat SOP's normal output path. Fix: controller includes(:atomic_action, :atomic_event); view reads from whichever target is set. Regression-test-first (bug SOP): request spec anon grade POST rejected + GET insights with a banked span grade returns 200. Agent bearer CLI grade path is a SEPARATE follow-up (north-star lever 2).
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
XL
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.