BLOCK as the default
whenever anything is missing.
The scenario
- Agent
card-aiwith toolsaccount_balance,dispute_charge,cancel_card. - The consequential action is
cancel_card. Balance questions never touch the latch. - The runtime collects verification results turn by turn and passes them as
argson the authorize call, so the PDP decides with the session’s full verification state. See what crosses to the PDP.
The policy in prose
An agent may cancel a card only after the customer’s identity has been verified in the current session: full name, date of birth, a one-time passcode to the phone on file, and the billing address. If any check is missing or failed, the cancellation is blocked and the agent must complete verification first.
Crafted into a policy pack
Authorize with incomplete verification
The customer has confirmed name and date of birth but not the passcode or address. The runtime passes that state inargs:
permitId is minted, so even if the agent’s code tried to call the card
service anyway, the service refuses without a permit.
Complete verification, then authorize
After the passcode and address are confirmed, the same call with all four checks true returns:permitId to the card service; the permit is one-time, so a
replayed or duplicated cancellation attempt fails.
What the latch does at runtime
While the customer asks about balances or disputes,finance-0 is dormant and
those calls resolve ALLOW without KYC friction. The moment the agent proposes
cancel_card, the latch engages, and the verdict tracks the session’s
verification state exactly. Both decisions above, the block and the allow, are
in the evidence feed with the verification state that produced them, sealable
as signed records for dispute review. See
Audit and evidence.
