Repository navigation
How a run ends: cancelled, why it stopped, how a called agent ended; the egress boundary said; a mixed model list refused - #32
Merged
Conversation
…oundary
Leaving `allow-egress:` out draws no boundary (Q17), which is also what a
forgotten line looks like: both printed `OK — loaded cleanly`, and the
inventory carried neither an absent line nor an empty list.
- `pact check` prints one line after the result of a clean check: no line
written (everything may talk outside), `[]` (nothing may), or the parts
listed. On stdout, never a diagnostic, so `--deny-warnings` is unaffected.
An agent checked on its own is told the boundary of the workspace around it.
- `pact discover` carries `egress: {boundary: open|closed|listed, allows}`
on each workspace.
Co-Authored-By: Claude Fable 5.2 <noreply@anthropic.com>
…d, and a mixed model list refused - `cancelled`: a run something outside it ended (a port's `if-still-running: stop` or `cancel-previous`, or the host). Between stages; `undo: yes` takes back what it wrote, newest first; `then-run:` starts what the port says. `run_workflow(..., ended=)`, `Callers.start`, `WorkflowResult.cancelled_by`. - `WorkflowResult.why`: the one word for why a `stopped` run stopped, of eight. - The reference ended the block on a no, or silence, with no exit written for it; it now stops the run. A run that calls a workflow that waits was `stopped`; it is `parked`, at its own stage. - `steps.<stage>.ended` on a stage an agent answered: `ran-out` when the agent reached a limit and answered with what it had (`RanOut`), else `finished`. - `loader/a-rung-with-two-kinds-of-reader` is an error: a classifier and a language model in one `model:` list read as a cascade and are a fallback. Measured on Bud Agent Flow's corpus, 13 of 136 trees write it. - Twelve shared cases (43 workflow cases), a new tree `booked-visits`, and three new keys in every workflow case's `expect`. Co-Authored-By: Claude Fable 5.2 <noreply@anthropic.com>
`assign-only` shared `assigner` with `fix-item`, and the checker's tests that edit `assigner` then broke a second workflow. Co-Authored-By: Claude Fable 5.2 <noreply@anthropic.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Four rulings from the owner, each made with Bud Agent Flow's engine and corpus in front of it.
What changes
A run something outside it ended is
cancelled. A workflow's run endedfinal,parkedorstopped. A run that a port ended (if-still-running: stoporcancel-previous), or that a person at the host ended, was reportedstoppedwith the runs that failed. It is nowcancelled: between stages, withundo: yestaking back what it wrote newest first andthen-run:starting what the port says.run_workflow(..., ended=),Callers.start,WorkflowResult.cancelled_by.stoppedsays why.WorkflowResult.whyis one of eight words (said-so,declined,nobody-answered,nobody-decided,a-call-failed,reached-a-limit,does-not-fit,not-runnable), so a person's no is not read as a broken call.Two defects in the reference runtime, fixed. A no, or silence, with no exit written for it ended the block instead of stopping the run (a workflow that gives nothing finished
finalafter a person said no). A run that calls a workflow that waits for a person wasstopped; it isparked, at its own stage.A stage says how its agent ended.
steps.<stage>.endedisran-outwhen the agent reached a limit and answered with what it had,finishedotherwise. A word and not a new exit: the stage did answer, a word can be shown to a person and handed back, and no existing workflow changes.A classifier and a language model in one
model:list on a rung are refused.loader/a-rung-with-two-kinds-of-readerwas a warning. Measured on Bud Agent Flow's corpus, 13 of 136 trees write it meaning a cascade; amodel:list is a fallback for a failed call, and the framework under that engine treats an unsure classifier as a failed call, so one file ran two ways. The ladder is the cascade: two agents on two rungs.pact checkandpact discoversay where the egress boundary is. One line after a clean check (not a diagnostic, so--deny-warningsis unaffected), andegress: {boundary, allows}in the inventory.What a runtime must match
tests/conformance/trees/booked-visits.expectgainswhy,cancelled-by,started. The 31 existing cases are otherwise unchanged (verified key by key).digests.json:triaged-defectsmoves because the tree was edited (every existingcontract-digestis as it was);booked-visitsis new.Verified
scripts/test-all.sh: 5,081 tests (1,687 Rust + 3,394 adapter), clippy, every shipped tree under--deny-warnings, TypeScript, seven adapter targets.mkdocs build --strict.🤖 Generated with Claude Code