Skip to content

Align Decision vocabulary to the Agent Control Standard - #95

Merged
open-coder-ai merged 2 commits into
mainfrom
w35/agentseam-acs-vocabulary
Sep 1, 2026
Merged

Align Decision vocabulary to the Agent Control Standard#95
open-coder-ai merged 2 commits into
mainfrom
w35/agentseam-acs-vocabulary

Conversation

@open-coder-ai

Copy link
Copy Markdown
Owner

What this changes

Renames the canonical Decision outcomes to match the Agent Control Standard's verdict
names: ASK -> ESCALATE, REWRITE -> TRANSFORM. The old names and
Decision.ask()/Decision.rewrite() remain as deprecated aliases bound to the same
strings, so every existing is/== comparison and Decision("ask"/"rewrite", ...) call
keeps working (the deprecated classmethods now emit DeprecationWarning). Adds WARN
(ACS warn), which degrades to a plain, honestly-labelled allow via a new
allow_semantics.WARN_SPEAKS (starts empty -- no adapter's warning channel is
established yet), the same shape vouch already gets on ten of twelve adapted agents.
vouch itself is unchanged -- ACS's closed verdict set cannot express it, so ACS becomes
the thirteenth surface it degrades to allow on. pre_model_call/post_model_call are
not adopted (no adapted agent exposes either hook yet; see
plan/acs-alignment-and-delegation.md §1.5 in org-plan).

matrix.capability() now returns both a "rewrite" and a "transform" key (same value)
for one minor version; can_transform() joins can_rewrite(). degraded_from now reports
the canonical ACS spelling ("transform") -- a real, called-out break, since it is a value
inside evidence, not a name. Both VOUCH and WARN are now exported from the package top
level, fixing the pre-existing asymmetry where VOUCH was reachable only via
agentseam.contract.VOUCH.

The wire never moves. No vendor dialect word changes: adapters still speak each
vendor's own ask/rewrite/etc. exactly as before. W34's golden fixture replay suite
(tests/test_golden_fixtures.py + tests/fixtures/golden/) passes byte-for-byte
unchanged, not regenerated -- the proof that this is a rename of agentseam's own
vocabulary, not a wire change. Recounted the zero-literal-comparison claim from W17: still
zero == "ask"-style literal comparisons in src/agentseam/adapters/, all via imported
constants.

Docs (README.md, llms.txt, ARCHITECTURE.md, AGENTS.md), the generated vendor
example pages (examples/generate.py + examples/generated/), and the derived
docs/assets/social-preview.svg/.png brand card are updated to match. Added a
CHANGELOG.md Unreleased entry; no version bump.

Claim check

  • No capability claim is widened without a mechanism behind it (the "transform" key
    mirrors the existing "rewrite" value; no MATRIX row's boolean values changed)
  • No new/changed MATRIX row — not applicable
  • No new payload shapes — not applicable

Checks

  • pytest -q passes (1234 passed, 4 skipped)
  • ruff check . and ruff format --check . pass
  • Runtime path is still stdlib-only (no new imports outside the standard library --
    contract.py adds import warnings, which is stdlib)
  • Commits are signed off (git commit -s)
  • python examples/generate.py --check passes
  • python docs/assets/gen_brand_assets.py --check passes (regenerated; required CI job)
  • Golden fixture suite passes with tests/fixtures/golden/ untouched (git diff shows
    no changes to that directory)

Notes for the reviewer

docs/assets/gen_brand_assets.py's decision_outcomes() and examples/generate.py's
DECISIONS list both filter out Decision.DEPRECATED_ALIASES (ask, rewrite) — otherwise
each would try to treat the deprecated aliases as distinct outcomes and either assert-fail
(brand assets: ASK no longer equals "ask") or duplicate a page section for an outcome
that produces identical output to its canonical counterpart.


Generated by Claude Code

Rename ASK -> ESCALATE and REWRITE -> TRANSFORM, keeping the old names
and Decision.ask()/.rewrite() as deprecated aliases bound to the same
strings so every existing comparison and call keeps working. Add WARN
(ACS `warn`), degrading to a labelled `allow` via a new, empty
allow_semantics.WARN_SPEAKS -- the same honest-degrade shape `vouch`
already gets. Keep `vouch` unchanged: ACS's closed verdict set cannot
express it, so ACS becomes the thirteenth surface it degrades to allow
on. Do not adopt pre_model_call/post_model_call (no adapter exposes
either hook yet).

matrix.capability() now returns both "rewrite" and "transform" keys;
can_transform() joins can_rewrite(). Both VOUCH and WARN are now
exported from the package top level. degraded_from now reports the
canonical spelling ("transform"), the one break with no available
alias since it is an evidence value, not a name.

No vendor wire format changes: adapters still speak each vendor's own
words untouched, proven by the golden fixture replay suite passing
byte-for-byte unchanged. Docs, generated examples, and the derived
brand-assets card are updated to match.

Signed-off-by: Claude <noreply@anthropic.com>
@open-coder-ai
open-coder-ai marked this pull request as ready for review September 1, 2026 01:53
@open-coder-ai
open-coder-ai merged commit 17a4f04 into main Sep 1, 2026
14 checks passed
@open-coder-ai open-coder-ai mentioned this pull request Sep 1, 2026
4 tasks
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