Skip to content

Pin the contract suite at v1.0.3 and speak harness protocol 1.1 (#388) - #391

Merged
lbacik merged 1 commit into
mainfrom
fix/issue-388-pin-suite-v1.0.3
Nov 11, 2026
Merged

lbacik merged 1 commit into
mainfrom
fix/issue-388-pin-suite-v1.0.3

Conversation

@lbacik

@lbacik lbacik commented Nov 10, 2026

Copy link
Copy Markdown
Owner

Fixes #388

Pins agent-operator-contract at v1.0.3, the first tag with the fix from lbacik/agent-operator-contract#38. offline-reads now passes.

Changes

  • Pin. pyproject.toml names v1.0.3. uv.lock is gitignored in this repo, so only the local lockfile was regenerated. It names rev=v1.0.3#1ba65e9.
  • Harness protocol 1.1. v1.0.2 rebuilt recovery-retry and recovery-release on a Retained Attempt, through the new verb fail-finalization. The harness now speaks 1.1 and implements that verb. It arms a one-shot that fails the publisher's next comment, as an unavailable GitHub would. The engine keeps the finishing attempt as a Retained Attempt through its real "result comment unconfirmed" path: it stays the current_attempt of a recovering instance, unsealed, with no Claim until recovery retry or recovery release.
  • finish-attempt returns once the attempt is retained. It answers failed ("no active attempt") on an attempt that is already retained or still held by startup reconciliation. Without that check it would report a finish that never ran.
  • No engine behavior changed. resume during startup reconciliation is still rejected with no control change, and the existing tests for that pass.

Still red

Scenario Failure line Issue
recovery-release FAIL recovery-release: no command may change the recorded verdict: {'label': 'Incomplete', 'native': 'incomplete', 'reason': None} #390

The engine's recovery release (the #84 design) recomputes the outcome instead of keeping the recorded verdict, which contract §14 now requires. test_recovery_release_finalizes_a_retained_attempt asserts the verdict and is a strict xfail pointing at #390. At the old pin, recovery-release passed only because it ran on an already finalized attempt.

Verification

  • Producer suite in Docker, --require-all with all capabilities: 40 PASS, 1 FAIL (recovery-release). offline-reads and recovery-retry pass.
  • The same with --capabilities "": 40 PASS, 1 FAIL (recovery-release).
  • So the producer job stays red on recovery-release until recovery release must keep a Retained Attempt's recorded verdict (contract §14) #390.
  • tests/test_conformance_harness.py: 47 passed, 1 xfailed.
  • uv run pytest locally on macOS: 1990 passed, 10 failed. The 10 (test_attempt_processes.py, test_control_offline.py) fail identically on a clean main on that machine.

🤖 Generated with Claude Code

…1.1 (#388)

v1.0.3 fixes offline-reads upstream (agent-operator-contract#38): the
scenario no longer finishes an attempt that stop-container interrupted.
It also rebuilds recovery-retry and recovery-release on a Retained
Attempt, which needs the new harness verb fail-finalization.

- Pin agent-operator-contract at v1.0.3.
- Harness protocol 1.1: fail-finalization arms a one-shot that fails
  the publisher's next comment, as an unavailable GitHub would, so the
  engine keeps the finishing attempt as a Retained Attempt through its
  real "result comment unconfirmed" path.
- finish-attempt returns once the attempt is retained, and answers
  failed on an attempt that is retained or still held by startup
  reconciliation instead of reporting a finish that never ran.

recovery-release stays red: the engine's recovery release recomputes
the outcome instead of keeping the recorded verdict. Tracked in #390;
the local test asserting the verdict is a strict xfail until then.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@lbacik
lbacik merged commit 0c9de0d into main Nov 11, 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: offline-reads fails on resume during startup reconciliation

1 participant