A refusal log is not a folder of error messages. It is a small evidence format with a specific job: let a third party verify that an enforcement point made a decision, on a specific input, at a specific time.
Here is the shape we use.
{
"decision": "deny",
"policy": "payee_not_allowlisted",
"reason": "recipient is not in the task mandate",
"task_id": "tsk_01J...",
"actor": "agent:research-7",
"artifact_sha256": "…",
"created_at": "2026-10-29T12:00:00Z",
"signature": "ed25519:…"
}
What it makes possible
- Read-only enforcement — a database tool can show that a write was attempted and refused.
- Spend control — a payment rail can show that a payee or amount was outside the mandate.
- Buyer review — a security team can verify the record offline without calling your API.
- Incident review — "what did the agent try?" becomes a query, not a meeting.
What it cannot prove
It cannot prove the model's intent. It cannot prove that no other path bypassed the gateway. It cannot turn a missing log into a complete one. Those limits belong in the document, not in a footnote.
Verification, not trust
The record is signed with Ed25519 and canonicalized before signing. A verifier only needs the public key and the JSON. If the JSON changes, verification fails. That is the whole trick: make the evidence portable, not platform-bound.
At $29/month, the product is intentionally small. It is a refusal record, not a SIEM. The point is to make the missing question visible before a buyer asks it.
The portfolio
- Deny Evidence — signed refusal log, $29/month: https://attest.rta.lat/deny-evidence
- MCP Security Pass — $500 review before you expose a server: https://rta.lat/audit/
- EU AI Act Evidence Pack — $1,500 / 5 days; $3,000 / 72 hours: https://attest.rta.lat/eu-ai-act-evidence
Top comments (0)