- Shipped
- September 17, 2026 at 5:48 PM UTC
- Author
- Kamo
- Commit
- 82cee28
GET **************** The lead page's Webinars section has called /api/webinar/leads/{id} since it was written and nothing ever served it — the live API answers 404, and the component reads a 404 as "the webinar feature is off" and renders nothing. So a demo booked from the marketing site created a lead, linked the booking to it, and never showed on it. Served here rather than in MediaService, which owns the bookings, because the question a caller has to pass first is "may you read this lead": valid session, lead in the caller's organization, then LeadCommsReadGate — own lead needs no right, an unassigned one needs VIEW_UNASSIGNED_LEADS, somebody else's needs VIEW_LEAD_CONTACT_INFO_OTHERS, god bypasses. The gate is the one the communications tab uses, called, not copied. Denials are recorded through PhiAccessAuditor; a read is not, because the response carries no contact data — the same line the /communications/counts endpoint draws. LeadWebinarEntry is title, start/end, presenter name and the two statuses. Nothing about the attendee beyond whether they are still coming: the visitor's name and address are the lead's own and already on the page. A visitor who cancels and registers again produces a second link to the same attendee row, and the section shows that once. The five failures in the full suite **************** x4, **************** — which flags **************** not this) fail identically on origin/main without this change. This endpoint resolves a session, so the ratchet does not name it. 2712 tests otherwise green.