Skip to content

v0.39.0

Choose a tag to compare

@davidfarah2003 davidfarah2003 released this 03 Sep 00:04
b498b94

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/runtime and composed
    into the cotal binary: 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 new EffectRefused; the interpreter settles the entry with the new status refused
    under the handler's code (L5016 for the mesh handler's NotYetDurable, which now extends it) and
    unwinds the run with the uncatchable RunHeld (L5025). The driver grades the run released, and a
    resume on a capable host finds the new refused lookup verdict and performs the step live, so a
    run started before the durable-action surface lands heals the day it does. Previously the refusal
    settled failed and 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), commitFork writes 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