Skip to content

Audit log

Every denial, revert, and misfire — appended to one file, so the enforcement plane can be read after the fact.

A refusal that leaves no trace can’t be reviewed. Every interesting decision the enforcement plane makes — a gate denial, a sweep revert, a policy that failed to load — is appended as one JSON line to /var/log/operator-authority/violations.jsonl. Each record carries the agent, the tool, the target, the rule that fired, the task id, and the outcome.

The outcome field is the most telling part of a record. The ones that appear:

Outcome Meaning
blocked The gate denied the action.
reverted The post-hoc sweep undid a protected-path change.
policy-load-failed The policy couldn’t be read — the gate denied as a result.
shim-init-failed The shim couldn’t start cleanly (e.g. Landlock couldn’t install).
hook-missing-input The gate was called with no path/command — a misconfigured hook. Allowed (fail-open) and logged.

Eleven thousand hook-missing-input records that day was not noise — it was a real configuration problem. The interactive gate hook was being called the old way (the deprecated environment-variable form that passes an empty value), so every one of those write/command checks took the gate’s fail-open branch: allowed, with a diagnostic, rather than enforced at write time. The gate chose fail-open deliberately — denying would have bricked every tool call until the configuration was fixed — but it meant interactive write-time enforcement was, on that day, inert, leaning on the other layers (Landlock, the post-hoc sweep, CODEOWNERS) to hold the line.

A companion observation from the same day: the one on-disk scope manifest had already expired (back on 2026-05-31), so there were zero live token grants — the deny-by-default posture was fully in effect for protected paths.

Because the gate logs allows-on-misconfiguration as well as outright denials, the log is a full record of everything the enforcement plane decided, not just its refusals. That is what makes it auditable: you can reconstruct not only what was stopped, but what was let through and why.