CU-07: Host-side booking management: book-on-behalf, no-show, notes, guests, cancel/reschedule
Priority: P1 Accounts/sessions: P1 host (ravikantguptaofficial@gmail.com) logged into Calendo via Google; P1's Google Calendar connected; P1's Gmail is the host notification inbox. Invitees use plus-aliases of P1's Gmail. P3 (everythingaichannelemail@gmail.com) is the real guest. Also needs P1's Gmail (mail.google.com) and Google Calendar (calendar.google.com) reachable in the same browser for L3. Parallel-safe: Yes — all created objects are RUNID-scoped; no global availability is rewritten. Exclusive (rewrites global host availability?): No. Estimated time: ~40 minutes for one full run. L3 reality checks: Yes — invitee confirmation email (Gmail), guest invitation email (Gmail + P3 inbox if accessible), real Google Calendar event created/moved/deleted, cancellation email, reschedule email.
Goal
This suite proves the host (meeting owner) can fully manage bookings from the Calendo dashboard end-to-end: create a booking on an invitee's behalf, browse and filter the bookings list, open a booking's detail sidebar and read its fields, mark a past booking as a no-show (and see it counted in analytics), attach an internal note that survives reload, attach an extra guest to a booking, and cancel and reschedule bookings — with each operation reflected in the real Google Calendar and the real Gmail inbox. This is the daily operational surface a real host lives in; if any of it silently fails, the host loses trust that Calendo is the source of truth for their calendar.
Preconditions
- Logged-in session: The browser must already be signed into Calendo as P1 at
https://calendo.dev/dashboard/. Verify the dashboard renders (#appLayoutvisible,#welcomeHeadervisible). If you are bounced to/auth/login.html, STOP and flag a precondition failure per00-setup-preconditions.md— do NOT attempt a cold email/password or Google password login. - Google Calendar connected to Calendo for P1: Required so that booking-on-behalf, cancel, and reschedule produce real Google Calendar mutations. Confirm via dashboard
settingstab that Google Calendar shows connected. If not connected, the L3 calendar checks cannot pass — flag it and continue collecting L1/L2 evidence only, marking L3 as BLOCKED. - Gmail + Google Calendar reachable:
mail.google.comandcalendar.google.commust open while signed in asravikantguptaofficial@gmail.comin the same browser. If a Google re-auth wall appears, flag it as a precondition issue (do not type a password) and mark affected L3 checks BLOCKED. - At least one bookable event type with
allow_guestsenabled: This suite CREATES its own event type with guests allowed, so no pre-existing event type is required. If event-type creation fails, flag it and stop — the rest of the suite depends on it. - Baseline availability: P1 must have some available future slots (default weekly availability is sufficient). If the public booking calendar shows no available days across 6 months, flag a precondition failure.
- If ANY precondition is missing, FLAG it explicitly in the results report and do not improvise an alternative login or connection.
Test data
Pick a fresh RUNID at execution time, e.g. a UTC timestamp 20260601-1530. Embed it in every created name/slug/email so reruns never collide.
- Event type (created by this suite):
- Name:
CU07 Host Mgmt <RUNID> - Slug (auto-derived):
cu07-host-mgmt-<RUNID>(lowercase, spaces→hyphens) - Duration:
30 - Guests: Allow guests = ON (needed for the guest sub-test)
- Name:
- Host slug (P1): Read from the dashboard overview booking link (
#bookingLinkValue, the text afteruser=). Call it<HOST_SLUG>. Do NOT hardcode it. - Booking A — Book-on-behalf, future: invitee
CU07 OnBehalf <RUNID>/ravikantguptaofficial+inv-onbehalf-<RUNID>@gmail.com. - Booking B — Past, for no-show + notes: invitee
CU07 NoShow <RUNID>/ravikantguptaofficial+inv-noshow-<RUNID>@gmail.com. Created via book-on-behalf with a start time ~10 minutes in the PAST (so the no-show and notes targets exist immediately). - Booking C — Public booking WITH a guest: invitee
CU07 Guest <RUNID>/ravikantguptaofficial+inv-guest-<RUNID>@gmail.com, guest emaileverythingaichannelemail@gmail.com(P3). - Booking D — Cancel target, future: invitee
CU07 Cancel <RUNID>/ravikantguptaofficial+inv-cancel-<RUNID>@gmail.com. - Booking E — Reschedule target, future: invitee
CU07 Resched <RUNID>/ravikantguptaofficial+inv-resched-<RUNID>@gmail.com.
Steps
Phase 0 — Set up the event type and capture host slug
- Action: Go to
https://calendo.dev/dashboard/. Confirm the dashboard loaded (sidebar visible,#appLayout). On the Overview, locate the share/booking URL text (#bookingLinkValue) and record the value afteruser=as<HOST_SLUG>. Expect: A non-empty booking link likehttps://calendo.dev/booking/?user=<HOST_SLUG>. [L1]- Capture screenshot:
cu07-00-dashboard-overview.
- Capture screenshot:
- Action: On the Overview, click the "+ New" event-type button (
#overviewCreateEtBtn). In the modal (#editEtModal) fill name =CU07 Host Mgmt <RUNID>(#editEtName), select duration30(#editEtDuration), and set descriptionCU-07 runbook event(#editEtDesc). Expect: Modal open with fields populated. [L1] - Action: Before saving, enable "Allow guests" (
#etAllowGuestsToggle— the toggle near the "Allow guests" label). Then click Create/Save (#editEtSaveBtn). Expect: Modal closes; the new event typeCU07 Host Mgmt <RUNID>appears in the overview event-type list (#overviewEventTypes). [L1][L2]- Note the derived slug
cu07-host-mgmt-<RUNID>. - Capture screenshot:
cu07-01-event-type-created.
- Note the derived slug
Phase 1 — Book on behalf (future) + L3 calendar/email
- Action: Open the Bookings tab (sidebar link
.sidebar-nav a[data-tab="bookings"]). Expect: Bookings panel active (#panel-bookings.active); filter bar shows Upcoming/Past/Cancelled (.filter-btn[data-filter="upcoming"]active by default); the "+ Book on Behalf" button is visible (#bookOnBehalfBtn). [L1] - Action: Click "+ Book on Behalf" (
#bookOnBehalfBtn). Expect: The book-on-behalf form appears (#bookOnBehalfFormbecomes visible). [L1] - Action: In the form, select the event type
CU07 Host Mgmt <RUNID>in the Event Type dropdown (#bobEventType); set Date & Time (#bobStartTime, adatetime-localinterpreted in the HOST's timezone) to a clearly future, in-availability slot (e.g. tomorrow at 10:00 AM host time); enter Invitee NameCU07 OnBehalf <RUNID>(#bobName) and Invitee Emailravikantguptaofficial+inv-onbehalf-<RUNID>@gmail.com(#bobEmail); leave Notes (#bobNotes) empty. Expect: All fields populated. [L1] - Action: Click "Create Booking" (
#bobSubmitBtn). Expect: A toast "Booking created" appears; the form hides; the bookings list refreshes and shows a meeting row containingCU07 OnBehalf <RUNID>under the Upcoming filter. [L1][L2]- Capture screenshot:
cu07-02-book-on-behalf-created. - Why this order: the dashboard reloads bookings after creation, so the new row should be present before you assert.
- Capture screenshot:
- Action: Reload the page (
https://calendo.dev/dashboard/) and return to Bookings → Upcoming. Expect:CU07 OnBehalf <RUNID>still present after reload (persistence). [L2]
Phase 2 — Create the PAST booking (no-show + notes target)
- Action: Click "+ Book on Behalf" again (
#bookOnBehalfBtn). SelectCU07 Host Mgmt <RUNID>(#bobEventType); set Date & Time (#bobStartTime) to ~10 minutes in the PAST (today's date, current host time minus ~10 min); enter Invitee NameCU07 NoShow <RUNID>(#bobName) and Emailravikantguptaofficial+inv-noshow-<RUNID>@gmail.com(#bobEmail). Click "Create Booking" (#bobSubmitBtn). Expect: Toast "Booking created". [L1][L2]- Why a past time: the "Mark no-show" action only renders for past confirmed Calendo bookings, and notes are most realistically exercised on a completed meeting. If the server rejects a past start_time, fall back to the nearest-allowed near-future time, wait until it is past, then proceed — and note this in the report.
- Action: Switch to the Past filter (
.filter-btn[data-filter="past"]). Expect:CU07 NoShow <RUNID>appears in the Past list. [L1][L2]- Capture screenshot:
cu07-03-past-booking.
- Capture screenshot:
Phase 3 — Filters sanity
- Action: Click Upcoming (
.filter-btn[data-filter="upcoming"]). Expect:CU07 OnBehalf <RUNID>is present;CU07 NoShow <RUNID>is NOT present (it is past). [L1] - Action: Click Cancelled (
.filter-btn[data-filter="cancelled"]). Expect: NeitherCU07 OnBehalf <RUNID>norCU07 NoShow <RUNID>appears (nothing cancelled yet); empty-state or unrelated rows only. [L1] - Action: Return to Upcoming and type
CU07 OnBehalf <RUNID>into the meeting search box (#meetingSearch). Expect: Only the matching booking row remains visible; clearing the search restores the list. [L1]
Phase 4 — Detail sidebar fields
- Action: On the Past filter, click the
CU07 NoShow <RUNID>meeting row (.meeting-row, which callsopenMeetingDetail(...)). Expect: The detail sidebar slides in (#meetingDetailSidebargains classopen; overlay#mdsOverlaybecomes visible). Header shows status "Past meeting" (#mdsStatus), event titleCU07 Host Mgmt <RUNID>(#mdsTitle), and the date/time line (#mdsDatetime). [L1] - Action: Read the sidebar body (
#mdsBody). Expect: An "Invitee" section showingCU07 NoShow <RUNID>(with avatar initials,.mds-invitee-avatar) and the invitee emailravikantguptaofficial+inv-noshow-<RUNID>@gmail.com; a "Location" section; a "Notes" section with an empty textarea (#mdsNotesTextarea) and a "Save notes" button; and a "Timeline" section beginning with "Event booked by …". [L1]- Capture screenshot:
cu07-04-detail-sidebar.
- Capture screenshot:
Phase 5 — Internal note persists across reload
- Action: In the Notes textarea (
#mdsNotesTextarea), typeInternal note CU07 <RUNID> — invitee did not join. Click "Save notes" (thesaveSidebarNotes(...)button in the Notes section). Expect: Toast "Notes saved". [L1] - Action: Close the sidebar (
closeMeetingDetail()via the ×.mds-closeor overlay), then reload the dashboard, return to Bookings → Past, and reopen theCU07 NoShow <RUNID>row. Expect: The Notes textarea (#mdsNotesTextarea) is pre-filled withInternal note CU07 <RUNID> — invitee did not join. [L2]- Capture screenshot:
cu07-05-note-persisted.
- Capture screenshot:
Phase 6 — Mark no-show + analytics reflects it
- Action: Before marking, open the Analytics tab (
.sidebar-nav a[data-tab="analytics"]) and record the current No-Show Rate value (#statNoShowRate) and Total Bookings (#statTotal). Expect: Stats render (panel#panel-analytics.active,#analyticsStatsvisible). Record the baseline No-Show Rate %. [L1]- Capture screenshot:
cu07-06-analytics-before.
- Capture screenshot:
- Action: Go back to Bookings → Past, open the
CU07 NoShow <RUNID>row, and click "Mark no-show" in the sidebar actions (#mdsActions→ the button rendered bymarkNoShow(<id>), orange-bordered "Mark no-show"). Expect: A confirm dialog (#confirmDialog) appears asking to mark the booking withCU07 NoShow <RUNID>as a no-show. [L1] - Action: Confirm in the dialog (
#dialogConfirm). Expect: Toast "Booking marked as no-show"; the sidebar closes; the bookings list refreshes. [L1][L2] - Action: Re-open Analytics (
data-tab="analytics"). Expect: The No-Show Rate (#statNoShowRate) is now greater than the baseline recorded in step 18 (it should increase because one confirmed booking became a no-show). Also confirm the per-event-type table row forCU07 Host Mgmt <RUNID>shows a non-zero No-Show Rate. [L2]- Capture screenshot:
cu07-07-analytics-after-noshow. - Note: the dashboard UI surfaces no-show as a RATE (%), not a raw count. The raw
no_show_countexists in the/api/analyticsresponse but is not shown in the UI — do not expect a numeric count widget.
- Capture screenshot:
- Action (regression confirm): Go to Bookings, re-open the
CU07 NoShow <RUNID>row. Expect: Status is no longer eligible for "Mark no-show" (the action no longer renders, since status is nowno_show); the row no longer appears under Upcoming. [L2]
Phase 7 — Guest on a booking + L3 guest email
Host-side note: Calendo has NO dashboard control to add a guest to an already-created booking, and book-on-behalf does not accept guests. Guests are attached at booking-creation time on the public booking page when the event type allows guests. This phase therefore creates a public booking WITH a guest as the realistic way to exercise guest handling, then verifies the host sees the guest in the booking detail.
- Action: In a new tab, open the public booking page
https://calendo.dev/booking/?user=<HOST_SLUG>&event=cu07-host-mgmt-<RUNID>. Expect: The booking view loads (#booking-view) with a calendar. [L1] - Action: Pick the first available day (
.calendar-day.available) and first time slot (.time-slot). In the confirm form fill NameCU07 Guest <RUNID>(#input-name) and Emailravikantguptaofficial+inv-guest-<RUNID>@gmail.com(#input-email). In the "Additional Guests" section (#guests-section, visible because allow_guests is ON), click "+ Add guest" (#add-guest-btn) and typeeverythingaichannelemail@gmail.cominto the new guest input (.guest-email-input). Expect: Guest row added; form ready. [L1]- Capture screenshot:
cu07-08-public-booking-with-guest.
- Capture screenshot:
- Action: Click "Confirm Booking" (
#btn-confirm). Expect: Confirmation screen with title containing "Booking Confirmed" (.confirmation-title), and a Cancel/Reschedule manage area (#confirmation-manage). [L1][L2] - Action: Back in the dashboard tab, reload and open Bookings → Upcoming, then open the
CU07 Guest <RUNID>row. Expect: The sidebar Invitee section also lists the guesteverythingaichannelemail@gmail.com(rendered fromguest_emailsin#mdsBody). [L2]- Capture screenshot:
cu07-09-guest-in-sidebar.
- Capture screenshot:
Phase 8 — Cancel from the dashboard + L3
- Action: Create the cancel target as a future public booking (so it has cancel/reschedule tokens): open
https://calendo.dev/booking/?user=<HOST_SLUG>&event=cu07-host-mgmt-<RUNID>, pick an available slot, fill NameCU07 Cancel <RUNID>(#input-name) and Emailravikantguptaofficial+inv-cancel-<RUNID>@gmail.com(#input-email), click "Confirm Booking" (#btn-confirm). Expect: "Booking Confirmed". [L1] - Action: In the dashboard, Bookings → Upcoming, open the
CU07 Cancel <RUNID>row and click "Cancel" in the sidebar actions (#mdsActions→ red "Cancel" button callingcancelBooking(<id>)). Expect: Confirm dialog (#confirmDialog) asking to cancel the booking withCU07 Cancel <RUNID>. [L1] - Action: Confirm (
#dialogConfirm). Expect: Toast "Booking cancelled"; sidebar closes; list refreshes. [L1][L2] - Action: Click the Cancelled filter (
.filter-btn[data-filter="cancelled"]). Expect:CU07 Cancel <RUNID>appears with a cancelled badge (.badge-cancelled); switching to Upcoming (.filter-btn[data-filter="upcoming"]) shows it is gone. [L2]- Capture screenshot: `cu07-10-cancelled.
Phase 9 — Reschedule + L3
Host-side note: Calendo has NO dashboard "Reschedule" button (the sidebar only offers Cancel / Mark no-show). The host reschedules by following the reschedule link from the booking confirmation page or the confirmation email (/booking/reschedule.html?token=...). This phase uses that supported path.
- Action: Create the reschedule target as a future public booking: open
https://calendo.dev/booking/?user=<HOST_SLUG>&event=cu07-host-mgmt-<RUNID>, pick an available slot, fill NameCU07 Resched <RUNID>(#input-name) and Emailravikantguptaofficial+inv-resched-<RUNID>@gmail.com(#input-email), click "Confirm Booking" (#btn-confirm). On the confirmation screen, locate the manage links (#confirmation-manage) and note/click the "Reschedule" link (a[href*="/booking/reschedule.html"]). Expect: Confirmation shown; Reschedule link present. [L1]- Record the original date/time of this booking (you will verify it MOVED).
- Capture screenshot:
cu07-11-resched-confirmation.
- Action: Follow the Reschedule link to
https://calendo.dev/booking/reschedule.html?token=.... Expect: Reschedule UI loads (#reschedule-ui); current booking shows eventCU07 Host Mgmt <RUNID>(#current-event) and the original datetime (#current-datetime); a calendar (#calendar) is visible. [L1] - Action: Pick a DIFFERENT available day (
.calendar-day.available) and a different time slot (.time-slot) from the original, then click "Confirm Reschedule" (#btn-reschedule). Expect: Success state (#success-state) with title "Booking Rescheduled" (.confirmation-title). [L1][L2]- Record the NEW date/time.
- Capture screenshot: `cu07-12-rescheduled.
- Action: In the dashboard, reload and open Bookings → Upcoming, open the
CU07 Resched <RUNID>row. Expect: The sidebar#mdsDatetimeshows the NEW time, not the original. [L2]
L3 reality checks
Run these after the corresponding phases. Use the same browser, signed into Google as ravikantguptaofficial@gmail.com. If a Google re-auth wall blocks you, do NOT log in with a password — flag it and mark the check BLOCKED.
A. Book-on-behalf invitee email (Phase 1).
- Open
https://mail.google.com. Search:inv-onbehalf-<RUNID>. Expect: A booking confirmation email addressed to / referencingravikantguptaofficial+inv-onbehalf-<RUNID>@gmail.comfor eventCU07 Host Mgmt <RUNID>, containing working Cancel and Reschedule links. [L3]- Capture screenshot:
cu07-L3-email-onbehalf.
- Capture screenshot:
B. Book-on-behalf Google Calendar event (Phase 1).
- Open
https://calendar.google.com. Navigate to the date/time you set in step 6 (tomorrow ~10:00 AM host time). Expect: A real event titled withCU07 Host Mgmt <RUNID>(or the invitee/event name) at that slot, with the invitee as an attendee. [L3]- Capture screenshot:
cu07-L3-gcal-onbehalf.
- Capture screenshot:
C. Guest invitation email (Phase 7).
- In Gmail, search:
inv-guest-<RUNID>. Expect: Host notification / confirmation email forCU07 Guest <RUNID>that listseverythingaichannelemail@gmail.comunder "Additional Guests". [L3] - If P3's inbox (
everythingaichannelemail@gmail.com) is reachable in the browser, open it and search the event nameCU07 Host Mgmt <RUNID>; expect a "You're invited" guest email. If not reachable, mark as manual residue. [L3] - In Google Calendar at the booked slot for
CU07 Guest <RUNID>, confirmeverythingaichannelemail@gmail.comappears as an attendee. [L3]- Capture screenshots:
cu07-L3-email-guest,cu07-L3-gcal-guest-attendee.
- Capture screenshots:
D. Cancellation email + calendar removal (Phase 8).
- In Gmail, search:
inv-cancel-<RUNID>. Expect: A cancellation email forCU07 Cancel <RUNID>(subject indicating the meeting was cancelled). [L3] - In Google Calendar at that booking's slot, confirm the event is GONE (deleted) or marked cancelled. [L3]
- Capture screenshots:
cu07-L3-email-cancel,cu07-L3-gcal-cancel-removed.
- Capture screenshots:
E. Reschedule email + calendar moved (Phase 9).
- In Gmail, search:
inv-resched-<RUNID>. Expect: A reschedule email referencing the NEW date/time forCU07 Host Mgmt <RUNID>. [L3] - In Google Calendar: confirm NO event remains at the ORIGINAL slot and a single event now exists at the NEW slot for
CU07 Resched <RUNID>. [L3]- Capture screenshots:
cu07-L3-email-resched,cu07-L3-gcal-resched-moved.
- Capture screenshots:
Note on no-show (Phase 6): there is no external email or calendar mutation expected from marking no-show — it is an internal status change verified at L2 via the analytics rate. No L3 for no-show.
Cleanup
Leave both host accounts clean. Do all of this as P1 in the dashboard unless noted.
- Cancel remaining active bookings created by this run: Bookings → Upcoming. For each of
CU07 OnBehalf <RUNID>,CU07 Guest <RUNID>,CU07 Resched <RUNID>still active: open the row → sidebar "Cancel" (cancelBooking) → confirm (#dialogConfirm). (CU07 Cancel <RUNID>is already cancelled;CU07 NoShow <RUNID>is a past no-show and needs no action.) - Delete the event type: Event Types / Overview → open
CU07 Host Mgmt <RUNID>→ delete it (edit panel delete control). This removes it from the public booking surface. - Verify Google Calendar is clean: In
calendar.google.com, confirm no remaining future events titled/containingCU07 ... <RUNID>(cancelling Calendo bookings should remove them; manually delete any orphans). - Gmail: The plus-aliased emails remain in P1's inbox for audit — optionally label/archive anything matching
<RUNID>. Do not delete unless instructed; they are evidence. - P3 guest invite: If you confirmed it in
everythingaichannelemail@gmail.com, optionally archive that thread; no account changes needed.
Pass/Fail criteria
The run PASSES only if ALL of the following hold:
- Event type
CU07 Host Mgmt <RUNID>with guests enabled was created and appears in the overview (#overviewEventTypes). [L1/L2] - Book-on-behalf created
CU07 OnBehalf <RUNID>(toast "Booking created") and it persists in Upcoming after reload. [L1/L2] - Filters behave correctly: Upcoming shows future Calendo bookings, Past shows the past booking, Cancelled shows only cancelled bookings; meeting search filters by invitee name. [L1]
- The detail sidebar opens on row click and shows correct status, title, invitee name, invitee email, location, notes textarea, and timeline. [L1]
- A saved internal note (
Internal note CU07 <RUNID> …) is present in the Notes textarea after a full page reload. [L2] - "Mark no-show" succeeds on the past booking (toast), the action is no longer offered afterward, and the Analytics No-Show Rate (
#statNoShowRate) increases vs. the recorded baseline. [L1/L2] - A public booking with guest
everythingaichannelemail@gmail.comis created and the host detail sidebar lists that guest. [L2] - Cancel from the dashboard moves
CU07 Cancel <RUNID>to the Cancelled filter with a cancelled badge and removes it from Upcoming. [L1/L2] - Reschedule via the reschedule link moves
CU07 Resched <RUNID>to a new time, shown as the new time in the sidebar. [L1/L2] - L3: invitee confirmation email (book-on-behalf), guest invitation/host email, cancellation email, and reschedule email all found in Gmail by their
inv-<...>-<RUNID>search; AND the real Google Calendar shows: the on-behalf event created, the guest as attendee, the cancelled event removed, and the rescheduled event moved (gone from old slot, present at new slot). [L3] - The run FAILS if any created object cannot be found where expected, any toast indicates an error, the no-show rate does not increase, a note does not survive reload, OR any required L3 email/calendar state is missing (unless that specific L3 was pre-flagged BLOCKED by a precondition, in which case the suite is INCOMPLETE, not PASS).
Evidence to capture
- Screenshots listed inline:
cu07-00-dashboard-overview,cu07-01-event-type-created,cu07-02-book-on-behalf-created,cu07-03-past-booking,cu07-04-detail-sidebar,cu07-05-note-persisted,cu07-06-analytics-before,cu07-07-analytics-after-noshow,cu07-08-public-booking-with-guest,cu07-09-guest-in-sidebar,cu07-10-cancelled,cu07-11-resched-confirmation,cu07-12-rescheduled. - L3 screenshots:
cu07-L3-email-onbehalf,cu07-L3-gcal-onbehalf,cu07-L3-email-guest,cu07-L3-gcal-guest-attendee,cu07-L3-email-cancel,cu07-L3-gcal-cancel-removed,cu07-L3-email-resched,cu07-L3-gcal-resched-moved. - Recorded values: the chosen RUNID;
<HOST_SLUG>; baseline vs. post-no-show No-Show Rate (%); the original and new date/times of the rescheduled booking; the original date/time of the cancelled booking.
Manual residue / cannot-verify
- No host-side reschedule button: Calendo's dashboard has no "Reschedule" action in the booking sidebar (only Cancel / Mark no-show). Host reschedule is only possible via the reschedule token link. A human/PM should decide whether a dashboard reschedule control is desired; this suite uses the token-link path as the supported workaround.
- No host-side add-guest-to-existing-booking: There is no UI or API to add a guest after a booking exists, and book-on-behalf does not accept guests. This suite proves guest handling only via creation-time public booking. Adding guests post-creation is a feature gap to hand to the human.
- No-show count widget: The UI exposes only a No-Show Rate %, not a raw no-show count. Verifying the exact integer count requires inspecting the
/api/analyticsresponse, which is out of scope for a pure in-browser run. - P3 guest mailbox: Confirming the actual guest "You're invited" email in
everythingaichannelemail@gmail.comrequires that inbox to be open/accessible in the browser. If it is not signed in, the human must verify it separately. - Email deliverability/timing: L3 email checks assume Resend delivery within a couple of minutes; transient delivery delays are not a product failure but require a short re-check before declaring FAIL. The human should confirm any borderline timing.
- Book-on-behalf with a past start_time: If production rejects creating a booking with a start time in the past, the no-show/notes target must be created near-future and then aged into the past; flag this if it occurs.