Hermetic E2E harness targeting pricing integrity and backoffice config:
- e2e/ docker Postgres (5544) + prepare.sh/run.sh one-command runner + HTML report
- 6 suites / 23 tests reproducing pricing, FX, wallet, refund, config and auth
defects (see docs/ISSUES.md); docs/e2e-test-matrix.md documents the matrix
- two-tier harness (slim module boot + direct service instantiation) to work
around the IAM/RabbitMQ/file-type boot wall
- .env.test.example tracked; loader falls back to it for fresh checkouts
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Adds prismaCode and prismaMeta fields to 500 responses so the exact
Prisma error code (P2022, P2023, etc.) is visible in curl/Swagger without
needing server log access. Temporary diagnostic aid.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
The init migration created StopStatus with UPCOMING/APPROACHING/CURRENT/COMPLETED.
Migration 20260717000001 was an empty no-op file that claimed the rename was
"applied directly", but the ALTER TYPE RENAME VALUE SQL was never executed on
deployed environments. TripStopTime rows with status='UPCOMING' cause P2023
(PrismaClientKnownRequestError) on every search call that includes stopTimes.
This idempotent migration checks pg_enum before renaming so it is safe to run
whether or not the rename was previously applied.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Without WHERE ("seatId" IS NOT NULL) the index creation fails in
environments that have JourneySegment rows with NULL seatId sharing
the same (scheduleId, departureStationId), which aborts the CI/CD
pipeline before the API server restarts. Also adds the passenger.
schema prefix to match the DELETE statement above it.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>