Context
Several consultee-facing actions are offered by the UI but always fail server-side. Consultees see Reschedule on webinar/class cards although the route 403s them (app/api/appointments/[appointmentId]/reschedule/route.ts:141-152); trial reschedule is offered but the participant check never matches TRIAL (ConsulteeAppointmentsAdapter.tsx:188-200); "Cancel booking" is shown for group events with no self-removal endpoint in existence (C4); and the consultee trial Cancel calls the generic route, gets a 409, and the toast falsely reports "Booking already updated" (useEventActions.ts:158-177). Separately there is no self-leave flow at all for webinar/class attendees — the only removal path is consultant-initiated.
Proposed approach
Two parts. First, kind-gate the UI: hide or disable actions whose server route will 403 or no-op for the derived appointment type, and point trial cancellation at the trial route. Second, design and build a consultee self-leave endpoint for group events (per-attendee appointment cancellation with policy-snapshot refund once the refund gateway lands), which then lets the UI re-enable the action honestly.
Audit ids R4/R5/C4/C6; found alongside #998.
Context
Several consultee-facing actions are offered by the UI but always fail server-side. Consultees see Reschedule on webinar/class cards although the route 403s them (
app/api/appointments/[appointmentId]/reschedule/route.ts:141-152); trial reschedule is offered but the participant check never matches TRIAL (ConsulteeAppointmentsAdapter.tsx:188-200); "Cancel booking" is shown for group events with no self-removal endpoint in existence (C4); and the consultee trial Cancel calls the generic route, gets a 409, and the toast falsely reports "Booking already updated" (useEventActions.ts:158-177). Separately there is no self-leave flow at all for webinar/class attendees — the only removal path is consultant-initiated.Proposed approach
Two parts. First, kind-gate the UI: hide or disable actions whose server route will 403 or no-op for the derived appointment type, and point trial cancellation at the trial route. Second, design and build a consultee self-leave endpoint for group events (per-attendee appointment cancellation with policy-snapshot refund once the refund gateway lands), which then lets the UI re-enable the action honestly.
Audit ids R4/R5/C4/C6; found alongside #998.