fix(apple-runner): resend a read only on the runner's busy refusal - #2863
Conversation
Size Report
Startup median (7 runs, lower is better):
|
|
Adversarial review: clean. Applied its one note in |
791763d to
105702e
Compare
|
Reviewed at 105702e. The code looks correct: only a Not blocking: removing the Smoke Tests was still queued, so there is no CI result to attribute yet. No device run is needed for a classification-table change. #2804 adds its own runner-busy row in the same file, so whichever PR merges second should fold the two into one rule. |
The transport's same-request resend also matched a generic flagged_retriable row keyed on details.retriable, which tells a caller's poll to try again. Startup-phase failures (runner_phase_budget_exhausted, apple_toolchain_probe_unavailable) and external provider failures carry that flag, so a read-only command resent them up to three times, each with a fresh startup budget. Drop that row and the app_not_running row that undid it for APP_NOT_RUNNING: #2804's runner_busy_refusal row, keyed on the RUNNER_BUSY runner code, is now the only resend rule for a structured runner refusal. Closes #2862
105702e to
31eecff
Compare
|
Rebased onto main after #2804 merged, and squashed to |
|
Summary
A read-only runner command is now resent inside one request only when the runner refused it with
RUNNER_BUSY. Before, anyCOMMAND_FAILEDwithdetails.retriable: truewas resent. That flag is for a caller's poll (wait); #1126 added the check forRUNNER_BUSYonly. The rule is renamedflagged_retriable→runner_busyand keys ondetails.runnerErrorCode. Theapp_not_runningrow and its ordering note are deleted.Producers of
retriable: truethat reach the classifier:RUNNER_BUSY: still resent.APP_NOT_RUNNING: not resent, as before.runner_phase_budget_exhaustedandapple_toolchain_probe_unavailable(thrown inensureRunnerSession): no longer resent. Each resend opened a fresh startup budget, which defeated the fix(ios): budget cold toolchain probes for the first-exec signature stall #2423 cap. A probe timeout already gets one retry inside that budget.AppleRunnerProviders: no resend on the flag alone. A provider that forwards the runner'sRUNNER_BUSYcode is still resent.All keep
retriable, so the caller retries on its next request. CHANGELOG updated. 4 files. Closes #2862.With #2804: its
runner_busy_refusalrow matches thisrunner_busyrow. When it rebases, it addsdrainResend: truehere and drops its duplicate row. The new busy test does not assert the status probe that #2804 removes.Validation
Tested at
7a24d34091.pnpm check:affected --runpassed: 387 files, 2669 tests. The first run had one timeout in the unrelatedrunner-client.test.ts; it passed on the rerun.All tests go through
runAppleRunnerCommand. Mutations that each turn tests red:retriable: APP_NOT_RUNNING, startup-phase and provider tests fail.retriable-producer tests fail.retryable: falseonrunner_busy: the busy-resend and alert-provider tests fail.No device run: no Swift or wire change.