The suite could not pass on the test database: global setup now seeds the shared dev/Test123 login with a superuser Roles doc and the dashboard rank, and points its own Payload connection at the test database. Playwright runs one worker with generous test and expect timeouts because first navigation to a route triggers a cold webpack compile, and gains E2E_BROWSER_PATH to swap the browser binary when the installed Vivaldi crashes under automation. The landing page gains the missing h1 the guest specs assert, login flows wait for the redirect to land, strict-mode locator collisions get exact or level-scoped matches, the session banner test re-signs the login claims with a short expiry using the runtime secret, and the reservation dialog click forces the dispatch and verifies the dialog opened (the trigger goes aria-hidden behind the modal mid-click, which stranded the retry loop).
Add the create-reservation dialog and its option sources for todo 3 of
ops-reservations-and-crate-sync.
- src/lib/operations/reservationOptions.ts: server-only option pool
(listReservationOptions) returning upcoming unit-visible missions, idle
unreserved vehicles, operational structures, budget accounts (no
balances), per-origin stock, and a capped roster.
- src/components/frontend/operations/reservations/CreateReservationDialog.tsx:
client dialog with core fields, personnel/vehicle multi-picks, cargo
line repeater, budget + expiry; client pre-validation mirrors the
server validator; engine errors render verbatim.
- Mount the dialog on the reservations list page, server-gated by
operation-reservations:create + hasLogisticsQualification.
- Integration tests for the option scopes; e2e spec written (run in F3).
tsc clean; 5/5 integration tests pass.