Skip to content

fix(dontguess-be1): individual tier fails loud instead of a lying 'is not pending' - #163

Merged
baron-3dl merged 1 commit into
mainfrom
fix/dontguess-be1
Aug 5, 2026
Merged

fix(dontguess-be1): individual tier fails loud instead of a lying 'is not pending'#163
baron-3dl merged 1 commit into
mainfrom
fix/dontguess-be1

Conversation

@baron-3dl

Copy link
Copy Markdown
Contributor

Summary

  • A shared operator that is ALSO team-tier (has an OperatorSigner) silently drops every individual-tier put via applyPut's §6 confidentiality fail-closed gate, then fails downstream with a meaningless "put ... is not pending" — a real vat2 agent hit this putting a prior-art survey.
  • handleOpPut now checks State.EncryptedRequired() first and refuses loud with the real cause and the team-tier command to use instead. The §6 gate itself is untouched — a forgeable exemption would reopen the exact downgrade leak it exists to close.

Test plan

  • New regression test TestOpPut_Individual_RefusesLoudOnEncryptedRequiredOperator (real engine, OperatorSigner set, no relay needed) — asserts refusal, asserts the old misleading error string is gone, asserts zero puts end up pending.
  • go test ./cmd/dontguess/... ./pkg/exchange/... green
  • go test ./... (full suite) green
  • go vet ./... clean
  • Reproduced the bug in isolation (fresh built binary, isolated DG_HOME) before and after the fix to confirm both the failure and the repair.

🤖 Generated with Claude Code

…not pending"

A shared operator that is ALSO team-tier (has an OperatorSigner) silently
drops every individual-tier put: applyPut's §6 confidentiality fail-closed
gate rejects legacy-plaintext content unconditionally once encryption is
required, with no way to tell "arrived over the trusted local socket" from
"arrived over the relay". handleOpPut's own next line, AutoAcceptPut, then
fails with "put ... is not pending" -- a real vat2 agent hit exactly this
putting a prior-art survey, and read it as an inexplicable rejection.

Individual tier's own design assumes a dedicated engine with no
OperatorSigner; that assumption doesn't hold on a promoted shared operator.
Rather than relax the §6 gate (a forgeable exemption would reopen the
downgrade leak it exists to close), handleOpPut now checks
State.EncryptedRequired() first and refuses with the real reason plus the
team-tier command to use instead.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
@baron-3dl
baron-3dl added this pull request to the merge queue Aug 5, 2026
@baron-3dl
baron-3dl removed this pull request from the merge queue due to a manual request Aug 5, 2026
@baron-3dl
baron-3dl merged commit 19f1b6e into main Aug 5, 2026
6 of 7 checks passed
baron-3dl pushed a commit that referenced this pull request Aug 5, 2026
The swarm-merge-queue ruleset requires a "Test" status check on the queue's
synthetic merge_group commit, but ci.yml only triggered on push/pull_request.
The required check could never report, so every PR queued here sat in
AWAITING_CHECKS forever -- discovered landing dontguess-be1 (PR #163), whose
own pull_request checks were green but the queue never progressed.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
@baron-3dl
baron-3dl deleted the fix/dontguess-be1 branch August 5, 2026 21:53
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.

1 participant