Story-1391: Active Support Grants Contract

This walkthrough documents the producer-side contract change for GET /admin/support_grants/active. The endpoint now gives the admin support-access monitor enough server-side data to render and filter the cross-firm active-grant table without joining through the firms list.

What Changed

Contract Shape

The active grant row now has the firm link data inline:

{
  "id": "...",
  "staffUserId": "...",
  "staffDisplayName": "Support Engineer",
  "firmId": "...",
  "firmRef": "FIRM-00042",
  "firmName": "Example LLP",
  "firmNumber": 42,
  "grantedAt": "2026-06-18T00:00:00Z",
  "expiresAt": "2026-06-25T00:00:00Z",
  "reason": "Customer support investigation",
  "grantedByUserId": "..."
}

Verification

Consumer Impact

pramaan-admin must regenerate src/gen/ from the new admin OpenAPI snapshot, consume firmRef directly from listActiveGrants, and remove the separate /admin/firms join currently used only to build firm detail links.