/compliance/audit) records who did what, when, to
which object, with what parameters. It is append-only: nothing in
Blindsight rewrites or removes a row.
What makes it evidence rather than a log is the hash chain. Every
record’s digest is SHA256(previous_hash | canonical_json(content)),
so the records form a single chain in which altering any one record
breaks every record after it. The chain head is tracked separately, and
/verify walks the chain and reports what it finds.
What gets logged
Records
The default view is a filterable, paginated table.
Click any row for the full event payload, before and after values, and
the actor and origin metadata.
Severity is one of the hashed fields, so a record’s severity cannot
be edited after the fact without invalidating its digest. Words from
other subsystems are normalised on write (
warn becomes medium,
error becomes high, fatal becomes critical), so the
vocabulary above is the complete set you will see.Verifying the chain
GET /api/audit-trail/verify runs the tamper-evidence check and
returns {ok, checked, broken_at, ...}. ok is exactly
“no issues found”; when it is false, the response always names at least
one issue.
Two things about it are easy to misread:
The check covers the whole deployment, not just your workspace
The check covers the whole deployment, not just your workspace
The hash chain is global, so it cannot be scoped to one tenant.
The verdict reports counts and record identifiers from every
workspace on the deployment. The response says so in its
scope
field rather than letting you assume otherwise.This is why verification has its own permission,
compliance.verify, held by admin and compliance-auditor
rather than travelling with compliance.access.A rehash is attested inside the log it rewrote
A rehash is attested inside the log it rewrote
Migration
0114 brought the workspace id into the hashed payload
and recomputed every existing digest. Without an attestation,
hashes that no longer match an older export would be
indistinguishable from tampering, and tampering could be passed off
as the rehash. The verdict carries a rehash field naming the
event, and the pre-rehash digest is retained so it stays checkable
rather than merely stored.Applications and parameter schemas
Two related surfaces sit on the same API. Applications register the systems whose activity you are auditing, so records can be attributed to an application and reviewed per app on/compliance/applications.
Parameter schemas let you register your own domain-specific knobs
(model_version, clinical_protocol, reviewer_id) so the trail
captures them as first-class, filterable fields rather than
free-form payload. Parameter analytics then charts how a parameter’s
values drift across runs, which is the shape of the “consistent
practice” question an auditor actually asks.
Managing applications and parameter schemas needs compliance.manage.
Export, ingest, and SIEM
For real-time delivery, configure the audit webhook and every
record is pushed to your SIEM as it is written. See
Integrations & webhooks.
Reading it requires a license
Audit trail reads are gated on the Compliance license alongside the rest of the product. Reads needcompliance.access; writes, imports,
applications, and parameter schemas need compliance.manage; chain
verification needs compliance.verify.
Common workflows
Investigate a deletion
Investigate a deletion
- Filter to the delete event type and the date it happened.
- Open the row to see who triggered it and the snapshot of the deleted object.
- Cross-reference the parent object’s records (scans and healings against that dataset) to assess impact.
Prove that scans ran on a cadence
Prove that scans ran on a cadence
- Filter to scan-start events over the period you are proving.
- Check coverage per dataset in the stats view.
- Export to CSV and attach it to the compliance report.
Produce evidence for one control
Produce evidence for one control
- Set
control_standardto the framework andcontrol_idto the control. - Confirm the record count looks right in Records.
- Export that exact view.
Detect credential abuse
Detect credential abuse
- Filter to integration entities and update events.
- Cross-check actor and date against your team’s calendar.
- Any unexpected actor here is worth escalating.

