Configured Is Not Enforcing — Luminity Digital
Claude Architect Dispatch  ·  Gap Register  ·  Inference Hooks  ·  August 2026
Claude Architect Dispatches

Configured Is Not Enforcing

Nine documented conditions under which a live enforcement layer does not enforce. Five close with configuration the enterprise already holds. Four do not close at all, and belong on a risk register with a named owner and a dated decision.

August 2026 Tom M. Gomez Luminity Digital 8 Min Read
Companion to The Floor Is Not the Boundary, which sets out the four-layer composition this register tests. The short version, so this piece stands on its own: the server-side inference hook gates context entering the model across every Claude Enterprise surface. The client-side write boundary — managed deny, then the blocking hook, then allow rules, with the sandbox beneath — gates what the agent may do, inside Claude Code only. Two independent refusal authorities, either sufficient alone. That is the architecture. What follows is where it stops.

A control that is switched on is not the same as a control that is enforcing.

Every layer below is configured, live, and — under a specific documented condition — inert. Each entry names the condition, the party that owns it, and the structural close. Where no close exists, the entry says so, because an accepted residual is a governance artifact and a hand-waved one is a finding.

Verified against first-party Anthropic documentation on 7 August 2026. Inference hooks are in beta and Anthropic notes that field names, request shapes, and headers may change; treat the server-side entries as current to that date and re-verify before an audit.

Where a request leaves the inspected path The five server-side register entries in the order they occur, plus one scope boundary Request originates Is the surface governed? PROCEEDS UNINSPECTED SCOPE BOUNDARY Bedrock, Vertex, Platform organizations, voice mode, and ancillary requests such as title generation. Is it inside the rollout sample? PROCEEDS UNINSPECTED REGISTER R2 Any request outside the sampled percentage, even where the failure mode is set to block. Is the actor’s role inspected? PROCEEDS UNINSPECTED REGISTER R3 Members of an excluded role. Machine-credential traffic is always inspected. Frame assembled PROCEEDS UNINSPECTED REGISTER R5 Image and raw file bytes never leave Anthropic, so a screenshot of a regulated document carries no inspectable text. Signed POST to your server HTTP 200 with a verdict? REFUSED, OR UNINSPECTED REGISTER R1 An oversized body, a non-200, a timeout, or a connection failure is a webhook failure. Under fail-open the request proceeds; under fail-closed it is refused. Is the event type recognized? PROCEEDS UNINSPECTED REGISTER R4 Documented guidance returns allow for an unrecognized type, so a future event class passes by default. Verdict applied YOUR SERVER IS NEVER CONTACTED Three exits occur before the checkpoint is ever reached Surface, rollout, and role are resolved inside Anthropic’s infrastructure. A request that leaves the path there produces no entry in the customer’s own scanner, which is why coverage has to be reasoned about from configuration rather than observed from inspection volume. SCOPE · Server-side only. Register entries 6 to 8 sit at the client-side write boundary and entry 9 is covered by neither layer; both are enumerated separately.
Figure 01  ·  Where a Request Leaves the Inspected PathThe five server-side register entries in the order they occur, plus one scope boundary. Three exits fire before the checkpoint is reached, so a request leaving there produces no entry in the customer’s own scanner.Scroll figure horizontally to view in full

Server-side: five conditions

Condition 01  ·  The Response Body Exceeds Your Server’s Limit

Transcripts are sent untruncated up to 10 MB. Anthropic names the trap directly: nginx defaults to a 1 MB body limit and Express to roughly 100 kB, a rejected body counts as a webhook failure, and under fail-open the prompt reaches the model uninspected. The largest transcripts — the ones most likely to carry bulk regulated material — are the ones most likely to skip inspection. Owner: customer. Close: raise the body limit to 10 MB and set failure handling to block. This is the likeliest real-world failure in the entire integration.

Condition 02  ·  Rollout Is Set Below 100 Percent

A rollout percentage inspects a chosen fraction of requests. Requests outside the sample proceed uninspected even where the failure mode is set to block. Owner: customer. Close: 100 percent, with shadow mode rather than partial rollout as the tuning instrument, since shadow mode observes every request without blocking any.

Condition 03  ·  A Role Is Excluded

Exclusions exempt members of chosen roles entirely. Two mitigating details are documented and worth crediting: traffic authenticated by machine credentials is always inspected, and when role membership cannot be resolved the request fails closed. Owner: customer. Close: none available beyond removing the exclusion — this is a deliberate exemption, and it belongs on a risk register with an owner and a review date rather than in a configuration file.

Condition 04  ·  The Event Type Is One Your Server Does Not Recognize

Anthropic’s forward-compatibility guidance instructs integrators to return allow when the top-level type is unrecognized, because returning an error counts as a webhook failure and sustained failures trip the circuit breaker. The instruction is sound engineering and its security consequence should be stated plainly: when response-side enforcement ships as a new event, correctly written existing servers will allow it by default. Owner: shared. Close: none structural. Track the event roster as a change-management item, not a configuration one.

Condition 05  ·  The Content Is an Image

Raw file and image bytes never reach the security server. A screenshot of a regulated document is not inspected. Owner: shared. Close: none within this instrument. Endpoint and browser controls remain in scope for that path — the hook narrows the text channel rather than closing every channel. Worth stating both readings together, because they travel separately: the byte exclusion is a genuine privacy assurance and a genuine coverage gap, and launch material has occasion to carry only the first.

Client-side: three conditions

Condition 06  ·  A Handler Exits Non-Zero but Not With 2

Exit code 2 blocks; any other non-zero exit is a non-blocking error and execution continues. HTTP handlers cannot signal a block by status code at all — a non-2xx response, a connection failure, or a timeout is a non-blocking error. Owner: customer. Close: do not use a hook as the hard allow-or-deny. Anthropic’s own reference directs architects to the permission system for that, and a managed deny rule cannot be overridden by any settings scope or command-line flag.

Condition 07  ·  A Bash Command Cannot Be Parsed by the Filter

The if filter is best-effort and fails open on unparseable commands. Owner: customer. Close: same as above — the permission layer, not the hook, carries hard enforcement.

Condition 08  ·  Hook Configuration Loads From a Scope You Do Not Control

Hooks can be defined at user, project, local, managed, plugin, and skill or agent level. Owner: customer. Close: fully available and often unused. allowManagedHooksOnly restricts loading to managed hooks, SDK hooks, and hooks from plugins force-enabled in managed settings. allowedHttpHookUrls constrains HTTP handler destinations, with an empty array blocking all HTTP hooks. httpHookAllowedEnvVars intersects with each hook’s own allowlist. disableBypassPermissionsMode closes the permission-skipping mode. And forceRemoteSettingsRefresh blocks CLI startup until managed settings are freshly fetched, exiting rather than proceeding on stale or absent policy — fail-closed policy delivery, which completes the client-side picture.

Shared: the condition neither layer covers

Condition 09  ·  The Tool Call Itself

The inference hook’s verdict acts on what enters the model, and by the time a frame carrying a tool call is evaluated, the tool has already run. The client-side write boundary does refuse tool calls — but only inside Claude Code. On every other governed surface, no configured layer refuses an action. Owner: shared. Close: none currently. This is the residual, and it should be stated to a risk committee in exactly these terms rather than absorbed into a coverage percentage.

Two operational realities that are not gaps

Neither is a hole in coverage; both belong in the same conversation because both determine whether the layer is running at all.

The enforcement layer is a production dependency with a manual reset. Sustained failures trip a circuit breaker that halts enforcement entirely, after which failure handling applies to every request and an administrator must re-enable verdicts by hand. Under fail-closed, the organization is blocked until a human acts. That is the correct trade and it needs an on-call owner.

The health panel is best-effort. Anthropic documents that it reports zero failures when counters cannot be read. A healthy panel is therefore not evidence of a healthy server. Stating that in the documentation rather than leaving it to be discovered is the kind of disclosure that should be credited.

Where a configured layer stops enforcing Nine documented conditions, their owner, and whether a structural close exists SERVER-SIDE · ANTHROPIC-OPERATED CHECKPOINT 1 The response body exceeds your server’s limit Raise the body limit to 10 MB and set failure handling to block. CLOSES CUSTOMER 2 Rollout is set below 100 percent Run at 100 percent, using shadow mode as the tuning instrument. CLOSES CUSTOMER 3 A role is excluded None beyond removing the exclusion. Carry it on a risk register with an owner and a review date. NO CLOSE CUSTOMER 4 The event type is one your server does not recognize None structural. Track the event roster as a change-management item. NO CLOSE SHARED 5 The content is an image None within this instrument. Endpoint and browser controls remain in scope for that path. NO CLOSE SHARED CLIENT-SIDE · THE WRITE BOUNDARY 6 A handler exits non-zero but not with 2 A managed deny rule, which no settings scope and no command-line flag overrides. CLOSES CUSTOMER 7 A Bash command cannot be parsed by the if filter The same: the permission layer carries hard enforcement, not the hook. CLOSES CUSTOMER 8 Hook configuration loads from a scope you do not control Five managed settings close this, including fail-closed policy delivery at CLI startup. CLOSES CUSTOMER SHARED · COVERED BY NEITHER LAYER 9 The tool call itself None currently. Refused inside Claude Code, refused on no other governed surface. NO CLOSE SHARED Five close with configuration already held. Four do not close at all. The measure of assurance is not how many layers are enabled. It is how many of these nine carry a named owner and a dated decision — a count that is producible on demand, where a coverage percentage is not.
Figure 02  ·  The Nine Conditions, Owner and CloseGrouped by the operator who holds them. The four hollow markers are the conditions with no structural close — the residual a risk committee carries by decision rather than by configuration.Scroll figure horizontally to view in full

The hard claim

Every entry above is a documented condition, not a defect. What separates the nine is not severity but whether a close exists: five close structurally with configuration the customer already holds, and four do not close within these instruments at all.

Which means the interesting number for a risk committee is not how many layers are switched on. It is how many of the nine have a named owner and a dated decision behind them. That count is producible on demand. A coverage percentage is not.

This closes the hooks pair. The series returns to the write path.

The Hard Claim

Five of the nine close with configuration the enterprise already holds. Four do not close at all, and carrying them as accepted residuals is a governance act, not a gap in the work.

The measure of assurance is not how many layers are enabled. It is how many of these nine carry a named owner and a dated decision — a count that is producible on demand, where a coverage percentage is not.

A Register Beats a Coverage Percentage

If your enforcement layers are configured but nobody owns the conditions under which they go inert, that gap is producible on demand — by an auditor, or by you first.

Start a Conversation
Claude Architect Dispatches  ·  The Write Path
Current CompanionConfigured Is Not Enforcing
References & Sources
Claude Architect Dispatches — The Write Path  ·  August 2026

Share this:

Like this:

Like Loading…