Skip to content

Match producer suite v1.0.1 for recovery retry and errors reset (#385) - #389

Merged
lbacik merged 1 commit into
mainfrom
fix/issue-385-recovery-retry-errors-reset
Nov 10, 2026
Merged

lbacik merged 1 commit into
mainfrom
fix/issue-385-recovery-retry-errors-reset

Conversation

@lbacik

@lbacik lbacik commented Nov 10, 2026

Copy link
Copy Markdown
Owner

Fixes #385

Makes recovery-retry and errors-reset pass in the producer suite. The issue's Agent Brief narrows #385 to these two scenarios.

Changes

  • recovery retry on a finalized attempt completes as a no-op. It commits a recovery_retry command as completed with a detail saying nothing remained to retry, and changes nothing else. A resend with the same request ID replays the stored record.
  • An unknown attempt ID answers not_found. recovery retry and recovery release with an ID that matches neither the retained attempt nor any recorded attempt answer not_found (exit 5) on the contract path. Nothing is stored. The legacy path still exits 1.
  • recovery release on a finalized attempt stays rejected.
  • errors reset on a clear guard is rejected. With a readable count of 0 nothing is stored, no consecutive_errors_reset event is logged and the request ID stays reusable. This applies with and without --contract and to the consecutive-errors reset alias. An unreadable count still resets.
  • Docs. operator-onboarding.md and agentctl-command-replies.md describe the new replies.

Deviations from the brief

  • An accepted retry record whose attempt finalized in the meantime (a crash after acceptance) is now resolved to completed. Before, it was rejected on every resend.
  • The completion ledger is read before the unknown-ID check, because the finalized case has to be known first. An unknown ID with an unreadable ledger now answers the ledger error (rejected), not not_found.
  • agentctl-command-replies.md gains a section for the two legacy replies that change (errors reset at 0 now exits 1; recovery retry on a finalized attempt now exits 0).

Verification

Open points

  • The docs mark the legacy reply changes "since v0.9.1", assuming that is the next release after v0.9.0.
  • A finalized attempt whose checkpoint was left behind (a crash between finalization and checkpoint removal): recovery retry now answers completed, but the checkpoint still holds intake until the next restart removes it. The command's detail says so.

🤖 Generated with Claude Code

- `recovery retry` for an attempt recorded as finalized commits a
  `completed` no-op and changes nothing else; a resend replays it.
- `recovery retry` / `recovery release` with an ID that matches neither
  the retained attempt nor any recorded attempt answer `not_found` on the
  contract path; nothing is stored.
- `recovery release` for a finalized attempt stays `rejected`.
- `errors reset` (and the `consecutive-errors reset` alias) is rejected
  while the readable consecutive-error count is 0; nothing is stored or
  logged. An unreadable count still resets.

The `recovery-release` and `offline-reads` producer scenarios stay red;
they are out of scope here (agent-operator-contract#36, #388).

Co-Authored-By: Claude Fable 5.2 <noreply@anthropic.com>
@lbacik
lbacik merged commit 488f38c into main Nov 10, 2026
6 of 7 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.

Producer suite v1.0.1: recovery retry, recovery release and errors reset disagree with the engine

1 participant