Repository navigation
Releases
SightMesh 0.13.3
SightMesh 0.13.3
Hotfix over 0.13.2: activating a newer executor from an older running one timed out because the activation probe only fell back on HTTP 404, while the old executor answers HTTP 400 for the new one-query route. Both now mean "use the per-session walk". Everything else is 0.13.2.
SightMesh 0.13.2
SightMesh 0.13.2
Closes the executor-seam problems found while running the 0.13.1 train live, each fixed on both sides and merged only after independent adversarial review at the exact head (sightmesh #110, five rounds; cdesktop #34, three rounds).
- Finished tasks cannot come back. When a task completes, is cancelled, or is lost, its queued executor commands are cancelled durably and the task keeps its admission capacity until the executor confirms every command is dead. Mail can only be sent to a running task; a message that lands in the same instant a task finishes is cancelled, not dispatched. (#105 resurrections.)
- Admission counts reality. A loss sweep runs across every scope before capacity is counted, so dead
activerows from a crashed manager no longer hold the fleet-wide cap. Expired launch reservations are swept and can be reissued. - Updates converge. Drain mode refuses only new starts; stops keep working. The activation probe asks the executor for running executions in one query, retries transient failures inside the drain window, and names what it is waiting on. (#108.)
- Executor (cdesktop 0.2.9, pinned): per-command cancel endpoint; terminal commands never revived by startup recovery; manager reports no longer interrupt the lead; workspace summaries built from metadata only (#100); drain state test-isolated.
Still open: the executor's refusal reason (for example the host process budget) should reach the operator instead of a bare "launch was lost" (#108).
SightMesh 0.13.1
SightMesh 0.13.1
0.13.1 supersedes 0.13.0, which could not launch tasks. The live canary's first sightmesh start raised FenceHeldError: building the launch request resolved the repository over HTTP while the task fence was held, and the runtime guard from #85 correctly refused. The suite had passed because the cdesktop test doubles did no I/O and never tripped the guard. This release (#109):
- Every cdesktop request made while a fence is held now runs with the gate open (
fence.external_io()), and the durable decision is re-validated on(epoch, version)after the gate closes before any native dispatch: a task cancelled or replaced during the I/O never issues a launch from a stale snapshot. Covers start, failover launch, provider lookup, failure observation, checkpoint reads inreplace(), and the replacement handoff (transfer_ownershiptakes the caller's I/O gate and abefore_spawncheck). - The managed-launch contract probe runs before the fence on every entry path (replace, failover, recovery), never under it.
- Both test doubles trip the same fence guard in every method that stands in for HTTP, so this class fails in CI from now on; the change alone reproduced the canary failure in 50 tests before the fixes.
- Regressions: cold-instance replace; cancel during request build issues no native launch.
Everything below shipped in 0.13.0 and is unchanged: Every kernel PR merged only after the simulator was green and an independent adversarial review approved the exact head.
- Liveness (#84): stall/loss/budget predicates with episode-deduped wakes and a monotonic watermark; legacy kill paths deleted.
- Observability (#83): task-local surfaces, attention queue, structural redaction of every durable write (nested JSON, bearer/basic tokens, key prefixes, JWTs, URL userinfo), drain-first update activation.
- Routing (#85): typed-outcome failover with standard/deep route classes; every launch kind and every terminal writer goes through one per-task lifecycle fence with reload-under-lock; no network I/O can happen while a fence is held (runtime guard on every transport opener); superseded launches are stopped, never activated.
- External runs (#106, closes #55): durable wake subscriptions and live-only output-root leases for external long-running processes; authoritative terminal receipts; lost/unknown never inferred as success; parked delivery with one dedupe key.
- Defaults: kernel tasks launch unattended (BYPASS_PERMISSIONS) in their own worktree (#98); message ack-wait opt-in and kernel-side launch admission cap (#94); pool-credential doctrine documented (#95).
- CI integrity: the pinned-runtime check can no longer mask an import failure (#104); the advisory edge lane installs the package before importing it (#97).
- Release contract (#96): GitHub Release canonical, PyPI as install convenience, installers pin and verify.
- cdesktop pin: bumped to the fork's 0.2.8 pre-release, which carries fleet-wide coding-agent admission (direct launches included), unrevivable Replace-cancelled commands, owner-fenced managed-task finalization, an atomic Codex fork budget, and the fixture-panel removal.
Known issues carried: cdesktop /workspaces/summaries latency (#100); lead-kill and stale-mail resurrection asks (#105).
SightMesh 0.13.0
SightMesh 0.13.0
Kernel train after the v1 rewrite. Every kernel PR merged only after the simulator was green and an independent adversarial review approved the exact head.
- Liveness (#84): stall/loss/budget predicates with episode-deduped wakes and a monotonic watermark; legacy kill paths deleted.
- Observability (#83): task-local surfaces, attention queue, structural redaction of every durable write (nested JSON, bearer/basic tokens, key prefixes, JWTs, URL userinfo), drain-first update activation.
- Routing (#85): typed-outcome failover with standard/deep route classes; every launch kind and every terminal writer goes through one per-task lifecycle fence with reload-under-lock; no network I/O can happen while a fence is held (runtime guard on every transport opener); superseded launches are stopped, never activated.
- External runs (#106, closes #55): durable wake subscriptions and live-only output-root leases for external long-running processes; authoritative terminal receipts; lost/unknown never inferred as success; parked delivery with one dedupe key.
- Defaults: kernel tasks launch unattended (BYPASS_PERMISSIONS) in their own worktree (#98); message ack-wait opt-in and kernel-side launch admission cap (#94); pool-credential doctrine documented (#95).
- CI integrity: the pinned-runtime check can no longer mask an import failure (#104); the advisory edge lane installs the package before importing it (#97).
- Release contract (#96): GitHub Release canonical, PyPI as install convenience, installers pin and verify.
- cdesktop pin: bumped to the fork's 0.2.8 pre-release, which carries fleet-wide coding-agent admission (direct launches included), unrevivable Replace-cancelled commands, owner-fenced managed-task finalization, an atomic Codex fork budget, and the fixture-panel removal.
Known issues carried: cdesktop /workspaces/summaries latency (#100); lead-kill and stale-mail resurrection asks (#105).
Do not install 0.13.0. Live canary found a launch regression:
sightmesh startraisesFenceHeldErrorbecause the launch request resolves the repository over HTTP while the task fence is held. Fixed in 0.13.1 (with the test fake routed through the same guard so this class is caught in CI). PyPI 0.13.0 remains for provenance only.
SightMesh v0.12.1
Experimental release. Patch on 0.12.0; same caveats apply.
What changed
- Accept the pinned cdesktop seam's HTTP 400 "Managed task effect not found" (and a corrected future 404) as definitive effect absence, centralized in
cdesktop.is_effect_not_found. - Unblocks the managed-task-launch capability probe (and therefore managed launches) against the real pinned executor, and restores reservation retirement in
expire_reservations.
Evidence
- Commit:
7d40ea0affc92ac2b656c24ecfd5fc23f3e09bdd(fix merged atf934d8b, PR #81) - Compatibility: green 3.11-3.13 on both PRs
- Verified live against the running cdesktop service: the real miss response classifies as absence
- 414 tests including a locking test with the server's exact miss shape
Known limitations
- Unchanged from v0.12.0 (routing chains, liveness predicates, drained-activation requirements).
- Wave S follow-up: the seam route should return 404 for a miss; this release tolerates both.
SightMesh v0.12.0
Experimental release. This release does not claim production reliability. Active promotion remains gated on several weeks of durable manager wake and acknowledged-delivery proof under real load.
What changed
- Durable task kernel v1: guarded state transitions with version fencing (
StaleTransition); terminal states are immutable. - Effects journal: the only launch path;
(task, epoch)unique, retries adopt instead of forking; typed rejection outcomes (rate_limited/auth) recorded on the effect. - Wake outbox with monotonic watermark (
child_event_seq/last_woken_seq): one consolidated cohort wake, re-arms exactly once per genuine child event; per-child parent mail (and theintent="replace"preemption bug) deleted. - Adopt-or-lose reservation expiry: only a definitive 404 retires; transient executor failures never orphan a live session.
- Forward-only migration with under-lock schema detection and watermark backfill for pre-existing cohorts; self-parent rows unrepresentable.
- Schema CHECKs make fork loops, self-delivery, and duplicate launches unconstructable rather than detected.
Evidence
- Commit:
3c3f5b01d871cfa935bb8feef7e72eda708c1f67 - Compatibility workflow: green on main (3.11-3.13), run 33592596556
- Package smoke: green per-version in CI
- Recovery smoke: dry-run pass
- Adversarial simulator: S1-S28 green; red baseline vs 0.11.3 committed in-tree
- Review record: three adversarial rounds converged 7 -> 3 -> 1 -> 0 findings
- Durable wake/delivery observation window: not yet satisfied (starts at local activation)
Known limitations
- Routing chains not yet wired to typed outcomes (quota 429 is typed but does not auto-reroute).
- Liveness predicates (
any_child_stalledetc.) are specced (docs/liveness-spec.md), not implemented. - Local activation requires a drained service (managed_tasks table rebuild) and one live canary against real cdesktop before unattended use.
v0.11.3
SightMesh 0.11.3
This experimental release makes lifecycle delivery fail closed after the fork-loop incident.
- attributes child lifecycle notifications to the child session
- terminally resolves invalid self and successor routes so restarts cannot retry them
- pins cdesktop 0.2.7, which rejects sender-equals-recipient commands before enqueue
- bounds managed cdesktop and bridge stdout/stderr to two 16 MiB generations per stream
- exposes installed log limits and current usage through service status
Verified with 340 tests across the supported Python matrix, the pinned cdesktop artifact check, recovery smoke, package install smoke, and a live bounded-output exercise.
SightMesh remains experimental. This release prevents the known amplification path and limits service-log damage; the longer real-load manager wake proof remains the promotion gate.
SightMesh v0.11.2
Experimental hotfix release. Broad unattended promotion still requires sustained real-load observation.
What changed
- Routed task launches now discover the single enabled cdesktop Default provider and carry its ID in the native launch request.
- Quota recovery successors now satisfy cdesktop's cross-executor contract when moving from Claude Code to Codex.
- Missing or ambiguous Default providers fail before native launch with a clear configuration error.
- Humans and agents still choose semantic routes and models. They never supply or hardcode cdesktop provider IDs.
Live finding from 0.11.1
The first live canary safely cooled two exhausted Claude bindings and reused one worktree, but cdesktop rejected the final Claude-to-Codex successor because SightMesh omitted selected_provider_id. The task stopped at its three-attempt circuit breaker with two sessions and no loop. This release closes that seam.
Evidence
- Release commit:
6676c1f56989b4e1a0c6d2e232cb0fa41788da85 - Fix PR: #74
- Release PR: #75
- Main compatibility run: https://github.com/clarkipeng/sightmesh/actions/runs/33442681303
- Python 3.11, 3.12, and 3.13 compatibility jobs passed.
- Pinned cdesktop artifact validation passed.
- Local suite: 336 passed.
- Isolated 0.11.2 wheel install and metadata smoke passed.
The cdesktop main-source edge remains advisory and failed because upstream public source/package shape differs from the pinned released contract. The pinned artifact used by SightMesh passed.
SightMesh v0.11.1
Experimental release. Automatic quota transfer is bounded by the existing task lease, epoch, idempotency key, and three-attempt circuit breaker. Broad unattended promotion still requires sustained real-load observation.
What changed
- Repository names now prefer the canonical checkout when stale managed-worktree registrations share that name.
- Routed managed tasks recognize terminal provider quota refusals, cool only the opaque exhausted account binding, and transfer to the next eligible configured route.
- Replacement targets are persisted with the task epoch, so a retry after response loss reuses the same native launch effect.
- Exhausted route chains and routes requiring metered approval block for a human instead of retrying.
- Explicit-profile tasks and ordinary failures are never rerouted automatically.
- Latest-process selection is shared by the CLI and SDK, so unsorted process rows cannot trigger a transfer from stale evidence.
- Expected routing and pool-state errors are isolated per session and cannot stop the bridge loop.
Evidence
- Release commit:
530812dc208472a1f56fb36f6cffa3593423f090 - Feature PR: #72
- Release PR: #73
- Main compatibility run: https://github.com/clarkipeng/sightmesh/actions/runs/33441539930
- Python 3.11, 3.12, and 3.13 compatibility jobs passed.
- Pinned cdesktop artifact validation passed.
- Local suite: 335 passed.
- Isolated 0.11.1 wheel install and metadata smoke passed.
The cdesktop main-source edge remains advisory and failed because upstream public source/package shape differs from the pinned released contract. The pinned artifact used by SightMesh passed.
SightMesh v0.11.0
Experimental release. The fork-loop trigger is fixed and native disk limits are active, but broad unattended promotion still requires sustained real-load observation.
What changed
- Added a Python SDK and flat CLI built around human-readable task keys and prompt strings.
- Made worker starts idempotent through stable task identity and cdesktop's exact-once native launch journal.
- Added atomic batch reservation, fully prevalidated command batches, one active lease, fixed child budgets, explicit successor epochs, and a three-attempt circuit breaker.
- Kept recovery checkpoints content-addressed inside the task worktree instead of copying transcripts.
- Prevented child lifecycle delivery from resolving back to the originating child.
- Pinned cdesktop
v0.2.6-20260831200904, which stops Codex before rollout or free-disk limits are breached.
Evidence
- Commit:
e326eba646315143d52fc3eddbd9b3d5dbea79c2 - Main compatibility workflow: https://github.com/clarkipeng/sightmesh/actions/runs/33438986107
- Test suite: 330 passed locally and on Python 3.11, 3.12, and 3.13
- Pinned cdesktop package checksum and executable verification: passed
- Wheel and source distribution build, isolated install, and metadata validation: passed
Boundaries
SightMesh owns semantic task identity and lifecycle policy. cdesktop owns visible workspaces, native sessions, worktrees, transcripts, exact-once launch effects, and local storage enforcement. Git owns source state. Repowire owns cross-workspace contact.
The cdesktop runtime is currently pinned to the SightMesh fork release while upstream proposals cdesktop-ai/cdesktop#17 and #18 remain under review.
Upgrade
Install SightMesh v0.11.0 through the normal local installer. The runtime lock installs the verified cdesktop package. Existing workspace and ownership state is preserved. Keep incident workspace 3184-cr-mgr8 archived rather than respawning its old manager.