Story-3112 Walkthrough

Outcome: Blake can emit an auto classify-field intent only after the distinct-roster critic passes at or above the configured 0.70 bar. Missing, failing, and below-bar critic verdicts emit suggest.

classify proposal
  → build field intents as suggest
  → run distinct-roster classify critic
  → aggregate verdict using registrar.yaml confidence.critic_pass_min
  → pass: restore the earned manifest policy
  → absent / fail / below bar: keep suggest
  → emit typed broker-mediated intent

Boundary preserved

The change only stamps intent policy. Blake still writes no canonical truth and holds no execution credentials; the broker remains the sole executor. Exception flags and vocabulary intents keep their existing policies.

Executable proof

Critic resultEmitted field policy
absentsuggest
fail at 0.90suggest
abstain after runtime errorsuggest
pass at 0.69suggest
pass at 0.70auto

The regression asserts the serialized wire intent from runtime._turn_event, not only the critic decision object.

Verification

uv run ruff check agents/registrar tests evalkit       → passed
uv run --package registrar pytest agents/registrar/tests -q → 521 passed
uv run pytest tests -q                                  → 444 passed