Skip to content

Catalyst Dev — Change Log

Version 12.17.0 (2026-06-27)

Node-Class Awareness & Fleet Observability

This release introduces node classes (developer, worker, monitor) as a first-class concept across the fleet — every telemetry signal now carries catalyst.node.class, and catalyst-doctor grades nodes against their class-specific rubric instead of treating every machine as a worker activation gate. The standalone catalyst-updater daemon ships as the new sole plugin-pull owner for daemonless developer nodes, with verify-updater and verify-node providing objective pass/fail smoke tests for the GATE-3 cutover. Scheduler reliability gets significant hardening: stale-fenced orphan dirs no longer burn Linear OAuth quota, timed-out linearis reads now trip the circuit breaker so a degraded pass short-circuits instead of paying the full cap N times, and the board now sources real ticket titles from the CTC replica instead of falling back to bare IDs.

Features

  • dev: board sources ticket titles from the CTC replica (real titles, not bare IDs) (#2421) (f3f3245)
  • dev: CTL-1092 — Cluster Capacity Visibility (#1942) (aab5b3c)
  • dev: CTL-1214 — cluster-driven project roster + config-scope schema/doctor (Phases 1,2,5) (#2419) (d65e3d9)
  • dev: CTL-1322 — admission state visible in telemetry + UI (heartbeat block + FleetOps holding) (#2336) (299ba0c)
  • dev: CTL-1328 — Agent Beliefs surface + belief narratives & shape (#2345) (52312f0)
  • dev: CTL-1330 — Tier-1 daemon instrumentation (tick timing + event-loop delay + liveness.refresh logs) (#2349) (e476ce2)
  • dev: CTL-1330 Tier 3 — execution-core OTLP spans (scheduler.tick flame graph + liveness.refresh) (#2354) (e75e5e4)
  • dev: CTL-1331 FU-1 — async the per-item Pass 0r recovery dispatch (recovery-pass p99 crater) (#2366) (f1fc61a)
  • dev: CTL-1331 Phase A — async board-health delegate queue (inert land) (#2365) (77b6305)
  • dev: CTL-1337 — per-tick trace_id shared by scheduler.tick span + tick-timing log (#2363) (89dfa20)
  • dev: CTL-1340 — inert read-replica tier for the scheduler’s per-signal terminal checks (#2373) (e6dee9e)
  • dev: CTL-1344 — node-class seam (getNodeClass) + Layer-2 catalyst.node.class (#2399) (32c8bd6)
  • dev: CTL-1346 — read-replica resolver is node-class + Layer-2 aware (#2402) (2f5a451)
  • dev: CTL-1348 — standalone catalyst-updater daemon (sole plugin-pull owner) + OTel logs/traces/metrics (#2412) (5b20e9f)
  • dev: CTL-1349 — verify-updater, an objective adoption smoke test for GATE-3 (#2423) (f5347b3)
  • dev: CTL-1355 (1/n) — verify-node, a class-aware local node-profile check (all types) (#2424) (9503378)
  • dev: CTL-1355 (2/n) — catalyst-doctor grades a node against its class-specific rubric (#2425) (ae33fbb)
  • dev: CTL-1364 — scheduler.op span tier + default rawExec/claude-agents timeout (#2404) (60c5837)
  • dev: CTL-1365a — executor flag + resolution seam + catalyst.dispatch.mode telemetry (inert, default bg) (#2406) (19754bd)
  • dev: CTL-1365b — SDK executor (sdkRunPhaseAgent) + shared pre-launch refactor [HOLD FOR REVIEW] (#2408) (cf26bbe)
  • dev: CTL-1366 — Linear-data freshness gauge + data_stale alert (Phase 1) [HOLD FOR REVIEW] (#2410) (28cf4ad)
  • dev: CTL-1367 — SDK executor pre-canary hardening (#2417) (679deba)
  • dev: CTL-1368 — catalyst.node.class as a core fleet-wide resource dimension (#2422) (e1240be)
  • dev: inbox surfaces parked needs-human tickets from the cache (#2414) (a941208)
  • dev: split the conflated recovery-pass scheduler lap into recovery-pass + reclaim (#2367) (c74738b)
  • dev: wire Serena code-understanding MCP into research/analysis agents (#2369) (c996d95)

Bug Fixes

  • dev: CTL-1311 — board crashes (React #185) on any ?scope= — kill the URL↔atom self-heal loop (#2322) (c150fae)
  • dev: CTL-1315 — J4 reaper skips terminal triage-done dirs (inFlight gate) (#2328) (6d2f58d)
  • dev: CTL-1317 — Rulebook crashes on /rules (undefined s.length) — read cfg as { rows } (#2327) (f658825)
  • dev: CTL-1321 — exec-core boots accepting work by default (clear stale drain flag on boot) (#2335) (d7a9844)
  • dev: CTL-1323 — a recovery-pass-only worker dir strands its ticket from the new-work pull (#2338) (206103e)
  • dev: CTL-1324 — keep the scheduler responsive while cleaning up old worktrees (#2344) (81e72ce)
  • dev: CTL-1329 — stale-fenced orphan dirs no longer burn Linear OAuth quota (#2347) (37a0581)
  • dev: CTL-1332 — log shipper keeps full pino JSON body so Tier-1 fields reach Loki (#2352) (14386a3)
  • dev: CTL-1334 — log-shipper emits short host.name (first DNS label) so logs join metrics (#2362) (d948f56)
  • dev: CTL-1336 — thread warm agents snapshot into Pass 0a phantom sweep (zero-spawn liveness) (#2361) (d03e000)
  • dev: CTL-1338 — tracing.mjs degrades to no-op when @opentelemetry/api is absent (unbreak orch-monitor quality) (#2360) (4a8f6ab)
  • dev: CTL-1339 — cap the hot per-signal linearis read so a 429 stall can’t wedge the scheduler tick (#2371) (2d49bfe)
  • dev: CTL-1341 — a timed-out linearis read trips the breaker so a degraded pass short-circuits (#2375) (8e7a428)
  • dev: CTL-1362 — per-tick trace_id unique across restarts (boot nonce) (#2397) (bf09451)
  • dev: CTL-1363 — cluster-claim resolveIssueId via issue(id:) (unwedge fleet dispatch) (#2403) (21a7145)
  • dev: dedupe nav projects + repo icon auto-detect (#2418) (8eb398e)
  • dev: orch-monitor project roster reads config cwd-independently (#2413) (1766666)
  • dev: reclaim terminal-check trusts the read-replica regardless of age (crater the reclaim lap) (#2368) (d5c9b1f)
  • dev: repo-icon empty-favicon → avatar fallback (no blank icons) (#2420) (b7ca52f)