2026-10-16T10:34:01.338Z start test on dev (full/parallel, trigger manual) 2026-10-16T10:34:01.503Z deployed: {"hotel-backend-core":"394fc768fefe10507ba7acf51e4b343e4398144b","hotel-frontend-core":"4fdaa0a700498fa5897e56aa78db069a0cc06d2c"} 2026-10-16T10:34:01.503Z $ git fetch --quiet --prune origin (cwd /home/ubuntu/regression-runner/repos/dev/hotel-backend-core) 2026-10-16T10:34:02.547Z -> exit 0 2026-10-16T10:34:02.547Z $ git cat-file -e 394fc768fefe10507ba7acf51e4b343e4398144b^{commit} (cwd /home/ubuntu/regression-runner/repos/dev/hotel-backend-core) 2026-10-16T10:34:02.556Z -> exit 0 2026-10-16T10:34:02.556Z $ git diff --name-only 394fc768fefe10507ba7acf51e4b343e4398144b origin/dev (cwd /home/ubuntu/regression-runner/repos/dev/hotel-backend-core) 2026-10-16T10:34:02.565Z -> exit 0 2026-10-16T10:34:02.565Z $ git checkout --quiet --detach 394fc768fefe10507ba7acf51e4b343e4398144b && git clean -fdq -e playwright-report -e .auth && git rev-parse HEAD (cwd /home/ubuntu/regression-runner/repos/dev/hotel-backend-core) 2026-10-16T10:34:02.621Z 394fc768fefe10507ba7acf51e4b343e4398144b 2026-10-16T10:34:02.621Z -> exit 0 2026-10-16T10:34:02.621Z $ 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-16T10:34:03.057Z Scope: all 31 workspace projects 2026-10-16T10:34:03.241Z Lockfile is up to date, resolution step is skipped 2026-10-16T10:34:03.444Z Already up to date 2026-10-16T10:34:04.454Z . prepare$ husky 2026-10-16T10:34:04.509Z . prepare: Done 2026-10-16T10:34:04.634Z Done in 1.9s 2026-10-16T10:34:04.669Z -> exit 0 2026-10-16T10:34:04.669Z $ git fetch --quiet --prune origin (cwd /home/ubuntu/regression-runner/repos/dev/hotel-frontend-core) 2026-10-16T10:34:06.109Z -> exit 0 2026-10-16T10:34:06.109Z $ git cat-file -e 4fdaa0a700498fa5897e56aa78db069a0cc06d2c^{commit} (cwd /home/ubuntu/regression-runner/repos/dev/hotel-frontend-core) 2026-10-16T10:34:06.119Z -> exit 0 2026-10-16T10:34:06.119Z $ git diff --name-only 4fdaa0a700498fa5897e56aa78db069a0cc06d2c origin/dev (cwd /home/ubuntu/regression-runner/repos/dev/hotel-frontend-core) 2026-10-16T10:34:06.128Z -> exit 0 2026-10-16T10:34:06.128Z $ git checkout --quiet --detach 4fdaa0a700498fa5897e56aa78db069a0cc06d2c && git clean -fdq -e playwright-report -e .auth && git rev-parse HEAD (cwd /home/ubuntu/regression-runner/repos/dev/hotel-frontend-core) 2026-10-16T10:34:06.162Z 4fdaa0a700498fa5897e56aa78db069a0cc06d2c 2026-10-16T10:34:06.163Z -> exit 0 2026-10-16T10:34:06.163Z $ 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-16T10:34:06.683Z Lockfile is up to date, resolution step is skipped 2026-10-16T10:34:06.833Z Already up to date 2026-10-16T10:34:07.427Z . prepare$ husky 2026-10-16T10:34:07.484Z . prepare: Done 2026-10-16T10:34:07.485Z Done in 1.2s 2026-10-16T10:34:07.509Z -> exit 0 2026-10-16T10:34:07.510Z $ corepack pnpm@9.15.4 e2e:prepare-property -- --count 8 (cwd /home/ubuntu/regression-runner/repos/dev/hotel-backend-core) 2026-10-16T10:34:07.887Z > hotel-backend-core@ e2e:prepare-property /home/ubuntu/regression-runner/repos/dev/hotel-backend-core 2026-10-16T10:34:07.887Z > node scripts/e2e/prepare-property.mjs "--" "--count" "8" 2026-10-16T10:34:10.136Z ✓ E2E Hotel 01 (b4c88cd6-2371-4049-aaaf-2158fb4b6b9e): test user has access 2026-10-16T10:34:12.397Z ✓ E2E Hotel 02 (c7396f01-f0a3-4b84-91a8-ac8b5b32c065): test user has access 2026-10-16T10:34:14.878Z ✓ E2E Hotel 03 (6cbd78a1-33c7-4a8d-b4b1-beabfe263880): test user has access 2026-10-16T10:34:17.245Z ✓ E2E Hotel 04 (d4905069-731a-4384-9cea-14f9cf362595): test user has access 2026-10-16T10:34:19.517Z ✓ E2E Hotel 05 (7d049255-56e3-421f-a309-9ad5f8eb0e22): test user has access 2026-10-16T10:34:21.959Z ✓ E2E Hotel 06 (8e43c66d-f413-41a7-ac7a-4a413d4d2632): test user has access 2026-10-16T10:34:24.287Z ✓ E2E Hotel 07 (729211be-07c8-48a4-8fc5-f28d261617f9): test user has access 2026-10-16T10:34:26.582Z ✓ E2E Hotel 08 (4f50832d-5d39-480f-a913-230148668b50): test user has access 2026-10-16T10:34:26.582Z 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-16T10:34:26.603Z -> exit 0 2026-10-16T10:34:26.604Z $ corepack pnpm@9.15.4 e2e:sweep -- --hours 0 (cwd /home/ubuntu/regression-runner/repos/dev/hotel-backend-core) 2026-10-16T10:34:26.985Z > hotel-backend-core@ e2e:sweep /home/ubuntu/regression-runner/repos/dev/hotel-backend-core 2026-10-16T10:34:26.985Z > node scripts/e2e/sweep.mjs "--" "--hours" "0" 2026-10-16T10:34:44.080Z Released 0 reservation(s) older than 0 h across 8 hotel(s). 2026-10-16T10:34:44.099Z -> exit 0 2026-10-16T10:34:44.100Z === hotel-backend-core === 2026-10-16T10:34:44.100Z $ corepack pnpm@9.15.4 e2e (cwd /home/ubuntu/regression-runner/repos/dev/hotel-backend-core) 2026-10-16T10:34:44.480Z > hotel-backend-core@ e2e /home/ubuntu/regression-runner/repos/dev/hotel-backend-core 2026-10-16T10:34:44.480Z > playwright test -c e2e/api/playwright.config.ts 2026-10-16T10:34:54.199Z Running 52 tests using 4 workers 2026-10-16T10:34:54.201Z - 1 e2e/api/specs/channel-manager.spec.ts:221:8 › Channel manager · Channex incoming › TC-API-CM-CHX-2 a real Channex staging booking appears as an upcoming reservation 2026-10-16T10:34:55.369Z - 4 e2e/api/specs/channel-manager.spec.ts:227:9 › Channel manager · SU outgoing › TC-API-CM-SU-OUT-1 a booking on the hotel makes us push to SU 2026-10-16T10:34:55.370Z - 3 e2e/api/specs/channel-manager.spec.ts:134:7 › Channel manager · SU incoming › TC-API-CM-SU-1 an SU booking posted to our webhook appears as an upcoming reservation 2026-10-16T10:34:55.371Z - 2 e2e/api/specs/channel-manager.spec.ts:189:7 › Channel manager · Channex incoming › TC-API-CM-CHX-1 a Channex booking ping for the hotel is accepted and routed to its connection 2026-10-16T10:34:55.407Z - 5 e2e/api/specs/channel-manager.spec.ts:227:9 › Channel manager · CHANNEX outgoing › TC-API-CM-CHX-OUT-1 a booking on the hotel makes us push to CHANNEX 2026-10-16T10:34:55.707Z - 6 e2e/api/specs/channel-manager.spec.ts:172:7 › Channel manager · SU incoming › TC-API-CM-SU-2 an SU cancellation cancels that reservation 2026-10-16T10:34:56.102Z ✓ 9 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 (113ms) 2026-10-16T10:34:56.127Z ✓ 7 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 (214ms) 2026-10-16T10:34:56.154Z ✓ 11 e2e/api/specs/health.spec.ts:4:7 › Backend health › TC-API-HEALTH-1 health reports database and redis up @smoke (37ms) 2026-10-16T10:34:56.263Z ✓ 10 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 (265ms) 2026-10-16T10:35:04.659Z ✓ 14 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 (8.4s) 2026-10-16T10:35:04.673Z - 15 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-16T10:35:04.839Z ✓ 12 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 (8.7s) 2026-10-16T10:35:05.456Z ✓ 8 e2e/api/specs/checkin-id-per-adult.spec.ts:63:7 › One ID per adult › TC-API-IDPA-2 with the rule off, a stay with no IDs checks in as before (9.4s) 2026-10-16T10:35:05.740Z ✘ 13 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 (8.2s) 2026-10-16T10:35:06.745Z ✘ 17 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 (290ms) 2026-10-16T10:35:06.794Z ✘ 16 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 (358ms) 2026-10-16T10:35:09.053Z ✓ 18 e2e/api/specs/checkin-id-per-adult.spec.ts:87:7 › One ID per adult › TC-API-IDPA-3 short of IDs, the whole-booking check-in is refused with the counts and nothing changes (3.6s) 2026-10-16T10:35:10.298Z ✓ 19 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 (3.1s) 2026-10-16T10:35:11.477Z ✓ 21 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.7s) 2026-10-16T10:35:12.235Z ✓ 20 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.1s) 2026-10-16T10:35:13.228Z ✓ 22 e2e/api/specs/checkin-id-per-adult.spec.ts:115:7 › One ID per adult › TC-API-IDPA-4 with an ID for every adult, the stay checks in (4.2s) 2026-10-16T10:35:14.935Z ✓ 23 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 (3.0s) 2026-10-16T10:35:15.735Z ✓ 25 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.2s) 2026-10-16T10:35:15.823Z - 28 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-16T10:35:15.959Z ✘ 29 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 (113ms) 2026-10-16T10:35:16.156Z ✓ 26 e2e/api/specs/checkin-id-per-adult.spec.ts:136:7 › One ID per adult › TC-API-IDPA-5 a guest with no ID uploaded does not count (2.9s) 2026-10-16T10:35:16.768Z ✘ 24 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 (3.2s) 2026-10-16T10:35:17.126Z - 31 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-16T10:35:17.173Z ✓ 32 e2e/api/specs/revenue-ai-context.spec.ts:24:5 › TC-REV-AI-CTX-1 @smoke unauthenticated Revenue AI context is rejected (27ms) 2026-10-16T10:35:17.235Z - 33 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-16T10:35:17.297Z - 34 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-16T10:35:17.512Z ✘ 35 e2e/api/specs/revenue-guardrails.spec.ts:43:5 › TC-REV-GUARD-API-1 public quotes omit every plan outside final-price limits (197ms) 2026-10-16T10:35:17.784Z ✘ 36 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 (57ms) 2026-10-16T10:35:17.959Z ✘ 27 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 (2.1s) 2026-10-16T10:35:19.260Z ✓ 30 e2e/api/specs/checkin-id-per-adult.spec.ts:157:7 › One ID per adult › TC-API-IDPA-6 children are not asked for an ID (3.1s) 2026-10-16T10:35:23.729Z ✓ 37 e2e/api/specs/checkin-id-per-adult.spec.ts:175:7 › One ID per adult › TC-API-IDPA-7 the per-room (partial) check-in applies the rule too (4.5s) 2026-10-16T10:35:25.783Z ✓ 38 e2e/api/specs/checkin-id-per-adult.spec.ts:207:7 › One ID per adult › TC-API-IDPA-8 PATCH status with roomInstanceIds applies the rule too (2.0s) 2026-10-16T10:35:29.655Z ✓ 39 e2e/api/specs/checkin-id-per-adult.spec.ts:231:7 › One ID per adult › TC-API-IDPA-9 a partial check-in also counts the rooms already in the hotel (3.9s) 2026-10-16T10:35:34.840Z ✓ 40 e2e/api/specs/checkin-id-per-adult.spec.ts:267:7 › One ID per adult › TC-API-IDPA-10 a stay moved to another room mid-stay asks for its adults once (5.2s) 2026-10-16T10:35:41.284Z ✘ 41 e2e/api/specs/checkin-id-per-adult.spec.ts:331:7 › One ID per adult › TC-API-IDPA-11 a slot-wise stay (one room tonight, another tomorrow) asks for its adults once (270ms) 2026-10-16T10:35:44.096Z ✓ 42 e2e/api/specs/checkin-id-per-adult.spec.ts:370:7 › One ID per adult › TC-API-IDPA-12 rooms on the same nights still add up (2.7s) 2026-10-16T10:35:48.078Z ✓ 43 e2e/api/specs/checkin-id-per-adult.spec.ts:393:7 › One ID per adult › TC-API-IDPA-13 a no-show room's adults are not asked for (4.0s) 2026-10-16T10:35:52.035Z ✓ 44 e2e/api/specs/checkin-id-per-adult.spec.ts:425:7 › One ID per adult › TC-API-IDPA-14 a cancelled room's adults are not asked for (3.9s) 2026-10-16T10:35:55.529Z ✓ 45 e2e/api/specs/checkin-id-per-adult.spec.ts:457:7 › One ID per adult › TC-API-IDPA-15 the wizard's finalize refuses a stay short of IDs and writes nothing (3.5s) 2026-10-16T10:35:59.946Z ✓ 46 e2e/api/specs/checkin-id-per-adult.spec.ts:485:7 › One ID per adult › TC-API-IDPA-16 the wizard's finalize checks in a stay with an ID for every adult (4.4s) 2026-10-16T10:36:03.941Z ✓ 47 e2e/api/specs/checkin-id-per-adult.spec.ts:510:7 › One ID per adult › TC-API-IDPA-17 finalize on a booking that cannot be checked in says why, not 'add IDs' (4.0s) 2026-10-16T10:36:11.005Z ✓ 48 e2e/api/specs/checkin-id-per-adult.spec.ts:541:7 › One ID per adult › TC-API-IDPA-18 a returning guest picked from the guest directory brings their ID (7.1s) 2026-10-16T10:36:17.195Z ✓ 49 e2e/api/specs/checkin-id-per-adult.spec.ts:590:7 › One ID per adult › TC-API-IDPA-19 another hotel's guest never counts towards this stay's IDs (6.2s) 2026-10-16T10:36:22.479Z ✓ 50 e2e/api/specs/checkin-id-per-adult.spec.ts:637:7 › One ID per adult › TC-API-IDPA-20 a removed guest's ID no longer counts (5.3s) 2026-10-16T10:36:25.027Z ✓ 51 e2e/api/specs/checkin-id-per-adult.spec.ts:659:7 › One ID per adult › TC-API-IDPA-21 a guest with front and back images counts as one ID (2.5s) 2026-10-16T10:36:38.099Z ✓ 52 e2e/api/specs/checkin-id-per-adult.spec.ts:680:7 › One ID per adult › TC-API-IDPA-22 checking in the rest of a partly checked-in booking counts every room in the hotel (4.3s) 2026-10-16T10:36:38.119Z 1) e2e/api/specs/checkin-id-per-adult.spec.ts:331:7 › One ID per adult › TC-API-IDPA-11 a slot-wise stay (one room tonight, another tomorrow) asks for its adults once 2026-10-16T10:36:38.119Z Error: need 2 free rooms on the test hotel 2026-10-16T10:36:38.119Z expect(received).toBeGreaterThanOrEqual(expected) 2026-10-16T10:36:38.119Z Expected: >= 2 2026-10-16T10:36:38.119Z Received: 1 2026-10-16T10:36:38.119Z at ../support/checkin-id.ts:114 2026-10-16T10:36:38.119Z 112 | type?.availableRooms.length ?? 0, 2026-10-16T10:36:38.119Z 113 | `need ${n} free rooms on the test hotel`, 2026-10-16T10:36:38.119Z > 114 | ).toBeGreaterThanOrEqual(n); 2026-10-16T10:36:38.119Z | ^ 2026-10-16T10:36:38.119Z 115 | return { 2026-10-16T10:36:38.119Z 116 | roomTypeId: type.id, 2026-10-16T10:36:38.119Z 117 | basePrice: type.basePrice, 2026-10-16T10:36:38.119Z at freeRooms (/home/ubuntu/regression-runner/repos/dev/hotel-backend-core/e2e/api/support/checkin-id.ts:114:5) 2026-10-16T10:36:38.119Z at /home/ubuntu/regression-runner/repos/dev/hotel-backend-core/e2e/api/specs/checkin-id-per-adult.spec.ts:335:17 2026-10-16T10:36:38.119Z Error Context: test-results/checkin-id-per-adult-One-I-ae763-ow-asks-for-its-adults-once/error-context.md 2026-10-16T10:36:38.119Z Error Context: test-results/checkin-id-per-adult-One-I-ae763-ow-asks-for-its-adults-once/error-context.md 2026-10-16T10:36:38.119Z 2) 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-16T10:36:38.119Z Error: POST /reservations → 400: {"statusCode":400,"message":"One or more selected rooms are already blocked or occupied during the selected period.","timestamp":"2026-10-16T10:35:05.130Z","path":"/reservations","requestId":"e45d8cbf-70a9-4cbf-8fe3-ca974ff92aa6"} 2026-10-16T10:36:38.119Z expect(received).toBeTruthy() 2026-10-16T10:36:38.119Z Received: false 2026-10-16T10:36:38.119Z at ../support/unassign.ts:130 2026-10-16T10:36:38.119Z 128 | res.ok(), 2026-10-16T10:36:38.119Z 129 | `POST /reservations → ${res.status()}: ${await res.text()}`, 2026-10-16T10:36:38.119Z > 130 | ).toBeTruthy(); 2026-10-16T10:36:38.119Z | ^ 2026-10-16T10:36:38.119Z 131 | const checkInId = idOf(await res.json()); 2026-10-16T10:36:38.119Z 132 | expect(checkInId, "reservation id").toBeTruthy(); 2026-10-16T10:36:38.119Z 133 | registerForCleanup(checkInId!); 2026-10-16T10:36:38.119Z at createBooking (/home/ubuntu/regression-runner/repos/dev/hotel-backend-core/e2e/api/support/unassign.ts:130:5) 2026-10-16T10:36:38.119Z at /home/ubuntu/regression-runner/repos/dev/hotel-backend-core/e2e/api/specs/reservation-unassign.spec.ts:54:21 2026-10-16T10:36:38.119Z Error Context: test-results/reservation-unassign-Reser-548e0-om-201-and-an-ACTIVE-record/error-context.md 2026-10-16T10:36:38.119Z Error Context: test-results/reservation-unassign-Reser-548e0-om-201-and-an-ACTIVE-record/error-context.md 2026-10-16T10:36:38.119Z 3) 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-16T10:36:38.119Z Error: POST /reservations → 400: {"statusCode":400,"message":"One or more selected rooms are already blocked or occupied during the selected period.","timestamp":"2026-10-16T10:35:04.331Z","path":"/reservations","requestId":"3f80a2ee-2700-41da-a5f1-3524efffb91b"} 2026-10-16T10:36:38.119Z expect(received).toBeTruthy() 2026-10-16T10:36:38.119Z Received: false 2026-10-16T10:36:38.119Z at ../support/unassign.ts:130 2026-10-16T10:36:38.119Z 128 | res.ok(), 2026-10-16T10:36:38.119Z 129 | `POST /reservations → ${res.status()}: ${await res.text()}`, 2026-10-16T10:36:38.120Z > 130 | ).toBeTruthy(); 2026-10-16T10:36:38.120Z | ^ 2026-10-16T10:36:38.120Z 131 | const checkInId = idOf(await res.json()); 2026-10-16T10:36:38.120Z 132 | expect(checkInId, "reservation id").toBeTruthy(); 2026-10-16T10:36:38.120Z 133 | registerForCleanup(checkInId!); 2026-10-16T10:36:38.120Z at createBooking (/home/ubuntu/regression-runner/repos/dev/hotel-backend-core/e2e/api/support/unassign.ts:130:5) 2026-10-16T10:36:38.120Z at /home/ubuntu/regression-runner/repos/dev/hotel-backend-core/e2e/api/specs/reservation-unassign.spec.ts:105:22 2026-10-16T10:36:38.120Z Error Context: test-results/reservation-unassign-Reser-2eb59-of-the-listed-bookings-only/error-context.md 2026-10-16T10:36:38.120Z Error Context: test-results/reservation-unassign-Reser-2eb59-of-the-listed-bookings-only/error-context.md 2026-10-16T10:36:38.120Z 4) 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-16T10:36:38.120Z Error: POST /reservations → 400: {"statusCode":400,"message":"One or more selected rooms are already blocked or occupied during the selected period.","timestamp":"2026-10-16T10:35:05.038Z","path":"/reservations","requestId":"53a9606e-c14f-465a-a673-cbb0604c456c"} 2026-10-16T10:36:38.120Z expect(received).toBeTruthy() 2026-10-16T10:36:38.120Z Received: false 2026-10-16T10:36:38.120Z at ../support/unassign.ts:130 2026-10-16T10:36:38.120Z 128 | res.ok(), 2026-10-16T10:36:38.120Z 129 | `POST /reservations → ${res.status()}: ${await res.text()}`, 2026-10-16T10:36:38.120Z > 130 | ).toBeTruthy(); 2026-10-16T10:36:38.120Z | ^ 2026-10-16T10:36:38.120Z 131 | const checkInId = idOf(await res.json()); 2026-10-16T10:36:38.120Z 132 | expect(checkInId, "reservation id").toBeTruthy(); 2026-10-16T10:36:38.120Z 133 | registerForCleanup(checkInId!); 2026-10-16T10:36:38.120Z at createBooking (/home/ubuntu/regression-runner/repos/dev/hotel-backend-core/e2e/api/support/unassign.ts:130:5) 2026-10-16T10:36:38.120Z at /home/ubuntu/regression-runner/repos/dev/hotel-backend-core/e2e/api/specs/reservation-unassign.spec.ts:200:21 2026-10-16T10:36:38.120Z Error Context: test-results/reservation-unassign-Reser-00246-ve-closes-the-record-PLACED/error-context.md 2026-10-16T10:36:38.120Z Error Context: test-results/reservation-unassign-Reser-00246-ve-closes-the-record-PLACED/error-context.md 2026-10-16T10:36:38.120Z 5) 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-16T10:36:38.120Z Error: expect(received).toBe(expected) // Object.is equality 2026-10-16T10:36:38.120Z Expected: true 2026-10-16T10:36:38.120Z Received: false 2026-10-16T10:36:38.120Z 275 | }); 2026-10-16T10:36:38.120Z 276 | const after = await availabilityOf(api, booking); 2026-10-16T10:36:38.120Z > 277 | expect(after.includesRoom).toBe(true); 2026-10-16T10:36:38.120Z | ^ 2026-10-16T10:36:38.120Z 278 | expect(after.count).toBe(before.count + 1); 2026-10-16T10:36:38.120Z 279 | }); 2026-10-16T10:36:38.120Z 280 | }); 2026-10-16T10:36:38.120Z at /home/ubuntu/regression-runner/repos/dev/hotel-backend-core/e2e/api/specs/reservation-unassign.spec.ts:277:32 2026-10-16T10:36:38.121Z Error Context: test-results/reservation-unassign-Reser-c9eb6-availability-goes-up-by-one/error-context.md 2026-10-16T10:36:38.121Z Error Context: test-results/reservation-unassign-Reser-c9eb6-availability-goes-up-by-one/error-context.md 2026-10-16T10:36:38.121Z 6) e2e/api/specs/revenue-ai-actions.spec.ts:176:7 › Revenue AI action facade › TC-API-REV-ACTION-2 settings revision changes reject a stale preview 2026-10-16T10:36:38.121Z Error: AI settings → 403 2026-10-16T10:36:38.121Z expect(received).toBeTruthy() 2026-10-16T10:36:38.121Z Received: false 2026-10-16T10:36:38.121Z 182 | settingsRes.ok(), 2026-10-16T10:36:38.121Z 183 | `AI settings → ${settingsRes.status()}`, 2026-10-16T10:36:38.121Z > 184 | ).toBeTruthy(); 2026-10-16T10:36:38.121Z | ^ 2026-10-16T10:36:38.121Z 185 | const original = unwrap(await settingsRes.json()) as AnyRecord; 2026-10-16T10:36:38.121Z 186 | const { preview } = await previewRate(api, hotel.id); 2026-10-16T10:36:38.121Z 187 | const objective = (original.objective ?? {}) as AnyRecord; 2026-10-16T10:36:38.121Z at /home/ubuntu/regression-runner/repos/dev/hotel-backend-core/e2e/api/specs/revenue-ai-actions.spec.ts:184:7 2026-10-16T10:36:38.121Z Error Context: test-results/revenue-ai-actions-Revenue-aaa61-nges-reject-a-stale-preview/error-context.md 2026-10-16T10:36:38.121Z 7) e2e/api/specs/revenue-ai-actions.spec.ts:240:7 › Revenue AI action facade › TC-API-REV-REPORT-1 forged and cross-property source jobs are rejected before enqueue 2026-10-16T10:36:38.121Z Error: expect(received).toBe(expected) // Object.is equality 2026-10-16T10:36:38.121Z Expected: 400 2026-10-16T10:36:38.121Z Received: 403 2026-10-16T10:36:38.121Z 250 | }, 2026-10-16T10:36:38.121Z 251 | }); 2026-10-16T10:36:38.121Z > 252 | expect(foreignSourceRes.status()).toBe(400); 2026-10-16T10:36:38.121Z | ^ 2026-10-16T10:36:38.121Z 253 | expect(await foreignSourceRes.text()).toMatch(/not in this property/i); 2026-10-16T10:36:38.121Z 254 | 2026-10-16T10:36:38.121Z 255 | const missingSourceRes = await api.post(reportRunPath, { 2026-10-16T10:36:38.122Z at /home/ubuntu/regression-runner/repos/dev/hotel-backend-core/e2e/api/specs/revenue-ai-actions.spec.ts:252:39 2026-10-16T10:36:38.122Z Error Context: test-results/revenue-ai-actions-Revenue-78190-are-rejected-before-enqueue/error-context.md 2026-10-16T10:36:38.122Z 8) e2e/api/specs/revenue-guardrails.spec.ts:43:5 › TC-REV-GUARD-API-1 public quotes omit every plan outside final-price limits 2026-10-16T10:36:38.122Z Error: GET public property → 404: {"statusCode":404,"message":"Property not found for booking engine","timestamp":"2026-10-16T10:35:17.497Z","path":"/booking-engine/public/property/c7396f01-f0a3-4b84-91a8-ac8b5b32c065?adults=2&children=0","requestId":"818e6070-4c08-49ba-9f59-a04f7517736f"} 2026-10-16T10:36:38.122Z expect(received).toBeTruthy() 2026-10-16T10:36:38.122Z Received: false 2026-10-16T10:36:38.122Z 37 | response.ok(), 2026-10-16T10:36:38.122Z 38 | `${method} → ${response.status()}: ${await response.text()}`, 2026-10-16T10:36:38.122Z > 39 | ).toBeTruthy(); 2026-10-16T10:36:38.122Z | ^ 2026-10-16T10:36:38.122Z 40 | return response.json() as Promise; 2026-10-16T10:36:38.122Z 41 | } 2026-10-16T10:36:38.122Z 42 | 2026-10-16T10:36:38.122Z at successfulJson (/home/ubuntu/regression-runner/repos/dev/hotel-backend-core/e2e/api/specs/revenue-guardrails.spec.ts:39:5) 2026-10-16T10:36:38.122Z at /home/ubuntu/regression-runner/repos/dev/hotel-backend-core/e2e/api/specs/revenue-guardrails.spec.ts:51:24 2026-10-16T10:36:38.122Z Error Context: test-results/revenue-guardrails-TC-REV--ac7c6--outside-final-price-limits/error-context.md 2026-10-16T10:36:38.122Z 8 failed 2026-10-16T10:36:38.122Z e2e/api/specs/checkin-id-per-adult.spec.ts:331:7 › One ID per adult › TC-API-IDPA-11 a slot-wise stay (one room tonight, another tomorrow) asks for its adults once 2026-10-16T10:36:38.122Z 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-16T10:36:38.122Z 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-16T10:36:38.122Z 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-16T10:36:38.122Z 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-16T10:36:38.122Z 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-16T10:36:38.122Z 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-16T10:36:38.122Z 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-16T10:36:38.122Z 11 skipped 2026-10-16T10:36:38.122Z 33 passed (1.9m) 2026-10-16T10:36:38.217Z  ELIFECYCLE  Command failed with exit code 1. 2026-10-16T10:36:38.240Z -> exit 1 2026-10-16T10:36:38.246Z === hotel-frontend-core === 2026-10-16T10:36:38.246Z $ corepack pnpm@9.15.4 e2e (cwd /home/ubuntu/regression-runner/repos/dev/hotel-frontend-core) 2026-10-16T10:36:38.631Z > hotel-frontend-core@0.1.0 e2e /home/ubuntu/regression-runner/repos/dev/hotel-frontend-core 2026-10-16T10:36:38.631Z > playwright test 2026-10-16T10:36:59.146Z Running 277 tests using 4 workers 2026-10-16T10:37:02.913Z ✓ 3 [chromium] › e2e/specs/prd-2026-005-bank-accounts.spec.ts:29:6 › PRD-2026-005 — Bank Accounts › TC-PRD-010 list view renders the Add button and existing rows (2.9s) 2026-10-16T10:37:03.921Z ✓ 1 [chromium] › e2e/specs/checkin-id-per-adult.spec.ts:57:6 › One ID per adult — check-in form › TC-IDPA-UI-1 the Advanced settings switch saves the rule for the hotel (3.3s) 2026-10-16T10:37:04.067Z ✓ 2 [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 (4.2s) 2026-10-16T10:37:05.772Z ✓ 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 (2.8s) 2026-10-16T10:37:07.682Z ✓ 7 [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 (3.6s) 2026-10-16T10:37:09.316Z ✓ 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.5s) 2026-10-16T10:37:09.401Z ✘ 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) (1.7s) 2026-10-16T10:37:09.401Z - 11 [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-16T10:37:10.377Z ✓ 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.7s) 2026-10-16T10:37:11.394Z ✓ 13 [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 (991ms) 2026-10-16T10:37:12.891Z ✓ 10 [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-16T10:37:14.263Z ✓ 12 [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.7s) 2026-10-16T10:37:15.725Z ✓ 15 [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.8s) 2026-10-16T10:37:16.132Z ✓ 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.7s) 2026-10-16T10:37:21.323Z ✓ 17 [chromium] › e2e/specs/prd-2026-005-bank-accounts.spec.ts:108:6 › PRD-2026-005 — Bank Accounts › TC-PRD-016 delete removes row (5.6s) 2026-10-16T10:37:21.758Z ✓ 16 [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.5s) 2026-10-16T10:37:23.304Z ✓ 18 [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 (7.1s) 2026-10-16T10:37:27.307Z ✓ 6 [chromium] › e2e/specs/checkin-id-per-adult.spec.ts:74:6 › One ID per adult — check-in form › TC-IDPA-UI-2 Check-in short of IDs shows the counts and checks nothing in (23.4s) 2026-10-16T10:37:29.260Z ✓ 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.5s) 2026-10-16T10:37:29.324Z ✓ 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 (8.0s) 2026-10-16T10:37:36.709Z ✓ 24 [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 (7.4s) 2026-10-16T10:37:37.163Z ✓ 23 [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.9s) 2026-10-16T10:37:40.684Z ✓ 25 [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.9s) 2026-10-16T10:37:43.444Z ✓ 26 [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.8s) 2026-10-16T10:37:47.288Z ✓ 28 [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 (3.8s) 2026-10-16T10:37:47.627Z ✓ 27 [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.4s) 2026-10-16T10:37:48.611Z ✓ 22 [chromium] › e2e/specs/checkin-id-per-adult.spec.ts:93: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 (21.3s) 2026-10-16T10:37:51.761Z ✓ 29 [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.4s) 2026-10-16T10:37:55.071Z ✓ 30 [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 (7.4s) 2026-10-16T10:37:57.593Z ✓ 32 [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 (5.8s) 2026-10-16T10:38:03.598Z ✓ 33 [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 (8.0s) 2026-10-16T10:38:04.418Z ✓ 34 [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 (6.6s) 2026-10-16T10:38:11.639Z ✓ 35 [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.0s) 2026-10-16T10:38:12.035Z ✓ 36 [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.1s) 2026-10-16T10:38:14.093Z ✓ 31 [chromium] › e2e/specs/checkin-id-per-adult.spec.ts:116: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 (25.5s) 2026-10-16T10:38:20.687Z ✓ 37 [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." (8.5s) 2026-10-16T10:38:23.494Z ✓ 38 [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 (11.4s) 2026-10-16T10:38:26.393Z ✓ 41 [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 (2.2s) 2026-10-16T10:38:28.949Z ✓ 40 [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.2s) 2026-10-16T10:38:30.297Z ✓ 42 [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.4s) 2026-10-16T10:38:31.224Z ✓ 39 [chromium] › e2e/specs/checkin-id-per-adult.spec.ts:146:6 › One ID per adult — check-in form › TC-IDPA-UI-5 a partial check-in of picked rooms is checked too (17.1s) 2026-10-16T10:38:32.942Z ✓ 44 [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.1s) 2026-10-16T10:38:33.091Z ✓ 43 [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 (3.6s) 2026-10-16T10:38:36.060Z ✘ 47 [chromium] › e2e/specs/revenue-guardrail-removal.spec.ts:23:5 › TC-REV-GUARD-1 clearing both configured limits removes the guardrail (2.7s) 2026-10-16T10:38:41.985Z ✓ 48 [chromium] › e2e/specs/revenue-manager.spec.ts:6:5 › TC-RM-1 @smoke protects Revenue Manager and retains the selected workspace tab (4.8s) 2026-10-16T10:38:43.852Z - 49 [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-16T10:38:46.460Z ✓ 50 [chromium] › e2e/specs/smoke-core-pages.spec.ts:23:7 › Core pages open › TC-SMOKE-001 Room View opens on the test hotel @smoke (2.6s) 2026-10-16T10:38:48.187Z ✓ 46 [chromium] › e2e/specs/reservation-unassign.spec.ts:8:5 › TC-UNASSIGN-MONEY-1 frees and returns a reservation room without changing its money (15.2s) 2026-10-16T10:38:49.151Z ✓ 51 [chromium] › e2e/specs/smoke-core-pages.spec.ts:23:7 › Core pages open › TC-SMOKE-002 Stay View opens on the test hotel @smoke (2.7s) 2026-10-16T10:38:50.550Z ✓ 52 [chromium] › e2e/specs/smoke-core-pages.spec.ts:23:7 › Core pages open › TC-SMOKE-003 Reservations opens on the test hotel @smoke (2.3s) 2026-10-16T10:38:51.749Z ✓ 53 [chromium] › e2e/specs/smoke-core-pages.spec.ts:23:7 › Core pages open › TC-SMOKE-004 Guests opens on the test hotel @smoke (2.6s) 2026-10-16T10:38:52.841Z ✓ 54 [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.3s) 2026-10-16T10:38:54.187Z ✓ 55 [chromium] › e2e/specs/smoke-core-pages.spec.ts:23:7 › Core pages open › TC-SMOKE-006 Invoices opens on the test hotel @smoke (2.4s) 2026-10-16T10:38:54.582Z ✓ 45 [chromium] › e2e/specs/checkin-id-per-adult.spec.ts:164:6 › One ID per adult — check-in form › TC-IDPA-UI-6 with the rule off, Check-in is not stopped for IDs (23.3s) 2026-10-16T10:38:55.581Z ✓ 56 [chromium] › e2e/specs/smoke-core-pages.spec.ts:23:7 › Core pages open › TC-SMOKE-007 Ledger opens on the test hotel @smoke (2.7s) 2026-10-16T10:38:56.851Z ✓ 57 [chromium] › e2e/specs/smoke-core-pages.spec.ts:23:7 › Core pages open › TC-SMOKE-008 Reports opens on the test hotel @smoke (2.6s) 2026-10-16T10:39:02.636Z ✘ 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-16T10:39:02.637Z - 61 [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-16T10:39:06.213Z ✓ 59 [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 (9.2s) 2026-10-16T10:39:06.648Z ✓ 60 [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 (8.9s) 2026-10-16T10:39:07.008Z ✓ 62 [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] (2.2s) 2026-10-16T10:39:09.755Z ✓ 64 [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.7s) 2026-10-16T10:39:10.117Z ✓ 63 [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.4s) 2026-10-16T10:39:12.284Z ✓ 66 [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-16T10:39:12.549Z ✓ 65 [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.6s) 2026-10-16T10:39:13.162Z ✓ 67 [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-16T10:39:14.026Z ✓ 68 [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-16T10:39:14.068Z ✓ 71 [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-16T10:39:14.652Z ✓ 58 [chromium] › e2e/specs/checkin-id-per-adult.spec.ts:181: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 (20.0s) 2026-10-16T10:39:16.694Z ✘ 72 [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.6s) 2026-10-16T10:39:17.037Z ✓ 70 [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"] (3.9s) 2026-10-16T10:39:17.449Z ✓ 69 [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.9s) 2026-10-16T10:39:19.236Z ✓ 74 [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.5s) 2026-10-16T10:39:19.719Z ✓ 77 [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] (464ms) 2026-10-16T10:39:19.792Z - 78 [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-16T10:39:21.306Z ✓ 75 [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] (4.3s) 2026-10-16T10:39:22.001Z ✓ 76 [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] (4.5s) 2026-10-16T10:39:22.713Z ✓ 79 [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] (2.9s) 2026-10-16T10:39:24.497Z ✓ 80 [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.2s) 2026-10-16T10:39:27.441Z ✓ 82 [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.7s) 2026-10-16T10:39:28.107Z ✓ 83 [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] (3.6s) 2026-10-16T10:39:32.537Z ✓ 81 [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] (10.5s) 2026-10-16T10:39:33.193Z ✓ 85 [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.1s) 2026-10-16T10:39:33.546Z ✓ 84 [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] (6.0s) 2026-10-16T10:39:36.743Z ✓ 87 [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.5s) 2026-10-16T10:39:39.954Z ✓ 88 [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] (6.4s) 2026-10-16T10:39:40.006Z ✓ 89 [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] (3.3s) 2026-10-16T10:39:40.249Z ✓ 86 [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-16T10:39:47.700Z ✓ 91 [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] (7.7s) 2026-10-16T10:39:51.975Z ✓ 90 [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] (12.0s) 2026-10-16T10:39:52.688Z ✓ 73 [chromium] › e2e/specs/checkin-id-per-adult.spec.ts:207: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 (38.0s) 2026-10-16T10:39:56.662Z ✓ 92 [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] (16.4s) 2026-10-16T10:39:59.108Z ✓ 93 [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] (11.4s) 2026-10-16T10:40:03.913Z ✓ 97 [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] (4.8s) 2026-10-16T10:40:07.302Z ✓ 96 [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] (10.6s) 2026-10-16T10:40:09.921Z ✓ 98 [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] (6.0s) 2026-10-16T10:40:12.172Z ✓ 100 [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-16T10:40:13.401Z ✓ 95 [chromium] › e2e/specs/checkin-id-per-adult.spec.ts:238:6 › One ID per adult — check-in form › TC-IDPA-UI-9 a cancelled room's adults are not asked for (20.7s) 2026-10-16T10:40:15.526Z ✓ 101 [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.3s) 2026-10-16T10:40:16.221Z ✓ 99 [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-16T10:40:21.803Z ✘ 103 [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] (6.3s) 2026-10-16T10:40:23.888Z ✓ 104 [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] (7.7s) 2026-10-16T10:40:24.378Z ✓ 105 [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] (2.6s) 2026-10-16T10:40:24.508Z ✘ 102 [chromium] › e2e/specs/checkin-id-per-adult.spec.ts:254: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 (1.3s) 2026-10-16T10:40:26.569Z ✓ 94 [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] (34.6s) 2026-10-16T10:40:26.587Z - 109 [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-16T10:40:27.165Z ✓ 107 [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.8s) 2026-10-16T10:40:27.192Z ✓ 106 [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] (3.3s) 2026-10-16T10:40:29.534Z ✓ 108 [chromium] › e2e/specs/checkin-id-per-adult.spec.ts:279:6 › One ID per adult — check-in form › TC-IDPA-UI-11 the setting stays as saved after a reload (3.7s) 2026-10-16T10:40:30.300Z ✓ 110 [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] (3.1s) 2026-10-16T10:40:31.292Z ✓ 111 [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.1s) 2026-10-16T10:40:31.851Z ✓ 112 [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.6s) 2026-10-16T10:40:36.200Z ✓ 114 [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] (5.9s) 2026-10-16T10:40:40.256Z ✓ 117 [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] (4.0s) 2026-10-16T10:40:40.332Z ✓ 116 [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] (8.5s) 2026-10-16T10:40:41.014Z ✓ 115 [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] (9.6s) 2026-10-16T10:40:42.070Z ✓ 118 [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.8s) 2026-10-16T10:40:42.315Z ✓ 113 [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] (11.2s) 2026-10-16T10:40:46.382Z ✓ 119 [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] (6.0s) 2026-10-16T10:40:48.279Z ✓ 121 [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] (6.2s) 2026-10-16T10:40:48.442Z ✓ 122 [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] (6.1s) 2026-10-16T10:40:48.961Z ✓ 120 [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] (7.9s) 2026-10-16T10:40:49.378Z ✓ 123 [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] (3.0s) 2026-10-16T10:40:49.410Z ✓ 127 [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] (19ms) 2026-10-16T10:40:52.264Z ✓ 126 [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.3s) 2026-10-16T10:40:53.677Z ✓ 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.2s) 2026-10-16T10:40:55.868Z ✓ 128 [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] (6.4s) 2026-10-16T10:40:56.078Z ✓ 129 [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] (3.8s) 2026-10-16T10:40:57.085Z ✓ 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] (3.4s) 2026-10-16T10:40:58.850Z ✘ 124 [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.3s) 2026-10-16T10:40:59.616Z ✓ 132 [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] (3.5s) 2026-10-16T10:40:59.639Z ✓ 131 [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] (3.8s) 2026-10-16T10:40:59.961Z ✓ 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.9s) 2026-10-16T10:41:03.877Z ✓ 134 [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.6s) 2026-10-16T10:41:04.324Z ✓ 135 [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] (4.7s) 2026-10-16T10:41:04.720Z ✘ 136 [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] (5.1s) 2026-10-16T10:41:06.004Z ✓ 137 [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] (6.0s) 2026-10-16T10:41:08.691Z ✓ 139 [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] (4.4s) 2026-10-16T10:41:09.558Z ✓ 138 [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] (5.7s) 2026-10-16T10:41:12.365Z ✓ 141 [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] (6.3s) 2026-10-16T10:41:13.463Z ✓ 143 [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] (3.9s) 2026-10-16T10:41:15.656Z ✘ 142 [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] (6.9s) 2026-10-16T10:41:17.337Z ✓ 145 [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-16T10:41:18.210Z ✓ 140 [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] (13.5s) 2026-10-16T10:41:18.276Z - 148 [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-16T10:41:18.276Z - 149 [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-16T10:41:18.276Z - 150 [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-16T10:41:19.092Z ✓ 144 [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] (6.7s) 2026-10-16T10:41:20.784Z ✓ 146 [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] (5.1s) 2026-10-16T10:41:23.413Z ✓ 147 [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] (6.1s) 2026-10-16T10:41:24.544Z ✓ 151 [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] (6.3s) 2026-10-16T10:41:29.105Z ✓ 153 [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] (8.3s) 2026-10-16T10:41:30.319Z ✓ 152 [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] (11.2s) 2026-10-16T10:41:33.326Z ✓ 154 [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] (9.8s) 2026-10-16T10:41:33.809Z ✓ 156 [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] (4.7s) 2026-10-16T10:41:35.517Z ✓ 155 [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] (10.9s) 2026-10-16T10:41:35.766Z ✓ 157 [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] (5.4s) 2026-10-16T10:41:35.891Z ✓ 158 [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] (2.6s) 2026-10-16T10:41:36.294Z ✓ 160 [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] (206ms) 2026-10-16T10:41:36.329Z ✓ 163 [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] (23ms) 2026-10-16T10:41:36.395Z ✓ 164 [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] (48ms) 2026-10-16T10:41:38.851Z ✓ 162 [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.9s) 2026-10-16T10:41:42.343Z ✓ 165 [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] (5.9s) 2026-10-16T10:41:43.620Z ✓ 161 [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] (7.8s) 2026-10-16T10:41:49.615Z ✓ 168 [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] (6.0s) 2026-10-16T10:41:50.791Z ✓ 167 [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] (8.4s) 2026-10-16T10:41:57.134Z ✓ 170 [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] (6.3s) 2026-10-16T10:41:58.736Z ✓ 169 [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] (9.1s) 2026-10-16T10:42:03.742Z ✓ 171 [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.6s) 2026-10-16T10:42:04.511Z ✓ 172 [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] (5.7s) 2026-10-16T10:42:11.586Z ✓ 173 [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] (7.8s) 2026-10-16T10:42:11.859Z ✓ 174 [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] (6.7s) 2026-10-16T10:42:15.605Z ✓ 159 [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] (8.2s) 2026-10-16T10:42:16.745Z ✓ 175 [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] (5.1s) 2026-10-16T10:42:18.014Z ✓ 176 [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] (6.1s) 2026-10-16T10:42:20.968Z ✓ 177 [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.7s) 2026-10-16T10:42:23.529Z ✓ 178 [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] (6.8s) 2026-10-16T10:42:23.529Z - 181 [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-16T10:42:23.529Z - 182 [arm] › e2e/specs/prd-2026-007-rbac-ux.spec.ts:213:6 › TC-ARM-311 restricted role: cancel → 403 [S-09] 2026-10-16T10:42:23.529Z - 183 [arm] › e2e/specs/prd-2026-007-rbac-ux.spec.ts:214:6 › TC-ARM-312 restricted role: no-show → 403 [S-09] 2026-10-16T10:42:23.530Z - 184 [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-16T10:42:23.530Z - 185 [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-16T10:42:23.916Z ✓ 180 [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] (2.9s) 2026-10-16T10:42:28.922Z ✓ 187 [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] (5.0s) 2026-10-16T10:42:31.261Z - 186 [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-16T10:42:32.187Z ✓ 188 [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] (3.3s) 2026-10-16T10:42:32.427Z ✓ 179 [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] (14.4s) 2026-10-16T10:42:35.102Z ✓ 190 [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] (2.9s) 2026-10-16T10:42:36.031Z ✓ 189 [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] (4.3s) 2026-10-16T10:42:38.344Z ✓ 191 [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] (5.9s) 2026-10-16T10:42:38.651Z ✓ 192 [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] (3.5s) 2026-10-16T10:42:40.585Z ✓ 193 [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] (4.5s) 2026-10-16T10:42:42.452Z ✓ 195 [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] (3.8s) 2026-10-16T10:42:43.979Z ✓ 196 [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.4s) 2026-10-16T10:42:44.813Z ✓ 194 [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] (6.5s) 2026-10-16T10:42:45.884Z ✓ 197 [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] (3.4s) 2026-10-16T10:42:47.136Z ✓ 166 [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.1m) 2026-10-16T10:42:47.691Z ✓ 198 [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.7s) 2026-10-16T10:42:50.749Z ✓ 200 [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.9s) 2026-10-16T10:42:51.461Z ✓ 202 [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] (3.7s) 2026-10-16T10:42:51.547Z ✓ 199 [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] (6.7s) 2026-10-16T10:42:53.638Z ✓ 203 [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.9s) 2026-10-16T10:42:56.306Z ✓ 204 [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] (4.8s) 2026-10-16T10:42:56.335Z ✓ 205 [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.8s) 2026-10-16T10:42:57.335Z ✘ 206 [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] (3.7s) 2026-10-16T10:43:01.412Z ✓ 208 [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.1s) 2026-10-16T10:43:02.589Z ✓ 207 [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] (6.3s) 2026-10-16T10:43:04.373Z ✓ 209 [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] (7.0s) 2026-10-16T10:43:07.273Z ✓ 211 [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] (4.7s) 2026-10-16T10:43:07.544Z ✓ 210 [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] (6.1s) 2026-10-16T10:43:11.484Z ✓ 213 [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] (4.2s) 2026-10-16T10:43:11.667Z ✓ 212 [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] (7.3s) 2026-10-16T10:43:14.446Z ✓ 214 [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] (6.9s) 2026-10-16T10:43:14.995Z ✓ 216 [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.3s) 2026-10-16T10:43:15.992Z ✓ 215 [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-16T10:43:19.269Z ✓ 218 [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] (4.3s) 2026-10-16T10:43:20.037Z ✓ 219 [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] (4.0s) 2026-10-16T10:43:22.249Z ✓ 217 [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] (7.8s) 2026-10-16T10:43:24.892Z ✓ 221 [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] (4.8s) 2026-10-16T10:43:27.461Z ✓ 222 [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] (5.2s) 2026-10-16T10:43:28.579Z ✓ 223 [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.7s) 2026-10-16T10:43:32.126Z ✓ 225 [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-16T10:43:32.278Z ✓ 224 [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] (4.8s) 2026-10-16T10:43:35.287Z ✘ 220 [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] (16.0s) 2026-10-16T10:43:35.893Z ✓ 226 [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.8s) 2026-10-16T10:43:38.081Z ✓ 227 [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] (5.8s) 2026-10-16T10:43:39.506Z ✓ 228 [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] (4.2s) 2026-10-16T10:43:40.871Z ✓ 229 [arm] › e2e/specs/prd-2026-007-status-aggregation.spec.ts:143:7 › PRD-2026-007 — CR-2 status aggregation (API) › TC-ARM-016 CANCELLED + NO_SHOW (mixed terminals only) → VARIED_STATUS [CR-2 else/S-07] (5.0s) 2026-10-16T10:43:44.775Z ✓ 230 [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-16T10:43:45.666Z ✓ 232 [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.8s) 2026-10-16T10:43:50.642Z ✓ 233 [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.9s) 2026-10-16T10:43:50.998Z ✓ 234 [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] (5.3s) 2026-10-16T10:43:53.740Z ✓ 201 [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.1m) 2026-10-16T10:43:57.940Z ✓ 236 [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] (6.9s) 2026-10-16T10:43:58.274Z ✓ 237 [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] (4.5s) 2026-10-16T10:43:59.716Z ✓ 231 [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] (772ms) 2026-10-16T10:44:00.834Z ✓ 235 [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] (10.2s) 2026-10-16T10:44:01.937Z ✓ 238 [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] (4.0s) 2026-10-16T10:44:08.231Z ✓ 242 [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] (6.3s) 2026-10-16T10:44:08.237Z ✓ 240 [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] (7.8s) 2026-10-16T10:44:08.878Z ✓ 241 [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] (8.0s) 2026-10-16T10:44:11.824Z ✓ 239 [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] (3.4s) 2026-10-16T10:44:12.912Z ✓ 243 [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.7s) 2026-10-16T10:44:15.049Z ✓ 244 [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.8s) 2026-10-16T10:44:15.913Z ✓ 245 [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] (7.0s) 2026-10-16T10:44:16.252Z ✓ 246 [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] (3.3s) 2026-10-16T10:44:19.649Z ✓ 249 [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.4s) 2026-10-16T10:44:20.386Z ✓ 247 [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] (5.3s) 2026-10-16T10:44:22.049Z ✓ 248 [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-16T10:44:25.917Z ✓ 250 [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] (6.2s) 2026-10-16T10:44:25.931Z ✓ 251 [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] (5.5s) 2026-10-16T10:44:30.280Z ✓ 253 [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] (4.3s) 2026-10-16T10:44:31.798Z ✓ 254 [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] (5.9s) 2026-10-16T10:44:34.836Z ✓ 255 [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.5s) 2026-10-16T10:44:37.449Z ✓ 256 [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] (5.6s) 2026-10-16T10:44:39.074Z ✓ 257 [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.2s) 2026-10-16T10:44:42.908Z ✓ 259 [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] (3.8s) 2026-10-16T10:44:44.638Z ✓ 258 [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] (7.2s) 2026-10-16T10:44:47.185Z ✓ 260 [arm] › e2e/specs/prd-2026-007-status-aggregation.spec.ts:151:7 › PRD-2026-007 — CR-2 status aggregation (API) › TC-ARM-030 cannot CHECK_IN a NO_SHOW room (late guest ⇒ new reservation) [S-22] (4.3s) 2026-10-16T10:44:51.687Z ✓ 261 [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.0s) 2026-10-16T10:44:51.890Z ✓ 262 [arm] › e2e/specs/prd-2026-007-status-aggregation.spec.ts:151:7 › PRD-2026-007 — CR-2 status aggregation (API) › TC-ARM-031 cannot CHECK_IN an already CHECKED_OUT room [CR-3 terminal] (4.7s) 2026-10-16T10:44:57.286Z ✓ 264 [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] (5.4s) 2026-10-16T10:44:58.165Z ✓ 252 [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] (6.7s) 2026-10-16T10:45:00.302Z ✓ 265 [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.0s) 2026-10-16T10:45:03.718Z ✓ 266 [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.4s) 2026-10-16T10:45:08.688Z ✘ 263 [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] (17.0s) 2026-10-16T10:45:09.448Z ✓ 267 [arm] › e2e/specs/prd-2026-007-status-aggregation.spec.ts:193:6 › PRD-2026-007 — CR-2 status aggregation (API) › TC-ARM-035 check-in with a foreign roomInstanceId → 4xx, foreign booking untouched (5.7s) 2026-10-16T10:45:14.730Z ✓ 269 [arm] › e2e/specs/prd-2026-007-status-aggregation.spec.ts:202:6 › PRD-2026-007 — CR-2 status aggregation (API) › TC-ARM-036 parent status persists correctly after EVERY step of a staggered journey [CR-2] (5.3s) 2026-10-16T10:45:21.734Z ✘ 268 [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.0s) 2026-10-16T10:45:27.353Z ✓ 270 [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] (5.6s) 2026-10-16T10:45:32.288Z ✓ 271 [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] (4.9s) 2026-10-16T10:45:38.847Z ✓ 272 [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] (6.5s) 2026-10-16T10:45:41.562Z ✓ 273 [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.7s) 2026-10-16T10:45:47.299Z ✓ 274 [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] (5.7s) 2026-10-16T10:45:49.945Z ✓ 275 [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.6s) 2026-10-16T10:45:52.918Z ✓ 276 [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.0s) 2026-10-16T10:46:10.374Z ✓ 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] (4.7s) 2026-10-16T10:46:10.569Z 1) [chromium] › e2e/specs/checkin-id-per-adult.spec.ts:254: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-16T10:46:10.570Z Error: need 2 free rooms on the test hotel 2026-10-16T10:46:10.570Z expect(received).toBeGreaterThanOrEqual(expected) 2026-10-16T10:46:10.570Z Expected: >= 2 2026-10-16T10:46:10.570Z Received: 1 2026-10-16T10:46:10.570Z at ../fixtures/id-per-adult.ts:64 2026-10-16T10:46:10.570Z 62 | const types = Array.isArray(body) ? body : body.data; 2026-10-16T10:46:10.570Z 63 | const type = [...types].sort((a, b) => b.availableRooms.length - a.availableRooms.length)[0]; 2026-10-16T10:46:10.570Z > 64 | expect(type?.availableRooms.length ?? 0, `need ${n} free rooms on the test hotel`).toBeGreaterThanOrEqual(n); 2026-10-16T10:46:10.570Z | ^ 2026-10-16T10:46:10.570Z 65 | return { roomTypeId: type.id, basePrice: type.basePrice, rooms: type.availableRooms.slice(0, n) }; 2026-10-16T10:46:10.570Z 66 | } 2026-10-16T10:46:10.570Z 67 | 2026-10-16T10:46:10.570Z at freeRooms (/home/ubuntu/regression-runner/repos/dev/hotel-frontend-core/e2e/fixtures/id-per-adult.ts:64:85) 2026-10-16T10:46:10.570Z at /home/ubuntu/regression-runner/repos/dev/hotel-frontend-core/e2e/specs/checkin-id-per-adult.spec.ts:258:15 2026-10-16T10:46:10.570Z attachment #1: screenshot (image/png) ────────────────────────────────────────────────────────── 2026-10-16T10:46:10.570Z test-results/checkin-id-per-adult-One-I-ab3bb-cks-in-only-the-picked-room-chromium/test-failed-1.png 2026-10-16T10:46:10.570Z ──────────────────────────────────────────────────────────────────────────────────────────────── 2026-10-16T10:46:10.570Z Error Context: test-results/checkin-id-per-adult-One-I-ab3bb-cks-in-only-the-picked-room-chromium/error-context.md 2026-10-16T10:46:10.570Z Error Context: test-results/checkin-id-per-adult-One-I-ab3bb-cks-in-only-the-picked-room-chromium/error-context.md 2026-10-16T10:46:10.570Z attachment #4: trace (application/zip) ───────────────────────────────────────────────────────── 2026-10-16T10:46:10.570Z test-results/checkin-id-per-adult-One-I-ab3bb-cks-in-only-the-picked-room-chromium/trace.zip 2026-10-16T10:46:10.570Z Usage: 2026-10-16T10:46:10.570Z pnpm exec playwright show-trace test-results/checkin-id-per-adult-One-I-ab3bb-cks-in-only-the-picked-room-chromium/trace.zip 2026-10-16T10:46:10.570Z ──────────────────────────────────────────────────────────────────────────────────────────────── 2026-10-16T10:46:10.570Z 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-16T10:46:10.570Z Error: expect(received).toBe(expected) // Object.is equality 2026-10-16T10:46:10.570Z Expected: true 2026-10-16T10:46:10.570Z Received: false 2026-10-16T10:46:10.570Z 113 | }, 2026-10-16T10:46:10.570Z 114 | ); 2026-10-16T10:46:10.571Z > 115 | expect(created.ok()).toBe(true); 2026-10-16T10:46:10.571Z | ^ 2026-10-16T10:46:10.571Z 116 | const createdBody = (await created.json()) as { id: string }; 2026-10-16T10:46:10.571Z 117 | 2026-10-16T10:46:10.571Z 118 | const beforeResp = await authedPage.request.get( 2026-10-16T10:46:10.571Z at /home/ubuntu/regression-runner/repos/dev/hotel-frontend-core/e2e/specs/prd-2026-005-active-template.spec.ts:115:24 2026-10-16T10:46:10.571Z attachment #1: screenshot (image/png) ────────────────────────────────────────────────────────── 2026-10-16T10:46:10.571Z test-results/prd-2026-005-active-templa-0a4c7-till-renders-no-font-crash--chromium/test-failed-1.png 2026-10-16T10:46:10.571Z ──────────────────────────────────────────────────────────────────────────────────────────────── 2026-10-16T10:46:10.571Z Error Context: test-results/prd-2026-005-active-templa-0a4c7-till-renders-no-font-crash--chromium/error-context.md 2026-10-16T10:46:10.571Z Error Context: test-results/prd-2026-005-active-templa-0a4c7-till-renders-no-font-crash--chromium/error-context.md 2026-10-16T10:46:10.571Z attachment #4: trace (application/zip) ───────────────────────────────────────────────────────── 2026-10-16T10:46:10.571Z test-results/prd-2026-005-active-templa-0a4c7-till-renders-no-font-crash--chromium/trace.zip 2026-10-16T10:46:10.571Z Usage: 2026-10-16T10:46:10.571Z pnpm exec playwright show-trace test-results/prd-2026-005-active-templa-0a4c7-till-renders-no-font-crash--chromium/trace.zip 2026-10-16T10:46:10.571Z ──────────────────────────────────────────────────────────────────────────────────────────────── 2026-10-16T10:46:10.571Z 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-16T10:46:10.571Z Test timeout of 90000ms exceeded. 2026-10-16T10:46:10.571Z Error: page.waitForResponse: Test timeout of 90000ms exceeded. 2026-10-16T10:46:10.571Z 57 | await authedPage.locator('#reason').fill('E2E QA · DN full'); 2026-10-16T10:46:10.571Z 58 | const [response] = await Promise.all([ 2026-10-16T10:46:10.571Z > 59 | authedPage.waitForResponse( 2026-10-16T10:46:10.571Z | ^ 2026-10-16T10:46:10.571Z 60 | (r) => 2026-10-16T10:46:10.571Z 61 | r.url().includes('/debit-notes') && 2026-10-16T10:46:10.571Z 62 | r.request().method() === 'POST' && 2026-10-16T10:46:10.571Z at /home/ubuntu/regression-runner/repos/dev/hotel-frontend-core/e2e/specs/prd-2026-005-supplementary-docs.spec.ts:59:15 2026-10-16T10:46:10.571Z attachment #1: screenshot (image/png) ────────────────────────────────────────────────────────── 2026-10-16T10:46:10.571Z test-results/prd-2026-005-supplementary-289df-full-generates-201-PDF-blob-chromium/test-failed-1.png 2026-10-16T10:46:10.571Z ──────────────────────────────────────────────────────────────────────────────────────────────── 2026-10-16T10:46:10.571Z Error Context: test-results/prd-2026-005-supplementary-289df-full-generates-201-PDF-blob-chromium/error-context.md 2026-10-16T10:46:10.571Z Error Context: test-results/prd-2026-005-supplementary-289df-full-generates-201-PDF-blob-chromium/error-context.md 2026-10-16T10:46:10.571Z attachment #4: trace (application/zip) ───────────────────────────────────────────────────────── 2026-10-16T10:46:10.572Z test-results/prd-2026-005-supplementary-289df-full-generates-201-PDF-blob-chromium/trace.zip 2026-10-16T10:46:10.572Z Usage: 2026-10-16T10:46:10.572Z pnpm exec playwright show-trace test-results/prd-2026-005-supplementary-289df-full-generates-201-PDF-blob-chromium/trace.zip 2026-10-16T10:46:10.572Z ──────────────────────────────────────────────────────────────────────────────────────────────── 2026-10-16T10:46:10.572Z 4) [chromium] › e2e/specs/revenue-guardrail-removal.spec.ts:23:5 › TC-REV-GUARD-1 clearing both configured limits removes the guardrail 2026-10-16T10:46:10.572Z Error: GET guardrails → 403 2026-10-16T10:46:10.572Z expect(received).toBeTruthy() 2026-10-16T10:46:10.572Z Received: false 2026-10-16T10:46:10.572Z 17 | async function currentGuardrails(api: Awaited>, path: string): Promise { 2026-10-16T10:46:10.572Z 18 | const response = await api.get(path); 2026-10-16T10:46:10.572Z > 19 | expect(response.ok(), `GET guardrails → ${response.status()}`).toBeTruthy(); 2026-10-16T10:46:10.572Z | ^ 2026-10-16T10:46:10.572Z 20 | return ((await response.json()) as GuardrailResponse).data; 2026-10-16T10:46:10.572Z 21 | } 2026-10-16T10:46:10.572Z 22 | 2026-10-16T10:46:10.572Z at currentGuardrails (/home/ubuntu/regression-runner/repos/dev/hotel-frontend-core/e2e/specs/revenue-guardrail-removal.spec.ts:19:65) 2026-10-16T10:46:10.572Z at /home/ubuntu/regression-runner/repos/dev/hotel-frontend-core/e2e/specs/revenue-guardrail-removal.spec.ts:31:16 2026-10-16T10:46:10.572Z attachment #1: screenshot (image/png) ────────────────────────────────────────────────────────── 2026-10-16T10:46:10.572Z test-results/revenue-guardrail-removal--445ed-imits-removes-the-guardrail-chromium/test-failed-1.png 2026-10-16T10:46:10.572Z ──────────────────────────────────────────────────────────────────────────────────────────────── 2026-10-16T10:46:10.572Z Error Context: test-results/revenue-guardrail-removal--445ed-imits-removes-the-guardrail-chromium/error-context.md 2026-10-16T10:46:10.572Z attachment #3: trace (application/zip) ───────────────────────────────────────────────────────── 2026-10-16T10:46:10.572Z test-results/revenue-guardrail-removal--445ed-imits-removes-the-guardrail-chromium/trace.zip 2026-10-16T10:46:10.573Z Usage: 2026-10-16T10:46:10.573Z pnpm exec playwright show-trace test-results/revenue-guardrail-removal--445ed-imits-removes-the-guardrail-chromium/trace.zip 2026-10-16T10:46:10.573Z ──────────────────────────────────────────────────────────────────────────────────────────────── 2026-10-16T10:46:10.573Z 5) [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-16T10:46:10.573Z Error: expect(locator).toBeVisible() failed 2026-10-16T10:46:10.573Z Locator: getByRole('dialog') 2026-10-16T10:46:10.573Z Expected: visible 2026-10-16T10:46:10.573Z Error: strict mode violation: getByRole('dialog') resolved to 2 elements: 2026-10-16T10:46:10.573Z 1) aka getByRole('dialog', { name: 'Cancel reservation' }) 2026-10-16T10:46:10.573Z 2) aka locator('#engagement-toast-responsive-inner-div') 2026-10-16T10:46:10.573Z Call log: 2026-10-16T10:46:10.573Z  - Expect "toBeVisible" with timeout 10000ms 2026-10-16T10:46:10.573Z  - waiting for getByRole('dialog') 2026-10-16T10:46:10.573Z 57 | .getByRole('menuitem', { name: mode === 'NO_SHOW' ? /mark as no-show/i : /^cancel reservation$/i }) 2026-10-16T10:46:10.573Z 58 | .click(); 2026-10-16T10:46:10.573Z > 59 | await expect(page.getByRole('dialog')).toBeVisible(); 2026-10-16T10:46:10.573Z | ^ 2026-10-16T10:46:10.574Z 60 | await expect(confirmCta(page, mode)).toBeVisible(); 2026-10-16T10:46:10.574Z 61 | } 2026-10-16T10:46:10.574Z 62 | 2026-10-16T10:46:10.574Z at openModal (/home/ubuntu/regression-runner/repos/dev/hotel-frontend-core/e2e/specs/prd-2026-007-noshow-cancel.spec.ts:59:41) 2026-10-16T10:46:10.574Z at /home/ubuntu/regression-runner/repos/dev/hotel-frontend-core/e2e/specs/prd-2026-007-noshow-cancel.spec.ts:135:3 2026-10-16T10:46:10.574Z attachment #1: screenshot (image/png) ────────────────────────────────────────────────────────── 2026-10-16T10:46:10.574Z test-results/prd-2026-007-noshow-cancel-9ce6f-ne-warning-is-shown-UX-NG1--arm/test-failed-1.png 2026-10-16T10:46:10.574Z ──────────────────────────────────────────────────────────────────────────────────────────────── 2026-10-16T10:46:10.574Z Error Context: test-results/prd-2026-007-noshow-cancel-9ce6f-ne-warning-is-shown-UX-NG1--arm/error-context.md 2026-10-16T10:46:10.574Z Error Context: test-results/prd-2026-007-noshow-cancel-9ce6f-ne-warning-is-shown-UX-NG1--arm/error-context.md 2026-10-16T10:46:10.574Z attachment #4: trace (application/zip) ───────────────────────────────────────────────────────── 2026-10-16T10:46:10.574Z test-results/prd-2026-007-noshow-cancel-9ce6f-ne-warning-is-shown-UX-NG1--arm/trace.zip 2026-10-16T10:46:10.574Z Usage: 2026-10-16T10:46:10.574Z pnpm exec playwright show-trace test-results/prd-2026-007-noshow-cancel-9ce6f-ne-warning-is-shown-UX-NG1--arm/trace.zip 2026-10-16T10:46:10.574Z ──────────────────────────────────────────────────────────────────────────────────────────────── 2026-10-16T10:46:10.574Z 5 failed 2026-10-16T10:46:10.574Z [chromium] › e2e/specs/checkin-id-per-adult.spec.ts:254: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-16T10:46:10.574Z [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-16T10:46:10.574Z [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-16T10:46:10.574Z [chromium] › e2e/specs/revenue-guardrail-removal.spec.ts:23:5 › TC-REV-GUARD-1 clearing both configured limits removes the guardrail 2026-10-16T10:46:10.574Z [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-16T10:46:10.574Z 12 skipped 2026-10-16T10:46:10.574Z 2 did not run 2026-10-16T10:46:10.574Z 258 passed (9.5m) 2026-10-16T10:46:10.910Z  ELIFECYCLE  Command failed with exit code 1. 2026-10-16T10:46:10.932Z -> exit 1 2026-10-16T10:46:11.135Z slack: 202 2026-10-16T10:46:12.304Z github status hotel-backend-core@394fc768f: 201 2026-10-16T10:46:13.392Z github status hotel-frontend-core@4fdaa0a70: 201