2026-10-16T02:52:58.590Z commit is live on dev, queued 2026-10-16T02:52:58.590Z start test on dev (full/parallel, trigger push) 2026-10-16T02:52:58.626Z deployed: {"hotel-backend-core":"9338e28e79db480f72b45314ca85b3c9c3060df9","hotel-frontend-core":"2edac7677d85c5cbe64b00af518cd5d749b51fd7"} 2026-10-16T02:52:58.626Z $ git fetch --quiet origin dev (cwd /home/ubuntu/regression-runner/repos/dev/hotel-backend-core) 2026-10-16T02:52:59.483Z -> exit 0 2026-10-16T02:52:59.483Z $ git diff --name-only 9338e28e79db480f72b45314ca85b3c9c3060df9 origin/dev (cwd /home/ubuntu/regression-runner/repos/dev/hotel-backend-core) 2026-10-16T02:52:59.493Z -> exit 0 2026-10-16T02:52:59.493Z $ git checkout --quiet --detach 9338e28e79db480f72b45314ca85b3c9c3060df9 && git clean -fdq -e playwright-report -e .auth && git rev-parse HEAD (cwd /home/ubuntu/regression-runner/repos/dev/hotel-backend-core) 2026-10-16T02:52:59.559Z 9338e28e79db480f72b45314ca85b3c9c3060df9 2026-10-16T02:52:59.559Z -> exit 0 2026-10-16T02:52:59.559Z $ 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-16T02:53:00.007Z Scope: all 31 workspace projects 2026-10-16T02:53:00.199Z Lockfile is up to date, resolution step is skipped 2026-10-16T02:53:00.390Z Already up to date 2026-10-16T02:53:01.403Z . prepare$ husky 2026-10-16T02:53:01.460Z . prepare: Done 2026-10-16T02:53:01.591Z Done in 1.9s 2026-10-16T02:53:01.627Z -> exit 0 2026-10-16T02:53:01.627Z $ git fetch --quiet origin dev (cwd /home/ubuntu/regression-runner/repos/dev/hotel-frontend-core) 2026-10-16T02:53:02.508Z -> exit 0 2026-10-16T02:53:02.508Z $ git diff --name-only 2edac7677d85c5cbe64b00af518cd5d749b51fd7 origin/dev (cwd /home/ubuntu/regression-runner/repos/dev/hotel-frontend-core) 2026-10-16T02:53:02.518Z -> exit 0 2026-10-16T02:53:02.518Z $ git checkout --quiet --detach 2edac7677d85c5cbe64b00af518cd5d749b51fd7 && git clean -fdq -e playwright-report -e .auth && git rev-parse HEAD (cwd /home/ubuntu/regression-runner/repos/dev/hotel-frontend-core) 2026-10-16T02:53:02.574Z 2edac7677d85c5cbe64b00af518cd5d749b51fd7 2026-10-16T02:53:02.574Z -> exit 0 2026-10-16T02:53:02.574Z $ 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-16T02:53:03.108Z Lockfile is up to date, resolution step is skipped 2026-10-16T02:53:03.253Z Already up to date 2026-10-16T02:53:03.883Z . prepare$ husky 2026-10-16T02:53:03.942Z . prepare: Done 2026-10-16T02:53:03.944Z Done in 1.2s 2026-10-16T02:53:03.968Z -> exit 0 2026-10-16T02:53:03.968Z $ corepack pnpm@9.15.4 e2e:prepare-property -- --count 8 (cwd /home/ubuntu/regression-runner/repos/dev/hotel-backend-core) 2026-10-16T02:53:04.347Z > hotel-backend-core@ e2e:prepare-property /home/ubuntu/regression-runner/repos/dev/hotel-backend-core 2026-10-16T02:53:04.347Z > node scripts/e2e/prepare-property.mjs "--" "--count" "8" 2026-10-16T02:53:07.394Z ✓ E2E Hotel 01 (b4c88cd6-2371-4049-aaaf-2158fb4b6b9e): test user has access 2026-10-16T02:53:09.617Z ✓ E2E Hotel 02 (c7396f01-f0a3-4b84-91a8-ac8b5b32c065): test user has access 2026-10-16T02:53:11.840Z ✓ E2E Hotel 03 (6cbd78a1-33c7-4a8d-b4b1-beabfe263880): test user has access 2026-10-16T02:53:14.270Z ✓ E2E Hotel 04 (d4905069-731a-4384-9cea-14f9cf362595): test user has access 2026-10-16T02:53:16.401Z ✓ E2E Hotel 05 (7d049255-56e3-421f-a309-9ad5f8eb0e22): test user has access 2026-10-16T02:53:18.758Z ✓ E2E Hotel 06 (8e43c66d-f413-41a7-ac7a-4a413d4d2632): test user has access 2026-10-16T02:53:21.135Z ✓ E2E Hotel 07 (729211be-07c8-48a4-8fc5-f28d261617f9): test user has access 2026-10-16T02:53:23.554Z ✓ E2E Hotel 08 (4f50832d-5d39-480f-a913-230148668b50): test user has access 2026-10-16T02:53:23.555Z 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-16T02:53:23.575Z -> exit 0 2026-10-16T02:53:23.575Z === hotel-backend-core === 2026-10-16T02:53:23.575Z $ corepack pnpm@9.15.4 e2e (cwd /home/ubuntu/regression-runner/repos/dev/hotel-backend-core) 2026-10-16T02:53:23.955Z > hotel-backend-core@ e2e /home/ubuntu/regression-runner/repos/dev/hotel-backend-core 2026-10-16T02:53:23.955Z > playwright test -c e2e/api/playwright.config.ts 2026-10-16T02:53:33.720Z Running 25 tests using 8 workers 2026-10-16T02:53:34.953Z ✓ 7 e2e/api/specs/health.spec.ts:4:7 › Backend health › TC-API-HEALTH-1 health reports database and redis up @smoke (148ms) 2026-10-16T02:53:35.437Z ✓ 1 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 (237ms) 2026-10-16T02:53:35.489Z ✓ 2 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 (94ms) 2026-10-16T02:53:35.777Z ✓ 3 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 (332ms) 2026-10-16T02:53:46.277Z ✘ 9 e2e/api/specs/reservation-unassign.spec.ts:197:7 › Reservation unassign › TC-UNASSIGN-API-9 placing the booking back with Move closes the record PLACED (10.7s) 2026-10-16T02:53:46.359Z ✘ 10 e2e/api/specs/reservation-unassign.spec.ts:265:7 › Reservation unassign › TC-UNASSIGN-API-11 unassigning puts the freed room back on sale: its type's availability goes up by one (10.9s) 2026-10-16T02:53:46.384Z ✘ 6 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 (10.9s) 2026-10-16T02:53:58.586Z - 14 e2e/api/specs/revenue-ai-actions.spec.ts:106:7 › Revenue AI action facade › TC-API-REV-ACTION-1 a committed plan replays idempotently and can be undone 2026-10-16T02:53:58.643Z ✘ 16 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 (26ms) 2026-10-16T02:54:00.331Z - 17 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-16T02:54:00.500Z ✘ 18 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 (145ms) 2026-10-16T02:54:01.213Z ✓ 19 e2e/api/specs/revenue-ai-context.spec.ts:24:5 › TC-REV-AI-CTX-1 @smoke unauthenticated Revenue AI context is rejected (142ms) 2026-10-16T02:54:01.993Z - 20 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-16T02:54:02.033Z - 21 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-16T02:54:02.607Z ✘ 22 e2e/api/specs/revenue-guardrails.spec.ts:43:5 › TC-REV-GUARD-API-1 public quotes omit every plan outside final-price limits (538ms) 2026-10-16T02:54:03.302Z ✓ 4 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 (27.8s) 2026-10-16T02:54:03.545Z ✓ 5 e2e/api/specs/reservation-unassign.spec.ts:163:7 › Reservation unassign › TC-UNASSIGN-API-7 a room locked for Move & Swap is refused 409 UNASSIGN_ROOM_LOCKED (28.0s) 2026-10-16T02:54:03.797Z ✓ 8 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 (28.3s) 2026-10-16T02:54:03.970Z ✘ 12 e2e/api/specs/reservations.spec.ts:61:7 › Reservations › TC-API-RES-2 a reservation whose check-out is before its check-in is rejected (26.5s) 2026-10-16T02:54:04.815Z ✓ 11 e2e/api/specs/reservations.spec.ts:22:7 › Reservations › TC-API-RES-1 a direct reservation is created as upcoming and can be cancelled @prod (28.8s) 2026-10-16T02:54:04.941Z - 24 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-16T02:54:06.690Z ✘ 15 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 (6.0s) 2026-10-16T02:54:07.051Z ✓ 13 e2e/api/specs/reservation-unassign.spec.ts:241:7 › Reservation unassign › TC-UNASSIGN-API-10 checking in an unassigned room is refused 400 CHECKIN_ROOM_UNASSIGNED (6.8s) 2026-10-16T02:54:08.857Z ✓ 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.8s) 2026-10-16T02:54:09.317Z ✓ 25 e2e/api/specs/reservation-unassign.spec.ts:51:7 › Reservation unassign › TC-UNASSIGN-API-2 with the switch on, unassign frees the room: 201 and an ACTIVE record (3.9s) 2026-10-16T02:54:09.338Z 1) 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 2026-10-16T02:54:09.338Z Error: POST /reservations → 500: {"statusCode":500,"message":"Something went wrong, please try again later","error":"Internal Server Error","timestamp":"2026-10-16T02:53:46.315Z","path":"/reservations","requestId":"bfb481d3-ee6e-420b-a694-bd4171597ca8"} 2026-10-16T02:54:09.338Z expect(received).toBeTruthy() 2026-10-16T02:54:09.338Z Received: false 2026-10-16T02:54:09.338Z at ../support/unassign.ts:130 2026-10-16T02:54:09.338Z 128 | res.ok(), 2026-10-16T02:54:09.338Z 129 | `POST /reservations → ${res.status()}: ${await res.text()}`, 2026-10-16T02:54:09.338Z > 130 | ).toBeTruthy(); 2026-10-16T02:54:09.338Z | ^ 2026-10-16T02:54:09.338Z 131 | const checkInId = idOf(await res.json()); 2026-10-16T02:54:09.338Z 132 | expect(checkInId, "reservation id").toBeTruthy(); 2026-10-16T02:54:09.338Z 133 | registerForCleanup(checkInId!); 2026-10-16T02:54:09.338Z at createBooking (/home/ubuntu/regression-runner/repos/dev/hotel-backend-core/e2e/api/support/unassign.ts:130:5) 2026-10-16T02:54:09.338Z at /home/ubuntu/regression-runner/repos/dev/hotel-backend-core/e2e/api/specs/reservation-unassign.spec.ts:80:21 2026-10-16T02:54:09.338Z Error Context: test-results/reservation-unassign-Reser-de1d5-eturns-the-booking-s-record/error-context.md 2026-10-16T02:54:09.338Z Error Context: test-results/reservation-unassign-Reser-de1d5-eturns-the-booking-s-record/error-context.md 2026-10-16T02:54:09.338Z 2) e2e/api/specs/reservation-unassign.spec.ts:99:7 › Reservation unassign › TC-UNASSIGN-API-4 the batch read ?checkInIds= returns the ACTIVE records of the listed bookings only 2026-10-16T02:54:09.338Z Error: POST /reservations → 400: {"statusCode":400,"message":"One or more selected rooms are already blocked or occupied during the selected period.","timestamp":"2026-10-16T02:54:05.526Z","path":"/reservations","requestId":"e15446bc-e1be-4d86-8f9d-2c23d214d472"} 2026-10-16T02:54:09.338Z expect(received).toBeTruthy() 2026-10-16T02:54:09.338Z Received: false 2026-10-16T02:54:09.338Z at ../support/unassign.ts:130 2026-10-16T02:54:09.338Z 128 | res.ok(), 2026-10-16T02:54:09.338Z 129 | `POST /reservations → ${res.status()}: ${await res.text()}`, 2026-10-16T02:54:09.338Z > 130 | ).toBeTruthy(); 2026-10-16T02:54:09.338Z | ^ 2026-10-16T02:54:09.338Z 131 | const checkInId = idOf(await res.json()); 2026-10-16T02:54:09.338Z 132 | expect(checkInId, "reservation id").toBeTruthy(); 2026-10-16T02:54:09.338Z 133 | registerForCleanup(checkInId!); 2026-10-16T02:54:09.338Z at createBooking (/home/ubuntu/regression-runner/repos/dev/hotel-backend-core/e2e/api/support/unassign.ts:130:5) 2026-10-16T02:54:09.338Z at /home/ubuntu/regression-runner/repos/dev/hotel-backend-core/e2e/api/specs/reservation-unassign.spec.ts:105:22 2026-10-16T02:54:09.338Z Error Context: test-results/reservation-unassign-Reser-2eb59-of-the-listed-bookings-only/error-context.md 2026-10-16T02:54:09.339Z Error Context: test-results/reservation-unassign-Reser-2eb59-of-the-listed-bookings-only/error-context.md 2026-10-16T02:54:09.339Z 3) e2e/api/specs/reservation-unassign.spec.ts:197:7 › Reservation unassign › TC-UNASSIGN-API-9 placing the booking back with Move closes the record PLACED 2026-10-16T02:54:09.339Z Error: POST /reservations → 500: {"statusCode":500,"message":"Something went wrong, please try again later","error":"Internal Server Error","timestamp":"2026-10-16T02:53:46.230Z","path":"/reservations","requestId":"45c12e78-9805-44fd-9c38-ea9310117422"} 2026-10-16T02:54:09.339Z expect(received).toBeTruthy() 2026-10-16T02:54:09.339Z Received: false 2026-10-16T02:54:09.339Z at ../support/unassign.ts:130 2026-10-16T02:54:09.339Z 128 | res.ok(), 2026-10-16T02:54:09.339Z 129 | `POST /reservations → ${res.status()}: ${await res.text()}`, 2026-10-16T02:54:09.339Z > 130 | ).toBeTruthy(); 2026-10-16T02:54:09.339Z | ^ 2026-10-16T02:54:09.339Z 131 | const checkInId = idOf(await res.json()); 2026-10-16T02:54:09.339Z 132 | expect(checkInId, "reservation id").toBeTruthy(); 2026-10-16T02:54:09.339Z 133 | registerForCleanup(checkInId!); 2026-10-16T02:54:09.339Z at createBooking (/home/ubuntu/regression-runner/repos/dev/hotel-backend-core/e2e/api/support/unassign.ts:130:5) 2026-10-16T02:54:09.339Z at /home/ubuntu/regression-runner/repos/dev/hotel-backend-core/e2e/api/specs/reservation-unassign.spec.ts:200:21 2026-10-16T02:54:09.339Z Error Context: test-results/reservation-unassign-Reser-00246-ve-closes-the-record-PLACED/error-context.md 2026-10-16T02:54:09.339Z Error Context: test-results/reservation-unassign-Reser-00246-ve-closes-the-record-PLACED/error-context.md 2026-10-16T02:54:09.339Z 4) e2e/api/specs/reservation-unassign.spec.ts:265:7 › Reservation unassign › TC-UNASSIGN-API-11 unassigning puts the freed room back on sale: its type's availability goes up by one 2026-10-16T02:54:09.339Z Error: POST /reservations → 500: {"statusCode":500,"message":"Something went wrong, please try again later","error":"Internal Server Error","timestamp":"2026-10-16T02:53:46.311Z","path":"/reservations","requestId":"0ad100d8-33ea-46e3-826c-1ea0cb5efd20"} 2026-10-16T02:54:09.339Z expect(received).toBeTruthy() 2026-10-16T02:54:09.339Z Received: false 2026-10-16T02:54:09.339Z at ../support/unassign.ts:130 2026-10-16T02:54:09.339Z 128 | res.ok(), 2026-10-16T02:54:09.339Z 129 | `POST /reservations → ${res.status()}: ${await res.text()}`, 2026-10-16T02:54:09.339Z > 130 | ).toBeTruthy(); 2026-10-16T02:54:09.339Z | ^ 2026-10-16T02:54:09.339Z 131 | const checkInId = idOf(await res.json()); 2026-10-16T02:54:09.339Z 132 | expect(checkInId, "reservation id").toBeTruthy(); 2026-10-16T02:54:09.339Z 133 | registerForCleanup(checkInId!); 2026-10-16T02:54:09.339Z at createBooking (/home/ubuntu/regression-runner/repos/dev/hotel-backend-core/e2e/api/support/unassign.ts:130:5) 2026-10-16T02:54:09.339Z at /home/ubuntu/regression-runner/repos/dev/hotel-backend-core/e2e/api/specs/reservation-unassign.spec.ts:268:21 2026-10-16T02:54:09.339Z Error Context: test-results/reservation-unassign-Reser-c9eb6-availability-goes-up-by-one/error-context.md 2026-10-16T02:54:09.339Z Error Context: test-results/reservation-unassign-Reser-c9eb6-availability-goes-up-by-one/error-context.md 2026-10-16T02:54:09.339Z 5) e2e/api/specs/revenue-ai-actions.spec.ts:176:7 › Revenue AI action facade › TC-API-REV-ACTION-2 settings revision changes reject a stale preview 2026-10-16T02:54:09.339Z Error: AI settings → 403 2026-10-16T02:54:09.340Z expect(received).toBeTruthy() 2026-10-16T02:54:09.340Z Received: false 2026-10-16T02:54:09.340Z 182 | settingsRes.ok(), 2026-10-16T02:54:09.340Z 183 | `AI settings → ${settingsRes.status()}`, 2026-10-16T02:54:09.340Z > 184 | ).toBeTruthy(); 2026-10-16T02:54:09.340Z | ^ 2026-10-16T02:54:09.340Z 185 | const original = unwrap(await settingsRes.json()) as AnyRecord; 2026-10-16T02:54:09.340Z 186 | const { preview } = await previewRate(api, hotel.id); 2026-10-16T02:54:09.340Z 187 | const objective = (original.objective ?? {}) as AnyRecord; 2026-10-16T02:54:09.340Z at /home/ubuntu/regression-runner/repos/dev/hotel-backend-core/e2e/api/specs/revenue-ai-actions.spec.ts:184:7 2026-10-16T02:54:09.340Z Error Context: test-results/revenue-ai-actions-Revenue-aaa61-nges-reject-a-stale-preview/error-context.md 2026-10-16T02:54:09.340Z 6) e2e/api/specs/revenue-ai-actions.spec.ts:240:7 › Revenue AI action facade › TC-API-REV-REPORT-1 forged and cross-property source jobs are rejected before enqueue 2026-10-16T02:54:09.340Z Error: expect(received).toBe(expected) // Object.is equality 2026-10-16T02:54:09.340Z Expected: 400 2026-10-16T02:54:09.340Z Received: 403 2026-10-16T02:54:09.340Z 250 | }, 2026-10-16T02:54:09.340Z 251 | }); 2026-10-16T02:54:09.340Z > 252 | expect(foreignSourceRes.status()).toBe(400); 2026-10-16T02:54:09.340Z | ^ 2026-10-16T02:54:09.340Z 253 | expect(await foreignSourceRes.text()).toMatch(/not in this property/i); 2026-10-16T02:54:09.340Z 254 | 2026-10-16T02:54:09.340Z 255 | const missingSourceRes = await api.post(reportRunPath, { 2026-10-16T02:54:09.340Z at /home/ubuntu/regression-runner/repos/dev/hotel-backend-core/e2e/api/specs/revenue-ai-actions.spec.ts:252:39 2026-10-16T02:54:09.340Z Error Context: test-results/revenue-ai-actions-Revenue-78190-are-rejected-before-enqueue/error-context.md 2026-10-16T02:54:09.340Z 7) e2e/api/specs/revenue-guardrails.spec.ts:43:5 › TC-REV-GUARD-API-1 public quotes omit every plan outside final-price limits 2026-10-16T02:54:09.340Z Error: GET public property → 404: {"statusCode":404,"message":"Property not found for booking engine","timestamp":"2026-10-16T02:54:02.574Z","path":"/booking-engine/public/property/b4c88cd6-2371-4049-aaaf-2158fb4b6b9e?adults=2&children=0","requestId":"81e95d44-fe55-47f4-8f2a-24bff1c1c76d"} 2026-10-16T02:54:09.340Z expect(received).toBeTruthy() 2026-10-16T02:54:09.340Z Received: false 2026-10-16T02:54:09.340Z 37 | response.ok(), 2026-10-16T02:54:09.340Z 38 | `${method} → ${response.status()}: ${await response.text()}`, 2026-10-16T02:54:09.340Z > 39 | ).toBeTruthy(); 2026-10-16T02:54:09.340Z | ^ 2026-10-16T02:54:09.340Z 40 | return response.json() as Promise; 2026-10-16T02:54:09.340Z 41 | } 2026-10-16T02:54:09.340Z 42 | 2026-10-16T02:54:09.340Z at successfulJson (/home/ubuntu/regression-runner/repos/dev/hotel-backend-core/e2e/api/specs/revenue-guardrails.spec.ts:39:5) 2026-10-16T02:54:09.340Z at /home/ubuntu/regression-runner/repos/dev/hotel-backend-core/e2e/api/specs/revenue-guardrails.spec.ts:51:24 2026-10-16T02:54:09.340Z Error Context: test-results/revenue-guardrails-TC-REV--ac7c6--outside-final-price-limits/error-context.md 2026-10-16T02:54:09.340Z 7 failed 2026-10-16T02:54:09.340Z 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 2026-10-16T02:54:09.340Z 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-16T02:54:09.340Z 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-16T02:54:09.340Z 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-16T02:54:09.340Z 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-16T02:54:09.341Z 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-16T02:54:09.341Z 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-16T02:54:09.341Z 5 skipped 2026-10-16T02:54:09.341Z 13 passed (44.7s) 2026-10-16T02:54:09.416Z  ELIFECYCLE  Command failed with exit code 1. 2026-10-16T02:54:09.438Z -> exit 1 2026-10-16T02:54:09.442Z === hotel-frontend-core === 2026-10-16T02:54:09.442Z $ corepack pnpm@9.15.4 e2e (cwd /home/ubuntu/regression-runner/repos/dev/hotel-frontend-core) 2026-10-16T02:54:09.822Z > hotel-frontend-core@0.1.0 e2e /home/ubuntu/regression-runner/repos/dev/hotel-frontend-core 2026-10-16T02:54:09.822Z > playwright test 2026-10-16T02:54:47.841Z Running 336 tests using 8 workers 2026-10-16T02:54:48.882Z ✓ 1 [chromium] › e2e/specs/hfe-food-item-search-all-category.spec.ts:67:7 › Static code checks: no browser required › [TC-HFE-022] FoodItemEmptyState uses Text.Medium14 (no raw

or inline style) (25ms) 2026-10-16T02:54:48.892Z ✓ 3 [chromium] › e2e/specs/hfe-food-item-search-all-category.spec.ts:106:7 › Static code checks: no browser required › [TC-HFE-026] CategoryItemsGrid: allItems and onToggleSearchScope props are optional (21ms) 2026-10-16T02:54:48.906Z ✓ 4 [chromium] › e2e/specs/hfe-food-item-search-all-category.spec.ts:100:7 › Static code checks: no browser required › [TC-HFE-025] AllCategoriesGridProps includes allItems and searchQuery (no type errors) (16ms) 2026-10-16T02:54:48.909Z ✓ 2 [chromium] › e2e/specs/hfe-food-item-search-all-category.spec.ts:118:7 › Static code checks: no browser required › [TC-HFE-027] filterFoodItems handles empty allItems array and empty query without crashing (39ms) 2026-10-16T02:54:48.925Z ✓ 5 [chromium] › e2e/specs/hfe-food-item-search-all-category.spec.ts:91:7 › Static code checks: no browser required › [TC-HFE-024] AllCategoriesGrid category heading uses Text.Semibold14 token (10ms) 2026-10-16T02:54:48.977Z ✓ 10 [chromium] › e2e/specs/hfe-food-item-search-all-category.spec.ts:76:7 › Static code checks: no browser required › [TC-HFE-023] Scope toggle chip uses Tailwind classes only — no inline style or raw hex colour (23ms) 2026-10-16T02:54:49.026Z ✓ 13 [chromium] › e2e/specs/hfe-food-item-search-all-category.spec.ts:133:7 › Static code checks: no browser required › [TC-HFE-028] allItemsDeduped useMemo deduplication logic present in CreateOrderComponent (21ms) 2026-10-16T02:55:00.288Z ✘ 9 [chromium] › e2e/specs/hfe-food-item-search-all-category.spec.ts:153:7 › AC-1: All tab is selected by default [AC-1] › [TC-HFE-001] All tab is selected and shows all items on first render (desktop) (11.0s) 2026-10-16T02:55:00.320Z ✘ 7 [chromium] › e2e/specs/hfe-food-item-search-all-category.spec.ts:169:7 › AC-1: All tab is selected by default [AC-1] › [TC-HFE-003] All tab default when kitchen has exactly one category (11.1s) 2026-10-16T02:55:00.386Z ✘ 6 [chromium] › e2e/specs/hfe-food-item-search-all-category.spec.ts:159:7 › AC-1: All tab is selected by default [AC-1] › [TC-HFE-002] All tab shows loading state when categories have not yet resolved (11.2s) 2026-10-16T02:55:11.914Z ✘ 18 [chromium] › e2e/specs/hfe-food-item-search-all-category.spec.ts:250:7 › AC-4: allItemsDeduped — no duplicates in All tab [AC-4] › [TC-HFE-011] Item assigned to multiple categories appears exactly once on All tab (no search) (10.7s) 2026-10-16T02:56:19.362Z ✘ 8 [chromium] › e2e/specs/hfe-food-item-search-all-category.spec.ts:179:7 › AC-2: Search on All tab returns cross-category results [AC-2] › [TC-HFE-004] Search on All tab returns flat results across every category (1.5m) 2026-10-16T02:56:19.393Z ✘ 11 [chromium] › e2e/specs/hfe-food-item-search-all-category.spec.ts:187:7 › AC-2: Search on All tab returns cross-category results [AC-2] › [TC-HFE-005] Search on All tab with itemCode (weight-1 field) returns match (1.5m) 2026-10-16T02:56:19.414Z ✘ 12 [chromium] › e2e/specs/hfe-food-item-search-all-category.spec.ts:194:7 › AC-2: Search on All tab returns cross-category results [AC-2] › [TC-HFE-006] Clearing search restores grouped-by-category layout on All tab (1.5m) 2026-10-16T02:56:19.486Z ✘ 14 [chromium] › e2e/specs/hfe-food-item-search-all-category.spec.ts:206:7 › AC-3: Scope toggle chip behaviour [AC-3] › [TC-HFE-007] Search on specific category shows cross-category results by default (1.5m) 2026-10-16T02:56:19.551Z ✘ 15 [chromium] › e2e/specs/hfe-food-item-search-all-category.spec.ts:217:7 › AC-3: Scope toggle chip behaviour [AC-3] › [TC-HFE-008] Clicking toggle chip scopes search to current category only (1.5m) 2026-10-16T02:56:20.601Z ✓ 20 [chromium] › e2e/specs/hfe-food-item-search-all-category.spec.ts:263:7 › AC-4: allItemsDeduped — no duplicates in All tab [AC-4] › [TC-HFE-013] allItemsDeduped useMemo respects displayItems priority over items (314ms) 2026-10-16T02:56:31.213Z ✘ 24 [chromium] › e2e/specs/hfe-food-item-search-all-category.spec.ts:300:7 › AC-6: Empty categories show inline empty state [AC-6] › [TC-HFE-017] Empty category shows inline empty state in All-tab grouped view (10.7s) 2026-10-16T02:56:31.231Z ✘ 16 [chromium] › e2e/specs/hfe-food-item-search-all-category.spec.ts:228:7 › AC-3: Scope toggle chip behaviour [AC-3] › [TC-HFE-009] Toggle chip is NOT visible when search field is empty on a specific category tab (1.5m) 2026-10-16T02:56:31.254Z ✘ 17 [chromium] › e2e/specs/hfe-food-item-search-all-category.spec.ts:235:7 › AC-3: Scope toggle chip behaviour [AC-3] › [TC-HFE-010] Switching category tab resets search scope to cross-category (1.5m) 2026-10-16T02:56:42.587Z ✘ 26 [chromium] › e2e/specs/hfe-food-item-search-all-category.spec.ts:317:7 › AC-6: Empty categories show inline empty state [AC-6] › [TC-HFE-019] Empty category still renders its heading — old isEmpty guard removed (10.6s) 2026-10-16T02:56:42.639Z ✘ 27 [chromium] › e2e/specs/hfe-food-item-search-all-category.spec.ts:330:7 › AC-7: All tab is first and unique in sidebar [AC-7] › [TC-HFE-020] All tab is first (topmost) item in sidebar on kitchen with many categories (10.6s) 2026-10-16T02:56:42.658Z ✘ 28 [chromium] › e2e/specs/hfe-food-item-search-all-category.spec.ts:341:7 › AC-7: All tab is first and unique in sidebar [AC-7] › [TC-HFE-021] All tab is never rendered more than once even with multiple categories (10.5s) 2026-10-16T02:56:42.825Z ✘ 19 [chromium] › e2e/specs/hfe-food-item-search-all-category.spec.ts:256:7 › AC-4: allItemsDeduped — no duplicates in All tab [AC-4] › [TC-HFE-012] Item assigned to multiple categories appears exactly once in All-tab search results (1.5m) 2026-10-16T02:57:50.506Z ✘ 21 [chromium] › e2e/specs/hfe-food-item-search-all-category.spec.ts:281:7 › AC-5: FoodItemEmptyState on no results [AC-5] › [TC-HFE-015] FoodItemEmptyState renders when specific-category search returns no results (1.5m) 2026-10-16T02:57:50.578Z ✘ 22 [chromium] › e2e/specs/hfe-food-item-search-all-category.spec.ts:273:7 › AC-5: FoodItemEmptyState on no results [AC-5] › [TC-HFE-014] FoodItemEmptyState renders when All-tab search returns no results (1.5m) 2026-10-16T02:57:50.613Z ✘ 23 [chromium] › e2e/specs/hfe-food-item-search-all-category.spec.ts:289:7 › AC-5: FoodItemEmptyState on no results [AC-5] › [TC-HFE-016] Empty state uses size='lg' (320px image) not 'sm' in full-grid context (1.5m) 2026-10-16T02:57:50.843Z ✘ 25 [chromium] › e2e/specs/hfe-food-item-search-all-category.spec.ts:308:7 › AC-6: Empty categories show inline empty state [AC-6] › [TC-HFE-018] Clicking empty category tab in sidebar shows FoodItemEmptyState (1.5m) 2026-10-16T02:57:51.559Z ✓ 33 [chromium] › e2e/specs/hfe-food-item-search-all-category.spec.ts:391:7 › Regression: existing behaviours unaffected by feature merge › [TC-HFE-033] clearItems() resets selectedCategory to 'all' and clears searchQuery (239ms) 2026-10-16T02:57:53.388Z ✘ 37 [chromium] › e2e/specs/prd-2026-005-active-template.spec.ts:38:6 › PRD-2026-005 — Active custom template wins › TC-PRD-090 assigning a custom template makes regenerated PDF use it (1.1s) 2026-10-16T02:57:53.389Z - 38 [chromium] › e2e/specs/prd-2026-005-active-template.spec.ts:187:6 › PRD-2026-005 — Active custom template wins › TC-PRD-092 template with rect color=transparent still renders (no hex crash) 2026-10-16T02:57:53.389Z - 39 [chromium] › e2e/specs/prd-2026-005-active-template.spec.ts:302:6 › PRD-2026-005 — Active custom template wins › TC-PRD-091 template with unregistered fontName still renders (no font crash) 2026-10-16T02:57:53.389Z - 40 [chromium] › e2e/specs/prd-2026-005-active-template.spec.ts:408:6 › PRD-2026-005 — Active custom template wins › TC-PRD-093 template with empty image schemas still renders (no SOI crash) 2026-10-16T02:57:54.364Z ✘ 36 [chromium] › e2e/specs/hfe-food-item-search-all-category.spec.ts:413:7 › Performance: All-tab initial render › [TC-HFE-036] All-tab initial render with 200-item catalog completes within 2 seconds (2.6s) 2026-10-16T02:57:57.439Z ✓ 42 [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.3s) 2026-10-16T02:57:57.715Z ✓ 41 [chromium] › e2e/specs/prd-2026-005-auto-triggers.spec.ts:8:6 › PRD-2026-005 — Auto-Triggers › TC-PRD-030/031 toggle Room Check-Out persists across reload (3.7s) 2026-10-16T02:57:59.876Z ✓ 43 [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.4s) 2026-10-16T02:58:01.191Z ✓ 44 [chromium] › e2e/specs/prd-2026-005-auto-triggers.spec.ts:50:6 › PRD-2026-005 — Auto-Triggers › TC-PRD-032 toggle Restaurant Session Settle persists (3.5s) 2026-10-16T02:58:02.247Z ✘ 34 [chromium] › e2e/specs/hfe-food-item-search-all-category.spec.ts:397:7 › Regression: existing behaviours unaffected by feature merge › [TC-HFE-034] FoodItemCard 'Unavailable' badge still renders for unavailable items in All tab (10.7s) 2026-10-16T02:58:02.338Z ✘ 35 [chromium] › e2e/specs/hfe-food-item-search-all-category.spec.ts:403:7 › Regression: existing behaviours unaffected by feature merge › [TC-HFE-035] Category 'Off' badge still renders for inactive/closed categories in sidebar (10.7s) 2026-10-16T02:58:02.941Z ✓ 45 [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.0s) 2026-10-16T02:58:06.828Z ✘ 49 [chromium] › e2e/specs/prd-2026-005-deep-verification.spec.ts:96:7 › PRD-2026-005 — deep verification › TC-PRD-071/MODERN MODERN invoice PDF prints primary bank account block (2.7s) 2026-10-16T02:58:06.893Z ✓ 47 [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.9s) 2026-10-16T02:58:06.931Z ✘ 48 [chromium] › e2e/specs/prd-2026-005-deep-verification.spec.ts:96:7 › PRD-2026-005 — deep verification › TC-PRD-071/CLASSIC CLASSIC invoice PDF prints primary bank account block (2.9s) 2026-10-16T02:58:10.014Z ✓ 50 [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 (3.1s) 2026-10-16T02:58:11.205Z ✘ 51 [chromium] › e2e/specs/prd-2026-005-deep-verification.spec.ts:96:7 › PRD-2026-005 — deep verification › TC-PRD-071/MODERN_BW MODERN_BW invoice PDF prints primary bank account block (2.5s) 2026-10-16T02:58:14.032Z ✘ 30 [chromium] › e2e/specs/hfe-food-item-search-all-category.spec.ts:351:7 › Regression: existing behaviours unaffected by feature merge › [TC-HFE-029] Existing category-tab item display unaffected after feature merge (1.5m) 2026-10-16T02:58:14.075Z ✘ 31 [chromium] › e2e/specs/hfe-food-item-search-all-category.spec.ts:372:7 › Regression: existing behaviours unaffected by feature merge › [TC-HFE-031] Mobile OrderSummary search returns flat cross-category results (no duplication) (1.5m) 2026-10-16T02:58:14.115Z ✘ 29 [chromium] › e2e/specs/hfe-food-item-search-all-category.spec.ts:360:7 › Regression: existing behaviours unaffected by feature merge › [TC-HFE-030] SelectOptionModal still opens when item with options is clicked (1.5m) 2026-10-16T02:58:14.230Z ✘ 32 [chromium] › e2e/specs/hfe-food-item-search-all-category.spec.ts:383:7 › Regression: existing behaviours unaffected by feature merge › [TC-HFE-032] Mobile empty state renders on no search results in OrderSummary (1.5m) 2026-10-16T02:58:16.074Z ✓ 53 [chromium] › e2e/specs/prd-2026-005-bank-accounts.spec.ts:108:6 › PRD-2026-005 — Bank Accounts › TC-PRD-016 delete removes row (6.0s) 2026-10-16T02:58:18.048Z ✓ 57 [chromium] › e2e/specs/prd-2026-005-flags-gating.spec.ts:43:6 › PRD-2026-005 — flag visibility › TC-PRD-001 propertyConfig delivers the 4 INVOICE flags (1.9s) 2026-10-16T02:58:20.748Z ✘ 54 [chromium] › e2e/specs/prd-2026-005-deep-verification.spec.ts:207:6 › PRD-2026-005 — deep verification › TC-PRD-074 HSN/SAC card change propagates to regenerated invoice PDF (6.5s) 2026-10-16T02:58:20.748Z ✓ 55 [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 (5.0s) 2026-10-16T02:58:20.890Z ✘ 46 [chromium] › e2e/specs/prd-2026-005-deep-verification.spec.ts:29:6 › PRD-2026-005 — deep verification › TC-PRD-070 IGST selection survives save → backend GET returns taxMode=IGST (16.9s) 2026-10-16T02:58:21.329Z ✓ 56 [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 (5.3s) 2026-10-16T02:58:22.789Z ✓ 59 [chromium] › e2e/specs/prd-2026-005-flags-gating.spec.ts:30:6 › PRD-2026-005 — flag visibility › TC-PRD-005 Invoice Settings surfaces Documents sections (Templates + Bank + Auto-Create); HSN/SAC stays consolidated (6.3s) 2026-10-16T02:58:27.288Z ✓ 60 [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 (9.2s) 2026-10-16T02:58:27.704Z ✘ 52 [chromium] › e2e/specs/prd-2026-005-deep-verification.spec.ts:145:6 › PRD-2026-005 — deep verification › TC-PRD-073 Invoice PDF column header reflects persisted taxMode (IGST) (16.8s) 2026-10-16T02:58:36.332Z ✘ 58 [chromium] › e2e/specs/prd-2026-005-deep-verification.spec.ts:265:6 › PRD-2026-005 — deep verification › TC-PRD-072 Credit Note PDF carries the issued CN number in text (18.7s) 2026-10-16T02:58:40.348Z ✓ 66 [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 (13.0s) 2026-10-16T02:58:42.252Z ✘ 61 [chromium] › e2e/specs/prd-2026-005-invoice-editor.spec.ts:42:6 › PRD-2026-005 — Invoice editor › TC-PRD-042 toggling to IGST switches per-line header (19.5s) 2026-10-16T02:58:43.208Z ✓ 67 [chromium] › e2e/specs/prd-2026-005-template-builder.spec.ts:76:6 › PRD-2026-005 — Template Builder › TC-PRD-081 Saving from Designer hits PATCH /document-templates/:id (12.4s) 2026-10-16T02:58:44.395Z ✘ 65 [chromium] › e2e/specs/prd-2026-005-invoice-editor.spec.ts:19:6 › PRD-2026-005 — Invoice editor › TC-PRD-040/041 Tax Mode card visible with default CGST+SGST and matching header (19.1s) 2026-10-16T02:58:44.694Z ✘ 64 [chromium] › e2e/specs/prd-2026-005-invoice-editor.spec.ts:57:6 › PRD-2026-005 — Invoice editor › TC-PRD-043 Reset to default returns to backend choice (19.8s) 2026-10-16T02:58:45.242Z ✓ 68 [chromium] › e2e/specs/prd-2026-012-pricing-rules-readiness.spec.ts:7:5 › PRD-2026-012 @smoke respects pricing access and opens current guardrail controls (6.3s) 2026-10-16T02:58:48.127Z ✓ 69 [chromium] › e2e/specs/prod-stay-journey.spec.ts:47:6 › Stay journey (prod-safe) › TC-PROD-001 a direct booking for tonight shows as upcoming @prod (6.9s) 2026-10-16T02:58:53.291Z ✓ 70 [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 (9.1s) 2026-10-16T02:58:55.342Z ✓ 75 [chromium] › e2e/specs/prod-stay-journey.spec.ts:85:6 › Stay journey (prod-safe) › TC-PROD-002 checking the room in shows the stay as checked in @prod (7.2s) 2026-10-16T02:58:57.649Z ✓ 72 [chromium] › e2e/specs/reservation-unassign-action.spec.ts:133:6 › Reservation Unassign: Unassign Room action › TC-UNASSIGN-5 an unassigned booking is listed in the Unassigned tab with its tag (11.6s) 2026-10-16T02:58:57.782Z ✓ 71 [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 (12.5s) 2026-10-16T02:58:59.450Z ✓ 73 [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 (12.8s) 2026-10-16T02:59:01.639Z ✓ 74 [chromium] › e2e/specs/reservation-unassign-action.spec.ts:101:6 › Reservation Unassign: Unassign Room action › TC-UNASSIGN-4 confirming frees the room: tag "Unassigned · was Room N" and the banner appear (14.5s) 2026-10-16T02:59:02.715Z ✓ 77 [chromium] › e2e/specs/prod-stay-journey.spec.ts:94:6 › Stay journey (prod-safe) › TC-PROD-003 checking the room out closes the stay @prod (6.7s) 2026-10-16T02:59:03.549Z ✓ 80 [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 (3.2s) 2026-10-16T02:59:07.267Z ✓ 76 [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 (12.8s) 2026-10-16T02:59:09.328Z ✓ 83 [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 (4.7s) 2026-10-16T02:59:10.847Z ✓ 81 [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 (7.5s) 2026-10-16T02:59:11.855Z ✓ 82 [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 (8.1s) 2026-10-16T02:59:13.627Z ✓ 78 [chromium] › e2e/specs/reservation-unassign-action.spec.ts:173:6 › Reservation Unassign: Unassign Room action › TC-UNASSIGN-7 check-in is blocked with "Assign a room before checking in." (15.2s) 2026-10-16T02:59:13.794Z ✓ 79 [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 (15.2s) 2026-10-16T02:59:15.395Z ✘ 85 [chromium] › e2e/specs/revenue-guardrail-removal.spec.ts:23:5 › TC-REV-GUARD-1 clearing both configured limits removes the guardrail (5.3s) 2026-10-16T02:59:16.776Z - 87 [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-16T02:59:18.026Z ✓ 86 [chromium] › e2e/specs/revenue-manager.spec.ts:6:5 › TC-RM-1 @smoke protects Revenue Manager and retains the selected workspace tab (6.9s) 2026-10-16T02:59:19.009Z ✓ 88 [chromium] › e2e/specs/smoke-core-pages.spec.ts:23:7 › Core pages open › TC-SMOKE-001 Room View opens on the test hotel @smoke (5.3s) 2026-10-16T02:59:19.485Z ✓ 89 [chromium] › e2e/specs/smoke-core-pages.spec.ts:23:7 › Core pages open › TC-SMOKE-002 Stay View opens on the test hotel @smoke (5.6s) 2026-10-16T02:59:22.415Z ✓ 90 [chromium] › e2e/specs/smoke-core-pages.spec.ts:23:7 › Core pages open › TC-SMOKE-004 Guests opens on the test hotel @smoke (5.6s) 2026-10-16T02:59:23.804Z ✓ 91 [chromium] › e2e/specs/smoke-core-pages.spec.ts:23:7 › Core pages open › TC-SMOKE-005 All Checkins opens on the test hotel @smoke (5.7s) 2026-10-16T02:59:24.680Z ✓ 93 [chromium] › e2e/specs/smoke-core-pages.spec.ts:23:7 › Core pages open › TC-SMOKE-006 Invoices opens on the test hotel @smoke (5.6s) 2026-10-16T02:59:25.211Z ✓ 92 [chromium] › e2e/specs/smoke-core-pages.spec.ts:23:7 › Core pages open › TC-SMOKE-003 Reservations opens on the test hotel @smoke (6.7s) 2026-10-16T02:59:25.636Z ✓ 94 [chromium] › e2e/specs/smoke-core-pages.spec.ts:23:7 › Core pages open › TC-SMOKE-007 Ledger opens on the test hotel @smoke (6.1s) 2026-10-16T02:59:26.930Z ✓ 84 [chromium] › e2e/specs/reservation-unassign.spec.ts:8:5 › TC-UNASSIGN-MONEY-1 frees and returns a reservation room without changing its money (19.6s) 2026-10-16T02:59:27.054Z ✓ 95 [chromium] › e2e/specs/smoke-core-pages.spec.ts:23:7 › Core pages open › TC-SMOKE-008 Reports opens on the test hotel @smoke (4.6s) 2026-10-16T02:59:30.851Z ✓ 99 [arm] › e2e/specs/prd-2026-007-create-reservation.spec.ts:47:6 › PRD-2026-007 — reservation creation (API semantics) › TC-ARM-200 single-room create: UPCOMING, one room instance, default slot [CR-1] (2.4s) 2026-10-16T02:59:32.189Z ✓ 100 [arm] › e2e/specs/prd-2026-007-finance.spec.ts:62: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.2s) 2026-10-16T02:59:33.288Z ✓ 101 [arm] › e2e/specs/prd-2026-007-lock-move-swap.spec.ts:68:6 › PRD-2026-007 — Move/Swap lock › TC-ARM-140 API: lock then unlock round-trips [lock] (2.8s) 2026-10-16T02:59:33.344Z ✓ 102 [arm] › e2e/specs/prd-2026-007-create-reservation.spec.ts:58: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.5s) 2026-10-16T02:59:35.128Z ✓ 103 [arm] › e2e/specs/prd-2026-007-finance.spec.ts:69:6 › PRD-2026-007 — reservation-level rollup (G6/Must 8/NG4) › TC-ARM-261 partial check-in does not change totals [G6] (2.9s) 2026-10-16T02:59:35.826Z ✓ 104 [arm] › e2e/specs/prd-2026-007-lock-move-swap.spec.ts:87:6 › PRD-2026-007 — Move/Swap lock › TC-ARM-141 API: batch lock of 3 rooms in one call [lock] (2.5s) 2026-10-16T02:59:35.829Z ✓ 105 [arm] › e2e/specs/prd-2026-007-create-reservation.spec.ts:67: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-16T02:59:37.545Z ✓ 108 [arm] › e2e/specs/prd-2026-007-create-reservation.spec.ts:76: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-16T02:59:37.563Z ✓ 106 [arm] › e2e/specs/prd-2026-007-finance.spec.ts:79:6 › PRD-2026-007 — reservation-level rollup (G6/Must 8/NG4) › TC-ARM-262 explicit recalculate is idempotent on totals [G6 "no unexplained delta"] (2.4s) 2026-10-16T02:59:37.584Z ✓ 109 [arm] › e2e/specs/prd-2026-007-create-reservation.spec.ts:86:6 › PRD-2026-007 — reservation creation (API semantics) › TC-ARM-204 missing guestName → validation error [validation] (20ms) 2026-10-16T02:59:38.750Z ✓ 107 [arm] › e2e/specs/prd-2026-007-lock-move-swap.spec.ts:99:6 › PRD-2026-007 — Move/Swap lock › TC-ARM-142 API: lock survives an unrelated lifecycle op on a sibling room [lock persistence] (2.9s) 2026-10-16T02:59:41.726Z ✓ 110 [arm] › e2e/specs/prd-2026-007-finance.spec.ts:89: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.1s) 2026-10-16T02:59:43.402Z ✘ 96 [mobile-chromium] › e2e/specs/prd-2026-005-mobile.spec.ts:14:6 › PRD-2026-005 — mobile › TC-PRD-047 Tax Mode card visible on mobile invoice editor (16.0s) 2026-10-16T02:59:43.715Z ✘ 97 [mobile-chromium] › e2e/specs/prd-2026-005-mobile.spec.ts:28:6 › PRD-2026-005 — mobile › TC-PRD-048 IGST toggle changes selection on mobile (15.9s) 2026-10-16T02:59:43.971Z ✘ 98 [mobile-chromium] › e2e/specs/prd-2026-005-mobile.spec.ts:48:6 › PRD-2026-005 — mobile › TC-PRD-049 IGST save round-trip on mobile persists to DB (15.9s) 2026-10-16T02:59:44.709Z ✘ 111 [arm] › e2e/specs/prd-2026-007-create-reservation.spec.ts:103:6 › PRD-2026-007 — reservation creation (API semantics) › TC-ARM-205 checkOut ≤ checkIn → rejected [validation] (1.6s) 2026-10-16T02:59:46.683Z ✓ 116 [arm] › e2e/specs/prd-2026-007-rbac-ux.spec.ts:59:6 › PRD-2026-007 — authentication wall (Must 18) › TC-ARM-300 every ARM mutation endpoint returns 401 without a token [Must 18] (438ms) 2026-10-16T02:59:46.789Z ✓ 118 [arm] › e2e/specs/prd-2026-007-rbac-ux.spec.ts:68:6 › PRD-2026-007 — authentication wall (Must 18) › TC-ARM-301 garbage bearer token → 401 [Must 18] (68ms) 2026-10-16T02:59:46.929Z ✓ 119 [arm] › e2e/specs/prd-2026-007-rbac-ux.spec.ts:80:6 › PRD-2026-007 — authentication wall (Must 18) › TC-ARM-302 reads are also walled (checkin detail, finance, guest accounts) [Must 18] (103ms) 2026-10-16T02:59:49.245Z ✘ 115 [arm] › e2e/specs/prd-2026-007-partial-checkin.spec.ts:69:6 › PRD-2026-007 — partial check-in › TC-ARM-070 modal selects 2 of 4 rooms and hands them to the wizard URL [Must 3/S-12] (3.1s) 2026-10-16T02:59:49.643Z ✓ 117 [arm] › e2e/specs/prd-2026-007-create-reservation.spec.ts:121: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.8s) 2026-10-16T02:59:50.191Z ✓ 121 [arm] › e2e/specs/prd-2026-007-create-reservation.spec.ts:156:6 › PRD-2026-007 — reservation creation (API semantics) › TC-ARM-207 unknown roomTypeId → rejected [validation] (486ms) 2026-10-16T02:59:50.287Z - 122 [arm] › e2e/specs/prd-2026-007-create-reservation.spec.ts:174: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-16T02:59:52.382Z ✘ 113 [arm] › e2e/specs/prd-2026-007-finance.spec.ts:105:6 › PRD-2026-007 — reservation-level rollup (G6/Must 8/NG4) › TC-ARM-264 cancellation charge lands at reservation level [NG4/S-23] (2.9s) 2026-10-16T02:59:53.279Z ✓ 123 [arm] › e2e/specs/prd-2026-007-create-reservation.spec.ts:195: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-16T02:59:55.778Z ✘ 124 [arm] › e2e/specs/prd-2026-007-partial-checkin.spec.ts:84:6 › PRD-2026-007 — partial check-in › TC-ARM-071 modal lists only UPCOMING rooms — checked-in and cancelled rooms are absent [Must 3] (3.4s) 2026-10-16T02:59:57.119Z ✘ 63 [chromium] › e2e/specs/prd-2026-005-supplementary-docs.spec.ts:24:6 › PRD-2026-005 — Supplementary documents › TC-PRD-050 Generate dropdown lists all three doc types (1.5m) 2026-10-16T02:59:57.119Z - 128 [chromium] › e2e/specs/prd-2026-005-supplementary-docs.spec.ts:35:6 › PRD-2026-005 — Supplementary documents › TC-PRD-051 Credit Note (full reversal) generates 201 + PDF blob 2026-10-16T02:59:57.119Z - 129 [chromium] › e2e/specs/prd-2026-005-supplementary-docs.spec.ts:65:6 › PRD-2026-005 — Supplementary documents › TC-PRD-053 Debit Note (full) generates 201 + PDF blob 2026-10-16T02:59:57.120Z - 130 [chromium] › e2e/specs/prd-2026-005-supplementary-docs.spec.ts:85:6 › PRD-2026-005 — Supplementary documents › TC-PRD-054 Refund Voucher generates 201 + sequential RV number 2026-10-16T02:59:57.570Z ✓ 125 [arm] › e2e/specs/prd-2026-007-create-reservation.spec.ts:230:6 › PRD-2026-007 — reservation creation (API semantics) › TC-ARM-210 created booking releases its rooms again after cancel [inventory release/S-23] (4.3s) 2026-10-16T02:59:58.051Z ✘ 62 [chromium] › e2e/specs/prd-2026-005-invoice-editor.spec.ts:70:6 › PRD-2026-005 — Invoice editor › TC-PRD-046 Place of Supply input accepts state name (1.6m) 2026-10-16T02:59:58.813Z ✓ 126 [arm] › e2e/specs/prd-2026-007-finance.spec.ts:117: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.4s) 2026-10-16T03:00:01.021Z ✘ 127 [arm] › e2e/specs/prd-2026-007-partial-checkin.spec.ts:97:6 › PRD-2026-007 — partial check-in › TC-ARM-072 group Select All selects every room of the type; Clear All clears [UX] (3.0s) 2026-10-16T03:00:09.696Z ✘ 135 [arm] › e2e/specs/prd-2026-007-partial-checkin.spec.ts:109:6 › PRD-2026-007 — partial check-in › TC-ARM-073 Continue stays disabled with zero rooms selected [UX] (1.9s) 2026-10-16T03:00:11.251Z ✘ 120 [arm] › e2e/specs/prd-2026-007-rbac-ux.spec.ts:95: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] (19.5s) 2026-10-16T03:00:11.978Z ✓ 134 [arm] › e2e/specs/prd-2026-007-slots-multicycle.spec.ts:71: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] (7.4s) 2026-10-16T03:00:12.709Z ✓ 133 [arm] › e2e/specs/prd-2026-007-finance.spec.ts:129:6 › PRD-2026-007 — reservation-level rollup (G6/Must 8/NG4) › TC-ARM-266 totals stable across a full staggered journey [G6 drift check] (13.8s) 2026-10-16T03:00:13.227Z ✘ 112 [arm] › e2e/specs/prd-2026-007-lock-move-swap.spec.ts:110:6 › PRD-2026-007 — Move/Swap lock › TC-ARM-143 UI: lock one room through the modal; reopening pre-selects it [lock/§6 modal] (18.1s) 2026-10-16T03:00:13.761Z ✓ 132 [arm] › e2e/specs/prd-2026-007-room-cards.spec.ts:78:6 › PRD-2026-007 — room cards on Booking Details › TC-ARM-040 multi-room booking renders one card per room with number, type and dates [Must 7/S-02] (14.6s) 2026-10-16T03:00:15.031Z ✘ 136 [arm] › e2e/specs/prd-2026-007-partial-checkin.spec.ts:116:6 › PRD-2026-007 — partial check-in › TC-ARM-074 closing the modal mutates nothing [S-18 analog] (2.8s) 2026-10-16T03:00:16.274Z ✓ 137 [arm] › e2e/specs/prd-2026-007-slots-multicycle.spec.ts:80:6 › PRD-2026-007 — default slot guarantee (CR-1) › TC-ARM-171 single-room booking also carries its default slot [S-01/CR-1] (4.2s) 2026-10-16T03:00:19.100Z ✘ 143 [arm] › e2e/specs/prd-2026-007-partial-checkin.spec.ts:127:6 › PRD-2026-007 — partial check-in › TC-ARM-075 API: checking in a subset flips only those rooms [Must 3/S-08] (493ms) 2026-10-16T03:00:19.116Z ✓ 139 [arm] › e2e/specs/prd-2026-007-finance.spec.ts:144:6 › PRD-2026-007 — charges, discounts, payments, add-ons › TC-ARM-267 add a misc charge → total rises by amount (+tax) [charges] (6.4s) 2026-10-16T03:00:22.188Z ✘ 145 [arm] › e2e/specs/prd-2026-007-partial-checkin.spec.ts:141:6 › PRD-2026-007 — partial check-in › TC-ARM-076 API: untouched rooms keep null actualCheckInTime [audit integrity, §1] (349ms) 2026-10-16T03:00:23.077Z ✓ 142 [arm] › e2e/specs/prd-2026-007-slots-multicycle.spec.ts:87: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] (6.7s) 2026-10-16T03:00:24.237Z ✓ 138 [arm] › e2e/specs/prd-2026-007-rbac-ux.spec.ts:105: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] (10.0s) 2026-10-16T03:00:24.636Z ✓ 144 [arm] › e2e/specs/prd-2026-007-finance.spec.ts:153: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] (5.5s) 2026-10-16T03:00:25.623Z ✘ 147 [arm] › e2e/specs/prd-2026-007-partial-checkin.spec.ts:153:6 › PRD-2026-007 — partial check-in › TC-ARM-077 API: arrival timestamp ≈ now on checked rooms [audit-true arrival] (430ms) 2026-10-16T03:00:26.940Z ✓ 146 [arm] › e2e/specs/prd-2026-007-slots-multicycle.spec.ts:97: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.8s) 2026-10-16T03:00:27.937Z ✓ 149 [arm] › e2e/specs/prd-2026-007-finance.spec.ts:165:6 › PRD-2026-007 — charges, discounts, payments, add-ons › TC-ARM-269 record a payment → due drops by the amount [payments] (3.3s) 2026-10-16T03:00:28.244Z ✘ 150 [arm] › e2e/specs/prd-2026-007-partial-checkin.spec.ts:164:6 › PRD-2026-007 — partial check-in › TC-ARM-078 API: explicit actualCheckInTime is honored [Must 3] (273ms) 2026-10-16T03:00:31.495Z ✘ 153 [arm] › e2e/specs/prd-2026-007-partial-checkin.spec.ts:174: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] (570ms) 2026-10-16T03:00:31.710Z ✓ 148 [arm] › e2e/specs/prd-2026-007-rbac-ux.spec.ts:115: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] (7.4s) 2026-10-16T03:00:36.198Z ✘ 155 [arm] › e2e/specs/prd-2026-007-partial-checkin.spec.ts:187:6 › PRD-2026-007 — partial check-in › TC-ARM-080 full-subset check-in (all rooms at once) lands parent CHECKED_IN [Must 3] (315ms) 2026-10-16T03:00:38.503Z ✘ 141 [arm] › e2e/specs/prd-2026-007-lock-move-swap.spec.ts:128:6 › PRD-2026-007 — Move/Swap lock › TC-ARM-144 UI: Continue stays disabled with no delta from initial state [LMS modal] (20.1s) 2026-10-16T03:00:38.817Z ✘ 156 [arm] › e2e/specs/prd-2026-007-partial-checkin.spec.ts:196: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] (364ms) 2026-10-16T03:00:39.261Z ✘ 152 [arm] › e2e/specs/prd-2026-007-finance.spec.ts:175:6 › PRD-2026-007 — charges, discounts, payments, add-ons › TC-ARM-270 apply a flat discount → total drops accordingly [discounts] (2.5s) 2026-10-16T03:00:40.409Z ✘ 140 [arm] › e2e/specs/prd-2026-007-room-cards.spec.ts:89:6 › PRD-2026-007 — room cards on Booking Details › TC-ARM-041 UPCOMING card is blue; CHECKED_IN card is red [Must 2/G5] (19.2s) 2026-10-16T03:00:40.814Z ✘ 151 [arm] › e2e/specs/prd-2026-007-slots-multicycle.spec.ts:116:6 › PRD-2026-007 — default slot guarantee (CR-1) › TC-ARM-174 default slot window equals the reservation window [CR-1] (3.1s) 2026-10-16T03:00:41.599Z ✘ 158 [arm] › e2e/specs/prd-2026-007-partial-checkin.spec.ts:212:6 › PRD-2026-007 — partial check-in › TC-ARM-082 one-by-one staggering over 5 rooms keeps every intermediate state exact [Must 12] (297ms) 2026-10-16T03:00:43.384Z ✓ 159 [arm] › e2e/specs/prd-2026-007-finance.spec.ts:184:6 › PRD-2026-007 — charges, discounts, payments, add-ons › TC-ARM-271 zero/negative charge amount is rejected [validation] (1.9s) 2026-10-16T03:00:44.305Z ✘ 162 [arm] › e2e/specs/prd-2026-007-partial-checkin.spec.ts:225: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] (306ms) 2026-10-16T03:00:47.690Z ✓ 161 [arm] › e2e/specs/prd-2026-007-slots-multicycle.spec.ts:132: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] (4.3s) 2026-10-16T03:00:48.057Z ✓ 163 [arm] › e2e/specs/prd-2026-007-finance.spec.ts:191:6 › PRD-2026-007 — charges, discounts, payments, add-ons › TC-ARM-272 charges on a fully terminal (all-cancelled) booking are rejected or isolated [G6 dangling-entry guard] (4.6s) 2026-10-16T03:00:50.853Z ✓ 166 [arm] › e2e/specs/prd-2026-007-finance.spec.ts:218:6 › PRD-2026-007 — guest accounts (party) under room ops › TC-ARM-273 booking carries at least one default guest account [party model] (2.7s) 2026-10-16T03:00:51.641Z ✘ 164 [arm] › e2e/specs/prd-2026-007-partial-checkin.spec.ts:236:6 › PRD-2026-007 — partial check-in › TC-ARM-084 UI reflects partial state immediately after API check-in + reload [G5] (4.1s) 2026-10-16T03:00:51.977Z ✓ 165 [arm] › e2e/specs/prd-2026-007-slots-multicycle.spec.ts:143: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] (4.3s) 2026-10-16T03:00:53.465Z ✓ 167 [arm] › e2e/specs/prd-2026-007-finance.spec.ts:225:6 › PRD-2026-007 — guest accounts (party) under room ops › TC-ARM-274 guest-account balances reconcile with the finance read [party vs finance] (2.6s) 2026-10-16T03:00:58.302Z ✘ 169 [arm] › e2e/specs/prd-2026-007-partial-checkin.spec.ts:245:6 › PRD-2026-007 — partial check-in › TC-ARM-085 reservations list pill shows the partial state [Must 12/G5] (4.0s) 2026-10-16T03:00:58.732Z ✓ 168 [arm] › e2e/specs/prd-2026-007-slots-multicycle.spec.ts:157:6 › PRD-2026-007 — multi-cycle via re-check-in (G7/OQ-6) › TC-ARM-177 reservation does NOT close after cycle-1 checkout while cycle 2 exists [CR-3/S-31] (6.7s) 2026-10-16T03:01:02.168Z ✘ 160 [arm] › e2e/specs/prd-2026-007-room-cards.spec.ts:100:6 › PRD-2026-007 — room cards on Booking Details › TC-ARM-042 CHECKED_IN room past its checkout time shows checkout-due orange [Must 2] (16.3s) 2026-10-16T03:01:02.940Z ✘ 172 [arm] › e2e/specs/prd-2026-007-partial-checkin.spec.ts:258:6 › PRD-2026-007 — partial check-in › TC-ARM-086 modal on a single-room booking lists exactly that room [S-01 equivalence] (2.2s) 2026-10-16T03:01:04.415Z ✓ 171 [arm] › e2e/specs/prd-2026-007-slots-multicycle.spec.ts:166: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] (5.6s) 2026-10-16T03:01:05.496Z ✘ 170 [arm] › e2e/specs/prd-2026-007-finance.spec.ts:238: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-16T03:01:05.736Z ✘ 157 [arm] › e2e/specs/prd-2026-007-lock-move-swap.spec.ts:135:6 › PRD-2026-007 — Move/Swap lock › TC-ARM-145 UI: CANCELLED/NO_SHOW rooms are not offered for locking [LMS eligibility] (22.2s) 2026-10-16T03:01:07.225Z ✓ 175 [arm] › e2e/specs/prd-2026-007-slots-multicycle.spec.ts:176: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.8s) 2026-10-16T03:01:09.013Z ✘ 174 [arm] › e2e/specs/prd-2026-007-partial-checkin.spec.ts:267:6 › PRD-2026-007 — partial check-in › TC-ARM-087 selected chip toggles off on second click (deselect) [UX] (3.7s) 2026-10-16T03:01:10.279Z ✓ 176 [arm] › e2e/specs/prd-2026-007-finance.spec.ts:256: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.2s) 2026-10-16T03:01:14.060Z ✓ 179 [arm] › e2e/specs/prd-2026-007-finance.spec.ts:271:6 › PRD-2026-007 — balance-at-checkout gate (Must 14/16) › TC-ARM-277 room checkout with outstanding balance: gate behavior pinned [ship-blocker risk row] (3.7s) 2026-10-16T03:01:16.809Z ✓ 178 [arm] › e2e/specs/prd-2026-007-lock-move-swap.spec.ts:148:6 › PRD-2026-007 — Move/Swap lock › TC-ARM-146 UI: terminal-only booking hides the Lock/Unlock entry entirely [LMS-003] (8.5s) 2026-10-16T03:01:16.998Z ✘ 180 [arm] › e2e/specs/prd-2026-007-partial-checkin.spec.ts:277:6 › PRD-2026-007 — partial check-in › TC-ARM-088 navigating away from the wizard without confirming leaves rooms UPCOMING [S-18] (4.1s) 2026-10-16T03:01:17.125Z ✘ 177 [arm] › e2e/specs/prd-2026-007-slots-multicycle.spec.ts:189:6 › PRD-2026-007 — multi-cycle via re-check-in (G7/OQ-6) › TC-ARM-180 re-check-in into a different physical room via targetRoomId [G7] (4.6s) 2026-10-16T03:01:18.064Z ✓ 181 [arm] › e2e/specs/prd-2026-007-finance.spec.ts:290: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.0s) 2026-10-16T03:01:24.174Z ✘ 184 [arm] › e2e/specs/prd-2026-007-partial-checkin.spec.ts:289:6 › PRD-2026-007 — partial check-in › TC-ARM-089 fully-terminal booking offers no partial check-in entry [state gating] (3.9s) 2026-10-16T03:01:25.123Z ✓ 185 [arm] › e2e/specs/prd-2026-007-slots-multicycle.spec.ts:210:6 › PRD-2026-007 — multi-cycle via re-check-in (G7/OQ-6) › TC-ARM-181 multi-room re-check-in (2 rooms into the new cycle) [G7] (5.1s) 2026-10-16T03:01:26.683Z ✓ 183 [arm] › e2e/specs/prd-2026-007-finance.spec.ts:307: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] (8.4s) 2026-10-16T03:01:26.973Z ✘ 114 [arm] › e2e/specs/prd-2026-007-noshow-cancel.spec.ts:62:6 › PRD-2026-007 — no-show per room › TC-ARM-100 UI: single-room no-show leaves siblings untouched [Must 4/S-11/§6.3] (1.6m) 2026-10-16T03:01:28.183Z ✘ 173 [arm] › e2e/specs/prd-2026-007-room-cards.spec.ts:121:7 › PRD-2026-007 — room cards on Booking Details › TC-ARM-043 CANCELLED room card is grey and stays listed [Must 2] (20.0s) 2026-10-16T03:01:30.362Z ✘ 187 [arm] › e2e/specs/prd-2026-007-partial-checkin.spec.ts:298:6 › PRD-2026-007 — partial check-in › TC-ARM-090 parent transitions live in a second context (fresh read, no cross-session staleness) [S-19-lite] (3.2s) 2026-10-16T03:01:30.362Z - 191 [arm] › e2e/specs/prd-2026-007-partial-checkin.spec.ts:319:6 › TC-ARM-091 §6.2 story: 10-room block, 6 arrive at 3pm, 4 at 5pm — full wizard journey [S-08/S-12] 2026-10-16T03:01:31.841Z ✘ 186 [arm] › e2e/specs/prd-2026-007-slots-multicycle.spec.ts:220: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] (5.3s) 2026-10-16T03:01:38.270Z ✓ 192 [arm] › e2e/specs/prd-2026-007-status-aggregation.spec.ts:146:7 › PRD-2026-007 — CR-2 status aggregation (API) › TC-ARM-001 all UPCOMING → UPCOMING [CR-2/S-02] (4.4s) 2026-10-16T03:01:39.712Z ✘ 182 [arm] › e2e/specs/prd-2026-007-lock-move-swap.spec.ts:159: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] (19.5s) 2026-10-16T03:01:40.285Z ✘ 193 [arm] › e2e/specs/prd-2026-007-slots-multicycle.spec.ts:254:6 › PRD-2026-007 — multi-cycle via re-check-in (G7/OQ-6) › TC-ARM-183 slot windows of sequential cycles do not overlap [data sanity] (4.6s) 2026-10-16T03:01:41.018Z ✘ 131 [arm] › e2e/specs/prd-2026-007-create-reservation.spec.ts:244: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] (1.6m) 2026-10-16T03:01:41.093Z ✓ 194 [arm] › e2e/specs/prd-2026-007-status-aggregation.spec.ts:146:7 › PRD-2026-007 — CR-2 status aggregation (API) › TC-ARM-002 all CHECKED_IN → CHECKED_IN [CR-2/S-04] (2.8s) 2026-10-16T03:01:46.015Z ✓ 196 [arm] › e2e/specs/prd-2026-007-status-aggregation.spec.ts:146:7 › PRD-2026-007 — CR-2 status aggregation (API) › TC-ARM-003 all CHECKED_OUT → CHECKED_OUT (terminal close) [CR-2/CR-3] (4.9s) 2026-10-16T03:01:46.704Z ✘ 188 [arm] › e2e/specs/prd-2026-007-finance.spec.ts:316:6 › PRD-2026-007 — finance surfaces in the UI › TC-ARM-280 guest-account screen lists the booking's accounts [party UI] (14.8s) 2026-10-16T03:01:46.798Z ✓ 195 [arm] › e2e/specs/prd-2026-007-lock-move-swap.spec.ts:177:6 › PRD-2026-007 — Move/Swap lock › TC-ARM-148 API: lock with a foreign roomInstanceId is rejected [tenancy] (4.9s) 2026-10-16T03:01:47.263Z ✓ 197 [arm] › e2e/specs/prd-2026-007-slots-multicycle.spec.ts:262: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] (5.0s) 2026-10-16T03:01:50.409Z ✓ 199 [arm] › e2e/specs/prd-2026-007-status-aggregation.spec.ts:146:7 › PRD-2026-007 — CR-2 status aggregation (API) › TC-ARM-004 all CANCELLED → CANCELLED [CR-2/S-05] (4.3s) 2026-10-16T03:01:51.109Z ✓ 198 [arm] › e2e/specs/prd-2026-007-create-reservation.spec.ts:253: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] (8.0s) 2026-10-16T03:01:53.751Z ✘ 200 [arm] › e2e/specs/prd-2026-007-lock-move-swap.spec.ts:190:6 › PRD-2026-007 — Move/Swap/Bulk-assign Phase-2c contract (PRD-GAP) › TC-ARM-149 move/preview → 422 Phase-2c stub [Must 17 GAP] (2.2s) 2026-10-16T03:01:55.449Z ✓ 203 [arm] › e2e/specs/prd-2026-007-status-aggregation.spec.ts:146:7 › PRD-2026-007 — CR-2 status aggregation (API) › TC-ARM-005 all NO_SHOW → NO_SHOW [CR-2] (5.0s) 2026-10-16T03:01:58.099Z ✘ 190 [arm] › e2e/specs/prd-2026-007-room-cards.spec.ts:121:7 › PRD-2026-007 — room cards on Booking Details › TC-ARM-044 NO_SHOW room card is grey and stays listed [Must 2] (22.1s) 2026-10-16T03:01:58.777Z ✓ 205 [arm] › e2e/specs/prd-2026-007-status-aggregation.spec.ts:146:7 › PRD-2026-007 — CR-2 status aggregation (API) › TC-ARM-006 1 CHECKED_IN + 2 UPCOMING → PARTIAL_CHECKED_IN [CR-2/S-03] (3.3s) 2026-10-16T03:02:01.290Z ✘ 206 [arm] › e2e/specs/prd-2026-007-lock-move-swap.spec.ts:201:6 › PRD-2026-007 — Move/Swap/Bulk-assign Phase-2c contract (PRD-GAP) › TC-ARM-150 move commit → 422 Phase-2c stub [Must 6 GAP] (3.3s) 2026-10-16T03:02:02.919Z ✓ 207 [arm] › e2e/specs/prd-2026-007-status-aggregation.spec.ts:146:7 › PRD-2026-007 — CR-2 status aggregation (API) › TC-ARM-007 4 CHECKED_IN + 1 UPCOMING → PARTIAL_CHECKED_IN [CR-2] (4.1s) 2026-10-16T03:02:06.664Z ✓ 210 [arm] › e2e/specs/prd-2026-007-status-aggregation.spec.ts:146:7 › PRD-2026-007 — CR-2 status aggregation (API) › TC-ARM-008 1 CHECKED_OUT + 1 CHECKED_IN → PARTIALLY_CHECKED_OUT (stays open) [CR-2/CR-3/S-31] (3.7s) 2026-10-16T03:02:09.700Z ✘ 202 [arm] › e2e/specs/prd-2026-007-finance.spec.ts:323:6 › PRD-2026-007 — finance surfaces in the UI › TC-ARM-281 details payment summary reflects an added charge after reload [Must 8 UI] (18.0s) 2026-10-16T03:02:09.700Z - 212 [arm] › e2e/specs/prd-2026-007-finance.spec.ts:340:6 › TC-ARM-282 folio list shows the booking folio; detail opens [folio] 2026-10-16T03:02:09.700Z - 213 [arm] › e2e/specs/prd-2026-007-finance.spec.ts:341:6 › TC-ARM-283 link a charge to a folio; folio totals update [folio] 2026-10-16T03:02:09.700Z - 214 [arm] › e2e/specs/prd-2026-007-finance.spec.ts:342:6 › TC-ARM-284 unlink restores the unassigned pool [folio] 2026-10-16T03:02:09.700Z - 215 [arm] › e2e/specs/prd-2026-007-finance.spec.ts:343:6 › TC-ARM-285 folio totals reconcile with the finance read after a room cancel [G6] 2026-10-16T03:02:09.701Z - 216 [arm] › e2e/specs/prd-2026-007-finance.spec.ts:344:6 › TC-ARM-286 move charges between guest accounts shifts balances, total unchanged [NG4] 2026-10-16T03:02:09.701Z - 217 [arm] › e2e/specs/prd-2026-007-finance.spec.ts:345:6 › TC-ARM-287 locked (checked-out) account rejects charge moves [party lock] 2026-10-16T03:02:09.701Z - 218 [arm] › e2e/specs/prd-2026-007-finance.spec.ts:346:6 › TC-ARM-288 discount scoped to a guest account [discounts] 2026-10-16T03:02:09.701Z - 219 [arm] › e2e/specs/prd-2026-007-finance.spec.ts:347:6 › TC-ARM-289 payment distribution strategies (EQUAL/SINGLE/MANUAL) [payments] 2026-10-16T03:02:09.701Z - 220 [arm] › e2e/specs/prd-2026-007-finance.spec.ts:348:6 › TC-ARM-290 invoice generation still reservation-scoped after partial ops [NG4/PRD-2026-005 seam] 2026-10-16T03:02:09.701Z - 221 [arm] › e2e/specs/prd-2026-007-finance.spec.ts:349:6 › TC-ARM-291 ledger entries balanced after the full §6.2 journey (no dangling entry) [G6] 2026-10-16T03:02:10.085Z ✘ 209 [arm] › e2e/specs/prd-2026-007-lock-move-swap.spec.ts:212:6 › PRD-2026-007 — Move/Swap/Bulk-assign Phase-2c contract (PRD-GAP) › TC-ARM-151 swap/preview → 422 Phase-2c stub [Must 16 GAP] (3.9s) 2026-10-16T03:02:11.212Z ✘ 201 [arm] › e2e/specs/prd-2026-007-slots-multicycle.spec.ts:269: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] (19.2s) 2026-10-16T03:02:11.556Z ✓ 211 [arm] › e2e/specs/prd-2026-007-status-aggregation.spec.ts:146: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.9s) 2026-10-16T03:02:11.820Z ✘ 204 [arm] › e2e/specs/prd-2026-007-create-reservation.spec.ts:263:6 › PRD-2026-007 — created reservations in the UI › TC-ARM-213 details page total reflects rooms × nightly price [finance surface] (15.7s) 2026-10-16T03:02:11.821Z - 225 [arm] › e2e/specs/prd-2026-007-create-reservation.spec.ts:286:6 › TC-ARM-214 UI create: single-room reservation end-to-end [§6.7] 2026-10-16T03:02:11.821Z - 226 [arm] › e2e/specs/prd-2026-007-create-reservation.spec.ts:287:6 › TC-ARM-215 UI create: multi-room with per-night rate visible [§6.7] 2026-10-16T03:02:11.821Z - 227 [arm] › e2e/specs/prd-2026-007-create-reservation.spec.ts:288:6 › TC-ARM-216 UI create: availability cap blocks over-request up front [Must 10/S-27] 2026-10-16T03:02:11.821Z - 228 [arm] › e2e/specs/prd-2026-007-create-reservation.spec.ts:289:6 › TC-ARM-217 UI create: error copy names the available count [S-27] 2026-10-16T03:02:11.821Z - 229 [arm] › e2e/specs/prd-2026-007-create-reservation.spec.ts:290:6 › TC-ARM-218 UI create: double-submit guard (no duplicate booking) [S-17] 2026-10-16T03:02:11.822Z - 230 [arm] › e2e/specs/prd-2026-007-create-reservation.spec.ts:291:6 › TC-ARM-219 UI create: created booking visible in stay view immediately [§6.7] 2026-10-16T03:02:12.915Z ✘ 222 [arm] › e2e/specs/prd-2026-007-stay-view.spec.ts:85: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] (1.5s) 2026-10-16T03:02:13.906Z ✘ 154 [arm] › e2e/specs/prd-2026-007-rbac-ux.spec.ts:129:6 › PRD-2026-007 — UX guarantees (§3, G5) › TC-ARM-306 no-show flow is ≤3 interactions from booking details [§3 ≤3-click rule] (1.6m) 2026-10-16T03:02:15.399Z ✓ 224 [arm] › e2e/specs/prd-2026-007-status-aggregation.spec.ts:146:7 › PRD-2026-007 — CR-2 status aggregation (API) › TC-ARM-010 UPCOMING + CHECKED_IN + CHECKED_OUT → VARIED_STATUS [CR-2 else-branch] (3.8s) 2026-10-16T03:02:16.008Z ✘ 232 [arm] › e2e/specs/prd-2026-007-stay-view.spec.ts:92: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] (1.2s) 2026-10-16T03:02:16.904Z ✘ 223 [arm] › e2e/specs/prd-2026-007-lock-move-swap.spec.ts:223:6 › PRD-2026-007 — Move/Swap/Bulk-assign Phase-2c contract (PRD-GAP) › TC-ARM-152 swap commit → 422 Phase-2c stub [Must 16/S-30 GAP] (4.0s) 2026-10-16T03:02:17.272Z ✓ 231 [arm] › e2e/specs/prd-2026-007-slots-multicycle.spec.ts:280: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-16T03:02:18.617Z ✓ 236 [arm] › e2e/specs/prd-2026-007-slots-multicycle.spec.ts:301: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] (568ms) 2026-10-16T03:02:18.978Z ✓ 234 [arm] › e2e/specs/prd-2026-007-status-aggregation.spec.ts:146:7 › PRD-2026-007 — CR-2 status aggregation (API) › TC-ARM-011 CANCELLED + UPCOMING → UPCOMING (collapse; deviates from PRD §6.4 prose) [CR-2 collapse/S-23] (3.6s) 2026-10-16T03:02:19.796Z ✘ 235 [arm] › e2e/specs/prd-2026-007-stay-view.spec.ts:105:6 › PRD-2026-007 — stay view blocks per room/slot › TC-ARM-232 UPCOMING reservation block is purple family [stay view colors] (1.4s) 2026-10-16T03:02:20.781Z ✓ 237 [arm] › e2e/specs/prd-2026-007-lock-move-swap.spec.ts:234:6 › PRD-2026-007 — Move/Swap/Bulk-assign Phase-2c contract (PRD-GAP) › TC-ARM-153 bulk-assign → 422 Phase-2c stub [Must 10/S-27 GAP] (2.1s) 2026-10-16T03:02:20.862Z ✓ 240 [arm] › e2e/specs/prd-2026-007-lock-move-swap.spec.ts:243:6 › PRD-2026-007 — Move/Swap/Bulk-assign Phase-2c contract (PRD-GAP) › TC-ARM-154 stubs still enforce auth: unauthenticated move → 401, not 422 [Must 18] (51ms) 2026-10-16T03:02:21.902Z ✓ 238 [arm] › e2e/specs/prd-2026-007-status-aggregation.spec.ts:146:7 › PRD-2026-007 — CR-2 status aggregation (API) › TC-ARM-012 NO_SHOW + UPCOMING → UPCOMING (collapse) [CR-2 collapse/S-11] (2.9s) 2026-10-16T03:02:23.349Z ✘ 239 [arm] › e2e/specs/prd-2026-007-stay-view.spec.ts:112:6 › PRD-2026-007 — stay view blocks per room/slot › TC-ARM-233 CHECKED_IN room block is red family [stay view colors] (2.3s) 2026-10-16T03:02:24.168Z ✘ 208 [arm] › e2e/specs/prd-2026-007-room-cards.spec.ts:121:7 › PRD-2026-007 — room cards on Booking Details › TC-ARM-045 CHECKED_OUT room card is grey and stays listed [Must 2] (19.8s) 2026-10-16T03:02:25.173Z ✓ 242 [arm] › e2e/specs/prd-2026-007-status-aggregation.spec.ts:146:7 › PRD-2026-007 — CR-2 status aggregation (API) › TC-ARM-013 CANCELLED + CHECKED_IN → CHECKED_IN (collapse) [CR-2 collapse] (3.3s) 2026-10-16T03:02:28.082Z ✘ 243 [arm] › e2e/specs/prd-2026-007-stay-view.spec.ts:121:6 › PRD-2026-007 — stay view blocks per room/slot › TC-ARM-234 CHECKED_OUT room block is grey family [stay view colors] (2.6s) 2026-10-16T03:02:28.351Z ✓ 241 [arm] › e2e/specs/prd-2026-007-lock-move-swap.spec.ts:251:6 › PRD-2026-007 — Move/Swap/Bulk-assign Phase-2c contract (PRD-GAP) › TC-ARM-155 UI: no dead-end Move/Swap affordance is exposed while the backend is stubbed [UX] (7.3s) 2026-10-16T03:02:28.352Z - 246 [arm] › e2e/specs/prd-2026-007-lock-move-swap.spec.ts:272:6 › TC-ARM-156 move shows Current → New → Price diff before confirm [S-28] 2026-10-16T03:02:28.353Z - 247 [arm] › e2e/specs/prd-2026-007-lock-move-swap.spec.ts:273:6 › TC-ARM-157 move sets isDirty on the vacated room and recalculates finance [Must 6/S-26] 2026-10-16T03:02:28.355Z - 248 [arm] › e2e/specs/prd-2026-007-lock-move-swap.spec.ts:274:6 › TC-ARM-158 swap exchanges two occupied rooms bidirectionally [S-30] 2026-10-16T03:02:28.355Z - 249 [arm] › e2e/specs/prd-2026-007-lock-move-swap.spec.ts:275:6 › TC-ARM-159 swap moves room add-ons with each room [Must 16] 2026-10-16T03:02:28.355Z - 250 [arm] › e2e/specs/prd-2026-007-lock-move-swap.spec.ts:276:6 › TC-ARM-160 bulk auto-allocate fills by room type without over-allocating [Must 10] 2026-10-16T03:02:28.355Z - 251 [arm] › e2e/specs/prd-2026-007-lock-move-swap.spec.ts:277:6 › TC-ARM-161 bulk assignment blocks requests beyond availability up front [S-27] 2026-10-16T03:02:28.355Z - 252 [arm] › e2e/specs/prd-2026-007-lock-move-swap.spec.ts:278:6 › TC-ARM-162 move to a locked room is prevented [lock semantics] 2026-10-16T03:02:28.893Z ✓ 245 [arm] › e2e/specs/prd-2026-007-status-aggregation.spec.ts:146:7 › PRD-2026-007 — CR-2 status aggregation (API) › TC-ARM-014 NO_SHOW + CHECKED_IN → CHECKED_IN (collapse) [CR-2 collapse] (3.7s) 2026-10-16T03:02:29.803Z - 253 [arm] › e2e/specs/prd-2026-007-lock-move-swap.spec.ts:279:6 › TC-ARM-163 swap respects Move/Swap locks on either side [lock semantics] 2026-10-16T03:02:31.079Z ✘ 244 [arm] › e2e/specs/prd-2026-007-room-cards.spec.ts:141: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.0s) 2026-10-16T03:02:31.240Z ✘ 255 [arm] › e2e/specs/prd-2026-007-stay-view.spec.ts:131: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] (1.2s) 2026-10-16T03:02:32.565Z ✓ 254 [arm] › e2e/specs/prd-2026-007-status-aggregation.spec.ts:146:7 › PRD-2026-007 — CR-2 status aggregation (API) › TC-ARM-015 CANCELLED + CHECKED_OUT → CHECKED_OUT (collapse) [CR-2 collapse] (3.7s) 2026-10-16T03:02:34.384Z ✘ 257 [arm] › e2e/specs/prd-2026-007-stay-view.spec.ts:159:6 › PRD-2026-007 — stay view blocks per room/slot › TC-ARM-236 cancelled room frees its row — block no longer rendered [inventory release] (1.5s) 2026-10-16T03:02:36.135Z ✓ 258 [arm] › e2e/specs/prd-2026-007-status-aggregation.spec.ts:146:7 › PRD-2026-007 — CR-2 status aggregation (API) › TC-ARM-016 CANCELLED + NO_SHOW (mixed terminals only) → VARIED_STATUS [CR-2 else/S-07] (3.5s) 2026-10-16T03:02:36.740Z ✓ 256 [arm] › e2e/specs/prd-2026-007-room-cards.spec.ts:164: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.0s) 2026-10-16T03:02:37.500Z ✘ 259 [arm] › e2e/specs/prd-2026-007-stay-view.spec.ts:169:6 › PRD-2026-007 — stay view blocks per room/slot › TC-ARM-237 no-show room frees its row likewise [inventory release] (1.4s) 2026-10-16T03:02:40.750Z ✘ 262 [arm] › e2e/specs/prd-2026-007-stay-view.spec.ts:179: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] (1.4s) 2026-10-16T03:02:42.305Z ✓ 261 [arm] › e2e/specs/prd-2026-007-room-cards.spec.ts:175:6 › PRD-2026-007 — room cards on Booking Details › TC-ARM-048 per-room date range on the card matches the reservation window [Must 7] (5.5s) 2026-10-16T03:02:44.081Z ✘ 263 [arm] › e2e/specs/prd-2026-007-stay-view.spec.ts:207: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] (1.5s) 2026-10-16T03:02:47.135Z ✘ 265 [arm] › e2e/specs/prd-2026-007-stay-view.spec.ts:240:6 › PRD-2026-007 — stay view blocks per room/slot › TC-ARM-240 block context menu offers status-appropriate actions [stay view menu] (1.4s) 2026-10-16T03:02:50.269Z ✘ 266 [arm] › e2e/specs/prd-2026-007-stay-view.spec.ts:252: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] (1.4s) 2026-10-16T03:02:53.035Z ✘ 267 [arm] › e2e/specs/prd-2026-007-stay-view.spec.ts:262:6 › PRD-2026-007 — stay view blocks per room/slot › TC-ARM-242 stay view reflects a mutation after reload (no stale grid) [freshness] (1.3s) 2026-10-16T03:02:54.829Z ✘ 260 [arm] › e2e/specs/prd-2026-007-status-aggregation.spec.ts:146:7 › PRD-2026-007 — CR-2 status aggregation (API) › TC-ARM-017 CANCELLED + NO_SHOW + CHECKED_OUT → VARIED_STATUS [CR-2/S-07] (4.4s) 2026-10-16T03:02:57.810Z ✓ 268 [arm] › e2e/specs/prd-2026-007-stay-view.spec.ts:273:6 › PRD-2026-007 — stay view blocks per room/slot › TC-ARM-243 every clean inventory room has a row in the grid [stay view completeness] (3.4s) 2026-10-16T03:02:59.085Z ✘ 270 [arm] › e2e/specs/prd-2026-007-stay-view.spec.ts:281: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] (1.1s) 2026-10-16T03:03:00.314Z ✓ 269 [arm] › e2e/specs/prd-2026-007-status-aggregation.spec.ts:146:7 › PRD-2026-007 — CR-2 status aggregation (API) › TC-ARM-018 CANCELLED + UPCOMING + CHECKED_IN → PARTIAL_CHECKED_IN (terminal ignored) [CR-2] (3.6s) 2026-10-16T03:03:01.339Z ✘ 264 [arm] › e2e/specs/prd-2026-007-room-cards.spec.ts:189:6 › PRD-2026-007 — room cards on Booking Details › TC-ARM-049 checked-in card shows actual in-time; checked-out shows in+out times [Must 7] (15.5s) 2026-10-16T03:03:04.054Z ✓ 271 [arm] › e2e/specs/prd-2026-007-stay-view.spec.ts:307:6 › PRD-2026-007 — stay view blocks per room/slot › TC-ARM-245 stay view loads without console errors or 5xx [quality gate] (3.7s) 2026-10-16T03:03:04.543Z - 273 [arm] › e2e/specs/prd-2026-007-room-cards.spec.ts:205:6 › PRD-2026-007 — room cards on Booking Details › TC-ARM-050 >6-room booking collapses with an expand control that reveals all rooms [S-13] 2026-10-16T03:03:05.357Z ✓ 272 [arm] › e2e/specs/prd-2026-007-status-aggregation.spec.ts:146:7 › PRD-2026-007 — CR-2 status aggregation (API) › TC-ARM-019 NO_SHOW + CHECKED_IN + CHECKED_OUT → PARTIALLY_CHECKED_OUT (terminal ignored) [CR-2] (5.0s) 2026-10-16T03:03:07.023Z ✘ 189 [arm] › e2e/specs/prd-2026-007-noshow-cancel.spec.ts:83:6 › PRD-2026-007 — no-show per room › TC-ARM-101 UI: reason is required — CTA disabled while empty [Must 4] (1.5m) 2026-10-16T03:03:07.927Z ✓ 276 [arm] › e2e/specs/prd-2026-007-status-aggregation.spec.ts:146:7 › PRD-2026-007 — CR-2 status aggregation (API) › TC-ARM-020 single room: created → UPCOMING (zero-regression) [S-01/Must 9] (2.5s) 2026-10-16T03:03:08.402Z ✓ 274 [arm] › e2e/specs/prd-2026-007-stay-view.spec.ts:319: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] (4.3s) 2026-10-16T03:03:08.403Z - 279 [arm] › e2e/specs/prd-2026-007-stay-view.spec.ts:334:6 › TC-ARM-247 maintenance blocks render alongside ARM blocks [regression smoke] 2026-10-16T03:03:08.403Z - 280 [arm] › e2e/specs/prd-2026-007-stay-view.spec.ts:335:6 › TC-ARM-248 date navigation shifts the visible window and keeps blocks aligned [stay view] 2026-10-16T03:03:08.425Z - 281 [arm] › e2e/specs/prd-2026-007-stay-view.spec.ts:336:6 › TC-ARM-249 block spans exactly its slot’s day-cells (per-cell boundary audit) [slots] 2026-10-16T03:03:10.353Z ✓ 278 [arm] › e2e/specs/prd-2026-007-status-aggregation.spec.ts:146:7 › PRD-2026-007 — CR-2 status aggregation (API) › TC-ARM-021 single room: check-in → CHECKED_IN [S-01/Must 9] (2.4s) 2026-10-16T03:03:13.453Z ✓ 282 [arm] › e2e/specs/prd-2026-007-status-aggregation.spec.ts:146:7 › PRD-2026-007 — CR-2 status aggregation (API) › TC-ARM-022 single room: checkout → CHECKED_OUT (closed) [S-01/CR-3] (3.1s) 2026-10-16T03:03:16.093Z ✓ 283 [arm] › e2e/specs/prd-2026-007-status-aggregation.spec.ts:146:7 › PRD-2026-007 — CR-2 status aggregation (API) › TC-ARM-023 single room: cancel → CANCELLED [S-23] (2.6s) 2026-10-16T03:03:19.070Z ✓ 284 [arm] › e2e/specs/prd-2026-007-status-aggregation.spec.ts:146:7 › PRD-2026-007 — CR-2 status aggregation (API) › TC-ARM-024 single room: no-show → NO_SHOW [S-22] (3.0s) 2026-10-16T03:03:23.585Z ✘ 275 [arm] › e2e/specs/prd-2026-007-room-cards.spec.ts:223: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] (15.7s) 2026-10-16T03:03:24.803Z ✓ 285 [arm] › e2e/specs/prd-2026-007-status-aggregation.spec.ts:146:7 › PRD-2026-007 — CR-2 status aggregation (API) › TC-ARM-025 5-room staggered full journey lands CHECKED_OUT [G2/G3] (5.7s) 2026-10-16T03:03:29.167Z ✓ 287 [arm] › e2e/specs/prd-2026-007-status-aggregation.spec.ts:154: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-16T03:03:30.335Z ✓ 286 [arm] › e2e/specs/prd-2026-007-room-cards.spec.ts:239:6 › PRD-2026-007 — room cards on Booking Details › TC-ARM-052 card shows the per-night price [Must 7] (6.4s) 2026-10-16T03:03:32.430Z ✓ 288 [arm] › e2e/specs/prd-2026-007-status-aggregation.spec.ts:154:7 › PRD-2026-007 — CR-2 status aggregation (API) › TC-ARM-027 cannot NO_SHOW a CHECKED_IN room [state machine] (3.2s) 2026-10-16T03:03:35.434Z ✓ 290 [arm] › e2e/specs/prd-2026-007-status-aggregation.spec.ts:154:7 › PRD-2026-007 — CR-2 status aggregation (API) › TC-ARM-028 cannot CHECK_OUT an UPCOMING room [state machine] (3.0s) 2026-10-16T03:03:35.638Z ✓ 289 [arm] › e2e/specs/prd-2026-007-room-cards.spec.ts:251:6 › PRD-2026-007 — room cards on Booking Details › TC-ARM-053 card shows a meal-plan label [Must 7] (5.3s) 2026-10-16T03:03:40.079Z ✓ 291 [arm] › e2e/specs/prd-2026-007-status-aggregation.spec.ts:154:7 › PRD-2026-007 — CR-2 status aggregation (API) › TC-ARM-029 cannot CHECK_IN a CANCELLED room [state machine] (4.6s) 2026-10-16T03:03:43.153Z ✓ 292 [arm] › e2e/specs/prd-2026-007-room-cards.spec.ts:259:6 › PRD-2026-007 — room cards on Booking Details › TC-ARM-054 parent status chip reflects CR-2 for a mixed set [CR-2/Must 12] (7.5s) 2026-10-16T03:03:43.218Z ✓ 293 [arm] › e2e/specs/prd-2026-007-status-aggregation.spec.ts:154:7 › PRD-2026-007 — CR-2 status aggregation (API) › TC-ARM-030 cannot CHECK_IN a NO_SHOW room (late guest ⇒ new reservation) [S-22] (3.1s) 2026-10-16T03:03:47.278Z ✓ 295 [arm] › e2e/specs/prd-2026-007-status-aggregation.spec.ts:154:7 › PRD-2026-007 — CR-2 status aggregation (API) › TC-ARM-031 cannot CHECK_IN an already CHECKED_OUT room [CR-3 terminal] (4.0s) 2026-10-16T03:03:49.490Z ✘ 233 [arm] › e2e/specs/prd-2026-007-rbac-ux.spec.ts:144:6 › PRD-2026-007 — UX guarantees (§3, G5) › TC-ARM-307 state-machine violations surface as visible errors, not silent failures [S-19 family] (1.5m) 2026-10-16T03:03:49.753Z ✓ 294 [arm] › e2e/specs/prd-2026-007-room-cards.spec.ts:271:6 › PRD-2026-007 — room cards on Booking Details › TC-ARM-055 card count equals live RoomInstance count after a cancel [consistency] (6.6s) 2026-10-16T03:03:50.051Z ✓ 296 [arm] › e2e/specs/prd-2026-007-status-aggregation.spec.ts:154: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] (2.8s) 2026-10-16T03:03:54.305Z ✓ 298 [arm] › e2e/specs/prd-2026-007-status-aggregation.spec.ts:171: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] (4.2s) 2026-10-16T03:03:57.018Z ✓ 300 [arm] › e2e/specs/prd-2026-007-status-aggregation.spec.ts:188:6 › PRD-2026-007 — CR-2 status aggregation (API) › TC-ARM-034 check-in with empty roomInstanceIds → validation error, no mutation (2.7s) 2026-10-16T03:03:57.117Z ✓ 299 [arm] › e2e/specs/prd-2026-007-rbac-ux.spec.ts:167:6 › PRD-2026-007 — UX guarantees (§3, G5) › TC-ARM-308 happy-path journey emits no console errors and no 5xx [§6 quality gate] (6.1s) 2026-10-16T03:04:01.245Z ✓ 301 [arm] › e2e/specs/prd-2026-007-status-aggregation.spec.ts:196:6 › PRD-2026-007 — CR-2 status aggregation (API) › TC-ARM-035 check-in with a foreign roomInstanceId → 4xx, foreign booking untouched (4.2s) 2026-10-16T03:04:22.370Z ✓ 303 [arm] › e2e/specs/prd-2026-007-status-aggregation.spec.ts:205: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] (6.2s) 2026-10-16T03:04:43.578Z ✘ 277 [arm] › e2e/specs/prd-2026-007-noshow-cancel.spec.ts:90:6 › PRD-2026-007 — no-show per room › TC-ARM-102 UI: all-rooms no-show lands parent NO_SHOW [CR-2] (1.5m) 2026-10-16T03:04:47.273Z ✓ 304 [arm] › e2e/specs/prd-2026-007-noshow-cancel.spec.ts:103: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-16T03:04:49.837Z ✓ 305 [arm] › e2e/specs/prd-2026-007-noshow-cancel.spec.ts:121: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] (2.6s) 2026-10-16T03:04:52.514Z ✓ 306 [arm] › e2e/specs/prd-2026-007-noshow-cancel.spec.ts:131: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] (2.7s) 2026-10-16T03:04:54.455Z ✓ 307 [arm] › e2e/specs/prd-2026-007-noshow-cancel.spec.ts:143:6 › PRD-2026-007 — no-show per room › TC-ARM-106 API: no-show requires a reason (validation) [Must 4] (1.9s) 2026-10-16T03:04:59.537Z ✓ 308 [arm] › e2e/specs/prd-2026-007-noshow-cancel.spec.ts:152:6 › PRD-2026-007 — no-show per room › TC-ARM-107 UI: no-show entry absent for a CHECKED_IN-only booking [state gating] (5.0s) 2026-10-16T03:05:28.955Z ✘ 297 [arm] › e2e/specs/prd-2026-007-room-cards.spec.ts:283:6 › PRD-2026-007 — room cards on Booking Details › TC-ARM-056 booking reachable from reservations list by guest name; detail shows the cards [G5] (1.5m) 2026-10-16T03:05:33.199Z ✘ 302 [arm] › e2e/specs/prd-2026-007-rbac-ux.spec.ts:187:6 › PRD-2026-007 — UX guarantees (§3, G5) › TC-ARM-309 reservations list status pills match the detail state for partial bookings [G5 consistency] (1.5m) 2026-10-16T03:05:33.200Z - 311 [arm] › e2e/specs/prd-2026-007-rbac-ux.spec.ts:208:6 › TC-ARM-310 restricted role: room check-in → 403 [S-09/Must 18] 2026-10-16T03:05:33.200Z - 312 [arm] › e2e/specs/prd-2026-007-rbac-ux.spec.ts:209:6 › TC-ARM-311 restricted role: cancel → 403 [S-09] 2026-10-16T03:05:33.200Z - 313 [arm] › e2e/specs/prd-2026-007-rbac-ux.spec.ts:210:6 › TC-ARM-312 restricted role: no-show → 403 [S-09] 2026-10-16T03:05:33.200Z - 314 [arm] › e2e/specs/prd-2026-007-rbac-ux.spec.ts:211:6 › TC-ARM-313 restricted role: lock-move-swap → 403 [Must 18] 2026-10-16T03:05:33.200Z - 315 [arm] › e2e/specs/prd-2026-007-rbac-ux.spec.ts:212:6 › TC-ARM-314 restricted role UI: lifecycle buttons absent/disabled [S-09] 2026-10-16T03:05:33.200Z - 316 [arm] › e2e/specs/prd-2026-007-rbac-ux.spec.ts:213:6 › TC-ARM-315 restricted role: checkout-with-balance strictly blocked [Must 16] 2026-10-16T03:05:45.221Z ✘ 310 [arm] › e2e/specs/prd-2026-007-room-cards.spec.ts:295:6 › PRD-2026-007 — room cards on Booking Details › TC-ARM-057 payment summary is reservation-level on the details page [NG4/Must 8] (13.6s) 2026-10-16T03:06:02.544Z ✘ 317 [arm] › e2e/specs/prd-2026-007-room-cards.spec.ts:304:6 › PRD-2026-007 — room cards on Booking Details › TC-ARM-058 details reflect fresh API state after reload (no stale card status) [G5] (13.8s) 2026-10-16T03:06:14.041Z ✘ 318 [arm] › e2e/specs/prd-2026-007-room-cards.spec.ts:316:6 › PRD-2026-007 — room cards on Booking Details › TC-ARM-059 max-inventory booking renders its card list within 2s of page load [S-13] (6.8s) 2026-10-16T03:06:20.413Z ✓ 319 [arm] › e2e/specs/prd-2026-007-room-cards.spec.ts:328:6 › PRD-2026-007 — room cards on Booking Details › TC-ARM-060 no console errors or 5xx network responses on the details page [quality gate] (5.2s) 2026-10-16T03:06:37.429Z ✘ 309 [arm] › e2e/specs/prd-2026-007-noshow-cancel.spec.ts:165:6 › PRD-2026-007 — cancellation per room › TC-ARM-108 UI: cancel one of five rooms; the other four stay live [Must 5/S-23/§6.4] (1.5m) 2026-10-16T03:06:37.722Z ✘ 320 [arm] › e2e/specs/prd-2026-007-room-cards.spec.ts:343: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] (14.3s) 2026-10-16T03:06:45.295Z ✓ 322 [arm] › e2e/specs/prd-2026-007-room-cards.spec.ts:353:6 › PRD-2026-007 — room cards on Booking Details › TC-ARM-062 room-card layout holds at 1280×720 (chip not clipped) [UX] (6.5s) 2026-10-16T03:07:03.975Z ✘ 323 [arm] › e2e/specs/prd-2026-007-room-cards.spec.ts:368: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] (14.8s) 2026-10-16T03:08:11.835Z ✘ 321 [arm] › e2e/specs/prd-2026-007-noshow-cancel.spec.ts:193:6 › PRD-2026-007 — cancellation per room › TC-ARM-109 UI: reason AND charge are both required for cancel [Must 5] (1.5m) 2026-10-16T03:08:17.808Z ✓ 324 [arm] › e2e/specs/prd-2026-007-noshow-cancel.spec.ts:205:6 › PRD-2026-007 — cancellation per room › TC-ARM-110 UI: "can't be undone" warning is shown [UX/NG1] (4.9s) 2026-10-16T03:08:20.276Z ✓ 325 [arm] › e2e/specs/prd-2026-007-noshow-cancel.spec.ts:212:6 › PRD-2026-007 — cancellation per room › TC-ARM-111 API: cancel metadata persists (reason + amount) [Should-1] (2.5s) 2026-10-16T03:08:23.798Z ✓ 326 [arm] › e2e/specs/prd-2026-007-noshow-cancel.spec.ts:227:6 › PRD-2026-007 — cancellation per room › TC-ARM-112 API: all-rooms cancel lands parent CANCELLED [S-05] (3.5s) 2026-10-16T03:08:25.823Z ✓ 327 [arm] › e2e/specs/prd-2026-007-noshow-cancel.spec.ts:236:6 › PRD-2026-007 — cancellation per room › TC-ARM-113 API: cancelling a CHECKED_IN room is blocked with 409 [S-10/NG1] (2.0s) 2026-10-16T03:08:28.099Z ✓ 328 [arm] › e2e/specs/prd-2026-007-noshow-cancel.spec.ts:247:6 › PRD-2026-007 — cancellation per room › TC-ARM-114 API: CANCELLED is terminal — no later check-in [state machine] (2.3s) 2026-10-16T03:08:32.196Z ✓ 329 [arm] › e2e/specs/prd-2026-007-noshow-cancel.spec.ts:256:6 › PRD-2026-007 — cancellation per room › TC-ARM-115 API: cancel subset across two calls accumulates correctly [Must 12] (4.1s) 2026-10-16T03:08:37.632Z ✓ 330 [arm] › e2e/specs/prd-2026-007-noshow-cancel.spec.ts:268:6 › PRD-2026-007 — cancellation per room › TC-ARM-116 UI: cancelled room card stays visible (grey), booking stays open [§6.4] (5.4s) 2026-10-16T03:08:39.429Z ✓ 331 [arm] › e2e/specs/prd-2026-007-noshow-cancel.spec.ts:281:6 › PRD-2026-007 — scheduled cancel/no-show with withdraw window › TC-ARM-117 schedule-cancel stages the action and reports an expiry [staged ops] (1.8s) 2026-10-16T03:08:41.180Z ✓ 332 [arm] › e2e/specs/prd-2026-007-noshow-cancel.spec.ts:293:6 › PRD-2026-007 — scheduled cancel/no-show with withdraw window › TC-ARM-118 GET scheduled-action reflects the staged op [staged ops] (1.7s) 2026-10-16T03:09:48.244Z ✓ 333 [arm] › e2e/specs/prd-2026-007-noshow-cancel.spec.ts:305: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-16T03:10:52.416Z ✓ 334 [arm] › e2e/specs/prd-2026-007-noshow-cancel.spec.ts:318: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-16T03:10:54.823Z ✓ 335 [arm] › e2e/specs/prd-2026-007-noshow-cancel.spec.ts:332: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] (2.4s) 2026-10-16T03:11:02.949Z ✓ 336 [arm] › e2e/specs/prd-2026-007-noshow-cancel.spec.ts:347: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] (2.3s) 2026-10-16T03:11:03.012Z 1) [chromium] › e2e/specs/hfe-food-item-search-all-category.spec.ts:153:7 › AC-1: All tab is selected by default [AC-1] › [TC-HFE-001] All tab is selected and shows all items on first render (desktop) 2026-10-16T03:11:03.012Z Error: expect(locator).toBeVisible() failed 2026-10-16T03:11:03.012Z Locator: getByRole('button', { name: /^All$/ }).or(locator('[data-testid="category-all-tab"]')) 2026-10-16T03:11:03.012Z Expected: visible 2026-10-16T03:11:03.012Z Timeout: 10000ms 2026-10-16T03:11:03.012Z Error: element(s) not found 2026-10-16T03:11:03.012Z Call log: 2026-10-16T03:11:03.012Z  - Expect "toBeVisible" with timeout 10000ms 2026-10-16T03:11:03.012Z  - waiting for getByRole('button', { name: /^All$/ }).or(locator('[data-testid="category-all-tab"]')) 2026-10-16T03:11:03.012Z 154 | const foodOrder = new FoodOrderPage(page) 2026-10-16T03:11:03.012Z 155 | await foodOrder.goto(SEED_KITCHEN_ID) 2026-10-16T03:11:03.012Z > 156 | await expect(foodOrder.allTab).toBeVisible() 2026-10-16T03:11:03.012Z | ^ 2026-10-16T03:11:03.012Z 157 | }) 2026-10-16T03:11:03.012Z 158 | 2026-10-16T03:11:03.012Z 159 | test('[TC-HFE-002] All tab shows loading state when categories have not yet resolved', async ({ page }) => { 2026-10-16T03:11:03.012Z at /home/ubuntu/regression-runner/repos/dev/hotel-frontend-core/e2e/specs/hfe-food-item-search-all-category.spec.ts:156:36 2026-10-16T03:11:03.012Z attachment #1: screenshot (image/png) ────────────────────────────────────────────────────────── 2026-10-16T03:11:03.012Z test-results/hfe-food-item-search-all-c-a3cc4-ms-on-first-render-desktop--chromium/test-failed-1.png 2026-10-16T03:11:03.012Z ──────────────────────────────────────────────────────────────────────────────────────────────── 2026-10-16T03:11:03.012Z Error Context: test-results/hfe-food-item-search-all-c-a3cc4-ms-on-first-render-desktop--chromium/error-context.md 2026-10-16T03:11:03.012Z attachment #3: trace (application/zip) ───────────────────────────────────────────────────────── 2026-10-16T03:11:03.012Z test-results/hfe-food-item-search-all-c-a3cc4-ms-on-first-render-desktop--chromium/trace.zip 2026-10-16T03:11:03.012Z Usage: 2026-10-16T03:11:03.012Z pnpm exec playwright show-trace test-results/hfe-food-item-search-all-c-a3cc4-ms-on-first-render-desktop--chromium/trace.zip 2026-10-16T03:11:03.012Z ──────────────────────────────────────────────────────────────────────────────────────────────── 2026-10-16T03:11:03.012Z 2) [chromium] › e2e/specs/hfe-food-item-search-all-category.spec.ts:159:7 › AC-1: All tab is selected by default [AC-1] › [TC-HFE-002] All tab shows loading state when categories have not yet resolved 2026-10-16T03:11:03.012Z Error: expect(locator).toBeVisible() failed 2026-10-16T03:11:03.012Z Locator: getByText('Loading categories...') 2026-10-16T03:11:03.012Z Expected: visible 2026-10-16T03:11:03.012Z Timeout: 10000ms 2026-10-16T03:11:03.012Z Error: element(s) not found 2026-10-16T03:11:03.012Z Call log: 2026-10-16T03:11:03.012Z  - Expect "toBeVisible" with timeout 10000ms 2026-10-16T03:11:03.012Z  - waiting for getByText('Loading categories...') 2026-10-16T03:11:03.012Z 164 | const foodOrder = new FoodOrderPage(page) 2026-10-16T03:11:03.012Z 165 | await foodOrder.goto(SEED_KITCHEN_ID) 2026-10-16T03:11:03.012Z > 166 | await expect(foodOrder.loadingCategoriesText).toBeVisible() 2026-10-16T03:11:03.012Z | ^ 2026-10-16T03:11:03.013Z 167 | }) 2026-10-16T03:11:03.013Z 168 | 2026-10-16T03:11:03.013Z 169 | test('[TC-HFE-003] All tab default when kitchen has exactly one category', async ({ page }) => { 2026-10-16T03:11:03.013Z at /home/ubuntu/regression-runner/repos/dev/hotel-frontend-core/e2e/specs/hfe-food-item-search-all-category.spec.ts:166:51 2026-10-16T03:11:03.013Z attachment #1: screenshot (image/png) ────────────────────────────────────────────────────────── 2026-10-16T03:11:03.013Z test-results/hfe-food-item-search-all-c-7aaf4-ories-have-not-yet-resolved-chromium/test-failed-1.png 2026-10-16T03:11:03.013Z ──────────────────────────────────────────────────────────────────────────────────────────────── 2026-10-16T03:11:03.013Z Error Context: test-results/hfe-food-item-search-all-c-7aaf4-ories-have-not-yet-resolved-chromium/error-context.md 2026-10-16T03:11:03.013Z attachment #3: trace (application/zip) ───────────────────────────────────────────────────────── 2026-10-16T03:11:03.013Z test-results/hfe-food-item-search-all-c-7aaf4-ories-have-not-yet-resolved-chromium/trace.zip 2026-10-16T03:11:03.013Z Usage: 2026-10-16T03:11:03.013Z pnpm exec playwright show-trace test-results/hfe-food-item-search-all-c-7aaf4-ories-have-not-yet-resolved-chromium/trace.zip 2026-10-16T03:11:03.013Z ──────────────────────────────────────────────────────────────────────────────────────────────── 2026-10-16T03:11:03.013Z 3) [chromium] › e2e/specs/hfe-food-item-search-all-category.spec.ts:169:7 › AC-1: All tab is selected by default [AC-1] › [TC-HFE-003] All tab default when kitchen has exactly one category 2026-10-16T03:11:03.013Z Error: expect(locator).toBeVisible() failed 2026-10-16T03:11:03.013Z Locator: getByRole('button', { name: /^All$/ }).or(locator('[data-testid="category-all-tab"]')) 2026-10-16T03:11:03.013Z Expected: visible 2026-10-16T03:11:03.013Z Timeout: 10000ms 2026-10-16T03:11:03.013Z Error: element(s) not found 2026-10-16T03:11:03.013Z Call log: 2026-10-16T03:11:03.013Z  - Expect "toBeVisible" with timeout 10000ms 2026-10-16T03:11:03.013Z  - waiting for getByRole('button', { name: /^All$/ }).or(locator('[data-testid="category-all-tab"]')) 2026-10-16T03:11:03.013Z 170 | const foodOrder = new FoodOrderPage(page) 2026-10-16T03:11:03.013Z 171 | await foodOrder.goto(SINGLE_CATEGORY_KITCHEN_ID) 2026-10-16T03:11:03.013Z > 172 | await expect(foodOrder.allTab).toBeVisible() 2026-10-16T03:11:03.013Z | ^ 2026-10-16T03:11:03.013Z 173 | }) 2026-10-16T03:11:03.013Z 174 | }) 2026-10-16T03:11:03.013Z 175 | 2026-10-16T03:11:03.013Z at /home/ubuntu/regression-runner/repos/dev/hotel-frontend-core/e2e/specs/hfe-food-item-search-all-category.spec.ts:172:36 2026-10-16T03:11:03.013Z attachment #1: screenshot (image/png) ────────────────────────────────────────────────────────── 2026-10-16T03:11:03.013Z test-results/hfe-food-item-search-all-c-0ec3a-en-has-exactly-one-category-chromium/test-failed-1.png 2026-10-16T03:11:03.013Z ──────────────────────────────────────────────────────────────────────────────────────────────── 2026-10-16T03:11:03.013Z Error Context: test-results/hfe-food-item-search-all-c-0ec3a-en-has-exactly-one-category-chromium/error-context.md 2026-10-16T03:11:03.013Z attachment #3: trace (application/zip) ───────────────────────────────────────────────────────── 2026-10-16T03:11:03.013Z test-results/hfe-food-item-search-all-c-0ec3a-en-has-exactly-one-category-chromium/trace.zip 2026-10-16T03:11:03.013Z Usage: 2026-10-16T03:11:03.013Z pnpm exec playwright show-trace test-results/hfe-food-item-search-all-c-0ec3a-en-has-exactly-one-category-chromium/trace.zip 2026-10-16T03:11:03.013Z ──────────────────────────────────────────────────────────────────────────────────────────────── 2026-10-16T03:11:03.013Z 4) [chromium] › e2e/specs/hfe-food-item-search-all-category.spec.ts:179:7 › AC-2: Search on All tab returns cross-category results [AC-2] › [TC-HFE-004] Search on All tab returns flat results across every category 2026-10-16T03:11:03.013Z Test timeout of 90000ms exceeded. 2026-10-16T03:11:03.013Z Error: locator.fill: Test timeout of 90000ms exceeded. 2026-10-16T03:11:03.013Z Call log: 2026-10-16T03:11:03.013Z  - waiting for locator('input[placeholder="Search Item Name/Code"]') 2026-10-16T03:11:03.013Z at ../pages/FoodOrderPage.ts:101 2026-10-16T03:11:03.013Z 99 | 2026-10-16T03:11:03.013Z 100 | async fillSearch(query: string): Promise { 2026-10-16T03:11:03.013Z > 101 | await this.searchInput.fill(query) 2026-10-16T03:11:03.013Z | ^ 2026-10-16T03:11:03.013Z 102 | } 2026-10-16T03:11:03.014Z 103 | 2026-10-16T03:11:03.014Z 104 | async clearSearch(): Promise { 2026-10-16T03:11:03.014Z at FoodOrderPage.fillSearch (/home/ubuntu/regression-runner/repos/dev/hotel-frontend-core/e2e/pages/FoodOrderPage.ts:101:28) 2026-10-16T03:11:03.014Z at /home/ubuntu/regression-runner/repos/dev/hotel-frontend-core/e2e/specs/hfe-food-item-search-all-category.spec.ts:182:21 2026-10-16T03:11:03.014Z attachment #1: screenshot (image/png) ────────────────────────────────────────────────────────── 2026-10-16T03:11:03.014Z test-results/hfe-food-item-search-all-c-a7552-sults-across-every-category-chromium/test-failed-1.png 2026-10-16T03:11:03.014Z ──────────────────────────────────────────────────────────────────────────────────────────────── 2026-10-16T03:11:03.014Z Error Context: test-results/hfe-food-item-search-all-c-a7552-sults-across-every-category-chromium/error-context.md 2026-10-16T03:11:03.014Z attachment #3: trace (application/zip) ───────────────────────────────────────────────────────── 2026-10-16T03:11:03.014Z test-results/hfe-food-item-search-all-c-a7552-sults-across-every-category-chromium/trace.zip 2026-10-16T03:11:03.014Z Usage: 2026-10-16T03:11:03.014Z pnpm exec playwright show-trace test-results/hfe-food-item-search-all-c-a7552-sults-across-every-category-chromium/trace.zip 2026-10-16T03:11:03.014Z ──────────────────────────────────────────────────────────────────────────────────────────────── 2026-10-16T03:11:03.014Z 5) [chromium] › e2e/specs/hfe-food-item-search-all-category.spec.ts:187:7 › AC-2: Search on All tab returns cross-category results [AC-2] › [TC-HFE-005] Search on All tab with itemCode (weight-1 field) returns match 2026-10-16T03:11:03.014Z Test timeout of 90000ms exceeded. 2026-10-16T03:11:03.014Z Error: locator.fill: Test timeout of 90000ms exceeded. 2026-10-16T03:11:03.014Z Call log: 2026-10-16T03:11:03.014Z  - waiting for locator('input[placeholder="Search Item Name/Code"]') 2026-10-16T03:11:03.014Z at ../pages/FoodOrderPage.ts:101 2026-10-16T03:11:03.014Z 99 | 2026-10-16T03:11:03.014Z 100 | async fillSearch(query: string): Promise { 2026-10-16T03:11:03.014Z > 101 | await this.searchInput.fill(query) 2026-10-16T03:11:03.014Z | ^ 2026-10-16T03:11:03.014Z 102 | } 2026-10-16T03:11:03.014Z 103 | 2026-10-16T03:11:03.014Z 104 | async clearSearch(): Promise { 2026-10-16T03:11:03.014Z at FoodOrderPage.fillSearch (/home/ubuntu/regression-runner/repos/dev/hotel-frontend-core/e2e/pages/FoodOrderPage.ts:101:28) 2026-10-16T03:11:03.014Z at /home/ubuntu/regression-runner/repos/dev/hotel-frontend-core/e2e/specs/hfe-food-item-search-all-category.spec.ts:190:21 2026-10-16T03:11:03.014Z attachment #1: screenshot (image/png) ────────────────────────────────────────────────────────── 2026-10-16T03:11:03.014Z test-results/hfe-food-item-search-all-c-30df2-eight-1-field-returns-match-chromium/test-failed-1.png 2026-10-16T03:11:03.014Z ──────────────────────────────────────────────────────────────────────────────────────────────── 2026-10-16T03:11:03.014Z Error Context: test-results/hfe-food-item-search-all-c-30df2-eight-1-field-returns-match-chromium/error-context.md 2026-10-16T03:11:03.014Z attachment #3: trace (application/zip) ───────────────────────────────────────────────────────── 2026-10-16T03:11:03.014Z test-results/hfe-food-item-search-all-c-30df2-eight-1-field-returns-match-chromium/trace.zip 2026-10-16T03:11:03.014Z Usage: 2026-10-16T03:11:03.014Z pnpm exec playwright show-trace test-results/hfe-food-item-search-all-c-30df2-eight-1-field-returns-match-chromium/trace.zip 2026-10-16T03:11:03.014Z ──────────────────────────────────────────────────────────────────────────────────────────────── 2026-10-16T03:11:03.015Z 6) [chromium] › e2e/specs/hfe-food-item-search-all-category.spec.ts:194:7 › AC-2: Search on All tab returns cross-category results [AC-2] › [TC-HFE-006] Clearing search restores grouped-by-category layout on All tab 2026-10-16T03:11:03.015Z Test timeout of 90000ms exceeded. 2026-10-16T03:11:03.015Z Error: locator.fill: Test timeout of 90000ms exceeded. 2026-10-16T03:11:03.015Z Call log: 2026-10-16T03:11:03.015Z  - waiting for locator('input[placeholder="Search Item Name/Code"]') 2026-10-16T03:11:03.015Z at ../pages/FoodOrderPage.ts:101 2026-10-16T03:11:03.015Z 99 | 2026-10-16T03:11:03.015Z 100 | async fillSearch(query: string): Promise { 2026-10-16T03:11:03.015Z > 101 | await this.searchInput.fill(query) 2026-10-16T03:11:03.015Z | ^ 2026-10-16T03:11:03.015Z 102 | } 2026-10-16T03:11:03.015Z 103 | 2026-10-16T03:11:03.015Z 104 | async clearSearch(): Promise { 2026-10-16T03:11:03.015Z at FoodOrderPage.fillSearch (/home/ubuntu/regression-runner/repos/dev/hotel-frontend-core/e2e/pages/FoodOrderPage.ts:101:28) 2026-10-16T03:11:03.015Z at /home/ubuntu/regression-runner/repos/dev/hotel-frontend-core/e2e/specs/hfe-food-item-search-all-category.spec.ts:197:21 2026-10-16T03:11:03.015Z attachment #1: screenshot (image/png) ────────────────────────────────────────────────────────── 2026-10-16T03:11:03.015Z test-results/hfe-food-item-search-all-c-c168e--category-layout-on-All-tab-chromium/test-failed-1.png 2026-10-16T03:11:03.015Z ──────────────────────────────────────────────────────────────────────────────────────────────── 2026-10-16T03:11:03.015Z Error Context: test-results/hfe-food-item-search-all-c-c168e--category-layout-on-All-tab-chromium/error-context.md 2026-10-16T03:11:03.015Z attachment #3: trace (application/zip) ───────────────────────────────────────────────────────── 2026-10-16T03:11:03.015Z test-results/hfe-food-item-search-all-c-c168e--category-layout-on-All-tab-chromium/trace.zip 2026-10-16T03:11:03.015Z Usage: 2026-10-16T03:11:03.015Z pnpm exec playwright show-trace test-results/hfe-food-item-search-all-c-c168e--category-layout-on-All-tab-chromium/trace.zip 2026-10-16T03:11:03.015Z ──────────────────────────────────────────────────────────────────────────────────────────────── 2026-10-16T03:11:03.015Z 7) [chromium] › e2e/specs/hfe-food-item-search-all-category.spec.ts:206:7 › AC-3: Scope toggle chip behaviour [AC-3] › [TC-HFE-007] Search on specific category shows cross-category results by default 2026-10-16T03:11:03.015Z Test timeout of 90000ms exceeded. 2026-10-16T03:11:03.015Z Error: locator.click: Test timeout of 90000ms exceeded. 2026-10-16T03:11:03.015Z Call log: 2026-10-16T03:11:03.015Z  - waiting for getByRole('button', { name: 'Starters' }).or(getByText('Starters', { exact: true })).first() 2026-10-16T03:11:03.015Z at ../pages/FoodOrderPage.ts:128 2026-10-16T03:11:03.015Z 126 | await testIdLocator.click() 2026-10-16T03:11:03.015Z 127 | } else { 2026-10-16T03:11:03.015Z > 128 | await textLocator.first().click() 2026-10-16T03:11:03.015Z | ^ 2026-10-16T03:11:03.015Z 129 | } 2026-10-16T03:11:03.015Z 130 | } 2026-10-16T03:11:03.015Z 131 | 2026-10-16T03:11:03.015Z at FoodOrderPage.clickCategoryTab (/home/ubuntu/regression-runner/repos/dev/hotel-frontend-core/e2e/pages/FoodOrderPage.ts:128:33) 2026-10-16T03:11:03.015Z at /home/ubuntu/regression-runner/repos/dev/hotel-frontend-core/e2e/specs/hfe-food-item-search-all-category.spec.ts:209:5 2026-10-16T03:11:03.015Z attachment #1: screenshot (image/png) ────────────────────────────────────────────────────────── 2026-10-16T03:11:03.015Z test-results/hfe-food-item-search-all-c-ce4f4-category-results-by-default-chromium/test-failed-1.png 2026-10-16T03:11:03.015Z ──────────────────────────────────────────────────────────────────────────────────────────────── 2026-10-16T03:11:03.016Z Error Context: test-results/hfe-food-item-search-all-c-ce4f4-category-results-by-default-chromium/error-context.md 2026-10-16T03:11:03.016Z attachment #3: trace (application/zip) ───────────────────────────────────────────────────────── 2026-10-16T03:11:03.016Z test-results/hfe-food-item-search-all-c-ce4f4-category-results-by-default-chromium/trace.zip 2026-10-16T03:11:03.016Z Usage: 2026-10-16T03:11:03.016Z pnpm exec playwright show-trace test-results/hfe-food-item-search-all-c-ce4f4-category-results-by-default-chromium/trace.zip 2026-10-16T03:11:03.016Z ──────────────────────────────────────────────────────────────────────────────────────────────── 2026-10-16T03:11:03.016Z 8) [chromium] › e2e/specs/hfe-food-item-search-all-category.spec.ts:217:7 › AC-3: Scope toggle chip behaviour [AC-3] › [TC-HFE-008] Clicking toggle chip scopes search to current category only 2026-10-16T03:11:03.016Z Test timeout of 90000ms exceeded. 2026-10-16T03:11:03.016Z Error: locator.click: Test timeout of 90000ms exceeded. 2026-10-16T03:11:03.016Z Call log: 2026-10-16T03:11:03.016Z  - waiting for getByRole('button', { name: 'Starters' }).or(getByText('Starters', { exact: true })).first() 2026-10-16T03:11:03.016Z at ../pages/FoodOrderPage.ts:128 2026-10-16T03:11:03.016Z 126 | await testIdLocator.click() 2026-10-16T03:11:03.016Z 127 | } else { 2026-10-16T03:11:03.016Z > 128 | await textLocator.first().click() 2026-10-16T03:11:03.016Z | ^ 2026-10-16T03:11:03.016Z 129 | } 2026-10-16T03:11:03.016Z 130 | } 2026-10-16T03:11:03.016Z 131 | 2026-10-16T03:11:03.016Z at FoodOrderPage.clickCategoryTab (/home/ubuntu/regression-runner/repos/dev/hotel-frontend-core/e2e/pages/FoodOrderPage.ts:128:33) 2026-10-16T03:11:03.016Z at /home/ubuntu/regression-runner/repos/dev/hotel-frontend-core/e2e/specs/hfe-food-item-search-all-category.spec.ts:220:5 2026-10-16T03:11:03.016Z attachment #1: screenshot (image/png) ────────────────────────────────────────────────────────── 2026-10-16T03:11:03.016Z test-results/hfe-food-item-search-all-c-0db63-ch-to-current-category-only-chromium/test-failed-1.png 2026-10-16T03:11:03.016Z ──────────────────────────────────────────────────────────────────────────────────────────────── 2026-10-16T03:11:03.016Z Error Context: test-results/hfe-food-item-search-all-c-0db63-ch-to-current-category-only-chromium/error-context.md 2026-10-16T03:11:03.016Z attachment #3: trace (application/zip) ───────────────────────────────────────────────────────── 2026-10-16T03:11:03.016Z test-results/hfe-food-item-search-all-c-0db63-ch-to-current-category-only-chromium/trace.zip 2026-10-16T03:11:03.016Z Usage: 2026-10-16T03:11:03.016Z pnpm exec playwright show-trace test-results/hfe-food-item-search-all-c-0db63-ch-to-current-category-only-chromium/trace.zip 2026-10-16T03:11:03.016Z ──────────────────────────────────────────────────────────────────────────────────────────────── 2026-10-16T03:11:03.016Z 9) [chromium] › e2e/specs/hfe-food-item-search-all-category.spec.ts:228:7 › AC-3: Scope toggle chip behaviour [AC-3] › [TC-HFE-009] Toggle chip is NOT visible when search field is empty on a specific category tab 2026-10-16T03:11:03.016Z Test timeout of 90000ms exceeded. 2026-10-16T03:11:03.016Z Error: locator.click: Test timeout of 90000ms exceeded. 2026-10-16T03:11:03.016Z Call log: 2026-10-16T03:11:03.016Z  - waiting for getByRole('button', { name: 'Starters' }).or(getByText('Starters', { exact: true })).first() 2026-10-16T03:11:03.016Z at ../pages/FoodOrderPage.ts:128 2026-10-16T03:11:03.016Z 126 | await testIdLocator.click() 2026-10-16T03:11:03.016Z 127 | } else { 2026-10-16T03:11:03.016Z > 128 | await textLocator.first().click() 2026-10-16T03:11:03.016Z | ^ 2026-10-16T03:11:03.016Z 129 | } 2026-10-16T03:11:03.016Z 130 | } 2026-10-16T03:11:03.016Z 131 | 2026-10-16T03:11:03.016Z at FoodOrderPage.clickCategoryTab (/home/ubuntu/regression-runner/repos/dev/hotel-frontend-core/e2e/pages/FoodOrderPage.ts:128:33) 2026-10-16T03:11:03.016Z at /home/ubuntu/regression-runner/repos/dev/hotel-frontend-core/e2e/specs/hfe-food-item-search-all-category.spec.ts:231:5 2026-10-16T03:11:03.016Z attachment #1: screenshot (image/png) ────────────────────────────────────────────────────────── 2026-10-16T03:11:03.016Z test-results/hfe-food-item-search-all-c-4b3bc--on-a-specific-category-tab-chromium/test-failed-1.png 2026-10-16T03:11:03.016Z ──────────────────────────────────────────────────────────────────────────────────────────────── 2026-10-16T03:11:03.016Z Error Context: test-results/hfe-food-item-search-all-c-4b3bc--on-a-specific-category-tab-chromium/error-context.md 2026-10-16T03:11:03.016Z attachment #3: trace (application/zip) ───────────────────────────────────────────────────────── 2026-10-16T03:11:03.016Z test-results/hfe-food-item-search-all-c-4b3bc--on-a-specific-category-tab-chromium/trace.zip 2026-10-16T03:11:03.017Z Usage: 2026-10-16T03:11:03.017Z pnpm exec playwright show-trace test-results/hfe-food-item-search-all-c-4b3bc--on-a-specific-category-tab-chromium/trace.zip 2026-10-16T03:11:03.017Z ──────────────────────────────────────────────────────────────────────────────────────────────── 2026-10-16T03:11:03.017Z 10) [chromium] › e2e/specs/hfe-food-item-search-all-category.spec.ts:235:7 › AC-3: Scope toggle chip behaviour [AC-3] › [TC-HFE-010] Switching category tab resets search scope to cross-category 2026-10-16T03:11:03.017Z Test timeout of 90000ms exceeded. 2026-10-16T03:11:03.017Z Error: locator.click: Test timeout of 90000ms exceeded. 2026-10-16T03:11:03.017Z Call log: 2026-10-16T03:11:03.017Z  - waiting for getByRole('button', { name: 'Starters' }).or(getByText('Starters', { exact: true })).first() 2026-10-16T03:11:03.017Z at ../pages/FoodOrderPage.ts:128 2026-10-16T03:11:03.017Z 126 | await testIdLocator.click() 2026-10-16T03:11:03.017Z 127 | } else { 2026-10-16T03:11:03.017Z > 128 | await textLocator.first().click() 2026-10-16T03:11:03.017Z | ^ 2026-10-16T03:11:03.017Z 129 | } 2026-10-16T03:11:03.017Z 130 | } 2026-10-16T03:11:03.017Z 131 | 2026-10-16T03:11:03.017Z at FoodOrderPage.clickCategoryTab (/home/ubuntu/regression-runner/repos/dev/hotel-frontend-core/e2e/pages/FoodOrderPage.ts:128:33) 2026-10-16T03:11:03.017Z at /home/ubuntu/regression-runner/repos/dev/hotel-frontend-core/e2e/specs/hfe-food-item-search-all-category.spec.ts:238:5 2026-10-16T03:11:03.017Z attachment #1: screenshot (image/png) ────────────────────────────────────────────────────────── 2026-10-16T03:11:03.017Z test-results/hfe-food-item-search-all-c-2e467-rch-scope-to-cross-category-chromium/test-failed-1.png 2026-10-16T03:11:03.017Z ──────────────────────────────────────────────────────────────────────────────────────────────── 2026-10-16T03:11:03.017Z Error Context: test-results/hfe-food-item-search-all-c-2e467-rch-scope-to-cross-category-chromium/error-context.md 2026-10-16T03:11:03.017Z attachment #3: trace (application/zip) ───────────────────────────────────────────────────────── 2026-10-16T03:11:03.017Z test-results/hfe-food-item-search-all-c-2e467-rch-scope-to-cross-category-chromium/trace.zip 2026-10-16T03:11:03.017Z Usage: 2026-10-16T03:11:03.017Z pnpm exec playwright show-trace test-results/hfe-food-item-search-all-c-2e467-rch-scope-to-cross-category-chromium/trace.zip 2026-10-16T03:11:03.017Z ──────────────────────────────────────────────────────────────────────────────────────────────── 2026-10-16T03:11:03.017Z 11) [chromium] › e2e/specs/hfe-food-item-search-all-category.spec.ts:250:7 › AC-4: allItemsDeduped — no duplicates in All tab [AC-4] › [TC-HFE-011] Item assigned to multiple categories appears exactly once on All tab (no search) 2026-10-16T03:11:03.017Z Error: expect(locator).toHaveCount(expected) failed 2026-10-16T03:11:03.017Z Locator: locator('[data-testid="food-item-card"]').or(locator('.bg-white.rounded-\\[8px\\].border.border-backgroundColor-secondary')).filter({ hasText: 'Shared Item' }) 2026-10-16T03:11:03.017Z Expected: 1 2026-10-16T03:11:03.017Z Received: 0 2026-10-16T03:11:03.017Z Timeout: 10000ms 2026-10-16T03:11:03.017Z Call log: 2026-10-16T03:11:03.017Z  - Expect "toHaveCount" with timeout 10000ms 2026-10-16T03:11:03.017Z  - waiting for locator('[data-testid="food-item-card"]').or(locator('.bg-white.rounded-\\[8px\\].border.border-backgroundColor-secondary')).filter({ hasText: 'Shared Item' }) 2026-10-16T03:11:03.017Z  14 × locator resolved to 0 elements 2026-10-16T03:11:03.017Z  - unexpected value "0" 2026-10-16T03:11:03.017Z 251 | const foodOrder = new FoodOrderPage(page) 2026-10-16T03:11:03.017Z 252 | await foodOrder.goto(SEED_KITCHEN_ID) 2026-10-16T03:11:03.017Z > 253 | await expect(foodOrder.itemCardByName('Shared Item')).toHaveCount(1) 2026-10-16T03:11:03.017Z | ^ 2026-10-16T03:11:03.017Z 254 | }) 2026-10-16T03:11:03.017Z 255 | 2026-10-16T03:11:03.017Z 256 | test('[TC-HFE-012] Item assigned to multiple categories appears exactly once in All-tab search results', async ({ page }) => { 2026-10-16T03:11:03.017Z at /home/ubuntu/regression-runner/repos/dev/hotel-frontend-core/e2e/specs/hfe-food-item-search-all-category.spec.ts:253:59 2026-10-16T03:11:03.018Z attachment #1: screenshot (image/png) ────────────────────────────────────────────────────────── 2026-10-16T03:11:03.018Z test-results/hfe-food-item-search-all-c-86b2b--once-on-All-tab-no-search--chromium/test-failed-1.png 2026-10-16T03:11:03.018Z ──────────────────────────────────────────────────────────────────────────────────────────────── 2026-10-16T03:11:03.018Z Error Context: test-results/hfe-food-item-search-all-c-86b2b--once-on-All-tab-no-search--chromium/error-context.md 2026-10-16T03:11:03.018Z attachment #3: trace (application/zip) ───────────────────────────────────────────────────────── 2026-10-16T03:11:03.018Z test-results/hfe-food-item-search-all-c-86b2b--once-on-All-tab-no-search--chromium/trace.zip 2026-10-16T03:11:03.018Z Usage: 2026-10-16T03:11:03.018Z pnpm exec playwright show-trace test-results/hfe-food-item-search-all-c-86b2b--once-on-All-tab-no-search--chromium/trace.zip 2026-10-16T03:11:03.018Z ──────────────────────────────────────────────────────────────────────────────────────────────── 2026-10-16T03:11:03.018Z 12) [chromium] › e2e/specs/hfe-food-item-search-all-category.spec.ts:256:7 › AC-4: allItemsDeduped — no duplicates in All tab [AC-4] › [TC-HFE-012] Item assigned to multiple categories appears exactly once in All-tab search results 2026-10-16T03:11:03.018Z Test timeout of 90000ms exceeded. 2026-10-16T03:11:03.018Z Error: locator.fill: Test timeout of 90000ms exceeded. 2026-10-16T03:11:03.018Z Call log: 2026-10-16T03:11:03.018Z  - waiting for locator('input[placeholder="Search Item Name/Code"]') 2026-10-16T03:11:03.018Z at ../pages/FoodOrderPage.ts:101 2026-10-16T03:11:03.018Z 99 | 2026-10-16T03:11:03.018Z 100 | async fillSearch(query: string): Promise { 2026-10-16T03:11:03.018Z > 101 | await this.searchInput.fill(query) 2026-10-16T03:11:03.018Z | ^ 2026-10-16T03:11:03.018Z 102 | } 2026-10-16T03:11:03.018Z 103 | 2026-10-16T03:11:03.018Z 104 | async clearSearch(): Promise { 2026-10-16T03:11:03.018Z at FoodOrderPage.fillSearch (/home/ubuntu/regression-runner/repos/dev/hotel-frontend-core/e2e/pages/FoodOrderPage.ts:101:28) 2026-10-16T03:11:03.018Z at /home/ubuntu/regression-runner/repos/dev/hotel-frontend-core/e2e/specs/hfe-food-item-search-all-category.spec.ts:259:21 2026-10-16T03:11:03.018Z attachment #1: screenshot (image/png) ────────────────────────────────────────────────────────── 2026-10-16T03:11:03.018Z test-results/hfe-food-item-search-all-c-e1660-e-in-All-tab-search-results-chromium/test-failed-1.png 2026-10-16T03:11:03.018Z ──────────────────────────────────────────────────────────────────────────────────────────────── 2026-10-16T03:11:03.018Z Error Context: test-results/hfe-food-item-search-all-c-e1660-e-in-All-tab-search-results-chromium/error-context.md 2026-10-16T03:11:03.018Z attachment #3: trace (application/zip) ───────────────────────────────────────────────────────── 2026-10-16T03:11:03.018Z test-results/hfe-food-item-search-all-c-e1660-e-in-All-tab-search-results-chromium/trace.zip 2026-10-16T03:11:03.018Z Usage: 2026-10-16T03:11:03.018Z pnpm exec playwright show-trace test-results/hfe-food-item-search-all-c-e1660-e-in-All-tab-search-results-chromium/trace.zip 2026-10-16T03:11:03.018Z ──────────────────────────────────────────────────────────────────────────────────────────────── 2026-10-16T03:11:03.018Z 13) [chromium] › e2e/specs/hfe-food-item-search-all-category.spec.ts:273:7 › AC-5: FoodItemEmptyState on no results [AC-5] › [TC-HFE-014] FoodItemEmptyState renders when All-tab search returns no results 2026-10-16T03:11:03.018Z Test timeout of 90000ms exceeded. 2026-10-16T03:11:03.018Z Error: locator.fill: Test timeout of 90000ms exceeded. 2026-10-16T03:11:03.018Z Call log: 2026-10-16T03:11:03.018Z  - waiting for locator('input[placeholder="Search Item Name/Code"]') 2026-10-16T03:11:03.018Z at ../pages/FoodOrderPage.ts:101 2026-10-16T03:11:03.018Z 99 | 2026-10-16T03:11:03.018Z 100 | async fillSearch(query: string): Promise { 2026-10-16T03:11:03.018Z > 101 | await this.searchInput.fill(query) 2026-10-16T03:11:03.018Z | ^ 2026-10-16T03:11:03.018Z 102 | } 2026-10-16T03:11:03.018Z 103 | 2026-10-16T03:11:03.018Z 104 | async clearSearch(): Promise { 2026-10-16T03:11:03.018Z at FoodOrderPage.fillSearch (/home/ubuntu/regression-runner/repos/dev/hotel-frontend-core/e2e/pages/FoodOrderPage.ts:101:28) 2026-10-16T03:11:03.018Z at /home/ubuntu/regression-runner/repos/dev/hotel-frontend-core/e2e/specs/hfe-food-item-search-all-category.spec.ts:276:21 2026-10-16T03:11:03.018Z attachment #1: screenshot (image/png) ────────────────────────────────────────────────────────── 2026-10-16T03:11:03.018Z test-results/hfe-food-item-search-all-c-d4f3b-b-search-returns-no-results-chromium/test-failed-1.png 2026-10-16T03:11:03.018Z ──────────────────────────────────────────────────────────────────────────────────────────────── 2026-10-16T03:11:03.018Z Error Context: test-results/hfe-food-item-search-all-c-d4f3b-b-search-returns-no-results-chromium/error-context.md 2026-10-16T03:11:03.019Z attachment #3: trace (application/zip) ───────────────────────────────────────────────────────── 2026-10-16T03:11:03.019Z test-results/hfe-food-item-search-all-c-d4f3b-b-search-returns-no-results-chromium/trace.zip 2026-10-16T03:11:03.019Z Usage: 2026-10-16T03:11:03.019Z pnpm exec playwright show-trace test-results/hfe-food-item-search-all-c-d4f3b-b-search-returns-no-results-chromium/trace.zip 2026-10-16T03:11:03.019Z ──────────────────────────────────────────────────────────────────────────────────────────────── 2026-10-16T03:11:03.019Z 14) [chromium] › e2e/specs/hfe-food-item-search-all-category.spec.ts:281:7 › AC-5: FoodItemEmptyState on no results [AC-5] › [TC-HFE-015] FoodItemEmptyState renders when specific-category search returns no results 2026-10-16T03:11:03.019Z Test timeout of 90000ms exceeded. 2026-10-16T03:11:03.019Z Error: locator.click: Test timeout of 90000ms exceeded. 2026-10-16T03:11:03.019Z Call log: 2026-10-16T03:11:03.019Z  - waiting for getByRole('button', { name: 'Starters' }).or(getByText('Starters', { exact: true })).first() 2026-10-16T03:11:03.019Z at ../pages/FoodOrderPage.ts:128 2026-10-16T03:11:03.019Z 126 | await testIdLocator.click() 2026-10-16T03:11:03.019Z 127 | } else { 2026-10-16T03:11:03.019Z > 128 | await textLocator.first().click() 2026-10-16T03:11:03.019Z | ^ 2026-10-16T03:11:03.019Z 129 | } 2026-10-16T03:11:03.019Z 130 | } 2026-10-16T03:11:03.019Z 131 | 2026-10-16T03:11:03.019Z at FoodOrderPage.clickCategoryTab (/home/ubuntu/regression-runner/repos/dev/hotel-frontend-core/e2e/pages/FoodOrderPage.ts:128:33) 2026-10-16T03:11:03.019Z at /home/ubuntu/regression-runner/repos/dev/hotel-frontend-core/e2e/specs/hfe-food-item-search-all-category.spec.ts:284:5 2026-10-16T03:11:03.019Z attachment #1: screenshot (image/png) ────────────────────────────────────────────────────────── 2026-10-16T03:11:03.019Z test-results/hfe-food-item-search-all-c-4c837-y-search-returns-no-results-chromium/test-failed-1.png 2026-10-16T03:11:03.019Z ──────────────────────────────────────────────────────────────────────────────────────────────── 2026-10-16T03:11:03.019Z Error Context: test-results/hfe-food-item-search-all-c-4c837-y-search-returns-no-results-chromium/error-context.md 2026-10-16T03:11:03.019Z attachment #3: trace (application/zip) ───────────────────────────────────────────────────────── 2026-10-16T03:11:03.019Z test-results/hfe-food-item-search-all-c-4c837-y-search-returns-no-results-chromium/trace.zip 2026-10-16T03:11:03.019Z Usage: 2026-10-16T03:11:03.019Z pnpm exec playwright show-trace test-results/hfe-food-item-search-all-c-4c837-y-search-returns-no-results-chromium/trace.zip 2026-10-16T03:11:03.019Z ──────────────────────────────────────────────────────────────────────────────────────────────── 2026-10-16T03:11:03.019Z 15) [chromium] › e2e/specs/hfe-food-item-search-all-category.spec.ts:289:7 › AC-5: FoodItemEmptyState on no results [AC-5] › [TC-HFE-016] Empty state uses size='lg' (320px image) not 'sm' in full-grid context 2026-10-16T03:11:03.019Z Test timeout of 90000ms exceeded. 2026-10-16T03:11:03.019Z Error: locator.fill: Test timeout of 90000ms exceeded. 2026-10-16T03:11:03.019Z Call log: 2026-10-16T03:11:03.019Z  - waiting for locator('input[placeholder="Search Item Name/Code"]') 2026-10-16T03:11:03.019Z at ../pages/FoodOrderPage.ts:101 2026-10-16T03:11:03.019Z 99 | 2026-10-16T03:11:03.019Z 100 | async fillSearch(query: string): Promise { 2026-10-16T03:11:03.019Z > 101 | await this.searchInput.fill(query) 2026-10-16T03:11:03.019Z | ^ 2026-10-16T03:11:03.019Z 102 | } 2026-10-16T03:11:03.019Z 103 | 2026-10-16T03:11:03.019Z 104 | async clearSearch(): Promise { 2026-10-16T03:11:03.019Z at FoodOrderPage.fillSearch (/home/ubuntu/regression-runner/repos/dev/hotel-frontend-core/e2e/pages/FoodOrderPage.ts:101:28) 2026-10-16T03:11:03.019Z at /home/ubuntu/regression-runner/repos/dev/hotel-frontend-core/e2e/specs/hfe-food-item-search-all-category.spec.ts:292:21 2026-10-16T03:11:03.019Z attachment #1: screenshot (image/png) ────────────────────────────────────────────────────────── 2026-10-16T03:11:03.019Z test-results/hfe-food-item-search-all-c-0201b-not-sm-in-full-grid-context-chromium/test-failed-1.png 2026-10-16T03:11:03.019Z ──────────────────────────────────────────────────────────────────────────────────────────────── 2026-10-16T03:11:03.019Z Error Context: test-results/hfe-food-item-search-all-c-0201b-not-sm-in-full-grid-context-chromium/error-context.md 2026-10-16T03:11:03.019Z attachment #3: trace (application/zip) ───────────────────────────────────────────────────────── 2026-10-16T03:11:03.019Z test-results/hfe-food-item-search-all-c-0201b-not-sm-in-full-grid-context-chromium/trace.zip 2026-10-16T03:11:03.019Z Usage: 2026-10-16T03:11:03.019Z pnpm exec playwright show-trace test-results/hfe-food-item-search-all-c-0201b-not-sm-in-full-grid-context-chromium/trace.zip 2026-10-16T03:11:03.020Z ──────────────────────────────────────────────────────────────────────────────────────────────── 2026-10-16T03:11:03.020Z 16) [chromium] › e2e/specs/hfe-food-item-search-all-category.spec.ts:300:7 › AC-6: Empty categories show inline empty state [AC-6] › [TC-HFE-017] Empty category shows inline empty state in All-tab grouped view 2026-10-16T03:11:03.020Z Error: expect(locator).toBeVisible() failed 2026-10-16T03:11:03.020Z Locator: getByText('Specials') 2026-10-16T03:11:03.020Z Expected: visible 2026-10-16T03:11:03.020Z Timeout: 10000ms 2026-10-16T03:11:03.020Z Error: element(s) not found 2026-10-16T03:11:03.020Z Call log: 2026-10-16T03:11:03.020Z  - Expect "toBeVisible" with timeout 10000ms 2026-10-16T03:11:03.020Z  - waiting for getByText('Specials') 2026-10-16T03:11:03.020Z 301 | const foodOrder = new FoodOrderPage(page) 2026-10-16T03:11:03.020Z 302 | await foodOrder.goto(SEED_KITCHEN_ID) 2026-10-16T03:11:03.020Z > 303 | await expect(page.getByText('Specials')).toBeVisible() 2026-10-16T03:11:03.020Z | ^ 2026-10-16T03:11:03.020Z 304 | await expect(foodOrder.noItemsInCategoryText).toBeVisible() 2026-10-16T03:11:03.020Z 305 | await expect(foodOrder.noDataImageSm).toBeVisible() 2026-10-16T03:11:03.020Z 306 | }) 2026-10-16T03:11:03.020Z at /home/ubuntu/regression-runner/repos/dev/hotel-frontend-core/e2e/specs/hfe-food-item-search-all-category.spec.ts:303:46 2026-10-16T03:11:03.020Z attachment #1: screenshot (image/png) ────────────────────────────────────────────────────────── 2026-10-16T03:11:03.020Z test-results/hfe-food-item-search-all-c-2481b-ate-in-All-tab-grouped-view-chromium/test-failed-1.png 2026-10-16T03:11:03.020Z ──────────────────────────────────────────────────────────────────────────────────────────────── 2026-10-16T03:11:03.020Z Error Context: test-results/hfe-food-item-search-all-c-2481b-ate-in-All-tab-grouped-view-chromium/error-context.md 2026-10-16T03:11:03.020Z attachment #3: trace (application/zip) ───────────────────────────────────────────────────────── 2026-10-16T03:11:03.020Z test-results/hfe-food-item-search-all-c-2481b-ate-in-All-tab-grouped-view-chromium/trace.zip 2026-10-16T03:11:03.020Z Usage: 2026-10-16T03:11:03.020Z pnpm exec playwright show-trace test-results/hfe-food-item-search-all-c-2481b-ate-in-All-tab-grouped-view-chromium/trace.zip 2026-10-16T03:11:03.020Z ──────────────────────────────────────────────────────────────────────────────────────────────── 2026-10-16T03:11:03.020Z 17) [chromium] › e2e/specs/hfe-food-item-search-all-category.spec.ts:308:7 › AC-6: Empty categories show inline empty state [AC-6] › [TC-HFE-018] Clicking empty category tab in sidebar shows FoodItemEmptyState 2026-10-16T03:11:03.020Z Test timeout of 90000ms exceeded. 2026-10-16T03:11:03.020Z Error: locator.click: Test timeout of 90000ms exceeded. 2026-10-16T03:11:03.020Z Call log: 2026-10-16T03:11:03.020Z  - waiting for getByRole('button', { name: 'Specials' }).or(getByText('Specials', { exact: true })).first() 2026-10-16T03:11:03.020Z at ../pages/FoodOrderPage.ts:128 2026-10-16T03:11:03.020Z 126 | await testIdLocator.click() 2026-10-16T03:11:03.020Z 127 | } else { 2026-10-16T03:11:03.020Z > 128 | await textLocator.first().click() 2026-10-16T03:11:03.020Z | ^ 2026-10-16T03:11:03.020Z 129 | } 2026-10-16T03:11:03.021Z 130 | } 2026-10-16T03:11:03.021Z 131 | 2026-10-16T03:11:03.021Z at FoodOrderPage.clickCategoryTab (/home/ubuntu/regression-runner/repos/dev/hotel-frontend-core/e2e/pages/FoodOrderPage.ts:128:33) 2026-10-16T03:11:03.021Z at /home/ubuntu/regression-runner/repos/dev/hotel-frontend-core/e2e/specs/hfe-food-item-search-all-category.spec.ts:311:5 2026-10-16T03:11:03.021Z attachment #1: screenshot (image/png) ────────────────────────────────────────────────────────── 2026-10-16T03:11:03.021Z test-results/hfe-food-item-search-all-c-58d91-ar-shows-FoodItemEmptyState-chromium/test-failed-1.png 2026-10-16T03:11:03.021Z ──────────────────────────────────────────────────────────────────────────────────────────────── 2026-10-16T03:11:03.021Z Error Context: test-results/hfe-food-item-search-all-c-58d91-ar-shows-FoodItemEmptyState-chromium/error-context.md 2026-10-16T03:11:03.021Z attachment #3: trace (application/zip) ───────────────────────────────────────────────────────── 2026-10-16T03:11:03.021Z test-results/hfe-food-item-search-all-c-58d91-ar-shows-FoodItemEmptyState-chromium/trace.zip 2026-10-16T03:11:03.021Z Usage: 2026-10-16T03:11:03.021Z pnpm exec playwright show-trace test-results/hfe-food-item-search-all-c-58d91-ar-shows-FoodItemEmptyState-chromium/trace.zip 2026-10-16T03:11:03.021Z ──────────────────────────────────────────────────────────────────────────────────────────────── 2026-10-16T03:11:03.021Z 18) [chromium] › e2e/specs/hfe-food-item-search-all-category.spec.ts:317:7 › AC-6: Empty categories show inline empty state [AC-6] › [TC-HFE-019] Empty category still renders its heading — old isEmpty guard removed 2026-10-16T03:11:03.021Z Error: expect(locator).toBeVisible() failed 2026-10-16T03:11:03.021Z Locator: getByText('Specials') 2026-10-16T03:11:03.021Z Expected: visible 2026-10-16T03:11:03.021Z Timeout: 10000ms 2026-10-16T03:11:03.021Z Error: element(s) not found 2026-10-16T03:11:03.021Z Call log: 2026-10-16T03:11:03.021Z  - Expect "toBeVisible" with timeout 10000ms 2026-10-16T03:11:03.021Z  - waiting for getByText('Specials') 2026-10-16T03:11:03.021Z 321 | await foodOrder.goto(SEED_KITCHEN_ID) 2026-10-16T03:11:03.021Z 322 | // The "Specials" heading must appear in the DOM even without any items 2026-10-16T03:11:03.021Z > 323 | await expect(page.getByText('Specials')).toBeVisible() 2026-10-16T03:11:03.021Z | ^ 2026-10-16T03:11:03.021Z 324 | }) 2026-10-16T03:11:03.021Z 325 | }) 2026-10-16T03:11:03.021Z 326 | 2026-10-16T03:11:03.021Z at /home/ubuntu/regression-runner/repos/dev/hotel-frontend-core/e2e/specs/hfe-food-item-search-all-category.spec.ts:323:46 2026-10-16T03:11:03.021Z attachment #1: screenshot (image/png) ────────────────────────────────────────────────────────── 2026-10-16T03:11:03.021Z test-results/hfe-food-item-search-all-c-af8d3-—-old-isEmpty-guard-removed-chromium/test-failed-1.png 2026-10-16T03:11:03.021Z ──────────────────────────────────────────────────────────────────────────────────────────────── 2026-10-16T03:11:03.021Z Error Context: test-results/hfe-food-item-search-all-c-af8d3-—-old-isEmpty-guard-removed-chromium/error-context.md 2026-10-16T03:11:03.021Z attachment #3: trace (application/zip) ───────────────────────────────────────────────────────── 2026-10-16T03:11:03.021Z test-results/hfe-food-item-search-all-c-af8d3-—-old-isEmpty-guard-removed-chromium/trace.zip 2026-10-16T03:11:03.021Z Usage: 2026-10-16T03:11:03.021Z pnpm exec playwright show-trace test-results/hfe-food-item-search-all-c-af8d3-—-old-isEmpty-guard-removed-chromium/trace.zip 2026-10-16T03:11:03.021Z ──────────────────────────────────────────────────────────────────────────────────────────────── 2026-10-16T03:11:03.022Z 19) [chromium] › e2e/specs/hfe-food-item-search-all-category.spec.ts:330:7 › AC-7: All tab is first and unique in sidebar [AC-7] › [TC-HFE-020] All tab is first (topmost) item in sidebar on kitchen with many categories 2026-10-16T03:11:03.022Z Error: expect(locator).toBeVisible() failed 2026-10-16T03:11:03.022Z Locator: getByRole('button', { name: /^All$/ }).or(locator('[data-testid="category-all-tab"]')) 2026-10-16T03:11:03.022Z Expected: visible 2026-10-16T03:11:03.022Z Timeout: 10000ms 2026-10-16T03:11:03.022Z Error: element(s) not found 2026-10-16T03:11:03.022Z Call log: 2026-10-16T03:11:03.022Z  - Expect "toBeVisible" with timeout 10000ms 2026-10-16T03:11:03.022Z  - waiting for getByRole('button', { name: /^All$/ }).or(locator('[data-testid="category-all-tab"]')) 2026-10-16T03:11:03.022Z 333 | const foodOrder = new FoodOrderPage(page) 2026-10-16T03:11:03.022Z 334 | await foodOrder.goto(overflowKitchenId) 2026-10-16T03:11:03.022Z > 335 | await expect(foodOrder.allTab).toBeVisible() 2026-10-16T03:11:03.022Z | ^ 2026-10-16T03:11:03.022Z 336 | // All tab must be visible even after scrolling the sidebar to the bottom 2026-10-16T03:11:03.022Z 337 | await page.keyboard.press('End') 2026-10-16T03:11:03.022Z 338 | await expect(foodOrder.allTab).toBeInViewport() 2026-10-16T03:11:03.022Z at /home/ubuntu/regression-runner/repos/dev/hotel-frontend-core/e2e/specs/hfe-food-item-search-all-category.spec.ts:335:36 2026-10-16T03:11:03.022Z attachment #1: screenshot (image/png) ────────────────────────────────────────────────────────── 2026-10-16T03:11:03.022Z test-results/hfe-food-item-search-all-c-3b467-itchen-with-many-categories-chromium/test-failed-1.png 2026-10-16T03:11:03.022Z ──────────────────────────────────────────────────────────────────────────────────────────────── 2026-10-16T03:11:03.022Z Error Context: test-results/hfe-food-item-search-all-c-3b467-itchen-with-many-categories-chromium/error-context.md 2026-10-16T03:11:03.022Z attachment #3: trace (application/zip) ───────────────────────────────────────────────────────── 2026-10-16T03:11:03.022Z test-results/hfe-food-item-search-all-c-3b467-itchen-with-many-categories-chromium/trace.zip 2026-10-16T03:11:03.022Z Usage: 2026-10-16T03:11:03.022Z pnpm exec playwright show-trace test-results/hfe-food-item-search-all-c-3b467-itchen-with-many-categories-chromium/trace.zip 2026-10-16T03:11:03.022Z ──────────────────────────────────────────────────────────────────────────────────────────────── 2026-10-16T03:11:03.022Z 20) [chromium] › e2e/specs/hfe-food-item-search-all-category.spec.ts:341:7 › AC-7: All tab is first and unique in sidebar [AC-7] › [TC-HFE-021] All tab is never rendered more than once even with multiple categories 2026-10-16T03:11:03.022Z Error: expect(locator).toHaveCount(expected) failed 2026-10-16T03:11:03.022Z Locator: getByRole('button', { name: /^All$/ }).or(locator('[data-testid="category-all-tab"]')) 2026-10-16T03:11:03.022Z Expected: 1 2026-10-16T03:11:03.022Z Received: 0 2026-10-16T03:11:03.022Z Timeout: 10000ms 2026-10-16T03:11:03.022Z Call log: 2026-10-16T03:11:03.022Z  - Expect "toHaveCount" with timeout 10000ms 2026-10-16T03:11:03.022Z  - waiting for getByRole('button', { name: /^All$/ }).or(locator('[data-testid="category-all-tab"]')) 2026-10-16T03:11:03.022Z  14 × locator resolved to 0 elements 2026-10-16T03:11:03.022Z  - unexpected value "0" 2026-10-16T03:11:03.022Z 342 | const foodOrder = new FoodOrderPage(page) 2026-10-16T03:11:03.022Z 343 | await foodOrder.goto(SEED_KITCHEN_ID) 2026-10-16T03:11:03.022Z > 344 | await expect(foodOrder.allTab).toHaveCount(1) 2026-10-16T03:11:03.022Z | ^ 2026-10-16T03:11:03.022Z 345 | }) 2026-10-16T03:11:03.022Z 346 | }) 2026-10-16T03:11:03.022Z 347 | 2026-10-16T03:11:03.022Z at /home/ubuntu/regression-runner/repos/dev/hotel-frontend-core/e2e/specs/hfe-food-item-search-all-category.spec.ts:344:36 2026-10-16T03:11:03.022Z attachment #1: screenshot (image/png) ────────────────────────────────────────────────────────── 2026-10-16T03:11:03.022Z test-results/hfe-food-item-search-all-c-a16a4-en-with-multiple-categories-chromium/test-failed-1.png 2026-10-16T03:11:03.022Z ──────────────────────────────────────────────────────────────────────────────────────────────── 2026-10-16T03:11:03.023Z Error Context: test-results/hfe-food-item-search-all-c-a16a4-en-with-multiple-categories-chromium/error-context.md 2026-10-16T03:11:03.023Z attachment #3: trace (application/zip) ───────────────────────────────────────────────────────── 2026-10-16T03:11:03.023Z test-results/hfe-food-item-search-all-c-a16a4-en-with-multiple-categories-chromium/trace.zip 2026-10-16T03:11:03.023Z Usage: 2026-10-16T03:11:03.023Z pnpm exec playwright show-trace test-results/hfe-food-item-search-all-c-a16a4-en-with-multiple-categories-chromium/trace.zip 2026-10-16T03:11:03.023Z ──────────────────────────────────────────────────────────────────────────────────────────────── 2026-10-16T03:11:03.023Z 21) [chromium] › e2e/specs/hfe-food-item-search-all-category.spec.ts:351:7 › Regression: existing behaviours unaffected by feature merge › [TC-HFE-029] Existing category-tab item display unaffected after feature merge 2026-10-16T03:11:03.023Z Test timeout of 90000ms exceeded. 2026-10-16T03:11:03.023Z Error: locator.click: Test timeout of 90000ms exceeded. 2026-10-16T03:11:03.023Z Call log: 2026-10-16T03:11:03.023Z  - waiting for getByRole('button', { name: 'Starters' }).or(getByText('Starters', { exact: true })).first() 2026-10-16T03:11:03.023Z at ../pages/FoodOrderPage.ts:128 2026-10-16T03:11:03.023Z 126 | await testIdLocator.click() 2026-10-16T03:11:03.023Z 127 | } else { 2026-10-16T03:11:03.023Z > 128 | await textLocator.first().click() 2026-10-16T03:11:03.023Z | ^ 2026-10-16T03:11:03.023Z 129 | } 2026-10-16T03:11:03.023Z 130 | } 2026-10-16T03:11:03.023Z 131 | 2026-10-16T03:11:03.023Z at FoodOrderPage.clickCategoryTab (/home/ubuntu/regression-runner/repos/dev/hotel-frontend-core/e2e/pages/FoodOrderPage.ts:128:33) 2026-10-16T03:11:03.023Z at /home/ubuntu/regression-runner/repos/dev/hotel-frontend-core/e2e/specs/hfe-food-item-search-all-category.spec.ts:354:5 2026-10-16T03:11:03.023Z attachment #1: screenshot (image/png) ────────────────────────────────────────────────────────── 2026-10-16T03:11:03.023Z test-results/hfe-food-item-search-all-c-071b4-ffected-after-feature-merge-chromium/test-failed-1.png 2026-10-16T03:11:03.023Z ──────────────────────────────────────────────────────────────────────────────────────────────── 2026-10-16T03:11:03.023Z Error Context: test-results/hfe-food-item-search-all-c-071b4-ffected-after-feature-merge-chromium/error-context.md 2026-10-16T03:11:03.023Z attachment #3: trace (application/zip) ───────────────────────────────────────────────────────── 2026-10-16T03:11:03.023Z test-results/hfe-food-item-search-all-c-071b4-ffected-after-feature-merge-chromium/trace.zip 2026-10-16T03:11:03.023Z Usage: 2026-10-16T03:11:03.023Z pnpm exec playwright show-trace test-results/hfe-food-item-search-all-c-071b4-ffected-after-feature-merge-chromium/trace.zip 2026-10-16T03:11:03.023Z ──────────────────────────────────────────────────────────────────────────────────────────────── 2026-10-16T03:11:03.023Z 22) [chromium] › e2e/specs/hfe-food-item-search-all-category.spec.ts:360:7 › Regression: existing behaviours unaffected by feature merge › [TC-HFE-030] SelectOptionModal still opens when item with options is clicked 2026-10-16T03:11:03.023Z Test timeout of 90000ms exceeded. 2026-10-16T03:11:03.023Z Error: locator.click: Test timeout of 90000ms exceeded. 2026-10-16T03:11:03.023Z Call log: 2026-10-16T03:11:03.023Z  - waiting for locator('[data-testid="food-item-card"]').or(locator('.bg-white.rounded-\\[8px\\].border.border-backgroundColor-secondary')).first() 2026-10-16T03:11:03.023Z 363 | await foodOrder.goto(SEED_KITCHEN_ID) 2026-10-16T03:11:03.023Z 364 | // Click the first item in the grid that has options 2026-10-16T03:11:03.023Z > 365 | await foodOrder.itemCards().first().click() 2026-10-16T03:11:03.023Z | ^ 2026-10-16T03:11:03.023Z 366 | /* NEEDS_TESTID: select-option-modal — SelectOptionModal dialog root */ 2026-10-16T03:11:03.023Z 367 | await expect(page.locator('[data-testid="select-option-modal"]').or( 2026-10-16T03:11:03.023Z 368 | page.getByRole('dialog') 2026-10-16T03:11:03.023Z at /home/ubuntu/regression-runner/repos/dev/hotel-frontend-core/e2e/specs/hfe-food-item-search-all-category.spec.ts:365:41 2026-10-16T03:11:03.023Z attachment #1: screenshot (image/png) ────────────────────────────────────────────────────────── 2026-10-16T03:11:03.023Z test-results/hfe-food-item-search-all-c-ac433-tem-with-options-is-clicked-chromium/test-failed-1.png 2026-10-16T03:11:03.023Z ──────────────────────────────────────────────────────────────────────────────────────────────── 2026-10-16T03:11:03.023Z Error Context: test-results/hfe-food-item-search-all-c-ac433-tem-with-options-is-clicked-chromium/error-context.md 2026-10-16T03:11:03.023Z attachment #3: trace (application/zip) ───────────────────────────────────────────────────────── 2026-10-16T03:11:03.023Z test-results/hfe-food-item-search-all-c-ac433-tem-with-options-is-clicked-chromium/trace.zip 2026-10-16T03:11:03.023Z Usage: 2026-10-16T03:11:03.023Z pnpm exec playwright show-trace test-results/hfe-food-item-search-all-c-ac433-tem-with-options-is-clicked-chromium/trace.zip 2026-10-16T03:11:03.024Z ──────────────────────────────────────────────────────────────────────────────────────────────── 2026-10-16T03:11:03.024Z 23) [chromium] › e2e/specs/hfe-food-item-search-all-category.spec.ts:372:7 › Regression: existing behaviours unaffected by feature merge › [TC-HFE-031] Mobile OrderSummary search returns flat cross-category results (no duplication) 2026-10-16T03:11:03.024Z Test timeout of 90000ms exceeded. 2026-10-16T03:11:03.024Z Error: locator.fill: Test timeout of 90000ms exceeded. 2026-10-16T03:11:03.024Z Call log: 2026-10-16T03:11:03.024Z  - waiting for locator('input[placeholder="Search Item Name/Code"]') 2026-10-16T03:11:03.024Z at ../pages/FoodOrderPage.ts:101 2026-10-16T03:11:03.024Z 99 | 2026-10-16T03:11:03.024Z 100 | async fillSearch(query: string): Promise { 2026-10-16T03:11:03.024Z > 101 | await this.searchInput.fill(query) 2026-10-16T03:11:03.024Z | ^ 2026-10-16T03:11:03.024Z 102 | } 2026-10-16T03:11:03.024Z 103 | 2026-10-16T03:11:03.024Z 104 | async clearSearch(): Promise { 2026-10-16T03:11:03.024Z at FoodOrderPage.fillSearch (/home/ubuntu/regression-runner/repos/dev/hotel-frontend-core/e2e/pages/FoodOrderPage.ts:101:28) 2026-10-16T03:11:03.024Z at /home/ubuntu/regression-runner/repos/dev/hotel-frontend-core/e2e/specs/hfe-food-item-search-all-category.spec.ts:376:21 2026-10-16T03:11:03.024Z attachment #1: screenshot (image/png) ────────────────────────────────────────────────────────── 2026-10-16T03:11:03.024Z test-results/hfe-food-item-search-all-c-41536-ory-results-no-duplication--chromium/test-failed-1.png 2026-10-16T03:11:03.024Z ──────────────────────────────────────────────────────────────────────────────────────────────── 2026-10-16T03:11:03.024Z Error Context: test-results/hfe-food-item-search-all-c-41536-ory-results-no-duplication--chromium/error-context.md 2026-10-16T03:11:03.024Z attachment #3: trace (application/zip) ───────────────────────────────────────────────────────── 2026-10-16T03:11:03.024Z test-results/hfe-food-item-search-all-c-41536-ory-results-no-duplication--chromium/trace.zip 2026-10-16T03:11:03.024Z Usage: 2026-10-16T03:11:03.024Z pnpm exec playwright show-trace test-results/hfe-food-item-search-all-c-41536-ory-results-no-duplication--chromium/trace.zip 2026-10-16T03:11:03.024Z ──────────────────────────────────────────────────────────────────────────────────────────────── 2026-10-16T03:11:03.024Z 24) [chromium] › e2e/specs/hfe-food-item-search-all-category.spec.ts:383:7 › Regression: existing behaviours unaffected by feature merge › [TC-HFE-032] Mobile empty state renders on no search results in OrderSummary 2026-10-16T03:11:03.024Z Test timeout of 90000ms exceeded. 2026-10-16T03:11:03.024Z Error: locator.fill: Test timeout of 90000ms exceeded. 2026-10-16T03:11:03.024Z Call log: 2026-10-16T03:11:03.024Z  - waiting for locator('input[placeholder="Search Item Name/Code"]') 2026-10-16T03:11:03.024Z at ../pages/FoodOrderPage.ts:101 2026-10-16T03:11:03.024Z 99 | 2026-10-16T03:11:03.024Z 100 | async fillSearch(query: string): Promise { 2026-10-16T03:11:03.024Z > 101 | await this.searchInput.fill(query) 2026-10-16T03:11:03.024Z | ^ 2026-10-16T03:11:03.024Z 102 | } 2026-10-16T03:11:03.024Z 103 | 2026-10-16T03:11:03.024Z 104 | async clearSearch(): Promise { 2026-10-16T03:11:03.024Z at FoodOrderPage.fillSearch (/home/ubuntu/regression-runner/repos/dev/hotel-frontend-core/e2e/pages/FoodOrderPage.ts:101:28) 2026-10-16T03:11:03.024Z at /home/ubuntu/regression-runner/repos/dev/hotel-frontend-core/e2e/specs/hfe-food-item-search-all-category.spec.ts:387:21 2026-10-16T03:11:03.024Z attachment #1: screenshot (image/png) ────────────────────────────────────────────────────────── 2026-10-16T03:11:03.024Z test-results/hfe-food-item-search-all-c-96df8-rch-results-in-OrderSummary-chromium/test-failed-1.png 2026-10-16T03:11:03.024Z ──────────────────────────────────────────────────────────────────────────────────────────────── 2026-10-16T03:11:03.024Z Error Context: test-results/hfe-food-item-search-all-c-96df8-rch-results-in-OrderSummary-chromium/error-context.md 2026-10-16T03:11:03.024Z attachment #3: trace (application/zip) ───────────────────────────────────────────────────────── 2026-10-16T03:11:03.024Z test-results/hfe-food-item-search-all-c-96df8-rch-results-in-OrderSummary-chromium/trace.zip 2026-10-16T03:11:03.024Z Usage: 2026-10-16T03:11:03.024Z pnpm exec playwright show-trace test-results/hfe-food-item-search-all-c-96df8-rch-results-in-OrderSummary-chromium/trace.zip 2026-10-16T03:11:03.024Z ──────────────────────────────────────────────────────────────────────────────────────────────── 2026-10-16T03:11:03.024Z 25) [chromium] › e2e/specs/hfe-food-item-search-all-category.spec.ts:397:7 › Regression: existing behaviours unaffected by feature merge › [TC-HFE-034] FoodItemCard 'Unavailable' badge still renders for unavailable items in All tab 2026-10-16T03:11:03.024Z Error: expect(locator).toBeVisible() failed 2026-10-16T03:11:03.025Z Locator: getByText('Unavailable') 2026-10-16T03:11:03.025Z Expected: visible 2026-10-16T03:11:03.025Z Timeout: 10000ms 2026-10-16T03:11:03.025Z Error: element(s) not found 2026-10-16T03:11:03.025Z Call log: 2026-10-16T03:11:03.025Z  - Expect "toBeVisible" with timeout 10000ms 2026-10-16T03:11:03.025Z  - waiting for getByText('Unavailable') 2026-10-16T03:11:03.025Z 398 | const foodOrder = new FoodOrderPage(page) 2026-10-16T03:11:03.025Z 399 | await foodOrder.goto(SEED_KITCHEN_ID) 2026-10-16T03:11:03.025Z > 400 | await expect(page.getByText('Unavailable')).toBeVisible() 2026-10-16T03:11:03.025Z | ^ 2026-10-16T03:11:03.025Z 401 | }) 2026-10-16T03:11:03.025Z 402 | 2026-10-16T03:11:03.025Z 403 | test('[TC-HFE-035] Category \'Off\' badge still renders for inactive/closed categories in sidebar', async ({ page }) => { 2026-10-16T03:11:03.025Z at /home/ubuntu/regression-runner/repos/dev/hotel-frontend-core/e2e/specs/hfe-food-item-search-all-category.spec.ts:400:49 2026-10-16T03:11:03.025Z attachment #1: screenshot (image/png) ────────────────────────────────────────────────────────── 2026-10-16T03:11:03.025Z test-results/hfe-food-item-search-all-c-f2610-navailable-items-in-All-tab-chromium/test-failed-1.png 2026-10-16T03:11:03.025Z ──────────────────────────────────────────────────────────────────────────────────────────────── 2026-10-16T03:11:03.025Z Error Context: test-results/hfe-food-item-search-all-c-f2610-navailable-items-in-All-tab-chromium/error-context.md 2026-10-16T03:11:03.025Z attachment #3: trace (application/zip) ───────────────────────────────────────────────────────── 2026-10-16T03:11:03.025Z test-results/hfe-food-item-search-all-c-f2610-navailable-items-in-All-tab-chromium/trace.zip 2026-10-16T03:11:03.025Z Usage: 2026-10-16T03:11:03.025Z pnpm exec playwright show-trace test-results/hfe-food-item-search-all-c-f2610-navailable-items-in-All-tab-chromium/trace.zip 2026-10-16T03:11:03.025Z ──────────────────────────────────────────────────────────────────────────────────────────────── 2026-10-16T03:11:03.025Z 26) [chromium] › e2e/specs/hfe-food-item-search-all-category.spec.ts:403:7 › Regression: existing behaviours unaffected by feature merge › [TC-HFE-035] Category 'Off' badge still renders for inactive/closed categories in sidebar 2026-10-16T03:11:03.025Z Error: expect(locator).toBeVisible() failed 2026-10-16T03:11:03.025Z Locator: getByText('Off') 2026-10-16T03:11:03.025Z Expected: visible 2026-10-16T03:11:03.025Z Timeout: 10000ms 2026-10-16T03:11:03.025Z Error: element(s) not found 2026-10-16T03:11:03.025Z Call log: 2026-10-16T03:11:03.025Z  - Expect "toBeVisible" with timeout 10000ms 2026-10-16T03:11:03.025Z  - waiting for getByText('Off') 2026-10-16T03:11:03.025Z 404 | const foodOrder = new FoodOrderPage(page) 2026-10-16T03:11:03.025Z 405 | await foodOrder.goto(SEED_KITCHEN_ID) 2026-10-16T03:11:03.025Z > 406 | await expect(page.getByText('Off')).toBeVisible() 2026-10-16T03:11:03.025Z | ^ 2026-10-16T03:11:03.025Z 407 | }) 2026-10-16T03:11:03.025Z 408 | }) 2026-10-16T03:11:03.025Z 409 | 2026-10-16T03:11:03.025Z at /home/ubuntu/regression-runner/repos/dev/hotel-frontend-core/e2e/specs/hfe-food-item-search-all-category.spec.ts:406:41 2026-10-16T03:11:03.025Z attachment #1: screenshot (image/png) ────────────────────────────────────────────────────────── 2026-10-16T03:11:03.025Z test-results/hfe-food-item-search-all-c-745a0-losed-categories-in-sidebar-chromium/test-failed-1.png 2026-10-16T03:11:03.026Z ──────────────────────────────────────────────────────────────────────────────────────────────── 2026-10-16T03:11:03.026Z Error Context: test-results/hfe-food-item-search-all-c-745a0-losed-categories-in-sidebar-chromium/error-context.md 2026-10-16T03:11:03.026Z attachment #3: trace (application/zip) ───────────────────────────────────────────────────────── 2026-10-16T03:11:03.026Z test-results/hfe-food-item-search-all-c-745a0-losed-categories-in-sidebar-chromium/trace.zip 2026-10-16T03:11:03.026Z Usage: 2026-10-16T03:11:03.026Z pnpm exec playwright show-trace test-results/hfe-food-item-search-all-c-745a0-losed-categories-in-sidebar-chromium/trace.zip 2026-10-16T03:11:03.026Z ──────────────────────────────────────────────────────────────────────────────────────────────── 2026-10-16T03:11:03.026Z 27) [chromium] › e2e/specs/hfe-food-item-search-all-category.spec.ts:413:7 › Performance: All-tab initial render › [TC-HFE-036] All-tab initial render with 200-item catalog completes within 2 seconds 2026-10-16T03:11:03.026Z Error: expect(locator).toBeVisible() failed 2026-10-16T03:11:03.026Z Locator: locator('[data-testid="food-item-card"]').or(locator('.bg-white.rounded-\\[8px\\].border.border-backgroundColor-secondary')).first() 2026-10-16T03:11:03.026Z Expected: visible 2026-10-16T03:11:03.026Z Timeout: 2000ms 2026-10-16T03:11:03.026Z Error: element(s) not found 2026-10-16T03:11:03.026Z Call log: 2026-10-16T03:11:03.026Z  - Expect "toBeVisible" with timeout 2000ms 2026-10-16T03:11:03.026Z  - waiting for locator('[data-testid="food-item-card"]').or(locator('.bg-white.rounded-\\[8px\\].border.border-backgroundColor-secondary')).first() 2026-10-16T03:11:03.026Z 418 | await foodOrder.goto(largeKitchenId) 2026-10-16T03:11:03.027Z 419 | // Wait for item cards to be visible (indicates page is interactive) 2026-10-16T03:11:03.027Z > 420 | await expect(foodOrder.itemCards().first()).toBeVisible({ timeout: 2000 }) 2026-10-16T03:11:03.027Z | ^ 2026-10-16T03:11:03.027Z 421 | const elapsed = Date.now() - startTime 2026-10-16T03:11:03.027Z 422 | expect(elapsed, `Page should be interactive within 2000ms, was ${elapsed}ms`).toBeLessThanOrEqual(2000) 2026-10-16T03:11:03.027Z 423 | }) 2026-10-16T03:11:03.027Z at /home/ubuntu/regression-runner/repos/dev/hotel-frontend-core/e2e/specs/hfe-food-item-search-all-category.spec.ts:420:49 2026-10-16T03:11:03.027Z attachment #1: screenshot (image/png) ────────────────────────────────────────────────────────── 2026-10-16T03:11:03.027Z test-results/hfe-food-item-search-all-c-43310--completes-within-2-seconds-chromium/test-failed-1.png 2026-10-16T03:11:03.027Z ──────────────────────────────────────────────────────────────────────────────────────────────── 2026-10-16T03:11:03.027Z Error Context: test-results/hfe-food-item-search-all-c-43310--completes-within-2-seconds-chromium/error-context.md 2026-10-16T03:11:03.027Z attachment #3: trace (application/zip) ───────────────────────────────────────────────────────── 2026-10-16T03:11:03.027Z test-results/hfe-food-item-search-all-c-43310--completes-within-2-seconds-chromium/trace.zip 2026-10-16T03:11:03.027Z Usage: 2026-10-16T03:11:03.027Z pnpm exec playwright show-trace test-results/hfe-food-item-search-all-c-43310--completes-within-2-seconds-chromium/trace.zip 2026-10-16T03:11:03.027Z ──────────────────────────────────────────────────────────────────────────────────────────────── 2026-10-16T03:11:03.027Z 28) [chromium] › e2e/specs/prd-2026-005-active-template.spec.ts:38:6 › PRD-2026-005 — Active custom template wins › TC-PRD-090 assigning a custom template makes regenerated PDF use it 2026-10-16T03:11:03.027Z Error: expect(received).toBe(expected) // Object.is equality 2026-10-16T03:11:03.027Z Expected: true 2026-10-16T03:11:03.027Z Received: false 2026-10-16T03:11:03.027Z 106 | }, 2026-10-16T03:11:03.027Z 107 | ); 2026-10-16T03:11:03.027Z > 108 | expect(createResp.ok()).toBe(true); 2026-10-16T03:11:03.027Z | ^ 2026-10-16T03:11:03.027Z 109 | const created = (await createResp.json()) as { id: string }; 2026-10-16T03:11:03.027Z 110 | 2026-10-16T03:11:03.027Z 111 | // 2. Capture current assignment so we can restore it. 2026-10-16T03:11:03.027Z at /home/ubuntu/regression-runner/repos/dev/hotel-frontend-core/e2e/specs/prd-2026-005-active-template.spec.ts:108:27 2026-10-16T03:11:03.027Z attachment #1: screenshot (image/png) ────────────────────────────────────────────────────────── 2026-10-16T03:11:03.028Z test-results/prd-2026-005-active-templa-5f274-akes-regenerated-PDF-use-it-chromium/test-failed-1.png 2026-10-16T03:11:03.028Z ──────────────────────────────────────────────────────────────────────────────────────────────── 2026-10-16T03:11:03.028Z Error Context: test-results/prd-2026-005-active-templa-5f274-akes-regenerated-PDF-use-it-chromium/error-context.md 2026-10-16T03:11:03.028Z attachment #3: trace (application/zip) ───────────────────────────────────────────────────────── 2026-10-16T03:11:03.028Z test-results/prd-2026-005-active-templa-5f274-akes-regenerated-PDF-use-it-chromium/trace.zip 2026-10-16T03:11:03.028Z Usage: 2026-10-16T03:11:03.028Z pnpm exec playwright show-trace test-results/prd-2026-005-active-templa-5f274-akes-regenerated-PDF-use-it-chromium/trace.zip 2026-10-16T03:11:03.028Z ──────────────────────────────────────────────────────────────────────────────────────────────── 2026-10-16T03:11:03.028Z 29) [chromium] › e2e/specs/prd-2026-005-deep-verification.spec.ts:29:6 › PRD-2026-005 — deep verification › TC-PRD-070 IGST selection survives save → backend GET returns taxMode=IGST 2026-10-16T03:11:03.028Z Error: expect(locator).toHaveAttribute(expected) failed 2026-10-16T03:11:03.028Z Locator: getByTestId('invoice-tax-mode-igst') 2026-10-16T03:11:03.028Z Expected: "true" 2026-10-16T03:11:03.028Z Received: "" 2026-10-16T03:11:03.028Z Timeout: 10000ms 2026-10-16T03:11:03.028Z Call log: 2026-10-16T03:11:03.028Z  - Expect "toHaveAttribute" with timeout 10000ms 2026-10-16T03:11:03.028Z  - waiting for getByTestId('invoice-tax-mode-igst') 2026-10-16T03:11:03.028Z  13 × locator resolved to