Skip to content

The shared cases, replayed by a second runtime: three things PACT had wrong - #20

Merged
dittops merged 1 commit into
masterfrom
replayed-by-a-second-runtime
Nov 12, 2026
Merged

dittops merged 1 commit into
masterfrom
replayed-by-a-second-runtime

Conversation

@dittops

@dittops dittops commented Nov 12, 2026

Copy link
Copy Markdown
Member

Follows #18. Bud Agent Flow replayed tests/conformance/ and sent the cases that differed before recording any as its own. Three were PACT's.

What a runtime must match

  • A workflow's answer is held to what it says it gives. run_workflow handed back whatever the answer stage bound; it now reads each field of answers-with: by its shape and stops (halted: stopped) when one does not fit.
  • Before anything has been remembered, a repeat's remembers: entry with no starts-as: is what its combines-by: makes of nothing: an empty list for a rule that keeps several, absent for one that keeps one. It was null for every rule.
  • A workflow that hands back nothing answers with an empty record.
  • An agent a workflow's stage calls is an agent's run, under its own limits, approvals and reactions (docs/99 section 5). The reference workflow runtime does not run agents, and now says so.

What was wrong in what PACT ships

  • examples/language/help-centre's clear-inbox said it gives text and handed back a list.
  • The shared case on examples/kernel/tree-search scripted ideas with no text. Corrected; the wrong data is kept as a case of its own that expects the run to stop.
  • The six routing cases ran on a workspace whose desks a reaction covers, so a runtime that refuses an uncarried guard refused the whole workflow. They run on tests/conformance/trees/routed-desk; their expect is unchanged to the letter.

Checked

scripts/test-all.sh exits 0: 4872 tests (1623 Rust + 3249 adapter). The live set (10 cases on gpt-4o-mini) passes on this commit. mkdocs build --strict builds. newest-pydantic-ai fails on master with the same five failures and is not touched here.

Owed

Nothing holds an answer stage's bind: to the workflow's answers-with: at check time.

🤖 Generated with Claude Code

… wrong

Bud Agent Flow replayed tests/conformance/ and sent the cases that
differed before recording any as its own. Three were PACT's.

What a runtime must match

A workflow's answer is held to what it says it gives. run_workflow
handed back whatever the answer stage bound; it now reads each field of
answers-with: by its shape and stops when one does not fit.

Before anything has been remembered, a repeat's remembers: entry with no
starts-as: is what its combines-by: makes of nothing: an empty list for
a rule that keeps several, absent for one that keeps one. It was null.

A workflow that hands back nothing answers with an empty record.

An agent a workflow's stage calls is an agent's run, under its own
limits, approvals and reactions (docs/99 §5). The reference workflow
runtime does not run agents, and now says so.

What was wrong in what PACT ships

examples/language/help-centre's clear-inbox said it gives text and
handed back a list. The shared case on examples/kernel/tree-search
scripted ideas with no text; corrected, and the wrong data kept as a
case of its own. The six routing cases move to
tests/conformance/trees/routed-desk, whose agents no reaction covers, so
a runtime that refuses an uncarried guard can replay them; their expect
is unchanged to the letter.

Owed: nothing holds an answer stage's bind: to answers-with: at check
time.

Co-Authored-By: Claude Fable 5.2 <noreply@anthropic.com>
@dittops
dittops merged commit 7a293da into master Nov 12, 2026
1 of 2 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants