Winch Labs

Administration

The audit log

Every decision that changes what the gate does, or hides what it found, is recorded with who made it.

What is recorded

Action Recorded detail
Dismissing a finding Actor, rule_id, repo#pr, and the reason
Muting a rule Actor, rule id
Adopting, shadowing or un-adopting a catalog rule Actor, rule id, new state
Break-glass Actor, reason, scope, ticket if given
Editing or deleting a convention Actor, what changed
SSO configuration changes Actor, and the fields changed — never the secret
Policy setting changes Actor, old and new value

The pattern is consistent: the actor, the subject, and what changed. A record that says “settings were updated” is not an audit log.

Retention

GARBOARD_AUDIT_RETENTION_DAYS sets the window. Unset, zero, negative or non-numeric all mean keep forever — the safe direction, because a misconfigured retention variable should not quietly destroy evidence.

A periodic pruner enforces whatever you set, organisation-scoped, and records its own count. A prune that deleted rows without saying how many would itself be an unauditable action.

Export

The audit log exports as CSV for the period you choose. It is the companion to the evidence bundle: receipts say what the gate decided, the audit log says what people decided about it.

Why reasons are required

Dismissing a finding requires a reason, and the reason is not paperwork — it feeds convention decay. A convention whose findings are repeatedly dismissed loses confidence and eventually stops being enforced.

So the audit log is not only a record. It is an input: the reasons people give are how the system learns it was wrong.