Skip to content

A decision as the specification says it: who is asked, what a model is shown, what is recorded - #23

Merged
dittops merged 1 commit into
masterfrom
what-a-model-is-shown
Nov 13, 2026
Merged

dittops merged 1 commit into
masterfrom
what-a-model-is-shown

Conversation

@dittops

@dittops dittops commented Nov 12, 2026

Copy link
Copy Markdown
Member

What this is

PACT's reference workflow runtime ignored two lines the specification promises on a decision (if-unsure-below: and if-it-disagrees: go-on), recorded a decision under names the specification does not have (by, because), and handed back a workflow's last stage where it reached no answer stage. Found by writing a shared case for a classifier. Bud Agent Flow had built both lines; its answers settled the unwritten parts. No field of the schema changes; help text does.

What a runtime must match

  • Rungs. A rung that decides makes its label the standing one. A rung with go-on is a second opinion, asked even while a label stands: agree and it stands; disagree or pass on, and nothing stands.
  • Threshold. A classifier's score under if-unsure-below:, or no score, passes on to the next rung. Exactly at the figure decides. Never to the next model of the agent's own model: list.
  • The record. .label, .decided-by (rules / agent / person), .answered-by; every stage .outcome; a repeat .rounds and .ended.
  • A workflow's answer is what an answer stage bound, else {}.
  • What a model is shown of what an agent was given: all of it and nothing else. A classifier is not given the stage's says:.
  • Twelve new shared cases (39 in all) on tests/conformance/trees/triaged-defects.

What pact check now says

  • loader/a-rung-with-two-kinds-of-reader (warning): one agent on a rung lists a decision model and a language model.
  • loader/a-deciding-agent-given-nothing no longer counts says: for a classifier.

Tested

  • scripts/test-all.sh locally: exit 0.
  • mkdocs build --strict: exit 0.
  • Live, gpt-4o-mini: 10 of 10 (the live suite now sends every field an agent was given).

🤖 Generated with Claude Code

…s shown, what is recorded

The reference workflow runtime read neither `if-unsure-below:` nor
`if-it-disagrees: go-on`, recorded a decision under names the specification
does not have, and handed back a workflow's last stage where it reached no
`answer`. Found by writing a shared case for a classifier; settled with Bud
Agent Flow, which had built both lines.

- Rungs: a label stands; a `go-on` rung is a second opinion on it. Under
  `if-unsure-below:`, or with no score, a classifier passes on to the next
  rung, never to the next model of its own list.
- A `decide` records `.label`, `.decided-by`, `.answered-by`; every stage has
  `.outcome`; a `repeat` has `.rounds` and `.ended`. A person's answer may say
  who answered.
- A workflow hands back what an `answer` stage bound, and `{}` otherwise.
- A classifier is not given the stage's `says:`; what a model is shown of what
  an agent was given is all of it and nothing else (`worded`).
- `loader/a-rung-with-two-kinds-of-reader` (a warning).
- Twelve shared cases on `tests/conformance/trees/triaged-defects`.

Co-Authored-By: Claude Fable 5.2 <noreply@anthropic.com>
@dittops
dittops merged commit 5da4c58 into master Nov 13, 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