Ghaza Phase 8 - Release Candidate Verification
Generated: 2026-10-04

SCOPE
-----
This verification records only checks actually executed in the artifact environment.
It does not claim Laravel runtime tests or dependency resolution that could not be executed.

ENVIRONMENT OBSERVED
--------------------
- PHP: 8.4.23
- Node: v22.16.0
- npm: 10.9.2
- Composer: unavailable
- MySQL client/server: unavailable
- Redis server: unavailable
- Docker: unavailable
- External package-registry access: unavailable/timed out

STATIC SOURCE GATES EXECUTED
----------------------------
PASS: scripts/verify-source.sh
- PHP files linted: 362
- PHP syntax errors: 0

PASS: scripts/verify-structure.py
- App imports checked: 177
- Missing App imports: 0
- Named routes discovered: 102
- route() references checked: 74
- Missing named routes: 0
- Literal view references checked: 50
- Missing literal views: 0
- Test files discovered: 28
- Database migrations discovered: 18

PASS: PHP syntax
- scripts/preflight.php
- app/Support/Jalali/JalaliDate.php
- app/Domain/Reporting/DTOs/ReportFilters.php
- app/Domain/Reporting/Services/ReportQueryService.php
- tests/Feature/Operational/ReportScopeTest.php
- tests/Feature/MealPlans/MealPlanCapacityReconciliationTest.php

PASS: Shell syntax
- scripts/release-gate.sh
- deploy/scripts/backup.sh
- deploy/scripts/restore.sh

PASS: JavaScript syntax (node --check)
- resources/js/app.js
- resources/js/bootstrap.js
- vite.config.js
- load-tests/reservation-spike.js

PASS: YAML parsing
- .github/workflows/ci.yml
- .github/workflows/release-candidate.yml
- deploy/docker-compose.production.example.yml

PASS: Jalali conversion smoke check
- Gregorian 2026-10-04 => Jalali 1405-07-12

PREFLIGHT EXECUTED
------------------
Expected FAIL in this artifact environment because production PHP extensions/services are not installed.
php scripts/preflight.php reported:
- PHP: 8.4.23
- Errors: 9
- Warnings: 3
Missing extensions:
  curl, dom, mbstring, xml, intl, bcmath, zip, gd, pdo_mysql
Warnings:
  redis extension unavailable
  composer.lock absent
  package-lock.json absent

The missing lockfiles are intentional until dependencies are resolved on a connected build environment and reviewed.
The release-candidate workflow and scripts/release-gate.sh fail closed when lockfiles are absent.

PHASE 8 CORRECTIONS VERIFIED STATICALLY
---------------------------------------
- Added meal-plans:reconcile-capacity command and feature tests.
- Aggregate MealPlanItem capacity is reconciled from active group offers, including the zero-active-offer case.
- Added Jalali presentation helper/Blade directives while keeping database/API date contracts Gregorian/ISO.
- Added generic consumer-code reporting filter for student numbers and employee/manager personnel codes.
- Updated ReportScopeTest from the legacy student-only reservation model to ConsumerProfile/ConsumerGroup and added employee/manager report coverage.
- Added fail-closed RC workflow, runtime preflight and connected release gate.

NOT EXECUTED / NOT CLAIMED
--------------------------
The following require Composer-installed vendor dependencies and/or MySQL/Redis/package-registry access and were NOT executed here:
- composer validate / composer install / composer update
- php artisan migrate:fresh --seed
- upgrade migration rehearsal against a Phase 6/7 database clone
- php artisan test
- MySQL multi-process concurrency tests
- PHPStan/Larastan
- Laravel Pint
- npm install / npm ci / vite production build
- Redis queue/scheduler integration
- k6 against a running staging application
- Docker image/compose runtime

AUTHORITATIVE CONNECTED GATE
----------------------------
After reviewed composer.lock and package-lock.json are committed, run:

  RUN_MYSQL_CONCURRENCY_TESTS=1 ./scripts/release-gate.sh

or use .github/workflows/release-candidate.yml with MySQL 8.4 and Redis 7.
