Repository navigation
[beta.30][P2] Reconcile exact job-definition mutation replay before mutable ETag validation #333
Description
Problem
On released 0.1.1-beta.29 at source 4b148ebe824b3de445a12d30e95b8f5c30d53655, an exact replay of an already successful owned job-definition update returns HTTP 409 job_etag_mismatch. An independent parameter-add replay fails in the same way.
This is DEF-B29-01 from the owner's beta.29 checkpoint. The public reproduction below uses synthetic owned fixtures. Private identities and raw campaign evidence remain outside GitHub.
Tracking: release epic #282; owner functional acceptance #305 under #294. Related completed repair #316 concerns compound job-start admission, a different path, and stays closed.
Minimal reproduction
- Create a disposable inert job owned by the caller.
- Preview an update with
expectedVersion: 1. - Confirm that unchanged request using the issued plan token and idempotency key. It succeeds and returns version 2.
- Immediately repeat exactly the same confirmation while its plan remains valid.
- Observe HTTP 409
job_etag_mismatch, although readback still shows the original successful update at version 2 and no second write. - Independently preview and confirm adding an ordinary nonsecret parameter, then repeat its exact successful confirmation. The replay returns the same ETag conflict; the parameter exists once.
Positive controls in the same checkpoint: create replay returns the original job, job-start replay returns the same run, a fresh stale write is rejected, changed confirmation data does not persist, and two competing same-version updates produce one winner.
Expected behavior and impact
An exact replay bound to the same authorized principal, tenant, operation, target and payload should reconcile the recorded successful result without applying the mutation again. A client recovering an uncertain successful response currently receives a conflict instead of that result.
The owner observed no duplicate execution, data corruption or authorization bypass. The reproduced problem is unsuccessful reconciliation after a successful mutation.
Source diagnosis
McpOperatorJobEndpoints.ConfirmMutationAsync at the tested source calls ValidateMutationAsync, including the mutable current-version check, before confirmations.ConfirmAsync can identify the consumed exact replay.
Focused repair
Reconcile an already consumed, exactly bound confirmation before validation that only governs a new dispatch. Preserve current identity, tenant, policy and ownership enforcement plus exact confirmation binding. New stale writes, changed requests, expired plans and cross-principal or cross-target reuse must continue to reject without side effects.
Review every equivalent definition mutation, including parameter and step changes, and deletion. Successful delete replay must be reconciled using the retained authorized binding and result even when the live definition no longer exists; absence alone must never become authority to disclose another principal's outcome.
Extend the existing endpoint/store regression layers. Do not add a parallel campaign framework or a release-specific CI pipeline.
Acceptance criteria
- Exact successful update and parameter-add confirmations replay the recorded success with no second version increment, parameter insertion, audit mutation or execution.
- Equivalent definition operations follow the same contract; exercise a representative parameter/step mutation and successful deletion replay.
- A consumed successful replay remains reconcilable after a later definition change or deletion, under the original valid confirmation contract and current authorization.
- A new stale request still returns the expected concurrency conflict. Two new competing same-version writes still produce exactly one winner.
- Changed payload, actor, tenant, operation, target or confirmation credentials cannot retrieve or apply the original result; expired/revoked/unauthorized access remains denied.
- Existing create replay, same-run job-start replay, start revision binding and persisted readback controls remain intact.
- Focused tests cover the response-loss/retry scenario and verify durable mutation count; required PR/main validation and the ordinary hosted release pipeline pass.
- Include the fix in the next available beta.30 release artifacts, then retain fresh owner retest in [beta.30][P1] Finish admitted MCP functional, runtime and policy-race acceptance #305/[QA-CAMPAIGN] Complete 37 retained HTTP MCP contexts and owner release gates #294. Publication does not itself close owner production acceptance.
Activity
Fix exact job mutation and run-action replay for beta.30 (#335)
Proxicon commentedon Oct 19, 2026
Final beta.29 evidence expands this same defect family to job
update,param_add,param_update,param_delete,step_add,step_update,step_reorderandstep_deletein both original tenants: 16 failed contexts. The successful first mutation is followed by exact replay rejection before result reconciliation. This does not reopen the separately delivered job-start admission repair #316.The endpoint/result fix delivered by #335 is retained in beta.31. Final-audit deleted-job replay also failed earlier at the local delegation target boundary; track that additional layer in #339 rather than claiming endpoint coverage proves it. The next owner campaign must exercise all eight operations with fresh plans and fixtures, original-result fidelity, and current authority/expiry controls.
Proxicon commentedon Oct 19, 2026
Implemented by PR #335, merged at
139a25f0bfcf237b9313282e46eaedbd2eabfe04, and delivered in v0.1.1-beta.30.Validation: the combined focused suite passed 65/65. PR validation and merged-main validation each passed 4,842/4,842, with zero failures/skips; overall durations were 15m40s and 16m07s, within the 20-minute requirement. These are separate executions, not additive unique coverage. The release build passed all eight jobs, including the actual Windows MCP archive's 15 bounded synthetic checks and all three native-client packages.
The publication workflow passed all seven jobs, including source/artifact authentication, the five image publications, and final distribution verification. Independent verification at 2026-10-19 10:19:34 UTC downloaded and hashed all 15 public assets, checked the publication receipt and final digest-pinned Compose bundle, and verified anonymous version-tag/digest manifests for all five images. Pipeline evidence confirms scans and full anonymous pulls. The publication record and SHA256SUMS bind the delivered bytes.
Functional acceptance remains pending owner testing. Hosted archive checks do not establish selected-consumer reconnection or effective owner admission.
Exact bound definition confirmations now reconcile before fresh-write ETag validation, including retained deletion tombstones. New receipts preserve the original job ID, resulting version and added item ID after later changes, without another mutation or accepted-operation audit. Current authorization, ownership, target/policy binding and expiry remain enforced; fresh invalid/stale requests remain unconsumed. Legacy ID-only receipts retain the documented authorized current-version fallback.
Closing this delivered repair. Fresh deployed definition-replay retests and wider acceptance remain open in #305/#294.