Repository navigation
CI: retry the Composer floor build and wait longer for the scheduler - #852
Conversation
Two flakes failed #851's merge-queue run and earlier PR runs: - Building the Brotli-floor Composer image failed with apk exit 5 (apk add brotli-libs>=1.2.1-r0) while fetching Alpine's package index, failing every job that installs Composer packages. The build is now retried twice, 10 and 20 seconds apart, before the failure is reported; a new test drives the script with a fake docker. - The schedule probe gave published PHP's installed schedule:evaluate role ten seconds to fire a 2-second schedule's first occurrence. Each pass of that role boots the application twice, which on a loaded runner can exceed ten seconds. It now waits 25 seconds, still inside the runner's 45-second probe budget; the schedule's max_runs of 1 keeps a longer wait from firing more. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
|
|
Reviewed exact 1dae4ff. The Composer floor build makes at most three attempts with 10/20-second delays, exits nonzero on exhaustion, and retains the pinned-base label and installed decoder checks on every use. The new test runs the actual shell script with a Docker stand-in and checks both recovery on attempt three and failure after three attempts. The local 20-test / six-skip result remains author-attributed; I inspected source without rerunning it. The scheduler change extends only the observation deadline to 25 seconds inside the unchanged 45-second probe budget. The fixture still uses the original committed two-second occurrence, max_runs=1, its original workflow/audit links and two later real interval checks for no extra occurrence. The probe does not move the scheduled deadline or write target rows. This does not establish a scheduler-latency guarantee. No targeted source finding from this review. Normal exact-head hosted and protected cumulative qualification remain required; prior failed runs remain failed evidence. Exact-head hosted qualification at 1dae4ff is now terminal: at 06:36 UTC on October 29, the primary rollup reports 56 successful checks, one expected skip and no open or failed check. Protected cumulative qualification and merge remain required. Protected qualification is now verified: cumulative e6c154b passed Shared Server fixtures 40831096377 at 07:06:31 UTC, PHPUnit Feature 40831096518 at 06:59:40 and Public Boundary 40831096468. PR #852 merged at 07:06:56 UTC as that same commit. This is source/CI delivery, without a new published Server image or installed-runtime claim. |



This fixes two CI flakes that failed #851's merge-queue run (run 40824302270) and earlier PR runs. Under the CI-first rule they come before more feature PRs.
Composer floor image build
scripts/ci/brotli-safe-composer.shbuilds the pinned Composer image with Alpine's fixedbrotli-libs(CVE-2026-111497). The build failed now and then withapk add --no-cache --upgrade "brotli-libs>=1.2.1-r0"exiting 5 while it fetched the package index. That fails every job that installs Composer packages: for example #851's MariaDB restarts lane, and #850's corrected-markers lane ond85908cb.The build is now retried twice, 10 and 20 seconds apart, before the failure is reported. The image is still checked on every use, as before. A new
composer_trust_test.pycase runs the script with a fakedockerwhose build fails twice, then three times.Installed scheduler wait
schedule-probe.phpgave published PHP's installedschedule:evaluaterole ten seconds to fire the first occurrence of a 2-second schedule. Each pass of the role's loop boots the application twice (repair pass, then schedule evaluation), and on a loaded runner that can take more than ten seconds. #851's merge-queue corpus failed there: the excerpt readschedule-fixed-rate-one-occurrence (runner-blocked): ... did not fire the original occurrence within ten seconds. It now waits 25 seconds, inside the runner's 45-second probe budget. The fixture'smax_runs: 1keeps a longer wait from firing more occurrences.Verification (local)
python3 -m unittest tests/Unit/Support/composer_trust_test.py: 20 run, 6 skipped (they need Docker), all others pass.sh -non the script passes.🤖 Generated with Claude Code