Skip to content

Catalyst Dev — Change Log

Version 12.58.0 (2026-08-19)

Features

  • dev: CTC-403 inc 1 — a host resolves Linear team and state ids from the replica, not from hand-written caches (#3501) (e42f861)
  • dev: CTC-633 — the disk sweeper reports free space, and stops keeping every worktree forever (#3504) (f757f74)
  • dev: CTL-1889 inc 1 — a host’s Linear writes go through the cloud write proxy, under ONE grant (#3489) (7d9e8cd)
  • dev: CTL-1889 inc 2 — every execution-core Linear comment goes through the cloud proxy under enforce (#3547) (3711854)
  • dev: CTL-1889 inc 3 — the cluster fence + heartbeat go through the cloud attachment proxy (CTC-692) (#3555) (e24bda2)
  • dev: CTL-1893 — the replica path derives from the ACCOUNT (increment 1: the resolver) (#3561) (61d6870)
  • dev: CTL-1908 — doctor reports when a login shell spends the FLEET’s Claude budget (#3506) (cd774d2)
  • dev: CTL-1908 — page at 80% of an armed account’s window, before the fleet stalls (#3526) (04e2ce5)
  • dev: CTL-1914/1917/1918 — the documented install ends with a working node, not a list of hand-steps (#3500) (0671d38)
  • dev: CTL-1916 — ship the cutover-verification tool instead of re-deriving it each session (#3496) (35035c5)
  • dev: CTL-1922 — ask skill: ask/decision-ticket SOP + threaded app-actor reply helper (#3480) (c9582a2)
  • dev: CTL-1922 — 👀 ack on the human’s latest comment; reply clears it; newest-first fix (#3484) (54203ef)
  • dev: CTL-1922 inc 2 — ask create / ask accept verbs that PROVE the ask is decidable (#3509) (92e32ca)
  • dev: CTL-1929 — run the GitHub producer in shadow, behind its OWN knob, with enforce refused by name (#3524) (773675a)
  • dev: CTL-1929 — the GitHub feed’s read + event layers, with both blockers named rather than papered over (#3513) (780d309)
  • dev: CTL-1929 — the GitHub leg’s enforce flip, suppressing smee PER NAME (#3535) (98ec1ed)
  • dev: CTL-1929 — the installer stops opening the GitHub smee tunnel once the feed is authoritative (#3540) (6a5f359)
  • dev: CTL-1929 — the sweep, the suppression set, and a parity ledger that can return INCONCLUSIVE (#3520) (aa599ed)
  • dev: CTL-1929 — wire check_suite.completed, and make BOTH remaining names’ coverage a property of the replica (#3560) (3fab3bb)
  • dev: CTL-1929 — wire pr.merged and per-push into the producer on schema 0.1.17 (#3544) (538214a)
  • dev: CTL-1931 — the dep-skew detector can see a writer running the WRONG checkout (#3493) (85f16a9)
  • dev: CTL-1935 — pin the catalyst-index serving root to a git SHA (COORD decision 2) (#3525) (d4084ca)
  • dev: CTL-1936 — a host bounds its own cloud write spend, and stops re-issuing a write that already converged (#3505) (4aec522)
  • dev: CTL-1943 — a dispatched phase narrates itself as a Linear agent session, without blocking the tick (#3529) (6a413b3)
  • dev: CTL-1944 — a fleet host proves it can materialize owner tokens, and installs direnv when it cannot (#3539) (b8adf84)
  • dev: CTL-1951 — the ROUTINE fleet reload advances the pinned indexer serving root, out of the broker’s event loop (#3542) (8cade58)
  • dev: CTL-1961 — register the reaction + issue-create proxy routes, measured at the dispatcher (#3647) (60c5c38)
  • dev: CTL-1975 — the uninstall could not remove two agents its own verify-clean fails on (#3606) (5d842e7)
  • dev: CTL-1993/CTL-2001 — the steward skill, and one canonical copy of the threading contract (#3612) (109da9c)
  • dev: CTL-1994 — a supervisor keeps a long-running role alive, so the SOP’s response times are a mechanism and not a promise (#3614) (f688265)
  • dev: CTL-1995 — the concierge skill: one door, one page, and no authority over stewards (#3615) (223aa30)
  • dev: CTL-1996 — AGENTS.md teaches the coordination roles, and CI catches the block drifting (#3618) (b48ec01)
  • dev: CTL-2042 — fleet host env-file materialization + doctor drift check (#3686) (da98683)

Bug Fixes

  • dev: COORD-236 — the 60-second cool-down that would have stopped the label storm already existed; it could not see a budget refusal (#3667) (f29dbba)
  • dev: CTL-1832 — the PLUGIN_ROOT guard scans SKILL.md only, and progressive disclosure has moved the uses into references/ (#3660) (79874f2)
  • dev: CTL-1906 — the parity harness counts the feed’s own events as smee under enforce (#3452) (17cd352)
  • dev: CTL-1909 — readiness un-armed on the sweep’s most common HEALTHY outcome (#3469) (bedc8c3)
  • dev: CTL-1910 + CTL-1913 — the cloud installer pinned an NXDOMAIN host and never validated the token (#3470) (65bd1cf)
  • dev: CTL-1918 — catalyst-doctor is CRASHING on every host (an extracted default referencing doctor’s own scope) (#3515) (a9ffd66)
  • dev: CTL-1920 — a writer re-seed is a torn read, not 400 changed tickets (#3481) (1c59b7b)
  • dev: CTL-1921 — every new worktree inherited 1.3 GB of other agents’ scratch checkouts (#3472) (59385d9)
  • dev: CTL-1928 — the join bundle stops re-creating the retired Linear smee path (#3485) (9251f2b)
  • dev: CTL-1929 — an EMPTY check_suite association is a fact, not a gap; emit it, and put the recovered PR where nothing routes on it (#3563) (094eff3)
  • dev: CTL-1929 — set aside the suite conclusions the mirror cannot store (CTC-719), and collapse an observation node’s duplicated deliveries (#3565) (e4134eb)
  • dev: CTL-1929 — the P8 gate compared a young table against a long window and fabricated a FAIL; window both sides (#3573) (41a1a17)
  • dev: CTL-1929 — the parity ledger compares only repos smee can deliver, so CLEAN is reachable (#3551) (03b9399)
  • dev: CTL-1929 — the parity ledger says when its WINDOW, not the feed, produced the gap (#3562) (29cf9cb)
  • dev: CTL-1929 — the preflight checks EVERY repo on the tunnel, because the ledger structurally cannot (#3569) (67a7862)
  • dev: CTL-1931 — the dep-skew detector can reach a verdict on a bun isolated-linker host (#3499) (8c4dc40)
  • dev: CTL-1937 — a cli/*.mjs run by a SHELL refuses on its own, and CI keeps it that way (#3516) (5464175)
  • dev: CTL-1937 — a mis-invoked CLI module cannot become a 7,592-process fork chain (#3511) (7ea8206)
  • dev: CTL-1947 — an account the poller CANNOT sample now says so, instead of leaving an absent series (#3545) (faaddb1)
  • dev: CTL-1949 — the documented ask create path filed nothing and exited 0, and cross-team asks carried the wrong labels (#3531) (b77e8d6)
  • dev: CTL-1952 — a fully successful narration was recorded as a failure; the session route answers per part (#3538) (6bf7180)
  • dev: CTL-1956 — the direnv provisioning a host actually needs, on hosts that have no brew (#3552) (457f025)
  • dev: CTL-1963 — doctor asserts the cloud-sync launchd label resolves to ~/Library/LaunchAgents (#3572) (3b7eaae)
  • dev: CTL-1968 — a scratch HOME is not a launchd sandbox, so the install paths refuse it (#3576) (b70211b)
  • dev: CTL-1976 — the gate reads the readiness file the PRODUCER writes, not one under the caller’s dir (#3585) (39037d1)
  • dev: CTL-1997 — two out-of-date skill instructions, each verified at file:line, and one the audit got wrong (#3630) (c7b9f2d)
  • dev: CTL-1998 — main is red on a guard that could not fire for the change it guards (#3656) (6f4afb6)
  • dev: CTL-1998 — two real phase-pipeline defects: an unbound $EMIT crash and a plan glob the dispatcher and the phase disagree about (#3653) (91284f7)
  • dev: CTL-2008 — the broker folds github.pr.* into pr_status_cache, because retiring smee left the table with no writer (#3633) (a79ad89)
  • dev: CTL-2019 — setup wrote the cloud account to a file and then refused to read it, so the whole install aborted (#3637) (88a7216)
  • dev: CTL-2022 — the parity ledger reads the stream enforce actually emits, and a marker moves the verdict (#3644) (4337d64)
  • dev: CTL-2024 — a cleared stall could never re-enter its phase, because the janitor’s unstick left CTL-1805’s advance marker standing (#3649) (3740736)
  • dev: CTL-2026 — doctor could certify a host whose live Linear write path is a directory it never looks at (#3679) (34cda74)
  • dev: CTL-2028 — a pid file naming a LIVE peer was clobbered on start and deleted on exit, so two brokers ran for 85 minutes and every status read clean (#3675) (cba6bed)
  • dev: CTL-2030 — doctor graded whether smee was CONFIGURED, so after the cutover it reported a dead route as wired (#3672) (8146056)
  • dev: CTL-2033 — the cross-host claim could not say why it lost, so a refused write and a lost race were the same value (#3664) (07a4469)
  • dev: CTL-2047 — a triage budget held by a failed scan printed the same line as a busy one (#3682) (e7b41a5)
  • dev: CTL-2048 — a fence the worker could not READ was reported as a fence it read and found STALE (#3685) (c511edb)
  • dev: CTL-879 — the sixth blind gate, found by reading the first instrument: the cross-host claim declines at log.debug (#3661) (5e84413)
  • dev: CTL-879 — the triage admission path declined 20 tickets an hour and wrote down nothing (#3659) (8002c5d)