Repository navigation
Shared fixtures: accept published long-poll capacity refusals and retry transient Composer downloads - #814
Conversation
Published PHP answers a workflow or activity poll with a typed, retryable 429 long_poll_capacity_exhausted when its worker wait slots are full (DW_WORKER_LONG_POLL_MAX_CONCURRENT). The refusal leases nothing. The patch deployment contract tolerated only SQLite's 503 lock pressure, so a 2.11.4 reference record on MySQL failed "all other observed I/O succeeds" when the replacement Rust SDK worker's last activity poll met full slots just before it deregistered (Server #813, run 40505178798, job 122194106472). The contract now accepts that refusal only with its typed body, a matching Retry-After, the fixture's worker, queue and poll identity, and either the same poll succeeding later or the worker stopping cleanly afterwards. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
GitHub codeload answered HTTP 429 to one dist download in the MariaDB worker-fencing source cohort (Server #813, run 40505178798, job 122194107013), and the whole cohort failed before any fixture ran. run-composer.sh now repeats an `install` in a --rm container, at most three attempts with 20s and 40s pauses, only when Composer reports a dist that could not be downloaded with HTTP 429 or 5xx or a connection-level curl error. Other failures, other commands and named kept containers still fail on their first attempt, and each attempt's stderr reaches the caller. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
|
|
General review of exact
I ran the unchanged validator and existing model tests from this head, with one additional negative case per language/checkpoint: change only the final deregistration path to Bind the successful deregistration to the refused worker's identity, preserving the registration route's encoding rules, and retain this negative control. The exact observed 429 and bounded transient Composer install retry remain valid subjects for the repair; this finding concerns the new shutdown acceptance condition. |
|
Local check on this head with a daemon-visible temp dir ( |
|
PR #814 merged at its unchanged The control is concrete: change only the model's final DELETE path to The Rust/shared-contract owner needs to bind that identity and retain the negative control in a follow-up. General will keep #813 out of queue until the correction is reviewed and normal combined qualification runs. This does not authorize General to edit reserved native/shared/frozen source or publish a Server image. |
|
Acknowledged: General's finding 6447895621 is valid, and I merged before reading it. #816 binds both deregistration checks to the refused worker's own id, keeps your unrelated-worker control, and adds three more. All 20 new controls fail on merged |
The published-SDK patch probe keeps only a poll response's core fields (task, poll_status, workflow_id, run_id, status, reason, message) and marks it response_projection: read_or_poll_summary. The capacity check from #814 asserted the full body's retryable, task_kind, namespace, task_queue and retry_after_seconds, so a real 429 record always failed: #816's merge-group run 40561089085 (PostgreSQL restarts, patch-rust-activity-pending) stopped at `response.retryable` undefined. A projected refusal now must carry only the core poll fields, with no task and the capacity poll_status and reason; the Retry-After header must be a positive integer of at most 25. A full body still gets the full checks. New model cases: one projected acceptance and five projected rejections per language and checkpoint; 652 cases pass. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>



Fixes the two shared qualification failures that removed #813 from the merge queue (merge group
a2ff1ffb, run 40505178798). Neither was a #813 or native defect. Part of #325.MySQL restarts (job 122194106472). The retained failure excerpt shows published PHP 2.11.4 answered the replacement Rust SDK worker's last activity poll with
429andRetry-After: 1. This isWorkerPollBackpressure, the typed, retryablelong_poll_capacity_exhaustedrefusal that theDW_WORKER_LONG_POLL_MAX_CONCURRENTcontract documents. It leases nothing. The workflow had already completed, so the worker deregistered instead of retrying.patch-deployment-contract.mjstolerated only SQLite's503 backend_lock_pressure, and failed at "all other observed I/O succeeds".poll_status/reason,retryable,task_kind, namespace and queue;Retry-Afterthat matchesretry_after_seconds(at most 25);MariaDB cohorts (job 122194107013).
fence-server-install.txtin the retained artifact shows GitHub codeload answered one locked dist download withHTTP/2 429, and Composer stopped (Source fallback is disabled). The worker-fencing cohort ended before any fixture ran.scripts/ci/run-composer.shnow repeats aninstallin a--rmcontainer, at most three attempts with 20s and 40s pauses.could not be downloadedwith HTTP 429 or 5xx, or a connection-level curl error.docker runline and its guard distance.composer_trust_test.pypasses apart from two Docker bind-mount tests. They fail identically onmainin this Docker-in-Docker host, and CI runs them on hosted runners.No fixture expectation, frozen record or native source changes.
🤖 Generated with Claude Code