Problem
examples/003-MiniWebApp/ needs a progressive gate ladder so contributors know which env vars are on by default vs opt-in. Stages 0–3 are default-on in full CI.
Batch 50 (2026-05-23): Stage 4b link is green on Docker harness. Stage 4b2 execute is the active blocker (#764). Stages 4c–4d remain blocked on execute + HTTP.
Gate ladder
| Stage |
Env / target |
Default on master |
Tracking |
| 0 Skeleton |
MINIWEBAPP_LINT_GATE=0 |
opt-out only |
#621 ✅ |
| 1 Lint |
MINIWEBAPP_LINT_GATE=1 |
✅ web-smoke.sh |
#539, #621 |
| 1b VM CLI |
MINIWEBAPP_VM_CLI_GATE=1 |
✅ ci-fast.sh |
#597, #595 |
| 2 Serve PHPUnit |
MINIWEBAPP_SERVE_GATE=1 |
✅ ci-local.sh / ci-fast.sh |
#641 ✅ |
| 3 Shell web-smoke |
MINIWEBAPP_WEB_SMOKE_GATE=1 |
✅ ci-local.sh |
#664 ✅ |
| 4a AOT dry-run |
phpc build --project --dry-run |
@group aot-lint |
#624, #675 |
| 4b AOT link |
phpc build --project exit 0 |
✅ #752 ✅ |
#754 policy |
| 4b2 AOT execute |
CLI env → non-empty HTML |
❌ |
#764, #747, #485 |
| 4c AOT shell smoke |
examples-aot-smoke 003 slice |
❌ |
#738 |
| 4d AOT HTTP |
ServeAotTest + phpc serve --aot |
❌ |
#478, #610 |
| 4e Deploy smoke |
make deploy-smoke 003 |
❌ |
#745, #612 |
Scope
Implementation hints
| Piece |
File |
Change |
| Gates script |
script/miniwebapp-gates.sh |
Add stage 4b2: run .phpc/bin/app with QUERY_STRING=route=home, fail if stdout empty |
| Doctor |
lib/Doctor.php |
Print 4b ✅ / 4b2 ❌ with issue links |
| CI env |
script/ci-defaults.env |
MINIWEBAPP_AOT_EXECUTE_GATE=0 until #747 green (mirror #754 link gate) |
| Docs |
examples/003-MiniWebApp/README.md |
Replace “blocked #568” with #764 |
# Manual 4b2 probe (batch 50):
composer install && ./script/apply-patches.sh
php bin/phpc.php build --project examples/003-MiniWebApp
cd examples/003-MiniWebApp && QUERY_STRING=route=home REQUEST_METHOD=GET ./.phpc/bin/app | wc -c
# expect >0; currently 0 → #764
Acceptance criteria
./script/miniwebapp-gates.sh # stages 0–4b pass; 4b2 fails until #764 fixed
./phpc doctor --gates
Docker:
docker run --rm -v "$(pwd):/compiler" -w /compiler php-compiler:22.04-dev ./script/miniwebapp-gates.sh
Dependencies
Links
Problem
examples/003-MiniWebApp/needs a progressive gate ladder so contributors know which env vars are on by default vs opt-in. Stages 0–3 are default-on in full CI.Batch 50 (2026-05-23): Stage 4b link is green on Docker harness. Stage 4b2 execute is the active blocker (#764). Stages 4c–4d remain blocked on execute + HTTP.
Gate ladder
masterMINIWEBAPP_LINT_GATE=0MINIWEBAPP_LINT_GATE=1web-smoke.shMINIWEBAPP_VM_CLI_GATE=1ci-fast.shMINIWEBAPP_SERVE_GATE=1ci-local.sh/ci-fast.shMINIWEBAPP_WEB_SMOKE_GATE=1ci-local.shphpc build --project --dry-run@group aot-lintphpc build --projectexit 0examples-aot-smoke003 sliceServeAotTest+phpc serve --aotmake deploy-smoke003Scope
examples/003-MiniWebApp/README.mdscript/miniwebapp-gates.sh+make miniwebapp-gates+phpc doctor --gates(DevEx: phpc doctor --gates prints MiniWebApp ladder status #657 ✅)miniwebapp-gates.sh+ doctor (AOT: MiniWebApp native binary CLI execute emits empty stdout (post-link) #764, DevEx: phpc doctor --aot-project-probe for MiniWebApp #746 probe)ci-local.shImplementation hints
script/miniwebapp-gates.sh.phpc/bin/appwithQUERY_STRING=route=home, fail if stdout emptylib/Doctor.phpscript/ci-defaults.envMINIWEBAPP_AOT_EXECUTE_GATE=0until #747 green (mirror #754 link gate)examples/003-MiniWebApp/README.mdAcceptance criteria
./script/miniwebapp-gates.sh # stages 0–4b pass; 4b2 fails until #764 fixed ./phpc doctor --gatesDocker:
docker run --rm -v "$(pwd):/compiler" -w /compiler php-compiler:22.04-dev ./script/miniwebapp-gates.shDependencies
Links