Skip to content

All versions since 12.57.0 (2026-08-17)

12.57.0 (2026-08-17)

Features

  • dev: CTL-1847 — the cloud feed can drive dispatch, behind off/shadow/enforce (#3439) (9193042)
  • dev: CTL-1891 inc 1 — a host recognises its own Linear write without asking who wrote it (#3437) (1c6f44f)

Bug Fixes

  • dev: CTL-1847 — restore DEFAULT_SETTLE_SEC; execute the parity CLI in tests (#3444) (385c9a2)
  • dev: CTL-1892 — the fleet has TWO app identities and both rotated; only one was seeded (#3436) (9ac3e07)
  • dev: CTL-1892 — the self-echo guard survives an app-actor rotation (#3428) (4e601ef)
  • dev: CTL-1901 — a mid-sweep readiness drop strands an already-stamped edge (#3448) (5f84a2b)
  • dev: CTL-1902 — readiness required the writer to be alive, not the feed to be arriving (#3449) (e530c25)
  • dev: CTL-1904 — the feed sees label changes the updated_at cursor cannot reach (#3446) (51a7f6a)
  • dev: pin @catalyst-cloud/sdk 0.8.4, closing the migrator/writer schema skew (#3426) (4997ebe)
  • dev: pin @catalyst-cloud/sdk 0.8.5, ending the pr_* frame loss (#3432) (88f24c3)
  • dev: pin @catalyst-cloud/sdk 0.8.6 — PRAGMA-accurate columns close the skew class at the root (#3433) (0be8892)
  • dev: pin @catalyst-cloud/sdk 0.8.7 — the replica tenant fence (#3434) (6dc1ab6)

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)

12.59.0 (2026-08-20)

Features

  • dev: CTL-2000 — steward-first escalation (resolver-independent slice) (#3742) (87ca75d)
  • dev: CTL-2074 phase 1 — cloud-proxy identity config seam (bot.cloud.botUserId) (#3738) (bbb56cb)

Bug Fixes

  • dev: CTL-1754 — the escalation card read a key written on 0 of 44 live signals, so it always said “(no reason)” (#3699) (7f562b6)
  • dev: CTL-1851 — an SDK worker cannot outlive its daemon, so a restart is PROOF its ghost is dead (#3694) (61587c8)
  • dev: CTL-1889 inc 4 — a status write with no linearis stopped reporting itself applied (#3724) (741cbd5)
  • dev: CTL-2045 — the install proved the credential could READ, and the incident was a WRITE it never tested (#3706) (318268f)
  • dev: CTL-2050 — an artifact that proves a phase succeeded retracts the infra failure that buried it (#3690) (c90e30a)
  • dev: CTL-2068 — a claim the pipeline can overwrite is not a claim (#3712) (18d8eb9)
  • dev: CTL-2068 — the guard shipped INERT on mini; resolve the state map through a ladder (#3714) (f499dcb)
  • dev: CTL-2076 — setup_project_config preserves committed Linear identity on regen; surface the registry team-identity mismatch (CAT-52) (#3736) (ef5b0b1)
  • execution-core: OTL-67 — SDK-dispatched workers lose per-ticket OTEL_RESOURCE_ATTRIBUTES to settings.json pin (#3721) (4cc82ce)

12.60.0 (2026-08-20)

Features

  • dev: CTL-1785 phase 1 — entitlement seam (zero-import leaf, tri-state flag, local provider, off by default) (#3755) (cccf3b4)
  • dev: CTL-1786 phase 1 — lease-authority.mjs cloud client + auth-spike probe (#3756) (dcad0fe)
  • dev: CTL-1864 — publish slot-based active_count on node.heartbeat (#3768) (7051350)
  • dev: CTL-1974 — codify catalyst-dev:project-orchestrator as thin steward wrapper (#3759) (4de7a1a)
  • dev: CTL-1985 — catalyst enrol one-key host enrollment installer (#3758) (a903177)

Bug Fixes

  • execution-core: CTL-2090 — triage-capped ticket can no longer deadlock admission (#3787) (2a649dc)
  • execution-core: CTL-2103 — scrub PATH so the gh-unavailable test is deterministic (#3778) (be1840b)

12.61.0 (2026-08-21)

Features

  • dev: CTC-133 — CQRS fencing split + SDK replica cutover (#3762) (15450f1)
  • dev: CTL-1984 — re-arm claude-accounts.env without daemon restart (#3809) (b24dedc)
  • dev: CTL-2070 — a timely per-ticket actor source (fleet write-ledger) for the lane-claim guard (#3765) (cf9efd0)

Bug Fixes

  • dev: CTL-1783 — a deliberate reopen archives the stale worker dir, doesn’t get re-Done’d (#3723) (2d6ee09)
  • dev: CTL-2082 — refresh linear skill against linearis drift (#3750) (a93eca9)

12.62.0 (2026-08-21) Latest

Features

  • dev: CAT-170 correlated recovery-pass retry-cap alerts (lands #3209) (#3842) (d8fab3b)
  • dev: CAT-173 surface mutual fence standoffs (lands #3241) (#3839) (083e390)
  • dev: CAT-46 durable liveness anchor health checks (lands #3219) (#3841) (42efe53)
  • dev: CTL-1210 — split node config by lifecycle (cluster-secrets.json + node.json) (#3823) (8c0dc4b)
  • dev: CTL-1679 — recovery pass retries safe/retryable failures by default (#3835) (f594755)
  • dev: CTL-1958 — owner comms tools write through the cloud proxy, read from the replica; mint deleted (#3816) (cee3edf)
  • dev: CTL-2085 — auto-update claude CLI and Agent SDK on persistent hosts (#3817) (668c731)
  • dev: CTL-2151 — ask skill gains duplicate-search and blast-radius triage (#3866) (1bff497)

Bug Fixes

  • dev: CAT-116 — validate registry identity at dispatch revision (#3838) (5343dc1)
  • dev: CAT-124 close deferred recovery-pass review findings (#3836) (542d69e)
  • dev: CAT-139 — watchdog runner accepts an explicit —config path (#3833) (4f4c567)
  • dev: CAT-251 — prevent HOME-restoration leaks in tests (#3834) (bf5be52)
  • dev: CAT-47 commit the audit-comment dedup latch only on confirmed delivery (#3831) (5e6fee4)
  • dev: CTL-1550 — Bounded event-log coverage correctness (4 bugs: backfill probe, cap size, window clamp, first-line drop, per-event filter) (#3760) (d52d085)
  • dev: CTL-1596 — cluster secret sync hardening (5 latent bugs) (#3821) (80fd237)
  • dev: CTL-2052 — classify the refused proxy label-write, cool it down, and stop after N (#3815) (6069d8b)
  • dev: CTL-2056 — fix two fleet alarm blind spots (ratelimit-poller + escalation counter) (#3761) (fb66677)
  • dev: CTL-2108 — emit entitlement.restored.<host> when a shed host regains entitlement (#3840) (e6a0581)
  • dev: CTL-2137 — exclude listing-blocked bg sessions from the admission count (#3846) (7d8480d)
  • dev: trust the Tailscale MagicDNS name in the monitor’s reply-origin allowlist (#3830) (d8bde5d)