fix(proxy): the repair prompt names the check that refused the reply #737

Merged
coilyco-ops merged 1 commit from coilyco-ops/repair-prompt-names-the-check into main 2026-08-13 21:31:52 +00:00 AGit
Member

refs #549 - a repair turn spent 3600 tokens deducing which contract it violated; the harness had it in scope and logged it

refs #549 - a repair turn spent 3600 tokens deducing which contract it violated; the harness had it in scope and logged it
fix(proxy): the repair prompt names the check that refused the reply
All checks were successful
ci / image-build (pull_request) Successful in 22s
ci / test (pull_request) Successful in 37s
ci / publish-echo-image (pull_request) Has been skipped
ci / publish-observed (pull_request) Has been skipped
841cdaa8a1
A production repair turn spent its entire 3,600 token budget deducing
which contract it had violated, and emitted nothing. Its reasoning, from
the capture on sirens-echo#549:

  We need know required response contract. Could be from Claude Code?
  No contract specified. Maybe we need infer from known patterns

The harness knew. contractErr is logged as "refused" on the line above,
and the model was then handed a prompt carrying only the response style.
The social variant asks it to fix "the reported problem", which was
reported to the operator's log and never to the model.

On the social lane contractErr can only be an empty reply or one over
1800 characters, because ValidateResponseStyle returns nil for that
style. The capture shows the model enumerating six candidate violations
when two were possible.

Every reason the repair path can carry is a fixed sentence about the
model's own reply: empty, too long, a social opening, first-person
voice, personality framing, an exclamation mark, an emoji. None
interpolates member text or an identifier, so naming the check sends
nothing back that the reply above it did not already contain. A test
walks the reachable set and fails if that stops being true.

This removes one cause of budget exhaustion on repair turns. It does not
fix sirens-echo#549: a model that deliberates without converging will
still exhaust its budget, and the prompt-leakage family may be that.

Mutation: dropping the reason again fails the naming test on all three
styles.

Refs sirens-echo#549, sirens-echo#651

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Co-authored-by: Kai Siren <coilysiren@gmail.com>
Co-authored-by: Claude <noreply@anthropic.com>
Sign in to join this conversation.
No reviewers
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set

Reference
coilyco-gaming/sirens-echo!737
No description provided.