Architecture
Four layers, meeting only at the Verdict struct — frozen in packages/seam.
Truth
The Graph
@bonded/standardized
Re-derives every claimed premise from Messari-standardized subgraphs through the Graph Gateway, at a single pinned block. cache: no-store on the enforcement path — a stale premise is a correctness bug, not a latency optimisation.
Enforcer
— (non-generative core)
@bonded/enforcer
Zero LLM calls, never sees prompt text. Six-step fail-closed algorithm: policy hash -> forbidden action -> premises -> budget -> irreversible threshold -> clear. This is the product.
Authority
Chainlink CRE
@bonded/authority
A handlerInTee workflow reads irreversible_above as a Vault DON secret inside an AWS Nitro enclave and returns only a boolean, so the threshold cannot be binary-searched by probing the enforcer. Deployed and ACTIVE on the CRE DON as bonded-stepup-threshold-staging (id 00771462…, registered in the Workflow Registry on Ethereum mainnet), and the enforcer calls it: every proposal over the line issues a JWT signed by the enrolled key to the CRE gateway, and those invocations appear in cre execution list. Chainlink currently returns the execution asynchronously and its confidential-workflow DON reports "DON members not set" — private beta provisioning on their side — so the enclave cannot yet return a verdict in time to decide. requiresStepUp then falls back to comparing the policy artifact, and every response says which path decided it. The seam fails closed by design: set CRE_REQUIRE_ENCLAVE=true and an unreachable enclave holds instead.
Settlement
Arc
contracts/BondedVault.sol
Holds USDC. settle() accepts only a signed Verdict, in strict mark -> check -> call -> settle -> emit order. HELD_FOR_STEPUP cannot execute via settle() alone — confirmStepUp() requires a separate, independently verified confirmation.
The seam
interface Verdict {
proposalHash: Hash32;
policyHash: Hash32;
outcome: 0 | 1 | 2; // CLEARED | REFUSED | HELD_FOR_STEPUP
reasonCode: ReasonCode; // enumerated, never a free string
blockChecked: bigint;
logRef: Hash32;
}reasonCode is an enum, never a free string — free strings are how injected text reaches a UI. Defined in packages/seam/src/types.ts, frozen after the seam-v1 tag.
