Conversation
feat: add per-resource service approvers UI
Fix approved status for service bookings
`resource.services` is typed as `string[] | ResourceServicesConfig`, but the service-approver options builder called `.reduce()` directly, which is only valid on the array arm. This broke the deploy build with TS2339. Normalize both shapes with the existing `isLegacyServicesArray` guard before reducing: use the array as-is, otherwise take the config object's keys as the service names. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
…list Replace the Copilot feedback checklist item with one covering Claude's code review: all High and Medium severity comments must be reviewed, and every High severity comment requires a reply before resolving.
…eerror Fix deploy build type error on resource services reduce
…checklist Require review of Claude code review High/Medium comments in PR checklist
MC-Pregame-GAS PR #45 changed the calendar event description: - New "Secondary Contact Email" line -> store as secondaryEmail - "Secondary Contact Name" now carries real values -> also populate the split secondaryFirstName/secondaryLastName fields used by new bookings - "Attendee Affiliation" now carries real values -> normalize onto the AttendeeAffiliation enum, passing unknown values through - Staffing lines are now room-prefixed option values ((230)/(103) ...), which the existing pass-through parsing already handles Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
- Parse the "Booking Type" description line instead of hardcoding an empty bookingType (the line has existed since GAS PR #18). - Canonicalize staffing entries: map GAS room-prefixed labels ("(103) Lighting Tech - Busking") onto the form's stored option values (LIGHTING_TECH_BUSKING) via the MC resource services config; rooms without a config keep the bare label (legacy value === label), and unmatched labels keep the (roomId) prefix so dry-run flags the drift. Keep the room-prefixed original in staffingServicesDetails. - Store "yes" (form value) in cleaningService instead of the checkbox literal "true"; getMediaCommonsServices keys the cleaning flag off it. - Mirror the form's forceCleaning coupling: catering requests also enable cleaning (every MC catering config sets forceCleaning). - Stop storing checkbox "true" in cateringService (display-only field). - Tolerant service detection: any value except empty/none/false/no counts as requested, so GAS moving from checkboxes to descriptive values cannot silently drop setup/catering/cleaning/security. - Tighten attendee affiliation "all" matching to avoid substring false-positives. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Verified against all 43 rows of the live "Media Commons Pregame Fall
2026" sheet (the source of the events on the GAS Draft calendars):
- Staffing dropdowns store option labels without their section prefix
("A1", "General House Tech"), so also match the label segment after
the " - " separator when canonicalizing.
- Expected Attendance now uses "<75"/">=75" buckets; map them to
"74"/"75" so parseInt comparisons (isLargeEvent >= 75) work.
- Dry-run flags large events (>= 75) whose sheet row has no security,
mirroring the form's forced-security rule for visibility.
With these changes every row round-trips with service flags identical
to the sheet checkboxes (incl. catering->cleaning coupling), staffing
values canonicalize with zero unmatched entries, and affiliation maps
onto the enum for all rows.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Test imports override the requester email so real users never get notified from dev, but the newly imported secondaryEmail kept the real address; approving a test booking in dev would email that contact via admin.ts. Store the +pregame alias there too when testMode is on. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Per the 6/16 BT meeting decision, pregame bookings that request services must no longer skip service review on final approval. Remove the isPregameOrigin bypass and approveAllPregameServices so pregame bookings follow the same Pre-approved -> Services Request path as user bookings; service-less pregame bookings still batch-approve straight to Approved. Adds invariant tests: services route to Services Request with no auto-approved services, service-less bookings still approve, and Approved is reachable only after every requested service is individually approved. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Handle new Pregame GAS event description format in the import
…en't crowded out The paginated bookings fetch orders by startDate descending with a 500-row limit. The liaison view's default "All Future" range is open-ended, so once a semester's bulk bookings push the future count past 500, the window holds only far-future rows and near-term REQUESTED bookings never reach the client — the approval table renders empty while approval emails still go out. Let the client pass a sortDirection and have the liaison All Future view fetch ascending (nearest first). Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_011qR68PCSFw39F5yCxBaDRR
Annex (auxiliary space) resources in the tenant schema can now declare parentResourceId. Such resources are hidden from the top-level room list, their annex checkbox options are derived from the child resources (with fallback to services.annex options for unmigrated tenants), selecting one invites its calendar to the booking's calendar event (create/edit/ modification), and the bookings API rejects them as standalone rooms. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Remove the faculty/staff-only gate on auxiliary spaces: the annex checkboxes now render for every role and the bookings API no longer strips annexByRoom for students. Drops the now-unused canRequestAuxiliarySpaces helper. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Selected annex spaces now render their own availability column next to the parent room on the room selection page. Extracted the schema resource → RoomSetting conversion into a shared helper. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
feat: add date range to booking CSV export
This branch was previously deployed
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary of Changes
Schema Changes
Checklist
Screenshots / Video