Created
Jun 24, 20:02
Started
Jun 24, 20:03
Completed
Jun 24, 22:32
DevOps handoff
Type
Feature
Shape
library
Worktree Slug
studio-cable-redis
Repositories
studio-engine
Release Train
2026-06-24-studio-cable
Branch
feat/studio-cable-redis
Pull Request
https://github.com/amcritchie/studio-engine/pull/9Local URL
—
QA URL
—
Production URL
—
Acceptance Criteria
Expected Test Plan
Checks Run
Agent Context
Producer of release train 2026-06-24-studio-cable. Shared websocket/Redis primitive extracted after a SEV-1: mcritchie #171 shipped an ActionCable channel with no redis gem + no TLS cable config; the broadcast raised Gem::LoadError (a ScriptError, not StandardError) → escaped a rescue StandardError → 500'd every task write. Hotfixed in mcr (v114). This primitive prevents recurrence ecosystem-wide. API: Studio::Redis (.url/.tls?/.options with rediss ssl_params VERIFY_NONE), Studio::Cable.safe_broadcast (rescue StandardError, ScriptError), Studio::Broadcastable concern (safe Turbo broadcast wrappers). Base off origin/release (0.9.0 Enumeral); bump to 0.10.0. Operator decisions: both apps converge on Turbo Streams; engine first, mcr adopts next via local path (bundle config set --local local.studio), Turf refactor later. Do not publish gem (operator gate).
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.
Hardening (commit bf9cb62, same PR #9, no version bump): Studio::Cable.safe_broadcast now wraps its OWN error-logging in a rescue — ErrorLog.capture! writes to the DB and can itself raise (e.g. ActiveRecord::NoDatabaseError when the DB is down), which would have escaped the guard and defeated the never-raise guarantee. Added the regression test (guard-for-the-guard): returns nil, never raises, even when the error path itself raises. Full engine suite still green (11 files, 0 failures; cable test 4 runs). Engine has no rubocop config — gate is bin/release-check (ruby -c + suite); syntax clean.
Sealed-bid sizing
Edit →Alex (PM)
—
Avi (PO)
—
Dev
—
Actual
—
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.