HumanKind overnight build

Fri 17 → Sat 18 Jul 2026 · go-live Wed 22 Jul · 4 branches, all suites green, nothing merged to main, nothing deployed

1 · The checklist (test these on localhost first)

To test: restart your :6897/:6898 dev servers on branch overnight/integration (kill first — never switch branches under running vite), or ask me and I'll do it.

2 · Decisions needed from you

Merge + deploy? Everything is on overnight/integration (backend 178/178, frontend 320/320, prod build passes). After your local test: merge to main → clone/onidel-syd → deploy, with both version bumps.
Guest-pass decrement. Booking a guest free almost certainly does NOT consume a guest pass on Momence (the studio absorbs a free spot). OK for launch, or must passes be consumed? If consumed → mechanism changes, needs a cookie-pool surface we haven't captured.
Services naming + content. Tile reads "1:1 Sessions" (studio site wording) not "One-on-One". Copy + hero images are placeholders marked TODO — need your real text/images (or ask Ruth).
Ruth's account. Repro of her Flight School lockout depends on her prod record carrying guestPass data (locally only 1/28 users have it synced). After deploy, have her retry; also decide if staff guest-pass sync should be made reliable.

3 · Track cards

Services tiles overnight/services-tiles ✓ reviewed

1:1 Sessions + Yoga Therapy tabs reusing the existing ClinikoServiceTab middle-page pattern; GA4 open_service_page / open_service_booking added for ALL service pages (they had none). 291/291 frontend tests. Placeholder copy + images flagged.

Schedule bug trio overnight/schedule-bugs ✓ reviewed

Under-loaded days (root-caused): backend caps wide windows at 10 pages and silently truncates the furthest days; the 56-day prewarm got cached as "complete" so far days never refetched. Now truncation is flagged and never cached as covered — far days self-heal with a narrow refetch. Stuck scroll: competing smooth-scrolls from rapid taps now coalesced (latest wins) + autoscroll loops get cancellation. Carousel: no logic bug found; raw full-res banners were the only unproxied images — now 600px WebP via /api/img (memory-pressure mitigation; confirm on device).

Flight School + guest gate overnight/flightschool-guests ✓ reviewed

Root cause of "can't book but can check guests in": the guest-pass panel v-if sat above the drop-in panel in a v-else-if chain, so staff (guest-pass memberships) never saw Book-for-$X on paid classes. Guest UI now gated to membership-included classes only, reusing the drop-in paid-vs-included signal. Cancel/refund/credits were red herrings — no Momence data fix needed.

Add a guest overnight/add-guests ✓ reviewed

Spec at docs/specs/add-guests.md. Mechanism: resolve guest by email on Momence (find or create) → free-book via the proven host-token endpoint. Real backend endpoints (session-authed, server-derived pass rules, 409 guard on non-eligible classes), guests actually submitted now (old UI silently discarded them). GA4 add_guest_to_booking / book_with_guests. All Momence writes mocked in tests — first live run is deliberate.

4 · Live-verify order (add-guests, needs real writes)

  1. Does a guest free-book decrement the member's pass on Momence? (strong prior: no)
  2. Create-member → immediate free-book for a brand-new guest — propagation OK?
  3. /host/members?query=email returns exact match for a known customer
  4. Capacity: member + N guests near a full class — Momence rejects overbooking?
  5. Audit attribution of guest bookings acceptable to studio?

Also done tonight: 7 tasks logged in cosmo-mem with branch pointers · one stray committed node_modules symlink removed on schedule-bugs · BookingView merge conflict resolved in favour of the stronger add-guests gate (canUseGuestPass util kept, tested).