The positional extension envelope shared by BOTH artifact tables:
{"critical": {namespace → payload}, "optional": {namespace → payload}},
digest-covered, with namespace form and total cardinality. Extracted from
Blueprint so the Deployment table carries the same judgment as
DATA instead of a copy of it — one envelope, one definition, two tables.
Negotiation keeps its own region walk (its judgments — lifecycle states, schema pins — are different from the table's shape checks); this module is the TABLE-check and scan-walk surface only. Extension envelopes are inert data — an extension never authorizes an operation. Extension envelopes are inert data — an extension never authorizes an operation.
Summary
Functions
Every {namespace, body} pair in the envelope, both regions, in document
order — the scan's walk over the open region.
The critical region's namespace set for THIS value — the authored-channel tie (a validated-critical list must sit inside this set).
The envelope shape check a table carries: exactly critical + optional regions, namespace form, total cardinality, no namespace in both.
Functions
@spec bodies(list() | map()) :: [{binary(), AgentBlueprintProtocol.Json.value()}]
Every {namespace, body} pair in the envelope, both regions, in document
order — the scan's walk over the open region.
The critical region's namespace set for THIS value — the authored-channel tie (a validated-critical list must sit inside this set).
@spec envelope_ok?(AgentBlueprintProtocol.Json.value()) :: :ok | {:error, term()}
The envelope shape check a table carries: exactly critical + optional regions, namespace form, total cardinality, no namespace in both.