payloadBudgetGap

Tracking URL for why this fabric names no frame ceiling — the accountability analog of midSessionDeathGap for us.tractat.kuilt.core.Seam.maxPayloadBytes (#2069).

The base default is a non-null umbrella (CapabilityGaps.PAYLOAD_BUDGET), so a fabric that publishes nothing is declared, never silently green; a fabric that publishes a number MUST override this to null/blank, and is then held to that number by payloadOfExactlyTheBudgetIsCarried and overBudgetAddressedSendIsRefusedNotLeaked. payloadBudgetObligationIsTrackedWhenUnpublished enforces the pairing in both directions.

This is deliberately not a SeamCapabilities flag, though #2069 first asked for one. Every false flag there is a contract shortfall for which everyFalseCapabilityDeclaresAGap demands a per-fabric issue URL — but maxPayloadBytes == null is the honest answer from a fabric with no wire limit to name, so a flag would have demanded a permanently-open issue from nearly every subclass of this suite. The hook's shared umbrella default costs those fabrics nothing while still making the one real hazard — a fabric enforcing a ceiling it does not publish — a declaration somebody has to write down.