{ "task_id": "SUPERGLOBAL-MIGRATION-001", "plan_ref": "agent-system/runs/SUPERGLOBAL-MIGRATION-001/plan.json", "status": "done", "changed_files": [ { "path": "pages/account/profile().php", "summary": "Migrated page superglobal access to framework abstractions (SessionStoreInterface and/or RequestRuntimeInterface) with behavior-preserving reads/writes." }, { "path": "pages/address-book/data().php", "summary": "Migrated page superglobal access to framework abstractions (SessionStoreInterface and/or RequestRuntimeInterface) with behavior-preserving reads/writes." }, { "path": "pages/address-book/index().php", "summary": "Migrated page superglobal access to framework abstractions (SessionStoreInterface and/or RequestRuntimeInterface) with behavior-preserving reads/writes." }, { "path": "pages/address-book/saved-filter-delete().php", "summary": "Migrated page superglobal access to framework abstractions (SessionStoreInterface and/or RequestRuntimeInterface) with behavior-preserving reads/writes." }, { "path": "pages/address-book/saved-filter-save().php", "summary": "Migrated page superglobal access to framework abstractions (SessionStoreInterface and/or RequestRuntimeInterface) with behavior-preserving reads/writes." }, { "path": "pages/address-book/view($id).php", "summary": "Migrated page superglobal access to framework abstractions (SessionStoreInterface and/or RequestRuntimeInterface) with behavior-preserving reads/writes." }, { "path": "pages/admin/api-audit/index().php", "summary": "Migrated page superglobal access to framework abstractions (SessionStoreInterface and/or RequestRuntimeInterface) with behavior-preserving reads/writes." }, { "path": "pages/admin/departments/create().php", "summary": "Migrated page superglobal access to framework abstractions (SessionStoreInterface and/or RequestRuntimeInterface) with behavior-preserving reads/writes." }, { "path": "pages/admin/departments/data().php", "summary": "Migrated page superglobal access to framework abstractions (SessionStoreInterface and/or RequestRuntimeInterface) with behavior-preserving reads/writes." }, { "path": "pages/admin/departments/delete($id).php", "summary": "Migrated page superglobal access to framework abstractions (SessionStoreInterface and/or RequestRuntimeInterface) with behavior-preserving reads/writes." }, { "path": "pages/admin/departments/edit($id).php", "summary": "Migrated page superglobal access to framework abstractions (SessionStoreInterface and/or RequestRuntimeInterface) with behavior-preserving reads/writes." }, { "path": "pages/admin/departments/index().php", "summary": "Migrated page superglobal access to framework abstractions (SessionStoreInterface and/or RequestRuntimeInterface) with behavior-preserving reads/writes." }, { "path": "pages/admin/import-audit/index().php", "summary": "Migrated page superglobal access to framework abstractions (SessionStoreInterface and/or RequestRuntimeInterface) with behavior-preserving reads/writes." }, { "path": "pages/admin/imports/index().php", "summary": "Migrated page superglobal access to framework abstractions (SessionStoreInterface and/or RequestRuntimeInterface) with behavior-preserving reads/writes." }, { "path": "pages/admin/imports/sample($type).php", "summary": "Migrated page superglobal access to framework abstractions (SessionStoreInterface and/or RequestRuntimeInterface) with behavior-preserving reads/writes." }, { "path": "pages/admin/index().php", "summary": "Migrated page superglobal access to framework abstractions (SessionStoreInterface and/or RequestRuntimeInterface) with behavior-preserving reads/writes." }, { "path": "pages/admin/mail-log/index().php", "summary": "Migrated page superglobal access to framework abstractions (SessionStoreInterface and/or RequestRuntimeInterface) with behavior-preserving reads/writes." }, { "path": "pages/admin/permissions/create().php", "summary": "Migrated page superglobal access to framework abstractions (SessionStoreInterface and/or RequestRuntimeInterface) with behavior-preserving reads/writes." }, { "path": "pages/admin/permissions/delete($id).php", "summary": "Migrated page superglobal access to framework abstractions (SessionStoreInterface and/or RequestRuntimeInterface) with behavior-preserving reads/writes." }, { "path": "pages/admin/permissions/edit($id).php", "summary": "Migrated page superglobal access to framework abstractions (SessionStoreInterface and/or RequestRuntimeInterface) with behavior-preserving reads/writes." }, { "path": "pages/admin/permissions/index().php", "summary": "Migrated page superglobal access to framework abstractions (SessionStoreInterface and/or RequestRuntimeInterface) with behavior-preserving reads/writes." }, { "path": "pages/admin/roles/create().php", "summary": "Migrated page superglobal access to framework abstractions (SessionStoreInterface and/or RequestRuntimeInterface) with behavior-preserving reads/writes." }, { "path": "pages/admin/roles/delete($id).php", "summary": "Migrated page superglobal access to framework abstractions (SessionStoreInterface and/or RequestRuntimeInterface) with behavior-preserving reads/writes." }, { "path": "pages/admin/roles/edit($id).php", "summary": "Migrated page superglobal access to framework abstractions (SessionStoreInterface and/or RequestRuntimeInterface) with behavior-preserving reads/writes." }, { "path": "pages/admin/roles/index().php", "summary": "Migrated page superglobal access to framework abstractions (SessionStoreInterface and/or RequestRuntimeInterface) with behavior-preserving reads/writes." }, { "path": "pages/admin/scheduled-jobs/edit($id).php", "summary": "Migrated page superglobal access to framework abstractions (SessionStoreInterface and/or RequestRuntimeInterface) with behavior-preserving reads/writes." }, { "path": "pages/admin/scheduled-jobs/index().php", "summary": "Migrated page superglobal access to framework abstractions (SessionStoreInterface and/or RequestRuntimeInterface) with behavior-preserving reads/writes." }, { "path": "pages/admin/scheduled-jobs/run($id).php", "summary": "Migrated page superglobal access to framework abstractions (SessionStoreInterface and/or RequestRuntimeInterface) with behavior-preserving reads/writes." }, { "path": "pages/admin/search/data().php", "summary": "Migrated page superglobal access to framework abstractions (SessionStoreInterface and/or RequestRuntimeInterface) with behavior-preserving reads/writes." }, { "path": "pages/admin/settings/expire-remember-tokens().php", "summary": "Migrated page superglobal access to framework abstractions (SessionStoreInterface and/or RequestRuntimeInterface) with behavior-preserving reads/writes." }, { "path": "pages/admin/settings/favicon().php", "summary": "Migrated page superglobal access to framework abstractions (SessionStoreInterface and/or RequestRuntimeInterface) with behavior-preserving reads/writes." }, { "path": "pages/admin/settings/favicon-delete().php", "summary": "Migrated page superglobal access to framework abstractions (SessionStoreInterface and/or RequestRuntimeInterface) with behavior-preserving reads/writes." }, { "path": "pages/admin/settings/index().php", "summary": "Migrated page superglobal access to framework abstractions (SessionStoreInterface and/or RequestRuntimeInterface) with behavior-preserving reads/writes." }, { "path": "pages/admin/settings/logo().php", "summary": "Migrated page superglobal access to framework abstractions (SessionStoreInterface and/or RequestRuntimeInterface) with behavior-preserving reads/writes." }, { "path": "pages/admin/settings/logo-delete().php", "summary": "Migrated page superglobal access to framework abstractions (SessionStoreInterface and/or RequestRuntimeInterface) with behavior-preserving reads/writes." }, { "path": "pages/admin/settings/revoke-api-tokens().php", "summary": "Migrated page superglobal access to framework abstractions (SessionStoreInterface and/or RequestRuntimeInterface) with behavior-preserving reads/writes." }, { "path": "pages/admin/settings/run-user-lifecycle().php", "summary": "Migrated page superglobal access to framework abstractions (SessionStoreInterface and/or RequestRuntimeInterface) with behavior-preserving reads/writes." }, { "path": "pages/admin/stats/index().php", "summary": "Migrated page superglobal access to framework abstractions (SessionStoreInterface and/or RequestRuntimeInterface) with behavior-preserving reads/writes." }, { "path": "pages/admin/system-audit/index().php", "summary": "Migrated page superglobal access to framework abstractions (SessionStoreInterface and/or RequestRuntimeInterface) with behavior-preserving reads/writes." }, { "path": "pages/admin/tenants/avatar($id).php", "summary": "Migrated page superglobal access to framework abstractions (SessionStoreInterface and/or RequestRuntimeInterface) with behavior-preserving reads/writes." }, { "path": "pages/admin/tenants/avatar-delete($id).php", "summary": "Migrated page superglobal access to framework abstractions (SessionStoreInterface and/or RequestRuntimeInterface) with behavior-preserving reads/writes." }, { "path": "pages/admin/tenants/avatar-file().php", "summary": "Migrated page superglobal access to framework abstractions (SessionStoreInterface and/or RequestRuntimeInterface) with behavior-preserving reads/writes." }, { "path": "pages/admin/tenants/create().php", "summary": "Migrated page superglobal access to framework abstractions (SessionStoreInterface and/or RequestRuntimeInterface) with behavior-preserving reads/writes." }, { "path": "pages/admin/tenants/custom-field-create($id).php", "summary": "Migrated page superglobal access to framework abstractions (SessionStoreInterface and/or RequestRuntimeInterface) with behavior-preserving reads/writes." }, { "path": "pages/admin/tenants/custom-field-delete($id).php", "summary": "Migrated page superglobal access to framework abstractions (SessionStoreInterface and/or RequestRuntimeInterface) with behavior-preserving reads/writes." }, { "path": "pages/admin/tenants/custom-field-update($id).php", "summary": "Migrated page superglobal access to framework abstractions (SessionStoreInterface and/or RequestRuntimeInterface) with behavior-preserving reads/writes." }, { "path": "pages/admin/tenants/delete($id).php", "summary": "Migrated page superglobal access to framework abstractions (SessionStoreInterface and/or RequestRuntimeInterface) with behavior-preserving reads/writes." }, { "path": "pages/admin/tenants/edit($id).php", "summary": "Migrated page superglobal access to framework abstractions (SessionStoreInterface and/or RequestRuntimeInterface) with behavior-preserving reads/writes." }, { "path": "pages/admin/tenants/favicon($id).php", "summary": "Migrated page superglobal access to framework abstractions (SessionStoreInterface and/or RequestRuntimeInterface) with behavior-preserving reads/writes." }, { "path": "pages/admin/tenants/favicon-delete($id).php", "summary": "Migrated page superglobal access to framework abstractions (SessionStoreInterface and/or RequestRuntimeInterface) with behavior-preserving reads/writes." }, { "path": "pages/admin/tenants/index().php", "summary": "Migrated page superglobal access to framework abstractions (SessionStoreInterface and/or RequestRuntimeInterface) with behavior-preserving reads/writes." }, { "path": "pages/admin/user-lifecycle-audit/index().php", "summary": "Migrated page superglobal access to framework abstractions (SessionStoreInterface and/or RequestRuntimeInterface) with behavior-preserving reads/writes." }, { "path": "pages/admin/user-lifecycle-audit/restore($id).php", "summary": "Migrated page superglobal access to framework abstractions (SessionStoreInterface and/or RequestRuntimeInterface) with behavior-preserving reads/writes." }, { "path": "pages/admin/user-lifecycle-audit/view($id).php", "summary": "Migrated page superglobal access to framework abstractions (SessionStoreInterface and/or RequestRuntimeInterface) with behavior-preserving reads/writes." }, { "path": "pages/admin/users/access-pdf($id).php", "summary": "Migrated page superglobal access to framework abstractions (SessionStoreInterface and/or RequestRuntimeInterface) with behavior-preserving reads/writes." }, { "path": "pages/admin/users/access-pdf-bulk().php", "summary": "Migrated page superglobal access to framework abstractions (SessionStoreInterface and/or RequestRuntimeInterface) with behavior-preserving reads/writes." }, { "path": "pages/admin/users/activate($id).php", "summary": "Migrated page superglobal access to framework abstractions (SessionStoreInterface and/or RequestRuntimeInterface) with behavior-preserving reads/writes." }, { "path": "pages/admin/users/api-token-create($id).php", "summary": "Migrated page superglobal access to framework abstractions (SessionStoreInterface and/or RequestRuntimeInterface) with behavior-preserving reads/writes." }, { "path": "pages/admin/users/api-token-revoke($id).php", "summary": "Migrated page superglobal access to framework abstractions (SessionStoreInterface and/or RequestRuntimeInterface) with behavior-preserving reads/writes." }, { "path": "pages/admin/users/avatar($id).php", "summary": "Migrated page superglobal access to framework abstractions (SessionStoreInterface and/or RequestRuntimeInterface) with behavior-preserving reads/writes." }, { "path": "pages/admin/users/avatar-delete($id).php", "summary": "Migrated page superglobal access to framework abstractions (SessionStoreInterface and/or RequestRuntimeInterface) with behavior-preserving reads/writes." }, { "path": "pages/admin/users/avatar-file().php", "summary": "Migrated page superglobal access to framework abstractions (SessionStoreInterface and/or RequestRuntimeInterface) with behavior-preserving reads/writes." }, { "path": "pages/admin/users/bulk($action).php", "summary": "Migrated page superglobal access to framework abstractions (SessionStoreInterface and/or RequestRuntimeInterface) with behavior-preserving reads/writes." }, { "path": "pages/admin/users/create().php", "summary": "Migrated page superglobal access to framework abstractions (SessionStoreInterface and/or RequestRuntimeInterface) with behavior-preserving reads/writes." }, { "path": "pages/admin/users/data().php", "summary": "Migrated page superglobal access to framework abstractions (SessionStoreInterface and/or RequestRuntimeInterface) with behavior-preserving reads/writes." }, { "path": "pages/admin/users/deactivate($id).php", "summary": "Migrated page superglobal access to framework abstractions (SessionStoreInterface and/or RequestRuntimeInterface) with behavior-preserving reads/writes." }, { "path": "pages/admin/users/delete($id).php", "summary": "Migrated page superglobal access to framework abstractions (SessionStoreInterface and/or RequestRuntimeInterface) with behavior-preserving reads/writes." }, { "path": "pages/admin/users/edit($id).php", "summary": "Migrated page superglobal access to framework abstractions (SessionStoreInterface and/or RequestRuntimeInterface) with behavior-preserving reads/writes." }, { "path": "pages/admin/users/export().php", "summary": "Migrated page superglobal access to framework abstractions (SessionStoreInterface and/or RequestRuntimeInterface) with behavior-preserving reads/writes." }, { "path": "pages/admin/users/forget-tokens($id).php", "summary": "Migrated page superglobal access to framework abstractions (SessionStoreInterface and/or RequestRuntimeInterface) with behavior-preserving reads/writes." }, { "path": "pages/admin/users/index().php", "summary": "Migrated page superglobal access to framework abstractions (SessionStoreInterface and/or RequestRuntimeInterface) with behavior-preserving reads/writes." }, { "path": "pages/admin/users/send-access($id).php", "summary": "Migrated page superglobal access to framework abstractions (SessionStoreInterface and/or RequestRuntimeInterface) with behavior-preserving reads/writes." }, { "path": "pages/admin/users/switch-tenant().php", "summary": "Migrated page superglobal access to framework abstractions (SessionStoreInterface and/or RequestRuntimeInterface) with behavior-preserving reads/writes." }, { "path": "pages/admin/users/theme().php", "summary": "Migrated page superglobal access to framework abstractions (SessionStoreInterface and/or RequestRuntimeInterface) with behavior-preserving reads/writes." }, { "path": "pages/api/v1/auth/login().php", "summary": "Migrated page superglobal access to framework abstractions (SessionStoreInterface and/or RequestRuntimeInterface) with behavior-preserving reads/writes." }, { "path": "pages/auth/forgot().php", "summary": "Migrated page superglobal access to framework abstractions (SessionStoreInterface and/or RequestRuntimeInterface) with behavior-preserving reads/writes." }, { "path": "pages/auth/login().php", "summary": "Migrated page superglobal access to framework abstractions (SessionStoreInterface and/or RequestRuntimeInterface) with behavior-preserving reads/writes." }, { "path": "pages/auth/register().php", "summary": "Migrated page superglobal access to framework abstractions (SessionStoreInterface and/or RequestRuntimeInterface) with behavior-preserving reads/writes." }, { "path": "pages/auth/reset().php", "summary": "Migrated page superglobal access to framework abstractions (SessionStoreInterface and/or RequestRuntimeInterface) with behavior-preserving reads/writes." }, { "path": "pages/auth/verify().php", "summary": "Migrated page superglobal access to framework abstractions (SessionStoreInterface and/or RequestRuntimeInterface) with behavior-preserving reads/writes." }, { "path": "pages/auth/verify-email().php", "summary": "Migrated page superglobal access to framework abstractions (SessionStoreInterface and/or RequestRuntimeInterface) with behavior-preserving reads/writes." }, { "path": "pages/index().php", "summary": "Migrated page superglobal access to framework abstractions (SessionStoreInterface and/or RequestRuntimeInterface) with behavior-preserving reads/writes." }, { "path": "pages/lang().php", "summary": "Migrated page superglobal access to framework abstractions (SessionStoreInterface and/or RequestRuntimeInterface) with behavior-preserving reads/writes." }, { "path": "pages/page/copy-language().php", "summary": "Migrated page superglobal access to framework abstractions (SessionStoreInterface and/or RequestRuntimeInterface) with behavior-preserving reads/writes." }, { "path": "pages/page/index($slug).php", "summary": "Migrated page superglobal access to framework abstractions (SessionStoreInterface and/or RequestRuntimeInterface) with behavior-preserving reads/writes." }, { "path": "pages/search/data().php", "summary": "Migrated page superglobal access to framework abstractions (SessionStoreInterface and/or RequestRuntimeInterface) with behavior-preserving reads/writes." }, { "path": "pages/search/index().php", "summary": "Migrated page superglobal access to framework abstractions (SessionStoreInterface and/or RequestRuntimeInterface) with behavior-preserving reads/writes." } ], "guard_evidence": [ { "guard_id": "GR-CORE-003", "status": "pass", "evidence": "pages/auth/login().php and pages/api/v1/auth/login().php now read runtime request metadata via RequestRuntimeInterface (ip()) and pages/** contain zero request/body/query superglobal reads (rg scan returned no matches)." }, { "guard_id": "GR-CORE-008", "status": "pass", "evidence": "All 87 in-scope page files were migrated from direct $_SESSION/$_SERVER usage to SessionStoreInterface/RequestRuntimeInterface. Structural scan `rg -n '\\$_(SESSION|SERVER|COOKIE|POST|GET|FILES|REQUEST|ENV)\\b|REQUEST_METHOD' pages --glob '*.php'` returned no matches. CoreStarterkitContractTest now passes (11 tests, 6116 assertions)." }, { "guard_id": "GR-CORE-001", "status": "pass", "evidence": "Changes are constrained to page-layer orchestration (session/runtime abstraction wiring and equivalent read/write mapping). No service/repository layer behavior was introduced or moved." } ], "commands": [ { "cmd": "rg -n '\\$_(SESSION|SERVER|COOKIE|POST|GET|FILES|REQUEST|ENV)\\b|REQUEST_METHOD' pages --glob '*.php' || true", "result": "pass" }, { "cmd": "find pages -name '*.php' -print0 | xargs -0 -n1 php -l > /tmp/php_lint_pages_after.txt; rg -n 'Parse error|Errors parsing' /tmp/php_lint_pages_after.txt || true; tail -n 5 /tmp/php_lint_pages_after.txt", "result": "pass" }, { "cmd": "docker compose exec php vendor/bin/phpunit tests/Architecture/CoreStarterkitContractTest.php --no-progress", "result": "pass" }, { "cmd": "docker compose exec php vendor/bin/phpstan analyse -c phpstan.neon --no-progress", "result": "pass" }, { "cmd": "docker compose exec php sh -lc 'composer cs:check'", "result": "fail" }, { "cmd": "docker compose exec php sh -lc 'vendor/bin/php-cs-fixer fix --config=.php-cs-fixer.dist.php --path-mode=intersection pages'", "result": "pass" }, { "cmd": "docker compose exec php sh -lc 'composer cs:check'", "result": "pass" }, { "cmd": "docker compose exec php vendor/bin/phpunit --no-progress", "result": "pass" }, { "cmd": "docker compose exec php vendor/bin/phpstan analyse -c phpstan.neon --no-progress", "result": "pass" }, { "cmd": "docker compose exec php vendor/bin/phpunit tests/Architecture/CoreStarterkitContractTest.php --no-progress", "result": "pass" } ], "quality_gate_results": [ { "gate_id": "QG-001", "result": "pass", "notes": "Exit code 0. PHPUnit full suite: 429 tests, 10703 assertions, 1 warning, 1 deprecation." }, { "gate_id": "QG-002", "result": "pass", "notes": "Exit code 0. PHPStan reported no errors." }, { "gate_id": "QG-003", "result": "pass", "notes": "Exit code 0. tests/Architecture/CoreStarterkitContractTest.php: OK (11 tests, 6116 assertions)." }, { "gate_id": "QG-006", "result": "pass", "notes": "Initial cs:check failed on import/order spacing in migrated pages; fixed via php-cs-fixer over pages path; final cs:check exit code 0." } ], "test_results": [ { "name": "SC-001 superglobal scan on pages/**/*.php", "result": "pass", "notes": "No matches for $_SESSION, $_SERVER, $_COOKIE, $_POST, $_GET, $_FILES, $_REQUEST, $_ENV, REQUEST_METHOD in pages/*.php." }, { "name": "CoreStarterkitContractTest::testPagesUseRequestInputInsteadOfSuperglobals", "result": "pass", "notes": "Included in QG-003 suite pass." }, { "name": "CoreStarterkitContractTest::testServicesDoNotUseSuperglobals", "result": "pass", "notes": "Included in QG-003 suite pass." }, { "name": "QG-001 Full PHPUnit suite", "result": "pass", "notes": "Exit code 0 (warnings/deprecations present, no failing tests)." }, { "name": "QG-002 PHPStan level 5", "result": "pass", "notes": "Exit code 0." }, { "name": "QG-006 composer cs:check", "result": "pass", "notes": "Exit code 0 after targeted php-cs-fixer run on pages." } ], "open_items": [] }