Problem
#1947 tracks regenerating docs/capabilities.md for session_* builtins and 005-SessionsWeb AOT columns after session persistence landed. 006-FileUploadWeb uses nested $_FILES, multipart parsing (#52 ✅), and move_uploaded_file() (#2005 ✅ / #2014) but contributor matrices may still show VM-only or missing 006 notes.
Goal
After #2012 (or manual FILE_UPLOAD_WEB_AOT_SMOKE_GATE=1 green):
- Run
php script/capability-matrix.php and commit docs/capabilities.md rows for:
$_FILES / nested keys (web runtime)
move_uploaded_file (if not already ✅)
- Example column note: 006 AOT execute when gate on
- Optional:
php script/capability-syntax.php web/multipart rows
- Drift guard: extend existing capabilities sync test or add
CAPABILITIES_006_SYNC_GATE=1 in ci-fast (default 0)
Acceptance criteria
php script/capability-matrix.php
grep -E 'FILES|move_uploaded|006' docs/capabilities.md
./script/ci-fast.sh --filter Capabilities # when gate wired
Verification (local / Docker only)
docker run --rm -v "$(pwd):/compiler" -w /compiler php-compiler:22.04-dev \
php script/capability-matrix.php
No GitHub Actions.
Dependencies
Links
Problem
#1947 tracks regenerating
docs/capabilities.mdforsession_*builtins and 005-SessionsWeb AOT columns after session persistence landed. 006-FileUploadWeb uses nested$_FILES, multipart parsing (#52 ✅), andmove_uploaded_file()(#2005 ✅ / #2014) but contributor matrices may still show VM-only or missing 006 notes.Goal
After #2012 (or manual
FILE_UPLOAD_WEB_AOT_SMOKE_GATE=1green):php script/capability-matrix.phpand commitdocs/capabilities.mdrows for:$_FILES/ nested keys (web runtime)move_uploaded_file(if not already ✅)php script/capability-syntax.phpweb/multipart rowsCAPABILITIES_006_SYNC_GATE=1inci-fast(default0)Acceptance criteria
Verification (local / Docker only)
docker run --rm -v "$(pwd):/compiler" -w /compiler php-compiler:22.04-dev \ php script/capability-matrix.phpNo GitHub Actions.
Dependencies
Links
docs/capabilities.md,script/capability-matrix.php