Problem
007-ThrowsWeb (#2076) will land VM + phpc serve smoke (#2093) but has no AOT gate ladder yet. 006-FileUploadWeb established the pattern:
| Gate |
Issue |
Default in ci-defaults.env |
| VM multipart |
#2009 |
FILE_UPLOAD_WEB_SMOKE_GATE=1 |
| AOT link |
#2011 |
FILE_UPLOAD_WEB_AOT_LINK_GATE=1 |
| AOT execute |
#2012 |
FILE_UPLOAD_WEB_AOT_SMOKE_GATE=1 |
Without 007 AOT gates, throw/catch regressions only surface in manual phpc build runs after #195 / #57 land.
Goal
When #2076 tree is green and #195 enables throw + #57 enables catch in AOT:
THROWSWEB_AOT_LINK_GATE=1 — phpc build --project examples/007-ThrowsWeb in ci-local.sh (llvm group)
THROWSWEB_AOT_SMOKE_GATE=1 — native binary returns HTTP 500 body on invalid POST (CGI env overlay)
- Document env vars in
docs/local-ci-matrix.md and phpc doctor --gates
Implementation hints
| Piece |
File |
Notes |
| PHPUnit |
test/unit/ThrowsWebAotLinkTest.php, ThrowsWebAotExecuteTest.php |
Mirror FileUploadWebAotExecuteTest |
| Shell |
script/examples-aot-smoke.sh |
EXAMPLES_AOT_SMOKE_ONLY=007 slice (follow-up #2104) |
| Defaults |
script/ci-defaults.env |
Start 0 opt-in; flip default-on follow-up issue after green |
| CI wire |
script/ci-local.sh |
After link green, before full examples-aot-smoke |
| Blockers |
#195, #57, #2084 PHPTs |
VM compliance first |
CGI overlay (sketch)
Invalid POST → caught Exception → http_response_code(500) + HTML error page (same needles as VM smoke #2093).
Acceptance criteria
# After gates default-on:
THROWSWEB_AOT_LINK_GATE=1 THROWSWEB_AOT_SMOKE_GATE=1 ./script/ci-local.sh \
--filter 'ThrowsWebAot'
Docker:
docker run --rm -v "$(pwd):/compiler" -w /compiler php-compiler:22.04-dev \
env THROWSWEB_AOT_LINK_GATE=1 THROWSWEB_AOT_SMOKE_GATE=1 \
vendor/bin/phpunit --filter ThrowsWebAot
Dependencies
Links
Problem
007-ThrowsWeb (#2076) will land VM +
phpc servesmoke (#2093) but has no AOT gate ladder yet. 006-FileUploadWeb established the pattern:ci-defaults.envFILE_UPLOAD_WEB_SMOKE_GATE=1FILE_UPLOAD_WEB_AOT_LINK_GATE=1FILE_UPLOAD_WEB_AOT_SMOKE_GATE=1Without 007 AOT gates,
throw/catchregressions only surface in manualphpc buildruns after #195 / #57 land.Goal
When #2076 tree is green and #195 enables
throw+ #57 enablescatchin AOT:THROWSWEB_AOT_LINK_GATE=1—phpc build --project examples/007-ThrowsWebinci-local.sh(llvm group)THROWSWEB_AOT_SMOKE_GATE=1— native binary returns HTTP 500 body on invalid POST (CGI env overlay)docs/local-ci-matrix.mdandphpc doctor --gatesImplementation hints
test/unit/ThrowsWebAotLinkTest.php,ThrowsWebAotExecuteTest.phpFileUploadWebAotExecuteTestscript/examples-aot-smoke.shEXAMPLES_AOT_SMOKE_ONLY=007slice (follow-up #2104)script/ci-defaults.env0opt-in; flip default-on follow-up issue after greenscript/ci-local.shexamples-aot-smokeCGI overlay (sketch)
Invalid POST → caught
Exception→http_response_code(500)+ HTML error page (same needles as VM smoke #2093).Acceptance criteria
Docker:
docker run --rm -v "$(pwd):/compiler" -w /compiler php-compiler:22.04-dev \ env THROWSWEB_AOT_LINK_GATE=1 THROWSWEB_AOT_SMOKE_GATE=1 \ vendor/bin/phpunit --filter ThrowsWebAotDependencies
Links