Skip to content

v0.77.1

Choose a tag to compare

@davidfarah2003 davidfarah2003 released this 09 Oct 18:09
aece60a

Cotal 0.77.1 is out!

Grab it: npm i cotal-ai@0.77.1

Changes in this release

  • The Codex and Jcode hosts now arm the event plane when the session's registration requires events, even without COTAL_EVENTS. They used to read only that flag, so a hand-driven user-mode launch with COTAL_EVENTS_REQUIRED=1, or a custom launcher that passed eventsRequired with events opted out, ran with no event plane and the required-events policy never applied. The Claude, OpenCode, Codex, Jcode and Pi launches that carry eventsRequired now also set COTAL_EVENTS and the workspace root when the launcher passed events: false, so the armed session has a place for its event log. Both decisions go through launchArmsEvents and eventPlaneArmed in @cotal-ai/connector-core; an OpenCode 2.x session still reads only COTAL_EVENTS.
  • A seat the manager resumes from a preserved cut now meets the manager's eventsRequired policy as a fresh spawn does. On a space whose registration requires the event plane, a resumed seat used to launch without that requirement and keep running after its event plane stopped for good, and a seat retained with --no-events or on a connector without an event plane resumed with no plane at all. A resumed seat now carries the requirement into its launch material, and one retained without an event plane is refused with the spawn's message before any seat of the cut starts. Spawn and resume take every host-supplied launch field (space, servers, shared MCP servers, env allowlist, resolved harness binaries, eventsRequired, workspace root) from one place and ask the same event-plane gate.
  • The manager's turn relay now keys each turn by its caller and goal id, the identity the goal plane stores it under. A second caller that submitted a turn under a goal id another caller had already used was refused as "accepted under a different submission" although its own goal did not exist. Each caller's turn now gets its own acceptance and its own deadline hold. A seat still yields by goal id alone, so the manager refuses to hand one seat a second caller's turn under an id that seat already holds. Each turn's note now records its deadline hold token, so a turn left pending across the upgrade restart is still adopted under the hold it was minted with.
    • @cotal-ai/core@0.77.1
    • @cotal-ai/workspace@0.77.1
    • @cotal-ai/seat@0.77.1

What's Changed

Full Changelog: v0.77.0...v0.77.1