diff --git a/tests/control_plane/test_local_coordination_authority.py b/tests/control_plane/test_local_coordination_authority.py index 87fd401e77..6836fbb152 100644 --- a/tests/control_plane/test_local_coordination_authority.py +++ b/tests/control_plane/test_local_coordination_authority.py @@ -2246,6 +2246,27 @@ def test_real_canonical_provider_preserves_complete_complex_todo_semantics( "--claim-operation-id", "initial-cli-claim", ] + + def recover_native_claim(operation_id): + # Ordinary CLI self-claims expose the execution reference, while the + # existing transaction owner retains the complete durable receipt. + recovered = claim_canonical_todo_if_promoted( + registry_path=registry_path, + runtime_root=runtime_root, + goal_id="goal-a", + todo_id="todo_claimable", + role=None, + claimed_by="agent-a", + actor_agent_id="agent-a", + operation_id=operation_id, + manage_execution=True, + dry_run=False, + ) + assert recovered["status"] == "replayed" + assert recovered["original_receipt"]["operation_id"] == operation_id + assert recovered["original_receipt"]["goal_id"] == "goal-a" + return recovered + # Duplicate callers race from separate processes, but one operation must # produce exactly one accepted claim and the same durable receipt. with ThreadPoolExecutor(max_workers=2) as pool: @@ -2265,7 +2286,13 @@ def test_real_canonical_provider_preserves_complete_complex_todo_semantics( assert all( item["status"] in {"applied", "recovered", "replayed"} for item in claims ) - assert claims[0]["original_receipt"] == claims[1]["original_receipt"] + for claim in claims: + assert claim["execution_managed"] is True + assert claim["claim_operation_id"] == "initial-cli-claim" + assert "original_receipt" not in claim + receipts = [recover_native_claim(claim["claim_operation_id"]) for claim in claims] + assert receipts[0]["original_receipt"] == receipts[1]["original_receipt"] + assert all(receipt["provider_revision"] == claims[0]["provider_revision"] for receipt in receipts) assert claims[0]["provider_revision"] == claims[1]["provider_revision"] claimed = next(item for item in claims if item["status"] == "applied") assert claimed["ok"] is True @@ -2309,7 +2336,13 @@ def test_real_canonical_provider_preserves_complete_complex_todo_semantics( ) assert original["status"] == "no_change" assert replay["status"] == "replayed" - assert replay["original_receipt"] == original["original_receipt"] + assert original["claim_operation_id"] == replay["claim_operation_id"] == "retryable-cli-claim" + assert "original_receipt" not in original and "original_receipt" not in replay + original_receipt = recover_native_claim(original["claim_operation_id"]) + replay_receipt = recover_native_claim(replay["claim_operation_id"]) + assert replay_receipt["original_receipt"] == original_receipt["original_receipt"] + assert original_receipt["original_receipt"]["result"]["changed"] is False + assert replay_receipt["provider_revision"] == replay["provider_revision"] assert replay["provider_revision"] == original["provider_revision"] changed_intent = [ "agent-b" if part == "agent-a" else part for part in claim_command