| An operator console, behind four named gatesC120fifteen REST routes under /v1/operator back the console, and no MCP tool anywhere names an operator action — so the bearer credential an agent holds cannot reach one | Eight dashboard pages — the console, the dead-letter inspector, the notice queue and one notice, the sanctions queue and one review, the held contact submissions the anti-automation checks refused, and the release log. The gates are named in code and applied by tier, not uniformly: RequireScope, RequireStepUp, RequireOperator and RequireOperatorDpopToken. An operator adjudication — a DSA or DMCA notice, a sanctions review, a break-glass request or approval — needs a designated operator (an Entra security group in the deployed environment, or a configured list), a live human dashboard session and a fresh MFA step-up. A message-level override carries no session of its own: it presents the DPoP-bound token a two-operator break-glass approval minted. Break-glass close and the session-state import need a designated operator on a live session but no step-up — close ends an override the operator already holds, and the import is a bulk migration no 300-second assertion can span — and the operator reads need only the operator scope, which cannot be issued over the API | shipped |
| The dead-letter inspector is read-onlyC90 | The page calls exactly two services and both are reads: queue depth, and the dead-lettered envelopes of a workspace the operator names. Replaying a dead-lettered message is a break-glass override behind a proof-of-possession token the dashboard session does not hold, so it is done from the API and never from the console | shipped |
| Notice-and-action, end to endC41 | DSA Article 16 intake on a public unauthenticated route, an operator decision with a stated reason, reclassification, DMCA counter-notice, the §512(g)(2)(C) court-action block and an operator clear for it, and a sweep that performs the put-back when the window closes | shipped |
| A takedown disables access on all three paths content can leave byC41 | Consumer pull (get_pending), outbound webhook delivery, and the message read API — each gated by one reversible timestamp on the statement that hands the bytes over, which is exactly what makes put-back restorable. A build guard fails the required check if a new delivery path forgets the gate | shipped |
| The §12.4 purge ships disabledC121the deployment template in the repository describes our development environment and turns it on there; the template says in its own comment that a production deployment must pass false | It is the only path in the product that destroys content with no undo, so the code ships it off and each environment opts in by configuration. A test pins that default in both directions — a new sweep arriving disabled fails as loudly as this one flipping on — and a separate alarm sweep fires when the switch is off while adjudicated content sits purge-eligible | default-off |
| Sanctions screening, with a human queueC42the deployed default reads the SDN list over HTTP; development and CI runs use a fixture | The send gate is wired into the real send path, not a side channel; hits go to a review queue an operator adjudicates from the console under a fresh MFA step-up, and the decision is a row on the audit chain | shipped |
| Legal preservation holdsC122 | A hold is applied automatically when a takedown is decided, and it exempts the row from the retention sweep — content stays put past every retention and purge path until an operator releases it. The release is a break-glass operator action and lands on the chain | shipped |
| Data rights, over RESTC43REST only — there is no dashboard page and no MCP tool for any of it, and the export carries the profile, owned workspaces and account metadata, not the ledgers | Access, portability, rectification and erasure of the account holder’s own data. Erasure needs a fresh MFA step-up and, in one transaction, soft-deletes the human, freezes the workspace and destroys the salt that could re-identify them | shipped with caveat |
| Statutory notifications are written, not always sentC126the system records nothing rather than stamping a forward it did not make; there is no automated §12.6 timeliness clock — the put-back keys on the replacement of the content, not on a calendar window | Notice acknowledgements, decision notifications and DMCA forwards are enqueued on a transactional outbox in the same transaction as the decision, and a sweep dispatches them. The shipped default sender is inert, so where no mail channel is configured the row is written and nothing leaves the building | shipped with caveat |