v0.39.0
Cotal 0.39.0 is out!
Grab it: npm i cotal-ai@0.39.0
Changes in this release
-
cotal run, the workflow-run operator surface, self-registered by@cotal-ai/runtimeand composed
into thecotalbinary:start --file <program>drives a new run on the mesh handler, `resume -
A capability refusal is durable and retryable. A handler that cannot perform an effect on its host
throws the newEffectRefused; the interpreter settles the entry with the new statusrefused
under the handler's code (L5016 for the mesh handler'sNotYetDurable, which now extends it) and
unwinds the run with the uncatchableRunHeld(L5025). The driver grades the runreleased, and a
resume on a capable host finds the newrefusedlookup verdict and performs the step live, so a
run started before the durable-action surface lands heals the day it does. Previously the refusal
settledfailedand a resume replayed the failure forever.Two concurrent
turns on one agent handle are serialized at the dispatch seam both engines share:
the second begins when the first settles, in dispatch order. Turns on different handles are
unaffected.A fork's child records its lineage: the run record's spec gains
forkedFrom({ run, step },
absent on runs started fresh),commitForkwrites it with the spec, and `ForkCommitResult. -
Simulator fidelity, ask schema enforcement, journal result bound, and the scope release law.
The simulator is now discrete-event: timed effects park at their wake times and are delivered in
wake order on one virtual clock, so concurrent branches accumulate the durations they wrote and a
simulated race is decided by the same rule as a live handler (least recorded clock, ties by
declaration order) instead of by the order effects were asked.The reference simulator enforces the ask schema shorthand (spec §6.5): a schema it cannot read is
refused with the new L4022 rather than skipped, a non-conforming reply consumes one attempt, and
exhausted attempts report L4006.A journal can be constructed with a result bound (
JournalInit.resultBytes, plumbed through
DriveRequest.resultBytes); a settled ok result over it is refused ahead of the settling append
with L5006, which leaves the reserved list.A host release or refused append inside a parallel, race, fanOut or conclave no longer cancels
sibling branches or settles their in-flight entries cancelled: the unwind propagates bare, the
scope settles nothing, and a resume picks the run up exactly where the journal says it stopped.
The old behavior permanently poisoned any run a driver stopped while an effect was in flight
inside a scope.
What's Changed
- feat(lang)!: event-queue simulator, ask schema contract, journal guards, scope release law by @davidfarah2003 in #1188
- feat(lang)!: retryable capability refusal, per-handle turn serialization, fork lineage by @davidfarah2003 in #1190
- feat(runtime): cotal run operator CLI with workflow docs and connector steer by @davidfarah2003 in #1191
Full Changelog: v0.38.0...v0.39.0