2026-10-16T09:45:27.999Z $ git fetch --quiet origin dev (cwd /home/ubuntu/regression-runner/repos/dev/hotel-frontend-core) 2026-10-16T09:45:29.203Z -> exit 0 2026-10-16T09:45:29.203Z $ git fetch --quiet --prune origin (cwd /home/ubuntu/regression-runner/repos/dev/hotel-frontend-core) 2026-10-16T09:45:30.343Z -> exit 0 2026-10-16T09:45:30.343Z $ git diff --name-only 2edac7677d85c5cbe64b00af518cd5d749b51fd7 f5a8ba3b809c601e90ac10843cab01d634ee598e (cwd /home/ubuntu/regression-runner/repos/dev/hotel-frontend-core) 2026-10-16T09:45:30.353Z e2e/PRD-2026-005-MATRIX.md 2026-10-16T09:45:30.353Z e2e/PRD-2026-007-MATRIX.md 2026-10-16T09:45:30.353Z e2e/README.md 2026-10-16T09:45:30.353Z e2e/SMOKE-PROD-MATRIX.md 2026-10-16T09:45:30.353Z e2e/fixtures/arm-api.ts 2026-10-16T09:45:30.353Z e2e/fixtures/arm-ui-w3.ts 2026-10-16T09:45:30.353Z e2e/fixtures/arm-ui-w4.ts 2026-10-16T09:45:30.353Z e2e/fixtures/auth.ts 2026-10-16T09:45:30.353Z e2e/fixtures/env.ts 2026-10-16T09:45:30.353Z e2e/fixtures/files/id-card.jpg 2026-10-16T09:45:30.353Z e2e/fixtures/hotel-session.ts 2026-10-16T09:45:30.353Z e2e/fixtures/id-per-adult.ts 2026-10-16T09:45:30.353Z e2e/fixtures/invoicing-data.ts 2026-10-16T09:45:30.353Z e2e/fixtures/w5-helpers.ts 2026-10-16T09:45:30.353Z e2e/specs/checkin-id-per-adult.spec.ts 2026-10-16T09:45:30.353Z e2e/specs/hfe-food-item-search-all-category.spec.ts 2026-10-16T09:45:30.353Z e2e/specs/prd-2026-005-active-template.spec.ts 2026-10-16T09:45:30.353Z e2e/specs/prd-2026-005-auto-triggers.spec.ts 2026-10-16T09:45:30.353Z e2e/specs/prd-2026-005-deep-verification.spec.ts 2026-10-16T09:45:30.353Z e2e/specs/prd-2026-005-invoice-editor.spec.ts 2026-10-16T09:45:30.353Z e2e/specs/prd-2026-005-mobile.spec.ts 2026-10-16T09:45:30.353Z e2e/specs/prd-2026-005-supplementary-docs.spec.ts 2026-10-16T09:45:30.353Z e2e/specs/prd-2026-007-create-reservation.spec.ts 2026-10-16T09:45:30.353Z e2e/specs/prd-2026-007-finance.spec.ts 2026-10-16T09:45:30.353Z e2e/specs/prd-2026-007-lock-move-swap.spec.ts 2026-10-16T09:45:30.353Z e2e/specs/prd-2026-007-noshow-cancel.spec.ts 2026-10-16T09:45:30.354Z e2e/specs/prd-2026-007-partial-checkin.spec.ts 2026-10-16T09:45:30.354Z e2e/specs/prd-2026-007-rbac-ux.spec.ts 2026-10-16T09:45:30.354Z e2e/specs/prd-2026-007-room-cards.spec.ts 2026-10-16T09:45:30.354Z e2e/specs/prd-2026-007-slots-multicycle.spec.ts 2026-10-16T09:45:30.354Z e2e/specs/prd-2026-007-status-aggregation.spec.ts 2026-10-16T09:45:30.354Z e2e/specs/prd-2026-007-stay-view.spec.ts 2026-10-16T09:45:30.354Z e2e/specs/prod-stay-journey.spec.ts 2026-10-16T09:45:30.354Z -> exit 0 2026-10-16T09:45:30.354Z pushed commit differs from the served one by test files only; not waiting for a deploy 2026-10-16T09:45:30.354Z commit is live on dev, queued 2026-10-16T09:45:33.332Z start test on dev (full/parallel, trigger push) 2026-10-16T09:45:33.782Z deployed: {"hotel-backend-core":"9338e28e79db480f72b45314ca85b3c9c3060df9","hotel-frontend-core":"2edac7677d85c5cbe64b00af518cd5d749b51fd7"} 2026-10-16T09:45:33.782Z $ git fetch --quiet --prune origin (cwd /home/ubuntu/regression-runner/repos/dev/hotel-backend-core) 2026-10-16T09:45:35.056Z -> exit 0 2026-10-16T09:45:35.056Z $ git cat-file -e 9338e28e79db480f72b45314ca85b3c9c3060df9^{commit} (cwd /home/ubuntu/regression-runner/repos/dev/hotel-backend-core) 2026-10-16T09:45:35.065Z -> exit 0 2026-10-16T09:45:35.066Z $ git diff --name-only 9338e28e79db480f72b45314ca85b3c9c3060df9 origin/dev (cwd /home/ubuntu/regression-runner/repos/dev/hotel-backend-core) 2026-10-16T09:45:35.075Z apps/hotel-backend/src/revenue/ai/revenue-ai.providers.ts 2026-10-16T09:45:35.075Z e2e/api/MATRIX.md 2026-10-16T09:45:35.075Z e2e/api/README.md 2026-10-16T09:45:35.075Z e2e/api/specs/channel-manager.spec.ts 2026-10-16T09:45:35.075Z e2e/api/specs/checkin-id-per-adult.spec.ts 2026-10-16T09:45:35.075Z e2e/api/support/channel-manager.ts 2026-10-16T09:45:35.075Z e2e/api/support/checkin-id.ts 2026-10-16T09:45:35.075Z e2e/api/support/fixtures/id-front.jpg 2026-10-16T09:45:35.075Z e2e/api/support/session.ts 2026-10-16T09:45:35.075Z scripts/e2e/lib.mjs 2026-10-16T09:45:35.075Z scripts/e2e/prepare-property.mjs 2026-10-16T09:45:35.075Z -> exit 0 2026-10-16T09:45:35.075Z $ 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-16T09:45:35.128Z 9338e28e79db480f72b45314ca85b3c9c3060df9 2026-10-16T09:45:35.129Z -> exit 0 2026-10-16T09:45:35.129Z $ 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-16T09:45:35.566Z Scope: all 31 workspace projects 2026-10-16T09:45:35.745Z Lockfile is up to date, resolution step is skipped 2026-10-16T09:45:35.938Z Already up to date 2026-10-16T09:45:36.921Z . prepare$ husky 2026-10-16T09:45:36.976Z . prepare: Done 2026-10-16T09:45:37.097Z Done in 1.8s 2026-10-16T09:45:37.131Z -> exit 0 2026-10-16T09:45:37.131Z $ git fetch --quiet --prune origin (cwd /home/ubuntu/regression-runner/repos/dev/hotel-frontend-core) 2026-10-16T09:45:38.030Z -> exit 0 2026-10-16T09:45:38.030Z $ git cat-file -e 2edac7677d85c5cbe64b00af518cd5d749b51fd7^{commit} (cwd /home/ubuntu/regression-runner/repos/dev/hotel-frontend-core) 2026-10-16T09:45:38.039Z -> exit 0 2026-10-16T09:45:38.039Z $ git diff --name-only 2edac7677d85c5cbe64b00af518cd5d749b51fd7 origin/dev (cwd /home/ubuntu/regression-runner/repos/dev/hotel-frontend-core) 2026-10-16T09:45:38.049Z e2e/PRD-2026-005-MATRIX.md 2026-10-16T09:45:38.049Z e2e/PRD-2026-007-MATRIX.md 2026-10-16T09:45:38.049Z e2e/README.md 2026-10-16T09:45:38.049Z e2e/SMOKE-PROD-MATRIX.md 2026-10-16T09:45:38.049Z e2e/fixtures/arm-api.ts 2026-10-16T09:45:38.049Z e2e/fixtures/arm-ui-w3.ts 2026-10-16T09:45:38.049Z e2e/fixtures/arm-ui-w4.ts 2026-10-16T09:45:38.049Z e2e/fixtures/auth.ts 2026-10-16T09:45:38.049Z e2e/fixtures/env.ts 2026-10-16T09:45:38.049Z e2e/fixtures/files/id-card.jpg 2026-10-16T09:45:38.049Z e2e/fixtures/hotel-session.ts 2026-10-16T09:45:38.049Z e2e/fixtures/id-per-adult.ts 2026-10-16T09:45:38.049Z e2e/fixtures/invoicing-data.ts 2026-10-16T09:45:38.049Z e2e/fixtures/w5-helpers.ts 2026-10-16T09:45:38.049Z e2e/specs/checkin-id-per-adult.spec.ts 2026-10-16T09:45:38.049Z e2e/specs/hfe-food-item-search-all-category.spec.ts 2026-10-16T09:45:38.050Z e2e/specs/prd-2026-005-active-template.spec.ts 2026-10-16T09:45:38.050Z e2e/specs/prd-2026-005-auto-triggers.spec.ts 2026-10-16T09:45:38.050Z e2e/specs/prd-2026-005-deep-verification.spec.ts 2026-10-16T09:45:38.050Z e2e/specs/prd-2026-005-invoice-editor.spec.ts 2026-10-16T09:45:38.050Z e2e/specs/prd-2026-005-mobile.spec.ts 2026-10-16T09:45:38.050Z e2e/specs/prd-2026-005-supplementary-docs.spec.ts 2026-10-16T09:45:38.050Z e2e/specs/prd-2026-007-create-reservation.spec.ts 2026-10-16T09:45:38.050Z e2e/specs/prd-2026-007-finance.spec.ts 2026-10-16T09:45:38.050Z e2e/specs/prd-2026-007-lock-move-swap.spec.ts 2026-10-16T09:45:38.050Z e2e/specs/prd-2026-007-noshow-cancel.spec.ts 2026-10-16T09:45:38.050Z e2e/specs/prd-2026-007-partial-checkin.spec.ts 2026-10-16T09:45:38.050Z e2e/specs/prd-2026-007-rbac-ux.spec.ts 2026-10-16T09:45:38.050Z e2e/specs/prd-2026-007-room-cards.spec.ts 2026-10-16T09:45:38.050Z e2e/specs/prd-2026-007-slots-multicycle.spec.ts 2026-10-16T09:45:38.050Z e2e/specs/prd-2026-007-status-aggregation.spec.ts 2026-10-16T09:45:38.050Z e2e/specs/prd-2026-007-stay-view.spec.ts 2026-10-16T09:45:38.050Z e2e/specs/prod-stay-journey.spec.ts 2026-10-16T09:45:38.050Z -> exit 0 2026-10-16T09:45:38.050Z hotel-frontend-core: branch head differs from the served commit by 33 test-only file(s); testing from origin/dev 2026-10-16T09:45:38.050Z $ 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-16T09:45:38.087Z f5a8ba3b809c601e90ac10843cab01d634ee598e 2026-10-16T09:45:38.087Z -> exit 0 2026-10-16T09:45:38.087Z $ 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-16T09:45:38.608Z Lockfile is up to date, resolution step is skipped 2026-10-16T09:45:38.751Z Already up to date 2026-10-16T09:45:39.358Z . prepare$ husky 2026-10-16T09:45:39.413Z . prepare: Done 2026-10-16T09:45:39.414Z Done in 1.2s 2026-10-16T09:45:39.439Z -> exit 0 2026-10-16T09:45:39.439Z $ corepack pnpm@9.15.4 e2e:prepare-property -- --count 8 (cwd /home/ubuntu/regression-runner/repos/dev/hotel-backend-core) 2026-10-16T09:45:39.825Z > hotel-backend-core@ e2e:prepare-property /home/ubuntu/regression-runner/repos/dev/hotel-backend-core 2026-10-16T09:45:39.826Z > node scripts/e2e/prepare-property.mjs "--" "--count" "8" 2026-10-16T09:45:42.482Z ✓ E2E Hotel 01 (b4c88cd6-2371-4049-aaaf-2158fb4b6b9e): test user has access 2026-10-16T09:45:45.194Z ✓ E2E Hotel 02 (c7396f01-f0a3-4b84-91a8-ac8b5b32c065): test user has access 2026-10-16T09:45:47.642Z ✓ E2E Hotel 03 (6cbd78a1-33c7-4a8d-b4b1-beabfe263880): test user has access 2026-10-16T09:45:49.835Z ✓ E2E Hotel 04 (d4905069-731a-4384-9cea-14f9cf362595): test user has access; made the existing bank account primary 2026-10-16T09:45:52.052Z ✓ E2E Hotel 05 (7d049255-56e3-421f-a309-9ad5f8eb0e22): test user has access 2026-10-16T09:45:54.193Z ✓ E2E Hotel 06 (8e43c66d-f413-41a7-ac7a-4a413d4d2632): test user has access 2026-10-16T09:45:56.161Z ✓ E2E Hotel 07 (729211be-07c8-48a4-8fc5-f28d261617f9): test user has access 2026-10-16T09:45:58.103Z ✓ E2E Hotel 08 (4f50832d-5d39-480f-a913-230148668b50): test user has access 2026-10-16T09:45:58.103Z 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-16T09:45:58.124Z -> exit 0 2026-10-16T09:45:58.124Z === hotel-backend-core === 2026-10-16T09:45:58.124Z $ corepack pnpm@9.15.4 e2e (cwd /home/ubuntu/regression-runner/repos/dev/hotel-backend-core) 2026-10-16T09:45:58.504Z > hotel-backend-core@ e2e /home/ubuntu/regression-runner/repos/dev/hotel-backend-core 2026-10-16T09:45:58.504Z > playwright test -c e2e/api/playwright.config.ts 2026-10-16T09:46:07.632Z Running 25 tests using 4 workers 2026-10-16T09:46:08.600Z ✓ 3 e2e/api/specs/health.spec.ts:4:7 › Backend health › TC-API-HEALTH-1 health reports database and redis up @smoke (322ms) 2026-10-16T09:46:08.914Z ✓ 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 (121ms) 2026-10-16T09:46:09.167Z ✓ 2 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 (251ms) 2026-10-16T09:46:09.383Z ✓ 4 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 (244ms) 2026-10-16T09:46:11.832Z ✓ 7 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 (2.6s) 2026-10-16T09:46:11.845Z - 9 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-16T09:46:11.900Z ✓ 5 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 (2.7s) 2026-10-16T09:46:12.325Z ✘ 6 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.5s) 2026-10-16T09:46:12.669Z ✓ 8 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 (3.3s) 2026-10-16T09:46:12.921Z ✘ 10 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 (276ms) 2026-10-16T09:46:12.963Z ✘ 11 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 (293ms) 2026-10-16T09:46:16.248Z ✘ 12 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 (1.8s) 2026-10-16T09:46:16.338Z ✓ 13 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 (2.8s) 2026-10-16T09:46:17.146Z ✓ 14 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 (3.0s) 2026-10-16T09:46:17.187Z - 18 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-16T09:46:17.231Z ✘ 19 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 (18ms) 2026-10-16T09:46:17.774Z ✓ 15 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 (3.0s) 2026-10-16T09:46:17.858Z ✘ 20 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 (63ms) 2026-10-16T09:46:18.160Z - 21 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-16T09:46:18.198Z - 22 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-16T09:46:18.240Z - 23 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-16T09:46:18.404Z ✘ 24 e2e/api/specs/revenue-guardrails.spec.ts:43:5 › TC-REV-GUARD-API-1 public quotes omit every plan outside final-price limits (133ms) 2026-10-16T09:46:18.539Z ✓ 25 e2e/api/specs/revenue-ai-context.spec.ts:24:5 › TC-REV-AI-CTX-1 @smoke unauthenticated Revenue AI context is rejected (89ms) 2026-10-16T09:46:19.783Z ✘ 17 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 (1.6s) 2026-10-16T09:46:19.941Z ✓ 16 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.2s) 2026-10-16T09:46:19.963Z 1) 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 2026-10-16T09:46:19.963Z Error: POST /reservations → 400: {"statusCode":400,"message":"One or more selected rooms are already blocked or occupied during the selected period.","timestamp":"2026-10-16T09:46:12.192Z","path":"/reservations","requestId":"10f52699-550c-44b6-8d0e-9a10d65e2e6f"} 2026-10-16T09:46:19.963Z expect(received).toBeTruthy() 2026-10-16T09:46:19.963Z Received: false 2026-10-16T09:46:19.963Z at ../support/unassign.ts:130 2026-10-16T09:46:19.963Z 128 | res.ok(), 2026-10-16T09:46:19.963Z 129 | `POST /reservations → ${res.status()}: ${await res.text()}`, 2026-10-16T09:46:19.963Z > 130 | ).toBeTruthy(); 2026-10-16T09:46:19.963Z | ^ 2026-10-16T09:46:19.963Z 131 | const checkInId = idOf(await res.json()); 2026-10-16T09:46:19.963Z 132 | expect(checkInId, "reservation id").toBeTruthy(); 2026-10-16T09:46:19.963Z 133 | registerForCleanup(checkInId!); 2026-10-16T09:46:19.963Z at createBooking (/home/ubuntu/regression-runner/repos/dev/hotel-backend-core/e2e/api/support/unassign.ts:130:5) 2026-10-16T09:46:19.963Z at /home/ubuntu/regression-runner/repos/dev/hotel-backend-core/e2e/api/specs/reservation-unassign.spec.ts:54:21 2026-10-16T09:46:19.963Z Error Context: test-results/reservation-unassign-Reser-548e0-om-201-and-an-ACTIVE-record/error-context.md 2026-10-16T09:46:19.963Z Error Context: test-results/reservation-unassign-Reser-548e0-om-201-and-an-ACTIVE-record/error-context.md 2026-10-16T09:46:19.963Z 2) 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-16T09:46:19.963Z Error: POST /reservations → 400: {"statusCode":400,"message":"One or more selected rooms are already blocked or occupied during the selected period.","timestamp":"2026-10-16T09:46:11.469Z","path":"/reservations","requestId":"a95e456e-02db-4fbd-a9ed-b6923b3f3387"} 2026-10-16T09:46:19.963Z expect(received).toBeTruthy() 2026-10-16T09:46:19.964Z Received: false 2026-10-16T09:46:19.964Z at ../support/unassign.ts:130 2026-10-16T09:46:19.964Z 128 | res.ok(), 2026-10-16T09:46:19.964Z 129 | `POST /reservations → ${res.status()}: ${await res.text()}`, 2026-10-16T09:46:19.964Z > 130 | ).toBeTruthy(); 2026-10-16T09:46:19.964Z | ^ 2026-10-16T09:46:19.964Z 131 | const checkInId = idOf(await res.json()); 2026-10-16T09:46:19.964Z 132 | expect(checkInId, "reservation id").toBeTruthy(); 2026-10-16T09:46:19.964Z 133 | registerForCleanup(checkInId!); 2026-10-16T09:46:19.964Z at createBooking (/home/ubuntu/regression-runner/repos/dev/hotel-backend-core/e2e/api/support/unassign.ts:130:5) 2026-10-16T09:46:19.964Z at /home/ubuntu/regression-runner/repos/dev/hotel-backend-core/e2e/api/specs/reservation-unassign.spec.ts:105:22 2026-10-16T09:46:19.964Z Error Context: test-results/reservation-unassign-Reser-2eb59-of-the-listed-bookings-only/error-context.md 2026-10-16T09:46:19.964Z Error Context: test-results/reservation-unassign-Reser-2eb59-of-the-listed-bookings-only/error-context.md 2026-10-16T09:46:19.964Z 3) 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-16T09:46:19.964Z Error: POST /reservations → 400: {"statusCode":400,"message":"One or more selected rooms are already blocked or occupied during the selected period.","timestamp":"2026-10-16T09:46:12.124Z","path":"/reservations","requestId":"939e6119-8628-4daa-8190-dd1c82165dcc"} 2026-10-16T09:46:19.964Z expect(received).toBeTruthy() 2026-10-16T09:46:19.964Z Received: false 2026-10-16T09:46:19.964Z at ../support/unassign.ts:130 2026-10-16T09:46:19.964Z 128 | res.ok(), 2026-10-16T09:46:19.964Z 129 | `POST /reservations → ${res.status()}: ${await res.text()}`, 2026-10-16T09:46:19.964Z > 130 | ).toBeTruthy(); 2026-10-16T09:46:19.964Z | ^ 2026-10-16T09:46:19.964Z 131 | const checkInId = idOf(await res.json()); 2026-10-16T09:46:19.964Z 132 | expect(checkInId, "reservation id").toBeTruthy(); 2026-10-16T09:46:19.964Z 133 | registerForCleanup(checkInId!); 2026-10-16T09:46:19.964Z at createBooking (/home/ubuntu/regression-runner/repos/dev/hotel-backend-core/e2e/api/support/unassign.ts:130:5) 2026-10-16T09:46:19.964Z at /home/ubuntu/regression-runner/repos/dev/hotel-backend-core/e2e/api/specs/reservation-unassign.spec.ts:200:21 2026-10-16T09:46:19.964Z Error Context: test-results/reservation-unassign-Reser-00246-ve-closes-the-record-PLACED/error-context.md 2026-10-16T09:46:19.964Z Error Context: test-results/reservation-unassign-Reser-00246-ve-closes-the-record-PLACED/error-context.md 2026-10-16T09:46:19.964Z 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-16T09:46:19.964Z Error: expect(received).toBe(expected) // Object.is equality 2026-10-16T09:46:19.964Z Expected: false 2026-10-16T09:46:19.965Z Received: true 2026-10-16T09:46:19.965Z 270 | ); 2026-10-16T09:46:19.965Z 271 | const before = await availabilityOf(api, booking); 2026-10-16T09:46:19.965Z > 272 | expect(before.includesRoom).toBe(false); 2026-10-16T09:46:19.965Z | ^ 2026-10-16T09:46:19.965Z 273 | await withCheckinSettings(api, ON, async () => { 2026-10-16T09:46:19.965Z 274 | expect((await unassign(api, booking)).status()).toBe(201); 2026-10-16T09:46:19.965Z 275 | }); 2026-10-16T09:46:19.965Z at /home/ubuntu/regression-runner/repos/dev/hotel-backend-core/e2e/api/specs/reservation-unassign.spec.ts:272:33 2026-10-16T09:46:19.965Z Error Context: test-results/reservation-unassign-Reser-c9eb6-availability-goes-up-by-one/error-context.md 2026-10-16T09:46:19.965Z Error Context: test-results/reservation-unassign-Reser-c9eb6-availability-goes-up-by-one/error-context.md 2026-10-16T09:46:19.965Z 5) 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-16T09:46:19.965Z Error: AI settings → 403 2026-10-16T09:46:19.965Z expect(received).toBeTruthy() 2026-10-16T09:46:19.965Z Received: false 2026-10-16T09:46:19.965Z 182 | settingsRes.ok(), 2026-10-16T09:46:19.965Z 183 | `AI settings → ${settingsRes.status()}`, 2026-10-16T09:46:19.965Z > 184 | ).toBeTruthy(); 2026-10-16T09:46:19.965Z | ^ 2026-10-16T09:46:19.965Z 185 | const original = unwrap(await settingsRes.json()) as AnyRecord; 2026-10-16T09:46:19.965Z 186 | const { preview } = await previewRate(api, hotel.id); 2026-10-16T09:46:19.965Z 187 | const objective = (original.objective ?? {}) as AnyRecord; 2026-10-16T09:46:19.965Z at /home/ubuntu/regression-runner/repos/dev/hotel-backend-core/e2e/api/specs/revenue-ai-actions.spec.ts:184:7 2026-10-16T09:46:19.965Z Error Context: test-results/revenue-ai-actions-Revenue-aaa61-nges-reject-a-stale-preview/error-context.md 2026-10-16T09:46:19.965Z 6) 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-16T09:46:19.965Z Error: expect(received).toBe(expected) // Object.is equality 2026-10-16T09:46:19.965Z Expected: 400 2026-10-16T09:46:19.965Z Received: 403 2026-10-16T09:46:19.965Z 250 | }, 2026-10-16T09:46:19.965Z 251 | }); 2026-10-16T09:46:19.965Z > 252 | expect(foreignSourceRes.status()).toBe(400); 2026-10-16T09:46:19.965Z | ^ 2026-10-16T09:46:19.965Z 253 | expect(await foreignSourceRes.text()).toMatch(/not in this property/i); 2026-10-16T09:46:19.965Z 254 | 2026-10-16T09:46:19.965Z 255 | const missingSourceRes = await api.post(reportRunPath, { 2026-10-16T09:46:19.965Z at /home/ubuntu/regression-runner/repos/dev/hotel-backend-core/e2e/api/specs/revenue-ai-actions.spec.ts:252:39 2026-10-16T09:46:19.965Z Error Context: test-results/revenue-ai-actions-Revenue-78190-are-rejected-before-enqueue/error-context.md 2026-10-16T09:46:19.965Z 7) 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-16T09:46:19.965Z Error: GET public property → 404: {"statusCode":404,"message":"Property not found for booking engine","timestamp":"2026-10-16T09:46:18.378Z","path":"/booking-engine/public/property/b4c88cd6-2371-4049-aaaf-2158fb4b6b9e?adults=2&children=0","requestId":"f0756cbc-36d2-49d3-83c0-35df35692406"} 2026-10-16T09:46:19.966Z expect(received).toBeTruthy() 2026-10-16T09:46:19.966Z Received: false 2026-10-16T09:46:19.966Z 37 | response.ok(), 2026-10-16T09:46:19.966Z 38 | `${method} → ${response.status()}: ${await response.text()}`, 2026-10-16T09:46:19.966Z > 39 | ).toBeTruthy(); 2026-10-16T09:46:19.966Z | ^ 2026-10-16T09:46:19.966Z 40 | return response.json() as Promise; 2026-10-16T09:46:19.966Z 41 | } 2026-10-16T09:46:19.966Z 42 | 2026-10-16T09:46:19.966Z at successfulJson (/home/ubuntu/regression-runner/repos/dev/hotel-backend-core/e2e/api/specs/revenue-guardrails.spec.ts:39:5) 2026-10-16T09:46:19.966Z at /home/ubuntu/regression-runner/repos/dev/hotel-backend-core/e2e/api/specs/revenue-guardrails.spec.ts:51:24 2026-10-16T09:46:19.966Z Error Context: test-results/revenue-guardrails-TC-REV--ac7c6--outside-final-price-limits/error-context.md 2026-10-16T09:46:19.966Z 7 failed 2026-10-16T09:46:19.966Z 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 2026-10-16T09:46:19.966Z 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-16T09:46:19.966Z 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-16T09:46:19.966Z 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-16T09:46:19.966Z 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-16T09:46:19.966Z 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-16T09:46:19.966Z 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-16T09:46:19.966Z 5 skipped 2026-10-16T09:46:19.966Z 13 passed (20.8s) 2026-10-16T09:46:20.035Z  ELIFECYCLE  Command failed with exit code 1. 2026-10-16T09:46:20.059Z -> exit 1 2026-10-16T09:46:20.065Z === hotel-frontend-core === 2026-10-16T09:46:20.065Z $ corepack pnpm@9.15.4 e2e (cwd /home/ubuntu/regression-runner/repos/dev/hotel-frontend-core) 2026-10-16T09:46:20.445Z > hotel-frontend-core@0.1.0 e2e /home/ubuntu/regression-runner/repos/dev/hotel-frontend-core 2026-10-16T09:46:20.445Z > playwright test 2026-10-16T09:46:39.588Z Running 277 tests using 4 workers 2026-10-16T09:46:42.914Z ✓ 2 [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 (2.6s) 2026-10-16T09:46:43.424Z ✓ 1 [chromium] › e2e/specs/prd-2026-005-auto-triggers.spec.ts:9:6 › PRD-2026-005 — Auto-Triggers › TC-PRD-032 toggle Restaurant Session Settle persists (3.1s) 2026-10-16T09:46:44.285Z ✓ 3 [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 (3.2s) 2026-10-16T09:46:46.211Z ✓ 5 [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 (3.3s) 2026-10-16T09:46:46.259Z ✓ 6 [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 (2.8s) 2026-10-16T09:46:47.906Z ✘ 4 [chromium] › e2e/specs/prd-2026-005-active-template.spec.ts:61:6 › PRD-2026-005 — Active custom template wins › TC-PRD-091 template with unregistered fontName still renders (no font crash) (2.0s) 2026-10-16T09:46:47.906Z - 10 [chromium] › e2e/specs/prd-2026-005-active-template.spec.ts:167:6 › PRD-2026-005 — Active custom template wins › TC-PRD-093 template with empty image schemas still renders (no SOI crash) 2026-10-16T09:46:49.102Z ✓ 9 [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 (2.8s) 2026-10-16T09:46:49.570Z ✓ 8 [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 (3.3s) 2026-10-16T09:46:50.283Z ✓ 12 [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 (1.2s) 2026-10-16T09:46:52.210Z ✓ 11 [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 (3.2s) 2026-10-16T09:46:53.190Z ✓ 13 [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 (3.6s) 2026-10-16T09:46:54.877Z ✓ 14 [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 (4.6s) 2026-10-16T09:46:55.710Z ✓ 16 [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 (2.5s) 2026-10-16T09:46:59.303Z ✓ 15 [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 (7.0s) 2026-10-16T09:47:01.271Z ✓ 18 [chromium] › e2e/specs/prd-2026-005-bank-accounts.spec.ts:108:6 › PRD-2026-005 — Bank Accounts › TC-PRD-016 delete removes row (5.5s) 2026-10-16T09:47:01.743Z ✓ 17 [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 (6.8s) 2026-10-16T09:47:06.687Z ✓ 19 [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 (7.4s) 2026-10-16T09:47:08.718Z ✓ 20 [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 (7.4s) 2026-10-16T09:47:13.097Z ✘ 7 [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 (27.2s) 2026-10-16T09:47:13.097Z - 24 [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-16T09:47:13.097Z - 25 [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-16T09:47:13.098Z - 26 [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-16T09:47:13.098Z - 27 [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-16T09:47:13.098Z - 28 [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-16T09:47:13.098Z - 29 [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-16T09:47:13.098Z - 30 [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-16T09:47:13.098Z - 31 [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-16T09:47:13.098Z - 32 [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-16T09:47:13.694Z ✓ 22 [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 (7.0s) 2026-10-16T09:47:15.159Z ✓ 23 [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 (6.4s) 2026-10-16T09:47:17.360Z ✓ 34 [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 (3.2s) 2026-10-16T09:47:20.062Z ✓ 33 [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 (5.9s) 2026-10-16T09:47:22.569Z ✓ 35 [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 (6.9s) 2026-10-16T09:47:24.483Z ✓ 37 [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 (4.4s) 2026-10-16T09:47:25.256Z ✓ 36 [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 (7.5s) 2026-10-16T09:47:28.529Z ✓ 39 [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 (4.0s) 2026-10-16T09:47:29.512Z ✓ 38 [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 (6.9s) 2026-10-16T09:47:33.050Z ✓ 41 [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 (4.5s) 2026-10-16T09:47:33.898Z ✓ 40 [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 (8.6s) 2026-10-16T09:47:37.138Z ✓ 43 [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 (3.9s) 2026-10-16T09:47:37.460Z ✓ 42 [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 (7.4s) 2026-10-16T09:47:39.579Z ✓ 45 [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 (1.9s) 2026-10-16T09:47:41.288Z ✓ 44 [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." (7.1s) 2026-10-16T09:47:43.875Z ✓ 47 [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 (3.8s) 2026-10-16T09:47:46.435Z ✓ 46 [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 (8.9s) 2026-10-16T09:47:48.529Z ✓ 49 [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 (4.0s) 2026-10-16T09:47:49.578Z ✓ 50 [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 (2.6s) 2026-10-16T09:47:49.878Z ✓ 48 [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 (8.5s) 2026-10-16T09:47:52.242Z ✘ 52 [chromium] › e2e/specs/revenue-guardrail-removal.spec.ts:23:5 › TC-REV-GUARD-1 clearing both configured limits removes the guardrail (2.5s) 2026-10-16T09:47:53.797Z ✓ 53 [chromium] › e2e/specs/revenue-manager.spec.ts:6:5 › TC-RM-1 @smoke protects Revenue Manager and retains the selected workspace tab (3.9s) 2026-10-16T09:47:55.879Z - 54 [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-16T09:47:56.847Z ✓ 55 [chromium] › e2e/specs/smoke-core-pages.spec.ts:23:7 › Core pages open › TC-SMOKE-001 Room View opens on the test hotel @smoke (3.0s) 2026-10-16T09:47:59.217Z ✓ 56 [chromium] › e2e/specs/smoke-core-pages.spec.ts:23:7 › Core pages open › TC-SMOKE-002 Stay View opens on the test hotel @smoke (3.3s) 2026-10-16T09:47:59.861Z ✓ 57 [chromium] › e2e/specs/smoke-core-pages.spec.ts:23:7 › Core pages open › TC-SMOKE-003 Reservations opens on the test hotel @smoke (3.0s) 2026-10-16T09:48:02.323Z ✓ 58 [chromium] › e2e/specs/smoke-core-pages.spec.ts:23:7 › Core pages open › TC-SMOKE-004 Guests opens on the test hotel @smoke (3.1s) 2026-10-16T09:48:02.616Z ✓ 59 [chromium] › e2e/specs/smoke-core-pages.spec.ts:23:7 › Core pages open › TC-SMOKE-005 All Checkins opens on the test hotel @smoke (2.7s) 2026-10-16T09:48:05.130Z ✓ 60 [chromium] › e2e/specs/smoke-core-pages.spec.ts:23:7 › Core pages open › TC-SMOKE-006 Invoices opens on the test hotel @smoke (2.8s) 2026-10-16T09:48:05.879Z ✓ 61 [chromium] › e2e/specs/smoke-core-pages.spec.ts:23:7 › Core pages open › TC-SMOKE-007 Ledger opens on the test hotel @smoke (3.2s) 2026-10-16T09:48:07.609Z ✓ 62 [chromium] › e2e/specs/smoke-core-pages.spec.ts:23:7 › Core pages open › TC-SMOKE-008 Reports opens on the test hotel @smoke (2.5s) 2026-10-16T09:48:13.048Z ✓ 63 [mobile-chromium] › e2e/specs/prd-2026-005-mobile.spec.ts:25:6 › PRD-2026-005 — mobile › TC-PRD-047 Tax Mode card visible on mobile invoice editor (6.2s) 2026-10-16T09:48:14.704Z ✓ 64 [mobile-chromium] › e2e/specs/prd-2026-005-mobile.spec.ts:38:6 › PRD-2026-005 — mobile › TC-PRD-048 IGST toggle changes selection on mobile (6.3s) 2026-10-16T09:48:15.777Z ✓ 65 [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] (1.5s) 2026-10-16T09:48:16.322Z ✘ 51 [chromium] › e2e/specs/reservation-unassign.spec.ts:8:5 › TC-UNASSIGN-MONEY-1 frees and returns a reservation room without changing its money (26.8s) 2026-10-16T09:48:18.429Z ✓ 67 [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] (2.6s) 2026-10-16T09:48:18.525Z ✓ 66 [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] (2.3s) 2026-10-16T09:48:20.973Z ✓ 69 [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] (2.5s) 2026-10-16T09:48:21.577Z ✓ 70 [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] (3.0s) 2026-10-16T09:48:21.677Z ✓ 68 [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] (4.0s) 2026-10-16T09:48:22.672Z ✓ 71 [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] (1.7s) 2026-10-16T09:48:22.714Z ✓ 74 [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] (25ms) 2026-10-16T09:48:24.280Z ✓ 72 [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"] (2.7s) 2026-10-16T09:48:24.748Z ✘ 75 [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] (2.0s) 2026-10-16T09:48:26.487Z ✓ 73 [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] (4.8s) 2026-10-16T09:48:27.490Z ✓ 77 [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] (2.7s) 2026-10-16T09:48:27.843Z ✓ 79 [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] (340ms) 2026-10-16T09:48:27.886Z - 80 [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-16T09:48:30.063Z ✓ 76 [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] (5.8s) 2026-10-16T09:48:31.768Z ✓ 81 [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] (3.9s) 2026-10-16T09:48:32.173Z ✓ 78 [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] (5.7s) 2026-10-16T09:48:36.412Z ✓ 83 [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] (4.6s) 2026-10-16T09:48:39.264Z ✘ 82 [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] (3.1s) 2026-10-16T09:48:40.391Z ✘ 21 [chromium] › e2e/specs/prd-2026-005-supplementary-docs.spec.ts:48:6 › PRD-2026-005 — Supplementary documents › TC-PRD-053 Debit Note (full) generates 201 + PDF blob (1.5m) 2026-10-16T09:48:40.391Z - 87 [chromium] › e2e/specs/prd-2026-005-supplementary-docs.spec.ts:70:6 › PRD-2026-005 — Supplementary documents › TC-PRD-054 Refund Voucher generates 201 + sequential RV number 2026-10-16T09:48:41.436Z ✓ 85 [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] (4.9s) 2026-10-16T09:48:43.763Z ✓ 84 [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] (11.5s) 2026-10-16T09:48:46.504Z ✓ 86 [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] (5.5s) 2026-10-16T09:48:47.010Z ✓ 88 [arm] › e2e/specs/prd-2026-007-noshow-cancel.spec.ts:69:6 › PRD-2026-007 — no-show per room › TC-ARM-103 API: noShowReason and noShowMarkedAt persist on the room [Should-1 audit] (4.4s) 2026-10-16T09:48:48.546Z ✓ 89 [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] (7.1s) 2026-10-16T09:48:50.096Z ✓ 92 [arm] › e2e/specs/prd-2026-007-noshow-cancel.spec.ts:87: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] (3.0s) 2026-10-16T09:48:51.474Z ✓ 90 [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] (7.7s) 2026-10-16T09:48:51.911Z ✓ 91 [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] (5.4s) 2026-10-16T09:48:53.574Z ✓ 94 [arm] › e2e/specs/prd-2026-007-noshow-cancel.spec.ts:97: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] (3.5s) 2026-10-16T09:48:54.850Z ✓ 93 [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] (6.3s) 2026-10-16T09:48:55.165Z ✓ 96 [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] (3.2s) 2026-10-16T09:48:55.462Z ✓ 97 [arm] › e2e/specs/prd-2026-007-noshow-cancel.spec.ts:109:6 › PRD-2026-007 — no-show per room › TC-ARM-106 API: no-show requires a reason (validation) [Must 4] (1.9s) 2026-10-16T09:48:59.865Z ✓ 99 [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] (4.7s) 2026-10-16T09:49:00.573Z ✓ 95 [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] (9.1s) 2026-10-16T09:49:02.682Z ✓ 100 [arm] › e2e/specs/prd-2026-007-noshow-cancel.spec.ts:118:6 › PRD-2026-007 — no-show per room › TC-ARM-107 UI: no-show entry absent for a CHECKED_IN-only booking [state gating] (7.1s) 2026-10-16T09:49:05.353Z ✓ 101 [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] (5.4s) 2026-10-16T09:49:09.285Z ✓ 104 [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] (3.9s) 2026-10-16T09:49:09.326Z ✓ 102 [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] (8.7s) 2026-10-16T09:49:11.404Z ✓ 105 [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] (2.1s) 2026-10-16T09:49:14.122Z ✘ 103 [arm] › e2e/specs/prd-2026-007-noshow-cancel.spec.ts:132:6 › PRD-2026-007 — cancellation per room › TC-ARM-110 UI: "can't be undone" warning is shown [UX/NG1] (6.9s) 2026-10-16T09:49:15.410Z ✓ 107 [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] (4.0s) 2026-10-16T09:49:17.641Z ✓ 109 [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.2s) 2026-10-16T09:49:18.213Z ✓ 106 [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] (8.9s) 2026-10-16T09:49:18.923Z ✓ 108 [arm] › e2e/specs/prd-2026-007-noshow-cancel.spec.ts:139:6 › PRD-2026-007 — cancellation per room › TC-ARM-111 API: cancel metadata persists (reason + amount) [Should-1] (3.3s) 2026-10-16T09:49:20.156Z ✓ 98 [arm] › e2e/specs/prd-2026-007-create-reservation.spec.ts:309:6 › PRD-2026-007 — create reservation panel (UI) › TC-ARM-216 UI create: availability cap blocks over-request up front [Must 10/S-27] (25.3s) 2026-10-16T09:49:20.170Z - 113 [arm] › e2e/specs/prd-2026-007-create-reservation.spec.ts:339:7 › PRD-2026-007 — create reservation panel (UI) › TC-ARM-217 UI create: error copy names the available count [S-27] 2026-10-16T09:49:20.651Z ✓ 110 [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.0s) 2026-10-16T09:49:23.257Z ✓ 112 [arm] › e2e/specs/prd-2026-007-noshow-cancel.spec.ts:154:6 › PRD-2026-007 — cancellation per room › TC-ARM-112 API: all-rooms cancel lands parent CANCELLED [S-05] (4.3s) 2026-10-16T09:49:24.453Z ✓ 111 [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] (6.2s) 2026-10-16T09:49:24.992Z ✘ 115 [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] (4.3s) 2026-10-16T09:49:25.599Z ✓ 116 [arm] › e2e/specs/prd-2026-007-noshow-cancel.spec.ts:163:6 › PRD-2026-007 — cancellation per room › TC-ARM-113 API: cancelling a CHECKED_IN room is blocked with 409 [S-10/NG1] (2.3s) 2026-10-16T09:49:28.459Z ✓ 118 [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.5s) 2026-10-16T09:49:28.510Z ✓ 114 [arm] › e2e/specs/prd-2026-007-partial-checkin.spec.ts:87:6 › PRD-2026-007 — partial check-in › TC-ARM-073 Continue stays disabled with zero rooms selected [UX] (8.0s) 2026-10-16T09:49:29.519Z ✓ 117 [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] (5.1s) 2026-10-16T09:49:29.532Z ✓ 119 [arm] › e2e/specs/prd-2026-007-noshow-cancel.spec.ts:174:6 › PRD-2026-007 — cancellation per room › TC-ARM-114 API: CANCELLED is terminal — no later check-in [state machine] (3.9s) 2026-10-16T09:49:31.040Z ✓ 120 [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] (2.6s) 2026-10-16T09:49:33.480Z ✓ 121 [arm] › e2e/specs/prd-2026-007-partial-checkin.spec.ts:94:6 › PRD-2026-007 — partial check-in › TC-ARM-075 API: checking in a subset flips only those rooms [Must 3/S-08] (5.0s) 2026-10-16T09:49:33.986Z ✓ 123 [arm] › e2e/specs/prd-2026-007-noshow-cancel.spec.ts:183:6 › PRD-2026-007 — cancellation per room › TC-ARM-115 API: cancel subset across two calls accumulates correctly [Must 12] (4.4s) 2026-10-16T09:49:34.037Z ✓ 122 [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] (4.5s) 2026-10-16T09:49:35.338Z ✓ 124 [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] (4.3s) 2026-10-16T09:49:39.128Z ✓ 127 [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] (5.1s) 2026-10-16T09:49:39.149Z ✓ 125 [arm] › e2e/specs/prd-2026-007-partial-checkin.spec.ts:108:6 › PRD-2026-007 — partial check-in › TC-ARM-076 API: untouched rooms keep null actualCheckInTime [audit integrity, §1] (5.6s) 2026-10-16T09:49:40.976Z ✓ 126 [arm] › e2e/specs/prd-2026-007-noshow-cancel.spec.ts:195:6 › PRD-2026-007 — cancellation per room › TC-ARM-116 UI: cancelled room card stays visible (grey), booking stays open [§6.4] (6.9s) 2026-10-16T09:49:41.565Z ✓ 128 [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] (6.2s) 2026-10-16T09:49:42.058Z ✓ 130 [arm] › e2e/specs/prd-2026-007-partial-checkin.spec.ts:120:6 › PRD-2026-007 — partial check-in › TC-ARM-077 API: arrival timestamp ≈ now on checked rooms [audit-true arrival] (2.9s) 2026-10-16T09:49:42.915Z ✓ 131 [arm] › e2e/specs/prd-2026-007-noshow-cancel.spec.ts:208: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] (1.9s) 2026-10-16T09:49:44.502Z ✓ 129 [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] (5.4s) 2026-10-16T09:49:44.749Z ✓ 133 [arm] › e2e/specs/prd-2026-007-partial-checkin.spec.ts:131:6 › PRD-2026-007 — partial check-in › TC-ARM-078 API: explicit actualCheckInTime is honored [Must 3] (2.7s) 2026-10-16T09:49:44.976Z ✓ 134 [arm] › e2e/specs/prd-2026-007-noshow-cancel.spec.ts:220:6 › PRD-2026-007 — scheduled cancel/no-show with withdraw window › TC-ARM-118 GET scheduled-action reflects the staged op [staged ops] (2.0s) 2026-10-16T09:49:45.226Z ✘ 136 [arm] › e2e/specs/prd-2026-007-partial-checkin.spec.ts:141: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] (296ms) 2026-10-16T09:49:46.083Z ✓ 135 [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] (1.6s) 2026-10-16T09:49:46.114Z ✓ 139 [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] (18ms) 2026-10-16T09:49:47.024Z ✘ 137 [arm] › e2e/specs/prd-2026-007-noshow-cancel.spec.ts:232:6 › PRD-2026-007 — scheduled cancel/no-show with withdraw window › TC-ARM-119 withdraw-scheduled aborts the staged action [staged ops] (1.4s) 2026-10-16T09:49:47.030Z ✘ 138 [arm] › e2e/specs/prd-2026-007-partial-checkin.spec.ts:154:6 › PRD-2026-007 — partial check-in › TC-ARM-080 full-subset check-in (all rooms at once) lands parent CHECKED_IN [Must 3] (263ms) 2026-10-16T09:49:48.901Z ✘ 142 [arm] › e2e/specs/prd-2026-007-partial-checkin.spec.ts:163: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] (222ms) 2026-10-16T09:49:49.209Z ✘ 140 [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] (2.6s) 2026-10-16T09:49:50.168Z ✘ 141 [arm] › e2e/specs/prd-2026-007-noshow-cancel.spec.ts:245:6 › PRD-2026-007 — scheduled cancel/no-show with withdraw window › TC-ARM-120 staged no-show executes after the window elapses [staged ops] (1.3s) 2026-10-16T09:49:50.291Z ✘ 143 [arm] › e2e/specs/prd-2026-007-partial-checkin.spec.ts:179:6 › PRD-2026-007 — partial check-in › TC-ARM-082 one-by-one staggering over 5 rooms keeps every intermediate state exact [Must 12] (233ms) 2026-10-16T09:49:51.688Z ✘ 146 [arm] › e2e/specs/prd-2026-007-partial-checkin.spec.ts:192: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] (205ms) 2026-10-16T09:49:51.989Z ✘ 144 [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] (1.4s) 2026-10-16T09:49:53.057Z ✘ 145 [arm] › e2e/specs/prd-2026-007-noshow-cancel.spec.ts:259: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] (1.3s) 2026-10-16T09:49:54.151Z ✘ 147 [arm] › e2e/specs/prd-2026-007-partial-checkin.spec.ts:203:6 › PRD-2026-007 — partial check-in › TC-ARM-084 UI reflects partial state immediately after API check-in + reload [G5] (1.2s) 2026-10-16T09:49:54.668Z ✘ 148 [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] (1.4s) 2026-10-16T09:49:55.932Z ✘ 149 [arm] › e2e/specs/prd-2026-007-noshow-cancel.spec.ts:274: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] (1.4s) 2026-10-16T09:49:56.675Z ✘ 151 [arm] › e2e/specs/prd-2026-007-partial-checkin.spec.ts:212: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] (1.3s) 2026-10-16T09:49:57.204Z ✘ 132 [arm] › e2e/specs/prd-2026-007-finance.spec.ts:341:6 › PRD-2026-007 — finance surfaces in the UI › TC-ARM-281 details payment summary reflects an added charge after reload [Must 8 UI] (14.9s) 2026-10-16T09:49:57.531Z ✓ 152 [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] (229ms) 2026-10-16T09:49:57.574Z ✘ 150 [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] (2.8s) 2026-10-16T09:49:57.574Z ✓ 154 [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] (26ms) 2026-10-16T09:49:57.667Z ✘ 155 [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] (17ms) 2026-10-16T09:49:58.987Z - 157 [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-16T09:49:58.987Z - 159 [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-16T09:49:58.987Z - 160 [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-16T09:49:59.184Z ✘ 153 [arm] › e2e/specs/prd-2026-007-partial-checkin.spec.ts:222:6 › PRD-2026-007 — partial check-in › TC-ARM-088 navigating away from the wizard without confirming leaves rooms UPCOMING [S-18] (1.2s) 2026-10-16T09:50:01.024Z ✘ 161 [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] (1.9s) 2026-10-16T09:50:01.648Z ✓ 156 [arm] › e2e/specs/prd-2026-007-finance.spec.ts:407:6 › PRD-2026-007 — folios, charge moves and ledger integrity › TC-ARM-282 folio list shows the booking folio; detail opens [folio] (3.0s) 2026-10-16T09:50:02.149Z ✘ 162 [arm] › e2e/specs/prd-2026-007-partial-checkin.spec.ts:234:6 › PRD-2026-007 — partial check-in › TC-ARM-089 fully-terminal booking offers no partial check-in entry [state gating] (1.3s) 2026-10-16T09:50:06.505Z ✘ 164 [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] (3.4s) 2026-10-16T09:50:06.806Z ✓ 163 [arm] › e2e/specs/prd-2026-007-finance.spec.ts:419:6 › PRD-2026-007 — folios, charge moves and ledger integrity › TC-ARM-283 link a charge to a folio; folio totals update [folio] (5.1s) 2026-10-16T09:50:11.055Z ✓ 166 [arm] › e2e/specs/prd-2026-007-finance.spec.ts:431:6 › PRD-2026-007 — folios, charge moves and ledger integrity › TC-ARM-284 unlink restores the unassigned pool [folio] (4.2s) 2026-10-16T09:50:12.102Z ✘ 167 [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] (4.0s) 2026-10-16T09:50:13.548Z ✘ 168 [arm] › e2e/specs/prd-2026-007-finance.spec.ts:446: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] (1.7s) 2026-10-16T09:50:15.382Z ✘ 169 [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] (1.9s) 2026-10-16T09:50:17.252Z ✓ 170 [arm] › e2e/specs/prd-2026-007-finance.spec.ts:462:6 › PRD-2026-007 — folios, charge moves and ledger integrity › TC-ARM-286 move charges between guest accounts shifts balances, total unchanged [NG4] (2.4s) 2026-10-16T09:50:18.785Z ✘ 165 [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] (14.9s) 2026-10-16T09:50:19.092Z ✘ 172 [arm] › e2e/specs/prd-2026-007-finance.spec.ts:480:6 › PRD-2026-007 — folios, charge moves and ledger integrity › TC-ARM-287 locked (checked-out) account rejects charge moves [party lock] (1.8s) 2026-10-16T09:50:19.971Z ✘ 171 [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] (3.3s) 2026-10-16T09:50:22.115Z ✓ 173 [arm] › e2e/specs/prd-2026-007-finance.spec.ts:497:6 › PRD-2026-007 — folios, charge moves and ledger integrity › TC-ARM-288 discount scoped to a guest account [discounts] (3.0s) 2026-10-16T09:50:22.930Z ✘ 174 [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] (2.9s) 2026-10-16T09:50:24.331Z ✘ 175 [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] (2.7s) 2026-10-16T09:50:25.309Z ✓ 176 [arm] › e2e/specs/prd-2026-007-finance.spec.ts:511:6 › PRD-2026-007 — folios, charge moves and ledger integrity › TC-ARM-289 payment distribution strategies (EQUAL/SINGLE/MANUAL) [payments] (3.2s) 2026-10-16T09:50:32.124Z ✘ 179 [arm] › e2e/specs/prd-2026-007-finance.spec.ts:545: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] (6.6s) 2026-10-16T09:50:32.489Z ✘ 178 [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] (6.6s) 2026-10-16T09:50:35.338Z ✘ 180 [arm] › e2e/specs/prd-2026-007-finance.spec.ts:571: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] (1.7s) 2026-10-16T09:50:36.064Z ✘ 181 [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] (2.1s) 2026-10-16T09:50:38.757Z ✘ 182 [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] (2.1s) 2026-10-16T09:50:39.400Z ✘ 183 [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] (2.0s) 2026-10-16T09:50:42.142Z ✘ 184 [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] (2.0s) 2026-10-16T09:50:42.715Z ✘ 185 [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] (2.0s) 2026-10-16T09:50:46.721Z ✓ 186 [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] (3.2s) 2026-10-16T09:50:47.993Z ✓ 187 [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] (4.0s) 2026-10-16T09:50:49.797Z ✓ 188 [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] (3.1s) 2026-10-16T09:50:50.218Z ✓ 189 [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] (2.2s) 2026-10-16T09:50:54.993Z ✘ 191 [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] (4.7s) 2026-10-16T09:50:55.033Z ✓ 190 [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] (5.2s) 2026-10-16T09:51:00.136Z ✓ 192 [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] (5.1s) 2026-10-16T09:51:01.068Z ✓ 193 [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] (6.0s) 2026-10-16T09:51:12.297Z ✓ 195 [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.2s) 2026-10-16T09:51:13.910Z ✓ 194 [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] (13.8s) 2026-10-16T09:51:16.050Z ✓ 196 [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] (3.7s) 2026-10-16T09:51:17.032Z ✓ 197 [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] (3.1s) 2026-10-16T09:51:19.131Z ✓ 198 [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] (3.1s) 2026-10-16T09:51:19.969Z ✓ 199 [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] (2.9s) 2026-10-16T09:51:23.628Z ✓ 200 [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] (4.5s) 2026-10-16T09:51:26.789Z ✓ 202 [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] (3.1s) 2026-10-16T09:51:29.608Z ✓ 203 [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] (2.8s) 2026-10-16T09:51:31.338Z ✘ 158 [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] (1.5m) 2026-10-16T09:51:32.877Z ✓ 204 [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] (3.3s) 2026-10-16T09:51:34.760Z ✘ 201 [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] (14.7s) 2026-10-16T09:51:36.372Z ✓ 206 [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] (3.5s) 2026-10-16T09:51:38.373Z ✓ 205 [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] (5.6s) 2026-10-16T09:51:38.428Z ✓ 207 [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] (3.7s) 2026-10-16T09:51:40.045Z ✓ 208 [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] (3.7s) 2026-10-16T09:51:43.274Z ✓ 211 [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] (3.2s) 2026-10-16T09:51:43.973Z ✓ 209 [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] (5.6s) 2026-10-16T09:51:44.102Z ✓ 210 [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] (215ms) 2026-10-16T09:51:47.510Z ✓ 212 [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] (4.2s) 2026-10-16T09:51:49.307Z ✓ 214 [arm] › e2e/specs/prd-2026-007-stay-view.spec.ts:119: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] (4.7s) 2026-10-16T09:51:50.018Z ✓ 213 [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] (6.0s) 2026-10-16T09:51:52.459Z ✓ 215 [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] (4.9s) 2026-10-16T09:51:55.491Z ✓ 216 [arm] › e2e/specs/prd-2026-007-stay-view.spec.ts:125: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] (6.2s) 2026-10-16T09:51:56.596Z ✓ 217 [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] (6.6s) 2026-10-16T09:51:57.042Z ✘ 177 [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] (1.5m) 2026-10-16T09:51:57.659Z ✓ 218 [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] (5.2s) 2026-10-16T09:52:00.304Z ✓ 219 [arm] › e2e/specs/prd-2026-007-stay-view.spec.ts:132:6 › PRD-2026-007 — stay view blocks per room/slot › TC-ARM-232 UPCOMING reservation block is purple family [stay view colors] (4.8s) 2026-10-16T09:52:02.972Z ✓ 221 [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] (5.3s) 2026-10-16T09:52:03.018Z ✓ 220 [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] (6.4s) 2026-10-16T09:52:07.323Z ✓ 224 [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] (4.3s) 2026-10-16T09:52:08.971Z ✓ 223 [arm] › e2e/specs/prd-2026-007-stay-view.spec.ts:138:6 › PRD-2026-007 — stay view blocks per room/slot › TC-ARM-233 CHECKED_IN room block is red family [stay view colors] (8.6s) 2026-10-16T09:52:09.148Z ✓ 222 [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] (10.5s) 2026-10-16T09:52:11.987Z ✓ 226 [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.6s) 2026-10-16T09:52:14.736Z ✓ 229 [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] (2.7s) 2026-10-16T09:52:15.743Z ✓ 227 [arm] › e2e/specs/prd-2026-007-stay-view.spec.ts:146:6 › PRD-2026-007 — stay view blocks per room/slot › TC-ARM-234 CHECKED_OUT room block is grey family [stay view colors] (6.8s) 2026-10-16T09:52:16.414Z ✓ 228 [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] (7.2s) 2026-10-16T09:52:18.527Z ✓ 230 [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] (3.8s) 2026-10-16T09:52:22.215Z ✓ 231 [arm] › e2e/specs/prd-2026-007-stay-view.spec.ts:162: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] (6.5s) 2026-10-16T09:52:24.364Z ✓ 232 [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] (7.9s) 2026-10-16T09:52:26.636Z ✓ 233 [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.1s) 2026-10-16T09:52:28.958Z ✘ 225 [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] (15.8s) 2026-10-16T09:52:28.958Z - 237 [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-16T09:52:28.958Z - 238 [arm] › e2e/specs/prd-2026-007-rbac-ux.spec.ts:213:6 › TC-ARM-311 restricted role: cancel → 403 [S-09] 2026-10-16T09:52:28.958Z - 239 [arm] › e2e/specs/prd-2026-007-rbac-ux.spec.ts:214:6 › TC-ARM-312 restricted role: no-show → 403 [S-09] 2026-10-16T09:52:28.958Z - 240 [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-16T09:52:28.958Z - 241 [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-16T09:52:28.958Z - 242 [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-16T09:52:29.316Z ✓ 235 [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] (4.9s) 2026-10-16T09:52:30.563Z ✓ 236 [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] (3.9s) 2026-10-16T09:52:30.678Z ✓ 234 [arm] › e2e/specs/prd-2026-007-stay-view.spec.ts:175:6 › PRD-2026-007 — stay view blocks per room/slot › TC-ARM-236 cancelled room frees its row — block no longer rendered [inventory release] (8.4s) 2026-10-16T09:52:34.936Z ✓ 243 [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] (5.6s) 2026-10-16T09:52:35.444Z ✓ 244 [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] (4.9s) 2026-10-16T09:52:38.132Z ✓ 245 [arm] › e2e/specs/prd-2026-007-stay-view.spec.ts:184:6 › PRD-2026-007 — stay view blocks per room/slot › TC-ARM-237 no-show room frees its row likewise [inventory release] (7.4s) 2026-10-16T09:52:39.506Z ✓ 247 [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] (4.0s) 2026-10-16T09:52:40.519Z ✓ 246 [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] (5.6s) 2026-10-16T09:52:41.261Z - 250 [arm] › e2e/specs/prd-2026-007-room-cards.spec.ts:211: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-16T09:52:43.990Z ✓ 249 [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.5s) 2026-10-16T09:52:47.714Z ✓ 252 [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] (3.7s) 2026-10-16T09:52:47.997Z ✓ 251 [arm] › e2e/specs/prd-2026-007-room-cards.spec.ts:225: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] (6.7s) 2026-10-16T09:52:51.550Z ✓ 253 [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] (3.8s) 2026-10-16T09:52:52.649Z ✓ 254 [arm] › e2e/specs/prd-2026-007-room-cards.spec.ts:241:6 › PRD-2026-007 — room cards on Booking Details › TC-ARM-052 card shows the per-night price [Must 7] (4.6s) 2026-10-16T09:52:54.607Z ✘ 248 [arm] › e2e/specs/prd-2026-007-stay-view.spec.ts:214: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] (16.4s) 2026-10-16T09:52:55.513Z ✓ 255 [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] (3.9s) 2026-10-16T09:52:57.746Z ✓ 256 [arm] › e2e/specs/prd-2026-007-room-cards.spec.ts:252:6 › PRD-2026-007 — room cards on Booking Details › TC-ARM-053 card shows a meal-plan label [Must 7] (5.1s) 2026-10-16T09:52:58.577Z ✓ 258 [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] (3.1s) 2026-10-16T09:53:01.700Z ✓ 260 [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 (3.1s) 2026-10-16T09:53:04.256Z ✓ 259 [arm] › e2e/specs/prd-2026-007-room-cards.spec.ts:260: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] (6.5s) 2026-10-16T09:53:07.953Z ✘ 257 [arm] › e2e/specs/prd-2026-007-stay-view.spec.ts:226: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] (13.3s) 2026-10-16T09:53:08.708Z ✓ 261 [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 (7.0s) 2026-10-16T09:53:11.020Z ✓ 262 [arm] › e2e/specs/prd-2026-007-room-cards.spec.ts:272:6 › PRD-2026-007 — room cards on Booking Details › TC-ARM-055 card count equals live RoomInstance count after a cancel [consistency] (6.7s) 2026-10-16T09:53:14.584Z ✓ 263 [arm] › e2e/specs/prd-2026-007-stay-view.spec.ts:246:6 › PRD-2026-007 — stay view blocks per room/slot › TC-ARM-240 block context menu offers status-appropriate actions [stay view menu] (6.6s) 2026-10-16T09:53:15.736Z ✓ 264 [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] (7.0s) 2026-10-16T09:53:16.465Z ✓ 265 [arm] › e2e/specs/prd-2026-007-room-cards.spec.ts:284:6 › PRD-2026-007 — room cards on Booking Details › TC-ARM-057 payment summary is reservation-level on the details page [NG4/Must 8] (5.4s) 2026-10-16T09:53:20.176Z ✓ 266 [arm] › e2e/specs/prd-2026-007-stay-view.spec.ts:257: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] (5.6s) 2026-10-16T09:53:24.030Z ✓ 267 [arm] › e2e/specs/prd-2026-007-room-cards.spec.ts:293:6 › PRD-2026-007 — room cards on Booking Details › TC-ARM-058 details reflect fresh API state after reload (no stale card status) [G5] (7.5s) 2026-10-16T09:53:27.555Z ✓ 268 [arm] › e2e/specs/prd-2026-007-stay-view.spec.ts:266:6 › PRD-2026-007 — stay view blocks per room/slot › TC-ARM-242 stay view reflects a mutation after reload (no stale grid) [freshness] (7.4s) 2026-10-16T09:53:29.880Z ✓ 269 [arm] › e2e/specs/prd-2026-007-room-cards.spec.ts:305: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] (5.8s) 2026-10-16T09:53:30.485Z ✓ 270 [arm] › e2e/specs/prd-2026-007-stay-view.spec.ts:275: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] (2.9s) 2026-10-16T09:53:36.835Z ✓ 271 [arm] › e2e/specs/prd-2026-007-room-cards.spec.ts:320: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] (6.9s) 2026-10-16T09:53:37.993Z ✓ 272 [arm] › e2e/specs/prd-2026-007-stay-view.spec.ts:283: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] (7.5s) 2026-10-16T09:53:40.906Z ✓ 274 [arm] › e2e/specs/prd-2026-007-stay-view.spec.ts:297:6 › PRD-2026-007 — stay view blocks per room/slot › TC-ARM-245 stay view loads without console errors or 5xx [quality gate] (2.9s) 2026-10-16T09:53:42.953Z ✓ 273 [arm] › e2e/specs/prd-2026-007-room-cards.spec.ts:330:6 › PRD-2026-007 — room cards on Booking Details › TC-ARM-062 room-card layout holds at 1280×720 (chip not clipped) [UX] (6.1s) 2026-10-16T09:53:43.973Z ✓ 275 [arm] › e2e/specs/prd-2026-007-stay-view.spec.ts:309: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.1s) 2026-10-16T09:54:05.577Z ✓ 277 [arm] › e2e/specs/prd-2026-007-stay-view.spec.ts:318:6 › PRD-2026-007 — stay view blocks per room/slot › TC-ARM-247 maintenance blocks render alongside ARM blocks [regression smoke] (5.6s) 2026-10-16T09:54:10.164Z ✓ 276 [arm] › e2e/specs/prd-2026-007-room-cards.spec.ts:345: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] (7.0s) 2026-10-16T09:54:10.299Z 1) [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-16T09:54:10.299Z Error: expect(locator).toBeVisible() failed 2026-10-16T09:54:10.299Z Locator: getByTestId('checkin__id_per_adult_notice') 2026-10-16T09:54:10.299Z Expected: visible 2026-10-16T09:54:10.299Z Timeout: 10000ms 2026-10-16T09:54:10.299Z Error: element(s) not found 2026-10-16T09:54:10.299Z Call log: 2026-10-16T09:54:10.299Z  - Expect "toBeVisible" with timeout 10000ms 2026-10-16T09:54:10.299Z  - waiting for getByTestId('checkin__id_per_adult_notice') 2026-10-16T09:54:10.299Z 79 | 2026-10-16T09:54:10.299Z 80 | const notice = page.getByTestId('checkin__id_per_adult_notice'); 2026-10-16T09:54:10.299Z > 81 | await expect(notice).toBeVisible(); 2026-10-16T09:54:10.299Z | ^ 2026-10-16T09:54:10.299Z 82 | await expect(notice).toHaveAttribute('data-adults', '2'); 2026-10-16T09:54:10.299Z 83 | await expect(notice).toHaveAttribute('data-ids', '1'); 2026-10-16T09:54:10.299Z 84 | await expect(notice).toContainText('2 adults added, 1 guest ID uploaded.'); 2026-10-16T09:54:10.299Z at /home/ubuntu/regression-runner/repos/dev/hotel-frontend-core/e2e/specs/checkin-id-per-adult.spec.ts:81:24 2026-10-16T09:54:10.300Z attachment #1: screenshot (image/png) ────────────────────────────────────────────────────────── 2026-10-16T09:54:10.300Z test-results/checkin-id-per-adult-One-I-e1688-ounts-and-checks-nothing-in-chromium/test-failed-1.png 2026-10-16T09:54:10.300Z ──────────────────────────────────────────────────────────────────────────────────────────────── 2026-10-16T09:54:10.300Z Error Context: test-results/checkin-id-per-adult-One-I-e1688-ounts-and-checks-nothing-in-chromium/error-context.md 2026-10-16T09:54:10.300Z Error Context: test-results/checkin-id-per-adult-One-I-e1688-ounts-and-checks-nothing-in-chromium/error-context.md 2026-10-16T09:54:10.300Z attachment #4: trace (application/zip) ───────────────────────────────────────────────────────── 2026-10-16T09:54:10.300Z test-results/checkin-id-per-adult-One-I-e1688-ounts-and-checks-nothing-in-chromium/trace.zip 2026-10-16T09:54:10.300Z Usage: 2026-10-16T09:54:10.300Z pnpm exec playwright show-trace test-results/checkin-id-per-adult-One-I-e1688-ounts-and-checks-nothing-in-chromium/trace.zip 2026-10-16T09:54:10.300Z ──────────────────────────────────────────────────────────────────────────────────────────────── 2026-10-16T09:54:10.300Z 2) [chromium] › e2e/specs/prd-2026-005-active-template.spec.ts:61:6 › PRD-2026-005 — Active custom template wins › TC-PRD-091 template with unregistered fontName still renders (no font crash) 2026-10-16T09:54:10.300Z Error: expect(received).toBe(expected) // Object.is equality 2026-10-16T09:54:10.300Z Expected: true 2026-10-16T09:54:10.300Z Received: false 2026-10-16T09:54:10.300Z 113 | }, 2026-10-16T09:54:10.300Z 114 | ); 2026-10-16T09:54:10.300Z > 115 | expect(created.ok()).toBe(true); 2026-10-16T09:54:10.300Z | ^ 2026-10-16T09:54:10.300Z 116 | const createdBody = (await created.json()) as { id: string }; 2026-10-16T09:54:10.300Z 117 | 2026-10-16T09:54:10.300Z 118 | const beforeResp = await authedPage.request.get( 2026-10-16T09:54:10.300Z at /home/ubuntu/regression-runner/repos/dev/hotel-frontend-core/e2e/specs/prd-2026-005-active-template.spec.ts:115:24 2026-10-16T09:54:10.300Z attachment #1: screenshot (image/png) ────────────────────────────────────────────────────────── 2026-10-16T09:54:10.300Z test-results/prd-2026-005-active-templa-0a4c7-till-renders-no-font-crash--chromium/test-failed-1.png 2026-10-16T09:54:10.300Z ──────────────────────────────────────────────────────────────────────────────────────────────── 2026-10-16T09:54:10.300Z Error Context: test-results/prd-2026-005-active-templa-0a4c7-till-renders-no-font-crash--chromium/error-context.md 2026-10-16T09:54:10.300Z Error Context: test-results/prd-2026-005-active-templa-0a4c7-till-renders-no-font-crash--chromium/error-context.md 2026-10-16T09:54:10.300Z attachment #4: trace (application/zip) ───────────────────────────────────────────────────────── 2026-10-16T09:54:10.300Z test-results/prd-2026-005-active-templa-0a4c7-till-renders-no-font-crash--chromium/trace.zip 2026-10-16T09:54:10.301Z Usage: 2026-10-16T09:54:10.301Z pnpm exec playwright show-trace test-results/prd-2026-005-active-templa-0a4c7-till-renders-no-font-crash--chromium/trace.zip 2026-10-16T09:54:10.301Z ──────────────────────────────────────────────────────────────────────────────────────────────── 2026-10-16T09:54:10.301Z 3) [chromium] › e2e/specs/prd-2026-005-supplementary-docs.spec.ts:48:6 › PRD-2026-005 — Supplementary documents › TC-PRD-053 Debit Note (full) generates 201 + PDF blob 2026-10-16T09:54:10.301Z Test timeout of 90000ms exceeded. 2026-10-16T09:54:10.301Z Error: page.waitForResponse: Test timeout of 90000ms exceeded. 2026-10-16T09:54:10.301Z 57 | await authedPage.locator('#reason').fill('E2E QA · DN full'); 2026-10-16T09:54:10.301Z 58 | const [response] = await Promise.all([ 2026-10-16T09:54:10.301Z > 59 | authedPage.waitForResponse( 2026-10-16T09:54:10.301Z | ^ 2026-10-16T09:54:10.301Z 60 | (r) => 2026-10-16T09:54:10.301Z 61 | r.url().includes('/debit-notes') && 2026-10-16T09:54:10.301Z 62 | r.request().method() === 'POST' && 2026-10-16T09:54:10.301Z at /home/ubuntu/regression-runner/repos/dev/hotel-frontend-core/e2e/specs/prd-2026-005-supplementary-docs.spec.ts:59:15 2026-10-16T09:54:10.301Z attachment #1: screenshot (image/png) ────────────────────────────────────────────────────────── 2026-10-16T09:54:10.301Z test-results/prd-2026-005-supplementary-289df-full-generates-201-PDF-blob-chromium/test-failed-1.png 2026-10-16T09:54:10.301Z ──────────────────────────────────────────────────────────────────────────────────────────────── 2026-10-16T09:54:10.301Z Error Context: test-results/prd-2026-005-supplementary-289df-full-generates-201-PDF-blob-chromium/error-context.md 2026-10-16T09:54:10.301Z Error Context: test-results/prd-2026-005-supplementary-289df-full-generates-201-PDF-blob-chromium/error-context.md 2026-10-16T09:54:10.301Z attachment #4: trace (application/zip) ───────────────────────────────────────────────────────── 2026-10-16T09:54:10.301Z test-results/prd-2026-005-supplementary-289df-full-generates-201-PDF-blob-chromium/trace.zip 2026-10-16T09:54:10.301Z Usage: 2026-10-16T09:54:10.301Z pnpm exec playwright show-trace test-results/prd-2026-005-supplementary-289df-full-generates-201-PDF-blob-chromium/trace.zip 2026-10-16T09:54:10.301Z ──────────────────────────────────────────────────────────────────────────────────────────────── 2026-10-16T09:54:10.301Z 4) [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-16T09:54:10.301Z TimeoutError: locator.click: Timeout 15000ms exceeded. 2026-10-16T09:54:10.301Z Call log: 2026-10-16T09:54:10.301Z  - waiting for getByTestId('unassigned-room-banner').getByRole('button', { name: 'Return to Room 101', exact: true }) 2026-10-16T09:54:10.301Z 68 | await page.screenshot({ path: info.outputPath('room-unassigned.png') }); 2026-10-16T09:54:10.301Z 69 | await info.attach('room-unassigned', { path: info.outputPath('room-unassigned.png'), contentType: 'image/png' }); 2026-10-16T09:54:10.301Z > 70 | await banner.getByRole('button', { name: `Return to Room ${room.roomNumber}`, exact: true }).click(); 2026-10-16T09:54:10.301Z | ^ 2026-10-16T09:54:10.301Z 71 | await expect(banner).not.toBeVisible(); 2026-10-16T09:54:10.301Z 72 | await expect.poll(async () => roomsOf(await api.getCheckin(created.checkInId))[0].roomNumbers).toContain(room.roomNumber); 2026-10-16T09:54:10.301Z 73 | await expect.poll(money).toEqual(before); 2026-10-16T09:54:10.301Z at /home/ubuntu/regression-runner/repos/dev/hotel-frontend-core/e2e/specs/reservation-unassign.spec.ts:70:102 2026-10-16T09:54:10.301Z attachment #1: money-before (application/json) ───────────────────────────────────────────────── 2026-10-16T09:54:10.301Z test-results/reservation-unassign-TC-UN-3c625--without-changing-its-money-chromium/attachments/money-before-ba99fc0157635049a197163c5dd483b950357482.json 2026-10-16T09:54:10.301Z ──────────────────────────────────────────────────────────────────────────────────────────────── 2026-10-16T09:54:10.301Z attachment #2: unassign-confirmation (image/png) ─────────────────────────────────────────────── 2026-10-16T09:54:10.301Z test-results/reservation-unassign-TC-UN-3c625--without-changing-its-money-chromium/attachments/unassign-confirmation-ff905932619b40ac8b1633960c3a32a958ec19c4.png 2026-10-16T09:54:10.302Z ──────────────────────────────────────────────────────────────────────────────────────────────── 2026-10-16T09:54:10.302Z attachment #3: money-after-unassign (application/json) ───────────────────────────────────────── 2026-10-16T09:54:10.302Z test-results/reservation-unassign-TC-UN-3c625--without-changing-its-money-chromium/attachments/money-after-unassign-dbf567b68e54bdb96346ca8d690bb05cec1ebb8b.json 2026-10-16T09:54:10.302Z ──────────────────────────────────────────────────────────────────────────────────────────────── 2026-10-16T09:54:10.302Z attachment #4: room-unassigned (image/png) ───────────────────────────────────────────────────── 2026-10-16T09:54:10.302Z test-results/reservation-unassign-TC-UN-3c625--without-changing-its-money-chromium/attachments/room-unassigned-ef4d4faa8510899053d99284e424d89502611e91.png 2026-10-16T09:54:10.302Z ──────────────────────────────────────────────────────────────────────────────────────────────── 2026-10-16T09:54:10.302Z attachment #5: screenshot (image/png) ────────────────────────────────────────────────────────── 2026-10-16T09:54:10.302Z test-results/reservation-unassign-TC-UN-3c625--without-changing-its-money-chromium/test-failed-1.png 2026-10-16T09:54:10.302Z ──────────────────────────────────────────────────────────────────────────────────────────────── 2026-10-16T09:54:10.302Z Error Context: test-results/reservation-unassign-TC-UN-3c625--without-changing-its-money-chromium/error-context.md 2026-10-16T09:54:10.302Z attachment #7: trace (application/zip) ───────────────────────────────────────────────────────── 2026-10-16T09:54:10.302Z test-results/reservation-unassign-TC-UN-3c625--without-changing-its-money-chromium/trace.zip 2026-10-16T09:54:10.302Z Usage: 2026-10-16T09:54:10.302Z pnpm exec playwright show-trace test-results/reservation-unassign-TC-UN-3c625--without-changing-its-money-chromium/trace.zip 2026-10-16T09:54:10.302Z ──────────────────────────────────────────────────────────────────────────────────────────────── 2026-10-16T09:54:10.302Z 5) [chromium] › e2e/specs/revenue-guardrail-removal.spec.ts:23:5 › TC-REV-GUARD-1 clearing both configured limits removes the guardrail 2026-10-16T09:54:10.302Z Error: GET guardrails → 403 2026-10-16T09:54:10.302Z expect(received).toBeTruthy() 2026-10-16T09:54:10.302Z Received: false 2026-10-16T09:54:10.302Z 17 | async function currentGuardrails(api: Awaited>, path: string): Promise { 2026-10-16T09:54:10.302Z 18 | const response = await api.get(path); 2026-10-16T09:54:10.302Z > 19 | expect(response.ok(), `GET guardrails → ${response.status()}`).toBeTruthy(); 2026-10-16T09:54:10.302Z | ^ 2026-10-16T09:54:10.302Z 20 | return ((await response.json()) as GuardrailResponse).data; 2026-10-16T09:54:10.302Z 21 | } 2026-10-16T09:54:10.302Z 22 | 2026-10-16T09:54:10.302Z at currentGuardrails (/home/ubuntu/regression-runner/repos/dev/hotel-frontend-core/e2e/specs/revenue-guardrail-removal.spec.ts:19:65) 2026-10-16T09:54:10.302Z at /home/ubuntu/regression-runner/repos/dev/hotel-frontend-core/e2e/specs/revenue-guardrail-removal.spec.ts:31:16 2026-10-16T09:54:10.302Z attachment #1: screenshot (image/png) ────────────────────────────────────────────────────────── 2026-10-16T09:54:10.302Z test-results/revenue-guardrail-removal--445ed-imits-removes-the-guardrail-chromium/test-failed-1.png 2026-10-16T09:54:10.302Z ──────────────────────────────────────────────────────────────────────────────────────────────── 2026-10-16T09:54:10.302Z Error Context: test-results/revenue-guardrail-removal--445ed-imits-removes-the-guardrail-chromium/error-context.md 2026-10-16T09:54:10.302Z attachment #3: trace (application/zip) ───────────────────────────────────────────────────────── 2026-10-16T09:54:10.302Z test-results/revenue-guardrail-removal--445ed-imits-removes-the-guardrail-chromium/trace.zip 2026-10-16T09:54:10.302Z Usage: 2026-10-16T09:54:10.302Z pnpm exec playwright show-trace test-results/revenue-guardrail-removal--445ed-imits-removes-the-guardrail-chromium/trace.zip 2026-10-16T09:54:10.302Z ──────────────────────────────────────────────────────────────────────────────────────────────── 2026-10-16T09:54:10.302Z 6) [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] 2026-10-16T09:54:10.302Z Error: one line per cancelled room 2026-10-16T09:54:10.302Z expect(received).toEqual(expected) // deep equality 2026-10-16T09:54:10.303Z - Expected - 2 2026-10-16T09:54:10.303Z + Received + 2 2026-10-16T09:54:10.303Z  Array [ 2026-10-16T09:54:10.303Z - ObjectContaining { 2026-10-16T09:54:10.303Z + Object { 2026-10-16T09:54:10.303Z  "amount": 750, 2026-10-16T09:54:10.303Z - "roomNumber": "101", 2026-10-16T09:54:10.303Z + "roomNumber": "102", 2026-10-16T09:54:10.303Z  }, 2026-10-16T09:54:10.303Z  ] 2026-10-16T09:54:10.303Z 133 | // The charge is carried on the reservation's finance read, not on one room's. 2026-10-16T09:54:10.303Z 134 | expect(f.body.cancellationAmount, 'reservation-level cancellation amount').toBe(750); 2026-10-16T09:54:10.303Z > 135 | expect(f.body.cancellationBreakdown, 'one line per cancelled room').toEqual([ 2026-10-16T09:54:10.303Z | ^ 2026-10-16T09:54:10.303Z 136 | expect.objectContaining({ roomNumber: inv.rooms[0].roomNumber, amount: 750 }), 2026-10-16T09:54:10.303Z 137 | ]); 2026-10-16T09:54:10.303Z 138 | // And it is part of what the guest owes: the remaining room (₹2,625 with tax) plus the ₹750 fee. 2026-10-16T09:54:10.303Z at /home/ubuntu/regression-runner/repos/dev/hotel-frontend-core/e2e/specs/prd-2026-007-finance.spec.ts:135:71 2026-10-16T09:54:10.303Z Error Context: test-results/prd-2026-007-finance-PRD-2-80d7c-reservation-level-NG4-S-23--arm/error-context.md 2026-10-16T09:54:10.303Z Error Context: test-results/prd-2026-007-finance-PRD-2-80d7c-reservation-level-NG4-S-23--arm/error-context.md 2026-10-16T09:54:10.303Z attachment #3: trace (application/zip) ───────────────────────────────────────────────────────── 2026-10-16T09:54:10.303Z test-results/prd-2026-007-finance-PRD-2-80d7c-reservation-level-NG4-S-23--arm/trace.zip 2026-10-16T09:54:10.303Z Usage: 2026-10-16T09:54:10.303Z pnpm exec playwright show-trace test-results/prd-2026-007-finance-PRD-2-80d7c-reservation-level-NG4-S-23--arm/trace.zip 2026-10-16T09:54:10.303Z ──────────────────────────────────────────────────────────────────────────────────────────────── 2026-10-16T09:54:10.303Z 7) [arm] › e2e/specs/prd-2026-007-finance.spec.ts:341:6 › PRD-2026-007 — finance surfaces in the UI › TC-ARM-281 details payment summary reflects an added charge after reload [Must 8 UI] 2026-10-16T09:54:10.303Z Error: expect(locator).toBeVisible() failed 2026-10-16T09:54:10.303Z Locator: getByText('Extra Charges').filter({ visible: true }).first() 2026-10-16T09:54:10.303Z Expected: visible 2026-10-16T09:54:10.303Z Timeout: 10000ms 2026-10-16T09:54:10.303Z Error: element(s) not found 2026-10-16T09:54:10.303Z Call log: 2026-10-16T09:54:10.303Z  - Expect "toBeVisible" with timeout 10000ms 2026-10-16T09:54:10.303Z  - waiting for getByText('Extra Charges').filter({ visible: true }).first() 2026-10-16T09:54:10.303Z 347 | const f = await finance(checkInId); 2026-10-16T09:54:10.303Z 348 | // The summary shows the extra charge and a total that matches the backend's finance read. 2026-10-16T09:54:10.303Z > 349 | await expect(page.getByText('Extra Charges').filter({ visible: true }).first()).toBeVisible(); 2026-10-16T09:54:10.303Z | ^ 2026-10-16T09:54:10.303Z 350 | await expect(page.getByText(money(999)).filter({ visible: true }).first()).toBeVisible(); 2026-10-16T09:54:10.303Z 351 | await expect(page.getByText(money(f.total)).filter({ visible: true }).first()).toBeVisible(); 2026-10-16T09:54:10.303Z 352 | }); 2026-10-16T09:54:10.303Z at /home/ubuntu/regression-runner/repos/dev/hotel-frontend-core/e2e/specs/prd-2026-007-finance.spec.ts:349:83 2026-10-16T09:54:10.303Z attachment #1: screenshot (image/png) ────────────────────────────────────────────────────────── 2026-10-16T09:54:10.304Z test-results/prd-2026-007-finance-PRD-2-5eeab-rge-after-reload-Must-8-UI--arm/test-failed-1.png 2026-10-16T09:54:10.304Z ──────────────────────────────────────────────────────────────────────────────────────────────── 2026-10-16T09:54:10.304Z Error Context: test-results/prd-2026-007-finance-PRD-2-5eeab-rge-after-reload-Must-8-UI--arm/error-context.md 2026-10-16T09:54:10.304Z Error Context: test-results/prd-2026-007-finance-PRD-2-5eeab-rge-after-reload-Must-8-UI--arm/error-context.md 2026-10-16T09:54:10.304Z attachment #4: trace (application/zip) ───────────────────────────────────────────────────────── 2026-10-16T09:54:10.304Z test-results/prd-2026-007-finance-PRD-2-5eeab-rge-after-reload-Must-8-UI--arm/trace.zip 2026-10-16T09:54:10.304Z Usage: 2026-10-16T09:54:10.304Z pnpm exec playwright show-trace test-results/prd-2026-007-finance-PRD-2-5eeab-rge-after-reload-Must-8-UI--arm/trace.zip 2026-10-16T09:54:10.304Z ──────────────────────────────────────────────────────────────────────────────────────────────── 2026-10-16T09:54:10.305Z 8) [arm] › e2e/specs/prd-2026-007-finance.spec.ts:446: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] 2026-10-16T09:54:10.305Z Error: GET /checkins/5646a430-a589-48a5-a8fa-9a076fc75bb6 → 429 2026-10-16T09:54:10.305Z expect(received).toBeTruthy() 2026-10-16T09:54:10.305Z Received: false 2026-10-16T09:54:10.305Z at ../fixtures/arm-api.ts:183 2026-10-16T09:54:10.305Z 181 | async getCheckin(checkInId: string): Promise { 2026-10-16T09:54:10.305Z 182 | const res = await this.ctx.get(`/checkins/${checkInId}`); 2026-10-16T09:54:10.305Z > 183 | expect(res.ok(), `GET /checkins/${checkInId} → ${res.status()}`).toBeTruthy(); 2026-10-16T09:54:10.305Z | ^ 2026-10-16T09:54:10.305Z 184 | return res.json(); 2026-10-16T09:54:10.305Z 185 | } 2026-10-16T09:54:10.305Z 186 | 2026-10-16T09:54:10.305Z at ArmApi.getCheckin (/home/ubuntu/regression-runner/repos/dev/hotel-frontend-core/e2e/fixtures/arm-api.ts:183:68) 2026-10-16T09:54:10.305Z at /home/ubuntu/regression-runner/repos/dev/hotel-frontend-core/e2e/specs/prd-2026-007-finance.spec.ts:449:33 2026-10-16T09:54:10.305Z Error Context: test-results/prd-2026-007-finance-PRD-2-c0cb0-ead-after-a-room-cancel-G6--arm/error-context.md 2026-10-16T09:54:10.305Z Error Context: test-results/prd-2026-007-finance-PRD-2-c0cb0-ead-after-a-room-cancel-G6--arm/error-context.md 2026-10-16T09:54:10.305Z attachment #3: trace (application/zip) ───────────────────────────────────────────────────────── 2026-10-16T09:54:10.305Z test-results/prd-2026-007-finance-PRD-2-c0cb0-ead-after-a-room-cancel-G6--arm/trace.zip 2026-10-16T09:54:10.305Z Usage: 2026-10-16T09:54:10.305Z pnpm exec playwright show-trace test-results/prd-2026-007-finance-PRD-2-c0cb0-ead-after-a-room-cancel-G6--arm/trace.zip 2026-10-16T09:54:10.305Z ──────────────────────────────────────────────────────────────────────────────────────────────── 2026-10-16T09:54:10.305Z 9) [arm] › e2e/specs/prd-2026-007-finance.spec.ts:545: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] 2026-10-16T09:54:10.306Z Error: GET /checkins/d47eba5f-3686-42b1-b1e2-6694b92fd3ac → 429 2026-10-16T09:54:10.306Z expect(received).toBeTruthy() 2026-10-16T09:54:10.306Z Received: false 2026-10-16T09:54:10.306Z at ../fixtures/arm-api.ts:183 2026-10-16T09:54:10.306Z 181 | async getCheckin(checkInId: string): Promise { 2026-10-16T09:54:10.306Z 182 | const res = await this.ctx.get(`/checkins/${checkInId}`); 2026-10-16T09:54:10.306Z > 183 | expect(res.ok(), `GET /checkins/${checkInId} → ${res.status()}`).toBeTruthy(); 2026-10-16T09:54:10.306Z | ^ 2026-10-16T09:54:10.306Z 184 | return res.json(); 2026-10-16T09:54:10.306Z 185 | } 2026-10-16T09:54:10.306Z 186 | 2026-10-16T09:54:10.306Z at ArmApi.getCheckin (/home/ubuntu/regression-runner/repos/dev/hotel-frontend-core/e2e/fixtures/arm-api.ts:183:68) 2026-10-16T09:54:10.306Z at ArmApi.roomInstanceIds (/home/ubuntu/regression-runner/repos/dev/hotel-frontend-core/e2e/fixtures/arm-api.ts:189:18) 2026-10-16T09:54:10.306Z at /home/ubuntu/regression-runner/repos/dev/hotel-frontend-core/e2e/specs/prd-2026-007-finance.spec.ts:548:15 2026-10-16T09:54:10.306Z Error Context: test-results/prd-2026-007-finance-PRD-2-758b3--ops-NG4-PRD-2026-005-seam--arm/error-context.md 2026-10-16T09:54:10.306Z Error Context: test-results/prd-2026-007-finance-PRD-2-758b3--ops-NG4-PRD-2026-005-seam--arm/error-context.md 2026-10-16T09:54:10.306Z attachment #3: trace (application/zip) ───────────────────────────────────────────────────────── 2026-10-16T09:54:10.306Z test-results/prd-2026-007-finance-PRD-2-758b3--ops-NG4-PRD-2026-005-seam--arm/trace.zip 2026-10-16T09:54:10.306Z Usage: 2026-10-16T09:54:10.306Z pnpm exec playwright show-trace test-results/prd-2026-007-finance-PRD-2-758b3--ops-NG4-PRD-2026-005-seam--arm/trace.zip 2026-10-16T09:54:10.306Z ──────────────────────────────────────────────────────────────────────────────────────────────── 2026-10-16T09:54:10.306Z 10) [arm] › e2e/specs/prd-2026-007-finance.spec.ts:571: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] 2026-10-16T09:54:10.306Z Error: GET /checkins/66f1eb9c-ce91-49d3-868a-db6eb1c74232 → 429 2026-10-16T09:54:10.306Z expect(received).toBeTruthy() 2026-10-16T09:54:10.306Z Received: false 2026-10-16T09:54:10.306Z at ../fixtures/arm-api.ts:183 2026-10-16T09:54:10.306Z 181 | async getCheckin(checkInId: string): Promise { 2026-10-16T09:54:10.306Z 182 | const res = await this.ctx.get(`/checkins/${checkInId}`); 2026-10-16T09:54:10.306Z > 183 | expect(res.ok(), `GET /checkins/${checkInId} → ${res.status()}`).toBeTruthy(); 2026-10-16T09:54:10.306Z | ^ 2026-10-16T09:54:10.306Z 184 | return res.json(); 2026-10-16T09:54:10.307Z 185 | } 2026-10-16T09:54:10.307Z 186 | 2026-10-16T09:54:10.307Z at ArmApi.getCheckin (/home/ubuntu/regression-runner/repos/dev/hotel-frontend-core/e2e/fixtures/arm-api.ts:183:68) 2026-10-16T09:54:10.307Z at ArmApi.roomInstanceIds (/home/ubuntu/regression-runner/repos/dev/hotel-frontend-core/e2e/fixtures/arm-api.ts:189:18) 2026-10-16T09:54:10.307Z at /home/ubuntu/regression-runner/repos/dev/hotel-frontend-core/e2e/specs/prd-2026-007-finance.spec.ts:574:15 2026-10-16T09:54:10.307Z Error Context: test-results/prd-2026-007-finance-PRD-2-49653-urney-no-dangling-entry-G6--arm/error-context.md 2026-10-16T09:54:10.307Z Error Context: test-results/prd-2026-007-finance-PRD-2-49653-urney-no-dangling-entry-G6--arm/error-context.md 2026-10-16T09:54:10.307Z attachment #3: trace (application/zip) ───────────────────────────────────────────────────────── 2026-10-16T09:54:10.307Z test-results/prd-2026-007-finance-PRD-2-49653-urney-no-dangling-entry-G6--arm/trace.zip 2026-10-16T09:54:10.307Z Usage: 2026-10-16T09:54:10.307Z pnpm exec playwright show-trace test-results/prd-2026-007-finance-PRD-2-49653-urney-no-dangling-entry-G6--arm/trace.zip 2026-10-16T09:54:10.307Z ──────────────────────────────────────────────────────────────────────────────────────────────── 2026-10-16T09:54:10.307Z 11) [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-16T09:54:10.307Z Error: GET /checkins/58013982-fa44-4f7e-8cf4-f5472497ae93 → 429 2026-10-16T09:54:10.307Z expect(received).toBeTruthy() 2026-10-16T09:54:10.307Z Received: false 2026-10-16T09:54:10.307Z at ../fixtures/arm-api.ts:183 2026-10-16T09:54:10.307Z 181 | async getCheckin(checkInId: string): Promise { 2026-10-16T09:54:10.307Z 182 | const res = await this.ctx.get(`/checkins/${checkInId}`); 2026-10-16T09:54:10.307Z > 183 | expect(res.ok(), `GET /checkins/${checkInId} → ${res.status()}`).toBeTruthy(); 2026-10-16T09:54:10.307Z | ^ 2026-10-16T09:54:10.307Z 184 | return res.json(); 2026-10-16T09:54:10.307Z 185 | } 2026-10-16T09:54:10.307Z 186 | 2026-10-16T09:54:10.307Z at ArmApi.getCheckin (/home/ubuntu/regression-runner/repos/dev/hotel-frontend-core/e2e/fixtures/arm-api.ts:183:68) 2026-10-16T09:54:10.308Z at ArmApi.roomInstanceIds (/home/ubuntu/regression-runner/repos/dev/hotel-frontend-core/e2e/fixtures/arm-api.ts:189:18) 2026-10-16T09:54:10.308Z at /home/ubuntu/regression-runner/repos/dev/hotel-frontend-core/e2e/specs/prd-2026-007-lock-move-swap.spec.ts:264:15 2026-10-16T09:54:10.308Z attachment #1: screenshot (image/png) ────────────────────────────────────────────────────────── 2026-10-16T09:54:10.308Z test-results/prd-2026-007-lock-move-swa-18d0d-Room-Details-edit-sheet-UX--arm/test-failed-1.png 2026-10-16T09:54:10.308Z ──────────────────────────────────────────────────────────────────────────────────────────────── 2026-10-16T09:54:10.308Z Error Context: test-results/prd-2026-007-lock-move-swa-18d0d-Room-Details-edit-sheet-UX--arm/error-context.md 2026-10-16T09:54:10.308Z Error Context: test-results/prd-2026-007-lock-move-swa-18d0d-Room-Details-edit-sheet-UX--arm/error-context.md 2026-10-16T09:54:10.308Z attachment #4: trace (application/zip) ───────────────────────────────────────────────────────── 2026-10-16T09:54:10.308Z test-results/prd-2026-007-lock-move-swa-18d0d-Room-Details-edit-sheet-UX--arm/trace.zip 2026-10-16T09:54:10.308Z Usage: 2026-10-16T09:54:10.308Z pnpm exec playwright show-trace test-results/prd-2026-007-lock-move-swa-18d0d-Room-Details-edit-sheet-UX--arm/trace.zip 2026-10-16T09:54:10.308Z ──────────────────────────────────────────────────────────────────────────────────────────────── 2026-10-16T09:54:10.308Z 12) [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-16T09:54:10.308Z Error: GET /checkins/54ad4ba6-bed6-4f10-95d7-3c6d6dda8f93 → 429 2026-10-16T09:54:10.308Z expect(received).toBeTruthy() 2026-10-16T09:54:10.308Z Received: false 2026-10-16T09:54:10.308Z at ../fixtures/arm-api.ts:183 2026-10-16T09:54:10.308Z 181 | async getCheckin(checkInId: string): Promise { 2026-10-16T09:54:10.308Z 182 | const res = await this.ctx.get(`/checkins/${checkInId}`); 2026-10-16T09:54:10.308Z > 183 | expect(res.ok(), `GET /checkins/${checkInId} → ${res.status()}`).toBeTruthy(); 2026-10-16T09:54:10.308Z | ^ 2026-10-16T09:54:10.308Z 184 | return res.json(); 2026-10-16T09:54:10.308Z 185 | } 2026-10-16T09:54:10.308Z 186 | 2026-10-16T09:54:10.308Z at ArmApi.getCheckin (/home/ubuntu/regression-runner/repos/dev/hotel-frontend-core/e2e/fixtures/arm-api.ts:183:68) 2026-10-16T09:54:10.308Z at ArmApi.roomInstanceIds (/home/ubuntu/regression-runner/repos/dev/hotel-frontend-core/e2e/fixtures/arm-api.ts:189:18) 2026-10-16T09:54:10.308Z at /home/ubuntu/regression-runner/repos/dev/hotel-frontend-core/e2e/specs/prd-2026-007-lock-move-swap.spec.ts:282:16 2026-10-16T09:54:10.308Z Error Context: test-results/prd-2026-007-lock-move-swa-6445e-e-diff-before-confirm-S-28--arm/error-context.md 2026-10-16T09:54:10.308Z Error Context: test-results/prd-2026-007-lock-move-swa-6445e-e-diff-before-confirm-S-28--arm/error-context.md 2026-10-16T09:54:10.308Z attachment #3: trace (application/zip) ───────────────────────────────────────────────────────── 2026-10-16T09:54:10.308Z test-results/prd-2026-007-lock-move-swa-6445e-e-diff-before-confirm-S-28--arm/trace.zip 2026-10-16T09:54:10.309Z Usage: 2026-10-16T09:54:10.309Z pnpm exec playwright show-trace test-results/prd-2026-007-lock-move-swa-6445e-e-diff-before-confirm-S-28--arm/trace.zip 2026-10-16T09:54:10.309Z ──────────────────────────────────────────────────────────────────────────────────────────────── 2026-10-16T09:54:10.309Z 13) [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-16T09:54:10.309Z Error: GET /checkins/25d398a0-dcda-41e9-b477-d0ad83cb6053 → 429 2026-10-16T09:54:10.309Z expect(received).toBeTruthy() 2026-10-16T09:54:10.309Z Received: false 2026-10-16T09:54:10.309Z at ../fixtures/arm-api.ts:183 2026-10-16T09:54:10.309Z 181 | async getCheckin(checkInId: string): Promise { 2026-10-16T09:54:10.309Z 182 | const res = await this.ctx.get(`/checkins/${checkInId}`); 2026-10-16T09:54:10.309Z > 183 | expect(res.ok(), `GET /checkins/${checkInId} → ${res.status()}`).toBeTruthy(); 2026-10-16T09:54:10.309Z | ^ 2026-10-16T09:54:10.309Z 184 | return res.json(); 2026-10-16T09:54:10.309Z 185 | } 2026-10-16T09:54:10.309Z 186 | 2026-10-16T09:54:10.309Z at ArmApi.getCheckin (/home/ubuntu/regression-runner/repos/dev/hotel-frontend-core/e2e/fixtures/arm-api.ts:183:68) 2026-10-16T09:54:10.309Z at ArmApi.roomInstanceIds (/home/ubuntu/regression-runner/repos/dev/hotel-frontend-core/e2e/fixtures/arm-api.ts:189:18) 2026-10-16T09:54:10.309Z at /home/ubuntu/regression-runner/repos/dev/hotel-frontend-core/e2e/specs/prd-2026-007-lock-move-swap.spec.ts:328:17 2026-10-16T09:54:10.309Z Error Context: test-results/prd-2026-007-lock-move-swa-22897-y-across-bookings-too-S-30--arm/error-context.md 2026-10-16T09:54:10.309Z Error Context: test-results/prd-2026-007-lock-move-swa-22897-y-across-bookings-too-S-30--arm/error-context.md 2026-10-16T09:54:10.309Z attachment #3: trace (application/zip) ───────────────────────────────────────────────────────── 2026-10-16T09:54:10.309Z test-results/prd-2026-007-lock-move-swa-22897-y-across-bookings-too-S-30--arm/trace.zip 2026-10-16T09:54:10.309Z Usage: 2026-10-16T09:54:10.309Z pnpm exec playwright show-trace test-results/prd-2026-007-lock-move-swa-22897-y-across-bookings-too-S-30--arm/trace.zip 2026-10-16T09:54:10.309Z ──────────────────────────────────────────────────────────────────────────────────────────────── 2026-10-16T09:54:10.309Z 14) [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-16T09:54:10.309Z Error: GET /checkins/1513ba10-4657-42a2-9785-d26cf320c71c → 429 2026-10-16T09:54:10.309Z expect(received).toBeTruthy() 2026-10-16T09:54:10.309Z Received: false 2026-10-16T09:54:10.310Z at ../fixtures/arm-api.ts:183 2026-10-16T09:54:10.310Z 181 | async getCheckin(checkInId: string): Promise { 2026-10-16T09:54:10.310Z 182 | const res = await this.ctx.get(`/checkins/${checkInId}`); 2026-10-16T09:54:10.310Z > 183 | expect(res.ok(), `GET /checkins/${checkInId} → ${res.status()}`).toBeTruthy(); 2026-10-16T09:54:10.310Z | ^ 2026-10-16T09:54:10.310Z 184 | return res.json(); 2026-10-16T09:54:10.310Z 185 | } 2026-10-16T09:54:10.310Z 186 | 2026-10-16T09:54:10.310Z at ArmApi.getCheckin (/home/ubuntu/regression-runner/repos/dev/hotel-frontend-core/e2e/fixtures/arm-api.ts:183:68) 2026-10-16T09:54:10.310Z at ArmApi.roomInstanceIds (/home/ubuntu/regression-runner/repos/dev/hotel-frontend-core/e2e/fixtures/arm-api.ts:189:18) 2026-10-16T09:54:10.310Z at /home/ubuntu/regression-runner/repos/dev/hotel-frontend-core/e2e/specs/prd-2026-007-lock-move-swap.spec.ts:351:16 2026-10-16T09:54:10.310Z Error Context: test-results/prd-2026-007-lock-move-swa-bb8bd-g-allows-it-lock-semantics--arm/error-context.md 2026-10-16T09:54:10.310Z Error Context: test-results/prd-2026-007-lock-move-swa-bb8bd-g-allows-it-lock-semantics--arm/error-context.md 2026-10-16T09:54:10.310Z attachment #3: trace (application/zip) ───────────────────────────────────────────────────────── 2026-10-16T09:54:10.310Z test-results/prd-2026-007-lock-move-swa-bb8bd-g-allows-it-lock-semantics--arm/trace.zip 2026-10-16T09:54:10.310Z Usage: 2026-10-16T09:54:10.310Z pnpm exec playwright show-trace test-results/prd-2026-007-lock-move-swa-bb8bd-g-allows-it-lock-semantics--arm/trace.zip 2026-10-16T09:54:10.310Z ──────────────────────────────────────────────────────────────────────────────────────────────── 2026-10-16T09:54:10.310Z 15) [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-16T09:54:10.310Z Error: GET /checkins/298f5833-c1ba-4302-ab5a-783958a24264 → 429 2026-10-16T09:54:10.310Z expect(received).toBeTruthy() 2026-10-16T09:54:10.310Z Received: false 2026-10-16T09:54:10.310Z at ../fixtures/arm-api.ts:183 2026-10-16T09:54:10.310Z 181 | async getCheckin(checkInId: string): Promise { 2026-10-16T09:54:10.310Z 182 | const res = await this.ctx.get(`/checkins/${checkInId}`); 2026-10-16T09:54:10.310Z > 183 | expect(res.ok(), `GET /checkins/${checkInId} → ${res.status()}`).toBeTruthy(); 2026-10-16T09:54:10.311Z | ^ 2026-10-16T09:54:10.311Z 184 | return res.json(); 2026-10-16T09:54:10.311Z 185 | } 2026-10-16T09:54:10.311Z 186 | 2026-10-16T09:54:10.311Z at ArmApi.getCheckin (/home/ubuntu/regression-runner/repos/dev/hotel-frontend-core/e2e/fixtures/arm-api.ts:183:68) 2026-10-16T09:54:10.311Z at ArmApi.roomInstanceIds (/home/ubuntu/regression-runner/repos/dev/hotel-frontend-core/e2e/fixtures/arm-api.ts:189:18) 2026-10-16T09:54:10.311Z at /home/ubuntu/regression-runner/repos/dev/hotel-frontend-core/e2e/specs/prd-2026-007-lock-move-swap.spec.ts:371:15 2026-10-16T09:54:10.311Z Error Context: test-results/prd-2026-007-lock-move-swa-b78a4-either-side-lock-semantics--arm/error-context.md 2026-10-16T09:54:10.311Z Error Context: test-results/prd-2026-007-lock-move-swa-b78a4-either-side-lock-semantics--arm/error-context.md 2026-10-16T09:54:10.311Z attachment #3: trace (application/zip) ───────────────────────────────────────────────────────── 2026-10-16T09:54:10.311Z test-results/prd-2026-007-lock-move-swa-b78a4-either-side-lock-semantics--arm/trace.zip 2026-10-16T09:54:10.311Z Usage: 2026-10-16T09:54:10.311Z pnpm exec playwright show-trace test-results/prd-2026-007-lock-move-swa-b78a4-either-side-lock-semantics--arm/trace.zip 2026-10-16T09:54:10.311Z ──────────────────────────────────────────────────────────────────────────────────────────────── 2026-10-16T09:54:10.311Z 16) [arm] › e2e/specs/prd-2026-007-noshow-cancel.spec.ts:132:6 › PRD-2026-007 — cancellation per room › TC-ARM-110 UI: "can't be undone" warning is shown [UX/NG1] 2026-10-16T09:54:10.311Z Error: expect(locator).toBeVisible() failed 2026-10-16T09:54:10.311Z Locator: getByRole('dialog') 2026-10-16T09:54:10.311Z Expected: visible 2026-10-16T09:54:10.311Z Error: strict mode violation: getByRole('dialog') resolved to 2 elements: 2026-10-16T09:54:10.311Z 1) aka getByRole('dialog', { name: 'Cancel reservation' }) 2026-10-16T09:54:10.311Z 2) aka locator('#engagement-toast-responsive-inner-div') 2026-10-16T09:54:10.311Z Call log: 2026-10-16T09:54:10.311Z  - Expect "toBeVisible" with timeout 10000ms 2026-10-16T09:54:10.311Z  - waiting for getByRole('dialog') 2026-10-16T09:54:10.311Z 57 | .getByRole('menuitem', { name: mode === 'NO_SHOW' ? /mark as no-show/i : /^cancel reservation$/i }) 2026-10-16T09:54:10.311Z 58 | .click(); 2026-10-16T09:54:10.311Z > 59 | await expect(page.getByRole('dialog')).toBeVisible(); 2026-10-16T09:54:10.311Z | ^ 2026-10-16T09:54:10.311Z 60 | await expect(confirmCta(page, mode)).toBeVisible(); 2026-10-16T09:54:10.311Z 61 | } 2026-10-16T09:54:10.311Z 62 | 2026-10-16T09:54:10.311Z at openModal (/home/ubuntu/regression-runner/repos/dev/hotel-frontend-core/e2e/specs/prd-2026-007-noshow-cancel.spec.ts:59:41) 2026-10-16T09:54:10.312Z at /home/ubuntu/regression-runner/repos/dev/hotel-frontend-core/e2e/specs/prd-2026-007-noshow-cancel.spec.ts:135:3 2026-10-16T09:54:10.312Z attachment #1: screenshot (image/png) ────────────────────────────────────────────────────────── 2026-10-16T09:54:10.312Z test-results/prd-2026-007-noshow-cancel-9ce6f-ne-warning-is-shown-UX-NG1--arm/test-failed-1.png 2026-10-16T09:54:10.312Z ──────────────────────────────────────────────────────────────────────────────────────────────── 2026-10-16T09:54:10.312Z Error Context: test-results/prd-2026-007-noshow-cancel-9ce6f-ne-warning-is-shown-UX-NG1--arm/error-context.md 2026-10-16T09:54:10.312Z Error Context: test-results/prd-2026-007-noshow-cancel-9ce6f-ne-warning-is-shown-UX-NG1--arm/error-context.md 2026-10-16T09:54:10.312Z attachment #4: trace (application/zip) ───────────────────────────────────────────────────────── 2026-10-16T09:54:10.312Z test-results/prd-2026-007-noshow-cancel-9ce6f-ne-warning-is-shown-UX-NG1--arm/trace.zip 2026-10-16T09:54:10.312Z Usage: 2026-10-16T09:54:10.312Z pnpm exec playwright show-trace test-results/prd-2026-007-noshow-cancel-9ce6f-ne-warning-is-shown-UX-NG1--arm/trace.zip 2026-10-16T09:54:10.312Z ──────────────────────────────────────────────────────────────────────────────────────────────── 2026-10-16T09:54:10.312Z 17) [arm] › e2e/specs/prd-2026-007-noshow-cancel.spec.ts:232:6 › PRD-2026-007 — scheduled cancel/no-show with withdraw window › TC-ARM-119 withdraw-scheduled aborts the staged action [staged ops] 2026-10-16T09:54:10.312Z Error: GET /checkins/4923798f-4618-4ab9-b059-5f2dd9e76ca4 → 429 2026-10-16T09:54:10.312Z expect(received).toBeTruthy() 2026-10-16T09:54:10.312Z Received: false 2026-10-16T09:54:10.312Z at ../fixtures/arm-api.ts:183 2026-10-16T09:54:10.312Z 181 | async getCheckin(checkInId: string): Promise { 2026-10-16T09:54:10.312Z 182 | const res = await this.ctx.get(`/checkins/${checkInId}`); 2026-10-16T09:54:10.312Z > 183 | expect(res.ok(), `GET /checkins/${checkInId} → ${res.status()}`).toBeTruthy(); 2026-10-16T09:54:10.312Z | ^ 2026-10-16T09:54:10.312Z 184 | return res.json(); 2026-10-16T09:54:10.312Z 185 | } 2026-10-16T09:54:10.312Z 186 | 2026-10-16T09:54:10.312Z at ArmApi.getCheckin (/home/ubuntu/regression-runner/repos/dev/hotel-frontend-core/e2e/fixtures/arm-api.ts:183:68) 2026-10-16T09:54:10.312Z at ArmApi.roomInstanceIds (/home/ubuntu/regression-runner/repos/dev/hotel-frontend-core/e2e/fixtures/arm-api.ts:189:18) 2026-10-16T09:54:10.312Z at /home/ubuntu/regression-runner/repos/dev/hotel-frontend-core/e2e/specs/prd-2026-007-noshow-cancel.spec.ts:236:15 2026-10-16T09:54:10.312Z Error Context: test-results/prd-2026-007-noshow-cancel-c0aee-e-staged-action-staged-ops--arm/error-context.md 2026-10-16T09:54:10.312Z Error Context: test-results/prd-2026-007-noshow-cancel-c0aee-e-staged-action-staged-ops--arm/error-context.md 2026-10-16T09:54:10.312Z attachment #3: trace (application/zip) ───────────────────────────────────────────────────────── 2026-10-16T09:54:10.312Z test-results/prd-2026-007-noshow-cancel-c0aee-e-staged-action-staged-ops--arm/trace.zip 2026-10-16T09:54:10.312Z Usage: 2026-10-16T09:54:10.312Z pnpm exec playwright show-trace test-results/prd-2026-007-noshow-cancel-c0aee-e-staged-action-staged-ops--arm/trace.zip 2026-10-16T09:54:10.313Z ──────────────────────────────────────────────────────────────────────────────────────────────── 2026-10-16T09:54:10.313Z 18) [arm] › e2e/specs/prd-2026-007-noshow-cancel.spec.ts:245: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-16T09:54:10.313Z Error: GET /checkins/bfb72673-0212-45bf-b67d-4828c95b1c2d → 429 2026-10-16T09:54:10.313Z expect(received).toBeTruthy() 2026-10-16T09:54:10.313Z Received: false 2026-10-16T09:54:10.313Z at ../fixtures/arm-api.ts:183 2026-10-16T09:54:10.313Z 181 | async getCheckin(checkInId: string): Promise { 2026-10-16T09:54:10.313Z 182 | const res = await this.ctx.get(`/checkins/${checkInId}`); 2026-10-16T09:54:10.313Z > 183 | expect(res.ok(), `GET /checkins/${checkInId} → ${res.status()}`).toBeTruthy(); 2026-10-16T09:54:10.313Z | ^ 2026-10-16T09:54:10.313Z 184 | return res.json(); 2026-10-16T09:54:10.313Z 185 | } 2026-10-16T09:54:10.313Z 186 | 2026-10-16T09:54:10.313Z at ArmApi.getCheckin (/home/ubuntu/regression-runner/repos/dev/hotel-frontend-core/e2e/fixtures/arm-api.ts:183:68) 2026-10-16T09:54:10.313Z at ArmApi.roomInstanceIds (/home/ubuntu/regression-runner/repos/dev/hotel-frontend-core/e2e/fixtures/arm-api.ts:189:18) 2026-10-16T09:54:10.313Z at /home/ubuntu/regression-runner/repos/dev/hotel-frontend-core/e2e/specs/prd-2026-007-noshow-cancel.spec.ts:249:15 2026-10-16T09:54:10.314Z Error Context: test-results/prd-2026-007-noshow-cancel-72cb0--window-elapses-staged-ops--arm/error-context.md 2026-10-16T09:54:10.314Z Error Context: test-results/prd-2026-007-noshow-cancel-72cb0--window-elapses-staged-ops--arm/error-context.md 2026-10-16T09:54:10.314Z attachment #3: trace (application/zip) ───────────────────────────────────────────────────────── 2026-10-16T09:54:10.314Z test-results/prd-2026-007-noshow-cancel-72cb0--window-elapses-staged-ops--arm/trace.zip 2026-10-16T09:54:10.314Z Usage: 2026-10-16T09:54:10.314Z pnpm exec playwright show-trace test-results/prd-2026-007-noshow-cancel-72cb0--window-elapses-staged-ops--arm/trace.zip 2026-10-16T09:54:10.314Z ──────────────────────────────────────────────────────────────────────────────────────────────── 2026-10-16T09:54:10.314Z 19) [arm] › e2e/specs/prd-2026-007-noshow-cancel.spec.ts:259: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-16T09:54:10.314Z Error: GET /checkins/d992fd5a-1001-42a2-b94a-1f1c989eaef4 → 429 2026-10-16T09:54:10.314Z expect(received).toBeTruthy() 2026-10-16T09:54:10.314Z Received: false 2026-10-16T09:54:10.314Z at ../fixtures/arm-api.ts:183 2026-10-16T09:54:10.314Z 181 | async getCheckin(checkInId: string): Promise { 2026-10-16T09:54:10.314Z 182 | const res = await this.ctx.get(`/checkins/${checkInId}`); 2026-10-16T09:54:10.314Z > 183 | expect(res.ok(), `GET /checkins/${checkInId} → ${res.status()}`).toBeTruthy(); 2026-10-16T09:54:10.314Z | ^ 2026-10-16T09:54:10.314Z 184 | return res.json(); 2026-10-16T09:54:10.314Z 185 | } 2026-10-16T09:54:10.314Z 186 | 2026-10-16T09:54:10.314Z at ArmApi.getCheckin (/home/ubuntu/regression-runner/repos/dev/hotel-frontend-core/e2e/fixtures/arm-api.ts:183:68) 2026-10-16T09:54:10.314Z at ArmApi.roomInstanceIds (/home/ubuntu/regression-runner/repos/dev/hotel-frontend-core/e2e/fixtures/arm-api.ts:189:18) 2026-10-16T09:54:10.314Z at /home/ubuntu/regression-runner/repos/dev/hotel-frontend-core/e2e/specs/prd-2026-007-noshow-cancel.spec.ts:263:15 2026-10-16T09:54:10.314Z Error Context: test-results/prd-2026-007-noshow-cancel-b9f36-to-exactly-one-winner-S-19--arm/error-context.md 2026-10-16T09:54:10.314Z Error Context: test-results/prd-2026-007-noshow-cancel-b9f36-to-exactly-one-winner-S-19--arm/error-context.md 2026-10-16T09:54:10.314Z attachment #3: trace (application/zip) ───────────────────────────────────────────────────────── 2026-10-16T09:54:10.314Z test-results/prd-2026-007-noshow-cancel-b9f36-to-exactly-one-winner-S-19--arm/trace.zip 2026-10-16T09:54:10.314Z Usage: 2026-10-16T09:54:10.314Z pnpm exec playwright show-trace test-results/prd-2026-007-noshow-cancel-b9f36-to-exactly-one-winner-S-19--arm/trace.zip 2026-10-16T09:54:10.314Z ──────────────────────────────────────────────────────────────────────────────────────────────── 2026-10-16T09:54:10.314Z 20) [arm] › e2e/specs/prd-2026-007-noshow-cancel.spec.ts:274: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-16T09:54:10.314Z Error: GET /checkins/3f27743b-1c85-4f2c-9c10-fc8efbb37959 → 429 2026-10-16T09:54:10.314Z expect(received).toBeTruthy() 2026-10-16T09:54:10.315Z Received: false 2026-10-16T09:54:10.315Z at ../fixtures/arm-api.ts:183 2026-10-16T09:54:10.315Z 181 | async getCheckin(checkInId: string): Promise { 2026-10-16T09:54:10.315Z 182 | const res = await this.ctx.get(`/checkins/${checkInId}`); 2026-10-16T09:54:10.315Z > 183 | expect(res.ok(), `GET /checkins/${checkInId} → ${res.status()}`).toBeTruthy(); 2026-10-16T09:54:10.315Z | ^ 2026-10-16T09:54:10.315Z 184 | return res.json(); 2026-10-16T09:54:10.315Z 185 | } 2026-10-16T09:54:10.315Z 186 | 2026-10-16T09:54:10.315Z at ArmApi.getCheckin (/home/ubuntu/regression-runner/repos/dev/hotel-frontend-core/e2e/fixtures/arm-api.ts:183:68) 2026-10-16T09:54:10.315Z at ArmApi.roomInstanceIds (/home/ubuntu/regression-runner/repos/dev/hotel-frontend-core/e2e/fixtures/arm-api.ts:189:18) 2026-10-16T09:54:10.315Z at /home/ubuntu/regression-runner/repos/dev/hotel-frontend-core/e2e/specs/prd-2026-007-noshow-cancel.spec.ts:278:15 2026-10-16T09:54:10.315Z Error Context: test-results/prd-2026-007-noshow-cancel-e51cd--state-single-applied-S-20--arm/error-context.md 2026-10-16T09:54:10.315Z Error Context: test-results/prd-2026-007-noshow-cancel-e51cd--state-single-applied-S-20--arm/error-context.md 2026-10-16T09:54:10.315Z attachment #3: trace (application/zip) ───────────────────────────────────────────────────────── 2026-10-16T09:54:10.315Z test-results/prd-2026-007-noshow-cancel-e51cd--state-single-applied-S-20--arm/trace.zip 2026-10-16T09:54:10.315Z Usage: 2026-10-16T09:54:10.315Z pnpm exec playwright show-trace test-results/prd-2026-007-noshow-cancel-e51cd--state-single-applied-S-20--arm/trace.zip 2026-10-16T09:54:10.315Z ──────────────────────────────────────────────────────────────────────────────────────────────── 2026-10-16T09:54:10.315Z 21) [arm] › e2e/specs/prd-2026-007-partial-checkin.spec.ts:141: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-16T09:54:10.315Z Error: createReservation → 400: {"statusCode":400,"message":"One or more selected rooms are already blocked or occupied during the selected period.","timestamp":"2026-10-16T09:49:45.055Z","path":"/reservations","requestId":"f2704a20-78d5-4a53-b2f8-e5c1ecf79f8e"} 2026-10-16T09:54:10.315Z expect(received).toBeTruthy() 2026-10-16T09:54:10.315Z Received: false 2026-10-16T09:54:10.315Z at ../fixtures/arm-api.ts:154 2026-10-16T09:54:10.315Z 152 | }); 2026-10-16T09:54:10.315Z 153 | const text = await res.text(); 2026-10-16T09:54:10.315Z > 154 | expect(res.ok(), `createReservation → ${res.status()}: ${text.slice(0, 500)}`).toBeTruthy(); 2026-10-16T09:54:10.315Z | ^ 2026-10-16T09:54:10.315Z 155 | const body = JSON.parse(text); 2026-10-16T09:54:10.315Z 156 | const checkInId: string = body.id ?? body.checkInId ?? body.data?.id; 2026-10-16T09:54:10.315Z 157 | expect(checkInId, `reservation id missing in response: ${text.slice(0, 300)}`).toBeTruthy(); 2026-10-16T09:54:10.315Z at ArmApi.createReservation (/home/ubuntu/regression-runner/repos/dev/hotel-frontend-core/e2e/fixtures/arm-api.ts:154:82) 2026-10-16T09:54:10.315Z at /home/ubuntu/regression-runner/repos/dev/hotel-frontend-core/e2e/specs/prd-2026-007-partial-checkin.spec.ts:143:25 2026-10-16T09:54:10.315Z Error Context: test-results/prd-2026-007-partial-check-a0897--CHECKED-IN-S-03-S-04-§6-2--arm/error-context.md 2026-10-16T09:54:10.315Z Error Context: test-results/prd-2026-007-partial-check-a0897--CHECKED-IN-S-03-S-04-§6-2--arm/error-context.md 2026-10-16T09:54:10.315Z attachment #3: trace (application/zip) ───────────────────────────────────────────────────────── 2026-10-16T09:54:10.315Z test-results/prd-2026-007-partial-check-a0897--CHECKED-IN-S-03-S-04-§6-2--arm/trace.zip 2026-10-16T09:54:10.316Z Usage: 2026-10-16T09:54:10.316Z pnpm exec playwright show-trace test-results/prd-2026-007-partial-check-a0897--CHECKED-IN-S-03-S-04-§6-2--arm/trace.zip 2026-10-16T09:54:10.316Z ──────────────────────────────────────────────────────────────────────────────────────────────── 2026-10-16T09:54:10.316Z 22) [arm] › e2e/specs/prd-2026-007-partial-checkin.spec.ts:154: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-16T09:54:10.316Z Error: createReservation → 400: {"statusCode":400,"message":"One or more selected rooms are already blocked or occupied during the selected period.","timestamp":"2026-10-16T09:49:46.838Z","path":"/reservations","requestId":"bfa92da9-cf3c-4085-97be-f4e28b94970e"} 2026-10-16T09:54:10.316Z expect(received).toBeTruthy() 2026-10-16T09:54:10.316Z Received: false 2026-10-16T09:54:10.316Z at ../fixtures/arm-api.ts:154 2026-10-16T09:54:10.316Z 152 | }); 2026-10-16T09:54:10.316Z 153 | const text = await res.text(); 2026-10-16T09:54:10.316Z > 154 | expect(res.ok(), `createReservation → ${res.status()}: ${text.slice(0, 500)}`).toBeTruthy(); 2026-10-16T09:54:10.316Z | ^ 2026-10-16T09:54:10.316Z 155 | const body = JSON.parse(text); 2026-10-16T09:54:10.316Z 156 | const checkInId: string = body.id ?? body.checkInId ?? body.data?.id; 2026-10-16T09:54:10.316Z 157 | expect(checkInId, `reservation id missing in response: ${text.slice(0, 300)}`).toBeTruthy(); 2026-10-16T09:54:10.316Z at ArmApi.createReservation (/home/ubuntu/regression-runner/repos/dev/hotel-frontend-core/e2e/fixtures/arm-api.ts:154:82) 2026-10-16T09:54:10.316Z at /home/ubuntu/regression-runner/repos/dev/hotel-frontend-core/e2e/specs/prd-2026-007-partial-checkin.spec.ts:156:25 2026-10-16T09:54:10.316Z Error Context: test-results/prd-2026-007-partial-check-42f5d-s-parent-CHECKED-IN-Must-3--arm/error-context.md 2026-10-16T09:54:10.316Z Error Context: test-results/prd-2026-007-partial-check-42f5d-s-parent-CHECKED-IN-Must-3--arm/error-context.md 2026-10-16T09:54:10.316Z attachment #3: trace (application/zip) ───────────────────────────────────────────────────────── 2026-10-16T09:54:10.316Z test-results/prd-2026-007-partial-check-42f5d-s-parent-CHECKED-IN-Must-3--arm/trace.zip 2026-10-16T09:54:10.316Z Usage: 2026-10-16T09:54:10.316Z pnpm exec playwright show-trace test-results/prd-2026-007-partial-check-42f5d-s-parent-CHECKED-IN-Must-3--arm/trace.zip 2026-10-16T09:54:10.316Z ──────────────────────────────────────────────────────────────────────────────────────────────── 2026-10-16T09:54:10.316Z 23) [arm] › e2e/specs/prd-2026-007-partial-checkin.spec.ts:163: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-16T09:54:10.316Z Error: createReservation → 400: {"statusCode":400,"message":"One or more selected rooms are already blocked or occupied during the selected period.","timestamp":"2026-10-16T09:49:48.781Z","path":"/reservations","requestId":"b16dc3d3-fdf0-408b-9625-8e46998fd7a5"} 2026-10-16T09:54:10.316Z expect(received).toBeTruthy() 2026-10-16T09:54:10.316Z Received: false 2026-10-16T09:54:10.316Z at ../fixtures/arm-api.ts:154 2026-10-16T09:54:10.316Z 152 | }); 2026-10-16T09:54:10.316Z 153 | const text = await res.text(); 2026-10-16T09:54:10.316Z > 154 | expect(res.ok(), `createReservation → ${res.status()}: ${text.slice(0, 500)}`).toBeTruthy(); 2026-10-16T09:54:10.316Z | ^ 2026-10-16T09:54:10.316Z 155 | const body = JSON.parse(text); 2026-10-16T09:54:10.316Z 156 | const checkInId: string = body.id ?? body.checkInId ?? body.data?.id; 2026-10-16T09:54:10.316Z 157 | expect(checkInId, `reservation id missing in response: ${text.slice(0, 300)}`).toBeTruthy(); 2026-10-16T09:54:10.316Z at ArmApi.createReservation (/home/ubuntu/regression-runner/repos/dev/hotel-frontend-core/e2e/fixtures/arm-api.ts:154:82) 2026-10-16T09:54:10.316Z at /home/ubuntu/regression-runner/repos/dev/hotel-frontend-core/e2e/specs/prd-2026-007-partial-checkin.spec.ts:165:25 2026-10-16T09:54:10.316Z Error Context: test-results/prd-2026-007-partial-check-b6d53-not-double-apply-S-16-S-17--arm/error-context.md 2026-10-16T09:54:10.316Z Error Context: test-results/prd-2026-007-partial-check-b6d53-not-double-apply-S-16-S-17--arm/error-context.md 2026-10-16T09:54:10.316Z attachment #3: trace (application/zip) ───────────────────────────────────────────────────────── 2026-10-16T09:54:10.316Z test-results/prd-2026-007-partial-check-b6d53-not-double-apply-S-16-S-17--arm/trace.zip 2026-10-16T09:54:10.316Z Usage: 2026-10-16T09:54:10.316Z pnpm exec playwright show-trace test-results/prd-2026-007-partial-check-b6d53-not-double-apply-S-16-S-17--arm/trace.zip 2026-10-16T09:54:10.317Z ──────────────────────────────────────────────────────────────────────────────────────────────── 2026-10-16T09:54:10.317Z 24) [arm] › e2e/specs/prd-2026-007-partial-checkin.spec.ts:179: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-16T09:54:10.317Z Error: createReservation → 400: {"statusCode":400,"message":"One or more selected rooms are already blocked or occupied during the selected period.","timestamp":"2026-10-16T09:49:50.183Z","path":"/reservations","requestId":"67c9ae7d-d2c3-4839-9812-7d57d172e2ba"} 2026-10-16T09:54:10.317Z expect(received).toBeTruthy() 2026-10-16T09:54:10.317Z Received: false 2026-10-16T09:54:10.317Z at ../fixtures/arm-api.ts:154 2026-10-16T09:54:10.317Z 152 | }); 2026-10-16T09:54:10.317Z 153 | const text = await res.text(); 2026-10-16T09:54:10.317Z > 154 | expect(res.ok(), `createReservation → ${res.status()}: ${text.slice(0, 500)}`).toBeTruthy(); 2026-10-16T09:54:10.317Z | ^ 2026-10-16T09:54:10.317Z 155 | const body = JSON.parse(text); 2026-10-16T09:54:10.317Z 156 | const checkInId: string = body.id ?? body.checkInId ?? body.data?.id; 2026-10-16T09:54:10.317Z 157 | expect(checkInId, `reservation id missing in response: ${text.slice(0, 300)}`).toBeTruthy(); 2026-10-16T09:54:10.317Z at ArmApi.createReservation (/home/ubuntu/regression-runner/repos/dev/hotel-frontend-core/e2e/fixtures/arm-api.ts:154:82) 2026-10-16T09:54:10.317Z at /home/ubuntu/regression-runner/repos/dev/hotel-frontend-core/e2e/specs/prd-2026-007-partial-checkin.spec.ts:181:25 2026-10-16T09:54:10.317Z Error Context: test-results/prd-2026-007-partial-check-38f57-ediate-state-exact-Must-12--arm/error-context.md 2026-10-16T09:54:10.317Z Error Context: test-results/prd-2026-007-partial-check-38f57-ediate-state-exact-Must-12--arm/error-context.md 2026-10-16T09:54:10.317Z attachment #3: trace (application/zip) ───────────────────────────────────────────────────────── 2026-10-16T09:54:10.317Z test-results/prd-2026-007-partial-check-38f57-ediate-state-exact-Must-12--arm/trace.zip 2026-10-16T09:54:10.317Z Usage: 2026-10-16T09:54:10.317Z pnpm exec playwright show-trace test-results/prd-2026-007-partial-check-38f57-ediate-state-exact-Must-12--arm/trace.zip 2026-10-16T09:54:10.317Z ──────────────────────────────────────────────────────────────────────────────────────────────── 2026-10-16T09:54:10.317Z 25) [arm] › e2e/specs/prd-2026-007-partial-checkin.spec.ts:192: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-16T09:54:10.317Z Error: createReservation → 400: {"statusCode":400,"message":"One or more selected rooms are already blocked or occupied during the selected period.","timestamp":"2026-10-16T09:49:51.595Z","path":"/reservations","requestId":"75b7ca42-8b1b-4106-be5a-7aa8a16cfca2"} 2026-10-16T09:54:10.317Z expect(received).toBeTruthy() 2026-10-16T09:54:10.317Z Received: false 2026-10-16T09:54:10.317Z at ../fixtures/arm-api.ts:154 2026-10-16T09:54:10.317Z 152 | }); 2026-10-16T09:54:10.317Z 153 | const text = await res.text(); 2026-10-16T09:54:10.317Z > 154 | expect(res.ok(), `createReservation → ${res.status()}: ${text.slice(0, 500)}`).toBeTruthy(); 2026-10-16T09:54:10.317Z | ^ 2026-10-16T09:54:10.317Z 155 | const body = JSON.parse(text); 2026-10-16T09:54:10.317Z 156 | const checkInId: string = body.id ?? body.checkInId ?? body.data?.id; 2026-10-16T09:54:10.317Z 157 | expect(checkInId, `reservation id missing in response: ${text.slice(0, 300)}`).toBeTruthy(); 2026-10-16T09:54:10.317Z at ArmApi.createReservation (/home/ubuntu/regression-runner/repos/dev/hotel-frontend-core/e2e/fixtures/arm-api.ts:154:82) 2026-10-16T09:54:10.317Z at /home/ubuntu/regression-runner/repos/dev/hotel-frontend-core/e2e/specs/prd-2026-007-partial-checkin.spec.ts:194:25 2026-10-16T09:54:10.317Z Error Context: test-results/prd-2026-007-partial-check-482c7-minal-progression-mix-CR-2--arm/error-context.md 2026-10-16T09:54:10.317Z Error Context: test-results/prd-2026-007-partial-check-482c7-minal-progression-mix-CR-2--arm/error-context.md 2026-10-16T09:54:10.317Z attachment #3: trace (application/zip) ───────────────────────────────────────────────────────── 2026-10-16T09:54:10.317Z test-results/prd-2026-007-partial-check-482c7-minal-progression-mix-CR-2--arm/trace.zip 2026-10-16T09:54:10.317Z Usage: 2026-10-16T09:54:10.317Z pnpm exec playwright show-trace test-results/prd-2026-007-partial-check-482c7-minal-progression-mix-CR-2--arm/trace.zip 2026-10-16T09:54:10.318Z ──────────────────────────────────────────────────────────────────────────────────────────────── 2026-10-16T09:54:10.318Z 26) [arm] › e2e/specs/prd-2026-007-partial-checkin.spec.ts:203:6 › PRD-2026-007 — partial check-in › TC-ARM-084 UI reflects partial state immediately after API check-in + reload [G5] 2026-10-16T09:54:10.318Z Error: createReservation → 400: {"statusCode":400,"message":"One or more selected rooms are already blocked or occupied during the selected period.","timestamp":"2026-10-16T09:49:53.708Z","path":"/reservations","requestId":"39522369-bd75-4c31-aee8-a1511830be96"} 2026-10-16T09:54:10.318Z expect(received).toBeTruthy() 2026-10-16T09:54:10.318Z Received: false 2026-10-16T09:54:10.318Z at ../fixtures/arm-api.ts:154 2026-10-16T09:54:10.318Z 152 | }); 2026-10-16T09:54:10.318Z 153 | const text = await res.text(); 2026-10-16T09:54:10.318Z > 154 | expect(res.ok(), `createReservation → ${res.status()}: ${text.slice(0, 500)}`).toBeTruthy(); 2026-10-16T09:54:10.318Z | ^ 2026-10-16T09:54:10.318Z 155 | const body = JSON.parse(text); 2026-10-16T09:54:10.318Z 156 | const checkInId: string = body.id ?? body.checkInId ?? body.data?.id; 2026-10-16T09:54:10.318Z 157 | expect(checkInId, `reservation id missing in response: ${text.slice(0, 300)}`).toBeTruthy(); 2026-10-16T09:54:10.318Z at ArmApi.createReservation (/home/ubuntu/regression-runner/repos/dev/hotel-frontend-core/e2e/fixtures/arm-api.ts:154:82) 2026-10-16T09:54:10.318Z at /home/ubuntu/regression-runner/repos/dev/hotel-frontend-core/e2e/specs/prd-2026-007-partial-checkin.spec.ts:205:25 2026-10-16T09:54:10.318Z attachment #1: screenshot (image/png) ────────────────────────────────────────────────────────── 2026-10-16T09:54:10.318Z test-results/prd-2026-007-partial-check-f6476-ter-API-check-in-reload-G5--arm/test-failed-1.png 2026-10-16T09:54:10.318Z ──────────────────────────────────────────────────────────────────────────────────────────────── 2026-10-16T09:54:10.318Z Error Context: test-results/prd-2026-007-partial-check-f6476-ter-API-check-in-reload-G5--arm/error-context.md 2026-10-16T09:54:10.318Z Error Context: test-results/prd-2026-007-partial-check-f6476-ter-API-check-in-reload-G5--arm/error-context.md 2026-10-16T09:54:10.318Z attachment #4: trace (application/zip) ───────────────────────────────────────────────────────── 2026-10-16T09:54:10.318Z test-results/prd-2026-007-partial-check-f6476-ter-API-check-in-reload-G5--arm/trace.zip 2026-10-16T09:54:10.318Z Usage: 2026-10-16T09:54:10.318Z pnpm exec playwright show-trace test-results/prd-2026-007-partial-check-f6476-ter-API-check-in-reload-G5--arm/trace.zip 2026-10-16T09:54:10.318Z ──────────────────────────────────────────────────────────────────────────────────────────────── 2026-10-16T09:54:10.318Z 27) [arm] › e2e/specs/prd-2026-007-partial-checkin.spec.ts:212: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-16T09:54:10.318Z Error: createReservation → 400: {"statusCode":400,"message":"One or more selected rooms are already blocked or occupied during the selected period.","timestamp":"2026-10-16T09:49:56.133Z","path":"/reservations","requestId":"18042a90-14ec-45c0-8838-e94a0429b61a"} 2026-10-16T09:54:10.318Z expect(received).toBeTruthy() 2026-10-16T09:54:10.318Z Received: false 2026-10-16T09:54:10.318Z at ../fixtures/arm-api.ts:154 2026-10-16T09:54:10.318Z 152 | }); 2026-10-16T09:54:10.318Z 153 | const text = await res.text(); 2026-10-16T09:54:10.318Z > 154 | expect(res.ok(), `createReservation → ${res.status()}: ${text.slice(0, 500)}`).toBeTruthy(); 2026-10-16T09:54:10.318Z | ^ 2026-10-16T09:54:10.318Z 155 | const body = JSON.parse(text); 2026-10-16T09:54:10.318Z 156 | const checkInId: string = body.id ?? body.checkInId ?? body.data?.id; 2026-10-16T09:54:10.318Z 157 | expect(checkInId, `reservation id missing in response: ${text.slice(0, 300)}`).toBeTruthy(); 2026-10-16T09:54:10.318Z at ArmApi.createReservation (/home/ubuntu/regression-runner/repos/dev/hotel-frontend-core/e2e/fixtures/arm-api.ts:154:82) 2026-10-16T09:54:10.318Z at /home/ubuntu/regression-runner/repos/dev/hotel-frontend-core/e2e/specs/prd-2026-007-partial-checkin.spec.ts:216:25 2026-10-16T09:54:10.318Z attachment #1: screenshot (image/png) ────────────────────────────────────────────────────────── 2026-10-16T09:54:10.318Z test-results/prd-2026-007-partial-check-2443a-k-in-only-S-01-equivalence--arm/test-failed-1.png 2026-10-16T09:54:10.319Z ──────────────────────────────────────────────────────────────────────────────────────────────── 2026-10-16T09:54:10.319Z Error Context: test-results/prd-2026-007-partial-check-2443a-k-in-only-S-01-equivalence--arm/error-context.md 2026-10-16T09:54:10.319Z Error Context: test-results/prd-2026-007-partial-check-2443a-k-in-only-S-01-equivalence--arm/error-context.md 2026-10-16T09:54:10.319Z attachment #4: trace (application/zip) ───────────────────────────────────────────────────────── 2026-10-16T09:54:10.319Z test-results/prd-2026-007-partial-check-2443a-k-in-only-S-01-equivalence--arm/trace.zip 2026-10-16T09:54:10.319Z Usage: 2026-10-16T09:54:10.319Z pnpm exec playwright show-trace test-results/prd-2026-007-partial-check-2443a-k-in-only-S-01-equivalence--arm/trace.zip 2026-10-16T09:54:10.319Z ──────────────────────────────────────────────────────────────────────────────────────────────── 2026-10-16T09:54:10.319Z 28) [arm] › e2e/specs/prd-2026-007-partial-checkin.spec.ts:222:6 › PRD-2026-007 — partial check-in › TC-ARM-088 navigating away from the wizard without confirming leaves rooms UPCOMING [S-18] 2026-10-16T09:54:10.319Z Error: createReservation → 400: {"statusCode":400,"message":"One or more selected rooms are already blocked or occupied during the selected period.","timestamp":"2026-10-16T09:49:58.791Z","path":"/reservations","requestId":"a4c297f2-caef-49be-9979-ff165bb198f1"} 2026-10-16T09:54:10.319Z expect(received).toBeTruthy() 2026-10-16T09:54:10.319Z Received: false 2026-10-16T09:54:10.319Z at ../fixtures/arm-api.ts:154 2026-10-16T09:54:10.319Z 152 | }); 2026-10-16T09:54:10.319Z 153 | const text = await res.text(); 2026-10-16T09:54:10.319Z > 154 | expect(res.ok(), `createReservation → ${res.status()}: ${text.slice(0, 500)}`).toBeTruthy(); 2026-10-16T09:54:10.319Z | ^ 2026-10-16T09:54:10.319Z 155 | const body = JSON.parse(text); 2026-10-16T09:54:10.319Z 156 | const checkInId: string = body.id ?? body.checkInId ?? body.data?.id; 2026-10-16T09:54:10.319Z 157 | expect(checkInId, `reservation id missing in response: ${text.slice(0, 300)}`).toBeTruthy(); 2026-10-16T09:54:10.319Z at ArmApi.createReservation (/home/ubuntu/regression-runner/repos/dev/hotel-frontend-core/e2e/fixtures/arm-api.ts:154:82) 2026-10-16T09:54:10.319Z at /home/ubuntu/regression-runner/repos/dev/hotel-frontend-core/e2e/specs/prd-2026-007-partial-checkin.spec.ts:224:25 2026-10-16T09:54:10.319Z attachment #1: screenshot (image/png) ────────────────────────────────────────────────────────── 2026-10-16T09:54:10.319Z test-results/prd-2026-007-partial-check-bc7a8-leaves-rooms-UPCOMING-S-18--arm/test-failed-1.png 2026-10-16T09:54:10.319Z ──────────────────────────────────────────────────────────────────────────────────────────────── 2026-10-16T09:54:10.319Z Error Context: test-results/prd-2026-007-partial-check-bc7a8-leaves-rooms-UPCOMING-S-18--arm/error-context.md 2026-10-16T09:54:10.319Z Error Context: test-results/prd-2026-007-partial-check-bc7a8-leaves-rooms-UPCOMING-S-18--arm/error-context.md 2026-10-16T09:54:10.319Z attachment #4: trace (application/zip) ───────────────────────────────────────────────────────── 2026-10-16T09:54:10.319Z test-results/prd-2026-007-partial-check-bc7a8-leaves-rooms-UPCOMING-S-18--arm/trace.zip 2026-10-16T09:54:10.319Z Usage: 2026-10-16T09:54:10.319Z pnpm exec playwright show-trace test-results/prd-2026-007-partial-check-bc7a8-leaves-rooms-UPCOMING-S-18--arm/trace.zip 2026-10-16T09:54:10.319Z ──────────────────────────────────────────────────────────────────────────────────────────────── 2026-10-16T09:54:10.319Z 29) [arm] › e2e/specs/prd-2026-007-partial-checkin.spec.ts:234:6 › PRD-2026-007 — partial check-in › TC-ARM-089 fully-terminal booking offers no partial check-in entry [state gating] 2026-10-16T09:54:10.319Z Error: createReservation → 400: {"statusCode":400,"message":"One or more selected rooms are already blocked or occupied during the selected period.","timestamp":"2026-10-16T09:50:01.709Z","path":"/reservations","requestId":"fb23bc66-3601-4af4-bf01-99a62925dc8d"} 2026-10-16T09:54:10.319Z expect(received).toBeTruthy() 2026-10-16T09:54:10.319Z Received: false 2026-10-16T09:54:10.319Z at ../fixtures/arm-api.ts:154 2026-10-16T09:54:10.319Z 152 | }); 2026-10-16T09:54:10.319Z 153 | const text = await res.text(); 2026-10-16T09:54:10.319Z > 154 | expect(res.ok(), `createReservation → ${res.status()}: ${text.slice(0, 500)}`).toBeTruthy(); 2026-10-16T09:54:10.319Z | ^ 2026-10-16T09:54:10.319Z 155 | const body = JSON.parse(text); 2026-10-16T09:54:10.320Z 156 | const checkInId: string = body.id ?? body.checkInId ?? body.data?.id; 2026-10-16T09:54:10.320Z 157 | expect(checkInId, `reservation id missing in response: ${text.slice(0, 300)}`).toBeTruthy(); 2026-10-16T09:54:10.320Z at ArmApi.createReservation (/home/ubuntu/regression-runner/repos/dev/hotel-frontend-core/e2e/fixtures/arm-api.ts:154:82) 2026-10-16T09:54:10.320Z at /home/ubuntu/regression-runner/repos/dev/hotel-frontend-core/e2e/specs/prd-2026-007-partial-checkin.spec.ts:236:25 2026-10-16T09:54:10.320Z attachment #1: screenshot (image/png) ────────────────────────────────────────────────────────── 2026-10-16T09:54:10.320Z test-results/prd-2026-007-partial-check-3dfa6-heck-in-entry-state-gating--arm/test-failed-1.png 2026-10-16T09:54:10.320Z ──────────────────────────────────────────────────────────────────────────────────────────────── 2026-10-16T09:54:10.320Z Error Context: test-results/prd-2026-007-partial-check-3dfa6-heck-in-entry-state-gating--arm/error-context.md 2026-10-16T09:54:10.320Z Error Context: test-results/prd-2026-007-partial-check-3dfa6-heck-in-entry-state-gating--arm/error-context.md 2026-10-16T09:54:10.320Z attachment #4: trace (application/zip) ───────────────────────────────────────────────────────── 2026-10-16T09:54:10.320Z test-results/prd-2026-007-partial-check-3dfa6-heck-in-entry-state-gating--arm/trace.zip 2026-10-16T09:54:10.320Z Usage: 2026-10-16T09:54:10.320Z pnpm exec playwright show-trace test-results/prd-2026-007-partial-check-3dfa6-heck-in-entry-state-gating--arm/trace.zip 2026-10-16T09:54:10.320Z ──────────────────────────────────────────────────────────────────────────────────────────────── 2026-10-16T09:54:10.320Z 30) [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] 2026-10-16T09:54:10.320Z Error: /checkins/00000000-0000-0000-0000-000000000000 must 401 2026-10-16T09:54:10.320Z expect(received).toBe(expected) // Object.is equality 2026-10-16T09:54:10.320Z Expected: 401 2026-10-16T09:54:10.320Z Received: 429 2026-10-16T09:54:10.321Z 83 | ]) { 2026-10-16T09:54:10.321Z 84 | const res = await anon.get(path); 2026-10-16T09:54:10.321Z > 85 | expect(res.status(), `${path} must 401`).toBe(401); 2026-10-16T09:54:10.321Z | ^ 2026-10-16T09:54:10.321Z 86 | } 2026-10-16T09:54:10.321Z 87 | await anon.dispose(); 2026-10-16T09:54:10.321Z 88 | }); 2026-10-16T09:54:10.321Z at /home/ubuntu/regression-runner/repos/dev/hotel-frontend-core/e2e/specs/prd-2026-007-rbac-ux.spec.ts:85:45 2026-10-16T09:54:10.321Z Error Context: test-results/prd-2026-007-rbac-ux-PRD-2-6f317-nce-guest-accounts-Must-18--arm/error-context.md 2026-10-16T09:54:10.321Z Error Context: test-results/prd-2026-007-rbac-ux-PRD-2-6f317-nce-guest-accounts-Must-18--arm/error-context.md 2026-10-16T09:54:10.321Z attachment #3: trace (application/zip) ───────────────────────────────────────────────────────── 2026-10-16T09:54:10.321Z test-results/prd-2026-007-rbac-ux-PRD-2-6f317-nce-guest-accounts-Must-18--arm/trace.zip 2026-10-16T09:54:10.321Z Usage: 2026-10-16T09:54:10.321Z pnpm exec playwright show-trace test-results/prd-2026-007-rbac-ux-PRD-2-6f317-nce-guest-accounts-Must-18--arm/trace.zip 2026-10-16T09:54:10.321Z ──────────────────────────────────────────────────────────────────────────────────────────────── 2026-10-16T09:54:10.321Z 31) [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-16T09:54:10.321Z Test timeout of 90000ms exceeded. 2026-10-16T09:54:10.321Z Error: locator.click: Test timeout of 90000ms exceeded. 2026-10-16T09:54:10.321Z Call log: 2026-10-16T09:54:10.321Z  - waiting for getByRole('button', { name: 'More actions' }) 2026-10-16T09:54:10.321Z 94 | const { checkInId } = await api.createReservation({ label: 'rbac-kebab', rooms: inv.rooms.slice(0, 2), ...window() }); 2026-10-16T09:54:10.321Z 95 | await page.goto(`/dashboard/checkins/${checkInId}`); 2026-10-16T09:54:10.321Z > 96 | await page.getByRole('button', { name: 'More actions' }).click(); 2026-10-16T09:54:10.321Z | ^ 2026-10-16T09:54:10.321Z 97 | await expect(page.getByRole('menuitem', { name: 'Cancel Reservation' })).toBeVisible(); 2026-10-16T09:54:10.321Z 98 | await expect(page.getByRole('menuitem', { name: 'Mark As No-show' })).toBeVisible(); 2026-10-16T09:54:10.321Z 99 | await expect(page.getByRole('menuitem', { name: 'Lock/Unlock Room' })).toBeVisible(); 2026-10-16T09:54:10.321Z at /home/ubuntu/regression-runner/repos/dev/hotel-frontend-core/e2e/specs/prd-2026-007-rbac-ux.spec.ts:96:60 2026-10-16T09:54:10.321Z attachment #1: screenshot (image/png) ────────────────────────────────────────────────────────── 2026-10-16T09:54:10.321Z test-results/prd-2026-007-rbac-ux-PRD-2-b81f2-on-an-UPCOMING-booking-§10--arm/test-failed-1.png 2026-10-16T09:54:10.321Z ──────────────────────────────────────────────────────────────────────────────────────────────── 2026-10-16T09:54:10.321Z Error Context: test-results/prd-2026-007-rbac-ux-PRD-2-b81f2-on-an-UPCOMING-booking-§10--arm/error-context.md 2026-10-16T09:54:10.321Z Error Context: test-results/prd-2026-007-rbac-ux-PRD-2-b81f2-on-an-UPCOMING-booking-§10--arm/error-context.md 2026-10-16T09:54:10.321Z attachment #4: trace (application/zip) ───────────────────────────────────────────────────────── 2026-10-16T09:54:10.321Z test-results/prd-2026-007-rbac-ux-PRD-2-b81f2-on-an-UPCOMING-booking-§10--arm/trace.zip 2026-10-16T09:54:10.321Z Usage: 2026-10-16T09:54:10.321Z 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-16T09:54:10.321Z ──────────────────────────────────────────────────────────────────────────────────────────────── 2026-10-16T09:54:10.321Z 32) [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] 2026-10-16T09:54:10.321Z Error: reservations list has a row for E2E-202610160945-4d7b ARM-2-6 ux-pill 2026-10-16T09:54:10.321Z expect(locator).toBeVisible() failed 2026-10-16T09:54:10.321Z Locator: getByRole('row').filter({ hasText: 'E2E-202610160945-4d7b ARM-2-6 ux-pill' }).first() 2026-10-16T09:54:10.321Z Expected: visible 2026-10-16T09:54:10.322Z Timeout: 10000ms 2026-10-16T09:54:10.322Z Error: element(s) not found 2026-10-16T09:54:10.322Z Call log: 2026-10-16T09:54:10.322Z  - reservations list has a row for E2E-202610160945-4d7b ARM-2-6 ux-pill with timeout 10000ms 2026-10-16T09:54:10.322Z  - waiting for getByRole('row').filter({ hasText: 'E2E-202610160945-4d7b ARM-2-6 ux-pill' }).first() 2026-10-16T09:54:10.322Z at ../fixtures/arm-ui-w4.ts:71 2026-10-16T09:54:10.322Z 69 | await expect(page.getByRole('button', { name: String(p + 1), exact: true })).toBeVisible(); 2026-10-16T09:54:10.322Z 70 | } 2026-10-16T09:54:10.322Z > 71 | await expect(row.first(), `reservations list has a row for ${guestName}`).toBeVisible(); 2026-10-16T09:54:10.322Z | ^ 2026-10-16T09:54:10.322Z 72 | return row.first(); 2026-10-16T09:54:10.322Z 73 | } 2026-10-16T09:54:10.322Z 74 | 2026-10-16T09:54:10.322Z at findRowInReservationsList (/home/ubuntu/regression-runner/repos/dev/hotel-frontend-core/e2e/fixtures/arm-ui-w4.ts:71:76) 2026-10-16T09:54:10.322Z at /home/ubuntu/regression-runner/repos/dev/hotel-frontend-core/e2e/specs/prd-2026-007-rbac-ux.spec.ts:196:15 2026-10-16T09:54:10.322Z attachment #1: screenshot (image/png) ────────────────────────────────────────────────────────── 2026-10-16T09:54:10.322Z test-results/prd-2026-007-rbac-ux-PRD-2-84593-al-bookings-G5-consistency--arm/test-failed-1.png 2026-10-16T09:54:10.322Z ──────────────────────────────────────────────────────────────────────────────────────────────── 2026-10-16T09:54:10.322Z Error Context: test-results/prd-2026-007-rbac-ux-PRD-2-84593-al-bookings-G5-consistency--arm/error-context.md 2026-10-16T09:54:10.322Z Error Context: test-results/prd-2026-007-rbac-ux-PRD-2-84593-al-bookings-G5-consistency--arm/error-context.md 2026-10-16T09:54:10.322Z attachment #4: trace (application/zip) ───────────────────────────────────────────────────────── 2026-10-16T09:54:10.322Z test-results/prd-2026-007-rbac-ux-PRD-2-84593-al-bookings-G5-consistency--arm/trace.zip 2026-10-16T09:54:10.322Z Usage: 2026-10-16T09:54:10.322Z pnpm exec playwright show-trace test-results/prd-2026-007-rbac-ux-PRD-2-84593-al-bookings-G5-consistency--arm/trace.zip 2026-10-16T09:54:10.322Z ──────────────────────────────────────────────────────────────────────────────────────────────── 2026-10-16T09:54:10.322Z 33) [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] 2026-10-16T09:54:10.322Z Error: expect(locator).toBeVisible() failed 2026-10-16T09:54:10.322Z Locator: getByText('101', { exact: true }).first() 2026-10-16T09:54:10.322Z Expected: visible 2026-10-16T09:54:10.322Z Timeout: 10000ms 2026-10-16T09:54:10.322Z Error: element(s) not found 2026-10-16T09:54:10.322Z Call log: 2026-10-16T09:54:10.322Z  - Expect "toBeVisible" with timeout 10000ms 2026-10-16T09:54:10.322Z  - waiting for getByText('101', { exact: true }).first() 2026-10-16T09:54:10.322Z 90 | await page.goto(detailsUrl(checkInId)); 2026-10-16T09:54:10.322Z 91 | for (const r of rooms) { 2026-10-16T09:54:10.322Z > 92 | await expect(page.getByText(r.roomNumber, { exact: true }).first()).toBeVisible(); 2026-10-16T09:54:10.322Z | ^ 2026-10-16T09:54:10.322Z 93 | } 2026-10-16T09:54:10.323Z 94 | await expect(page.getByText(inv.roomTypeName).first()).toBeVisible(); 2026-10-16T09:54:10.323Z 95 | }); 2026-10-16T09:54:10.323Z at /home/ubuntu/regression-runner/repos/dev/hotel-frontend-core/e2e/specs/prd-2026-007-room-cards.spec.ts:92:72 2026-10-16T09:54:10.323Z attachment #1: screenshot (image/png) ────────────────────────────────────────────────────────── 2026-10-16T09:54:10.323Z test-results/prd-2026-007-room-cards-PR-18bb0-type-and-dates-Must-7-S-02--arm/test-failed-1.png 2026-10-16T09:54:10.323Z ──────────────────────────────────────────────────────────────────────────────────────────────── 2026-10-16T09:54:10.323Z Error Context: test-results/prd-2026-007-room-cards-PR-18bb0-type-and-dates-Must-7-S-02--arm/error-context.md 2026-10-16T09:54:10.323Z Error Context: test-results/prd-2026-007-room-cards-PR-18bb0-type-and-dates-Must-7-S-02--arm/error-context.md 2026-10-16T09:54:10.323Z attachment #4: trace (application/zip) ───────────────────────────────────────────────────────── 2026-10-16T09:54:10.323Z test-results/prd-2026-007-room-cards-PR-18bb0-type-and-dates-Must-7-S-02--arm/trace.zip 2026-10-16T09:54:10.323Z Usage: 2026-10-16T09:54:10.323Z pnpm exec playwright show-trace test-results/prd-2026-007-room-cards-PR-18bb0-type-and-dates-Must-7-S-02--arm/trace.zip 2026-10-16T09:54:10.323Z ──────────────────────────────────────────────────────────────────────────────────────────────── 2026-10-16T09:54:10.323Z 34) [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] 2026-10-16T09:54:10.323Z Error: GET /checkins/b7c4a0c0-355a-4632-9767-2d19b8f62563 → 429 2026-10-16T09:54:10.323Z expect(received).toBeTruthy() 2026-10-16T09:54:10.323Z Received: false 2026-10-16T09:54:10.323Z at ../fixtures/arm-api.ts:183 2026-10-16T09:54:10.323Z 181 | async getCheckin(checkInId: string): Promise { 2026-10-16T09:54:10.323Z 182 | const res = await this.ctx.get(`/checkins/${checkInId}`); 2026-10-16T09:54:10.323Z > 183 | expect(res.ok(), `GET /checkins/${checkInId} → ${res.status()}`).toBeTruthy(); 2026-10-16T09:54:10.323Z | ^ 2026-10-16T09:54:10.323Z 184 | return res.json(); 2026-10-16T09:54:10.323Z 185 | } 2026-10-16T09:54:10.323Z 186 | 2026-10-16T09:54:10.323Z at ArmApi.getCheckin (/home/ubuntu/regression-runner/repos/dev/hotel-frontend-core/e2e/fixtures/arm-api.ts:183:68) 2026-10-16T09:54:10.323Z at ArmApi.roomInstanceIds (/home/ubuntu/regression-runner/repos/dev/hotel-frontend-core/e2e/fixtures/arm-api.ts:189:18) 2026-10-16T09:54:10.323Z at /home/ubuntu/regression-runner/repos/dev/hotel-frontend-core/e2e/specs/prd-2026-007-room-cards.spec.ts:101:15 2026-10-16T09:54:10.323Z attachment #1: screenshot (image/png) ────────────────────────────────────────────────────────── 2026-10-16T09:54:10.323Z test-results/prd-2026-007-room-cards-PR-32817-D-IN-card-is-red-Must-2-G5--arm/test-failed-1.png 2026-10-16T09:54:10.323Z ──────────────────────────────────────────────────────────────────────────────────────────────── 2026-10-16T09:54:10.323Z Error Context: test-results/prd-2026-007-room-cards-PR-32817-D-IN-card-is-red-Must-2-G5--arm/error-context.md 2026-10-16T09:54:10.323Z Error Context: test-results/prd-2026-007-room-cards-PR-32817-D-IN-card-is-red-Must-2-G5--arm/error-context.md 2026-10-16T09:54:10.323Z attachment #4: trace (application/zip) ────────────────────────────� 2026-10-16T09:54:10.324Z �──────────────────────────── 2026-10-16T09:54:10.324Z test-results/prd-2026-007-room-cards-PR-32817-D-IN-card-is-red-Must-2-G5--arm/trace.zip 2026-10-16T09:54:10.324Z Usage: 2026-10-16T09:54:10.324Z pnpm exec playwright show-trace test-results/prd-2026-007-room-cards-PR-32817-D-IN-card-is-red-Must-2-G5--arm/trace.zip 2026-10-16T09:54:10.324Z ──────────────────────────────────────────────────────────────────────────────────────────────── 2026-10-16T09:54:10.324Z 35) [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-16T09:54:10.324Z Test timeout of 90000ms exceeded. 2026-10-16T09:54:10.324Z Error: locator.hover: Test timeout of 90000ms exceeded. 2026-10-16T09:54:10.324Z Call log: 2026-10-16T09:54:10.324Z  - waiting for getByText(/^Rooms \(\d+\)$/).locator('xpath=following-sibling::span').first() 2026-10-16T09:54:10.324Z 113 | const probe = await reserve({ label: 'due-probe', rooms: inv.rooms.slice(4, 5) }); 2026-10-16T09:54:10.324Z 114 | await page.goto(detailsUrl(probe.checkInId)); 2026-10-16T09:54:10.324Z > 115 | await page.getByText(/^Rooms \(\d+\)$/).locator('xpath=following-sibling::span').first().hover(); 2026-10-16T09:54:10.324Z | ^ 2026-10-16T09:54:10.324Z 116 | const hasOverdueRule = await page.getByText('Check-Out Overdue', { exact: true }).count(); 2026-10-16T09:54:10.324Z 117 | test.skip(hasOverdueRule === 0, 'this build of the app has no Check-Out Overdue state (older room-card colour rule)'); 2026-10-16T09:54:10.324Z 118 | // Due: checkout is 1h away (due window opens 2h before checkout). 2026-10-16T09:54:10.324Z at /home/ubuntu/regression-runner/repos/dev/hotel-frontend-core/e2e/specs/prd-2026-007-room-cards.spec.ts:115:92 2026-10-16T09:54:10.324Z attachment #1: screenshot (image/png) ────────────────────────────────────────────────────────── 2026-10-16T09:54:10.324Z test-results/prd-2026-007-room-cards-PR-84ced-then-overdue-orange-Must-2--arm/test-failed-1.png 2026-10-16T09:54:10.324Z ──────────────────────────────────────────────────────────────────────────────────────────────── 2026-10-16T09:54:10.324Z Error Context: test-results/prd-2026-007-room-cards-PR-84ced-then-overdue-orange-Must-2--arm/error-context.md 2026-10-16T09:54:10.324Z Error Context: test-results/prd-2026-007-room-cards-PR-84ced-then-overdue-orange-Must-2--arm/error-context.md 2026-10-16T09:54:10.324Z attachment #4: trace (application/zip) ───────────────────────────────────────────────────────── 2026-10-16T09:54:10.324Z test-results/prd-2026-007-room-cards-PR-84ced-then-overdue-orange-Must-2--arm/trace.zip 2026-10-16T09:54:10.324Z Usage: 2026-10-16T09:54:10.324Z pnpm exec playwright show-trace test-results/prd-2026-007-room-cards-PR-84ced-then-overdue-orange-Must-2--arm/trace.zip 2026-10-16T09:54:10.324Z ──────────────────────────────────────────────────────────────────────────────────────────────── 2026-10-16T09:54:10.324Z 36) [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-16T09:54:10.324Z Error: GET /checkins/a54fcea9-66dc-415c-a204-305b26d59c92 → 429 2026-10-16T09:54:10.324Z expect(received).toBeTruthy() 2026-10-16T09:54:10.324Z Received: false 2026-10-16T09:54:10.324Z at ../fixtures/arm-api.ts:183 2026-10-16T09:54:10.324Z 181 | async getCheckin(checkInId: string): Promise { 2026-10-16T09:54:10.324Z 182 | const res = await this.ctx.get(`/checkins/${checkInId}`); 2026-10-16T09:54:10.324Z > 183 | expect(res.ok(), `GET /checkins/${checkInId} → ${res.status()}`).toBeTruthy(); 2026-10-16T09:54:10.324Z | ^ 2026-10-16T09:54:10.324Z 184 | return res.json(); 2026-10-16T09:54:10.324Z 185 | } 2026-10-16T09:54:10.325Z 186 | 2026-10-16T09:54:10.325Z at ArmApi.getCheckin (/home/ubuntu/regression-runner/repos/dev/hotel-frontend-core/e2e/fixtures/arm-api.ts:183:68) 2026-10-16T09:54:10.325Z at /home/ubuntu/regression-runner/repos/dev/hotel-frontend-core/e2e/specs/prd-2026-007-slots-multicycle.spec.ts:77:18 2026-10-16T09:54:10.325Z Error Context: test-results/prd-2026-007-slots-multicy-8794b-ing-all-rooms-CR-1-Must-13--arm/error-context.md 2026-10-16T09:54:10.325Z Error Context: test-results/prd-2026-007-slots-multicy-8794b-ing-all-rooms-CR-1-Must-13--arm/error-context.md 2026-10-16T09:54:10.325Z attachment #3: trace (application/zip) ───────────────────────────────────────────────────────── 2026-10-16T09:54:10.325Z test-results/prd-2026-007-slots-multicy-8794b-ing-all-rooms-CR-1-Must-13--arm/trace.zip 2026-10-16T09:54:10.325Z Usage: 2026-10-16T09:54:10.325Z 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-16T09:54:10.325Z ──────────────────────────────────────────────────────────────────────────────────────────────── 2026-10-16T09:54:10.325Z 37) [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] 2026-10-16T09:54:10.325Z Error: GET /checkins/ad239b7d-072a-4c78-87de-d892b395b428 → 429 2026-10-16T09:54:10.325Z expect(received).toBeTruthy() 2026-10-16T09:54:10.325Z Received: false 2026-10-16T09:54:10.325Z at ../fixtures/arm-api.ts:183 2026-10-16T09:54:10.325Z 181 | async getCheckin(checkInId: string): Promise { 2026-10-16T09:54:10.325Z 182 | const res = await this.ctx.get(`/checkins/${checkInId}`); 2026-10-16T09:54:10.325Z > 183 | expect(res.ok(), `GET /checkins/${checkInId} → ${res.status()}`).toBeTruthy(); 2026-10-16T09:54:10.325Z | ^ 2026-10-16T09:54:10.325Z 184 | return res.json(); 2026-10-16T09:54:10.325Z 185 | } 2026-10-16T09:54:10.325Z 186 | 2026-10-16T09:54:10.325Z at ArmApi.getCheckin (/home/ubuntu/regression-runner/repos/dev/hotel-frontend-core/e2e/fixtures/arm-api.ts:183:68) 2026-10-16T09:54:10.325Z at /home/ubuntu/regression-runner/repos/dev/hotel-frontend-core/e2e/specs/prd-2026-007-slots-multicycle.spec.ts:86:18 2026-10-16T09:54:10.325Z Error Context: test-results/prd-2026-007-slots-multicy-9c46b-its-default-slot-S-01-CR-1--arm/error-context.md 2026-10-16T09:54:10.325Z Error Context: test-results/prd-2026-007-slots-multicy-9c46b-its-default-slot-S-01-CR-1--arm/error-context.md 2026-10-16T09:54:10.325Z attachment #3: trace (application/zip) ───────────────────────────────────────────────────────── 2026-10-16T09:54:10.325Z test-results/prd-2026-007-slots-multicy-9c46b-its-default-slot-S-01-CR-1--arm/trace.zip 2026-10-16T09:54:10.325Z Usage: 2026-10-16T09:54:10.325Z pnpm exec playwright show-trace test-results/prd-2026-007-slots-multicy-9c46b-its-default-slot-S-01-CR-1--arm/trace.zip 2026-10-16T09:54:10.325Z ──────────────────────────────────────────────────────────────────────────────────────────────── 2026-10-16T09:54:10.325Z 38) [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] 2026-10-16T09:54:10.325Z Error: GET /checkins/955d2646-e0f7-46a6-a655-dd3fca9d8a31 → 429 2026-10-16T09:54:10.325Z expect(received).toBeTruthy() 2026-10-16T09:54:10.325Z Received: false 2026-10-16T09:54:10.325Z at ../fixtures/arm-api.ts:183 2026-10-16T09:54:10.325Z 181 | async getCheckin(checkInId: string): Promise { 2026-10-16T09:54:10.325Z 182 | const res = await this.ctx.get(`/checkins/${checkInId}`); 2026-10-16T09:54:10.325Z > 183 | expect(res.ok(), `GET /checkins/${checkInId} → ${res.status()}`).toBeTruthy(); 2026-10-16T09:54:10.325Z | ^ 2026-10-16T09:54:10.325Z 184 | return res.json(); 2026-10-16T09:54:10.325Z 185 | } 2026-10-16T09:54:10.325Z 186 | 2026-10-16T09:54:10.325Z at ArmApi.getCheckin (/home/ubuntu/regression-runner/repos/dev/hotel-frontend-core/e2e/fixtures/arm-api.ts:183:68) 2026-10-16T09:54:10.325Z at ArmApi.roomInstanceIds (/home/ubuntu/regression-runner/repos/dev/hotel-frontend-core/e2e/fixtures/arm-api.ts:189:18) 2026-10-16T09:54:10.325Z at /home/ubuntu/regression-runner/repos/dev/hotel-frontend-core/e2e/specs/prd-2026-007-slots-multicycle.spec.ts:93:15 2026-10-16T09:54:10.325Z Error Context: test-results/prd-2026-007-slots-multicy-38e46-tus-lives-on-the-room-CR-1--arm/error-context.md 2026-10-16T09:54:10.325Z Error Context: test-results/prd-2026-007-slots-multicy-38e46-tus-lives-on-the-room-CR-1--arm/error-context.md 2026-10-16T09:54:10.326Z attachment #3: trace (application/zip) ───────────────────────────────────────────────────────── 2026-10-16T09:54:10.326Z test-results/prd-2026-007-slots-multicy-38e46-tus-lives-on-the-room-CR-1--arm/trace.zip 2026-10-16T09:54:10.326Z Usage: 2026-10-16T09:54:10.326Z pnpm exec playwright show-trace test-results/prd-2026-007-slots-multicy-38e46-tus-lives-on-the-room-CR-1--arm/trace.zip 2026-10-16T09:54:10.326Z ──────────────────────────────────────────────────────────────────────────────────────────────── 2026-10-16T09:54:10.326Z 39) [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-16T09:54:10.326Z Error: GET /checkins/27f71aa7-c53c-4eae-b27a-e96b51ec5dc6 → 429 2026-10-16T09:54:10.326Z expect(received).toBeTruthy() 2026-10-16T09:54:10.326Z Received: false 2026-10-16T09:54:10.326Z at ../fixtures/arm-api.ts:183 2026-10-16T09:54:10.326Z 181 | async getCheckin(checkInId: string): Promise { 2026-10-16T09:54:10.326Z 182 | const res = await this.ctx.get(`/checkins/${checkInId}`); 2026-10-16T09:54:10.326Z > 183 | expect(res.ok(), `GET /checkins/${checkInId} → ${res.status()}`).toBeTruthy(); 2026-10-16T09:54:10.326Z | ^ 2026-10-16T09:54:10.326Z 184 | return res.json(); 2026-10-16T09:54:10.326Z 185 | } 2026-10-16T09:54:10.326Z 186 | 2026-10-16T09:54:10.326Z at ArmApi.getCheckin (/home/ubuntu/regression-runner/repos/dev/hotel-frontend-core/e2e/fixtures/arm-api.ts:183:68) 2026-10-16T09:54:10.326Z at ArmApi.roomInstanceIds (/home/ubuntu/regression-runner/repos/dev/hotel-frontend-core/e2e/fixtures/arm-api.ts:189:18) 2026-10-16T09:54:10.326Z at /home/ubuntu/regression-runner/repos/dev/hotel-frontend-core/e2e/specs/prd-2026-007-slots-multicycle.spec.ts:104:15 2026-10-16T09:54:10.326Z Error Context: test-results/prd-2026-007-slots-multicy-13231-d-no-name-status-CR-1-S-32--arm/error-context.md 2026-10-16T09:54:10.326Z Error Context: test-results/prd-2026-007-slots-multicy-13231-d-no-name-status-CR-1-S-32--arm/error-context.md 2026-10-16T09:54:10.326Z attachment #3: trace (application/zip) ───────────────────────────────────────────────────────── 2026-10-16T09:54:10.326Z test-results/prd-2026-007-slots-multicy-13231-d-no-name-status-CR-1-S-32--arm/trace.zip 2026-10-16T09:54:10.326Z Usage: 2026-10-16T09:54:10.326Z 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-16T09:54:10.326Z ──────────────────────────────────────────────────────────────────────────────────────────────── 2026-10-16T09:54:10.326Z 40) [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] 2026-10-16T09:54:10.326Z Error: GET /checkins/9c524e8f-6671-4fa9-8713-5e4cbbe6a03f → 429 2026-10-16T09:54:10.326Z expect(received).toBeTruthy() 2026-10-16T09:54:10.326Z Received: false 2026-10-16T09:54:10.326Z at ../fixtures/arm-api.ts:183 2026-10-16T09:54:10.326Z 181 | async getCheckin(checkInId: string): Promise { 2026-10-16T09:54:10.326Z 182 | const res = await this.ctx.get(`/checkins/${checkInId}`); 2026-10-16T09:54:10.326Z > 183 | expect(res.ok(), `GET /checkins/${checkInId} → ${res.status()}`).toBeTruthy(); 2026-10-16T09:54:10.326Z | ^ 2026-10-16T09:54:10.326Z 184 | return res.json(); 2026-10-16T09:54:10.326Z 185 | } 2026-10-16T09:54:10.326Z 186 | 2026-10-16T09:54:10.326Z at ArmApi.getCheckin (/home/ubuntu/regression-runner/repos/dev/hotel-frontend-core/e2e/fixtures/arm-api.ts:183:68) 2026-10-16T09:54:10.326Z at ArmApi.roomInstanceIds (/home/ubuntu/regression-runner/repos/dev/hotel-frontend-core/e2e/fixtures/arm-api.ts:189:18) 2026-10-16T09:54:10.326Z at /home/ubuntu/regression-runner/repos/dev/hotel-frontend-core/e2e/specs/prd-2026-007-slots-multicycle.spec.ts:121:15 2026-10-16T09:54:10.326Z Error Context: test-results/prd-2026-007-slots-multicy-5379d-he-reservation-window-CR-1--arm/error-context.md 2026-10-16T09:54:10.326Z Error Context: test-results/prd-2026-007-slots-multicy-5379d-he-reservation-window-CR-1--arm/error-context.md 2026-10-16T09:54:10.326Z attachment #3: trace (application/zip) ───────────────────────────────────────────────────────── 2026-10-16T09:54:10.326Z test-results/prd-2026-007-slots-multicy-5379d-he-reservation-window-CR-1--arm/trace.zip 2026-10-16T09:54:10.326Z Usage: 2026-10-16T09:54:10.326Z pnpm exec playwright show-trace test-results/prd-2026-007-slots-multicy-5379d-he-reservation-window-CR-1--arm/trace.zip 2026-10-16T09:54:10.327Z ──────────────────────────────────────────────────────────────────────────────────────────────── 2026-10-16T09:54:10.327Z 41) [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] 2026-10-16T09:54:10.327Z Error: GET /checkins/d33bfb4c-0b03-4730-898e-a0a555d94948 → 429 2026-10-16T09:54:10.327Z expect(received).toBeTruthy() 2026-10-16T09:54:10.327Z Received: false 2026-10-16T09:54:10.327Z at ../fixtures/arm-api.ts:183 2026-10-16T09:54:10.327Z 181 | async getCheckin(checkInId: string): Promise { 2026-10-16T09:54:10.327Z 182 | const res = await this.ctx.get(`/checkins/${checkInId}`); 2026-10-16T09:54:10.327Z > 183 | expect(res.ok(), `GET /checkins/${checkInId} → ${res.status()}`).toBeTruthy(); 2026-10-16T09:54:10.327Z | ^ 2026-10-16T09:54:10.327Z 184 | return res.json(); 2026-10-16T09:54:10.327Z 185 | } 2026-10-16T09:54:10.327Z 186 | 2026-10-16T09:54:10.327Z at ArmApi.getCheckin (/home/ubuntu/regression-runner/repos/dev/hotel-frontend-core/e2e/fixtures/arm-api.ts:183:68) 2026-10-16T09:54:10.327Z at ArmApi.roomInstanceIds (/home/ubuntu/regression-runner/repos/dev/hotel-frontend-core/e2e/fixtures/arm-api.ts:189:18) 2026-10-16T09:54:10.327Z at twoCycles (/home/ubuntu/regression-runner/repos/dev/hotel-frontend-core/e2e/specs/prd-2026-007-slots-multicycle.spec.ts:60:14) 2026-10-16T09:54:10.327Z at /home/ubuntu/regression-runner/repos/dev/hotel-frontend-core/e2e/specs/prd-2026-007-slots-multicycle.spec.ts:135:36 2026-10-16T09:54:10.327Z Error Context: test-results/prd-2026-007-slots-multicy-51878-rce-stays-CHECKED-OUT-OQ-6--arm/error-context.md 2026-10-16T09:54:10.327Z Error Context: test-results/prd-2026-007-slots-multicy-51878-rce-stays-CHECKED-OUT-OQ-6--arm/error-context.md 2026-10-16T09:54:10.327Z attachment #3: trace (application/zip) ───────────────────────────────────────────────────────── 2026-10-16T09:54:10.327Z test-results/prd-2026-007-slots-multicy-51878-rce-stays-CHECKED-OUT-OQ-6--arm/trace.zip 2026-10-16T09:54:10.327Z Usage: 2026-10-16T09:54:10.327Z pnpm exec playwright show-trace test-results/prd-2026-007-slots-multicy-51878-rce-stays-CHECKED-OUT-OQ-6--arm/trace.zip 2026-10-16T09:54:10.327Z ──────────────────────────────────────────────────────────────────────────────────────────────── 2026-10-16T09:54:10.327Z 42) [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] 2026-10-16T09:54:10.327Z Error: GET /checkins/c3ec79d1-2968-47ec-9fcc-75fb560932ec → 429 2026-10-16T09:54:10.327Z expect(received).toBeTruthy() 2026-10-16T09:54:10.327Z Received: false 2026-10-16T09:54:10.327Z at ../fixtures/arm-api.ts:183 2026-10-16T09:54:10.327Z 181 | async getCheckin(checkInId: string): Promise { 2026-10-16T09:54:10.327Z 182 | const res = await this.ctx.get(`/checkins/${checkInId}`); 2026-10-16T09:54:10.327Z > 183 | expect(res.ok(), `GET /checkins/${checkInId} → ${res.status()}`).toBeTruthy(); 2026-10-16T09:54:10.327Z | ^ 2026-10-16T09:54:10.328Z 184 | return res.json(); 2026-10-16T09:54:10.328Z 185 | } 2026-10-16T09:54:10.328Z 186 | 2026-10-16T09:54:10.328Z at ArmApi.getCheckin (/home/ubuntu/regression-runner/repos/dev/hotel-frontend-core/e2e/fixtures/arm-api.ts:183:68) 2026-10-16T09:54:10.328Z at ArmApi.roomInstanceIds (/home/ubuntu/regression-runner/repos/dev/hotel-frontend-core/e2e/fixtures/arm-api.ts:189:18) 2026-10-16T09:54:10.328Z at twoCycles (/home/ubuntu/regression-runner/repos/dev/hotel-frontend-core/e2e/specs/prd-2026-007-slots-multicycle.spec.ts:60:14) 2026-10-16T09:54:10.328Z at /home/ubuntu/regression-runner/repos/dev/hotel-frontend-core/e2e/specs/prd-2026-007-slots-multicycle.spec.ts:146:34 2026-10-16T09:54:10.328Z Error Context: test-results/prd-2026-007-slots-multicy-2bec7-h-distinct-windows-G7-S-31--arm/error-context.md 2026-10-16T09:54:10.328Z Error Context: test-results/prd-2026-007-slots-multicy-2bec7-h-distinct-windows-G7-S-31--arm/error-context.md 2026-10-16T09:54:10.328Z attachment #3: trace (application/zip) ───────────────────────────────────────────────────────── 2026-10-16T09:54:10.328Z test-results/prd-2026-007-slots-multicy-2bec7-h-distinct-windows-G7-S-31--arm/trace.zip 2026-10-16T09:54:10.328Z Usage: 2026-10-16T09:54:10.328Z pnpm exec playwright show-trace test-results/prd-2026-007-slots-multicy-2bec7-h-distinct-windows-G7-S-31--arm/trace.zip 2026-10-16T09:54:10.328Z ──────────────────────────────────────────────────────────────────────────────────────────────── 2026-10-16T09:54:10.328Z 43) [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] 2026-10-16T09:54:10.328Z Error: GET /checkins/2c59129d-fd47-446a-9980-6790d2e45757 → 429 2026-10-16T09:54:10.328Z expect(received).toBeTruthy() 2026-10-16T09:54:10.328Z Received: false 2026-10-16T09:54:10.328Z at ../fixtures/arm-api.ts:183 2026-10-16T09:54:10.328Z 181 | async getCheckin(checkInId: string): Promise { 2026-10-16T09:54:10.328Z 182 | const res = await this.ctx.get(`/checkins/${checkInId}`); 2026-10-16T09:54:10.328Z > 183 | expect(res.ok(), `GET /checkins/${checkInId} → ${res.status()}`).toBeTruthy(); 2026-10-16T09:54:10.328Z | ^ 2026-10-16T09:54:10.328Z 184 | return res.json(); 2026-10-16T09:54:10.328Z 185 | } 2026-10-16T09:54:10.328Z 186 | 2026-10-16T09:54:10.328Z at ArmApi.getCheckin (/home/ubuntu/regression-runner/repos/dev/hotel-frontend-core/e2e/fixtures/arm-api.ts:183:68) 2026-10-16T09:54:10.328Z at ArmApi.roomInstanceIds (/home/ubuntu/regression-runner/repos/dev/hotel-frontend-core/e2e/fixtures/arm-api.ts:189:18) 2026-10-16T09:54:10.328Z at twoCycles (/home/ubuntu/regression-runner/repos/dev/hotel-frontend-core/e2e/specs/prd-2026-007-slots-multicycle.spec.ts:60:14) 2026-10-16T09:54:10.328Z at /home/ubuntu/regression-runner/repos/dev/hotel-frontend-core/e2e/specs/prd-2026-007-slots-multicycle.spec.ts:160:25 2026-10-16T09:54:10.328Z Error Context: test-results/prd-2026-007-slots-multicy-2c133-e-cycle-2-exists-CR-3-S-31--arm/error-context.md 2026-10-16T09:54:10.328Z Error Context: test-results/prd-2026-007-slots-multicy-2c133-e-cycle-2-exists-CR-3-S-31--arm/error-context.md 2026-10-16T09:54:10.328Z attachment #3: trace (application/zip) ───────────────────────────────────────────────────────── 2026-10-16T09:54:10.328Z test-results/prd-2026-007-slots-multicy-2c133-e-cycle-2-exists-CR-3-S-31--arm/trace.zip 2026-10-16T09:54:10.328Z Usage: 2026-10-16T09:54:10.328Z pnpm exec playwright show-trace test-results/prd-2026-007-slots-multicy-2c133-e-cycle-2-exists-CR-3-S-31--arm/trace.zip 2026-10-16T09:54:10.328Z ──────────────────────────────────────────────────────────────────────────────────────────────── 2026-10-16T09:54:10.328Z 44) [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] 2026-10-16T09:54:10.328Z Error: GET /checkins/bd22206f-4ce0-4627-a430-a08f79696a23 → 429 2026-10-16T09:54:10.328Z expect(received).toBeTruthy() 2026-10-16T09:54:10.328Z Received: false 2026-10-16T09:54:10.328Z at ../fixtures/arm-api.ts:183 2026-10-16T09:54:10.328Z 181 | async getCheckin(checkInId: string): Promise { 2026-10-16T09:54:10.328Z 182 | const res = await this.ctx.get(`/checkins/${checkInId}`); 2026-10-16T09:54:10.329Z > 183 | expect(res.ok(), `GET /checkins/${checkInId} → ${res.status()}`).toBeTruthy(); 2026-10-16T09:54:10.329Z | ^ 2026-10-16T09:54:10.329Z 184 | return res.json(); 2026-10-16T09:54:10.329Z 185 | } 2026-10-16T09:54:10.329Z 186 | 2026-10-16T09:54:10.329Z at ArmApi.getCheckin (/home/ubuntu/regression-runner/repos/dev/hotel-frontend-core/e2e/fixtures/arm-api.ts:183:68) 2026-10-16T09:54:10.329Z at ArmApi.roomInstanceIds (/home/ubuntu/regression-runner/repos/dev/hotel-frontend-core/e2e/fixtures/arm-api.ts:189:18) 2026-10-16T09:54:10.329Z at run (/home/ubuntu/regression-runner/repos/dev/hotel-frontend-core/e2e/specs/prd-2026-007-status-aggregation.spec.ts:118:14) 2026-10-16T09:54:10.329Z at /home/ubuntu/regression-runner/repos/dev/hotel-frontend-core/e2e/specs/prd-2026-007-status-aggregation.spec.ts:144:26 2026-10-16T09:54:10.329Z Error Context: test-results/prd-2026-007-status-aggreg-5550c-OMING-→-UPCOMING-CR-2-S-02--arm/error-context.md 2026-10-16T09:54:10.329Z Error Context: test-results/prd-2026-007-status-aggreg-5550c-OMING-→-UPCOMING-CR-2-S-02--arm/error-context.md 2026-10-16T09:54:10.329Z attachment #3: trace (application/zip) ───────────────────────────────────────────────────────── 2026-10-16T09:54:10.329Z test-results/prd-2026-007-status-aggreg-5550c-OMING-→-UPCOMING-CR-2-S-02--arm/trace.zip 2026-10-16T09:54:10.329Z Usage: 2026-10-16T09:54:10.329Z pnpm exec playwright show-trace test-results/prd-2026-007-status-aggreg-5550c-OMING-→-UPCOMING-CR-2-S-02--arm/trace.zip 2026-10-16T09:54:10.329Z ──────────────────────────────────────────────────────────────────────────────────────────────── 2026-10-16T09:54:10.329Z 45) [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] 2026-10-16T09:54:10.329Z Error: GET /checkins/2b3bd8c3-8030-4c00-81de-f525742bb31f → 429 2026-10-16T09:54:10.329Z expect(received).toBeTruthy() 2026-10-16T09:54:10.329Z Received: false 2026-10-16T09:54:10.329Z at ../fixtures/arm-api.ts:183 2026-10-16T09:54:10.329Z 181 | async getCheckin(checkInId: string): Promise { 2026-10-16T09:54:10.329Z 182 | const res = await this.ctx.get(`/checkins/${checkInId}`); 2026-10-16T09:54:10.329Z > 183 | expect(res.ok(), `GET /checkins/${checkInId} → ${res.status()}`).toBeTruthy(); 2026-10-16T09:54:10.329Z | ^ 2026-10-16T09:54:10.329Z 184 | return res.json(); 2026-10-16T09:54:10.329Z 185 | } 2026-10-16T09:54:10.329Z 186 | 2026-10-16T09:54:10.329Z at ArmApi.getCheckin (/home/ubuntu/regression-runner/repos/dev/hotel-frontend-core/e2e/fixtures/arm-api.ts:183:68) 2026-10-16T09:54:10.329Z at ArmApi.roomInstanceIds (/home/ubuntu/regression-runner/repos/dev/hotel-frontend-core/e2e/fixtures/arm-api.ts:189:18) 2026-10-16T09:54:10.329Z at run (/home/ubuntu/regression-runner/repos/dev/hotel-frontend-core/e2e/specs/prd-2026-007-status-aggregation.spec.ts:118:14) 2026-10-16T09:54:10.329Z at /home/ubuntu/regression-runner/repos/dev/hotel-frontend-core/e2e/specs/prd-2026-007-status-aggregation.spec.ts:144:26 2026-10-16T09:54:10.329Z Error Context: test-results/prd-2026-007-status-aggreg-0e666--IN-→-CHECKED-IN-CR-2-S-04--arm/error-context.md 2026-10-16T09:54:10.329Z Error Context: test-results/prd-2026-007-status-aggreg-0e666--IN-→-CHECKED-IN-CR-2-S-04--arm/error-context.md 2026-10-16T09:54:10.329Z attachment #3: trace (application/zip) ───────────────────────────────────────────────────────── 2026-10-16T09:54:10.329Z test-results/prd-2026-007-status-aggreg-0e666--IN-→-CHECKED-IN-CR-2-S-04--arm/trace.zip 2026-10-16T09:54:10.329Z Usage: 2026-10-16T09:54:10.329Z pnpm exec playwright show-trace test-results/prd-2026-007-status-aggreg-0e666--IN-→-CHECKED-IN-CR-2-S-04--arm/trace.zip 2026-10-16T09:54:10.329Z ──────────────────────────────────────────────────────────────────────────────────────────────── 2026-10-16T09:54:10.329Z 45 failed 2026-10-16T09:54:10.329Z [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-16T09:54:10.329Z [chromium] › e2e/specs/prd-2026-005-active-template.spec.ts:61:6 › PRD-2026-005 — Active custom template wins › TC-PRD-091 template with unregistered fontName still renders (no font crash) 2026-10-16T09:54:10.329Z [chromium] › e2e/specs/prd-2026-005-supplementary-docs.spec.ts:48:6 › PRD-2026-005 — Supplementary documents › TC-PRD-053 Debit Note (full) generates 201 + PDF blob 2026-10-16T09:54:10.329Z [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-16T09:54:10.329Z [chromium] › e2e/specs/revenue-guardrail-removal.spec.ts:23:5 › TC-REV-GUARD-1 clearing both configured limits removes the guardrail 2026-10-16T09:54:10.329Z [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] 2026-10-16T09:54:10.329Z [arm] › e2e/specs/prd-2026-007-finance.spec.ts:341:6 › PRD-2026-007 — finance surfaces in the UI › TC-ARM-281 details payment summary reflects an added charge after reload [Must 8 UI] 2026-10-16T09:54:10.330Z [arm] › e2e/specs/prd-2026-007-finance.spec.ts:446: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] 2026-10-16T09:54:10.330Z [arm] › e2e/specs/prd-2026-007-finance.spec.ts:545: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] 2026-10-16T09:54:10.330Z [arm] › e2e/specs/prd-2026-007-finance.spec.ts:571: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] 2026-10-16T09:54:10.330Z [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-16T09:54:10.330Z [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-16T09:54:10.330Z [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-16T09:54:10.330Z [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-16T09:54:10.330Z [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-16T09:54:10.330Z [arm] › e2e/specs/prd-2026-007-noshow-cancel.spec.ts:132:6 › PRD-2026-007 — cancellation per room › TC-ARM-110 UI: "can't be undone" warning is shown [UX/NG1] 2026-10-16T09:54:10.330Z [arm] › e2e/specs/prd-2026-007-noshow-cancel.spec.ts:232:6 › PRD-2026-007 — scheduled cancel/no-show with withdraw window › TC-ARM-119 withdraw-scheduled aborts the staged action [staged ops] 2026-10-16T09:54:10.330Z [arm] › e2e/specs/prd-2026-007-noshow-cancel.spec.ts:245: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-16T09:54:10.330Z [arm] › e2e/specs/prd-2026-007-noshow-cancel.spec.ts:259: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-16T09:54:10.330Z [arm] › e2e/specs/prd-2026-007-noshow-cancel.spec.ts:274: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-16T09:54:10.330Z [arm] › e2e/specs/prd-2026-007-partial-checkin.spec.ts:141: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-16T09:54:10.330Z [arm] › e2e/specs/prd-2026-007-partial-checkin.spec.ts:154: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-16T09:54:10.330Z [arm] › e2e/specs/prd-2026-007-partial-checkin.spec.ts:163: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-16T09:54:10.330Z [arm] › e2e/specs/prd-2026-007-partial-checkin.spec.ts:179: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-16T09:54:10.330Z [arm] › e2e/specs/prd-2026-007-partial-checkin.spec.ts:192: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-16T09:54:10.330Z [arm] › e2e/specs/prd-2026-007-partial-checkin.spec.ts:203:6 › PRD-2026-007 — partial check-in › TC-ARM-084 UI reflects partial state immediately after API check-in + reload [G5] 2026-10-16T09:54:10.330Z [arm] › e2e/specs/prd-2026-007-partial-checkin.spec.ts:212: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-16T09:54:10.330Z [arm] › e2e/specs/prd-2026-007-partial-checkin.spec.ts:222:6 › PRD-2026-007 — partial check-in › TC-ARM-088 navigating away from the wizard without confirming leaves rooms UPCOMING [S-18] 2026-10-16T09:54:10.330Z [arm] › e2e/specs/prd-2026-007-partial-checkin.spec.ts:234:6 › PRD-2026-007 — partial check-in › TC-ARM-089 fully-terminal booking offers no partial check-in entry [state gating] 2026-10-16T09:54:10.330Z [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] 2026-10-16T09:54:10.330Z [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-16T09:54:10.330Z [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] 2026-10-16T09:54:10.330Z [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] 2026-10-16T09:54:10.330Z [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] 2026-10-16T09:54:10.330Z [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-16T09:54:10.330Z [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-16T09:54:10.330Z [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] 2026-10-16T09:54:10.330Z [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] 2026-10-16T09:54:10.330Z [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-16T09:54:10.330Z [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] 2026-10-16T09:54:10.330Z [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] 2026-10-16T09:54:10.330Z [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] 2026-10-16T09:54:10.330Z [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] 2026-10-16T09:54:10.330Z [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] 2026-10-16T09:54:10.330Z [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] 2026-10-16T09:54:10.330Z 13 skipped 2026-10-16T09:54:10.330Z 11 did not run 2026-10-16T09:54:10.330Z 208 passed (7.8m) 2026-10-16T09:54:10.753Z  ELIFECYCLE  Command failed with exit code 1. 2026-10-16T09:54:10.775Z -> exit 1 2026-10-16T09:54:11.051Z slack: 202 2026-10-16T09:54:12.033Z github status hotel-backend-core@9338e28e7: 201 2026-10-16T09:54:13.256Z github status hotel-frontend-core@2edac7677: 201