Catalyst Dev — Change Log
12.18.0
Jun 28, 2026
Catalyst CLI Router & Node Backup
This release adds a top-level catalyst command that routes to all existing tools by verb (start, stop, doctor, update, and more), with any unrecognized subcommand auto-delegating to the matching catalyst-<x> script. Alongside it, catalyst-backup lets you snapshot a node’s full restorable state — config, credentials, database, and daemon inventory — before any install or uninstall phase touches it, with a manifest-driven restore that refuses to run against a live node. The release also ships a completion-signal-driven Linear reconciler that moves tickets to Done only when work is explicitly declared complete, not inferred from PR events, and fixes two icon-picker recovery bugs where stale cached bundles and poisoned manifest promises left icons blank even after the dist was healthy.
PRs
- dev: CTL-1369 (1/n) — top-level
catalystCLI router + catalyst.install.* telemetry contract (#2429) (3734d01) - dev: CTL-1369 (2/n) — catalyst-backup: capture/restore a node’s restorable state (#2446) (76e1266)
- dev: CTL-1371 — deterministic PR→Linear state reconciler (no native automation) (#2431) (70feab0)
- dev: CTL-1370 — icon-picker manifest load self-heals after a transient chunk failure (#2428) (88f26e5)
- dev: CTL-1371 — make the reconcile timer multi-team/fleet-functional (#2443) (7adecc6)
- dev: CTL-1372 — bound orch-monitor renderer memory growth on long sessions (#2434) (1a8fd3e)
- dev: CTL-1373 — icon-picker Reload hard-recovers the PWA (unregister SW + clear caches) (#2441) (6bf17cb)
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)
12.16.0 (2026-06-22)
Board-Health Holistic Dispatch & Cloud Token Provisioning
Board-health now dispatches a single holistic recovery-pass delegate on enforce scans, carrying full board context to the anchored ticket rather than triggering per-move fan-out. A multi-host correctness fix ensures selectAnchor only picks tickets this host owns via HRW, so a foreign-owned anchor no longer silently blocks actuation of self-owned work. Separately, CATALYST_CLOUD_TOKEN is now provisioned into the machine-level environment from the cluster repo via a new projection script, with an advisory doctor check — local-only behavior is unchanged until you opt into the cloud path.
Features
- dev: CTL-1300 — board-health delegate ACTS (holistic recovery-pass dispatch on enforce) (#2301) (43aaec9)
- dev: CTL-1307 — machine-level CATALYST_CLOUD_TOKEN from catalyst-cluster repo (#2316) (9ff454d)
Bug Fixes
- dev: CTL-1302 — board-health selectAnchor prefers a self-owned ticket (multi-host) (#2305) (72e4945)
12.15.0 (2026-06-21)
Stale Worktree Reclamation & Fleet Hardening
The automated stale-worktree sweeper now uses a multi-signal classifier to distinguish safe-to-delete, salvageable, and active worktrees — with battery-aware deferral, a per-run removal cap, and OTel instrumentation per sweep. Alongside that, several fleet-reliability fixes land: the board dispatch gate now routes on delegate instead of assignee (unwedging boards where human assignment blocked every Todo ticket), the recovery-pass bounded-LLM FIX rung is repaired after a missing evidence.signal field made it structurally dead in production, and a daemon boot-breaking missing export from config.mjs is resolved. PWA push notifications for the orch-monitor and a gitleaks CI secret-scanning gate round out the release.
Features
- dev: CTL-1030 — Automated stale-worktree reclamation (multi-signal classifier) (#1827) (8a5b127)
- dev: CTL-1093 — node identity survives hostname change without splitting fleet history (#1927) (780cca3)
- dev: CTL-1167 — PWA push notifications for orch-monitor (#2057) (2b24ebb)
- dev: CTL-1204 — gitleaks secret-scanning CI gate + optional pre-commit hook (#2297) (0099e67)
- dev: CTL-1290 — board-health delegate (shadow-first) (#2295) (8a6b46b)
- dev: CTL-1292 — catalyst-join provisions a member node to fully-operational state (#2286) (3fae97e)
Bug Fixes
- dev: board deriveAttention cross-checks Linear terminal state (CTL-1239) (#2205) (5c7decd)
- dev: CTL-1174 — gate dispatch on delegate-ONLY + delegate-on-Todo (unwedge the board) (#2285) (60c0783)
- dev: CTL-1242 — reap stale signals + needs-human fix for terminal/merged tickets (#2212) (6136362)
- dev: CTL-1297 — HRW owner preempts stale cross-host claim (TTL-based) (#2296) (848ca4e)
- dev: CTL-1299 — populate evidence.signal so recovery-pass bounded-LLM FIX rung fires (#2300) (8e7a69d)
- dev: restore export on getCatalystRepoDir — daemon boot broken fleet-wide (#2291) (406f28b)
12.14.0 (2026-06-19)
Recovery Observability & Cache Coverage
The recovery delegate now emits recovery.tick and recovery.decision events to Loki on every pass, so you can finally distinguish a board where the delegate examined items and handed them to humans from one it silently never processed. Control-loop numerics from those events — plus scheduler parallelism and autotune gauges — are promoted into OTel attributes, making queue depth, action breakdowns, and decision rules chartable in dashboards. The board-cache reconciler also fixes a starvation bug where only the alphabetical prefix of tickets ever reconciled; per-tier rotation cursors now ensure both active-pipeline and Backlog tickets are covered across passes, which should clear the phantom “stuck” tickets that were showing as open PRs despite being done.
Features
- dev: CTL-1287 — recovery delegate emits per-tick recovery.tick/recovery.decision (#2276) (ae419a6)
- dev: CTL-1291 — chartable control-loop numerics via OTel attribute promotion (#2282) (29db3b4)
Bug Fixes
- dev: CTL-1285 — Alloy log-shipper survives via dedicated KeepAlive LaunchAgent (#2273) (849929d)
- dev: CTL-1288 — cache reconcile covers the whole board via per-tier rotation cursors (#2278) (ca8b808)
12.13.0 (2026-06-19)
Board Health & Log Observability
The broker now periodically reconciles board cache state and labels against live Linear, closing the gap where a missed webhook left tickets lying about their status indefinitely. Dead doc-phase workers that go transcript-silent are detected and reclaimed, unblocking slots that previously sat starved for up to six hours. Grafana Alloy is installed and auto-started per host to ship daemon logs into Loki, queryable by stable node name alongside the existing OTel event streams.
Features
- dev: CTL-1245 — revive dead-but-running-signalled workers (#2195) (8c420f8)
- dev: CTL-1260 — reframe recovery-pass into the board-health delegate (#2254) (33101d6)
- dev: CTL-1262 — tag otel-forward events with stable catalyst.node.name resource attr (#2242) (c6c0000)
- dev: CTL-1263 — install + register + auto-start the Alloy log-shipper per host (#2248) (8cd288a)
- dev: CTL-1277 — periodic broker reconcile of board cache state+labels vs live Linear (#2264) (bbf9b22)
- dev: CTL-1279 — sensing-substrate cookbook + wire recovery-pass to it (#2261) (e6479a0)
- dev: CTL-1282 — cache reconcile async + re-entrancy guard (non-blocking) (#2270) (9736317)
- dev: off-the-shelf Grafana Alloy daemon-log shipper config (CTL-1261) (#2243) (425356c)
Bug Fixes
- dev: CTL-1258 — render resolved project icon (glyph|favicon) consistently across all orch-monitor surfaces (#2225) (983905d)
- dev: CTL-1277 — broker boot-crash (pino logger binding) (#2265) (472adfe)
- dev: log-shipper service.name + catalyst.node.name tagging (semconv) + brew formula (#2250) (fa9c244)
12.12.0 (2026-06-17)
Cross-Host Control Plane & Monitor Stability
This release lands the cross-host single control plane: multiple machines now publish and merge liveness heartbeats correctly, fixing a Linear GraphQL bug that silently blocked all cross-host heartbeat writes and a merge-ordering issue that caused the self-host to appear degraded. The broker now detects when the monitor goes silent (via an out-of-process ingestion-silence detector) and raises a disk-readable alarm instead of staying falsely green. A batch of monitor stability fixes ships alongside: RSS no longer ratchets to multi-GB from repeated full event-log reads, the icon picker’s virtualizer scroll container renders correctly, stale dist chunks no longer accumulate across rebuilds, and the broker now runs bun install automatically when dependencies change after a pull.
Features
- dev: cross-host liveness → single control plane (CTL-1251) (#2197) (4804777)
- dev: CTL-1122 — out-of-process ingestion-silence detector (PR1) (#2216) (be4fa5f)
- dev: CTL-1156 parameterize monitor server project config path (#2213) (6388415)
- dev: CTL-1223 broker runs bun install after pull when deps changed; surface silent vite-build failures (#2210) (74650e7)
- dev: CTL-1240 wire gateway tier into scheduler tick (Linear read-hammer fix) (#2209) (729cfaf)
- dev: recovery-pass — agent-coordination comments + verify-the-work-not-the-status check (#2204) (9d03c0b)
- dev: recovery-pass — context/mode script (signals+log+Linear-cache, HRW-filtered) + sweep SOP (#2198) (92d49f1)
- dev: recovery-pass — forbid —admin/force-merge past failing CI (#2202) (ad7fe23)
Bug Fixes
- analytics: catalyst-agent reads Claude token from credentials file, not just Keychain (#2219) (30ce8cb)
- dev: cluster-heartbeat publish actually works + newest-wins liveness merge (CTL-1255) (#2203) (c52e10a)
- dev: CTL-1243 route source_conflict stall to bounded-LLM; add linearTerminal guard (#2208) (86fd7d9)
- dev: CTL-1252 collapse FQDN host names to first DNS label (#2218) (4f7ee3d)
- dev: CTL-1253 — show detected repo favicons in the project icon picker (#2222) (f501512)
- dev: CTL-1254 — stage+swap monitor UI build so dist chunks don’t accumulate (#2220) (26b236b)
- dev: CTL-1257 — memoize un-ringed event-log readers off the 3s board-recompute (bound monitor RSS) (#2223) (0d39abb)
- dev: monitor repoOwners from registry, not stale committed roster (§13 — fixes Adva icon 404) (#2189) (8a9275c)
- dev: remove CSS Size Containment from virtualizer scroll container (CTL-1254) (#2211) (5cbcd93)
- dev: surface recovery-pass/remediate explanation in inbox row + detail card (#2206) (f41ed2c)
12.11.0 (2026-06-17)
Cluster Control Plane & Autonomous Recovery
This release lands two major systems: a GitOps cluster control plane (catalyst cluster sync, cluster-repo-first roster, SOPS-encrypted secrets) and a fully wired autonomous recovery pass that now acts on stalled tickets rather than just classifying them — resolving merge conflicts, rebasing, and re-dispatching phases before escalating to a human. The reaper also gains the ability to auto-remove squash-merged worktrees, and N dashboard clients now share a single backend SSE tail instead of spawning separate full-log reads per connection.
Features
- dev: CTL-1135 — additive caused_by on the event envelope (#2123) (47035f2)
- dev: CTL-1186 — catalyst doctor: fail-closed activation gate for new cluster nodes (#2109) (6c4d910)
- dev: CTL-1188 — catalyst cluster CLI (status/add/remove/rename/set-anchor/drain/tune) (#2116) (d062a42)
- dev: CTL-1208 — curated color-tinted project icon set picker (Phosphor glyphs) (#2115) (5b14eca)
- dev: CTL-1211 — cluster control-plane (catalyst-cluster repo + SOPS) load-side: cluster-sync, cluster-repo-first roster, schema versioning, observability verbs (#2181) (8f55595)
- dev: CTL-1212 — grouped project settings page (Identity/Source/Workflow) + three-tier nav + one-click gear (#2127) (4de6396)
- dev: CTL-1214 — durable cluster-node installer (PATH-B #1–#6 + adversarially-verified hardening) (#2159) (fd85d21)
- dev: CTL-1215 — consolidate monitor event-log reads behind a shared tail + bound caches (#2135) (95ec3a2)
- dev: CTL-1218 — reaper auto-removes squash-merged worktrees (provenance + GitHub merge signal + queue drain) (#2143) (3ae063f)
- dev: CTL-1219 — wire unstuck-sweep deterministic act-seams (ships off/inert) (#2140) (460e2c3)
- dev: CTL-1222 — deep-link notifications to action surfaces (#2154) (9731ff7)
- dev: CTL-1224 — route SSE backlog + live tail through the shared event-ring (N clients = one tail) (#2141) (0ea15c5)
- dev: CTL-1225 — first-click Save + confirmation + cross-project reset (Project Settings) (#2144) (755df8c)
- dev: CTL-1226 — searchable icon grid picker backed by full Phosphor set (#2145) (72057f6)
- dev: CTL-1233 — hybrid Phosphor loader + virtualized All-icons picker (#2168) (9805069)
- dev: CTL-1235 — emit running version + commit + drift-from-main (agent telemetry) (#2169) (73fe804)
- dev: recovery-pass skill — goal-driven senior-engineer pipeline-unstick agent (#2184) (047e701)
Bug Fixes
- dev: CTL-1176 — raise escalation bar: merge conflicts → BOUNDED-LLM, not HUMAN (#2156) (ad9c426)
- dev: CTL-1176 — real recovery actuators (emit/post/seam/remediate/cooldown) + DIAGNOSE evidence + inbox reader (#2163) (3863adb)
- dev: CTL-1176 — wire reasoningRecoveryPass into scheduler as autonomous Pass 0r (#2157) (ab9e110)
- dev: CTL-1191 — HRW-gate the 3 recovery passes over the surviving roster + terminal-state filter (#2173) (38ed942)
- dev: CTL-1235 — clean metric names (drop _ratio suffix on build_info/commits_behind) (#2171) (2df7f6c)
- dev: CTL-1237 — stamp host.name on bg-worker OTEL attrs (claude_code host_name=null) (#2167) (768d5ac)
12.10.0 (2026-06-16)
Multi-Node Cluster Onboarding & Failed-Phase Escalation
Two gaps that let work fall through silently are closed in this release: failed phases now surface identically to stalled ones — inbox row, amber nav dot, /queue Needs You bucket, and a Linear needs-human label with the worker’s structured explanation attached. On the infrastructure side, catalyst-join.sh and catalyst cluster join-token make adding a second node a one-line operation: mint a short-TTL token on the seed, run the curl | bash on the joining node, and the script handles Tailscale preflight, bundle fetch, config merge, and service installation with full resumability on retry. This release also ships worker-dir GC to prevent per-tick I/O blowup as worker directories accumulate, the orch-monitor as an installable PWA, launchd auto-start via catalyst-stack install-services, and editable project settings saved server-side from the monitor.
Features
- dev: CTL-1131 — durable needsHumanSince anchor + escalation signal persistence (Phases 1–2) (#1995) (ada430e)
- dev: CTL-1133 — installable PWA for the orch-monitor (#2049) (1289b5a)
- dev: CTL-1152 — config-driven, server-authoritative project roster in the monitor (#2031) (51f56be)
- dev: CTL-1153 — editable project settings in the monitor (server-saved) (#2092) (57c8f12)
- dev: CTL-1166 — catalyst-stack install-services (launchd auto-start on boot) (#2047) (15925c3)
- dev: CTL-1168 + CTL-1178 — Linear-match Tickets board (fixed columns, per-column flat scroll, viewport-capped grouped lanes) (#2044) (f70de89)
- dev: CTL-1170 — async sweeps to unblock heartbeat event loop (#2058) (d086770)
- dev: CTL-1172 — labeled service-health indicator in the orch-monitor footer (#2055) (c301d36)
- dev: CTL-1173 Phase 2 — fix applyAssignee read-back to verify Issue.delegate.id (#2064) (68181f1)
- dev: CTL-1175 — orphan-PR detect+notify sweep raises Needs-You inbox row (#2065) (6d2ac03)
- dev: CTL-1180 — surface failed phases as needs-human (monitor + daemon) (#2095) (9a8027b)
- dev: CTL-1184 — catalyst-cluster join-token + join-token-store.mjs seam module (#2097) (df2b838)
- dev: CTL-1185 — catalyst-join.sh one-line node onboarding (#2110) (5122573)
- dev: CTL-1203 — secrets 600 hygiene: installer enforcement + doctor assertion (#2104) (d9fd590)
- dev: CTL-1205 — worker-dir GC to prevent per-tick I/O blowup (#2112) (9c5d933)
- dev: CTL-1206 — flat board per-column scroll restoration (#2113) (9b1db6d)
- dev: CTL-935 shadow comparators + disagreement report + flag-live verification (#2101) (6922530)
Bug Fixes
- dev: CTL-1169 — daemon-health hysteresis (stop the degraded↔healthy notification flap) (#2052) (e045155)
- dev: CTL-1171 — broker liveness heartbeat (stop the idle-broker false-down) (#2056) (8f28285)
- dev: CTL-1181 — loud needs-human escalation + proactive token detour in phase-pr (#2093) (e1adadd)
12.9.0
Jun 15, 2026
Process Pipeline Visualization & Fleet Stability
Click any worker row in the orch-monitor to see its real-time metrics and activity feed, plus a new /process route that maps the daemon’s 9-phase FSM pipeline with live ticket dots overlaid on each phase. Desktop client launches server-agnostic with setup screen for any Catalyst instance. Critical fleet memory leak fixed — execution-core now runs for months without restart, with bounded background workers and job directory cleanup.
PRs
- dev: CTL-1011 — make applyAssignee self-assign loud (config-missing & scope-failure) (#2046) (34077e3)
- dev: CTL-1101 — /process route FSM machine map in orch-monitor (#1970) (62e3fde)
- dev: CTL-1112/1149 — Catalyst desktop client (consolidated, server-agnostic) (#2019) (0897b44)
- dev: CTL-1132 — tickets board visual polish (column fill, tray lift, band separation, sidebar gap) (#2005) (7e84e90)
- dev: CTL-1144 — tickets board polish (balanced columns, card elevation, full-height bands, total count) (#2008) (1be0d13)
- dev: CTL-1146 — card elevation (tray s1→s0) & band hue bump (6→9%) (#2016) (85240d2)
- dev: CTL-1148 — fix selected toggle chip fill in light themes (#2015) (3bcb73a)
- dev: CTL-1158 — surface PR merge-state on BoardTicket for stuck-PR inbox attention (#2033) (a2ca8e1)
- dev: CTL-1150 — add triage-artifact guard to scheduler Pass 2 new-work dispatch (#2038) (67434e0)
- dev: CTL-1161 — broker webhook-independent merge refresh (#2034) (609134f)
- dev: CTL-1165 — bound the execution-core fleet (reap-leak fix, 5 drivers) (#2045) (4915f7d)
- dev: CTL-863 follow-up — fence sweep-2 cycle label write + remove thoughts symlinks from tracking (#1809) (8f6b49d)