Ultimate

X_POLICY_SURFACE_UNKNOWN

Means

enforce() was handed a surface no adapter answers to

Typical cause

enforce(surface, policy, args) called with a value outside 'http' \| 'live' \| 'job' \| 'mcp' — a config-driven table, a surface name off the wire, or a JS host, none of which the type reached. Refused rather than dispatched because the adapter table is an object literal and so inherits Object.prototype: adapters['valueOf'] answered a FUNCTION, enforce('valueOf', …) called it with the table as its receiver, and the truthy return was the adapter table typed as a SurfaceDenial — an authz dispatch that failed CLOSED with a denial carrying no code and no reason

Fix

pass one of http, live, job, mcp — enforce('http', policy, args) — or add the adapter for the new surface in packages/policy/src/surfaces.ts, the one place a fifth may be declared

Listed under Policy and authz

This page as markdown