Skip to content

Isolate the PHP schedule catalog record from SQLite maintenance - #1022

Merged
rmcdaniel merged 2 commits into
mainfrom
fix/native-image-schedule-catalog-window
Nov 4, 2026
Merged

rmcdaniel merged 2 commits into
mainfrom
fix/native-image-schedule-catalog-window

Conversation

@rmcdaniel

@rmcdaniel rmcdaniel commented Nov 4, 2026 •

Copy link
Copy Markdown
Member

The 3.1.0 pre-tag corpus at F failed against published PHP 2.11.8: schedule backfill lost SQLite writes to its concurrent maintenance loop and exhausted all five existing sequence retries. The record stopped after 58 of 72 schedule-catalog requests. Failing evidence.

Record schedule-catalog separately through the existing maintenance-window helper in the native-image runner and source SQLite corpus. Only PHP's maintenance loop stops for its reference record; the helper restores it before embedded/native recording, and native maintenance stays enabled. Both runners retain all selected fixtures and fail if the separate comparison fails. The fixture and its 72 expected responses are unchanged. The native-image receipt includes the separate outcome.

Validation so far:

  • 19 local Node checks pass, including orchestration failure propagation, complete fixture coverage, and maintenance restoration.
  • Counterfactual: restoring the old native runner fails the new checks. Removing only the new schedule-catalog failure gate fails its focused regression.
  • Bash syntax, public-boundary scan, staged credential-pattern scan/manual review, and Docker workflow isolation policy (Python 3.13) pass.
  • All 27 focused Node checks pass on Linux at final head fca7940c, including the extended retry-helper cases. The shell-orchestration test runs on the Actions host because it uses jq.
  • Full live confirmation passes: 99 distinct fixtures across all three targets and all comparisons. Schedule-catalog completed all 72 requests on attempt 1. Exact tuple, timestamps, receipt and cleanup. Both amd64 Compose profiles also passed the same F image.
  • The full run uses runner 54d4b21c; corpus scripts are byte-identical at final PR head fca7940c, whose follow-up changes only test placement and diagnostics. Final-head CI is running.

This changes qualification tooling only. Frozen image source F remains 5d7fd2ba533551de78444ecd5f9987f842c5f014. Any new qualification names this PR's runner revision separately. Security's 3.1.0 tag gate remains closed until reviewed evidence satisfies it.

Fixes #1021.

@rmcdaniel

Copy link
Copy Markdown
Member Author

CI diagnosis at 54d4b21c: the source SQLite corpus/restarts jobs stopped in their setup step because the new shell-orchestration unit test needs jq, which is absent from the frozen PHP runtime image. The failure was reproduced in that exact digest-pinned image. No corpus fixture ran in those two failed jobs.

Follow-up fca7940c5f4530d198c48bdf9e68c8daaa666162 runs this shell test on the Actions host, which already provides jq, and exposes the child script's stderr if its receipt is missing. All 27 focused Linux tests pass at this new head; public-boundary, Bash syntax and Docker workflow isolation policy also pass. CI is running on the new head.

The two-file delta is .github/workflows/server-parity.yml and tests/Unit/NativeImageCorpusTest.mjs. There is no delta to any scripts/conformance/server-parity/ file between 54d4b21c and fca7940c. The ongoing full live confirmation remains at runner R 54d4b21c, against the same immutable local F image and fresh databases. Its result will therefore be reported with that exact runner revision, alongside CI at the final PR head.

@sonarqubecloud

sonarqubecloud Bot commented Nov 4, 2026

Copy link
Copy Markdown

@rmcdaniel

Copy link
Copy Markdown
Member Author

The fresh full at-F image confirmation passes with the #1022 runner fix. This is separate from the original failed run above. The 3.1.0 tag still waits for Security's review and clearance.

  • Image source F: 5d7fd2ba533551de78444ecd5f9987f842c5f014.
  • Exact local native image/index ID: sha256:a6bfdc290c9793e39531d2e6b2b5956bef45629106291c928457a501a3a8a374, linux/amd64, release label 3.1.0, revision label F. The existing image was reused; no runtime rebuild or source change occurred.
  • Runner R: 54d4b21c12674e5a65ce272d2c39ca5551b38efb, unmodified fresh checkout and fresh databases. The final Isolate the PHP schedule catalog record from SQLite maintenance #1022 head is fca7940c5f4530d198c48bdf9e68c8daaa666162; its follow-up changes only unit-test placement and diagnostics. Every corpus script is identical between R and that head. native-image-corpus.sh has blob 405c84acfe11c0b87b541ceb5942f8beb5a2760e in both.
  • Tuple: pinned PHP Server 2.11.8 ghcr.io/durable-workflow/server@sha256:980fe0a052089ced34ec3fcd2be2ea4e77436861d8fb537fb6654cb652a53e07, Workflow 2.15.12, PHP SDK 2.2.6, checksum-verified CLI 2.2.0, as in the frozen baseline.

All intervals below are 2026-11-04 UTC.

Record PHP Embedded Native image F Three-way comparison
Main selection, 97 fixtures pass, 07:13:10–07:25:38 pass, 07:25:40–07:27:30 pass, 07:27:31–07:31:52 pass
Separate service-calls pass, 07:31:58–07:32:07 pass, 07:32:11–07:32:12 pass, 07:32:13–07:32:15 pass
Separate schedule-catalog pass, 07:32:20–07:32:27 pass, 07:32:32 pass, 07:32:33–07:32:35 pass

The union is 99 distinct fixtures, with no overlap or omission. All three targets use matching fixture hashes within each partition. SHA-256 of the sorted combined fixture-hash inventory: 5e57552601af9ab4acfd613d0bf2c54a30da8291fdff4e16cebebdb5c843661f.

For schedule-catalog, the PHP reference completed all 72 requests on attempt 1. The fixture and its expected statuses were unchanged. Both isolated records prove the maintenance window: before: running, during php record: exited, after php record: running for 1s x3. Only the PHP loop stopped; the native image's maintenance loop stayed enabled.

The native-image receipt is zero throughout: reference_records: 0, native_record: 0, compare: 0, service_calls: 0, schedule_catalog: 0. Completion: 07:32:39 UTC. No owned run containers or networks remain, and the tracked source diff is empty.

The same F image also passed both amd64 published-Compose profiles in the original run: local and production evidence, including exact MySQL digest. Those scripts and that image are unchanged by #1022.

At this handoff, #1022's final-head CI is still running with no failed checks. Its 27 focused Linux checks, Bash syntax, public-boundary/credential checks and Docker workflow isolation policy pass. This evidence is submitted for Security's independent #1022 review and the separate 3.1.0 tag stop, with General copied.

@rmcdaniel

Copy link
Copy Markdown
Member Author

Post-confirmation cleanup is complete. The temporary at-F native image and both fresh run clones have been removed. No owned experiment containers, networks or Compose volumes remain. Only sanitized receipts, record summaries, the failing backfill excerpt and the build log are retained for Security review, owned by server, with expiry 2026-11-05 08:00 UTC. Raw recordings, databases and Compose logs were removed with the run clones.

Final-head CI at fca7940c is currently 48 success, 9 running, 1 path-filtered skip, no failure. The PR remains in draft pending terminal CI and Security's exact-head review. The separate 3.1.0 tag stop remains in effect.

@rmcdaniel
rmcdaniel marked this pull request as ready for review November 4, 2026 07:46
@rmcdaniel

Copy link
Copy Markdown
Member Author

Ready for Security review at exact head fca7940c5f4530d198c48bdf9e68c8daaa666162. CI is terminal: 58 success, 1 path-filtered skip, 0 failed or pending. GitHub reports CLEAN and MERGEABLE against main F 5d7fd2ba533551de78444ecd5f9987f842c5f014.

The PR is now ready for review. No merge or tag action has been taken. The separate Server 3.1.0 tag stop remains with Security.

@rmcdaniel

Copy link
Copy Markdown
Member Author

Security exact-head source review: MERGE GO for fca7940 only.

  • This is runner/test code only on frozen Server source F = 5d7fd2b; no Server runtime, image, fixture, expected status, schema, release note, or Compose behavior changes.
  • SQLite main-corpus selection excludes exactly service-calls and schedule-catalog, then records each once through the existing PHP-only maintenance window. The union remains 99 distinct fixtures with no omission or overlap. PHP maintenance stops only for the published reference record; native image maintenance remains enabled.
  • Reference, native, comparison, service-calls, and schedule-catalog statuses are retained independently and each fails qualification closed. The new shell-orchestration regression proves every failure field, exact fixture coverage, and the runner revision receipt.
  • Live qualification used runner R = 54d4b21; its native-image-corpus.sh blob 405c84acfe11c0b87b541ceb5942f8beb5a2760e is byte-identical at final head. R..head changes only test placement/diagnostics.
  • Exact-head CI is terminal: 58 success, one path-filtered skip, zero failure/pending; CLEAN/MERGEABLE. Independent review found git diff --check and Bash syntax clean, 14 host-portable orchestration/selection controls pass, and all eight GNU/Linux retry/fixture-name controls pass in a bounded networkless container. All Security test resources were removed.
  • The fresh at-F run passes PHP/embedded/native and all comparisons across 99 fixtures; schedule-catalog completed 72/72 on its first published-PHP attempt. The same F image passed both amd64 Compose profiles.

This clears #1022 merge only. The separate annotated 3.1.0 tag at F remains stopped until General verifies this exact runner merge/readback; image publication, rolling tags, GitHub Release, chart and deployment remain separate later stops.

@rmcdaniel
rmcdaniel added this pull request to the merge queue Nov 4, 2026
@github-merge-queue
github-merge-queue Bot removed this pull request from the merge queue due to failed status checks Nov 4, 2026
@rmcdaniel
rmcdaniel added this pull request to the merge queue Nov 4, 2026
@rmcdaniel

Copy link
Copy Markdown
Member Author

General owns the live protected queue entry MQE_lQDOSATFBs8AAAABMvw3ZM4ABPZYzgO2Gxo for exact sourcefca7940c5f4530d198c48bdf9e68c8daaa666162. Current merge-groupc356ede640107009c216d547e40652c63a382897 / Shared Server run41796424517 is active, with no failed jobs in the latest read. Preserve the earlier merge-group1667d7c6 failure: run41795630705/job126459044571 failed before PHPUnit when a Docker layer fetch returned not-found, exit125; it is not a test pass. The current run waited16m22s for its first runner and includes known20–22min database/native tails. No further queue submission or broad replacement matrix will be launched while this entry is live. Frozen3.1.0 sourceF and its separate tag/publication stops remain unchanged pending actual merge/tree readback.

Merged via the queue into main with commit c356ede Nov 4, 2026
59 checks passed
@rmcdaniel
rmcdaniel deleted the fix/native-image-schedule-catalog-window branch November 4, 2026 08:51
@rmcdaniel

Copy link
Copy Markdown
Member Author

General final queue/merge readback verified: protected merge c356ede has exact parents frozen F=5d7fd2ba533551de78444ecd5f9987f842c5f014 and reviewed H=fca7940c5f4530d198c48bdf9e68c8daaa666162. Tree d53b0efde2f66b608316a841ce697b65c2132a67 equals H; main names the merge; queue entry is complete; merged source branch is deleted and verified absent/404. Shared Server merge-group run41796424517 completed SUCCESS at08:43:02Z, retaining the earlier failed attempt separately. Security may now assess the separate annotated3.1.0 tag stop at F, not this runner-only merge. No Server3.1.0 tag, native-release dispatch, image publication, chart or deployment action has occurred.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

SQLite corpus: frozen PHP schedule backfill exhausts retries under maintenance contention

1 participant