Catalyst Dev — Change Log
11.0.0 (2026-06-05)
Ticket Gantt, Smarter Autotuner & Signal Reliability
Clicking a ticket card in the orchestration monitor now opens a three-tab drawer — a wall-clock Gantt of per-phase spans colored by phase type, a cost and token breakdown, and the full comms stream for that ticket. The autotuner gets two significant fixes: macOS hosts no longer false-clamp maxParallel to 1 due to os.freemem() under-reporting available memory, and scale decisions now attribute CPU and memory to Claude’s own process tree so the tuner holds steady when another process is causing host pressure rather than shedding workers unnecessarily. A longstanding wedge where phase workers silently skipped the signal-file flip on claude --bg dispatch is also resolved by threading orchestrator context through the surviving settings.env channel.
Features
- dev: CTL-734 ticket-detail drill-in — kibo-ui Gantt of per-phase worker spans (#1319) (5b5d562)
- dev: CTL-761 emit revive/attempt count as OTEL dimensions on terminal phase events (#1321) (087e4b1)
- dev: CTL-775 demand-driven autotuner — saturation-gated up, Claude-attributed down (#1316) (1da9db8)
- dev: document and enforce the Linear app-actor botUserId requirement (#1282) (a4bb94d)
Bug Fixes
- dev: CTL-623 residual — describe-pr sibling-ref prose + ci-describe-pr body_file fix (#1322) (cab4e9b)
- dev: CTL-731 residual — default eligibleQuery to Todo + Release-As 11.0.0 (#1331) (f9345bd)
- dev: CTL-766 persist real tailer offset in otel-forward checkpoint (#1310) (1ddf24a)
- dev: CTL-772 platform-aware available memory — stop autotuner false-clamping to 1 on macOS (#1311) (a06c481)
- dev: CTL-777 reliable phase-worker signal flip via surviving settings.env channel (step 1) (#1326) (ccab289)
- dev: repair removeLabel (linearis rejects —label-mode remove) + hermetic test guard (#1327) (0e80e26)
10.6.0 (2026-06-04)
Autotuning Execution Core & Per-Worker Observability
The execution core now includes a setpoint-seeking autotuner that converges maxParallel toward a host-configurable target — including at idle, where it previously stalled at 1. Per-worker OpenTelemetry is fully wired into the background-worker model, so phase workers now emit correctly tagged metrics in Grafana, Dash0, and Honeycomb instead of untagged or mis-attributed signal. A reaper poll-fallback fix stops predecessor workers from leaking into liveCount and starving the parallel queue.
Features
- dev: CTL-760 per-worker OpenTelemetry for the background-worker execution model (#1294) (5399a29)
- dev: CTL-770 setpoint-seeking autotuner + CTL-771 autotune OTel gauges (#1307) (6f4cfd9)
Bug Fixes
- dev: CTL-769 give the execution-core reaper a poll-fallback drain (#1304) (068795d)
- dev: CTL-770 reach idle convergence — autotuner no longer bails at bgCount===0 (#1308) (3cc5c99)
10.5.0 (2026-06-03)
Point-Driven Effort & Pipeline Reliability
Ticket point estimates now drive --effort flags and /workflows postamble automatically across the plan, implement, verify, and review phases — 1pt maps to medium, 3/5pt to high, and 8/13pt to xhigh with workflows. Four reliability fixes ship alongside: workers that die before their first turn now self-heal by re-issuing the phase command on revive; the orchestration monitor’s Done column no longer surfaces mid-pipeline tickets that haven’t reached monitor-deploy; parked workers no longer spuriously re-dispatch when the bot posts its own clarifying question; and workflow_id in the sessions table is no longer polluted with stale daemon session ids, making per-run cost attribution queries accurate.
Features
- dev: CTL-747 per-phase effort + dynamic-workflow execution driven by ticket points (#1262) (0b7bbe0)
Bug Fixes
- dev: CTL-736 revive re-issues the phase command so a pre-first-turn death self-heals (#1263) (084a522)
- dev: CTL-745 gate synthetic done on terminal pipeline state (#1287) (b65bc27)
- dev: CTL-752 neutralize frozen-daemon workflow_id leak + doc join queries (#1274) (d499be9)
- dev: CTL-756 self-echo guard for handleCommentWake (#1283) (7319d7c)
10.4.0 (2026-05-31)
Deterministic Worker Lifecycle Engine
The revive-storm guard stack — roughly 14 heuristic dampers that tried to guess whether a worker was dead — is replaced by three deterministic primitives: an atomic single-flight claim with fencing tokens, a state.json death trigger that reads local lifecycle state instead of the eventually-consistent claude agents snapshot, and a progress probe that stops futile respawns by checking whether a worker actually made commits or produced output before deciding to revive it. Separately, per-step model, effort, and preamble overrides are now live in dispatch via a small rules engine in the workflow descriptor, so large or epic tickets can launch the plan worker with max effort and a different model while every other case stays byte-identical to before. The board real-time client also shifts to a SharedWorker with an IndexedDB cache, cutting upstream SSE connections to one per browser instead of one per tab.
Features
- dev: atomic single-flight worker claim + fencing token (CTL-736 Phase 1) (#1235) (d09fb2b)
- dev: board SharedWorker + IndexedDB real-time client (CTL-733 PR-2b) (#1242) (4a76d27)
- dev: CTL-736 Phase 2-3 — state.json death trigger + progress probe (retire the revive-storm guard stack) (#1245) (0a0624a)
- dev: per-step conditional levers — model/effort/preamble in dispatch (descriptor v1.1) (#1239) (673bdc1)
Bug Fixes
10.3.0 (2026-05-30)
Live Worker/Ticket Board
The monitor now serves a real-time Worker and Ticket board at the default / route, replacing the old polling dashboard as the primary view (legacy dashboard still available at /legacy). Board data is pushed over SSE from a single shared snapshot — no more per-tab polling hammering the server — with updates triggered reactively on state changes rather than a fixed tick. The Workers view also gains a Status ↔ Pipeline column toggle so you can group live workers by liveness or by phase, and worker cards now show a session short-code to distinguish revived duplicate workers from the same ticket.
Features
- dev: board real-time layer — async assembleBoard + reactive SSE push (CTL-733) (#1230) (f034a14)
- dev: live Worker/Ticket board UI wired to execution-core (CTL-727) (#1216) (0d5aac0)
- dev: real shadcn components + Linear-style board UX (CTL-727) (#1219) (d8396d2)
- dev: serve the Worker/Ticket board from the monitor (CTL-730) (#1229) (50e9b2e)
- dev: Workers board Status↔Pipeline column toggle (CTL-732) (#1228) (4468bc7)
Bug Fixes
- dev: stabilize main — revive idle/budget gaps + cache-only de-starvation reconciliation (CTL-735 / CTL-736 PR-0) (#1234) (dbabfbb)
- dev: worker session short-code to distinguish revive-duplicates (CTL-727) (#1223) (b3d1fdf)
10.2.2 (2026-05-28)
Startup Triage Sweep Fix
Tickets already in an eligible state when the dev daemon boots — or that appear between webhook deliveries — now get triage dispatched automatically. Previously, these fell into a permanent retry loop because the startup reconcile never checked for missing triage artifacts; manual intervention was required after every daemon restart. No migration needed.
Bug Fixes
10.2.1 (2026-05-28)
Scheduler Test Isolation Fix
Eight scheduler tests were silently failing on any machine with active background workers — CI passed because it runs sandboxed, masking a regression introduced by the CTL-705 preemption sweep. The fix injects liveBackgroundCount: () => 0 into the affected test fixtures so local dev environments with live pipelines no longer see false failures. No production code changed and no migration is needed.
Bug Fixes
- dev: inject liveBackgroundCount in scheduler tests broken by CTL-705 preemption (CTL-715) (#1188) (9e1dedf)
10.2.0 (2026-05-28)
Session Continuity & Linear Stability
This release focuses on two things: keeping phase workers alive across reboots and machine restarts, and stopping the Linear API rate-limit storms that were halting the execution-core daemon. Boot-resume now passes --resume-session so in-flight workers pick up where they left off instead of starting fresh, with a dual-schema fallback that handles both old and new Claude Code state formats. On the Linear side, a circuit breaker throttles retries on 429s, cross-team label errors are correctly classified as unrecoverable (ending the per-tick retry loops against ADV tickets), and per-event scoping polls are replaced with webhook-captured fields — cutting the baseline Linear call volume significantly. Several correctness fixes also land: the one-worker-per-ticket invariant is now enforced with a liveness gate, yield tombstones no longer crash the scheduler tick, and sub-agent costs are included in phase mirror footers.
Features
- dev: aggregate sub-agent-inclusive cost/token totals for the phase mirror footer (CTL-666) (#1123) (5bf0e2f)
- dev: boot-resume passes —resume-session for true session continuation (CTL-690) (#1155) (b52c4c7)
- dev: capture Linear webhook scoping fields + drop per-event scoping poll (CTL-681) (#1138) (545e2f6)
- dev: cold-start detection signal for execution-core recovery (CTL-640) (#1071) (9221ef8)
- dev: Linear state TTL cache for execution-core daemon (CTL-634) (#1069) (43917b3)
- dev: machine-level config fallback for phase-agent-dispatch (CTL-689) (#1152) (23eae98)
- dev: repoint broker watchdog to claude-agents liveness (CTL-672) (#1163) (6f1c7bf)
- dev: route triage/research/implement/pr phase workers to Sonnet (CTL-689) (#1150) (c5061e6)
Bug Fixes
- dev: add Linear rate-limit circuit breaker + drop redundant triaged label (CTL-679) (#1136) (c5e550d)
- dev: carry project/linear.key/orchestration in canonical-event resource block (CTL-636) (#1070) (f011f12)
- dev: classify Linear cross-team label-UUID errors as missing-label (#1137) (e336f36)
- dev: enforce one-worker-per-ticket — liveness-gate reclaim + reap on remediate cycle (CTL-661) (#1107) (a4bbfea)
- dev: make phase-emit-complete.sh sourceable under zsh (CTL-618) (#1067) (ebde111)
- dev: make phase-triage body resilient to slash-arg substitution (CTL-602) (#1031) (fab4c66)
- dev: orchestrate-dispatch-next phase-fork bugs — phase-aware RUNNING count + stdin drain guard (CTL-605) (#1068) (c19dea5)
- dev: phase-mode turn-cap continuation — orchestrate-revive fires —resume in phase-agents mode (CTL-613) (#1099) (b3d5b49)
- dev: resolve session UUID from resumeSessionId + formal config schemas (CTL-710) (#1181) (2fedd98)
- dev: stop execution-core label-retry storm on missing workspace labels (CTL-585) (#1007) (b9e06e1)
- dev: stop scheduler tick from crashing on yield-tombstone files (CTL-702) (#1170) (b732664)
- dev: supersede guard for predecessor reaping (CTL-606) (#1072) (a6c7f1c)
- execution-core: broaden reclaim trigger to cover stale bg jobs (CTL-588) (#988) (30f1655)
- execution-core: reclaim dead phase-implement workers via commit-state probe (CTL-574) (#985) (747a3f6)
10.1.0 (2026-05-18)
OTEL Cost Attribution for Phase-Agent Workers
Phase-agent workers spawned via claude --bg now inherit OTEL_RESOURCE_ATTRIBUTES from the orchestrator, so Grafana cost panels correctly attribute their spend to the right Linear ticket, branch, and project. Previously, those labels were empty and the “Cost by Linear Ticket” panel silently dropped phase-agent costs — in one dogfood run, ~75% of spend went unattributed. No migration steps required.
Features
- dev: propagate OTEL_RESOURCE_ATTRIBUTES to phase-agent claude —bg children (CTL-492) (#862) (19166f0)
10.0.0 (2026-05-18)
Phase-Agent Pipeline Launch
This release ships the full 9-phase agent pipeline: triage → research → plan → implement → verify → review → PR → merge → deploy monitoring. Orchestrations now dispatch each phase as a claude --bg worker, advance automatically via broker phase_lifecycle events, and resume when a phase hits its turn cap rather than burning the error-recovery budget. Two blocking dispatch bugs (a skill gate that rejected slash-command invocation and a bg job ID parser that captured backgrounded instead of the hex ID) are also fixed, meaning this is the first release where phase workers can actually run end-to-end.
⚠ BREAKING CHANGES
- dev: turn-cap exhaustion → automated handoff continuation (CTL-484) (#844)
Features
- dev: add phase_lifecycle interest type to broker daemon (CTL-447) (#795) (840f2ef)
- dev: add phase-triage + phase-monitor-deploy skills (CTL-451) (#802) (decabfd)
- dev: add verifying/reviewing transition keys for phase-agent observability (CTL-454) (#797) (303e96a)
- dev: ADR-drift detector for morning-briefing Step 3 (CTL-459) (#806) (d442e87)
- dev: briefing-followup action handlers — calendar/ticket/orchestrate/email (CTL-463) (#813) (63383aa)
- dev: briefing-followup ADR-drift resolution flow (CTL-464) (#815) (8207175)
- dev: briefing-followup resolution write-back (CTL-465) (#816) (7881962)
- dev: briefing-followup skill MVP — load + present agenda (CTL-462) (#808) (bd875bf)
- dev: catalyst-hud surfaces per-phase signal files (CTL-476) (#835) (2a821fa)
- dev: event-source workers/*.json via broker projection (CTL-483) (#842) (f6c1bdb)
- dev: HUD WORKER column strips orch prefix (CTL-431) (#755) (4b89cbe)
- dev: morning-briefing skill MVP (CTL-457) (#804) (d02bdaf)
- dev: multi-output briefing fan-out (CTL-458) (#807) (3e25223)
- dev: orchestrator state-machine rewrite + —bg cutover (CTL-452) (#809) (487cc38)
- dev: phase-agent skill scaffold + dispatch helper (CTL-448) (#799) (29e91c7)
- dev: phase-implement + phase-pr + phase-monitor-merge skills (CTL-449) (#803) (eb3c008)
- dev: phase-research + phase-plan + phase-verify + phase-review skills (CTL-450) (#801) (e3a4294)
- dev: research-curate contradiction detection + CONTRADICTIONS.md (CTL-468) (#810) (185814f)
- dev: research-curate skill — inventory + staleness + INDEX.md (CTL-467) (#805) (dce7f14)
- dev: turn-cap exhaustion → automated handoff continuation (CTL-484) (#844) (a521ca9)
Bug Fixes
- dev: catalyst-events tail/wait-for exit when parent dies (CTL-439) (#762) (bc5b657)
- dev: consolidate HUD Header chip row onto single line (CTL-434) (#758) (0737ed9)
- dev: HUD filter input + status row span full terminal width (CTL-433) (#757) (5532042)
- dev: HUD interests footer drops ‘ago’ suffix on null timestamps (CTL-432) (#754) (46887d2)
- dev: populate session_metrics from worker stream cost data (CTL-455) (#798) (6eeb7ec)
- dev: unbreak phase-agent dispatch end-to-end (CTL-490) (#848) (ba6fd03)
- dev: widen HUD Interests TYPE column to 18 + add margin before WATCHES (CTL-438) (#761) (cf97d3c)
- dev: wire orchestrate-roll-usage into monitor loop + enable phase-agents dispatch (CTL-487) (#845) (3807a0f)