Skip to content

Held to a second runtime: what reviewing Bud Agent Flow found in PACT, and the shared conformance cases - #17

Merged
dittops merged 1 commit into
masterfrom
held-to-a-second-runtime
Nov 12, 2026
Merged

dittops merged 1 commit into
masterfrom
held-to-a-second-runtime

Conversation

@dittops

@dittops dittops commented Nov 12, 2026

Copy link
Copy Markdown
Member

Bud Agent Flow was reviewed for conformance to docs/99 and asked its own questions back. Seven had no answer in PACT, or the wrong one. No schema field changes; the help for rung.agent now says what was unwritten.

What a runtime must match

(CHANGELOG.md carries this section from now on, backfilled for #14 and #15.)

  • A guess does not spend what is exact. A once-a-run reaction fires once on a guess and once on something exact, so a topic the agent announced through working-on no longer uses up the hold on the tagged call that comes later.
  • What a deciding agent is given: the current item's fields over the workflow's input, as many as it accepts: and nothing else, with the stage's says: at the start of its message. WorkflowResult.unenforced is new.
  • Which implementation does an interface's work: one reading of chosen-by:, pact_adapters.interfaces.chosen. Nothing read it before.
  • What a teammate could not carry out or count is on the result of the run that asked it, worded <member> (put to work by this agent): …, across a park too (Suspension.from_members). PACT dropped these; so did Bud Agent Flow, which fixed it first, and the wording is its.
  • An agent a reaction woke is not offered working-on. Found live.
  • A workspace's own .pact/ area for a workspace that is one file is <folder>/.pact/<name>/.

What a host can now do

resolve.load_catalogue reads a .pact workspace's own model rows from the document and takes document=; checking.as_a_folder is public; benchmarks.record on a workspace written in the language hands back the lines for its models block.

The shared cases

tests/conformance/reactions.json (13) and workflows.json (8): a scripted run written down and everything another runtime can observe of it. PACT's runtime is held to them; another runtime replays the same files. tests/conformance/trees/guarded-desk is a workspace whose calls are stopped, held, counted and reported by reactions on exact signals.

Checked

scripts/test-all.sh exits 0: 4869 tests (1623 Rust + 3246 adapter), was 4827. 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 tests/test_parity.py failures and is not touched here.

Owed

A shipped loop the default step ceiling cannot finish; a URL as a run input; the words an answer shape is asked for in; a warning for a shape named one letter from a built-in kind; an in-place edit for .pact files; the fence and request-key conventions agreed with Bud Agent Flow, into the schema help.

🤖 Generated with Claude Code

…99 found in PACT, and the shared cases

Bud Agent Flow was reviewed for conformance to docs/99 and asked its own
questions back. Seven had no answer in PACT, or the wrong one. No field
of the schema changes; the help for rung.agent now says what was unwritten.

What a runtime must match (CHANGELOG has this section from now on, and it
is backfilled for #14 and #15)

A guess does not spend what is exact. A once-a-run reaction fires once
on a guess and once on something exact, so a topic the agent announced
through working-on no longer uses up the hold on the tagged call that
comes later (reactions.py _due/_spend; saved state gains `sure`).

What a deciding agent is given: the current item's fields over the
workflow's input, as many as it accepts: and nothing it does not, with
the stage's says: at the start of its message
(workflow_runtime.given_to). WorkflowResult.unenforced is new.

Which implementation does an interface's work: one reading of
chosen-by:, pact_adapters.interfaces.chosen. Nothing read it before, and
an agent that looked things up in an interface looked them up in nothing.

What a teammate could not carry out or count is on the result of the
run that asked it, worded "<member> (put to work by this agent): …",
for a teammate and for an agent a reaction wakes, and across a park
(Suspension.from_members). delegate_by_running returned the member's
words and nothing else. Bud Agent Flow was told its engine dropped these
where PACT's did not; PACT's dropped them too, and the wording is its.

A workspace's own .pact/ area: <folder>/.pact/ for a folder,
<folder>/.pact/<name>/ for a workspace that is one file (watches.area).
A lone .pact file lost its learning ledger without a word.

What a host can now do

resolve.load_catalogue reads a .pact workspace's own model rows from
the document, and takes document= from a host that has loaded one. It
opened models/catalog.yaml from the disk only.
checking.as_a_folder is public. benchmarks.record on a workspace
written in the language hands back the lines for its models block.

The shared cases

tests/conformance/reactions.json (13) and workflows.json (8): a
scripted run written down, and everything another runtime can observe
of it. PACT's runtime is held to them; another runtime replays them.
tests/conformance/trees/guarded-desk: calls stopped, held, counted and
reported by reactions on exact signals.

An agent a reaction woke is not offered working-on: it was run to be asked
or told about one thing. Found live, once a woken agent's lines reached the
run that woke it.

Gate green: 4869 tests (1623 Rust + 3246 adapter), was 4827. The live set
(10 cases, gpt-4o-mini) passes on this commit.

Co-Authored-By: Claude Fable 5.2 <noreply@anthropic.com>
@dittops
dittops merged commit 28675d7 into master Nov 12, 2026
4 of 5 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