- Shipped
- August 15, 2026 at 5:45 AM UTC
- Author
- kamo
- Commit
- 004e61f
VIEW_VOICEMAIL and MANAGE_VOICEMAIL now gate VoipVoicemailController, which asked for a right only when playing back a recording in a PHI organization and for nothing at all otherwise. MANAGE_CALL_ROUTING stays, and the search for its surface is recorded rather than asserted: no inbound-route, IVR, ring-group or queue table in any schema, no such endpoint among VOIPService's 19 controllers, no UI. CallFeaturesController came closest and gating it would have been wrong — it reads memberId from the session with no target, so it is a member's own call forwarding, and a MANAGE_* right there would stop people configuring their own phone. Telephony is modelled here and routing is the unbuilt verb inside it, which is the MANAGE_MEETINGS case rather than the email-logs one. The parity test's pin on VIEW_VOICEMAIL as "gates nothing and must be flagged" had to be released. It was honest while nothing gated the right; left alone it would have blocked the outcome this project exists to produce. In its place is the opposite assertion — the seventeen rights this work has made real, pinned as enforced, so a regenerated audit that quietly loses one fails the build instead of marking a live permission decorative again.