Skip to content
Sigilbase

Decision logs#

Some decisions Sigilbase makes about a request leave no event behind: a refused request appends nothing. A decision log records them. It is an ordinary stream, sigilbase-decisions- followed by its parent stream's public id: hash-chained, sealed, anchored, and published on the transparency feed whenever its parent is.

  • On a standard stream set to reject and record key reuse, the log records each conflict: an idempotency key reused with different content, refused with 409. It opens with decisions.started, and records each change of the setting.
  • On a registry the log records every decision, accepted or refused, and the policy and credential events that decide who may submit what. It opens with policy.committed.

Each decision record's received_at is the request's own, the same instant its receipt states, and the record carries the request digest, the credential and the outcome, never the payload of a refused request.

Reading a log#

GET /api/v1/streams/{slug}/decisions?page=N                  a hundred records to a page, oldest first
GET /api/v1/streams/{slug}/decisions/{decision_seq}/receipt   the receipt signed for that decision

An API key needs the parent stream in scope. In the app, a stream's Decision log button opens the log like any stream.

Bundles#

A decision log is exported like any stream. Its bundle's manifest names the stream it records in decision_log_for (id, public_id, slug), and every manifest names its own stream's public_id, the id receipts carry. With both bundles an auditor can reconcile a registry, and check any receipt against the record it names.