2026-10-16T06:49:20.241Z $ git fetch --quiet origin dev (cwd /home/ubuntu/regression-runner/repos/dev/hotel-frontend-core) 2026-10-16T06:49:21.381Z -> exit 0 2026-10-16T06:49:21.381Z $ git fetch --quiet --prune origin (cwd /home/ubuntu/regression-runner/repos/dev/hotel-frontend-core) 2026-10-16T06:49:22.822Z -> exit 0 2026-10-16T06:49:22.822Z $ git diff --name-only 2edac7677d85c5cbe64b00af518cd5d749b51fd7 e48248c9d36168e7a9668634f9662d78e5b9262a (cwd /home/ubuntu/regression-runner/repos/dev/hotel-frontend-core) 2026-10-16T06:49:22.832Z e2e/PRD-2026-005-MATRIX.md 2026-10-16T06:49:22.832Z e2e/PRD-2026-007-MATRIX.md 2026-10-16T06:49:22.832Z e2e/README.md 2026-10-16T06:49:22.832Z e2e/SMOKE-PROD-MATRIX.md 2026-10-16T06:49:22.832Z e2e/fixtures/arm-api.ts 2026-10-16T06:49:22.832Z e2e/fixtures/arm-ui-w3.ts 2026-10-16T06:49:22.832Z e2e/fixtures/arm-ui-w4.ts 2026-10-16T06:49:22.832Z e2e/fixtures/auth.ts 2026-10-16T06:49:22.832Z e2e/fixtures/env.ts 2026-10-16T06:49:22.832Z e2e/fixtures/files/id-card.jpg 2026-10-16T06:49:22.832Z e2e/fixtures/hotel-session.ts 2026-10-16T06:49:22.832Z e2e/fixtures/id-per-adult.ts 2026-10-16T06:49:22.832Z e2e/fixtures/invoicing-data.ts 2026-10-16T06:49:22.832Z e2e/fixtures/w5-helpers.ts 2026-10-16T06:49:22.832Z e2e/specs/checkin-id-per-adult.spec.ts 2026-10-16T06:49:22.832Z e2e/specs/hfe-food-item-search-all-category.spec.ts 2026-10-16T06:49:22.832Z e2e/specs/prd-2026-005-active-template.spec.ts 2026-10-16T06:49:22.832Z e2e/specs/prd-2026-005-deep-verification.spec.ts 2026-10-16T06:49:22.832Z e2e/specs/prd-2026-005-invoice-editor.spec.ts 2026-10-16T06:49:22.832Z e2e/specs/prd-2026-005-mobile.spec.ts 2026-10-16T06:49:22.832Z e2e/specs/prd-2026-005-supplementary-docs.spec.ts 2026-10-16T06:49:22.832Z e2e/specs/prd-2026-007-create-reservation.spec.ts 2026-10-16T06:49:22.832Z e2e/specs/prd-2026-007-finance.spec.ts 2026-10-16T06:49:22.832Z e2e/specs/prd-2026-007-lock-move-swap.spec.ts 2026-10-16T06:49:22.832Z e2e/specs/prd-2026-007-noshow-cancel.spec.ts 2026-10-16T06:49:22.832Z e2e/specs/prd-2026-007-partial-checkin.spec.ts 2026-10-16T06:49:22.832Z e2e/specs/prd-2026-007-rbac-ux.spec.ts 2026-10-16T06:49:22.832Z e2e/specs/prd-2026-007-room-cards.spec.ts 2026-10-16T06:49:22.832Z e2e/specs/prd-2026-007-slots-multicycle.spec.ts 2026-10-16T06:49:22.832Z e2e/specs/prd-2026-007-status-aggregation.spec.ts 2026-10-16T06:49:22.832Z e2e/specs/prd-2026-007-stay-view.spec.ts 2026-10-16T06:49:22.832Z e2e/specs/prod-stay-journey.spec.ts 2026-10-16T06:49:22.833Z -> exit 0 2026-10-16T06:49:22.833Z pushed commit differs from the served one by test files only; not waiting for a deploy 2026-10-16T06:49:22.833Z commit is live on dev, queued 2026-10-16T06:49:22.833Z start test on dev (full/parallel, trigger push) 2026-10-16T06:49:22.864Z deployed: {"hotel-backend-core":"9338e28e79db480f72b45314ca85b3c9c3060df9","hotel-frontend-core":"2edac7677d85c5cbe64b00af518cd5d749b51fd7"} 2026-10-16T06:49:22.864Z $ git fetch --quiet --prune origin (cwd /home/ubuntu/regression-runner/repos/dev/hotel-backend-core) 2026-10-16T06:49:24.100Z -> exit 0 2026-10-16T06:49:24.100Z $ git cat-file -e 9338e28e79db480f72b45314ca85b3c9c3060df9^{commit} (cwd /home/ubuntu/regression-runner/repos/dev/hotel-backend-core) 2026-10-16T06:49:24.109Z -> exit 0 2026-10-16T06:49:24.109Z $ git diff --name-only 9338e28e79db480f72b45314ca85b3c9c3060df9 origin/dev (cwd /home/ubuntu/regression-runner/repos/dev/hotel-backend-core) 2026-10-16T06:49:24.119Z apps/hotel-backend/src/revenue/ai/revenue-ai.providers.ts 2026-10-16T06:49:24.119Z e2e/api/MATRIX.md 2026-10-16T06:49:24.119Z e2e/api/README.md 2026-10-16T06:49:24.119Z e2e/api/specs/channel-manager.spec.ts 2026-10-16T06:49:24.119Z e2e/api/specs/checkin-id-per-adult.spec.ts 2026-10-16T06:49:24.119Z e2e/api/support/channel-manager.ts 2026-10-16T06:49:24.119Z e2e/api/support/checkin-id.ts 2026-10-16T06:49:24.119Z e2e/api/support/fixtures/id-front.jpg 2026-10-16T06:49:24.119Z e2e/api/support/session.ts 2026-10-16T06:49:24.119Z scripts/e2e/prepare-property.mjs 2026-10-16T06:49:24.119Z -> exit 0 2026-10-16T06:49:24.119Z $ git checkout --quiet --detach 9338e28e79db480f72b45314ca85b3c9c3060df9 && git clean -fdq -e playwright-report -e .auth && git rev-parse HEAD (cwd /home/ubuntu/regression-runner/repos/dev/hotel-backend-core) 2026-10-16T06:49:24.174Z 9338e28e79db480f72b45314ca85b3c9c3060df9 2026-10-16T06:49:24.174Z -> exit 0 2026-10-16T06:49:24.174Z $ CI=1 corepack pnpm@9.15.4 install --no-frozen-lockfile --config.confirmModulesPurge=false --reporter=append-only (cwd /home/ubuntu/regression-runner/repos/dev/hotel-backend-core) 2026-10-16T06:49:24.612Z Scope: all 31 workspace projects 2026-10-16T06:49:24.796Z Lockfile is up to date, resolution step is skipped 2026-10-16T06:49:24.985Z Already up to date 2026-10-16T06:49:25.963Z . prepare$ husky 2026-10-16T06:49:26.017Z . prepare: Done 2026-10-16T06:49:26.139Z Done in 1.8s 2026-10-16T06:49:26.173Z -> exit 0 2026-10-16T06:49:26.173Z $ git fetch --quiet --prune origin (cwd /home/ubuntu/regression-runner/repos/dev/hotel-frontend-core) 2026-10-16T06:49:27.083Z -> exit 0 2026-10-16T06:49:27.083Z $ git cat-file -e 2edac7677d85c5cbe64b00af518cd5d749b51fd7^{commit} (cwd /home/ubuntu/regression-runner/repos/dev/hotel-frontend-core) 2026-10-16T06:49:27.092Z -> exit 0 2026-10-16T06:49:27.092Z $ git diff --name-only 2edac7677d85c5cbe64b00af518cd5d749b51fd7 origin/dev (cwd /home/ubuntu/regression-runner/repos/dev/hotel-frontend-core) 2026-10-16T06:49:27.101Z e2e/PRD-2026-005-MATRIX.md 2026-10-16T06:49:27.101Z e2e/PRD-2026-007-MATRIX.md 2026-10-16T06:49:27.101Z e2e/README.md 2026-10-16T06:49:27.101Z e2e/SMOKE-PROD-MATRIX.md 2026-10-16T06:49:27.101Z e2e/fixtures/arm-api.ts 2026-10-16T06:49:27.101Z e2e/fixtures/arm-ui-w3.ts 2026-10-16T06:49:27.101Z e2e/fixtures/arm-ui-w4.ts 2026-10-16T06:49:27.101Z e2e/fixtures/auth.ts 2026-10-16T06:49:27.101Z e2e/fixtures/env.ts 2026-10-16T06:49:27.101Z e2e/fixtures/files/id-card.jpg 2026-10-16T06:49:27.101Z e2e/fixtures/hotel-session.ts 2026-10-16T06:49:27.101Z e2e/fixtures/id-per-adult.ts 2026-10-16T06:49:27.101Z e2e/fixtures/invoicing-data.ts 2026-10-16T06:49:27.101Z e2e/fixtures/w5-helpers.ts 2026-10-16T06:49:27.101Z e2e/specs/checkin-id-per-adult.spec.ts 2026-10-16T06:49:27.101Z e2e/specs/hfe-food-item-search-all-category.spec.ts 2026-10-16T06:49:27.101Z e2e/specs/prd-2026-005-active-template.spec.ts 2026-10-16T06:49:27.101Z e2e/specs/prd-2026-005-deep-verification.spec.ts 2026-10-16T06:49:27.101Z e2e/specs/prd-2026-005-invoice-editor.spec.ts 2026-10-16T06:49:27.101Z e2e/specs/prd-2026-005-mobile.spec.ts 2026-10-16T06:49:27.102Z e2e/specs/prd-2026-005-supplementary-docs.spec.ts 2026-10-16T06:49:27.102Z e2e/specs/prd-2026-007-create-reservation.spec.ts 2026-10-16T06:49:27.102Z e2e/specs/prd-2026-007-finance.spec.ts 2026-10-16T06:49:27.102Z e2e/specs/prd-2026-007-lock-move-swap.spec.ts 2026-10-16T06:49:27.102Z e2e/specs/prd-2026-007-noshow-cancel.spec.ts 2026-10-16T06:49:27.102Z e2e/specs/prd-2026-007-partial-checkin.spec.ts 2026-10-16T06:49:27.102Z e2e/specs/prd-2026-007-rbac-ux.spec.ts 2026-10-16T06:49:27.102Z e2e/specs/prd-2026-007-room-cards.spec.ts 2026-10-16T06:49:27.102Z e2e/specs/prd-2026-007-slots-multicycle.spec.ts 2026-10-16T06:49:27.102Z e2e/specs/prd-2026-007-status-aggregation.spec.ts 2026-10-16T06:49:27.102Z e2e/specs/prd-2026-007-stay-view.spec.ts 2026-10-16T06:49:27.102Z e2e/specs/prod-stay-journey.spec.ts 2026-10-16T06:49:27.102Z -> exit 0 2026-10-16T06:49:27.102Z hotel-frontend-core: branch head differs from the served commit by 32 test-only file(s); testing from origin/dev 2026-10-16T06:49:27.102Z $ git checkout --quiet --detach origin/dev && git clean -fdq -e playwright-report -e .auth && git rev-parse HEAD (cwd /home/ubuntu/regression-runner/repos/dev/hotel-frontend-core) 2026-10-16T06:49:27.149Z e48248c9d36168e7a9668634f9662d78e5b9262a 2026-10-16T06:49:27.150Z -> exit 0 2026-10-16T06:49:27.150Z $ CI=1 corepack pnpm@9.15.4 install --frozen-lockfile --config.confirmModulesPurge=false --reporter=append-only (cwd /home/ubuntu/regression-runner/repos/dev/hotel-frontend-core) 2026-10-16T06:49:27.666Z Lockfile is up to date, resolution step is skipped 2026-10-16T06:49:27.818Z Already up to date 2026-10-16T06:49:28.425Z . prepare$ husky 2026-10-16T06:49:28.478Z . prepare: Done 2026-10-16T06:49:28.480Z Done in 1.2s 2026-10-16T06:49:28.504Z -> exit 0 2026-10-16T06:49:28.505Z $ corepack pnpm@9.15.4 e2e:prepare-property -- --count 8 (cwd /home/ubuntu/regression-runner/repos/dev/hotel-backend-core) 2026-10-16T06:49:28.890Z > hotel-backend-core@ e2e:prepare-property /home/ubuntu/regression-runner/repos/dev/hotel-backend-core 2026-10-16T06:49:28.890Z > node scripts/e2e/prepare-property.mjs "--" "--count" "8" 2026-10-16T06:49:31.131Z ✓ E2E Hotel 01 (b4c88cd6-2371-4049-aaaf-2158fb4b6b9e): test user has access 2026-10-16T06:49:33.320Z ✓ E2E Hotel 02 (c7396f01-f0a3-4b84-91a8-ac8b5b32c065): test user has access 2026-10-16T06:49:35.715Z ✓ E2E Hotel 03 (6cbd78a1-33c7-4a8d-b4b1-beabfe263880): test user has access 2026-10-16T06:49:37.766Z ✓ E2E Hotel 04 (d4905069-731a-4384-9cea-14f9cf362595): test user has access 2026-10-16T06:49:39.977Z ✓ E2E Hotel 05 (7d049255-56e3-421f-a309-9ad5f8eb0e22): test user has access 2026-10-16T06:49:42.369Z ✓ E2E Hotel 06 (8e43c66d-f413-41a7-ac7a-4a413d4d2632): test user has access 2026-10-16T06:49:44.698Z ✓ E2E Hotel 07 (729211be-07c8-48a4-8fc5-f28d261617f9): test user has access 2026-10-16T06:49:46.842Z ✓ E2E Hotel 08 (4f50832d-5d39-480f-a913-230148668b50): test user has access 2026-10-16T06:49:46.842Z E2E_PROPERTIES=[{"id":"b4c88cd6-2371-4049-aaaf-2158fb4b6b9e","name":"E2E Hotel 01"},{"id":"c7396f01-f0a3-4b84-91a8-ac8b5b32c065","name":"E2E Hotel 02"},{"id":"6cbd78a1-33c7-4a8d-b4b1-beabfe263880","name":"E2E Hotel 03"},{"id":"d4905069-731a-4384-9cea-14f9cf362595","name":"E2E Hotel 04"},{"id":"7d049255-56e3-421f-a309-9ad5f8eb0e22","name":"E2E Hotel 05"},{"id":"8e43c66d-f413-41a7-ac7a-4a413d4d2632","name":"E2E Hotel 06"},{"id":"729211be-07c8-48a4-8fc5-f28d261617f9","name":"E2E Hotel 07"},{"id":"4f50832d-5d39-480f-a913-230148668b50","name":"E2E Hotel 08"}] 2026-10-16T06:49:46.862Z -> exit 0 2026-10-16T06:49:46.863Z === hotel-backend-core === 2026-10-16T06:49:46.863Z $ corepack pnpm@9.15.4 e2e (cwd /home/ubuntu/regression-runner/repos/dev/hotel-backend-core) 2026-10-16T06:49:47.245Z > hotel-backend-core@ e2e /home/ubuntu/regression-runner/repos/dev/hotel-backend-core 2026-10-16T06:49:47.245Z > playwright test -c e2e/api/playwright.config.ts 2026-10-16T06:49:56.307Z Running 25 tests using 8 workers 2026-10-16T06:49:57.506Z ✓ 3 e2e/api/specs/health.spec.ts:4:7 › Backend health › TC-API-HEALTH-1 health reports database and redis up @smoke (172ms) 2026-10-16T06:49:57.989Z ✓ 6 e2e/api/specs/checkin-settings.spec.ts:17:7 › Check-in settings › TC-CHECKIN-SETTINGS-API-1 a partial PUT changes only the switch it sends and keeps the other (199ms) 2026-10-16T06:49:58.113Z ✓ 1 e2e/api/specs/checkin-settings.spec.ts:41:7 › Check-in settings › TC-CHECKIN-SETTINGS-API-2 an empty PUT is refused 400 CHECKIN_SETTINGS_EMPTY and changes nothing (106ms) 2026-10-16T06:49:58.416Z ✓ 2 e2e/api/specs/checkin-settings.spec.ts:52:7 › Check-in settings › TC-CHECKIN-SETTINGS-API-3 a non-boolean switch value is refused 400 and never coerced (398ms) 2026-10-16T06:50:08.708Z ✘ 9 e2e/api/specs/reservation-unassign.spec.ts:197:7 › Reservation unassign › TC-UNASSIGN-API-9 placing the booking back with Move closes the record PLACED (10.6s) 2026-10-16T06:50:08.813Z ✘ 10 e2e/api/specs/reservation-unassign.spec.ts:265:7 › Reservation unassign › TC-UNASSIGN-API-11 unassigning puts the freed room back on sale: its type's availability goes up by one (10.8s) 2026-10-16T06:50:20.761Z ✘ 14 e2e/api/specs/revenue-ai-actions.spec.ts:106:7 › Revenue AI action facade › TC-API-REV-ACTION-1 a committed plan replays idempotently and can be undone (4ms) 2026-10-16T06:50:20.778Z ✘ 13 e2e/api/specs/reservation-unassign.spec.ts:241:7 › Reservation unassign › TC-UNASSIGN-API-10 checking in an unassigned room is refused 400 CHECKIN_ROOM_UNASSIGNED (4ms) 2026-10-16T06:50:23.117Z ✘ 15 e2e/api/specs/revenue-ai-actions.spec.ts:176:7 › Revenue AI action facade › TC-API-REV-ACTION-2 settings revision changes reject a stale preview (42ms) 2026-10-16T06:50:23.718Z - 16 e2e/api/specs/revenue-ai-actions.spec.ts:228:7 › Revenue AI action facade › TC-API-REV-ACTION-3 a plan cannot be read through another property scope 2026-10-16T06:50:23.754Z ✓ 18 e2e/api/specs/revenue-ai-context.spec.ts:24:5 › TC-REV-AI-CTX-1 @smoke unauthenticated Revenue AI context is rejected (18ms) 2026-10-16T06:50:23.792Z - 19 e2e/api/specs/revenue-ai-context.spec.ts:37:5 › TC-REV-AI-CTX-2 @smoke authenticated context and settings expose complete defaults 2026-10-16T06:50:23.825Z - 20 e2e/api/specs/revenue-ai-context.spec.ts:100:5 › TC-REV-AI-CTX-3 @smoke invalid factor weight and monthly budget are rejected 2026-10-16T06:50:24.187Z ✘ 21 e2e/api/specs/revenue-guardrails.spec.ts:43:5 › TC-REV-GUARD-API-1 public quotes omit every plan outside final-price limits (337ms) 2026-10-16T06:50:24.549Z ✘ 17 e2e/api/specs/revenue-ai-actions.spec.ts:240:7 › Revenue AI action facade › TC-API-REV-REPORT-1 forged and cross-property source jobs are rejected before enqueue (93ms) 2026-10-16T06:50:25.557Z ✓ 5 e2e/api/specs/reservation-unassign.spec.ts:163:7 › Reservation unassign › TC-UNASSIGN-API-7 a room locked for Move & Swap is refused 409 UNASSIGN_ROOM_LOCKED (27.5s) 2026-10-16T06:50:25.673Z ✓ 4 e2e/api/specs/reservation-unassign.spec.ts:36:7 › Reservation unassign › TC-UNASSIGN-API-1 with the switch off, unassign is refused 403 UNASSIGN_DISABLED and the room stays (27.6s) 2026-10-16T06:50:26.029Z ✓ 8 e2e/api/specs/reservation-unassign.spec.ts:77:7 › Reservation unassign › TC-UNASSIGN-API-3 GET /room-rearrangements/unassign/:checkInId returns the booking's record (28.0s) 2026-10-16T06:50:26.090Z ✓ 7 e2e/api/specs/reservation-unassign.spec.ts:122:7 › Reservation unassign › TC-UNASSIGN-API-5 unassigning an already unassigned room is refused 409 UNASSIGN_ALREADY_UNASSIGNED (28.0s) 2026-10-16T06:50:26.436Z ✘ 12 e2e/api/specs/reservations.spec.ts:61:7 › Reservations › TC-API-RES-2 a reservation whose check-out is before its check-in is rejected (26.7s) 2026-10-16T06:50:26.930Z - 22 e2e/api/specs/reservation-unassign.spec.ts:190:7 › Reservation unassign › TC-UNASSIGN-API-8 another hotel's booking id answers 404, never its data 2026-10-16T06:50:27.417Z ✓ 11 e2e/api/specs/reservations.spec.ts:22:7 › Reservations › TC-API-RES-1 a direct reservation is created as upcoming and can be cancelled @prod (28.9s) 2026-10-16T06:50:30.621Z ✘ 24 e2e/api/specs/reservation-unassign.spec.ts:99:7 › Reservation unassign › TC-UNASSIGN-API-4 the batch read ?checkInIds= returns the ACTIVE records of the listed bookings only (2.6s) 2026-10-16T06:50:30.793Z ✓ 25 e2e/api/specs/reservation-unassign.spec.ts:136:7 › Reservation unassign › TC-UNASSIGN-API-6 a checked-in room is refused 409 UNASSIGN_NOT_UPCOMING (2.9s) 2026-10-16T06:50:30.965Z ✓ 23 e2e/api/specs/reservation-unassign.spec.ts:51:7 › Reservation unassign › TC-UNASSIGN-API-2 with the switch on, unassign frees the room: 201 and an ACTIVE record (3.3s) 2026-10-16T06:50:30.984Z 1) e2e/api/specs/reservation-unassign.spec.ts:99:7 › Reservation unassign › TC-UNASSIGN-API-4 the batch read ?checkInIds= returns the ACTIVE records of the listed bookings only 2026-10-16T06:50:30.984Z Error: POST /reservations → 400: {"statusCode":400,"message":"One or more selected rooms are already blocked or occupied during the selected period.","timestamp":"2026-10-16T06:50:28.672Z","path":"/reservations","requestId":"5f897b86-1919-4f70-b25f-a78202d5329d"} 2026-10-16T06:50:30.984Z expect(received).toBeTruthy() 2026-10-16T06:50:30.984Z Received: false 2026-10-16T06:50:30.985Z at ../support/unassign.ts:130 2026-10-16T06:50:30.985Z 128 | res.ok(), 2026-10-16T06:50:30.985Z 129 | `POST /reservations → ${res.status()}: ${await res.text()}`, 2026-10-16T06:50:30.985Z > 130 | ).toBeTruthy(); 2026-10-16T06:50:30.985Z | ^ 2026-10-16T06:50:30.985Z 131 | const checkInId = idOf(await res.json()); 2026-10-16T06:50:30.985Z 132 | expect(checkInId, "reservation id").toBeTruthy(); 2026-10-16T06:50:30.985Z 133 | registerForCleanup(checkInId!); 2026-10-16T06:50:30.985Z at createBooking (/home/ubuntu/regression-runner/repos/dev/hotel-backend-core/e2e/api/support/unassign.ts:130:5) 2026-10-16T06:50:30.985Z at /home/ubuntu/regression-runner/repos/dev/hotel-backend-core/e2e/api/specs/reservation-unassign.spec.ts:105:22 2026-10-16T06:50:30.985Z Error Context: test-results/reservation-unassign-Reser-2eb59-of-the-listed-bookings-only/error-context.md 2026-10-16T06:50:30.985Z Error Context: test-results/reservation-unassign-Reser-2eb59-of-the-listed-bookings-only/error-context.md 2026-10-16T06:50:30.985Z 2) e2e/api/specs/reservation-unassign.spec.ts:197:7 › Reservation unassign › TC-UNASSIGN-API-9 placing the booking back with Move closes the record PLACED 2026-10-16T06:50:30.985Z Error: POST /reservations → 500: {"statusCode":500,"message":"Something went wrong, please try again later","error":"Internal Server Error","timestamp":"2026-10-16T06:50:08.651Z","path":"/reservations","requestId":"392d0dc8-cb85-4725-9ecd-409655864204"} 2026-10-16T06:50:30.985Z expect(received).toBeTruthy() 2026-10-16T06:50:30.985Z Received: false 2026-10-16T06:50:30.985Z at ../support/unassign.ts:130 2026-10-16T06:50:30.985Z 128 | res.ok(), 2026-10-16T06:50:30.985Z 129 | `POST /reservations → ${res.status()}: ${await res.text()}`, 2026-10-16T06:50:30.985Z > 130 | ).toBeTruthy(); 2026-10-16T06:50:30.985Z | ^ 2026-10-16T06:50:30.985Z 131 | const checkInId = idOf(await res.json()); 2026-10-16T06:50:30.985Z 132 | expect(checkInId, "reservation id").toBeTruthy(); 2026-10-16T06:50:30.985Z 133 | registerForCleanup(checkInId!); 2026-10-16T06:50:30.985Z at createBooking (/home/ubuntu/regression-runner/repos/dev/hotel-backend-core/e2e/api/support/unassign.ts:130:5) 2026-10-16T06:50:30.985Z at /home/ubuntu/regression-runner/repos/dev/hotel-backend-core/e2e/api/specs/reservation-unassign.spec.ts:200:21 2026-10-16T06:50:30.985Z Error Context: test-results/reservation-unassign-Reser-00246-ve-closes-the-record-PLACED/error-context.md 2026-10-16T06:50:30.985Z Error Context: test-results/reservation-unassign-Reser-00246-ve-closes-the-record-PLACED/error-context.md 2026-10-16T06:50:30.985Z 3) e2e/api/specs/reservation-unassign.spec.ts:241:7 › Reservation unassign › TC-UNASSIGN-API-10 checking in an unassigned room is refused 400 CHECKIN_ROOM_UNASSIGNED 2026-10-16T06:50:30.985Z Error: POST /auth/login → 500: {"statusCode":500,"message":"Something went wrong, please try again later","error":"Internal Server Error","timestamp":"2026-10-16T06:50:20.715Z","path":"/auth/login","requestId":"408ddc38-75d3-43e5-b341-6cbd7e6ca700"} 2026-10-16T06:50:30.985Z at ../support/session.ts:31 2026-10-16T06:50:30.985Z 29 | const res = await ctx.post(url, { data }); 2026-10-16T06:50:30.985Z 30 | if (!res.ok()) 2026-10-16T06:50:30.985Z > 31 | throw new Error( 2026-10-16T06:50:30.985Z | ^ 2026-10-16T06:50:30.985Z 32 | `POST ${url} → ${res.status()}: ${(await res.text()).slice(0, 500)}`, 2026-10-16T06:50:30.985Z 33 | ); 2026-10-16T06:50:30.985Z 34 | return (await res.json()) as T; 2026-10-16T06:50:30.985Z at postJson (/home/ubuntu/regression-runner/repos/dev/hotel-backend-core/e2e/api/support/session.ts:31:11) 2026-10-16T06:50:30.985Z at loginToHotel (/home/ubuntu/regression-runner/repos/dev/hotel-backend-core/e2e/api/support/session.ts:41:19) 2026-10-16T06:50:30.985Z at hotelApi (/home/ubuntu/regression-runner/repos/dev/hotel-backend-core/e2e/api/support/session.ts:76:17) 2026-10-16T06:50:30.986Z at Object.exports.test._test.test.extend.api.scope (/home/ubuntu/regression-runner/repos/dev/hotel-backend-core/e2e/api/support/test.ts:29:19) 2026-10-16T06:50:30.986Z Error Context: test-results/reservation-unassign-Reser-9ad40-400-CHECKIN-ROOM-UNASSIGNED/error-context.md 2026-10-16T06:50:30.986Z Error Context: test-results/reservation-unassign-Reser-9ad40-400-CHECKIN-ROOM-UNASSIGNED/error-context.md 2026-10-16T06:50:30.986Z 4) e2e/api/specs/reservation-unassign.spec.ts:265:7 › Reservation unassign › TC-UNASSIGN-API-11 unassigning puts the freed room back on sale: its type's availability goes up by one 2026-10-16T06:50:30.986Z Error: POST /reservations → 500: {"statusCode":500,"message":"Something went wrong, please try again later","error":"Internal Server Error","timestamp":"2026-10-16T06:50:08.764Z","path":"/reservations","requestId":"47a1ba71-a9a2-423e-b91b-0df9aa19796e"} 2026-10-16T06:50:30.986Z expect(received).toBeTruthy() 2026-10-16T06:50:30.986Z Received: false 2026-10-16T06:50:30.986Z at ../support/unassign.ts:130 2026-10-16T06:50:30.986Z 128 | res.ok(), 2026-10-16T06:50:30.986Z 129 | `POST /reservations → ${res.status()}: ${await res.text()}`, 2026-10-16T06:50:30.986Z > 130 | ).toBeTruthy(); 2026-10-16T06:50:30.986Z | ^ 2026-10-16T06:50:30.986Z 131 | const checkInId = idOf(await res.json()); 2026-10-16T06:50:30.986Z 132 | expect(checkInId, "reservation id").toBeTruthy(); 2026-10-16T06:50:30.986Z 133 | registerForCleanup(checkInId!); 2026-10-16T06:50:30.986Z at createBooking (/home/ubuntu/regression-runner/repos/dev/hotel-backend-core/e2e/api/support/unassign.ts:130:5) 2026-10-16T06:50:30.986Z at /home/ubuntu/regression-runner/repos/dev/hotel-backend-core/e2e/api/specs/reservation-unassign.spec.ts:268:21 2026-10-16T06:50:30.986Z Error Context: test-results/reservation-unassign-Reser-c9eb6-availability-goes-up-by-one/error-context.md 2026-10-16T06:50:30.986Z Error Context: test-results/reservation-unassign-Reser-c9eb6-availability-goes-up-by-one/error-context.md 2026-10-16T06:50:30.986Z 5) e2e/api/specs/revenue-ai-actions.spec.ts:106:7 › Revenue AI action facade › TC-API-REV-ACTION-1 a committed plan replays idempotently and can be undone 2026-10-16T06:50:30.986Z Error: POST /auth/login → 500: {"statusCode":500,"message":"Something went wrong, please try again later","error":"Internal Server Error","timestamp":"2026-10-16T06:50:20.728Z","path":"/auth/login","requestId":"d91ad5d0-8803-49f9-a58f-77a4faf3ab3e"} 2026-10-16T06:50:30.986Z at ../support/session.ts:31 2026-10-16T06:50:30.986Z 29 | const res = await ctx.post(url, { data }); 2026-10-16T06:50:30.986Z 30 | if (!res.ok()) 2026-10-16T06:50:30.986Z > 31 | throw new Error( 2026-10-16T06:50:30.986Z | ^ 2026-10-16T06:50:30.986Z 32 | `POST ${url} → ${res.status()}: ${(await res.text()).slice(0, 500)}`, 2026-10-16T06:50:30.986Z 33 | ); 2026-10-16T06:50:30.986Z 34 | return (await res.json()) as T; 2026-10-16T06:50:30.986Z at postJson (/home/ubuntu/regression-runner/repos/dev/hotel-backend-core/e2e/api/support/session.ts:31:11) 2026-10-16T06:50:30.986Z at loginToHotel (/home/ubuntu/regression-runner/repos/dev/hotel-backend-core/e2e/api/support/session.ts:41:19) 2026-10-16T06:50:30.986Z at hotelApi (/home/ubuntu/regression-runner/repos/dev/hotel-backend-core/e2e/api/support/session.ts:76:17) 2026-10-16T06:50:30.986Z at Object.exports.test._test.test.extend.api.scope (/home/ubuntu/regression-runner/repos/dev/hotel-backend-core/e2e/api/support/test.ts:29:19) 2026-10-16T06:50:30.986Z Error Context: test-results/revenue-ai-actions-Revenue-cbe5e-mpotently-and-can-be-undone/error-context.md 2026-10-16T06:50:30.986Z 6) e2e/api/specs/revenue-ai-actions.spec.ts:176:7 › Revenue AI action facade › TC-API-REV-ACTION-2 settings revision changes reject a stale preview 2026-10-16T06:50:30.986Z Error: AI settings → 403 2026-10-16T06:50:30.986Z expect(received).toBeTruthy() 2026-10-16T06:50:30.986Z Received: false 2026-10-16T06:50:30.986Z 182 | settingsRes.ok(), 2026-10-16T06:50:30.986Z 183 | `AI settings → ${settingsRes.status()}`, 2026-10-16T06:50:30.987Z > 184 | ).toBeTruthy(); 2026-10-16T06:50:30.987Z | ^ 2026-10-16T06:50:30.987Z 185 | const original = unwrap(await settingsRes.json()) as AnyRecord; 2026-10-16T06:50:30.987Z 186 | const { preview } = await previewRate(api, hotel.id); 2026-10-16T06:50:30.987Z 187 | const objective = (original.objective ?? {}) as AnyRecord; 2026-10-16T06:50:30.987Z at /home/ubuntu/regression-runner/repos/dev/hotel-backend-core/e2e/api/specs/revenue-ai-actions.spec.ts:184:7 2026-10-16T06:50:30.987Z Error Context: test-results/revenue-ai-actions-Revenue-aaa61-nges-reject-a-stale-preview/error-context.md 2026-10-16T06:50:30.987Z 7) e2e/api/specs/revenue-ai-actions.spec.ts:240:7 › Revenue AI action facade › TC-API-REV-REPORT-1 forged and cross-property source jobs are rejected before enqueue 2026-10-16T06:50:30.987Z Error: expect(received).toBe(expected) // Object.is equality 2026-10-16T06:50:30.987Z Expected: 400 2026-10-16T06:50:30.987Z Received: 403 2026-10-16T06:50:30.987Z 250 | }, 2026-10-16T06:50:30.987Z 251 | }); 2026-10-16T06:50:30.987Z > 252 | expect(foreignSourceRes.status()).toBe(400); 2026-10-16T06:50:30.987Z | ^ 2026-10-16T06:50:30.987Z 253 | expect(await foreignSourceRes.text()).toMatch(/not in this property/i); 2026-10-16T06:50:30.987Z 254 | 2026-10-16T06:50:30.987Z 255 | const missingSourceRes = await api.post(reportRunPath, { 2026-10-16T06:50:30.987Z at /home/ubuntu/regression-runner/repos/dev/hotel-backend-core/e2e/api/specs/revenue-ai-actions.spec.ts:252:39 2026-10-16T06:50:30.987Z Error Context: test-results/revenue-ai-actions-Revenue-78190-are-rejected-before-enqueue/error-context.md 2026-10-16T06:50:30.987Z 8) e2e/api/specs/revenue-guardrails.spec.ts:43:5 › TC-REV-GUARD-API-1 public quotes omit every plan outside final-price limits 2026-10-16T06:50:30.987Z Error: GET public property → 404: {"statusCode":404,"message":"Property not found for booking engine","timestamp":"2026-10-16T06:50:24.165Z","path":"/booking-engine/public/property/d4905069-731a-4384-9cea-14f9cf362595?adults=2&children=0","requestId":"4245b38f-84fe-4815-a984-949eb869199b"} 2026-10-16T06:50:30.987Z expect(received).toBeTruthy() 2026-10-16T06:50:30.987Z Received: false 2026-10-16T06:50:30.987Z 37 | response.ok(), 2026-10-16T06:50:30.987Z 38 | `${method} → ${response.status()}: ${await response.text()}`, 2026-10-16T06:50:30.987Z > 39 | ).toBeTruthy(); 2026-10-16T06:50:30.987Z | ^ 2026-10-16T06:50:30.987Z 40 | return response.json() as Promise; 2026-10-16T06:50:30.987Z 41 | } 2026-10-16T06:50:30.987Z 42 | 2026-10-16T06:50:30.987Z at successfulJson (/home/ubuntu/regression-runner/repos/dev/hotel-backend-core/e2e/api/specs/revenue-guardrails.spec.ts:39:5) 2026-10-16T06:50:30.987Z at /home/ubuntu/regression-runner/repos/dev/hotel-backend-core/e2e/api/specs/revenue-guardrails.spec.ts:51:24 2026-10-16T06:50:30.987Z Error Context: test-results/revenue-guardrails-TC-REV--ac7c6--outside-final-price-limits/error-context.md 2026-10-16T06:50:30.987Z 8 failed 2026-10-16T06:50:30.987Z e2e/api/specs/reservation-unassign.spec.ts:99:7 › Reservation unassign › TC-UNASSIGN-API-4 the batch read ?checkInIds= returns the ACTIVE records of the listed bookings only 2026-10-16T06:50:30.987Z e2e/api/specs/reservation-unassign.spec.ts:197:7 › Reservation unassign › TC-UNASSIGN-API-9 placing the booking back with Move closes the record PLACED 2026-10-16T06:50:30.987Z e2e/api/specs/reservation-unassign.spec.ts:241:7 › Reservation unassign › TC-UNASSIGN-API-10 checking in an unassigned room is refused 400 CHECKIN_ROOM_UNASSIGNED 2026-10-16T06:50:30.987Z e2e/api/specs/reservation-unassign.spec.ts:265:7 › Reservation unassign › TC-UNASSIGN-API-11 unassigning puts the freed room back on sale: its type's availability goes up by one 2026-10-16T06:50:30.987Z e2e/api/specs/revenue-ai-actions.spec.ts:106:7 › Revenue AI action facade › TC-API-REV-ACTION-1 a committed plan replays idempotently and can be undone 2026-10-16T06:50:30.987Z e2e/api/specs/revenue-ai-actions.spec.ts:176:7 › Revenue AI action facade › TC-API-REV-ACTION-2 settings revision changes reject a stale preview 2026-10-16T06:50:30.988Z e2e/api/specs/revenue-ai-actions.spec.ts:240:7 › Revenue AI action facade › TC-API-REV-REPORT-1 forged and cross-property source jobs are rejected before enqueue 2026-10-16T06:50:30.988Z e2e/api/specs/revenue-guardrails.spec.ts:43:5 › TC-REV-GUARD-API-1 public quotes omit every plan outside final-price limits 2026-10-16T06:50:30.988Z 4 skipped 2026-10-16T06:50:30.988Z 13 passed (43.1s) 2026-10-16T06:50:31.060Z  ELIFECYCLE  Command failed with exit code 1. 2026-10-16T06:50:31.082Z -> exit 1 2026-10-16T06:50:31.088Z === hotel-frontend-core === 2026-10-16T06:50:31.088Z $ corepack pnpm@9.15.4 e2e (cwd /home/ubuntu/regression-runner/repos/dev/hotel-frontend-core) 2026-10-16T06:50:31.467Z > hotel-frontend-core@0.1.0 e2e /home/ubuntu/regression-runner/repos/dev/hotel-frontend-core 2026-10-16T06:50:31.467Z > playwright test 2026-10-16T06:51:13.280Z Running 349 tests using 8 workers 2026-10-16T06:51:37.104Z ✓ 3 [chromium] › e2e/specs/prd-2026-005-bank-accounts.spec.ts:29:6 › PRD-2026-005 — Bank Accounts › TC-PRD-010 list view renders the Add button and existing rows (22.5s) 2026-10-16T06:51:37.236Z ✘ 2 [chromium] › e2e/specs/checkin-id-per-adult.spec.ts:53:6 › One ID per adult — check-in form › TC-IDPA-UI-1 the Advanced settings switch saves the rule for the hotel (11.6s) 2026-10-16T06:51:37.237Z - 10 [chromium] › e2e/specs/checkin-id-per-adult.spec.ts:70:6 › One ID per adult — check-in form › TC-IDPA-UI-2 Check-in short of IDs shows the counts and checks nothing in 2026-10-16T06:51:37.237Z - 11 [chromium] › e2e/specs/checkin-id-per-adult.spec.ts:89:6 › One ID per adult — check-in form › TC-IDPA-UI-3 "Add 1 more ID" goes back to the ID step, and with every ID in the stay checks in 2026-10-16T06:51:37.237Z - 12 [chromium] › e2e/specs/checkin-id-per-adult.spec.ts:112:6 › One ID per adult — check-in form › TC-IDPA-UI-4 a stay moved to another room mid-stay asks for its 2 adults once, not 4 2026-10-16T06:51:37.237Z - 13 [chromium] › e2e/specs/checkin-id-per-adult.spec.ts:142:6 › One ID per adult — check-in form › TC-IDPA-UI-5 a partial check-in of picked rooms is checked too 2026-10-16T06:51:37.237Z - 14 [chromium] › e2e/specs/checkin-id-per-adult.spec.ts:160:6 › One ID per adult — check-in form › TC-IDPA-UI-6 with the rule off, Check-in is not stopped for IDs 2026-10-16T06:51:37.238Z - 15 [chromium] › e2e/specs/checkin-id-per-adult.spec.ts:177:6 › One ID per adult — check-in form › TC-IDPA-UI-7 when the form did not check (rule switched on after it loaded), the backend refusal shows the same line 2026-10-16T06:51:37.238Z - 16 [chromium] › e2e/specs/checkin-id-per-adult.spec.ts:203:6 › One ID per adult — check-in form › TC-IDPA-UI-8 a slot-wise stay (one room tonight, another tomorrow) asks for its 2 adults once 2026-10-16T06:51:37.238Z - 17 [chromium] › e2e/specs/checkin-id-per-adult.spec.ts:234:6 › One ID per adult — check-in form › TC-IDPA-UI-9 a cancelled room's adults are not asked for 2026-10-16T06:51:37.238Z - 18 [chromium] › e2e/specs/checkin-id-per-adult.spec.ts:250:6 › One ID per adult — check-in form › TC-IDPA-UI-10 a partial check-in with an ID for every adult checks in only the picked room 2026-10-16T06:51:37.238Z - 19 [chromium] › e2e/specs/checkin-id-per-adult.spec.ts:275:6 › One ID per adult — check-in form › TC-IDPA-UI-11 the setting stays as saved after a reload 2026-10-16T06:51:47.843Z ✘ 1 [chromium] › e2e/specs/prd-2026-005-auto-triggers.spec.ts:8:6 › PRD-2026-005 — Auto-Triggers › TC-PRD-030/031 toggle Room Check-Out persists across reload (33.0s) 2026-10-16T06:51:47.843Z - 21 [chromium] › e2e/specs/prd-2026-005-auto-triggers.spec.ts:50:6 › PRD-2026-005 — Auto-Triggers › TC-PRD-032 toggle Restaurant Session Settle persists 2026-10-16T06:51:48.500Z ✓ 9 [chromium] › e2e/specs/prd-2026-005-bank-accounts.spec.ts:37:6 › PRD-2026-005 — Bank Accounts › TC-PRD-011 empty form keeps modal open with validation errors (11.4s) 2026-10-16T06:51:57.883Z ✘ 20 [chromium] › e2e/specs/prd-2026-005-deep-verification.spec.ts:179:6 › PRD-2026-005 — deep verification › TC-PRD-073 Invoice PDF column header reflects persisted taxMode (IGST) (0ms) 2026-10-16T06:51:59.505Z ✓ 22 [chromium] › e2e/specs/prd-2026-005-bank-accounts.spec.ts:48:6 › PRD-2026-005 — Bank Accounts › TC-PRD-012 valid form creates row and closes modal (11.0s) 2026-10-16T06:52:01.033Z ✘ 4 [chromium] › e2e/specs/prd-2026-005-deep-verification.spec.ts:130:7 › PRD-2026-005 — deep verification › TC-PRD-071/CLASSIC CLASSIC invoice PDF prints primary bank account block (1ms) 2026-10-16T06:52:01.046Z ✘ 6 [chromium] › e2e/specs/prd-2026-005-deep-verification.spec.ts:130:7 › PRD-2026-005 — deep verification › TC-PRD-071/MODERN_BW MODERN_BW invoice PDF prints primary bank account block (1ms) 2026-10-16T06:52:03.794Z ✓ 25 [chromium] › e2e/specs/prd-2026-005-bank-accounts.spec.ts:69:6 › PRD-2026-005 — Bank Accounts › TC-PRD-013/014 edit modal opens prefilled and saves UPI (4.3s) 2026-10-16T06:52:07.996Z ✓ 26 [chromium] › e2e/specs/prd-2026-005-flags-gating.spec.ts:16:6 › PRD-2026-005 — flag visibility › TC-PRD-003 Bank Accounts page renders Add button when permission granted (6.2s) 2026-10-16T06:52:08.270Z ✓ 27 [chromium] › e2e/specs/prd-2026-005-flags-gating.spec.ts:23:6 › PRD-2026-005 — flag visibility › TC-PRD-004 manage-taxes page renders HSN/SAC card when GST flag on (6.4s) 2026-10-16T06:52:08.620Z ✓ 28 [chromium] › e2e/specs/prd-2026-005-bank-accounts.spec.ts:91:6 › PRD-2026-005 — Bank Accounts › TC-PRD-015 make primary toggles the badge (4.8s) 2026-10-16T06:52:10.612Z ✓ 30 [chromium] › e2e/specs/prd-2026-005-flags-gating.spec.ts:43:6 › PRD-2026-005 — flag visibility › TC-PRD-001 propertyConfig delivers the 4 INVOICE flags (2.3s) 2026-10-16T06:52:12.659Z ✘ 8 [chromium] › e2e/specs/prd-2026-005-active-template.spec.ts:61:6 › PRD-2026-005 — Active custom template wins › TC-PRD-090 assigning a custom template makes regenerated PDF use it (4.8s) 2026-10-16T06:52:12.669Z - 33 [chromium] › e2e/specs/prd-2026-005-active-template.spec.ts:210:6 › PRD-2026-005 — Active custom template wins › TC-PRD-092 template with rect color=transparent still renders (no hex crash) 2026-10-16T06:52:12.669Z - 34 [chromium] › e2e/specs/prd-2026-005-active-template.spec.ts:325:6 › PRD-2026-005 — Active custom template wins › TC-PRD-091 template with unregistered fontName still renders (no font crash) 2026-10-16T06:52:12.669Z - 35 [chromium] › e2e/specs/prd-2026-005-active-template.spec.ts:431:6 › PRD-2026-005 — Active custom template wins › TC-PRD-093 template with empty image schemas still renders (no SOI crash) 2026-10-16T06:52:14.067Z ✘ 7 [chromium] › e2e/specs/prd-2026-005-deep-verification.spec.ts:130:7 › PRD-2026-005 — deep verification › TC-PRD-071/MODERN MODERN invoice PDF prints primary bank account block (5.3s) 2026-10-16T06:52:14.298Z ✓ 29 [chromium] › e2e/specs/prd-2026-005-flags-gating.spec.ts:30:6 › PRD-2026-005 — flag visibility › TC-PRD-005 Invoice Settings surfaces Documents sections (Templates + Bank + Auto-Create); HSN/SAC stays consolidated (6.2s) 2026-10-16T06:52:18.414Z ✓ 32 [chromium] › e2e/specs/prd-2026-005-hsn-sac.spec.ts:8:6 › PRD-2026-005 — HSN/SAC defaults › TC-PRD-020/021/022 expand → fill → save → reload preserves values (7.7s) 2026-10-16T06:52:18.871Z ✓ 31 [chromium] › e2e/specs/prd-2026-005-bank-accounts.spec.ts:108:6 › PRD-2026-005 — Bank Accounts › TC-PRD-016 delete removes row (10.2s) 2026-10-16T06:52:19.291Z ✘ 23 [chromium] › e2e/specs/prd-2026-005-deep-verification.spec.ts:239:6 › PRD-2026-005 — deep verification › TC-PRD-074 HSN/SAC card change propagates to regenerated invoice PDF (9.7s) 2026-10-16T06:52:26.410Z ✓ 37 [chromium] › e2e/specs/prd-2026-005-invoice-editor.spec.ts:33:6 › PRD-2026-005 — Invoice editor › TC-PRD-040/041 IGST switch is off by default and the header reads CGST + SGST (11.2s) 2026-10-16T06:52:27.747Z ✓ 36 [chromium] › e2e/specs/prd-2026-005-invoice-editor.spec.ts:48:6 › PRD-2026-005 — Invoice editor › TC-PRD-043 switching IGST back off returns to the default mode (13.3s) 2026-10-16T06:52:28.184Z ✓ 38 [chromium] › e2e/specs/prd-2026-005-invoice-editor.spec.ts:41:6 › PRD-2026-005 — Invoice editor › TC-PRD-042 switching IGST on changes the per-line header (11.7s) 2026-10-16T06:52:29.590Z ✓ 39 [chromium] › e2e/specs/prd-2026-005-invoice-editor.spec.ts:61:6 › PRD-2026-005 — Invoice editor › TC-PRD-046 Place of Supply input accepts a state name once IGST is on (11.1s) 2026-10-16T06:52:34.470Z ✓ 43 [chromium] › e2e/specs/prd-2026-012-pricing-rules-readiness.spec.ts:7:5 › PRD-2026-012 @smoke respects pricing access and opens current guardrail controls (6.5s) 2026-10-16T06:52:37.086Z ✓ 41 [chromium] › e2e/specs/prd-2026-005-template-builder.spec.ts:15:6 › PRD-2026-005 — Template Builder › TC-PRD-080 Templates gallery opens visual Designer for custom templates (15.7s) 2026-10-16T06:52:37.964Z ✓ 44 [chromium] › e2e/specs/prod-stay-journey.spec.ts:59:6 › Stay journey (prod-safe) › TC-PROD-001 a direct booking for tonight shows as upcoming @prod (9.0s) 2026-10-16T06:52:38.903Z ✓ 42 [chromium] › e2e/specs/prd-2026-005-template-builder.spec.ts:76:6 › PRD-2026-005 — Template Builder › TC-PRD-081 Saving from Designer hits PATCH /document-templates/:id (12.4s) 2026-10-16T06:52:40.981Z ✓ 45 [chromium] › e2e/specs/reservation-unassign-action.spec.ts:79:6 › Reservation Unassign: Unassign Room action › TC-UNASSIGN-1 Unassign Room is offered on an upcoming booking with an assigned room when the switch is on (10.4s) 2026-10-16T06:52:43.572Z ✓ 48 [chromium] › e2e/specs/prod-stay-journey.spec.ts:97:6 › Stay journey (prod-safe) › TC-PROD-002 checking the room in shows the stay as checked in @prod (5.5s) 2026-10-16T06:52:45.203Z ✓ 46 [chromium] › e2e/specs/reservation-unassign-action.spec.ts:86:6 › Reservation Unassign: Unassign Room action › TC-UNASSIGN-2 Unassign Room is not offered when the property switch is off (10.0s) 2026-10-16T06:52:45.388Z ✘ 40 [chromium] › e2e/specs/prd-2026-005-supplementary-docs.spec.ts:47:6 › PRD-2026-005 — Supplementary documents › TC-PRD-050 Generate dropdown lists all three doc types (19.1s) 2026-10-16T06:52:45.393Z - 53 [chromium] › e2e/specs/prd-2026-005-supplementary-docs.spec.ts:60:6 › PRD-2026-005 — Supplementary documents › TC-PRD-051 Credit Note (full reversal) generates 201 + PDF blob 2026-10-16T06:52:45.393Z - 54 [chromium] › e2e/specs/prd-2026-005-supplementary-docs.spec.ts:92:6 › PRD-2026-005 — Supplementary documents › TC-PRD-053 Debit Note (full) generates 201 + PDF blob 2026-10-16T06:52:45.393Z - 55 [chromium] › e2e/specs/prd-2026-005-supplementary-docs.spec.ts:114:6 › PRD-2026-005 — Supplementary documents › TC-PRD-054 Refund Voucher generates 201 + sequential RV number 2026-10-16T06:52:48.433Z ✓ 47 [chromium] › e2e/specs/reservation-unassign-action.spec.ts:93:6 › Reservation Unassign: Unassign Room action › TC-UNASSIGN-3 Unassign Room is not offered once the booking is checked in (10.3s) 2026-10-16T06:52:49.692Z ✓ 51 [chromium] › e2e/specs/prod-stay-journey.spec.ts:106:6 › Stay journey (prod-safe) › TC-PROD-004 a charge added to the stay shows on its charges screen @prod (6.1s) 2026-10-16T06:52:52.296Z ✘ 24 [chromium] › e2e/specs/prd-2026-005-deep-verification.spec.ts:297:6 › PRD-2026-005 — deep verification › TC-PRD-072 Credit Note PDF carries the issued CN number in text (40.7s) 2026-10-16T06:52:53.227Z ✓ 50 [chromium] › e2e/specs/reservation-unassign-action.spec.ts:133:6 › Reservation Unassign: Unassign Room action › TC-UNASSIGN-5 an unassigned booking is listed in the Unassigned tab with its tag (11.1s) 2026-10-16T06:52:54.011Z ✓ 49 [chromium] › e2e/specs/reservation-unassign-action.spec.ts:101:6 › Reservation Unassign: Unassign Room action › TC-UNASSIGN-4 confirming frees the room: tag "Unassigned · was Room N" and the banner appear (14.3s) 2026-10-16T06:52:55.453Z ✘ 5 [chromium] › e2e/specs/prd-2026-005-deep-verification.spec.ts:65:6 › PRD-2026-005 — deep verification › TC-PRD-070 IGST selection survives save → backend GET returns taxMode=IGST (43.4s) 2026-10-16T06:52:57.204Z ✓ 58 [chromium] › e2e/specs/prod-stay-journey.spec.ts:114:6 › Stay journey (prod-safe) › TC-PROD-005 paying the full due settles the stay @prod (7.5s) 2026-10-16T06:53:00.037Z ✓ 60 [chromium] › e2e/specs/reservation-unassign-advanced-settings.spec.ts:35:6 › Reservation Unassign: Advanced settings › TC-ADVSET-1 Advanced settings shows the settings in two groups: Reservations and Check-in (5.5s) 2026-10-16T06:53:01.310Z ✓ 52 [chromium] › e2e/specs/reservation-unassign-action.spec.ts:149:6 › Reservation Unassign: Unassign Room action › TC-UNASSIGN-6 Return to Room N puts the booking back in its room (15.0s) 2026-10-16T06:53:02.824Z ✓ 61 [chromium] › e2e/specs/reservation-unassign-advanced-settings.spec.ts:91:6 › Reservation Unassign: Advanced settings › TC-ADVSET-3 ?tab=advanced opens Advanced settings, and switching tabs keeps ?tab= in the URL (7.9s) 2026-10-16T06:53:03.261Z ✓ 59 [chromium] › e2e/specs/reservation-unassign-advanced-settings.spec.ts:63:6 › Reservation Unassign: Advanced settings › TC-ADVSET-2 Allow unassigning a room saves on flip, sends only that field, and persists after reload (8.9s) 2026-10-16T06:53:04.766Z ✓ 56 [chromium] › e2e/specs/reservation-unassign-action.spec.ts:173:6 › Reservation Unassign: Unassign Room action › TC-UNASSIGN-7 check-in is blocked with "Assign a room before checking in." (15.8s) 2026-10-16T06:53:05.472Z ✓ 62 [chromium] › e2e/specs/prod-stay-journey.spec.ts:127:6 › Stay journey (prod-safe) › TC-PROD-003 checking the room out closes the stay @prod (7.7s) 2026-10-16T06:53:06.416Z ✓ 63 [chromium] › e2e/specs/reservation-unassign-advanced-settings.spec.ts:108:6 › Reservation Unassign: Advanced settings › TC-ADVSET-4 the page is named "Reservations & Check-in" in the breadcrumb and the settings nav @smoke (6.6s) 2026-10-16T06:53:07.798Z ✓ 57 [chromium] › e2e/specs/reservation-unassign-action.spec.ts:194:6 › Reservation Unassign: Unassign Room action › TC-UNASSIGN-8 a locked room shows as a disabled tile with the reason; nothing is unassigned (18.6s) 2026-10-16T06:53:08.374Z - 67 [chromium] › e2e/specs/revenue-manager.spec.ts:50:5 › TC-RM-2 @smoke renders actual server signal settings without starting a paid run 2026-10-16T06:53:08.809Z ✘ 65 [chromium] › e2e/specs/revenue-guardrail-removal.spec.ts:23:5 › TC-REV-GUARD-1 clearing both configured limits removes the guardrail (6.5s) 2026-10-16T06:53:10.828Z ✓ 66 [chromium] › e2e/specs/revenue-manager.spec.ts:6:5 › TC-RM-1 @smoke protects Revenue Manager and retains the selected workspace tab (7.8s) 2026-10-16T06:53:11.413Z ✓ 68 [chromium] › e2e/specs/smoke-core-pages.spec.ts:23:7 › Core pages open › TC-SMOKE-001 Room View opens on the test hotel @smoke (6.6s) 2026-10-16T06:53:11.413Z ✓ 69 [chromium] › e2e/specs/smoke-core-pages.spec.ts:23:7 › Core pages open › TC-SMOKE-002 Stay View opens on the test hotel @smoke (5.8s) 2026-10-16T06:53:12.371Z ✓ 70 [chromium] › e2e/specs/smoke-core-pages.spec.ts:23:7 › Core pages open › TC-SMOKE-003 Reservations opens on the test hotel @smoke (5.9s) 2026-10-16T06:53:14.073Z ✓ 72 [chromium] › e2e/specs/smoke-core-pages.spec.ts:23:7 › Core pages open › TC-SMOKE-005 All Checkins opens on the test hotel @smoke (5.6s) 2026-10-16T06:53:14.225Z ✓ 76 [chromium] › e2e/specs/hfe-food-item-search-all-category.spec.ts:125:3 › Static code checks: no browser required › [TC-HFE-022] FoodItemEmptyState uses Text.Medium14 (no raw

or inline style) (20ms) 2026-10-16T06:53:14.292Z ✓ 77 [chromium] › e2e/specs/hfe-food-item-search-all-category.spec.ts:158:3 › Static code checks: no browser required › [TC-HFE-025] AllCategoriesGridProps includes allItems and searchQuery (no type errors) (21ms) 2026-10-16T06:53:14.384Z ✓ 71 [chromium] › e2e/specs/smoke-core-pages.spec.ts:23:7 › Core pages open › TC-SMOKE-004 Guests opens on the test hotel @smoke (6.5s) 2026-10-16T06:53:14.392Z ✓ 78 [chromium] › e2e/specs/hfe-food-item-search-all-category.spec.ts:164:3 › Static code checks: no browser required › [TC-HFE-026] CategoryItemsGrid: allItems and onToggleSearchScope props are optional (35ms) 2026-10-16T06:53:14.454Z ✓ 79 [chromium] › e2e/specs/hfe-food-item-search-all-category.spec.ts:191:3 › Static code checks: no browser required › [TC-HFE-028] allItemsDeduped useMemo deduplication logic present in CreateOrderComponent (14ms) 2026-10-16T06:53:15.461Z ✓ 81 [chromium] › e2e/specs/hfe-food-item-search-all-category.spec.ts:134:3 › Static code checks: no browser required › [TC-HFE-023] Scope toggle chip uses Tailwind classes only — no inline style or raw hex colour (58ms) 2026-10-16T06:53:16.144Z ✓ 83 [chromium] › e2e/specs/hfe-food-item-search-all-category.spec.ts:176:3 › Static code checks: no browser required › [TC-HFE-027] filterFoodItems handles empty allItems array and empty query without crashing (37ms) 2026-10-16T06:53:16.210Z - 80 [chromium] › e2e/specs/hfe-food-item-search-all-category.spec.ts:208:3 › AC-1: All tab is selected by default [AC-1] › [TC-HFE-001] All tab is selected and shows all items on first render (desktop) 2026-10-16T06:53:16.214Z ✓ 84 [chromium] › e2e/specs/hfe-food-item-search-all-category.spec.ts:149:3 › Static code checks: no browser required › [TC-HFE-024] AllCategoriesGrid category heading uses Text.Semibold14 token (12ms) 2026-10-16T06:53:16.280Z - 86 [chromium] › e2e/specs/hfe-food-item-search-all-category.spec.ts:243:3 › AC-2: Search on All tab returns cross-category results [AC-2] › [TC-HFE-004] Search on All tab returns flat results across every category 2026-10-16T06:53:16.325Z - 88 [chromium] › e2e/specs/hfe-food-item-search-all-category.spec.ts:258:3 › AC-2: Search on All tab returns cross-category results [AC-2] › [TC-HFE-006] Clearing search restores grouped-by-category layout on All tab 2026-10-16T06:53:16.410Z - 89 [chromium] › e2e/specs/hfe-food-item-search-all-category.spec.ts:270:3 › AC-3: Scope toggle chip behaviour [AC-3] › [TC-HFE-007] Search on specific category shows cross-category results by default 2026-10-16T06:53:16.444Z - 90 [chromium] › e2e/specs/hfe-food-item-search-all-category.spec.ts:281:3 › AC-3: Scope toggle chip behaviour [AC-3] › [TC-HFE-008] Clicking toggle chip scopes search to current category only 2026-10-16T06:53:16.486Z - 91 [chromium] › e2e/specs/hfe-food-item-search-all-category.spec.ts:292:3 › AC-3: Scope toggle chip behaviour [AC-3] › [TC-HFE-009] Toggle chip is NOT visible when search field is empty on a specific category tab 2026-10-16T06:53:16.536Z ✓ 74 [chromium] › e2e/specs/smoke-core-pages.spec.ts:23:7 › Core pages open › TC-SMOKE-008 Reports opens on the test hotel @smoke (5.1s) 2026-10-16T06:53:16.537Z - 92 [chromium] › e2e/specs/hfe-food-item-search-all-category.spec.ts:299:3 › AC-3: Scope toggle chip behaviour [AC-3] › [TC-HFE-010] Switching category tab resets search scope to cross-category 2026-10-16T06:53:16.600Z - 93 [chromium] › e2e/specs/hfe-food-item-search-all-category.spec.ts:322:3 › AC-4: allItemsDeduped — no duplicates in All tab [AC-4] › [TC-HFE-012] Item assigned to multiple categories is grouped once per category in All-tab search results 2026-10-16T06:53:16.600Z - 94 [chromium] › e2e/specs/hfe-food-item-search-all-category.spec.ts:333:8 › AC-4: allItemsDeduped — no duplicates in All tab [AC-4] › [TC-HFE-013] allItemsDeduped useMemo respects displayItems priority over items 2026-10-16T06:53:16.629Z - 95 [chromium] › e2e/specs/hfe-food-item-search-all-category.spec.ts:340:3 › AC-5: FoodItemEmptyState on no results [AC-5] › [TC-HFE-014] FoodItemEmptyState renders when All-tab search returns no results 2026-10-16T06:53:16.665Z ✓ 73 [chromium] › e2e/specs/smoke-core-pages.spec.ts:23:7 › Core pages open › TC-SMOKE-007 Ledger opens on the test hotel @smoke (5.8s) 2026-10-16T06:53:16.665Z - 96 [chromium] › e2e/specs/hfe-food-item-search-all-category.spec.ts:348:3 › AC-5: FoodItemEmptyState on no results [AC-5] › [TC-HFE-015] FoodItemEmptyState renders when specific-category search returns no results 2026-10-16T06:53:16.688Z - 97 [chromium] › e2e/specs/hfe-food-item-search-all-category.spec.ts:364:3 › AC-6: Empty categories show inline empty state [AC-6] › [TC-HFE-017] Empty category shows inline empty state in All-tab grouped view 2026-10-16T06:53:16.731Z - 98 [chromium] › e2e/specs/hfe-food-item-search-all-category.spec.ts:374:3 › AC-6: Empty categories show inline empty state [AC-6] › [TC-HFE-018] Clicking empty category tab in sidebar shows FoodItemEmptyState 2026-10-16T06:53:16.763Z - 99 [chromium] › e2e/specs/hfe-food-item-search-all-category.spec.ts:381:3 › AC-6: Empty categories show inline empty state [AC-6] › [TC-HFE-019] Empty category still renders its heading — old isEmpty guard removed 2026-10-16T06:53:16.794Z - 100 [chromium] › e2e/specs/hfe-food-item-search-all-category.spec.ts:391:3 › AC-7: All tab is first and unique in sidebar [AC-7] › [TC-HFE-020] All tab is first (topmost) item in sidebar 2026-10-16T06:53:16.827Z - 101 [chromium] › e2e/specs/hfe-food-item-search-all-category.spec.ts:402:3 › AC-7: All tab is first and unique in sidebar [AC-7] › [TC-HFE-021] All tab is never rendered more than once even with multiple categories 2026-10-16T06:53:16.881Z - 102 [chromium] › e2e/specs/hfe-food-item-search-all-category.spec.ts:409:3 › Regression: existing behaviours unaffected by feature merge › [TC-HFE-029] Existing category-tab item display unaffected after feature merge 2026-10-16T06:53:16.908Z - 103 [chromium] › e2e/specs/hfe-food-item-search-all-category.spec.ts:420:3 › Regression: existing behaviours unaffected by feature merge › [TC-HFE-030] SelectOptionModal still opens when item with options is clicked 2026-10-16T06:53:16.935Z - 104 [chromium] › e2e/specs/hfe-food-item-search-all-category.spec.ts:428:3 › Regression: existing behaviours unaffected by feature merge › [TC-HFE-031] Mobile OrderSummary search returns flat cross-category results (no duplication) 2026-10-16T06:53:16.958Z - 105 [chromium] › e2e/specs/hfe-food-item-search-all-category.spec.ts:440:3 › Regression: existing behaviours unaffected by feature merge › [TC-HFE-032] Mobile empty state renders on no search results in OrderSummary 2026-10-16T06:53:16.958Z - 106 [chromium] › e2e/specs/hfe-food-item-search-all-category.spec.ts:448:8 › Regression: existing behaviours unaffected by feature merge › [TC-HFE-033] clearItems() resets selectedCategory to 'all' and clears searchQuery 2026-10-16T06:53:16.989Z - 107 [chromium] › e2e/specs/hfe-food-item-search-all-category.spec.ts:453:3 › Regression: existing behaviours unaffected by feature merge › [TC-HFE-034] FoodItemCard 'Unavailable' badge still renders for unavailable items in All tab 2026-10-16T06:53:17.018Z - 108 [chromium] › e2e/specs/hfe-food-item-search-all-category.spec.ts:461:3 › Regression: existing behaviours unaffected by feature merge › [TC-HFE-035] Category 'Off' badge still renders for inactive/closed categories in sidebar 2026-10-16T06:53:17.018Z - 109 [chromium] › e2e/specs/hfe-food-item-search-all-category.spec.ts:469:8 › Performance: All-tab initial render › [TC-HFE-036] All-tab initial render with 200-item catalog completes within 2 seconds 2026-10-16T06:53:17.206Z ✓ 75 [chromium] › e2e/specs/smoke-core-pages.spec.ts:23:7 › Core pages open › TC-SMOKE-006 Invoices opens on the test hotel @smoke (4.6s) 2026-10-16T06:53:17.222Z - 82 [chromium] › e2e/specs/hfe-food-item-search-all-category.spec.ts:214:3 › AC-1: All tab is selected by default [AC-1] › [TC-HFE-002] All tab shows loading state when categories have not yet resolved 2026-10-16T06:53:17.418Z - 85 [chromium] › e2e/specs/hfe-food-item-search-all-category.spec.ts:223:3 › AC-1: All tab is selected by default [AC-1] › [TC-HFE-003] All tab default when kitchen has exactly one category 2026-10-16T06:53:17.728Z - 87 [chromium] › e2e/specs/hfe-food-item-search-all-category.spec.ts:251:3 › AC-2: Search on All tab returns cross-category results [AC-2] › [TC-HFE-005] Search on All tab with itemCode (weight-1 field) returns match 2026-10-16T06:53:18.785Z - 110 [chromium] › e2e/specs/hfe-food-item-search-all-category.spec.ts:315:3 › AC-4: allItemsDeduped — no duplicates in All tab [AC-4] › [TC-HFE-011] Item assigned to multiple categories appears exactly once per category on All tab (no search) 2026-10-16T06:53:19.116Z - 111 [chromium] › e2e/specs/hfe-food-item-search-all-category.spec.ts:356:3 › AC-5: FoodItemEmptyState on no results [AC-5] › [TC-HFE-016] Empty state uses size='lg' (320px image) not 'sm' in full-grid context 2026-10-16T06:53:30.407Z ✘ 117 [arm] › e2e/specs/prd-2026-007-lock-move-swap.spec.ts:61:6 › PRD-2026-007 — Move/Swap lock › TC-ARM-140 API: lock then unlock round-trips [lock] (1ms) 2026-10-16T06:53:30.407Z - 119 [arm] › e2e/specs/prd-2026-007-lock-move-swap.spec.ts:80:6 › PRD-2026-007 — Move/Swap lock › TC-ARM-141 API: batch lock of 3 rooms in one call [lock] 2026-10-16T06:53:30.407Z - 120 [arm] › e2e/specs/prd-2026-007-lock-move-swap.spec.ts:92:6 › PRD-2026-007 — Move/Swap lock › TC-ARM-142 API: lock survives an unrelated lifecycle op on a sibling room [lock persistence] 2026-10-16T06:53:30.407Z - 121 [arm] › e2e/specs/prd-2026-007-lock-move-swap.spec.ts:103:6 › PRD-2026-007 — Move/Swap lock › TC-ARM-143 UI: lock one room through the modal; reopening pre-selects it [lock/§6 modal] 2026-10-16T06:53:30.407Z - 122 [arm] › e2e/specs/prd-2026-007-lock-move-swap.spec.ts:121:6 › PRD-2026-007 — Move/Swap lock › TC-ARM-144 UI: Continue stays disabled with no delta from initial state [LMS modal] 2026-10-16T06:53:30.407Z - 123 [arm] › e2e/specs/prd-2026-007-lock-move-swap.spec.ts:128:6 › PRD-2026-007 — Move/Swap lock › TC-ARM-145 UI: CANCELLED/NO_SHOW rooms are not offered for locking [LMS eligibility] 2026-10-16T06:53:30.407Z - 124 [arm] › e2e/specs/prd-2026-007-lock-move-swap.spec.ts:141:6 › PRD-2026-007 — Move/Swap lock › TC-ARM-146 UI: terminal-only booking hides the Lock/Unlock entry entirely [LMS-003] 2026-10-16T06:53:30.407Z - 125 [arm] › e2e/specs/prd-2026-007-lock-move-swap.spec.ts:152:6 › PRD-2026-007 — Move/Swap lock › TC-ARM-147 UI: mixed batch (lock A, unlock B) applies both directions in one Continue [LMS modal] 2026-10-16T06:53:30.407Z - 126 [arm] › e2e/specs/prd-2026-007-lock-move-swap.spec.ts:171:6 › PRD-2026-007 — Move/Swap lock › TC-ARM-148 API: lock with a foreign roomInstanceId is rejected [tenancy] 2026-10-16T06:53:30.407Z - 127 [arm] › e2e/specs/prd-2026-007-lock-move-swap.spec.ts:185:6 › PRD-2026-007 — Move / Swap / Bulk-assign contract › TC-ARM-149 move/preview returns the price preview and changes nothing [Must 17] 2026-10-16T06:53:30.407Z - 128 [arm] › e2e/specs/prd-2026-007-lock-move-swap.spec.ts:200:6 › PRD-2026-007 — Move / Swap / Bulk-assign contract › TC-ARM-150 move commit puts the guest in the target room [Must 6] 2026-10-16T06:53:30.407Z - 129 [arm] › e2e/specs/prd-2026-007-lock-move-swap.spec.ts:213:6 › PRD-2026-007 — Move / Swap / Bulk-assign contract › TC-ARM-151 swap/preview names both rooms and a zero price delta [Must 16] 2026-10-16T06:53:30.407Z - 130 [arm] › e2e/specs/prd-2026-007-lock-move-swap.spec.ts:229:6 › PRD-2026-007 — Move / Swap / Bulk-assign contract › TC-ARM-152 swap commit exchanges the two rooms [Must 16/S-30] 2026-10-16T06:53:30.407Z - 131 [arm] › e2e/specs/prd-2026-007-lock-move-swap.spec.ts:243:6 › PRD-2026-007 — Move / Swap / Bulk-assign contract › TC-ARM-153 bulk-assign is still a 422 stub [Must 10/S-27 — not built] 2026-10-16T06:53:30.407Z - 132 [arm] › e2e/specs/prd-2026-007-lock-move-swap.spec.ts:252:6 › PRD-2026-007 — Move / Swap / Bulk-assign contract › TC-ARM-154 move and swap still enforce auth: unauthenticated move → 401 [Must 18] 2026-10-16T06:53:30.407Z - 133 [arm] › e2e/specs/prd-2026-007-lock-move-swap.spec.ts:260:6 › PRD-2026-007 — Move / Swap / Bulk-assign contract › TC-ARM-155 UI: More actions offers only Lock/Unlock Room — Move and Swap live in the Room Details edit sheet [UX] 2026-10-16T06:53:30.407Z - 134 [arm] › e2e/specs/prd-2026-007-lock-move-swap.spec.ts:279:6 › PRD-2026-007 — Move / Swap behaviour › TC-ARM-156 move shows Current → New → Price diff before confirm [S-28] 2026-10-16T06:53:30.407Z - 135 [arm] › e2e/specs/prd-2026-007-lock-move-swap.spec.ts:305:6 › PRD-2026-007 — Move / Swap behaviour › TC-ARM-157 move sets isDirty on the vacated room and recalculates finance [Must 6/S-26] 2026-10-16T06:53:30.407Z - 136 [arm] › e2e/specs/prd-2026-007-lock-move-swap.spec.ts:323:6 › PRD-2026-007 — Move / Swap behaviour › TC-ARM-158 swap exchanges two occupied rooms bidirectionally, across bookings too [S-30] 2026-10-16T06:53:30.407Z - 137 [arm] › e2e/specs/prd-2026-007-lock-move-swap.spec.ts:339:6 › PRD-2026-007 — Move / Swap behaviour › TC-ARM-159 swap moves room add-ons with each room [Must 16] 2026-10-16T06:53:30.407Z - 138 [arm] › e2e/specs/prd-2026-007-lock-move-swap.spec.ts:345:7 › PRD-2026-007 — Move / Swap behaviour › TC-ARM-160 bulk auto-allocate fills by room type without over-allocating [Must 10] — not built: bulk-assign is still a 422 stub 2026-10-16T06:53:30.407Z - 139 [arm] › e2e/specs/prd-2026-007-lock-move-swap.spec.ts:346:7 › PRD-2026-007 — Move / Swap behaviour › TC-ARM-161 bulk assignment blocks requests beyond availability up front [S-27] — not built: bulk-assign is still a 422 stub 2026-10-16T06:53:30.407Z - 140 [arm] › e2e/specs/prd-2026-007-lock-move-swap.spec.ts:348:6 › PRD-2026-007 — Move / Swap behaviour › TC-ARM-162 a Move/Swap-locked room cannot be moved; unlocking allows it [lock semantics] 2026-10-16T06:53:30.408Z - 141 [arm] › e2e/specs/prd-2026-007-lock-move-swap.spec.ts:367:6 › PRD-2026-007 — Move / Swap behaviour › TC-ARM-163 swap respects Move/Swap locks on either side [lock semantics] 2026-10-16T06:53:41.576Z ✘ 142 [arm] › e2e/specs/prd-2026-007-partial-checkin.spec.ts:87:6 › PRD-2026-007 — partial check-in › TC-ARM-070 modal selects 2 of 4 rooms and hands them to the wizard URL [Must 3/S-12] (0ms) 2026-10-16T06:53:41.576Z - 143 [arm] › e2e/specs/prd-2026-007-partial-checkin.spec.ts:102:6 › PRD-2026-007 — partial check-in › TC-ARM-071 modal lists only UPCOMING rooms — checked-in and cancelled rooms are absent [Must 3] 2026-10-16T06:53:41.577Z - 144 [arm] › e2e/specs/prd-2026-007-partial-checkin.spec.ts:115:6 › PRD-2026-007 — partial check-in › TC-ARM-072 group Select All selects every room of the type; Clear All clears [UX] 2026-10-16T06:53:41.577Z - 145 [arm] › e2e/specs/prd-2026-007-partial-checkin.spec.ts:127:6 › PRD-2026-007 — partial check-in › TC-ARM-073 Continue stays disabled with zero rooms selected [UX] 2026-10-16T06:53:41.577Z - 146 [arm] › e2e/specs/prd-2026-007-partial-checkin.spec.ts:134:6 › PRD-2026-007 — partial check-in › TC-ARM-074 closing the modal mutates nothing [S-18 analog] 2026-10-16T06:53:41.577Z - 147 [arm] › e2e/specs/prd-2026-007-partial-checkin.spec.ts:145:6 › PRD-2026-007 — partial check-in › TC-ARM-075 API: checking in a subset flips only those rooms [Must 3/S-08] 2026-10-16T06:53:41.577Z - 148 [arm] › e2e/specs/prd-2026-007-partial-checkin.spec.ts:159:6 › PRD-2026-007 — partial check-in › TC-ARM-076 API: untouched rooms keep null actualCheckInTime [audit integrity, §1] 2026-10-16T06:53:41.577Z - 149 [arm] › e2e/specs/prd-2026-007-partial-checkin.spec.ts:171:6 › PRD-2026-007 — partial check-in › TC-ARM-077 API: arrival timestamp ≈ now on checked rooms [audit-true arrival] 2026-10-16T06:53:41.577Z - 150 [arm] › e2e/specs/prd-2026-007-partial-checkin.spec.ts:182:6 › PRD-2026-007 — partial check-in › TC-ARM-078 API: explicit actualCheckInTime is honored [Must 3] 2026-10-16T06:53:41.577Z - 151 [arm] › e2e/specs/prd-2026-007-partial-checkin.spec.ts:192:6 › PRD-2026-007 — partial check-in › TC-ARM-079 staggered arrival journey: 2 then 2 — parent PARTIAL_CHECKED_IN then CHECKED_IN [S-03/S-04/§6.2] 2026-10-16T06:53:41.577Z - 152 [arm] › e2e/specs/prd-2026-007-partial-checkin.spec.ts:205:6 › PRD-2026-007 — partial check-in › TC-ARM-080 full-subset check-in (all rooms at once) lands parent CHECKED_IN [Must 3] 2026-10-16T06:53:41.577Z - 153 [arm] › e2e/specs/prd-2026-007-partial-checkin.spec.ts:214:6 › PRD-2026-007 — partial check-in › TC-ARM-081 retried check-in call is rejected and does not double-apply [S-16/S-17] 2026-10-16T06:53:41.577Z - 154 [arm] › e2e/specs/prd-2026-007-partial-checkin.spec.ts:230:6 › PRD-2026-007 — partial check-in › TC-ARM-082 one-by-one staggering over 5 rooms keeps every intermediate state exact [Must 12] 2026-10-16T06:53:41.577Z - 155 [arm] › e2e/specs/prd-2026-007-partial-checkin.spec.ts:243:6 › PRD-2026-007 — partial check-in › TC-ARM-083 check-in proceeds while a sibling room is NO_SHOW (terminal+progression mix) [CR-2] 2026-10-16T06:53:41.577Z - 156 [arm] › e2e/specs/prd-2026-007-partial-checkin.spec.ts:254:6 › PRD-2026-007 — partial check-in › TC-ARM-084 UI reflects partial state immediately after API check-in + reload [G5] 2026-10-16T06:53:41.577Z - 157 [arm] › e2e/specs/prd-2026-007-partial-checkin.spec.ts:264:7 › PRD-2026-007 — partial check-in › TC-ARM-085 reservations list pill shows the partial state [Must 12/G5] 2026-10-16T06:53:41.577Z - 158 [arm] › e2e/specs/prd-2026-007-partial-checkin.spec.ts:286:6 › PRD-2026-007 — partial check-in › TC-ARM-086 single-room booking has no partial check-in entry — plain Create check-in only [S-01 equivalence] 2026-10-16T06:53:41.577Z - 159 [arm] › e2e/specs/prd-2026-007-partial-checkin.spec.ts:296:6 › PRD-2026-007 — partial check-in › TC-ARM-087 selected chip toggles off on second click (deselect) [UX] 2026-10-16T06:53:41.577Z - 160 [arm] › e2e/specs/prd-2026-007-partial-checkin.spec.ts:306:6 › PRD-2026-007 — partial check-in › TC-ARM-088 navigating away from the wizard without confirming leaves rooms UPCOMING [S-18] 2026-10-16T06:53:41.578Z - 161 [arm] › e2e/specs/prd-2026-007-partial-checkin.spec.ts:318:6 › PRD-2026-007 — partial check-in › TC-ARM-089 fully-terminal booking offers no partial check-in entry [state gating] 2026-10-16T06:53:41.578Z - 162 [arm] › e2e/specs/prd-2026-007-partial-checkin.spec.ts:327:6 › PRD-2026-007 — partial check-in › TC-ARM-090 parent transitions live in a second context (fresh read, no cross-session staleness) [S-19-lite] 2026-10-16T06:53:41.578Z - 163 [arm] › e2e/specs/prd-2026-007-partial-checkin.spec.ts:370:5 › TC-ARM-091 §6.2 story: 4-room block, 2 arrive first, 2 later — full wizard journey [S-08/S-12] 2026-10-16T06:53:41.598Z ✘ 118 [arm] › e2e/specs/prd-2026-007-noshow-cancel.spec.ts:82:6 › PRD-2026-007 — no-show per room › TC-ARM-100 UI: single-room no-show leaves siblings untouched [Must 4/S-11/§6.3] (0ms) 2026-10-16T06:53:41.598Z - 164 [arm] › e2e/specs/prd-2026-007-noshow-cancel.spec.ts:103:6 › PRD-2026-007 — no-show per room › TC-ARM-101 UI: reason is required — CTA disabled while empty [Must 4] 2026-10-16T06:53:41.598Z - 165 [arm] › e2e/specs/prd-2026-007-noshow-cancel.spec.ts:110:6 › PRD-2026-007 — no-show per room › TC-ARM-102 UI: all-rooms no-show lands parent NO_SHOW [CR-2] 2026-10-16T06:53:41.598Z - 166 [arm] › e2e/specs/prd-2026-007-noshow-cancel.spec.ts:126:6 › PRD-2026-007 — no-show per room › TC-ARM-103 API: noShowReason and noShowMarkedAt persist on the room [Should-1 audit] 2026-10-16T06:53:41.598Z - 167 [arm] › e2e/specs/prd-2026-007-noshow-cancel.spec.ts:144:6 › PRD-2026-007 — no-show per room › TC-ARM-104 API: NO_SHOW is terminal — late guest cannot be checked into the same room [S-22/NG1] 2026-10-16T06:53:41.598Z - 168 [arm] › e2e/specs/prd-2026-007-noshow-cancel.spec.ts:154:6 › PRD-2026-007 — no-show per room › TC-ARM-105 API: second no-show on the same room is rejected, single effect [S-20 manual leg] 2026-10-16T06:53:41.598Z - 169 [arm] › e2e/specs/prd-2026-007-noshow-cancel.spec.ts:166:6 › PRD-2026-007 — no-show per room › TC-ARM-106 API: no-show requires a reason (validation) [Must 4] 2026-10-16T06:53:41.598Z - 170 [arm] › e2e/specs/prd-2026-007-noshow-cancel.spec.ts:175:6 › PRD-2026-007 — no-show per room › TC-ARM-107 UI: no-show entry absent for a CHECKED_IN-only booking [state gating] 2026-10-16T06:53:41.598Z - 171 [arm] › e2e/specs/prd-2026-007-noshow-cancel.spec.ts:188:6 › PRD-2026-007 — cancellation per room › TC-ARM-108 UI: cancel one of five rooms; the other four stay live [Must 5/S-23/§6.4] 2026-10-16T06:53:41.598Z - 172 [arm] › e2e/specs/prd-2026-007-noshow-cancel.spec.ts:215:6 › PRD-2026-007 — cancellation per room › TC-ARM-109 UI: reason AND charge are both required for cancel [Must 5] 2026-10-16T06:53:41.598Z - 173 [arm] › e2e/specs/prd-2026-007-noshow-cancel.spec.ts:226:6 › PRD-2026-007 — cancellation per room › TC-ARM-110 UI: "can't be undone" warning is shown [UX/NG1] 2026-10-16T06:53:41.598Z - 174 [arm] › e2e/specs/prd-2026-007-noshow-cancel.spec.ts:233:6 › PRD-2026-007 — cancellation per room › TC-ARM-111 API: cancel metadata persists (reason + amount) [Should-1] 2026-10-16T06:53:41.598Z - 175 [arm] › e2e/specs/prd-2026-007-noshow-cancel.spec.ts:248:6 › PRD-2026-007 — cancellation per room › TC-ARM-112 API: all-rooms cancel lands parent CANCELLED [S-05] 2026-10-16T06:53:41.599Z - 176 [arm] › e2e/specs/prd-2026-007-noshow-cancel.spec.ts:257:6 › PRD-2026-007 — cancellation per room › TC-ARM-113 API: cancelling a CHECKED_IN room is blocked with 409 [S-10/NG1] 2026-10-16T06:53:41.599Z - 177 [arm] › e2e/specs/prd-2026-007-noshow-cancel.spec.ts:268:6 › PRD-2026-007 — cancellation per room › TC-ARM-114 API: CANCELLED is terminal — no later check-in [state machine] 2026-10-16T06:53:41.599Z - 178 [arm] › e2e/specs/prd-2026-007-noshow-cancel.spec.ts:277:6 › PRD-2026-007 — cancellation per room › TC-ARM-115 API: cancel subset across two calls accumulates correctly [Must 12] 2026-10-16T06:53:41.599Z - 179 [arm] › e2e/specs/prd-2026-007-noshow-cancel.spec.ts:289:6 › PRD-2026-007 — cancellation per room › TC-ARM-116 UI: cancelled room card stays visible (grey), booking stays open [§6.4] 2026-10-16T06:53:41.599Z - 180 [arm] › e2e/specs/prd-2026-007-noshow-cancel.spec.ts:302:6 › PRD-2026-007 — scheduled cancel/no-show with withdraw window › TC-ARM-117 schedule-cancel stages the action and reports an expiry [staged ops] 2026-10-16T06:53:41.599Z - 181 [arm] › e2e/specs/prd-2026-007-noshow-cancel.spec.ts:314:6 › PRD-2026-007 — scheduled cancel/no-show with withdraw window › TC-ARM-118 GET scheduled-action reflects the staged op [staged ops] 2026-10-16T06:53:41.599Z - 182 [arm] › e2e/specs/prd-2026-007-noshow-cancel.spec.ts:326:6 › PRD-2026-007 — scheduled cancel/no-show with withdraw window › TC-ARM-119 withdraw-scheduled aborts the staged action [staged ops] 2026-10-16T06:53:41.599Z - 183 [arm] › e2e/specs/prd-2026-007-noshow-cancel.spec.ts:339:6 › PRD-2026-007 — scheduled cancel/no-show with withdraw window › TC-ARM-120 staged no-show executes after the window elapses [staged ops] 2026-10-16T06:53:41.599Z - 184 [arm] › e2e/specs/prd-2026-007-noshow-cancel.spec.ts:353:6 › PRD-2026-007 — scheduled cancel/no-show with withdraw window › TC-ARM-121 concurrent cancel + check-in race resolves to exactly one winner [S-19] 2026-10-16T06:53:41.599Z - 185 [arm] › e2e/specs/prd-2026-007-noshow-cancel.spec.ts:368:6 › PRD-2026-007 — scheduled cancel/no-show with withdraw window › TC-ARM-122 two parallel identical cancels: one wins, one 409s, state single-applied [S-20] 2026-10-16T06:53:42.932Z ✓ 115 [arm] › e2e/specs/prd-2026-007-create-reservation.spec.ts:45:6 › PRD-2026-007 — reservation creation (API semantics) › TC-ARM-200 single-room create: UPCOMING, one room instance, default slot [CR-1] (23.5s) 2026-10-16T06:53:43.682Z ✓ 186 [arm] › e2e/specs/prd-2026-007-rbac-ux.spec.ts:56:6 › PRD-2026-007 — authentication wall (Must 18) › TC-ARM-300 every ARM mutation endpoint returns 401 without a token [Must 18] (642ms) 2026-10-16T06:53:43.748Z ✓ 189 [arm] › e2e/specs/prd-2026-007-rbac-ux.spec.ts:65:6 › PRD-2026-007 — authentication wall (Must 18) › TC-ARM-301 garbage bearer token → 401 [Must 18] (37ms) 2026-10-16T06:53:43.906Z ✓ 190 [arm] › e2e/specs/prd-2026-007-rbac-ux.spec.ts:77:6 › PRD-2026-007 — authentication wall (Must 18) › TC-ARM-302 reads are also walled (checkin detail, finance, guest accounts) [Must 18] (128ms) 2026-10-16T06:53:43.910Z ✓ 116 [arm] › e2e/specs/prd-2026-007-finance.spec.ts:84:6 › PRD-2026-007 — reservation-level rollup (G6/Must 8/NG4) › TC-ARM-260 created booking exposes a reservation-level finance summary [Must 8] (23.9s) 2026-10-16T06:53:46.109Z ✘ 64 [chromium] › e2e/specs/reservation-unassign.spec.ts:8:5 › TC-UNASSIGN-MONEY-1 frees and returns a reservation room without changing its money (42.8s) 2026-10-16T06:53:48.297Z ✓ 188 [arm] › e2e/specs/prd-2026-007-create-reservation.spec.ts:56:6 › PRD-2026-007 — reservation creation (API semantics) › TC-ARM-201 multi-room (3) create: three instances sharing the default slot [Must 1/CR-1] (5.3s) 2026-10-16T06:54:01.833Z ✘ 193 [arm] › e2e/specs/prd-2026-007-slots-multicycle.spec.ts:74:6 › PRD-2026-007 — default slot guarantee (CR-1) › TC-ARM-170 new reservation is backed by exactly one slot grouping all rooms [CR-1/Must 13] (10.3s) 2026-10-16T06:54:02.615Z ✓ 112 [mobile-chromium] › e2e/specs/prd-2026-005-mobile.spec.ts:30:6 › PRD-2026-005 — mobile › TC-PRD-047 Tax Mode card visible on mobile invoice editor (44.4s) 2026-10-16T06:54:02.641Z ✓ 114 [mobile-chromium] › e2e/specs/prd-2026-005-mobile.spec.ts:43:6 › PRD-2026-005 — mobile › TC-PRD-048 IGST toggle changes selection on mobile (44.1s) 2026-10-16T06:54:02.787Z ✘ 191 [arm] › e2e/specs/prd-2026-007-rbac-ux.spec.ts:92:6 › PRD-2026-007 — full-permission UI affordances (positive RBAC) › TC-ARM-303 owner-role kebab exposes all ARM actions on an UPCOMING booking [§10] (18.1s) 2026-10-16T06:54:03.698Z ✓ 194 [arm] › e2e/specs/prd-2026-007-create-reservation.spec.ts:65:6 › PRD-2026-007 — reservation creation (API semantics) › TC-ARM-202 created rooms carry the requested physical room numbers [Must 6] (15.3s) 2026-10-16T06:54:07.165Z ✘ 192 [arm] › e2e/specs/prd-2026-007-finance.spec.ts:91:6 › PRD-2026-007 — reservation-level rollup (G6/Must 8/NG4) › TC-ARM-261 partial check-in does not change totals [G6] (17.5s) 2026-10-16T06:54:07.611Z ✓ 187 [arm] › e2e/specs/prd-2026-007-room-cards.spec.ts:86:6 › PRD-2026-007 — room cards on Booking Details › TC-ARM-040 multi-room booking renders one card per room with number, type and dates [Must 7/S-02] (23.8s) 2026-10-16T06:54:10.808Z ✓ 199 [arm] › e2e/specs/prd-2026-007-create-reservation.spec.ts:74:6 › PRD-2026-007 — reservation creation (API semantics) › TC-ARM-203 guest name persists and the booking window round-trips [data integrity] (7.1s) 2026-10-16T06:54:10.880Z ✓ 202 [arm] › e2e/specs/prd-2026-007-create-reservation.spec.ts:84:6 › PRD-2026-007 — reservation creation (API semantics) › TC-ARM-204 missing guestName → validation error [validation] (46ms) 2026-10-16T06:54:12.661Z ✓ 195 [arm] › e2e/specs/prd-2026-007-slots-multicycle.spec.ts:83:6 › PRD-2026-007 — default slot guarantee (CR-1) › TC-ARM-171 single-room booking also carries its default slot [S-01/CR-1] (9.2s) 2026-10-16T06:54:14.904Z ✘ 203 [arm] › e2e/specs/prd-2026-007-create-reservation.spec.ts:101:6 › PRD-2026-007 — reservation creation (API semantics) › TC-ARM-205 checkOut ≤ checkIn → rejected [validation] (4.0s) 2026-10-16T06:54:17.081Z ✓ 197 [arm] › e2e/specs/prd-2026-007-stay-view.spec.ts:124:6 › PRD-2026-007 — stay view blocks per room/slot › TC-ARM-230 created booking appears as a block with the guest name [stay view] (10.6s) 2026-10-16T06:54:17.992Z ✓ 198 [arm] › e2e/specs/prd-2026-007-rbac-ux.spec.ts:102:6 › PRD-2026-007 — full-permission UI affordances (positive RBAC) › TC-ARM-304 partial check-in entry visible for an in-window UPCOMING booking [§10] (11.2s) 2026-10-16T06:54:18.667Z ✓ 196 [arm] › e2e/specs/prd-2026-007-status-aggregation.spec.ts:143:7 › PRD-2026-007 — CR-2 status aggregation (API) › TC-ARM-001 all UPCOMING → UPCOMING [CR-2/S-02] (12.4s) 2026-10-16T06:54:19.451Z ✓ 200 [arm] › e2e/specs/prd-2026-007-room-cards.spec.ts:97:6 › PRD-2026-007 — room cards on Booking Details › TC-ARM-041 UPCOMING card is blue; CHECKED_IN card is red [Must 2/G5] (11.8s) 2026-10-16T06:54:23.121Z ✓ 201 [arm] › e2e/specs/prd-2026-007-finance.spec.ts:101:6 › PRD-2026-007 — reservation-level rollup (G6/Must 8/NG4) › TC-ARM-262 explicit recalculate is idempotent on totals [G6 "no unexplained delta"] (11.2s) 2026-10-16T06:54:23.154Z ✓ 205 [arm] › e2e/specs/prd-2026-007-create-reservation.spec.ts:126:6 › PRD-2026-007 — reservation creation (API semantics) › TC-ARM-206 double-booking the same physical room for the same window — pin actual behavior [Must 10/S-27 probe] (8.2s) 2026-10-16T06:54:23.926Z ✓ 211 [arm] › e2e/specs/prd-2026-007-create-reservation.spec.ts:161:6 › PRD-2026-007 — reservation creation (API semantics) › TC-ARM-207 unknown roomTypeId → rejected [validation] (748ms) 2026-10-16T06:54:23.986Z - 212 [arm] › e2e/specs/prd-2026-007-create-reservation.spec.ts:179:6 › PRD-2026-007 — reservation creation (API semantics) › TC-ARM-208 booking-level add-ons at create are accepted and priced [Must 7 add-ons] 2026-10-16T06:54:25.537Z ✓ 204 [arm] › e2e/specs/prd-2026-007-slots-multicycle.spec.ts:90:6 › PRD-2026-007 — default slot guarantee (CR-1) › TC-ARM-172 lifecycle ops do not change the slot count — status lives on the room [CR-1] (12.9s) 2026-10-16T06:54:29.162Z ✓ 206 [arm] › e2e/specs/prd-2026-007-stay-view.spec.ts:130:6 › PRD-2026-007 — stay view blocks per room/slot › TC-ARM-231 multi-room booking renders one block per room row [stay view/slots] (12.1s) 2026-10-16T06:54:29.379Z ✓ 208 [arm] › e2e/specs/prd-2026-007-status-aggregation.spec.ts:143:7 › PRD-2026-007 — CR-2 status aggregation (API) › TC-ARM-002 all CHECKED_IN → CHECKED_IN [CR-2/S-04] (10.7s) 2026-10-16T06:54:29.384Z ✓ 207 [arm] › e2e/specs/prd-2026-007-rbac-ux.spec.ts:111:6 › PRD-2026-007 — UX guarantees (§3, G5) › TC-ARM-305 room number, status color, type, plan and dates co-located — zero extra clicks [G5] (11.4s) 2026-10-16T06:54:30.155Z ✓ 213 [arm] › e2e/specs/prd-2026-007-create-reservation.spec.ts:200:6 › PRD-2026-007 — reservation creation (API semantics) › TC-ARM-209 per-room stay windows at create produce per-room card windows [Must 7] (6.1s) 2026-10-16T06:54:49.453Z ✓ 210 [arm] › e2e/specs/prd-2026-007-finance.spec.ts:111:6 › PRD-2026-007 — reservation-level rollup (G6/Must 8/NG4) › TC-ARM-263 cancelling one room updates totals consistently (recalc has run) [Must 5/G6] (26.3s) 2026-10-16T06:54:54.193Z ✘ 214 [arm] › e2e/specs/prd-2026-007-slots-multicycle.spec.ts:100:6 › PRD-2026-007 — default slot guarantee (CR-1) › TC-ARM-173 mutation response slots[] carries window + roomCount and no name/status [CR-1/S-32] (15.1s) 2026-10-16T06:54:54.567Z ✘ 113 [mobile-chromium] › e2e/specs/prd-2026-005-mobile.spec.ts:55:6 › PRD-2026-005 — mobile › TC-PRD-049 IGST save round-trip on mobile persists to DB (1.6m) 2026-10-16T06:54:55.986Z ✓ 215 [arm] › e2e/specs/prd-2026-007-stay-view.spec.ts:137:6 › PRD-2026-007 — stay view blocks per room/slot › TC-ARM-232 UPCOMING reservation block is purple family [stay view colors] (26.8s) 2026-10-16T06:55:01.415Z ✓ 217 [arm] › e2e/specs/prd-2026-007-rbac-ux.spec.ts:125:6 › PRD-2026-007 — UX guarantees (§3, G5) › TC-ARM-306 no-show flow is ≤3 interactions from booking details [§3 ≤3-click rule] (32.0s) 2026-10-16T06:55:01.755Z ✘ 209 [arm] › e2e/specs/prd-2026-007-room-cards.spec.ts:108:6 › PRD-2026-007 — room cards on Booking Details › TC-ARM-042 CHECKED_IN room near/after its checkout time shows checkout-due yellow, then overdue orange [Must 2] (22.0s) 2026-10-16T06:55:04.325Z ✓ 216 [arm] › e2e/specs/prd-2026-007-status-aggregation.spec.ts:143:7 › PRD-2026-007 — CR-2 status aggregation (API) › TC-ARM-003 all CHECKED_OUT → CHECKED_OUT (terminal close) [CR-2/CR-3] (34.9s) 2026-10-16T06:55:07.843Z ✓ 219 [arm] › e2e/specs/prd-2026-007-finance.spec.ts:127:6 › PRD-2026-007 — reservation-level rollup (G6/Must 8/NG4) › TC-ARM-264 cancellation charge lands at reservation level [NG4/S-23] (18.4s) 2026-10-16T06:55:08.715Z ✓ 218 [arm] › e2e/specs/prd-2026-007-create-reservation.spec.ts:235:6 › PRD-2026-007 — reservation creation (API semantics) › TC-ARM-210 created booking releases its rooms again after cancel [inventory release/S-23] (38.5s) 2026-10-16T06:55:11.995Z ✓ 220 [arm] › e2e/specs/prd-2026-007-slots-multicycle.spec.ts:118:6 › PRD-2026-007 — default slot guarantee (CR-1) › TC-ARM-174 default slot window equals the reservation window [CR-1] (14.7s) 2026-10-16T06:55:14.689Z ✓ 221 [arm] › e2e/specs/prd-2026-007-stay-view.spec.ts:143:6 › PRD-2026-007 — stay view blocks per room/slot › TC-ARM-233 CHECKED_IN room block is red family [stay view colors] (18.7s) 2026-10-16T06:55:18.412Z ✓ 224 [arm] › e2e/specs/prd-2026-007-status-aggregation.spec.ts:143:7 › PRD-2026-007 — CR-2 status aggregation (API) › TC-ARM-004 all CANCELLED → CANCELLED [CR-2/S-05] (14.0s) 2026-10-16T06:55:18.567Z ✓ 222 [arm] › e2e/specs/prd-2026-007-rbac-ux.spec.ts:145:6 › PRD-2026-007 — UX guarantees (§3, G5) › TC-ARM-307 state-machine violations surface as visible errors, not silent failures [S-19 family] (17.1s) 2026-10-16T06:55:19.220Z ✓ 226 [arm] › e2e/specs/prd-2026-007-create-reservation.spec.ts:249:6 › PRD-2026-007 — created reservations in the UI › TC-ARM-211 created booking appears in the reservations list with an Upcoming pill [§6.7] (10.4s) 2026-10-16T06:55:19.833Z ✓ 225 [arm] › e2e/specs/prd-2026-007-finance.spec.ts:142:6 › PRD-2026-007 — reservation-level rollup (G6/Must 8/NG4) › TC-ARM-265 intermediate room checkout leaves the other rooms' charges untouched [CR-3] (11.9s) 2026-10-16T06:55:21.902Z ✓ 223 [arm] › e2e/specs/prd-2026-007-room-cards.spec.ts:150:7 › PRD-2026-007 — room cards on Booking Details › TC-ARM-043 CANCELLED room card is grey and stays listed [Must 2] (13.8s) 2026-10-16T06:55:25.275Z ✓ 227 [arm] › e2e/specs/prd-2026-007-slots-multicycle.spec.ts:134:6 › PRD-2026-007 — multi-cycle via re-check-in (G7/OQ-6) › TC-ARM-175 re-check-in creates a NEW room instance; the source stays CHECKED_OUT [OQ-6] (13.2s) 2026-10-16T06:55:28.931Z ✓ 229 [arm] › e2e/specs/prd-2026-007-status-aggregation.spec.ts:143:7 › PRD-2026-007 — CR-2 status aggregation (API) › TC-ARM-005 all NO_SHOW → NO_SHOW [CR-2] (10.4s) 2026-10-16T06:55:29.128Z ✓ 228 [arm] › e2e/specs/prd-2026-007-stay-view.spec.ts:151:6 › PRD-2026-007 — stay view blocks per room/slot › TC-ARM-234 CHECKED_OUT room block is grey family [stay view colors] (14.4s) 2026-10-16T06:55:29.716Z ✓ 230 [arm] › e2e/specs/prd-2026-007-rbac-ux.spec.ts:168:6 › PRD-2026-007 — UX guarantees (§3, G5) › TC-ARM-308 happy-path journey emits no console errors and no 5xx [§6 quality gate] (11.1s) 2026-10-16T06:55:30.949Z ✓ 231 [arm] › e2e/specs/prd-2026-007-create-reservation.spec.ts:258:6 › PRD-2026-007 — created reservations in the UI › TC-ARM-212 multi-room created booking opens with N room cards [§6.7/Must 7] (11.7s) 2026-10-16T06:55:32.183Z ✓ 232 [arm] › e2e/specs/prd-2026-007-finance.spec.ts:154:6 › PRD-2026-007 — reservation-level rollup (G6/Must 8/NG4) › TC-ARM-266 totals stable across a full staggered journey [G6 drift check] (12.3s) 2026-10-16T06:55:34.343Z ✓ 233 [arm] › e2e/specs/prd-2026-007-room-cards.spec.ts:150:7 › PRD-2026-007 — room cards on Booking Details › TC-ARM-044 NO_SHOW room card is grey and stays listed [Must 2] (12.4s) 2026-10-16T06:55:34.991Z ✓ 234 [arm] › e2e/specs/prd-2026-007-slots-multicycle.spec.ts:145:6 › PRD-2026-007 — multi-cycle via re-check-in (G7/OQ-6) › TC-ARM-176 after re-check-in the booking has two slots with distinct windows [G7/S-31] (9.7s) 2026-10-16T06:55:38.540Z ✓ 239 [arm] › e2e/specs/prd-2026-007-finance.spec.ts:169:6 › PRD-2026-007 — charges, discounts, payments, add-ons › TC-ARM-267 add a misc charge → total rises by amount (+tax) [charges] (6.3s) 2026-10-16T06:55:40.523Z ✓ 235 [arm] › e2e/specs/prd-2026-007-status-aggregation.spec.ts:143:7 › PRD-2026-007 — CR-2 status aggregation (API) › TC-ARM-006 1 CHECKED_IN + 2 UPCOMING → PARTIAL_CHECKED_IN [CR-2/S-03] (11.5s) 2026-10-16T06:55:40.905Z ✓ 237 [arm] › e2e/specs/prd-2026-007-rbac-ux.spec.ts:188:6 › PRD-2026-007 — UX guarantees (§3, G5) › TC-ARM-309 reservations list status pills match the detail state for partial bookings [G5 consistency] (11.2s) 2026-10-16T06:55:40.905Z - 244 [arm] › e2e/specs/prd-2026-007-rbac-ux.spec.ts:212:6 › TC-ARM-310 restricted role: room check-in → 403 [S-09/Must 18] 2026-10-16T06:55:40.905Z - 245 [arm] › e2e/specs/prd-2026-007-rbac-ux.spec.ts:213:6 › TC-ARM-311 restricted role: cancel → 403 [S-09] 2026-10-16T06:55:40.905Z - 246 [arm] › e2e/specs/prd-2026-007-rbac-ux.spec.ts:214:6 › TC-ARM-312 restricted role: no-show → 403 [S-09] 2026-10-16T06:55:40.906Z - 247 [arm] › e2e/specs/prd-2026-007-rbac-ux.spec.ts:215:6 › TC-ARM-313 restricted role: lock-move-swap → 403 [Must 18] 2026-10-16T06:55:40.906Z - 248 [arm] › e2e/specs/prd-2026-007-rbac-ux.spec.ts:216:6 › TC-ARM-314 restricted role UI: lifecycle buttons absent/disabled [S-09] 2026-10-16T06:55:41.004Z ✓ 236 [arm] › e2e/specs/prd-2026-007-stay-view.spec.ts:167:6 › PRD-2026-007 — stay view blocks per room/slot › TC-ARM-235 partial state renders mixed blocks: one red, one purple, same reservation [Must 2/slots] (11.8s) 2026-10-16T06:55:41.614Z ✓ 241 [arm] › e2e/specs/prd-2026-007-slots-multicycle.spec.ts:159:6 › PRD-2026-007 — multi-cycle via re-check-in (G7/OQ-6) › TC-ARM-177 reservation does NOT close after cycle-1 checkout while cycle 2 exists [CR-3/S-31] (6.6s) 2026-10-16T06:55:42.766Z ✓ 238 [arm] › e2e/specs/prd-2026-007-create-reservation.spec.ts:268:6 › PRD-2026-007 — created reservations in the UI › TC-ARM-213 details page total reflects rooms × nightly price [finance surface] (11.8s) 2026-10-16T06:55:42.768Z - 252 [arm] › e2e/specs/prd-2026-007-create-reservation.spec.ts:348:7 › PRD-2026-007 — create reservation panel (UI) › TC-ARM-214 UI create: single-room reservation end-to-end [§6.7] 2026-10-16T06:55:42.768Z - 253 [arm] › e2e/specs/prd-2026-007-create-reservation.spec.ts:359:7 › PRD-2026-007 — create reservation panel (UI) › TC-ARM-215 UI create: multi-room with per-night rate visible [§6.7] 2026-10-16T06:55:45.077Z ✓ 240 [arm] › e2e/specs/prd-2026-007-room-cards.spec.ts:150:7 › PRD-2026-007 — room cards on Booking Details › TC-ARM-045 CHECKED_OUT room card is grey and stays listed [Must 2] (10.7s) 2026-10-16T06:55:48.185Z ✓ 242 [arm] › e2e/specs/prd-2026-007-finance.spec.ts:178:6 › PRD-2026-007 — charges, discounts, payments, add-ons › TC-ARM-268 charge scoped to a room instance still rolls up to the reservation [NG4] (9.6s) 2026-10-16T06:55:51.644Z ✓ 243 [arm] › e2e/specs/prd-2026-007-status-aggregation.spec.ts:143:7 › PRD-2026-007 — CR-2 status aggregation (API) › TC-ARM-007 4 CHECKED_IN + 1 UPCOMING → PARTIAL_CHECKED_IN [CR-2] (11.1s) 2026-10-16T06:55:52.225Z ✓ 251 [arm] › e2e/specs/prd-2026-007-slots-multicycle.spec.ts:168:6 › PRD-2026-007 — multi-cycle via re-check-in (G7/OQ-6) › TC-ARM-178 cycle 2 check-in → PARTIALLY_CHECKED_OUT; final checkout closes the reservation [CR-3] (10.6s) 2026-10-16T06:55:52.931Z ✓ 255 [arm] › e2e/specs/prd-2026-007-room-cards.spec.ts:170:6 › PRD-2026-007 — room cards on Booking Details › TC-ARM-046 status legend lists Upcoming / Checked-In / Check-Out Due / Checked-Out [Should-2] (7.8s) 2026-10-16T06:55:54.239Z ✓ 256 [arm] › e2e/specs/prd-2026-007-finance.spec.ts:190:6 › PRD-2026-007 — charges, discounts, payments, add-ons › TC-ARM-269 record a payment → due drops by the amount [payments] (6.0s) 2026-10-16T06:55:54.244Z ✓ 250 [arm] › e2e/specs/prd-2026-007-stay-view.spec.ts:180:6 › PRD-2026-007 — stay view blocks per room/slot › TC-ARM-236 cancelled room frees its row — block no longer rendered [inventory release] (13.2s) 2026-10-16T06:56:04.757Z ✘ 257 [arm] › e2e/specs/prd-2026-007-status-aggregation.spec.ts:143:7 › PRD-2026-007 — CR-2 status aggregation (API) › TC-ARM-008 1 CHECKED_OUT + 1 CHECKED_IN → PARTIALLY_CHECKED_OUT (stays open) [CR-2/CR-3/S-31] (12.9s) 2026-10-16T06:56:06.069Z - 249 [arm] › e2e/specs/prd-2026-007-rbac-ux.spec.ts:217:6 › TC-ARM-315 restricted role: checkout-with-balance strictly blocked [Must 16] 2026-10-16T06:56:08.300Z ✓ 258 [arm] › e2e/specs/prd-2026-007-slots-multicycle.spec.ts:178:6 › PRD-2026-007 — multi-cycle via re-check-in (G7/OQ-6) › TC-ARM-179 re-check-in is rejected while the source room is not CHECKED_OUT [OQ-6 guard] (16.1s) 2026-10-16T06:56:10.859Z ✓ 259 [arm] › e2e/specs/prd-2026-007-room-cards.spec.ts:181:6 › PRD-2026-007 — room cards on Booking Details › TC-ARM-047 single-room booking renders exactly one room card and no slot wording [S-01/CR-1] (17.9s) 2026-10-16T06:56:14.740Z ✘ 263 [arm] › e2e/specs/prd-2026-007-slots-multicycle.spec.ts:190:6 › PRD-2026-007 — multi-cycle via re-check-in (G7/OQ-6) › TC-ARM-180 re-check-in into a different physical room via targetRoomId [G7] (6.4s) 2026-10-16T06:56:15.467Z ✓ 262 [arm] › e2e/specs/prd-2026-007-status-aggregation.spec.ts:143:7 › PRD-2026-007 — CR-2 status aggregation (API) › TC-ARM-009 UPCOMING + CHECKED_OUT (no CHECKED_IN) → VARIED_STATUS [CR-2 else-branch] (7.7s) 2026-10-16T06:56:16.846Z ✓ 261 [arm] › e2e/specs/prd-2026-007-stay-view.spec.ts:189:6 › PRD-2026-007 — stay view blocks per room/slot › TC-ARM-237 no-show room frees its row likewise [inventory release] (22.6s) 2026-10-16T06:56:18.346Z ✘ 260 [arm] › e2e/specs/prd-2026-007-finance.spec.ts:200:6 › PRD-2026-007 — charges, discounts, payments, add-ons › TC-ARM-270 apply a flat discount → total drops accordingly [discounts] (10.5s) 2026-10-16T06:56:18.866Z ✓ 264 [arm] › e2e/specs/prd-2026-007-room-cards.spec.ts:192:6 › PRD-2026-007 — room cards on Booking Details › TC-ARM-048 per-room date range on the card matches the reservation window [Must 7] (8.0s) 2026-10-16T06:56:18.875Z - 268 [arm] › e2e/specs/prd-2026-007-room-cards.spec.ts:215:7 › PRD-2026-007 — room cards on Booking Details › TC-ARM-049 checked-in card shows actual in-time; checked-out shows in+out times [Must 7] 2026-10-16T06:56:20.173Z - 269 [arm] › e2e/specs/prd-2026-007-room-cards.spec.ts:217:6 › PRD-2026-007 — room cards on Booking Details › TC-ARM-050 >6-room booking collapses with an expand control that reveals all rooms [S-13] 2026-10-16T06:56:34.829Z ✓ 270 [arm] › e2e/specs/prd-2026-007-finance.spec.ts:211:6 › PRD-2026-007 — charges, discounts, payments, add-ons › TC-ARM-271 zero/negative charge amount is rejected [validation] (14.4s) 2026-10-16T06:56:35.806Z ✓ 266 [arm] › e2e/specs/prd-2026-007-status-aggregation.spec.ts:143:7 › PRD-2026-007 — CR-2 status aggregation (API) › TC-ARM-010 UPCOMING + CHECKED_IN + CHECKED_OUT → VARIED_STATUS [CR-2 else-branch] (20.3s) 2026-10-16T06:56:39.608Z ✓ 254 [arm] › e2e/specs/prd-2026-007-create-reservation.spec.ts:369:6 › PRD-2026-007 — create reservation panel (UI) › TC-ARM-216 UI create: availability cap blocks over-request up front [Must 10/S-27] (56.8s) 2026-10-16T06:56:39.608Z - 274 [arm] › e2e/specs/prd-2026-007-create-reservation.spec.ts:399:7 › PRD-2026-007 — create reservation panel (UI) › TC-ARM-217 UI create: error copy names the available count [S-27] 2026-10-16T06:56:39.608Z - 275 [arm] › e2e/specs/prd-2026-007-create-reservation.spec.ts:405:7 › PRD-2026-007 — create reservation panel (UI) › TC-ARM-218 UI create: double-submit guard (no duplicate booking) [S-17] 2026-10-16T06:56:40.528Z ✓ 271 [arm] › e2e/specs/prd-2026-007-room-cards.spec.ts:231:6 › PRD-2026-007 — room cards on Booking Details › TC-ARM-051 mixed-state booking shows the full mix inline — zero extra clicks [G5/S-03] (20.3s) 2026-10-16T06:56:40.756Z ✓ 272 [arm] › e2e/specs/prd-2026-007-finance.spec.ts:218:6 › PRD-2026-007 — charges, discounts, payments, add-ons › TC-ARM-272 charges on a fully terminal (all-cancelled) booking are rejected or isolated [G6 dangling-entry guard] (5.9s) 2026-10-16T06:56:40.979Z ✓ 273 [arm] › e2e/specs/prd-2026-007-status-aggregation.spec.ts:143:7 › PRD-2026-007 — CR-2 status aggregation (API) › TC-ARM-011 CANCELLED + UPCOMING → UPCOMING (collapse; deviates from PRD §6.4 prose) [CR-2 collapse/S-23] (5.1s) 2026-10-16T06:56:42.613Z ✘ 265 [arm] › e2e/specs/prd-2026-007-slots-multicycle.spec.ts:211:6 › PRD-2026-007 — multi-cycle via re-check-in (G7/OQ-6) › TC-ARM-181 multi-room re-check-in (2 rooms into the new cycle) [G7] (16.6s) 2026-10-16T06:56:43.504Z ✓ 278 [arm] › e2e/specs/prd-2026-007-finance.spec.ts:245:6 › PRD-2026-007 — guest accounts (party) under room ops › TC-ARM-273 booking carries at least one default guest account [party model] (2.7s) 2026-10-16T06:56:46.032Z ✓ 279 [arm] › e2e/specs/prd-2026-007-status-aggregation.spec.ts:143:7 › PRD-2026-007 — CR-2 status aggregation (API) › TC-ARM-012 NO_SHOW + UPCOMING → UPCOMING (collapse) [CR-2 collapse/S-11] (5.0s) 2026-10-16T06:56:46.434Z ✓ 277 [arm] › e2e/specs/prd-2026-007-room-cards.spec.ts:247:6 › PRD-2026-007 — room cards on Booking Details › TC-ARM-052 card shows the per-night price [Must 7] (5.9s) 2026-10-16T06:56:47.428Z ✓ 280 [arm] › e2e/specs/prd-2026-007-finance.spec.ts:252:6 › PRD-2026-007 — guest accounts (party) under room ops › TC-ARM-274 guest-account balances reconcile with the finance read [party vs finance] (3.9s) 2026-10-16T06:56:47.515Z ✘ 267 [arm] › e2e/specs/prd-2026-007-stay-view.spec.ts:219:6 › PRD-2026-007 — stay view blocks per room/slot › TC-ARM-238 multi-cycle reservation renders one block PER SLOT with a gap between cycles [G7/slots — the slot-correctness check] (30.6s) 2026-10-16T06:56:51.638Z ✓ 276 [arm] › e2e/specs/prd-2026-007-create-reservation.spec.ts:425:6 › PRD-2026-007 — create reservation panel (UI) › TC-ARM-219 UI create: created booking visible in stay view immediately [§6.7] (12.0s) 2026-10-16T06:56:52.981Z ✓ 282 [arm] › e2e/specs/prd-2026-007-status-aggregation.spec.ts:143:7 › PRD-2026-007 — CR-2 status aggregation (API) › TC-ARM-013 CANCELLED + CHECKED_IN → CHECKED_IN (collapse) [CR-2 collapse] (6.9s) 2026-10-16T06:56:53.725Z ✓ 283 [arm] › e2e/specs/prd-2026-007-room-cards.spec.ts:258:6 › PRD-2026-007 — room cards on Booking Details › TC-ARM-053 card shows a meal-plan label [Must 7] (7.3s) 2026-10-16T06:56:54.457Z ✘ 284 [arm] › e2e/specs/prd-2026-007-finance.spec.ts:265:6 › PRD-2026-007 — guest accounts (party) under room ops › TC-ARM-275 room checkout locks its guest account (isLocked=true) [party lock] (7.0s) 2026-10-16T06:56:54.805Z ✓ 281 [arm] › e2e/specs/prd-2026-007-slots-multicycle.spec.ts:221:6 › PRD-2026-007 — multi-cycle via re-check-in (G7/OQ-6) › TC-ARM-182 §6.8 story: 1→10 window run as two cycles in ONE reservation, zero re-creation [G7/S-31] (10.5s) 2026-10-16T06:56:57.890Z ✓ 288 [arm] › e2e/specs/prd-2026-007-finance.spec.ts:281:6 › PRD-2026-007 — guest accounts (party) under room ops › TC-ARM-276 custom guest account: create on a room, then delete at zero balance [party CRUD] (3.4s) 2026-10-16T06:56:58.619Z ✓ 286 [arm] › e2e/specs/prd-2026-007-status-aggregation.spec.ts:143:7 › PRD-2026-007 — CR-2 status aggregation (API) › TC-ARM-014 NO_SHOW + CHECKED_IN → CHECKED_IN (collapse) [CR-2 collapse] (5.6s) 2026-10-16T06:56:59.349Z ✓ 289 [arm] › e2e/specs/prd-2026-007-slots-multicycle.spec.ts:258:6 › PRD-2026-007 — multi-cycle via re-check-in (G7/OQ-6) › TC-ARM-183 slot windows of sequential cycles do not overlap [data sanity] (4.5s) 2026-10-16T06:57:01.443Z ✓ 287 [arm] › e2e/specs/prd-2026-007-room-cards.spec.ts:266:6 › PRD-2026-007 — room cards on Booking Details › TC-ARM-054 parent status chip reflects CR-2 for a mixed set [CR-2/Must 12] (7.7s) 2026-10-16T06:57:01.831Z ✓ 290 [arm] › e2e/specs/prd-2026-007-finance.spec.ts:296:6 › PRD-2026-007 — balance-at-checkout gate (Must 14/16) › TC-ARM-277 room checkout with outstanding balance: gate behavior pinned [ship-blocker risk row] (3.9s) 2026-10-16T06:57:02.871Z ✘ 285 [arm] › e2e/specs/prd-2026-007-stay-view.spec.ts:231:6 › PRD-2026-007 — stay view blocks per room/slot › TC-ARM-239 cycle-2 block sits on its own dates (not stretched across the gap) [slots] (15.3s) 2026-10-16T06:57:07.210Z ✓ 291 [arm] › e2e/specs/prd-2026-007-status-aggregation.spec.ts:143:7 › PRD-2026-007 — CR-2 status aggregation (API) › TC-ARM-015 CANCELLED + CHECKED_OUT → CHECKED_OUT (collapse) [CR-2 collapse] (8.6s) 2026-10-16T06:57:07.229Z ✓ 292 [arm] › e2e/specs/prd-2026-007-slots-multicycle.spec.ts:266:6 › PRD-2026-007 — multi-cycle via re-check-in (G7/OQ-6) › TC-ARM-184 slots in mutation response agree with slotIds on the read [consistency] (7.9s) 2026-10-16T06:57:11.353Z ✓ 294 [arm] › e2e/specs/prd-2026-007-finance.spec.ts:315:6 › PRD-2026-007 — balance-at-checkout gate (Must 14/16) › TC-ARM-278 settle then check out: succeeds and closes the room [Must 14] (9.5s) 2026-10-16T06:57:11.979Z ✓ 293 [arm] › e2e/specs/prd-2026-007-room-cards.spec.ts:278:6 › PRD-2026-007 — room cards on Booking Details › TC-ARM-055 card count equals live RoomInstance count after a cancel [consistency] (10.5s) 2026-10-16T06:57:11.979Z - 299 [arm] › e2e/specs/prd-2026-007-room-cards.spec.ts:291:7 › PRD-2026-007 — room cards on Booking Details › TC-ARM-056 booking reachable from reservations list by guest name; detail shows the cards [G5] 2026-10-16T06:57:12.097Z ✓ 295 [arm] › e2e/specs/prd-2026-007-stay-view.spec.ts:251:6 › PRD-2026-007 — stay view blocks per room/slot › TC-ARM-240 block context menu offers status-appropriate actions [stay view menu] (9.2s) 2026-10-16T06:57:12.557Z ✓ 296 [arm] › e2e/specs/prd-2026-007-status-aggregation.spec.ts:143:7 › PRD-2026-007 — CR-2 status aggregation (API) › TC-ARM-016 CANCELLED + NO_SHOW (mixed terminals only) → VARIED_STATUS [CR-2 else/S-07] (5.3s) 2026-10-16T06:57:21.592Z ✓ 300 [arm] › e2e/specs/prd-2026-007-room-cards.spec.ts:305:6 › PRD-2026-007 — room cards on Booking Details › TC-ARM-057 payment summary is reservation-level on the details page [NG4/Must 8] (9.6s) 2026-10-16T06:57:21.696Z ✓ 298 [arm] › e2e/specs/prd-2026-007-finance.spec.ts:332:6 › PRD-2026-007 — finance surfaces in the UI › TC-ARM-279 charges screen adds a charge that lands in the payment summary [charges UI] (10.2s) 2026-10-16T06:57:22.563Z ✓ 302 [arm] › e2e/specs/prd-2026-007-status-aggregation.spec.ts:143:7 › PRD-2026-007 — CR-2 status aggregation (API) › TC-ARM-017 CANCELLED + NO_SHOW + CHECKED_OUT → CHECKED_OUT (single progression state collapses) [CR-2 collapse/S-07] (10.0s) 2026-10-16T06:57:22.853Z ✓ 301 [arm] › e2e/specs/prd-2026-007-stay-view.spec.ts:262:6 › PRD-2026-007 — stay view blocks per room/slot › TC-ARM-241 block menu navigates to the booking details of that checkin [stay view → details] (10.7s) 2026-10-16T06:57:24.478Z ✘ 297 [arm] › e2e/specs/prd-2026-007-slots-multicycle.spec.ts:273:6 › PRD-2026-007 — multi-cycle via re-check-in (G7/OQ-6) › TC-ARM-185 UI: booking details after re-check-in shows the cycle-2 room card with its own window [Must 7/G5] (17.1s) 2026-10-16T06:57:39.858Z ✓ 307 [arm] › e2e/specs/prd-2026-007-slots-multicycle.spec.ts:285:6 › PRD-2026-007 — multi-cycle via re-check-in (G7/OQ-6) › TC-ARM-186 re-check-in on a closed (all-CHECKED_OUT) reservation re-opens operability [G7] (15.4s) 2026-10-16T06:57:39.951Z ✓ 305 [arm] › e2e/specs/prd-2026-007-status-aggregation.spec.ts:143:7 › PRD-2026-007 — CR-2 status aggregation (API) › TC-ARM-018 CANCELLED + UPCOMING + CHECKED_IN → PARTIAL_CHECKED_IN (terminal ignored) [CR-2] (17.4s) 2026-10-16T06:57:42.702Z ✓ 303 [arm] › e2e/specs/prd-2026-007-room-cards.spec.ts:314:6 › PRD-2026-007 — room cards on Booking Details › TC-ARM-058 details reflect fresh API state after reload (no stale card status) [G5] (21.1s) 2026-10-16T06:57:46.781Z ✓ 308 [arm] › e2e/specs/prd-2026-007-slots-multicycle.spec.ts:305:6 › PRD-2026-007 — multi-cycle via re-check-in (G7/OQ-6) › TC-ARM-187 legacy pre-ARM booking reads back with a backfilled slot [S-21 migration] (490ms) 2026-10-16T06:57:47.383Z ✓ 309 [arm] › e2e/specs/prd-2026-007-status-aggregation.spec.ts:143:7 › PRD-2026-007 — CR-2 status aggregation (API) › TC-ARM-019 NO_SHOW + CHECKED_IN + CHECKED_OUT → PARTIALLY_CHECKED_OUT (terminal ignored) [CR-2] (7.4s) 2026-10-16T06:57:48.424Z ✘ 304 [arm] › e2e/specs/prd-2026-007-finance.spec.ts:341:6 › PRD-2026-007 — finance surfaces in the UI › TC-ARM-280 guest-account screen lists the booking's accounts [party UI] (15.5s) 2026-10-16T06:57:50.672Z ✘ 306 [arm] › e2e/specs/prd-2026-007-stay-view.spec.ts:271:6 › PRD-2026-007 — stay view blocks per room/slot › TC-ARM-242 stay view reflects a mutation after reload (no stale grid) [freshness] (13.3s) 2026-10-16T06:57:50.808Z ✓ 311 [arm] › e2e/specs/prd-2026-007-status-aggregation.spec.ts:143:7 › PRD-2026-007 — CR-2 status aggregation (API) › TC-ARM-020 single room: created → UPCOMING (zero-regression) [S-01/Must 9] (3.4s) 2026-10-16T06:57:54.398Z ✓ 313 [arm] › e2e/specs/prd-2026-007-status-aggregation.spec.ts:143:7 › PRD-2026-007 — CR-2 status aggregation (API) › TC-ARM-021 single room: check-in → CHECKED_IN [S-01/Must 9] (3.6s) 2026-10-16T06:57:55.685Z ✓ 314 [arm] › e2e/specs/prd-2026-007-stay-view.spec.ts:280:6 › PRD-2026-007 — stay view blocks per room/slot › TC-ARM-243 every clean inventory room has a row in the grid [stay view completeness] (3.2s) 2026-10-16T06:57:56.891Z ✓ 312 [arm] › e2e/specs/prd-2026-007-finance.spec.ts:356:6 › PRD-2026-007 — finance surfaces in the UI › TC-ARM-281 details payment summary reflects an added charge after reload [Must 8 UI] (7.3s) 2026-10-16T06:57:59.337Z ✓ 315 [arm] › e2e/specs/prd-2026-007-status-aggregation.spec.ts:143:7 › PRD-2026-007 — CR-2 status aggregation (API) › TC-ARM-022 single room: checkout → CHECKED_OUT (closed) [S-01/CR-3] (4.9s) 2026-10-16T06:58:01.210Z ✓ 317 [arm] › e2e/specs/prd-2026-007-finance.spec.ts:422:6 › PRD-2026-007 — folios, charge moves and ledger integrity › TC-ARM-282 folio list shows the booking folio; detail opens [folio] (4.3s) 2026-10-16T06:58:04.624Z ✓ 318 [arm] › e2e/specs/prd-2026-007-status-aggregation.spec.ts:143:7 › PRD-2026-007 — CR-2 status aggregation (API) › TC-ARM-023 single room: cancel → CANCELLED [S-23] (5.3s) 2026-10-16T06:58:04.814Z ✓ 316 [arm] › e2e/specs/prd-2026-007-stay-view.spec.ts:288:6 › PRD-2026-007 — stay view blocks per room/slot › TC-ARM-244 two back-to-back bookings on one room render side by side without overlap [slot boundaries] (9.1s) 2026-10-16T06:58:07.533Z ✓ 319 [arm] › e2e/specs/prd-2026-007-finance.spec.ts:434:6 › PRD-2026-007 — folios, charge moves and ledger integrity › TC-ARM-283 link a charge to a folio; folio totals update [folio] (6.3s) 2026-10-16T06:58:07.854Z ✓ 321 [arm] › e2e/specs/prd-2026-007-stay-view.spec.ts:302:6 › PRD-2026-007 — stay view blocks per room/slot › TC-ARM-245 stay view loads without console errors or 5xx [quality gate] (3.0s) 2026-10-16T06:58:08.747Z ✓ 320 [arm] › e2e/specs/prd-2026-007-status-aggregation.spec.ts:143:7 › PRD-2026-007 — CR-2 status aggregation (API) › TC-ARM-024 single room: no-show → NO_SHOW [S-22] (4.1s) 2026-10-16T06:58:11.076Z ✓ 323 [arm] › e2e/specs/prd-2026-007-stay-view.spec.ts:314:6 › PRD-2026-007 — stay view blocks per room/slot › TC-ARM-246 stay view interactive within 3s on a warm server [soft perf, logged] (3.2s) 2026-10-16T06:58:12.181Z ✓ 322 [arm] › e2e/specs/prd-2026-007-finance.spec.ts:446:6 › PRD-2026-007 — folios, charge moves and ledger integrity › TC-ARM-284 unlink restores the unassigned pool [folio] (4.6s) 2026-10-16T06:58:13.023Z ✘ 310 [arm] › e2e/specs/prd-2026-007-room-cards.spec.ts:326:6 › PRD-2026-007 — room cards on Booking Details › TC-ARM-059 max-inventory booking renders its card list within 2s of page load [S-13] (8.1s) 2026-10-16T06:58:17.215Z ✓ 324 [arm] › e2e/specs/prd-2026-007-status-aggregation.spec.ts:143:7 › PRD-2026-007 — CR-2 status aggregation (API) › TC-ARM-025 5-room staggered full journey lands CHECKED_OUT [G2/G3] (8.5s) 2026-10-16T06:58:17.298Z ✓ 325 [arm] › e2e/specs/prd-2026-007-stay-view.spec.ts:323:6 › PRD-2026-007 — stay view blocks per room/slot › TC-ARM-247 maintenance blocks render alongside ARM blocks [regression smoke] (6.2s) 2026-10-16T06:58:17.756Z ✓ 326 [arm] › e2e/specs/prd-2026-007-finance.spec.ts:461:6 › PRD-2026-007 — folios, charge moves and ledger integrity › TC-ARM-285 folio totals reconcile with the finance read after a room cancel [G6] (5.5s) 2026-10-16T06:58:22.522Z ✓ 327 [arm] › e2e/specs/prd-2026-007-room-cards.spec.ts:338:6 › PRD-2026-007 — room cards on Booking Details › TC-ARM-060 no console errors or 5xx network responses on the details page [quality gate] (7.7s) 2026-10-16T06:58:22.600Z ✓ 330 [arm] › e2e/specs/prd-2026-007-finance.spec.ts:477:6 › PRD-2026-007 — folios, charge moves and ledger integrity › TC-ARM-286 move charges between guest accounts shifts balances, total unchanged [NG4] (4.8s) 2026-10-16T06:58:23.027Z ✓ 328 [arm] › e2e/specs/prd-2026-007-status-aggregation.spec.ts:151:7 › PRD-2026-007 — CR-2 status aggregation (API) › TC-ARM-026 cannot CANCEL a CHECKED_IN room (NG1) [S-10/NG1] (5.8s) 2026-10-16T06:58:28.283Z ✓ 333 [arm] › e2e/specs/prd-2026-007-status-aggregation.spec.ts:151:7 › PRD-2026-007 — CR-2 status aggregation (API) › TC-ARM-027 cannot NO_SHOW a CHECKED_IN room [state machine] (5.2s) 2026-10-16T06:58:28.632Z ✘ 332 [arm] › e2e/specs/prd-2026-007-finance.spec.ts:495:6 › PRD-2026-007 — folios, charge moves and ledger integrity › TC-ARM-287 locked (checked-out) account rejects charge moves [party lock] (6.0s) 2026-10-16T06:58:29.965Z ✘ 329 [arm] › e2e/specs/prd-2026-007-stay-view.spec.ts:353:6 › PRD-2026-007 — stay view blocks per room/slot › TC-ARM-248 date navigation shifts the visible window and keeps blocks aligned [stay view] (6.8s) 2026-10-16T06:58:30.106Z ✓ 331 [arm] › e2e/specs/prd-2026-007-room-cards.spec.ts:353:6 › PRD-2026-007 — room cards on Booking Details › TC-ARM-061 cancelled-room reason is not silently lost (API carries reason; UI shows terminal state) [Should-1] (7.6s) 2026-10-16T06:58:32.380Z ✓ 335 [arm] › e2e/specs/prd-2026-007-finance.spec.ts:512:6 › PRD-2026-007 — folios, charge moves and ledger integrity › TC-ARM-288 discount scoped to a guest account [discounts] (3.7s) 2026-10-16T06:58:34.555Z ✓ 334 [arm] › e2e/specs/prd-2026-007-status-aggregation.spec.ts:151:7 › PRD-2026-007 — CR-2 status aggregation (API) › TC-ARM-028 cannot CHECK_OUT an UPCOMING room [state machine] (6.3s) 2026-10-16T06:58:36.728Z ✓ 338 [arm] › e2e/specs/prd-2026-007-finance.spec.ts:526:6 › PRD-2026-007 — folios, charge moves and ledger integrity › TC-ARM-289 payment distribution strategies (EQUAL/SINGLE/MANUAL) [payments] (4.3s) 2026-10-16T06:58:37.893Z ✓ 336 [arm] › e2e/specs/prd-2026-007-room-cards.spec.ts:363:6 › PRD-2026-007 — room cards on Booking Details › TC-ARM-062 room-card layout holds at 1280×720 (chip not clipped) [UX] (7.8s) 2026-10-16T06:58:38.746Z ✓ 339 [arm] › e2e/specs/prd-2026-007-status-aggregation.spec.ts:151:7 › PRD-2026-007 — CR-2 status aggregation (API) › TC-ARM-029 cannot CHECK_IN a CANCELLED room [state machine] (4.2s) 2026-10-16T06:58:40.434Z ✘ 337 [arm] › e2e/specs/prd-2026-007-stay-view.spec.ts:378:6 › PRD-2026-007 — stay view blocks per room/slot › TC-ARM-249 block spans exactly its slot’s day-cells (per-cell boundary audit) [slots] (6.9s) 2026-10-16T06:58:41.237Z ✓ 340 [arm] › e2e/specs/prd-2026-007-finance.spec.ts:560:6 › PRD-2026-007 — folios, charge moves and ledger integrity › TC-ARM-290 invoice generation still reservation-scoped after partial ops [NG4/PRD-2026-005 seam] (4.5s) 2026-10-16T06:58:42.894Z ✓ 342 [arm] › e2e/specs/prd-2026-007-status-aggregation.spec.ts:151:7 › PRD-2026-007 — CR-2 status aggregation (API) › TC-ARM-030 cannot CHECK_IN a NO_SHOW room (late guest ⇒ new reservation) [S-22] (4.1s) 2026-10-16T06:58:47.085Z ✓ 344 [arm] › e2e/specs/prd-2026-007-status-aggregation.spec.ts:151:7 › PRD-2026-007 — CR-2 status aggregation (API) › TC-ARM-031 cannot CHECK_IN an already CHECKED_OUT room [CR-3 terminal] (4.2s) 2026-10-16T06:58:49.235Z ✓ 341 [arm] › e2e/specs/prd-2026-007-room-cards.spec.ts:378:6 › PRD-2026-007 — room cards on Booking Details › TC-ARM-063 NO_SHOW + UPCOMING mix: parent collapses to UPCOMING in UI too [CR-2 collapse] (6.9s) 2026-10-16T06:58:51.178Z ✓ 345 [arm] › e2e/specs/prd-2026-007-status-aggregation.spec.ts:151:7 › PRD-2026-007 — CR-2 status aggregation (API) › TC-ARM-032 batch is all-or-nothing: one ineligible room rejects the whole call [room-lifecycle.guards assertBatch] (4.1s) 2026-10-16T06:58:53.990Z ✓ 346 [arm] › e2e/specs/prd-2026-007-status-aggregation.spec.ts:168:6 › PRD-2026-007 — CR-2 status aggregation (API) › TC-ARM-033 double check-in of the same room: second call rejected, state stable [S-16/S-17] (2.8s) 2026-10-16T06:58:56.756Z ✓ 347 [arm] › e2e/specs/prd-2026-007-status-aggregation.spec.ts:185:6 › PRD-2026-007 — CR-2 status aggregation (API) › TC-ARM-034 check-in with empty roomInstanceIds → validation error, no mutation (2.8s) 2026-10-16T06:58:57.679Z ✓ 343 [arm] › e2e/specs/prd-2026-007-finance.spec.ts:586:6 › PRD-2026-007 — folios, charge moves and ledger integrity › TC-ARM-291 ledger entries balanced after the full §6.2 journey (no dangling entry) [G6] (6.5s) 2026-10-16T06:59:02.419Z ✓ 348 [arm] › e2e/specs/prd-2026-007-status-aggregation.spec.ts:193:6 › PRD-2026-007 — CR-2 status aggregation (API) › TC-ARM-035 check-in with a foreign roomInstanceId → 4xx, foreign booking untouched (5.7s) 2026-10-16T06:59:08.266Z ✓ 349 [arm] › e2e/specs/prd-2026-007-status-aggregation.spec.ts:202:6 › PRD-2026-007 — CR-2 status aggregation (API) › TC-ARM-036 parent status persists correctly after EVERY step of a staggered journey [CR-2] (5.8s) 2026-10-16T06:59:08.300Z 1) [chromium] › e2e/specs/checkin-id-per-adult.spec.ts:53:6 › One ID per adult — check-in form › TC-IDPA-UI-1 the Advanced settings switch saves the rule for the hotel 2026-10-16T06:59:08.300Z Error: expect(locator).toBeVisible() failed 2026-10-16T06:59:08.300Z Locator: getByTestId('checkin-settings__guest-ids').getByText('Require one ID per adult') 2026-10-16T06:59:08.301Z Expected: visible 2026-10-16T06:59:08.301Z Timeout: 10000ms 2026-10-16T06:59:08.301Z Error: element(s) not found 2026-10-16T06:59:08.301Z Call log: 2026-10-16T06:59:08.301Z  - Expect "toBeVisible" with timeout 10000ms 2026-10-16T06:59:08.301Z  - waiting for getByTestId('checkin-settings__guest-ids').getByText('Require one ID per adult') 2026-10-16T06:59:08.301Z 54 | await page.goto('/settings/checkin-form?tab=advanced'); 2026-10-16T06:59:08.301Z 55 | const guestIds = page.getByTestId('checkin-settings__guest-ids'); 2026-10-16T06:59:08.301Z > 56 | await expect(guestIds.getByText('Require one ID per adult')).toBeVisible(); 2026-10-16T06:59:08.301Z | ^ 2026-10-16T06:59:08.301Z 57 | const toggle = page.getByTestId('checkin-settings__require-id-switch'); 2026-10-16T06:59:08.301Z 58 | await expect(toggle).toHaveAttribute('aria-checked', 'true'); 2026-10-16T06:59:08.301Z 59 | 2026-10-16T06:59:08.301Z at /home/ubuntu/regression-runner/repos/dev/hotel-frontend-core/e2e/specs/checkin-id-per-adult.spec.ts:56:64 2026-10-16T06:59:08.301Z attachment #1: screenshot (image/png) ────────────────────────────────────────────────────────── 2026-10-16T06:59:08.301Z test-results/checkin-id-per-adult-One-I-930a1-aves-the-rule-for-the-hotel-chromium/test-failed-1.png 2026-10-16T06:59:08.301Z ──────────────────────────────────────────────────────────────────────────────────────────────── 2026-10-16T06:59:08.301Z Error Context: test-results/checkin-id-per-adult-One-I-930a1-aves-the-rule-for-the-hotel-chromium/error-context.md 2026-10-16T06:59:08.301Z Error Context: test-results/checkin-id-per-adult-One-I-930a1-aves-the-rule-for-the-hotel-chromium/error-context.md 2026-10-16T06:59:08.301Z attachment #4: trace (application/zip) ───────────────────────────────────────────────────────── 2026-10-16T06:59:08.301Z test-results/checkin-id-per-adult-One-I-930a1-aves-the-rule-for-the-hotel-chromium/trace.zip 2026-10-16T06:59:08.301Z Usage: 2026-10-16T06:59:08.301Z pnpm exec playwright show-trace test-results/checkin-id-per-adult-One-I-930a1-aves-the-rule-for-the-hotel-chromium/trace.zip 2026-10-16T06:59:08.301Z ──────────────────────────────────────────────────────────────────────────────────────────────── 2026-10-16T06:59:08.301Z 2) [chromium] › e2e/specs/prd-2026-005-active-template.spec.ts:61:6 › PRD-2026-005 — Active custom template wins › TC-PRD-090 assigning a custom template makes regenerated PDF use it 2026-10-16T06:59:08.301Z Error: expect(received).toBe(expected) // Object.is equality 2026-10-16T06:59:08.301Z Expected: true 2026-10-16T06:59:08.302Z Received: false 2026-10-16T06:59:08.302Z 129 | }, 2026-10-16T06:59:08.302Z 130 | ); 2026-10-16T06:59:08.302Z > 131 | expect(createResp.ok()).toBe(true); 2026-10-16T06:59:08.302Z | ^ 2026-10-16T06:59:08.302Z 132 | const created = (await createResp.json()) as { id: string }; 2026-10-16T06:59:08.302Z 133 | 2026-10-16T06:59:08.302Z 134 | // 2. Capture current assignment so we can restore it. 2026-10-16T06:59:08.302Z at /home/ubuntu/regression-runner/repos/dev/hotel-frontend-core/e2e/specs/prd-2026-005-active-template.spec.ts:131:27 2026-10-16T06:59:08.302Z attachment #1: screenshot (image/png) ────────────────────────────────────────────────────────── 2026-10-16T06:59:08.302Z test-results/prd-2026-005-active-templa-5f274-akes-regenerated-PDF-use-it-chromium/test-failed-1.png 2026-10-16T06:59:08.302Z ──────────────────────────────────────────────────────────────────────────────────────────────── 2026-10-16T06:59:08.302Z Error Context: test-results/prd-2026-005-active-templa-5f274-akes-regenerated-PDF-use-it-chromium/error-context.md 2026-10-16T06:59:08.302Z Error Context: test-results/prd-2026-005-active-templa-5f274-akes-regenerated-PDF-use-it-chromium/error-context.md 2026-10-16T06:59:08.302Z attachment #4: trace (application/zip) ───────────────────────────────────────────────────────── 2026-10-16T06:59:08.302Z test-results/prd-2026-005-active-templa-5f274-akes-regenerated-PDF-use-it-chromium/trace.zip 2026-10-16T06:59:08.302Z Usage: 2026-10-16T06:59:08.302Z pnpm exec playwright show-trace test-results/prd-2026-005-active-templa-5f274-akes-regenerated-PDF-use-it-chromium/trace.zip 2026-10-16T06:59:08.302Z ──────────────────────────────────────────────────────────────────────────────────────────────── 2026-10-16T06:59:08.302Z 3) [chromium] › e2e/specs/prd-2026-005-auto-triggers.spec.ts:8:6 › PRD-2026-005 — Auto-Triggers › TC-PRD-030/031 toggle Room Check-Out persists across reload 2026-10-16T06:59:08.302Z Error: expect(locator).toHaveAttribute(expected) failed 2026-10-16T06:59:08.302Z Locator: getByTestId('auto-trigger-room-checkout') 2026-10-16T06:59:08.302Z Expected: "true" 2026-10-16T06:59:08.302Z Timeout: 10000ms 2026-10-16T06:59:08.302Z Error: element(s) not found 2026-10-16T06:59:08.302Z Call log: 2026-10-16T06:59:08.302Z  - Expect "toHaveAttribute" with timeout 10000ms 2026-10-16T06:59:08.302Z  - waiting for getByTestId('auto-trigger-room-checkout') 2026-10-16T06:59:08.302Z 32 | // Round-trip: reload and confirm persisted. 2026-10-16T06:59:08.302Z 33 | await authedPage.reload({ waitUntil: 'domcontentloaded' }); 2026-10-16T06:59:08.302Z > 34 | await expect(authedPage.getByTestId('auto-trigger-room-checkout')).toHaveAttribute( 2026-10-16T06:59:08.302Z | ^ 2026-10-16T06:59:08.302Z 35 | 'aria-checked', 2026-10-16T06:59:08.302Z 36 | target, 2026-10-16T06:59:08.302Z 37 | ); 2026-10-16T06:59:08.302Z at /home/ubuntu/regression-runner/repos/dev/hotel-frontend-core/e2e/specs/prd-2026-005-auto-triggers.spec.ts:34:70 2026-10-16T06:59:08.302Z attachment #1: screenshot (image/png) ────────────────────────────────────────────────────────── 2026-10-16T06:59:08.302Z test-results/prd-2026-005-auto-triggers-4ba31--Out-persists-across-reload-chromium/test-failed-1.png 2026-10-16T06:59:08.302Z ──────────────────────────────────────────────────────────────────────────────────────────────── 2026-10-16T06:59:08.302Z Error Context: test-results/prd-2026-005-auto-triggers-4ba31--Out-persists-across-reload-chromium/error-context.md 2026-10-16T06:59:08.302Z attachment #3: trace (application/zip) ───────────────────────────────────────────────────────── 2026-10-16T06:59:08.302Z test-results/prd-2026-005-auto-triggers-4ba31--Out-persists-across-reload-chromium/trace.zip 2026-10-16T06:59:08.302Z Usage: 2026-10-16T06:59:08.302Z pnpm exec playwright show-trace test-results/prd-2026-005-auto-triggers-4ba31--Out-persists-across-reload-chromium/trace.zip 2026-10-16T06:59:08.302Z ──────────────────────────────────────────────────────────────────────────────────────────────── 2026-10-16T06:59:08.302Z 4) [chromium] › e2e/specs/prd-2026-005-deep-verification.spec.ts:65:6 › PRD-2026-005 — deep verification › TC-PRD-070 IGST selection survives save → backend GET returns taxMode=IGST 2026-10-16T06:59:08.302Z TimeoutError: page.waitForResponse: Timeout 30000ms exceeded while waiting for event "response" 2026-10-16T06:59:08.302Z 83 | // (top-right) and the mobile floating button. 2026-10-16T06:59:08.302Z 84 | const [finalizeRes] = await Promise.all([ 2026-10-16T06:59:08.303Z > 85 | authedPage.waitForResponse( 2026-10-16T06:59:08.303Z | ^ 2026-10-16T06:59:08.303Z 86 | (r) => 2026-10-16T06:59:08.303Z 87 | r.url().includes('/finalize') && 2026-10-16T06:59:08.303Z 88 | r.request().method() === 'POST' && 2026-10-16T06:59:08.303Z at /home/ubuntu/regression-runner/repos/dev/hotel-frontend-core/e2e/specs/prd-2026-005-deep-verification.spec.ts:85:15 2026-10-16T06:59:08.303Z attachment #1: screenshot (image/png) ────────────────────────────────────────────────────────── 2026-10-16T06:59:08.303Z test-results/prd-2026-005-deep-verifica-b7f0b-nd-GET-returns-taxMode-IGST-chromium/test-failed-1.png 2026-10-16T06:59:08.303Z ──────────────────────────────────────────────────────────────────────────────────────────────── 2026-10-16T06:59:08.303Z Error Context: test-results/prd-2026-005-deep-verifica-b7f0b-nd-GET-returns-taxMode-IGST-chromium/error-context.md 2026-10-16T06:59:08.303Z Error Context: test-results/prd-2026-005-deep-verifica-b7f0b-nd-GET-returns-taxMode-IGST-chromium/error-context.md 2026-10-16T06:59:08.303Z attachment #4: trace (application/zip) ───────────────────────────────────────────────────────── 2026-10-16T06:59:08.303Z test-results/prd-2026-005-deep-verifica-b7f0b-nd-GET-returns-taxMode-IGST-chromium/trace.zip 2026-10-16T06:59:08.303Z Usage: 2026-10-16T06:59:08.303Z pnpm exec playwright show-trace test-results/prd-2026-005-deep-verifica-b7f0b-nd-GET-returns-taxMode-IGST-chromium/trace.zip 2026-10-16T06:59:08.303Z ──────────────────────────────────────────────────────────────────────────────────────────────── 2026-10-16T06:59:08.303Z 5) [chromium] › e2e/specs/prd-2026-005-deep-verification.spec.ts:130:7 › PRD-2026-005 — deep verification › TC-PRD-071/CLASSIC CLASSIC invoice PDF prints primary bank account block 2026-10-16T06:59:08.303Z Error: booking has a guest account 2026-10-16T06:59:08.303Z expect(received).toBeTruthy() 2026-10-16T06:59:08.303Z Received: undefined 2026-10-16T06:59:08.303Z at ../fixtures/invoicing-data.ts:58 2026-10-16T06:59:08.303Z 56 | const accounts = (await accountsRes.json()) as Array<{ id: string; isActive?: boolean }>; 2026-10-16T06:59:08.303Z 57 | const account = accounts.find((a) => a.isActive !== false); 2026-10-16T06:59:08.303Z > 58 | expect(account, 'booking has a guest account').toBeTruthy(); 2026-10-16T06:59:08.303Z | ^ 2026-10-16T06:59:08.303Z 59 | const res = await api.post(`/invoices/${checkInId}/initialize`, { 2026-10-16T06:59:08.303Z 60 | scope: 'GUEST_ACCOUNT', 2026-10-16T06:59:08.303Z 61 | guestAccountId: account!.id, 2026-10-16T06:59:08.303Z at initialiseInvoice (/home/ubuntu/regression-runner/repos/dev/hotel-frontend-core/e2e/fixtures/invoicing-data.ts:58:49) 2026-10-16T06:59:08.303Z at createFinalisedInvoice (/home/ubuntu/regression-runner/repos/dev/hotel-frontend-core/e2e/fixtures/invoicing-data.ts:81:21) 2026-10-16T06:59:08.303Z at /home/ubuntu/regression-runner/repos/dev/hotel-frontend-core/e2e/specs/prd-2026-005-deep-verification.spec.ts:36:12 2026-10-16T06:59:08.303Z Error Context: test-results/prd-2026-005-deep-verifica-5a8ee--primary-bank-account-block-chromium/error-context.md 2026-10-16T06:59:08.303Z Error Context: test-results/prd-2026-005-deep-verifica-5a8ee--primary-bank-account-block-chromium/error-context.md 2026-10-16T06:59:08.304Z attachment #3: trace (application/zip) ───────────────────────────────────────────────────────── 2026-10-16T06:59:08.304Z test-results/prd-2026-005-deep-verifica-5a8ee--primary-bank-account-block-chromium/trace.zip 2026-10-16T06:59:08.304Z Usage: 2026-10-16T06:59:08.304Z pnpm exec playwright show-trace test-results/prd-2026-005-deep-verifica-5a8ee--primary-bank-account-block-chromium/trace.zip 2026-10-16T06:59:08.304Z ──────────────────────────────────────────────────────────────────────────────────────────────── 2026-10-16T06:59:08.304Z 6) [chromium] › e2e/specs/prd-2026-005-deep-verification.spec.ts:130:7 › PRD-2026-005 — deep verification › TC-PRD-071/MODERN MODERN invoice PDF prints primary bank account block 2026-10-16T06:59:08.304Z Error: expect(received).toContain(expected) // indexOf 2026-10-16T06:59:08.304Z Expected substring: "Bank Details" 2026-10-16T06:59:08.304Z Received string: "E2E Hotel 07 TAX INVOICE Bengaluru, Karnataka, India, 560001 +91 9000000000 e2e-hotel@digistay.test Invoice No 1 Invoice Date 16/10/2026 Bill To E2E-202610160648-e49d ARM-6-3 deep verification Mobile 9999999999 Check-in 2026-10-16 11:21 Check-out 2026-10-17 16:30 Pax 1 Item Name HSN/SAC Price Item Night Discount CGST SGST Amount SUBTOTAL ₹0.00 ₹0.00 ₹0.00 ₹0.00 Authorised Signatory" 2026-10-16T06:59:08.304Z 172 | expect(buffer.byteLength).toBeGreaterThan(1000); 2026-10-16T06:59:08.304Z 173 | const text = await extractPdfText(buffer); 2026-10-16T06:59:08.304Z > 174 | expect(text).toContain('Bank Details'); 2026-10-16T06:59:08.304Z | ^ 2026-10-16T06:59:08.304Z 175 | expect(text).toContain(primary!.bankName); 2026-10-16T06:59:08.304Z 176 | }); 2026-10-16T06:59:08.304Z 177 | } 2026-10-16T06:59:08.304Z at /home/ubuntu/regression-runner/repos/dev/hotel-frontend-core/e2e/specs/prd-2026-005-deep-verification.spec.ts:174:17 2026-10-16T06:59:08.304Z attachment #1: screenshot (image/png) ────────────────────────────────────────────────────────── 2026-10-16T06:59:08.304Z test-results/prd-2026-005-deep-verifica-a1380--primary-bank-account-block-chromium/test-failed-1.png 2026-10-16T06:59:08.304Z ──────────────────────────────────────────────────────────────────────────────────────────────── 2026-10-16T06:59:08.304Z Error Context: test-results/prd-2026-005-deep-verifica-a1380--primary-bank-account-block-chromium/error-context.md 2026-10-16T06:59:08.304Z Error Context: test-results/prd-2026-005-deep-verifica-a1380--primary-bank-account-block-chromium/error-context.md 2026-10-16T06:59:08.304Z attachment #4: trace (application/zip) ───────────────────────────────────────────────────────── 2026-10-16T06:59:08.304Z test-results/prd-2026-005-deep-verifica-a1380--primary-bank-account-block-chromium/trace.zip 2026-10-16T06:59:08.304Z Usage: 2026-10-16T06:59:08.304Z pnpm exec playwright show-trace test-results/prd-2026-005-deep-verifica-a1380--primary-bank-account-block-chromium/trace.zip 2026-10-16T06:59:08.304Z ──────────────────────────────────────────────────────────────────────────────────────────────── 2026-10-16T06:59:08.304Z 7) [chromium] › e2e/specs/prd-2026-005-deep-verification.spec.ts:130:7 › PRD-2026-005 — deep verification › TC-PRD-071/MODERN_BW MODERN_BW invoice PDF prints primary bank account block 2026-10-16T06:59:08.304Z Error: booking has a guest account 2026-10-16T06:59:08.304Z expect(received).toBeTruthy() 2026-10-16T06:59:08.304Z Received: undefined 2026-10-16T06:59:08.304Z at ../fixtures/invoicing-data.ts:58 2026-10-16T06:59:08.304Z 56 | const accounts = (await accountsRes.json()) as Array<{ id: string; isActive?: boolean }>; 2026-10-16T06:59:08.304Z 57 | const account = accounts.find((a) => a.isActive !== false); 2026-10-16T06:59:08.305Z > 58 | expect(account, 'booking has a guest account').toBeTruthy(); 2026-10-16T06:59:08.305Z | ^ 2026-10-16T06:59:08.305Z 59 | const res = await api.post(`/invoices/${checkInId}/initialize`, { 2026-10-16T06:59:08.305Z 60 | scope: 'GUEST_ACCOUNT', 2026-10-16T06:59:08.305Z 61 | guestAccountId: account!.id, 2026-10-16T06:59:08.305Z at initialiseInvoice (/home/ubuntu/regression-runner/repos/dev/hotel-frontend-core/e2e/fixtures/invoicing-data.ts:58:49) 2026-10-16T06:59:08.305Z at createFinalisedInvoice (/home/ubuntu/regression-runner/repos/dev/hotel-frontend-core/e2e/fixtures/invoicing-data.ts:81:21) 2026-10-16T06:59:08.305Z at /home/ubuntu/regression-runner/repos/dev/hotel-frontend-core/e2e/specs/prd-2026-005-deep-verification.spec.ts:36:12 2026-10-16T06:59:08.305Z Error Context: test-results/prd-2026-005-deep-verifica-5e591--primary-bank-account-block-chromium/error-context.md 2026-10-16T06:59:08.305Z Error Context: test-results/prd-2026-005-deep-verifica-5e591--primary-bank-account-block-chromium/error-context.md 2026-10-16T06:59:08.305Z attachment #3: trace (application/zip) ───────────────────────────────────────────────────────── 2026-10-16T06:59:08.305Z test-results/prd-2026-005-deep-verifica-5e591--primary-bank-account-block-chromium/trace.zip 2026-10-16T06:59:08.305Z Usage: 2026-10-16T06:59:08.305Z pnpm exec playwright show-trace test-results/prd-2026-005-deep-verifica-5e591--primary-bank-account-block-chromium/trace.zip 2026-10-16T06:59:08.305Z ──────────────────────────────────────────────────────────────────────────────────────────────── 2026-10-16T06:59:08.305Z 8) [chromium] › e2e/specs/prd-2026-005-deep-verification.spec.ts:179:6 › PRD-2026-005 — deep verification › TC-PRD-073 Invoice PDF column header reflects persisted taxMode (IGST) 2026-10-16T06:59:08.305Z Error: POST /auth/login → 500: {"statusCode":500,"message":"Something went wrong, please try again later","error":"Internal Server Error","timestamp":"2026-10-16T06:51:57.749Z","path":"/auth/login","requestId":"760465c3-0ab9-45a0-a4b1-5a70bb1d0f93"} 2026-10-16T06:59:08.305Z at ../fixtures/hotel-session.ts:28 2026-10-16T06:59:08.305Z 26 | }, 2026-10-16T06:59:08.305Z 27 | }); 2026-10-16T06:59:08.305Z > 28 | if (!loginRes.ok()) throw new Error(`POST /auth/login → ${loginRes.status()}: ${await loginRes.text()}`); 2026-10-16T06:59:08.305Z | ^ 2026-10-16T06:59:08.305Z 29 | let auth = (await loginRes.json()) as AuthResponse; 2026-10-16T06:59:08.305Z 30 | await anon.dispose(); 2026-10-16T06:59:08.305Z 31 | if (auth.property?.id !== hotel.id) { 2026-10-16T06:59:08.306Z at hotelToken (/home/ubuntu/regression-runner/repos/dev/hotel-frontend-core/e2e/fixtures/hotel-session.ts:28:28) 2026-10-16T06:59:08.306Z at open (/home/ubuntu/regression-runner/repos/dev/hotel-frontend-core/e2e/fixtures/hotel-session.ts:60:49) 2026-10-16T06:59:08.306Z at hotelApi (/home/ubuntu/regression-runner/repos/dev/hotel-frontend-core/e2e/fixtures/hotel-session.ts:62:14) 2026-10-16T06:59:08.306Z at ArmApi.init (/home/ubuntu/regression-runner/repos/dev/hotel-frontend-core/e2e/fixtures/arm-api.ts:115:14) 2026-10-16T06:59:08.306Z at newArmApi (/home/ubuntu/regression-runner/repos/dev/hotel-frontend-core/e2e/fixtures/arm-api.ts:305:2) 2026-10-16T06:59:08.306Z at createBooking (/home/ubuntu/regression-runner/repos/dev/hotel-frontend-core/e2e/fixtures/invoicing-data.ts:33:14) 2026-10-16T06:59:08.306Z at createFinalisedInvoice (/home/ubuntu/regression-runner/repos/dev/hotel-frontend-core/e2e/fixtures/invoicing-data.ts:79:40) 2026-10-16T06:59:08.306Z at /home/ubuntu/regression-runner/repos/dev/hotel-frontend-core/e2e/specs/prd-2026-005-deep-verification.spec.ts:36:12 2026-10-16T06:59:08.306Z Error Context: test-results/prd-2026-005-deep-verifica-a65aa-cts-persisted-taxMode-IGST--chromium/error-context.md 2026-10-16T06:59:08.306Z Error Context: test-results/prd-2026-005-deep-verifica-a65aa-cts-persisted-taxMode-IGST--chromium/error-context.md 2026-10-16T06:59:08.306Z attachment #3: trace (application/zip) ───────────────────────────────────────────────────────── 2026-10-16T06:59:08.306Z test-results/prd-2026-005-deep-verifica-a65aa-cts-persisted-taxMode-IGST--chromium/trace.zip 2026-10-16T06:59:08.306Z Usage: 2026-10-16T06:59:08.306Z pnpm exec playwright show-trace test-results/prd-2026-005-deep-verifica-a65aa-cts-persisted-taxMode-IGST--chromium/trace.zip 2026-10-16T06:59:08.306Z ──────────────────────────────────────────────────────────────────────────────────────────────── 2026-10-16T06:59:08.306Z 9) [chromium] › e2e/specs/prd-2026-005-deep-verification.spec.ts:239:6 › PRD-2026-005 — deep verification › TC-PRD-074 HSN/SAC card change propagates to regenerated invoice PDF 2026-10-16T06:59:08.306Z Error: expect(received).toContain(expected) // indexOf 2026-10-16T06:59:08.306Z Expected substring: "900099" 2026-10-16T06:59:08.306Z Received string: "E2E Hotel 03 Bengaluru, Karnataka, India, 560001 +91 9000000000 e2e-hotel@digistay.test Bill To E2E-202610160648-e49d ARM-2-1 deep verification Mobile 9999999999 Invoice No 1 Invoice Date 16/10/2026 Pax 1 Check-in 2026-10-16 11:21 Check-out 2026-10-17 16:30 Item Name HSN/SAC Price Item Night Discount CGST SGST Amount SUBTOTAL ₹0.00 ₹0.00 ₹0.00 ₹0.00 Total Amount (in words) Zero Authorised Signatory" 2026-10-16T06:59:08.306Z 291 | // 4) The room HSN we just set MUST appear, and the legacy hardcoded 2026-10-16T06:59:08.306Z 292 | // fallback MUST NOT (that was the original bug). 2026-10-16T06:59:08.306Z > 293 | expect(text).toContain(ROOM_HSN); 2026-10-16T06:59:08.306Z | ^ 2026-10-16T06:59:08.306Z 294 | expect(text).not.toContain('996332'); 2026-10-16T06:59:08.306Z 295 | }); 2026-10-16T06:59:08.306Z 296 | 2026-10-16T06:59:08.306Z at /home/ubuntu/regression-runner/repos/dev/hotel-frontend-core/e2e/specs/prd-2026-005-deep-verification.spec.ts:293:16 2026-10-16T06:59:08.306Z attachment #1: screenshot (image/png) ────────────────────────────────────────────────────────── 2026-10-16T06:59:08.306Z test-results/prd-2026-005-deep-verifica-10779--to-regenerated-invoice-PDF-chromium/test-failed-1.png 2026-10-16T06:59:08.306Z ──────────────────────────────────────────────────────────────────────────────────────────────── 2026-10-16T06:59:08.306Z Error Context: test-results/prd-2026-005-deep-verifica-10779--to-regenerated-invoice-PDF-chromium/error-context.md 2026-10-16T06:59:08.307Z Error Context: test-results/prd-2026-005-deep-verifica-10779--to-regenerated-invoice-PDF-chromium/error-context.md 2026-10-16T06:59:08.307Z attachment #4: trace (application/zip) ───────────────────────────────────────────────────────── 2026-10-16T06:59:08.307Z test-results/prd-2026-005-deep-verifica-10779--to-regenerated-invoice-PDF-chromium/trace.zip 2026-10-16T06:59:08.307Z Usage: 2026-10-16T06:59:08.307Z pnpm exec playwright show-trace test-results/prd-2026-005-deep-verifica-10779--to-regenerated-invoice-PDF-chromium/trace.zip 2026-10-16T06:59:08.307Z ──────────────────────────────────────────────────────────────────────────────────────────────── 2026-10-16T06:59:08.307Z 10) [chromium] › e2e/specs/prd-2026-005-deep-verification.spec.ts:297:6 › PRD-2026-005 — deep verification › TC-PRD-072 Credit Note PDF carries the issued CN number in text 2026-10-16T06:59:08.307Z TimeoutError: page.waitForResponse: Timeout 30000ms exceeded while waiting for event "response" 2026-10-16T06:59:08.307Z 310 | 2026-10-16T06:59:08.307Z 311 | const [response] = await Promise.all([ 2026-10-16T06:59:08.307Z > 312 | authedPage.waitForResponse( 2026-10-16T06:59:08.307Z | ^ 2026-10-16T06:59:08.307Z 313 | (r) => 2026-10-16T06:59:08.307Z 314 | r.url().includes('/credit-notes') && 2026-10-16T06:59:08.307Z 315 | r.request().method() === 'POST' && 2026-10-16T06:59:08.307Z at /home/ubuntu/regression-runner/repos/dev/hotel-frontend-core/e2e/specs/prd-2026-005-deep-verification.spec.ts:312:15 2026-10-16T06:59:08.307Z attachment #1: screenshot (image/png) ────────────────────────────────────────────────────────── 2026-10-16T06:59:08.307Z test-results/prd-2026-005-deep-verifica-04b43-he-issued-CN-number-in-text-chromium/test-failed-1.png 2026-10-16T06:59:08.307Z ──────────────────────────────────────────────────────────────────────────────────────────────── 2026-10-16T06:59:08.307Z Error Context: test-results/prd-2026-005-deep-verifica-04b43-he-issued-CN-number-in-text-chromium/error-context.md 2026-10-16T06:59:08.307Z Error Context: test-results/prd-2026-005-deep-verifica-04b43-he-issued-CN-number-in-text-chromium/error-context.md 2026-10-16T06:59:08.307Z attachment #4: trace (application/zip) ───────────────────────────────────────────────────────── 2026-10-16T06:59:08.307Z test-results/prd-2026-005-deep-verifica-04b43-he-issued-CN-number-in-text-chromium/trace.zip 2026-10-16T06:59:08.307Z Usage: 2026-10-16T06:59:08.307Z pnpm exec playwright show-trace test-results/prd-2026-005-deep-verifica-04b43-he-issued-CN-number-in-text-chromium/trace.zip 2026-10-16T06:59:08.307Z ──────────────────────────────────────────────────────────────────────────────────────────────── 2026-10-16T06:59:08.307Z 11) [chromium] › e2e/specs/prd-2026-005-supplementary-docs.spec.ts:47:6 › PRD-2026-005 — Supplementary documents › TC-PRD-050 Generate dropdown lists all three doc types 2026-10-16T06:59:08.308Z Error: expect(locator).toBeVisible() failed 2026-10-16T06:59:08.308Z Locator: getByTestId('invoice-generate-refund-voucher') 2026-10-16T06:59:08.308Z Expected: visible 2026-10-16T06:59:08.308Z Timeout: 10000ms 2026-10-16T06:59:08.308Z Error: element(s) not found 2026-10-16T06:59:08.308Z Call log: 2026-10-16T06:59:08.308Z  - Expect "toBeVisible" with timeout 10000ms 2026-10-16T06:59:08.308Z  - waiting for getByTestId('invoice-generate-refund-voucher') 2026-10-16T06:59:08.308Z 55 | await expect(authedPage.getByTestId('invoice-generate-credit-note')).toBeVisible(); 2026-10-16T06:59:08.308Z 56 | await expect(authedPage.getByTestId('invoice-generate-debit-note')).toBeVisible(); 2026-10-16T06:59:08.308Z > 57 | await expect(authedPage.getByTestId('invoice-generate-refund-voucher')).toBeVisible(); 2026-10-16T06:59:08.308Z | ^ 2026-10-16T06:59:08.308Z 58 | }); 2026-10-16T06:59:08.308Z 59 | 2026-10-16T06:59:08.308Z 60 | test('TC-PRD-051 Credit Note (full reversal) generates 201 + PDF blob', async ({ 2026-10-16T06:59:08.308Z at /home/ubuntu/regression-runner/repos/dev/hotel-frontend-core/e2e/specs/prd-2026-005-supplementary-docs.spec.ts:57:75 2026-10-16T06:59:08.308Z attachment #1: screenshot (image/png) ────────────────────────────────────────────────────────── 2026-10-16T06:59:08.308Z test-results/prd-2026-005-supplementary-55ae7-n-lists-all-three-doc-types-chromium/test-failed-1.png 2026-10-16T06:59:08.308Z ──────────────────────────────────────────────────────────────────────────────────────────────── 2026-10-16T06:59:08.309Z Error Context: test-results/prd-2026-005-supplementary-55ae7-n-lists-all-three-doc-types-chromium/error-context.md 2026-10-16T06:59:08.309Z Error Context: test-results/prd-2026-005-supplementary-55ae7-n-lists-all-three-doc-types-chromium/error-context.md 2026-10-16T06:59:08.309Z attachment #4: trace (application/zip) ───────────────────────────────────────────────────────── 2026-10-16T06:59:08.309Z test-results/prd-2026-005-supplementary-55ae7-n-lists-all-three-doc-types-chromium/trace.zip 2026-10-16T06:59:08.309Z Usage: 2026-10-16T06:59:08.309Z pnpm exec playwright show-trace test-results/prd-2026-005-supplementary-55ae7-n-lists-all-three-doc-types-chromium/trace.zip 2026-10-16T06:59:08.309Z ──────────────────────────────────────────────────────────────────────────────────────────────── 2026-10-16T06:59:08.309Z 12) [chromium] › e2e/specs/reservation-unassign.spec.ts:8:5 › TC-UNASSIGN-MONEY-1 frees and returns a reservation room without changing its money 2026-10-16T06:59:08.309Z Error: GET /checkins/82ecaeb2-13c5-41df-8c61-084a26fe41f0 → 500 2026-10-16T06:59:08.309Z expect(received).toBeTruthy() 2026-10-16T06:59:08.309Z Received: false 2026-10-16T06:59:08.309Z at ../fixtures/arm-api.ts:183 2026-10-16T06:59:08.309Z 181 | async getCheckin(checkInId: string): Promise { 2026-10-16T06:59:08.309Z 182 | const res = await this.ctx.get(`/checkins/${checkInId}`); 2026-10-16T06:59:08.309Z > 183 | expect(res.ok(), `GET /checkins/${checkInId} → ${res.status()}`).toBeTruthy(); 2026-10-16T06:59:08.309Z | ^ 2026-10-16T06:59:08.309Z 184 | return res.json(); 2026-10-16T06:59:08.309Z 185 | } 2026-10-16T06:59:08.309Z 186 | 2026-10-16T06:59:08.309Z at ArmApi.getCheckin (/home/ubuntu/regression-runner/repos/dev/hotel-frontend-core/e2e/fixtures/arm-api.ts:183:68) 2026-10-16T06:59:08.309Z at /home/ubuntu/regression-runner/repos/dev/hotel-frontend-core/e2e/specs/reservation-unassign.spec.ts:83:37 2026-10-16T06:59:08.310Z attachment #1: money-before (application/json) ───────────────────────────────────────────────── 2026-10-16T06:59:08.310Z test-results/reservation-unassign-TC-UN-3c625--without-changing-its-money-chromium/attachments/money-before-ba99fc0157635049a197163c5dd483b950357482.json 2026-10-16T06:59:08.310Z ──────────────────────────────────────────────────────────────────────────────────────────────── 2026-10-16T06:59:08.310Z attachment #2: unassign-confirmation (image/png) ─────────────────────────────────────────────── 2026-10-16T06:59:08.310Z test-results/reservation-unassign-TC-UN-3c625--without-changing-its-money-chromium/attachments/unassign-confirmation-ff905932619b40ac8b1633960c3a32a958ec19c4.png 2026-10-16T06:59:08.310Z ──────────────────────────────────────────────────────────────────────────────────────────────── 2026-10-16T06:59:08.310Z attachment #3: money-after-unassign (application/json) ───────────────────────────────────────── 2026-10-16T06:59:08.310Z test-results/reservation-unassign-TC-UN-3c625--without-changing-its-money-chromium/attachments/money-after-unassign-dbf567b68e54bdb96346ca8d690bb05cec1ebb8b.json 2026-10-16T06:59:08.310Z ──────────────────────────────────────────────────────────────────────────────────────────────── 2026-10-16T06:59:08.310Z attachment #4: room-unassigned (image/png) ───────────────────────────────────────────────────── 2026-10-16T06:59:08.310Z test-results/reservation-unassign-TC-UN-3c625--without-changing-its-money-chromium/attachments/room-unassigned-ef4d4faa8510899053d99284e424d89502611e91.png 2026-10-16T06:59:08.310Z ──────────────────────────────────────────────────────────────────────────────────────────────── 2026-10-16T06:59:08.310Z attachment #5: screenshot (image/png) ────────────────────────────────────────────────────────── 2026-10-16T06:59:08.310Z test-results/reservation-unassign-TC-UN-3c625--without-changing-its-money-chromium/test-failed-1.png 2026-10-16T06:59:08.310Z ──────────────────────────────────────────────────────────────────────────────────────────────── 2026-10-16T06:59:08.310Z Error Context: test-results/reservation-unassign-TC-UN-3c625--without-changing-its-money-chromium/error-context.md 2026-10-16T06:59:08.310Z attachment #7: trace (application/zip) ───────────────────────────────────────────────────────── 2026-10-16T06:59:08.310Z test-results/reservation-unassign-TC-UN-3c625--without-changing-its-money-chromium/trace.zip 2026-10-16T06:59:08.310Z Usage: 2026-10-16T06:59:08.310Z pnpm exec playwright show-trace test-results/reservation-unassign-TC-UN-3c625--without-changing-its-money-chromium/trace.zip 2026-10-16T06:59:08.310Z ──────────────────────────────────────────────────────────────────────────────────────────────── 2026-10-16T06:59:08.310Z 13) [chromium] › e2e/specs/revenue-guardrail-removal.spec.ts:23:5 › TC-REV-GUARD-1 clearing both configured limits removes the guardrail 2026-10-16T06:59:08.310Z Error: GET guardrails → 403 2026-10-16T06:59:08.310Z expect(received).toBeTruthy() 2026-10-16T06:59:08.310Z Received: false 2026-10-16T06:59:08.310Z 17 | async function currentGuardrails(api: Awaited>, path: string): Promise { 2026-10-16T06:59:08.310Z 18 | const response = await api.get(path); 2026-10-16T06:59:08.310Z > 19 | expect(response.ok(), `GET guardrails → ${response.status()}`).toBeTruthy(); 2026-10-16T06:59:08.310Z | ^ 2026-10-16T06:59:08.310Z 20 | return ((await response.json()) as GuardrailResponse).data; 2026-10-16T06:59:08.310Z 21 | } 2026-10-16T06:59:08.310Z 22 | 2026-10-16T06:59:08.311Z at currentGuardrails (/home/ubuntu/regression-runner/repos/dev/hotel-frontend-core/e2e/specs/revenue-guardrail-removal.spec.ts:19:65) 2026-10-16T06:59:08.311Z at /home/ubuntu/regression-runner/repos/dev/hotel-frontend-core/e2e/specs/revenue-guardrail-removal.spec.ts:31:16 2026-10-16T06:59:08.311Z attachment #1: screenshot (image/png) ────────────────────────────────────────────────────────── 2026-10-16T06:59:08.311Z test-results/revenue-guardrail-removal--445ed-imits-removes-the-guardrail-chromium/test-failed-1.png 2026-10-16T06:59:08.311Z ──────────────────────────────────────────────────────────────────────────────────────────────── 2026-10-16T06:59:08.311Z Error Context: test-results/revenue-guardrail-removal--445ed-imits-removes-the-guardrail-chromium/error-context.md 2026-10-16T06:59:08.311Z attachment #3: trace (application/zip) ───────────────────────────────────────────────────────── 2026-10-16T06:59:08.311Z test-results/revenue-guardrail-removal--445ed-imits-removes-the-guardrail-chromium/trace.zip 2026-10-16T06:59:08.311Z Usage: 2026-10-16T06:59:08.311Z pnpm exec playwright show-trace test-results/revenue-guardrail-removal--445ed-imits-removes-the-guardrail-chromium/trace.zip 2026-10-16T06:59:08.311Z ──────────────────────────────────────────────────────────────────────────────────────────────── 2026-10-16T06:59:08.311Z 14) [mobile-chromium] › e2e/specs/prd-2026-005-mobile.spec.ts:55:6 › PRD-2026-005 — mobile › TC-PRD-049 IGST save round-trip on mobile persists to DB 2026-10-16T06:59:08.311Z TimeoutError: page.waitForResponse: Timeout 30000ms exceeded while waiting for event "response" 2026-10-16T06:59:08.311Z 70 | // Mobile renders the Save button in a floating bottom bar. 2026-10-16T06:59:08.311Z 71 | const [finalizeRes] = await Promise.all([ 2026-10-16T06:59:08.311Z > 72 | authedPage.waitForResponse( 2026-10-16T06:59:08.311Z | ^ 2026-10-16T06:59:08.311Z 73 | (r) => 2026-10-16T06:59:08.311Z 74 | r.url().includes('/finalize') && 2026-10-16T06:59:08.311Z 75 | r.request().method() === 'POST' && 2026-10-16T06:59:08.311Z at /home/ubuntu/regression-runner/repos/dev/hotel-frontend-core/e2e/specs/prd-2026-005-mobile.spec.ts:72:15 2026-10-16T06:59:08.311Z attachment #1: screenshot (image/png) ────────────────────────────────────────────────────────── 2026-10-16T06:59:08.311Z test-results/prd-2026-005-mobile-PRD-20-dc371-ip-on-mobile-persists-to-DB-mobile-chromium/test-failed-1.png 2026-10-16T06:59:08.311Z ──────────────────────────────────────────────────────────────────────────────────────────────── 2026-10-16T06:59:08.311Z Error Context: test-results/prd-2026-005-mobile-PRD-20-dc371-ip-on-mobile-persists-to-DB-mobile-chromium/error-context.md 2026-10-16T06:59:08.311Z attachment #3: trace (application/zip) ───────────────────────────────────────────────────────── 2026-10-16T06:59:08.311Z test-results/prd-2026-005-mobile-PRD-20-dc371-ip-on-mobile-persists-to-DB-mobile-chromium/trace.zip 2026-10-16T06:59:08.311Z Usage: 2026-10-16T06:59:08.311Z pnpm exec playwright show-trace test-results/prd-2026-005-mobile-PRD-20-dc371-ip-on-mobile-persists-to-DB-mobile-chromium/trace.zip 2026-10-16T06:59:08.311Z ──────────────────────────────────────────────────────────────────────────────────────────────── 2026-10-16T06:59:08.311Z 15) [arm] › e2e/specs/prd-2026-007-finance.spec.ts:91:6 › PRD-2026-007 — reservation-level rollup (G6/Must 8/NG4) › TC-ARM-261 partial check-in does not change totals [G6] 2026-10-16T06:59:08.311Z Error: GET /checkins/e66970ca-bb91-4a79-84c9-56ee47caf4a0 → 500 2026-10-16T06:59:08.311Z expect(received).toBeTruthy() 2026-10-16T06:59:08.312Z Received: false 2026-10-16T06:59:08.312Z at ../fixtures/arm-api.ts:183 2026-10-16T06:59:08.312Z 181 | async getCheckin(checkInId: string): Promise { 2026-10-16T06:59:08.312Z 182 | const res = await this.ctx.get(`/checkins/${checkInId}`); 2026-10-16T06:59:08.312Z > 183 | expect(res.ok(), `GET /checkins/${checkInId} → ${res.status()}`).toBeTruthy(); 2026-10-16T06:59:08.312Z | ^ 2026-10-16T06:59:08.312Z 184 | return res.json(); 2026-10-16T06:59:08.312Z 185 | } 2026-10-16T06:59:08.312Z 186 | 2026-10-16T06:59:08.312Z at ArmApi.getCheckin (/home/ubuntu/regression-runner/repos/dev/hotel-frontend-core/e2e/fixtures/arm-api.ts:183:68) 2026-10-16T06:59:08.312Z at ArmApi.roomInstanceIds (/home/ubuntu/regression-runner/repos/dev/hotel-frontend-core/e2e/fixtures/arm-api.ts:189:18) 2026-10-16T06:59:08.312Z at /home/ubuntu/regression-runner/repos/dev/hotel-frontend-core/e2e/specs/prd-2026-007-finance.spec.ts:95:15 2026-10-16T06:59:08.312Z Error Context: test-results/prd-2026-007-finance-PRD-2-20a9a--does-not-change-totals-G6--arm/error-context.md 2026-10-16T06:59:08.312Z Error Context: test-results/prd-2026-007-finance-PRD-2-20a9a--does-not-change-totals-G6--arm/error-context.md 2026-10-16T06:59:08.312Z attachment #3: trace (application/zip) ───────────────────────────────────────────────────────── 2026-10-16T06:59:08.312Z test-results/prd-2026-007-finance-PRD-2-20a9a--does-not-change-totals-G6--arm/trace.zip 2026-10-16T06:59:08.312Z Usage: 2026-10-16T06:59:08.312Z pnpm exec playwright show-trace test-results/prd-2026-007-finance-PRD-2-20a9a--does-not-change-totals-G6--arm/trace.zip 2026-10-16T06:59:08.312Z ──────────────────────────────────────────────────────────────────────────────────────────────── 2026-10-16T06:59:08.312Z 16) [arm] › e2e/specs/prd-2026-007-finance.spec.ts:200:6 › PRD-2026-007 — charges, discounts, payments, add-ons › TC-ARM-270 apply a flat discount → total drops accordingly [discounts] 2026-10-16T06:59:08.312Z Error: createReservation → 500: {"statusCode":500,"message":"Something went wrong, please try again later","error":"Internal Server Error","timestamp":"2026-10-16T06:56:04.767Z","path":"/reservations","requestId":"ee7d7c11-2cd9-4288-9fa3-a9a5f217ecd1"} 2026-10-16T06:59:08.312Z expect(received).toBeTruthy() 2026-10-16T06:59:08.312Z Received: false 2026-10-16T06:59:08.312Z at ../fixtures/arm-api.ts:154 2026-10-16T06:59:08.312Z 152 | }); 2026-10-16T06:59:08.312Z 153 | const text = await res.text(); 2026-10-16T06:59:08.312Z > 154 | expect(res.ok(), `createReservation → ${res.status()}: ${text.slice(0, 500)}`).toBeTruthy(); 2026-10-16T06:59:08.312Z | ^ 2026-10-16T06:59:08.312Z 155 | const body = JSON.parse(text); 2026-10-16T06:59:08.312Z 156 | const checkInId: string = body.id ?? body.checkInId ?? body.data?.id; 2026-10-16T06:59:08.312Z 157 | expect(checkInId, `reservation id missing in response: ${text.slice(0, 300)}`).toBeTruthy(); 2026-10-16T06:59:08.312Z at ArmApi.createReservation (/home/ubuntu/regression-runner/repos/dev/hotel-frontend-core/e2e/fixtures/arm-api.ts:154:82) 2026-10-16T06:59:08.312Z at ArmApi.api.createReservation (/home/ubuntu/regression-runner/repos/dev/hotel-frontend-core/e2e/fixtures/arm-ui-w4.ts:43:12) 2026-10-16T06:59:08.312Z at /home/ubuntu/regression-runner/repos/dev/hotel-frontend-core/e2e/specs/prd-2026-007-finance.spec.ts:202:25 2026-10-16T06:59:08.312Z Error Context: test-results/prd-2026-007-finance-PRD-2-adf4c-rops-accordingly-discounts--arm/error-context.md 2026-10-16T06:59:08.313Z Error Context: test-results/prd-2026-007-finance-PRD-2-adf4c-rops-accordingly-discounts--arm/error-context.md 2026-10-16T06:59:08.313Z attachment #3: trace (application/zip) ───────────────────────────────────────────────────────── 2026-10-16T06:59:08.313Z test-results/prd-2026-007-finance-PRD-2-adf4c-rops-accordingly-discounts--arm/trace.zip 2026-10-16T06:59:08.313Z Usage: 2026-10-16T06:59:08.313Z pnpm exec playwright show-trace test-results/prd-2026-007-finance-PRD-2-adf4c-rops-accordingly-discounts--arm/trace.zip 2026-10-16T06:59:08.313Z ──────────────────────────────────────────────────────────────────────────────────────────────── 2026-10-16T06:59:08.313Z 17) [arm] › e2e/specs/prd-2026-007-finance.spec.ts:341:6 › PRD-2026-007 — finance surfaces in the UI › TC-ARM-280 guest-account screen lists the booking's accounts [party UI] 2026-10-16T06:59:08.313Z Error: expect(received).toEqual(expected) // deep equality 2026-10-16T06:59:08.313Z - Expected - 4 2026-10-16T06:59:08.313Z + Received + 1 2026-10-16T06:59:08.313Z - Array [ 2026-10-16T06:59:08.313Z - "101", 2026-10-16T06:59:08.313Z - "102", 2026-10-16T06:59:08.313Z - ] 2026-10-16T06:59:08.313Z + Array [] 2026-10-16T06:59:08.313Z 345 | // Each room gets its own guest account, named after the room. 2026-10-16T06:59:08.313Z 346 | const accounts = (await (await api.getGuestAccounts(checkInId)).json()) as { name: string; dueAmount: number }[]; 2026-10-16T06:59:08.313Z > 347 | expect(accounts.map((a) => a.name).sort()).toEqual(rooms.map((r) => r.roomNumber).sort()); 2026-10-16T06:59:08.313Z | ^ 2026-10-16T06:59:08.313Z 348 | await page.goto(`/dashboard/checkins/${checkInId}/guest-account`); 2026-10-16T06:59:08.313Z 349 | await expect(page.getByText('Guest Accounts').filter({ visible: true }).first()).toBeVisible(); 2026-10-16T06:59:08.313Z 350 | for (const a of accounts) { 2026-10-16T06:59:08.313Z at /home/ubuntu/regression-runner/repos/dev/hotel-frontend-core/e2e/specs/prd-2026-007-finance.spec.ts:347:46 2026-10-16T06:59:08.313Z attachment #1: screenshot (image/png) ────────────────────────────────────────────────────────── 2026-10-16T06:59:08.313Z test-results/prd-2026-007-finance-PRD-2-911d6-ooking-s-accounts-party-UI--arm/test-failed-1.png 2026-10-16T06:59:08.313Z ──────────────────────────────────────────────────────────────────────────────────────────────── 2026-10-16T06:59:08.313Z Error Context: test-results/prd-2026-007-finance-PRD-2-911d6-ooking-s-accounts-party-UI--arm/error-context.md 2026-10-16T06:59:08.313Z Error Context: test-results/prd-2026-007-finance-PRD-2-911d6-ooking-s-accounts-party-UI--arm/error-context.md 2026-10-16T06:59:08.313Z attachment #4: trace (application/zip) ───────────────────────────────────────────────────────── 2026-10-16T06:59:08.313Z test-results/prd-2026-007-finance-PRD-2-911d6-ooking-s-accounts-party-UI--arm/trace.zip 2026-10-16T06:59:08.313Z Usage: 2026-10-16T06:59:08.313Z pnpm exec playwright show-trace test-results/prd-2026-007-finance-PRD-2-911d6-ooking-s-accounts-party-UI--arm/trace.zip 2026-10-16T06:59:08.313Z ──────────────────────────────────────────────────────────────────────────────────────────────── 2026-10-16T06:59:08.313Z 18) [arm] › e2e/specs/prd-2026-007-lock-move-swap.spec.ts:61:6 › PRD-2026-007 — Move/Swap lock › TC-ARM-140 API: lock then unlock round-trips [lock] 2026-10-16T06:59:08.313Z Error: POST /auth/login → 500: {"statusCode":500,"message":"Something went wrong, please try again later","error":"Internal Server Error","timestamp":"2026-10-16T06:53:30.268Z","path":"/auth/login","requestId":"21efe2c5-4655-4155-ad91-c49be360f22e"} 2026-10-16T06:59:08.314Z at ../fixtures/hotel-session.ts:28 2026-10-16T06:59:08.314Z 26 | }, 2026-10-16T06:59:08.314Z 27 | }); 2026-10-16T06:59:08.314Z > 28 | if (!loginRes.ok()) throw new Error(`POST /auth/login → ${loginRes.status()}: ${await loginRes.text()}`); 2026-10-16T06:59:08.314Z | ^ 2026-10-16T06:59:08.314Z 29 | let auth = (await loginRes.json()) as AuthResponse; 2026-10-16T06:59:08.314Z 30 | await anon.dispose(); 2026-10-16T06:59:08.314Z 31 | if (auth.property?.id !== hotel.id) { 2026-10-16T06:59:08.314Z at hotelToken (/home/ubuntu/regression-runner/repos/dev/hotel-frontend-core/e2e/fixtures/hotel-session.ts:28:28) 2026-10-16T06:59:08.314Z at open (/home/ubuntu/regression-runner/repos/dev/hotel-frontend-core/e2e/fixtures/hotel-session.ts:60:49) 2026-10-16T06:59:08.314Z at hotelApi (/home/ubuntu/regression-runner/repos/dev/hotel-frontend-core/e2e/fixtures/hotel-session.ts:62:14) 2026-10-16T06:59:08.314Z at ArmApi.init (/home/ubuntu/regression-runner/repos/dev/hotel-frontend-core/e2e/fixtures/arm-api.ts:115:14) 2026-10-16T06:59:08.314Z at newArmApi (/home/ubuntu/regression-runner/repos/dev/hotel-frontend-core/e2e/fixtures/arm-api.ts:305:2) 2026-10-16T06:59:08.314Z at /home/ubuntu/regression-runner/repos/dev/hotel-frontend-core/e2e/specs/prd-2026-007-lock-move-swap.spec.ts:31:8 2026-10-16T06:59:08.314Z Error Context: test-results/prd-2026-007-lock-move-swa-b7ba8-en-unlock-round-trips-lock--arm/error-context.md 2026-10-16T06:59:08.314Z Error Context: test-results/prd-2026-007-lock-move-swa-b7ba8-en-unlock-round-trips-lock--arm/error-context.md 2026-10-16T06:59:08.314Z attachment #3: trace (application/zip) ───────────────────────────────────────────────────────── 2026-10-16T06:59:08.314Z test-results/prd-2026-007-lock-move-swa-b7ba8-en-unlock-round-trips-lock--arm/trace.zip 2026-10-16T06:59:08.314Z Usage: 2026-10-16T06:59:08.314Z pnpm exec playwright show-trace test-results/prd-2026-007-lock-move-swa-b7ba8-en-unlock-round-trips-lock--arm/trace.zip 2026-10-16T06:59:08.314Z ──────────────────────────────────────────────────────────────────────────────────────────────── 2026-10-16T06:59:08.314Z 19) [arm] › e2e/specs/prd-2026-007-noshow-cancel.spec.ts:82:6 › PRD-2026-007 — no-show per room › TC-ARM-100 UI: single-room no-show leaves siblings untouched [Must 4/S-11/§6.3] 2026-10-16T06:59:08.314Z Error: POST /auth/login → 500: {"statusCode":500,"message":"Something went wrong, please try again later","error":"Internal Server Error","timestamp":"2026-10-16T06:53:41.436Z","path":"/auth/login","requestId":"74563b4f-73a6-4836-a25c-3ed73491413a"} 2026-10-16T06:59:08.314Z at ../fixtures/hotel-session.ts:28 2026-10-16T06:59:08.314Z 26 | }, 2026-10-16T06:59:08.314Z 27 | }); 2026-10-16T06:59:08.314Z > 28 | if (!loginRes.ok()) throw new Error(`POST /auth/login → ${loginRes.status()}: ${await loginRes.text()}`); 2026-10-16T06:59:08.314Z | ^ 2026-10-16T06:59:08.314Z 29 | let auth = (await loginRes.json()) as AuthResponse; 2026-10-16T06:59:08.314Z 30 | await anon.dispose(); 2026-10-16T06:59:08.314Z 31 | if (auth.property?.id !== hotel.id) { 2026-10-16T06:59:08.314Z at hotelToken (/home/ubuntu/regression-runner/repos/dev/hotel-frontend-core/e2e/fixtures/hotel-session.ts:28:28) 2026-10-16T06:59:08.314Z at open (/home/ubuntu/regression-runner/repos/dev/hotel-frontend-core/e2e/fixtures/hotel-session.ts:60:49) 2026-10-16T06:59:08.314Z at hotelApi (/home/ubuntu/regression-runner/repos/dev/hotel-frontend-core/e2e/fixtures/hotel-session.ts:62:14) 2026-10-16T06:59:08.314Z at ArmApi.init (/home/ubuntu/regression-runner/repos/dev/hotel-frontend-core/e2e/fixtures/arm-api.ts:115:14) 2026-10-16T06:59:08.315Z at newArmApi (/home/ubuntu/regression-runner/repos/dev/hotel-frontend-core/e2e/fixtures/arm-api.ts:305:2) 2026-10-16T06:59:08.315Z at /home/ubuntu/regression-runner/repos/dev/hotel-frontend-core/e2e/specs/prd-2026-007-noshow-cancel.spec.ts:40:8 2026-10-16T06:59:08.315Z Error Context: test-results/prd-2026-007-noshow-cancel-185d7-untouched-Must-4-S-11-§6-3--arm/error-context.md 2026-10-16T06:59:08.315Z Error Context: test-results/prd-2026-007-noshow-cancel-185d7-untouched-Must-4-S-11-§6-3--arm/error-context.md 2026-10-16T06:59:08.315Z attachment #3: trace (application/zip) ───────────────────────────────────────────────────────── 2026-10-16T06:59:08.315Z test-results/prd-2026-007-noshow-cancel-185d7-untouched-Must-4-S-11-§6-3--arm/trace.zip 2026-10-16T06:59:08.315Z Usage: 2026-10-16T06:59:08.315Z pnpm exec playwright show-trace test-results/prd-2026-007-noshow-cancel-185d7-untouched-Must-4-S-11-§6-3--arm/trace.zip 2026-10-16T06:59:08.315Z ──────────────────────────────────────────────────────────────────────────────────────────────── 2026-10-16T06:59:08.315Z 20) [arm] › e2e/specs/prd-2026-007-partial-checkin.spec.ts:87:6 › PRD-2026-007 — partial check-in › TC-ARM-070 modal selects 2 of 4 rooms and hands them to the wizard URL [Must 3/S-12] 2026-10-16T06:59:08.315Z Error: POST /auth/login → 500: {"statusCode":500,"message":"Something went wrong, please try again later","error":"Internal Server Error","timestamp":"2026-10-16T06:53:41.414Z","path":"/auth/login","requestId":"2e3d0ee0-31c9-4f86-be93-5a6b4dc478fa"} 2026-10-16T06:59:08.315Z at ../fixtures/hotel-session.ts:28 2026-10-16T06:59:08.315Z 26 | }, 2026-10-16T06:59:08.315Z 27 | }); 2026-10-16T06:59:08.315Z > 28 | if (!loginRes.ok()) throw new Error(`POST /auth/login → ${loginRes.status()}: ${await loginRes.text()}`); 2026-10-16T06:59:08.315Z | ^ 2026-10-16T06:59:08.315Z 29 | let auth = (await loginRes.json()) as AuthResponse; 2026-10-16T06:59:08.315Z 30 | await anon.dispose(); 2026-10-16T06:59:08.315Z 31 | if (auth.property?.id !== hotel.id) { 2026-10-16T06:59:08.315Z at hotelToken (/home/ubuntu/regression-runner/repos/dev/hotel-frontend-core/e2e/fixtures/hotel-session.ts:28:28) 2026-10-16T06:59:08.315Z at open (/home/ubuntu/regression-runner/repos/dev/hotel-frontend-core/e2e/fixtures/hotel-session.ts:60:49) 2026-10-16T06:59:08.315Z at hotelApi (/home/ubuntu/regression-runner/repos/dev/hotel-frontend-core/e2e/fixtures/hotel-session.ts:62:14) 2026-10-16T06:59:08.315Z at ArmApi.init (/home/ubuntu/regression-runner/repos/dev/hotel-frontend-core/e2e/fixtures/arm-api.ts:115:14) 2026-10-16T06:59:08.315Z at newArmApi (/home/ubuntu/regression-runner/repos/dev/hotel-frontend-core/e2e/fixtures/arm-api.ts:305:2) 2026-10-16T06:59:08.315Z at /home/ubuntu/regression-runner/repos/dev/hotel-frontend-core/e2e/specs/prd-2026-007-partial-checkin.spec.ts:37:8 2026-10-16T06:59:08.315Z Error Context: test-results/prd-2026-007-partial-check-71800-the-wizard-URL-Must-3-S-12--arm/error-context.md 2026-10-16T06:59:08.315Z Error Context: test-results/prd-2026-007-partial-check-71800-the-wizard-URL-Must-3-S-12--arm/error-context.md 2026-10-16T06:59:08.315Z attachment #3: trace (application/zip) ───────────────────────────────────────────────────────── 2026-10-16T06:59:08.315Z test-results/prd-2026-007-partial-check-71800-the-wizard-URL-Must-3-S-12--arm/trace.zip 2026-10-16T06:59:08.315Z Usage: 2026-10-16T06:59:08.315Z pnpm exec playwright show-trace test-results/prd-2026-007-partial-check-71800-the-wizard-URL-Must-3-S-12--arm/trace.zip 2026-10-16T06:59:08.315Z ──────────────────────────────────────────────────────────────────────────────────────────────── 2026-10-16T06:59:08.315Z 21) [arm] › e2e/specs/prd-2026-007-rbac-ux.spec.ts:92:6 › PRD-2026-007 — full-permission UI affordances (positive RBAC) › TC-ARM-303 owner-role kebab exposes all ARM actions on an UPCOMING booking [§10] 2026-10-16T06:59:08.315Z Error: createReservation → 500: {"statusCode":500,"message":"Something went wrong, please try again later","error":"Internal Server Error","timestamp":"2026-10-16T06:54:01.476Z","path":"/reservations","requestId":"fe21a95a-6eed-4e33-997e-becf62123f72"} 2026-10-16T06:59:08.315Z expect(received).toBeTruthy() 2026-10-16T06:59:08.316Z Received: false 2026-10-16T06:59:08.316Z at ../fixtures/arm-api.ts:154 2026-10-16T06:59:08.316Z 152 | }); 2026-10-16T06:59:08.316Z 153 | const text = await res.text(); 2026-10-16T06:59:08.316Z > 154 | expect(res.ok(), `createReservation → ${res.status()}: ${text.slice(0, 500)}`).toBeTruthy(); 2026-10-16T06:59:08.316Z | ^ 2026-10-16T06:59:08.316Z 155 | const body = JSON.parse(text); 2026-10-16T06:59:08.316Z 156 | const checkInId: string = body.id ?? body.checkInId ?? body.data?.id; 2026-10-16T06:59:08.316Z 157 | expect(checkInId, `reservation id missing in response: ${text.slice(0, 300)}`).toBeTruthy(); 2026-10-16T06:59:08.316Z at ArmApi.createReservation (/home/ubuntu/regression-runner/repos/dev/hotel-frontend-core/e2e/fixtures/arm-api.ts:154:82) 2026-10-16T06:59:08.316Z at ArmApi.api.createReservation (/home/ubuntu/regression-runner/repos/dev/hotel-frontend-core/e2e/fixtures/arm-ui-w4.ts:43:12) 2026-10-16T06:59:08.316Z at /home/ubuntu/regression-runner/repos/dev/hotel-frontend-core/e2e/specs/prd-2026-007-rbac-ux.spec.ts:94:25 2026-10-16T06:59:08.316Z attachment #1: screenshot (image/png) ────────────────────────────────────────────────────────── 2026-10-16T06:59:08.316Z test-results/prd-2026-007-rbac-ux-PRD-2-b81f2-on-an-UPCOMING-booking-§10--arm/test-failed-1.png 2026-10-16T06:59:08.316Z ──────────────────────────────────────────────────────────────────────────────────────────────── 2026-10-16T06:59:08.316Z Error Context: test-results/prd-2026-007-rbac-ux-PRD-2-b81f2-on-an-UPCOMING-booking-§10--arm/error-context.md 2026-10-16T06:59:08.316Z Error Context: test-results/prd-2026-007-rbac-ux-PRD-2-b81f2-on-an-UPCOMING-booking-§10--arm/error-context.md 2026-10-16T06:59:08.316Z attachment #4: trace (application/zip) ───────────────────────────────────────────────────────── 2026-10-16T06:59:08.316Z test-results/prd-2026-007-rbac-ux-PRD-2-b81f2-on-an-UPCOMING-booking-§10--arm/trace.zip 2026-10-16T06:59:08.316Z Usage: 2026-10-16T06:59:08.317Z pnpm exec playwright show-trace test-results/prd-2026-007-rbac-ux-PRD-2-b81f2-on-an-UPCOMING-booking-§10--arm/trace.zip 2026-10-16T06:59:08.317Z ──────────────────────────────────────────────────────────────────────────────────────────────── 2026-10-16T06:59:08.317Z 22) [arm] › e2e/specs/prd-2026-007-room-cards.spec.ts:108:6 › PRD-2026-007 — room cards on Booking Details › TC-ARM-042 CHECKED_IN room near/after its checkout time shows checkout-due yellow, then overdue orange [Must 2] 2026-10-16T06:59:08.317Z Error: createReservation → 500: {"statusCode":500,"message":"Something went wrong, please try again later","error":"Internal Server Error","timestamp":"2026-10-16T06:54:40.677Z","path":"/reservations","requestId":"65f8fe94-20bd-44b1-a2c5-d83af48a07d7"} 2026-10-16T06:59:08.317Z expect(received).toBeTruthy() 2026-10-16T06:59:08.317Z Received: false 2026-10-16T06:59:08.317Z at ../fixtures/arm-api.ts:154 2026-10-16T06:59:08.317Z 152 | }); 2026-10-16T06:59:08.317Z 153 | const text = await res.text(); 2026-10-16T06:59:08.317Z > 154 | expect(res.ok(), `createReservation → ${res.status()}: ${text.slice(0, 500)}`).toBeTruthy(); 2026-10-16T06:59:08.317Z | ^ 2026-10-16T06:59:08.317Z 155 | const body = JSON.parse(text); 2026-10-16T06:59:08.317Z 156 | const checkInId: string = body.id ?? body.checkInId ?? body.data?.id; 2026-10-16T06:59:08.317Z 157 | expect(checkInId, `reservation id missing in response: ${text.slice(0, 300)}`).toBeTruthy(); 2026-10-16T06:59:08.317Z at ArmApi.createReservation (/home/ubuntu/regression-runner/repos/dev/hotel-frontend-core/e2e/fixtures/arm-api.ts:154:82) 2026-10-16T06:59:08.317Z at /home/ubuntu/regression-runner/repos/dev/hotel-frontend-core/e2e/specs/prd-2026-007-room-cards.spec.ts:119:15 2026-10-16T06:59:08.317Z attachment #1: screenshot (image/png) ────────────────────────────────────────────────────────── 2026-10-16T06:59:08.317Z test-results/prd-2026-007-room-cards-PR-84ced-then-overdue-orange-Must-2--arm/test-failed-1.png 2026-10-16T06:59:08.317Z ──────────────────────────────────────────────────────────────────────────────────────────────── 2026-10-16T06:59:08.317Z Error Context: test-results/prd-2026-007-room-cards-PR-84ced-then-overdue-orange-Must-2--arm/error-context.md 2026-10-16T06:59:08.317Z Error Context: test-results/prd-2026-007-room-cards-PR-84ced-then-overdue-orange-Must-2--arm/error-context.md 2026-10-16T06:59:08.317Z attachment #4: trace (application/zip) ───────────────────────────────────────────────────────── 2026-10-16T06:59:08.317Z test-results/prd-2026-007-room-cards-PR-84ced-then-overdue-orange-Must-2--arm/trace.zip 2026-10-16T06:59:08.317Z Usage: 2026-10-16T06:59:08.317Z pnpm exec playwright show-trace test-results/prd-2026-007-room-cards-PR-84ced-then-overdue-orange-Must-2--arm/trace.zip 2026-10-16T06:59:08.317Z ──────────────────────────────────────────────────────────────────────────────────────────────── 2026-10-16T06:59:08.317Z 23) [arm] › e2e/specs/prd-2026-007-room-cards.spec.ts:326:6 › PRD-2026-007 — room cards on Booking Details › TC-ARM-059 max-inventory booking renders its card list within 2s of page load [S-13] 2026-10-16T06:59:08.317Z Error: room cards must hydrate within 2s 2026-10-16T06:59:08.317Z expect(received).toBeLessThan(expected) 2026-10-16T06:59:08.317Z Expected: < 2000 2026-10-16T06:59:08.318Z Received: 2165 2026-10-16T06:59:08.318Z 333 | const elapsed = Date.now() - t0; 2026-10-16T06:59:08.318Z 334 | test.info().annotations.push({ type: 'note', description: `[TC-ARM-059] first room card visible ${elapsed}ms after navigation settled (${rooms.length} rooms)` }); 2026-10-16T06:59:08.318Z > 335 | expect(elapsed, 'room cards must hydrate within 2s').toBeLessThan(2000); 2026-10-16T06:59:08.318Z | ^ 2026-10-16T06:59:08.318Z 336 | }); 2026-10-16T06:59:08.318Z 337 | 2026-10-16T06:59:08.318Z 338 | test('TC-ARM-060 no console errors or 5xx network responses on the details page [quality gate]', async ({ authedPage: page }) => { 2026-10-16T06:59:08.318Z at /home/ubuntu/regression-runner/repos/dev/hotel-frontend-core/e2e/specs/prd-2026-007-room-cards.spec.ts:335:56 2026-10-16T06:59:08.318Z attachment #1: screenshot (image/png) ────────────────────────────────────────────────────────── 2026-10-16T06:59:08.318Z test-results/prd-2026-007-room-cards-PR-ca9f0-ithin-2s-of-page-load-S-13--arm/test-failed-1.png 2026-10-16T06:59:08.318Z ──────────────────────────────────────────────────────────────────────────────────────────────── 2026-10-16T06:59:08.318Z Error Context: test-results/prd-2026-007-room-cards-PR-ca9f0-ithin-2s-of-page-load-S-13--arm/error-context.md 2026-10-16T06:59:08.318Z Error Context: test-results/prd-2026-007-room-cards-PR-ca9f0-ithin-2s-of-page-load-S-13--arm/error-context.md 2026-10-16T06:59:08.318Z attachment #4: trace (application/zip) ───────────────────────────────────────────────────────── 2026-10-16T06:59:08.318Z test-results/prd-2026-007-room-cards-PR-ca9f0-ithin-2s-of-page-load-S-13--arm/trace.zip 2026-10-16T06:59:08.318Z Usage: 2026-10-16T06:59:08.318Z pnpm exec playwright show-trace test-results/prd-2026-007-room-cards-PR-ca9f0-ithin-2s-of-page-load-S-13--arm/trace.zip 2026-10-16T06:59:08.318Z ──────────────────────────────────────────────────────────────────────────────────────────────── 2026-10-16T06:59:08.318Z 24) [arm] › e2e/specs/prd-2026-007-slots-multicycle.spec.ts:74:6 › PRD-2026-007 — default slot guarantee (CR-1) › TC-ARM-170 new reservation is backed by exactly one slot grouping all rooms [CR-1/Must 13] 2026-10-16T06:59:08.318Z Error: createReservation → 500: {"statusCode":500,"message":"Something went wrong, please try again later","error":"Internal Server Error","timestamp":"2026-10-16T06:54:01.673Z","path":"/reservations","requestId":"9a67babd-4e90-4883-87f9-e20440df6d18"} 2026-10-16T06:59:08.318Z expect(received).toBeTruthy() 2026-10-16T06:59:08.318Z Received: false 2026-10-16T06:59:08.318Z at ../fixtures/arm-api.ts:154 2026-10-16T06:59:08.318Z 152 | }); 2026-10-16T06:59:08.318Z 153 | const text = await res.text(); 2026-10-16T06:59:08.318Z > 154 | expect(res.ok(), `createReservation → ${res.status()}: ${text.slice(0, 500)}`).toBeTruthy(); 2026-10-16T06:59:08.318Z | ^ 2026-10-16T06:59:08.318Z 155 | const body = JSON.parse(text); 2026-10-16T06:59:08.318Z 156 | const checkInId: string = body.id ?? body.checkInId ?? body.data?.id; 2026-10-16T06:59:08.318Z 157 | expect(checkInId, `reservation id missing in response: ${text.slice(0, 300)}`).toBeTruthy(); 2026-10-16T06:59:08.318Z at ArmApi.createReservation (/home/ubuntu/regression-runner/repos/dev/hotel-frontend-core/e2e/fixtures/arm-api.ts:154:82) 2026-10-16T06:59:08.318Z at createOnFreeWindow (/home/ubuntu/regression-runner/repos/dev/hotel-frontend-core/e2e/fixtures/w5-helpers.ts:25:16) 2026-10-16T06:59:08.318Z at /home/ubuntu/regression-runner/repos/dev/hotel-frontend-core/e2e/specs/prd-2026-007-slots-multicycle.spec.ts:76:25 2026-10-16T06:59:08.318Z Error Context: test-results/prd-2026-007-slots-multicy-8794b-ing-all-rooms-CR-1-Must-13--arm/error-context.md 2026-10-16T06:59:08.319Z Error Context: test-results/prd-2026-007-slots-multicy-8794b-ing-all-rooms-CR-1-Must-13--arm/error-context.md 2026-10-16T06:59:08.319Z attachment #3: trace (application/zip) ───────────────────────────────────────────────────────── 2026-10-16T06:59:08.319Z test-results/prd-2026-007-slots-multicy-8794b-ing-all-rooms-CR-1-Must-13--arm/trace.zip 2026-10-16T06:59:08.319Z Usage: 2026-10-16T06:59:08.319Z pnpm exec playwright show-trace test-results/prd-2026-007-slots-multicy-8794b-ing-all-rooms-CR-1-Must-13--arm/trace.zip 2026-10-16T06:59:08.319Z ──────────────────────────────────────────────────────────────────────────────────────────────── 2026-10-16T06:59:08.319Z 25) [arm] › e2e/specs/prd-2026-007-slots-multicycle.spec.ts:100:6 › PRD-2026-007 — default slot guarantee (CR-1) › TC-ARM-173 mutation response slots[] carries window + roomCount and no name/status [CR-1/S-32] 2026-10-16T06:59:08.319Z Error: createReservation → 500: {"statusCode":500,"message":"Something went wrong, please try again later","error":"Internal Server Error","timestamp":"2026-10-16T06:54:40.667Z","path":"/reservations","requestId":"1b3cca2b-f06d-4db3-bf99-c26707bf93f6"} 2026-10-16T06:59:08.319Z expect(received).toBeTruthy() 2026-10-16T06:59:08.319Z Received: false 2026-10-16T06:59:08.319Z at ../fixtures/arm-api.ts:154 2026-10-16T06:59:08.319Z 152 | }); 2026-10-16T06:59:08.319Z 153 | const text = await res.text(); 2026-10-16T06:59:08.319Z > 154 | expect(res.ok(), `createReservation → ${res.status()}: ${text.slice(0, 500)}`).toBeTruthy(); 2026-10-16T06:59:08.319Z | ^ 2026-10-16T06:59:08.319Z 155 | const body = JSON.parse(text); 2026-10-16T06:59:08.319Z 156 | const checkInId: string = body.id ?? body.checkInId ?? body.data?.id; 2026-10-16T06:59:08.319Z 157 | expect(checkInId, `reservation id missing in response: ${text.slice(0, 300)}`).toBeTruthy(); 2026-10-16T06:59:08.319Z at ArmApi.createReservation (/home/ubuntu/regression-runner/repos/dev/hotel-frontend-core/e2e/fixtures/arm-api.ts:154:82) 2026-10-16T06:59:08.319Z at createOnFreeWindow (/home/ubuntu/regression-runner/repos/dev/hotel-frontend-core/e2e/fixtures/w5-helpers.ts:25:16) 2026-10-16T06:59:08.319Z at /home/ubuntu/regression-runner/repos/dev/hotel-frontend-core/e2e/specs/prd-2026-007-slots-multicycle.spec.ts:103:25 2026-10-16T06:59:08.319Z Error Context: test-results/prd-2026-007-slots-multicy-13231-d-no-name-status-CR-1-S-32--arm/error-context.md 2026-10-16T06:59:08.319Z Error Context: test-results/prd-2026-007-slots-multicy-13231-d-no-name-status-CR-1-S-32--arm/error-context.md 2026-10-16T06:59:08.319Z attachment #3: trace (application/zip) ───────────────────────────────────────────────────────── 2026-10-16T06:59:08.319Z test-results/prd-2026-007-slots-multicy-13231-d-no-name-status-CR-1-S-32--arm/trace.zip 2026-10-16T06:59:08.319Z Usage: 2026-10-16T06:59:08.319Z pnpm exec playwright show-trace test-results/prd-2026-007-slots-multicy-13231-d-no-name-status-CR-1-S-32--arm/trace.zip 2026-10-16T06:59:08.319Z ──────────────────────────────────────────────────────────────────────────────────────────────── 2026-10-16T06:59:08.319Z 26) [arm] › e2e/specs/prd-2026-007-slots-multicycle.spec.ts:211:6 › PRD-2026-007 — multi-cycle via re-check-in (G7/OQ-6) › TC-ARM-181 multi-room re-check-in (2 rooms into the new cycle) [G7] 2026-10-16T06:59:08.319Z Error: https://api-core.digistays.com/checkins/dc57949f-1fce-407c-afc1-fe0113387d61/rooms/check-out → 500: {"statusCode":500,"message":"Something went wrong, please try again later","error":"Internal Server Error","timestamp":"2026-10-16T06:56:31.327Z","path":"/checkins/dc57949f-1fce-407c-afc1-fe0113387d61/rooms/check-out","requestId":"dc411477-87b8-4b73-82fc-6aa9c58dbc07"} 2026-10-16T06:59:08.320Z expect(received).toBeTruthy() 2026-10-16T06:59:08.320Z Received: false 2026-10-16T06:59:08.320Z at ../fixtures/arm-api.ts:268 2026-10-16T06:59:08.320Z 266 | const res = await p; 2026-10-16T06:59:08.320Z 267 | const text = await res.text(); 2026-10-16T06:59:08.320Z > 268 | expect(res.ok(), `${res.url()} → ${res.status()}: ${text.slice(0, 500)}`).toBeTruthy(); 2026-10-16T06:59:08.320Z | ^ 2026-10-16T06:59:08.320Z 269 | try { 2026-10-16T06:59:08.320Z 270 | return JSON.parse(text) as ArmCheckinPayload; 2026-10-16T06:59:08.320Z 271 | } catch { 2026-10-16T06:59:08.320Z at ArmApi.ok (/home/ubuntu/regression-runner/repos/dev/hotel-frontend-core/e2e/fixtures/arm-api.ts:268:77) 2026-10-16T06:59:08.320Z at twoCycles (/home/ubuntu/regression-runner/repos/dev/hotel-frontend-core/e2e/specs/prd-2026-007-slots-multicycle.spec.ts:62:2) 2026-10-16T06:59:08.320Z at /home/ubuntu/regression-runner/repos/dev/hotel-frontend-core/e2e/specs/prd-2026-007-slots-multicycle.spec.ts:212:45 2026-10-16T06:59:08.320Z Error Context: test-results/prd-2026-007-slots-multicy-c2626-ooms-into-the-new-cycle-G7--arm/error-context.md 2026-10-16T06:59:08.320Z Error Context: test-results/prd-2026-007-slots-multicy-c2626-ooms-into-the-new-cycle-G7--arm/error-context.md 2026-10-16T06:59:08.320Z attachment #3: trace (application/zip) ───────────────────────────────────────────────────────── 2026-10-16T06:59:08.320Z test-results/prd-2026-007-slots-multicy-c2626-ooms-into-the-new-cycle-G7--arm/trace.zip 2026-10-16T06:59:08.320Z Usage: 2026-10-16T06:59:08.320Z pnpm exec playwright show-trace test-results/prd-2026-007-slots-multicy-c2626-ooms-into-the-new-cycle-G7--arm/trace.zip 2026-10-16T06:59:08.320Z ──────────────────────────────────────────────────────────────────────────────────────────────── 2026-10-16T06:59:08.320Z 27) [arm] › e2e/specs/prd-2026-007-status-aggregation.spec.ts:143:7 › PRD-2026-007 — CR-2 status aggregation (API) › TC-ARM-008 1 CHECKED_OUT + 1 CHECKED_IN → PARTIALLY_CHECKED_OUT (stays open) [CR-2/CR-3/S-31] 2026-10-16T06:59:08.320Z Error: createReservation → 500: {"statusCode":500,"message":"Something went wrong, please try again later","error":"Internal Server Error","timestamp":"2026-10-16T06:56:04.542Z","path":"/reservations","requestId":"0510cab5-6883-48e4-bb8d-8233ce4e4533"} 2026-10-16T06:59:08.320Z expect(received).toBeTruthy() 2026-10-16T06:59:08.320Z Received: false 2026-10-16T06:59:08.320Z at ../fixtures/arm-api.ts:154 2026-10-16T06:59:08.320Z 152 | }); 2026-10-16T06:59:08.320Z 153 | const text = await res.text(); 2026-10-16T06:59:08.320Z > 154 | expect(res.ok(), `createReservation → ${res.status()}: ${text.slice(0, 500)}`).toBeTruthy(); 2026-10-16T06:59:08.320Z | ^ 2026-10-16T06:59:08.320Z 155 | const body = JSON.parse(text); 2026-10-16T06:59:08.320Z 156 | const checkInId: string = body.id ?? body.checkInId ?? body.data?.id; 2026-10-16T06:59:08.320Z 157 | expect(checkInId, `reservation id missing in response: ${text.slice(0, 300)}`).toBeTruthy(); 2026-10-16T06:59:08.320Z at ArmApi.createReservation (/home/ubuntu/regression-runner/repos/dev/hotel-frontend-core/e2e/fixtures/arm-api.ts:154:82) 2026-10-16T06:59:08.320Z at createOnFreeWindow (/home/ubuntu/regression-runner/repos/dev/hotel-frontend-core/e2e/fixtures/arm-ui-w3.ts:39:17) 2026-10-16T06:59:08.320Z at run (/home/ubuntu/regression-runner/repos/dev/hotel-frontend-core/e2e/specs/prd-2026-007-status-aggregation.spec.ts:117:24) 2026-10-16T06:59:08.321Z at /home/ubuntu/regression-runner/repos/dev/hotel-frontend-core/e2e/specs/prd-2026-007-status-aggregation.spec.ts:144:26 2026-10-16T06:59:08.321Z Error Context: test-results/prd-2026-007-status-aggreg-51d22--stays-open-CR-2-CR-3-S-31--arm/error-context.md 2026-10-16T06:59:08.321Z Error Context: test-results/prd-2026-007-status-aggreg-51d22--stays-open-CR-2-CR-3-S-31--arm/error-context.md 2026-10-16T06:59:08.321Z attachment #3: trace (application/zip) ───────────────────────────────────────────────────────── 2026-10-16T06:59:08.321Z test-results/prd-2026-007-status-aggreg-51d22--stays-open-CR-2-CR-3-S-31--arm/trace.zip 2026-10-16T06:59:08.321Z Usage: 2026-10-16T06:59:08.321Z pnpm exec playwright show-trace test-results/prd-2026-007-status-aggreg-51d22--stays-open-CR-2-CR-3-S-31--arm/trace.zip 2026-10-16T06:59:08.321Z ──────────────────────────────────────────────────────────────────────────────────────────────── 2026-10-16T06:59:08.321Z 28) [arm] › e2e/specs/prd-2026-007-stay-view.spec.ts:271:6 › PRD-2026-007 — stay view blocks per room/slot › TC-ARM-242 stay view reflects a mutation after reload (no stale grid) [freshness] 2026-10-16T06:59:08.321Z Error: createReservation → 500: {"statusCode":500,"message":"Something went wrong, please try again later","error":"Internal Server Error","timestamp":"2026-10-16T06:57:35.768Z","path":"/reservations","requestId":"9f0264d0-e156-490f-bb06-48547031be8a"} 2026-10-16T06:59:08.321Z expect(received).toBeTruthy() 2026-10-16T06:59:08.321Z Received: false 2026-10-16T06:59:08.321Z at ../fixtures/arm-api.ts:154 2026-10-16T06:59:08.321Z 152 | }); 2026-10-16T06:59:08.321Z 153 | const text = await res.text(); 2026-10-16T06:59:08.321Z > 154 | expect(res.ok(), `createReservation → ${res.status()}: ${text.slice(0, 500)}`).toBeTruthy(); 2026-10-16T06:59:08.321Z | ^ 2026-10-16T06:59:08.321Z 155 | const body = JSON.parse(text); 2026-10-16T06:59:08.321Z 156 | const checkInId: string = body.id ?? body.checkInId ?? body.data?.id; 2026-10-16T06:59:08.321Z 157 | expect(checkInId, `reservation id missing in response: ${text.slice(0, 300)}`).toBeTruthy(); 2026-10-16T06:59:08.321Z at ArmApi.createReservation (/home/ubuntu/regression-runner/repos/dev/hotel-frontend-core/e2e/fixtures/arm-api.ts:154:82) 2026-10-16T06:59:08.321Z at /home/ubuntu/regression-runner/repos/dev/hotel-frontend-core/e2e/specs/prd-2026-007-stay-view.spec.ts:272:36 2026-10-16T06:59:08.321Z attachment #1: screenshot (image/png) ────────────────────────────────────────────────────────── 2026-10-16T06:59:08.321Z test-results/prd-2026-007-stay-view-PRD-41762-ad-no-stale-grid-freshness--arm/test-failed-1.png 2026-10-16T06:59:08.321Z ──────────────────────────────────────────────────────────────────────────────────────────────── 2026-10-16T06:59:08.321Z Error Context: test-results/prd-2026-007-stay-view-PRD-41762-ad-no-stale-grid-freshness--arm/error-context.md 2026-10-16T06:59:08.321Z Error Context: test-results/prd-2026-007-stay-view-PRD-41762-ad-no-stale-grid-freshness--arm/error-context.md 2026-10-16T06:59:08.321Z attachment #4: trace (application/zip) ───────────────────────────────────────────────────────── 2026-10-16T06:59:08.321Z test-results/prd-2026-007-stay-view-PRD-41762-ad-no-stale-grid-freshness--arm/trace.zip 2026-10-16T06:59:08.321Z Usage: 2026-10-16T06:59:08.321Z pnpm exec playwright show-trace test-results/prd-2026-007-stay-view-PRD-41762-ad-no-stale-grid-freshness--arm/trace.zip 2026-10-16T06:59:08.321Z ──────────────────────────────────────────────────────────────────────────────────────────────── 2026-10-16T06:59:08.321Z 29) [arm] › e2e/specs/prd-2026-007-stay-view.spec.ts:353:6 › PRD-2026-007 — stay view blocks per room/slot › TC-ARM-248 date navigation shifts the visible window and keeps blocks aligned [stay view] 2026-10-16T06:59:08.322Z Error: block starts inside its check-in day column 2026-10-16T06:59:08.322Z expect(received).toBeLessThan(expected) 2026-10-16T06:59:08.322Z Expected: < 761.5625 2026-10-16T06:59:08.322Z Received: 769.1875 2026-10-16T06:59:08.322Z 372 | const cellLeft = head.x + head.width / 2 - 93 / 2; 2026-10-16T06:59:08.322Z 373 | expect(box.x, 'block starts inside its check-in day column').toBeGreaterThanOrEqual(cellLeft - 2); 2026-10-16T06:59:08.322Z > 374 | expect(box.x, 'block starts inside its check-in day column').toBeLessThan(cellLeft + 93); 2026-10-16T06:59:08.322Z | ^ 2026-10-16T06:59:08.322Z 375 | } 2026-10-16T06:59:08.322Z 376 | }); 2026-10-16T06:59:08.322Z 377 | 2026-10-16T06:59:08.322Z at /home/ubuntu/regression-runner/repos/dev/hotel-frontend-core/e2e/specs/prd-2026-007-stay-view.spec.ts:374:65 2026-10-16T06:59:08.322Z attachment #1: screenshot (image/png) ────────────────────────────────────────────────────────── 2026-10-16T06:59:08.322Z test-results/prd-2026-007-stay-view-PRD-76d9a-s-blocks-aligned-stay-view--arm/test-failed-1.png 2026-10-16T06:59:08.322Z ──────────────────────────────────────────────────────────────────────────────────────────────── 2026-10-16T06:59:08.322Z Error Context: test-results/prd-2026-007-stay-view-PRD-76d9a-s-blocks-aligned-stay-view--arm/error-context.md 2026-10-16T06:59:08.322Z Error Context: test-results/prd-2026-007-stay-view-PRD-76d9a-s-blocks-aligned-stay-view--arm/error-context.md 2026-10-16T06:59:08.322Z attachment #4: trace (application/zip) ───────────────────────────────────────────────────────── 2026-10-16T06:59:08.322Z test-results/prd-2026-007-stay-view-PRD-76d9a-s-blocks-aligned-stay-view--arm/trace.zip 2026-10-16T06:59:08.322Z Usage: 2026-10-16T06:59:08.322Z pnpm exec playwright show-trace test-results/prd-2026-007-stay-view-PRD-76d9a-s-blocks-aligned-stay-view--arm/trace.zip 2026-10-16T06:59:08.322Z ──────────────────────────────────────────────────────────────────────────────────────────────── 2026-10-16T06:59:08.322Z 30) [arm] › e2e/specs/prd-2026-007-stay-view.spec.ts:378:6 › PRD-2026-007 — stay view blocks per room/slot › TC-ARM-249 block spans exactly its slot’s day-cells (per-cell boundary audit) [slots] 2026-10-16T06:59:08.322Z Error: starts in arrival cell 2026-10-16T06:59:08.322Z expect(received).toBeLessThan(expected) 2026-10-16T06:59:08.322Z Expected: < 761.5625 2026-10-16T06:59:08.322Z Received: 769.1875 2026-10-16T06:59:08.322Z 397 | // The block starts in the arrival day's cell and ends in the departure day's cell. 2026-10-16T06:59:08.322Z 398 | expect(box.x, 'starts in arrival cell').toBeGreaterThanOrEqual(inLeft - 2); 2026-10-16T06:59:08.323Z > 399 | expect(box.x, 'starts in arrival cell').toBeLessThan(inLeft + w); 2026-10-16T06:59:08.323Z | ^ 2026-10-16T06:59:08.323Z 400 | const right = box.x + box.width; 2026-10-16T06:59:08.323Z 401 | expect(right, 'ends in departure cell').toBeGreaterThan(outLeft); 2026-10-16T06:59:08.323Z 402 | expect(right, 'ends in departure cell').toBeLessThanOrEqual(outLeft + w + 2); 2026-10-16T06:59:08.323Z at /home/ubuntu/regression-runner/repos/dev/hotel-frontend-core/e2e/specs/prd-2026-007-stay-view.spec.ts:399:44 2026-10-16T06:59:08.323Z attachment #1: screenshot (image/png) ────────────────────────────────────────────────────────── 2026-10-16T06:59:08.323Z test-results/prd-2026-007-stay-view-PRD-b430a--cell-boundary-audit-slots--arm/test-failed-1.png 2026-10-16T06:59:08.323Z ──────────────────────────────────────────────────────────────────────────────────────────────── 2026-10-16T06:59:08.323Z Error Context: test-results/prd-2026-007-stay-view-PRD-b430a--cell-boundary-audit-slots--arm/error-context.md 2026-10-16T06:59:08.323Z Error Context: test-results/prd-2026-007-stay-view-PRD-b430a--cell-boundary-audit-slots--arm/error-context.md 2026-10-16T06:59:08.323Z attachment #4: trace (application/zip) ───────────────────────────────────────────────────────── 2026-10-16T06:59:08.323Z test-results/prd-2026-007-stay-view-PRD-b430a--cell-boundary-audit-slots--arm/trace.zip 2026-10-16T06:59:08.323Z Usage: 2026-10-16T06:59:08.323Z pnpm exec playwright show-trace test-results/prd-2026-007-stay-view-PRD-b430a--cell-boundary-audit-slots--arm/trace.zip 2026-10-16T06:59:08.323Z ──────────────────────────────────────────────────────────────────────────────────────────────── 2026-10-16T06:59:08.323Z 30 failed 2026-10-16T06:59:08.323Z [chromium] › e2e/specs/checkin-id-per-adult.spec.ts:53:6 › One ID per adult — check-in form › TC-IDPA-UI-1 the Advanced settings switch saves the rule for the hotel 2026-10-16T06:59:08.323Z [chromium] › e2e/specs/prd-2026-005-active-template.spec.ts:61:6 › PRD-2026-005 — Active custom template wins › TC-PRD-090 assigning a custom template makes regenerated PDF use it 2026-10-16T06:59:08.323Z [chromium] › e2e/specs/prd-2026-005-auto-triggers.spec.ts:8:6 › PRD-2026-005 — Auto-Triggers › TC-PRD-030/031 toggle Room Check-Out persists across reload 2026-10-16T06:59:08.323Z [chromium] › e2e/specs/prd-2026-005-deep-verification.spec.ts:65:6 › PRD-2026-005 — deep verification › TC-PRD-070 IGST selection survives save → backend GET returns taxMode=IGST 2026-10-16T06:59:08.323Z [chromium] › e2e/specs/prd-2026-005-deep-verification.spec.ts:130:7 › PRD-2026-005 — deep verification › TC-PRD-071/CLASSIC CLASSIC invoice PDF prints primary bank account block 2026-10-16T06:59:08.323Z [chromium] › e2e/specs/prd-2026-005-deep-verification.spec.ts:130:7 › PRD-2026-005 — deep verification › TC-PRD-071/MODERN MODERN invoice PDF prints primary bank account block 2026-10-16T06:59:08.323Z [chromium] › e2e/specs/prd-2026-005-deep-verification.spec.ts:130:7 › PRD-2026-005 — deep verification › TC-PRD-071/MODERN_BW MODERN_BW invoice PDF prints primary bank account block 2026-10-16T06:59:08.323Z [chromium] › e2e/specs/prd-2026-005-deep-verification.spec.ts:179:6 › PRD-2026-005 — deep verification › TC-PRD-073 Invoice PDF column header reflects persisted taxMode (IGST) 2026-10-16T06:59:08.323Z [chromium] › e2e/specs/prd-2026-005-deep-verification.spec.ts:239:6 › PRD-2026-005 — deep verification › TC-PRD-074 HSN/SAC card change propagates to regenerated invoice PDF 2026-10-16T06:59:08.323Z [chromium] › e2e/specs/prd-2026-005-deep-verification.spec.ts:297:6 › PRD-2026-005 — deep verification › TC-PRD-072 Credit Note PDF carries the issued CN number in text 2026-10-16T06:59:08.323Z [chromium] › e2e/specs/prd-2026-005-supplementary-docs.spec.ts:47:6 › PRD-2026-005 — Supplementary documents › TC-PRD-050 Generate dropdown lists all three doc types 2026-10-16T06:59:08.323Z [chromium] › e2e/specs/reservation-unassign.spec.ts:8:5 › TC-UNASSIGN-MONEY-1 frees and returns a reservation room without changing its money 2026-10-16T06:59:08.323Z [chromium] › e2e/specs/revenue-guardrail-removal.spec.ts:23:5 › TC-REV-GUARD-1 clearing both configured limits removes the guardrail 2026-10-16T06:59:08.323Z [mobile-chromium] › e2e/specs/prd-2026-005-mobile.spec.ts:55:6 › PRD-2026-005 — mobile › TC-PRD-049 IGST save round-trip on mobile persists to DB 2026-10-16T06:59:08.323Z [arm] › e2e/specs/prd-2026-007-finance.spec.ts:91:6 › PRD-2026-007 — reservation-level rollup (G6/Must 8/NG4) › TC-ARM-261 partial check-in does not change totals [G6] 2026-10-16T06:59:08.323Z [arm] › e2e/specs/prd-2026-007-finance.spec.ts:200:6 › PRD-2026-007 — charges, discounts, payments, add-ons › TC-ARM-270 apply a flat discount → total drops accordingly [discounts] 2026-10-16T06:59:08.323Z [arm] › e2e/specs/prd-2026-007-finance.spec.ts:341:6 › PRD-2026-007 — finance surfaces in the UI › TC-ARM-280 guest-account screen lists the booking's accounts [party UI] 2026-10-16T06:59:08.323Z [arm] › e2e/specs/prd-2026-007-lock-move-swap.spec.ts:61:6 › PRD-2026-0 2026-10-16T06:59:08.324Z 07 — Move/Swap lock › TC-ARM-140 API: lock then unlock round-trips [lock] 2026-10-16T06:59:08.324Z [arm] › e2e/specs/prd-2026-007-noshow-cancel.spec.ts:82:6 › PRD-2026-007 — no-show per room › TC-ARM-100 UI: single-room no-show leaves siblings untouched [Must 4/S-11/§6.3] 2026-10-16T06:59:08.324Z [arm] › e2e/specs/prd-2026-007-partial-checkin.spec.ts:87:6 › PRD-2026-007 — partial check-in › TC-ARM-070 modal selects 2 of 4 rooms and hands them to the wizard URL [Must 3/S-12] 2026-10-16T06:59:08.324Z [arm] › e2e/specs/prd-2026-007-rbac-ux.spec.ts:92:6 › PRD-2026-007 — full-permission UI affordances (positive RBAC) › TC-ARM-303 owner-role kebab exposes all ARM actions on an UPCOMING booking [§10] 2026-10-16T06:59:08.324Z [arm] › e2e/specs/prd-2026-007-room-cards.spec.ts:108:6 › PRD-2026-007 — room cards on Booking Details › TC-ARM-042 CHECKED_IN room near/after its checkout time shows checkout-due yellow, then overdue orange [Must 2] 2026-10-16T06:59:08.324Z [arm] › e2e/specs/prd-2026-007-room-cards.spec.ts:326:6 › PRD-2026-007 — room cards on Booking Details › TC-ARM-059 max-inventory booking renders its card list within 2s of page load [S-13] 2026-10-16T06:59:08.324Z [arm] › e2e/specs/prd-2026-007-slots-multicycle.spec.ts:74:6 › PRD-2026-007 — default slot guarantee (CR-1) › TC-ARM-170 new reservation is backed by exactly one slot grouping all rooms [CR-1/Must 13] 2026-10-16T06:59:08.324Z [arm] › e2e/specs/prd-2026-007-slots-multicycle.spec.ts:100:6 › PRD-2026-007 — default slot guarantee (CR-1) › TC-ARM-173 mutation response slots[] carries window + roomCount and no name/status [CR-1/S-32] 2026-10-16T06:59:08.324Z [arm] › e2e/specs/prd-2026-007-slots-multicycle.spec.ts:211:6 › PRD-2026-007 — multi-cycle via re-check-in (G7/OQ-6) › TC-ARM-181 multi-room re-check-in (2 rooms into the new cycle) [G7] 2026-10-16T06:59:08.324Z [arm] › e2e/specs/prd-2026-007-status-aggregation.spec.ts:143:7 › PRD-2026-007 — CR-2 status aggregation (API) › TC-ARM-008 1 CHECKED_OUT + 1 CHECKED_IN → PARTIALLY_CHECKED_OUT (stays open) [CR-2/CR-3/S-31] 2026-10-16T06:59:08.324Z [arm] › e2e/specs/prd-2026-007-stay-view.spec.ts:271:6 › PRD-2026-007 — stay view blocks per room/slot › TC-ARM-242 stay view reflects a mutation after reload (no stale grid) [freshness] 2026-10-16T06:59:08.324Z [arm] › e2e/specs/prd-2026-007-stay-view.spec.ts:353:6 › PRD-2026-007 — stay view blocks per room/slot › TC-ARM-248 date navigation shifts the visible window and keeps blocks aligned [stay view] 2026-10-16T06:59:08.324Z [arm] › e2e/specs/prd-2026-007-stay-view.spec.ts:378:6 › PRD-2026-007 — stay view blocks per room/slot › TC-ARM-249 block spans exactly its slot’s day-cells (per-cell boundary audit) [slots] 2026-10-16T06:59:08.324Z 47 skipped 2026-10-16T06:59:08.324Z 80 did not run 2026-10-16T06:59:08.324Z 192 passed (8.6m) 2026-10-16T06:59:08.823Z  ELIFECYCLE  Command failed with exit code 1. 2026-10-16T06:59:08.844Z -> exit 1 2026-10-16T06:59:09.095Z slack: off for dev (SLACK_NOTIFY_ENVS=WORKER_BUDGET=8) 2026-10-16T06:59:10.115Z github status hotel-backend-core@9338e28e7: 201 2026-10-16T06:59:11.054Z github status hotel-frontend-core@2edac7677: 201