Staff change history

Every invite, role change, revoke and reinstate appended to an audit table with the actor and, for a revocation, a required reason.

What it is

A per-write append-only trail behind the team directory. It records from-role, to-role, from-status, to-status, the reason and who did it, and it is deliberately best-effort so that a logging failure can never block the access change itself.

Also called: access audit · who granted admin · revocation record · permission history

See it
Staff change history
CustomerBuildingAmountStatus
Delia YoderBarndominium$1,770Approved
Gideon AltEquipment Storage$10,700Paid
Delia Yoder40×64 Shop$3,290Draft
Delia Yoder40×64 Shop$14,880Approved
Ronan Petsch40×64 Shop$10,700Paid
The audit rows under the roster: 'role changed sales to admin — by Keith — reason: promoted to run onboarding'. Sample data — no customer information appears here.
How it works
  1. 1Every write in the staff route calls the audit helper before returning.
  2. 2Revocation refuses to proceed without a reason string.
  3. 3The trail renders under the roster behind a 'Show history' toggle.
  4. 4The audit write never fails the operation it describes.
Why we built it

Same root cause as the directory: an env var drifted and a sub-account owner held administrative access to every other customer for weeks, with nothing on record to notice it by. The route's header states the rule plainly: 'EVERY WRITE IS AUDITED — Invite, role change, revoke, reinstate.'

The problem
  • Role changes left no trace, so an unexpected permission had no explanation.
  • Revocations without a reason are re-litigated later with nobody able to say why.
Sound familiar?
What you get
An access review reads a list instead of reconstructing a story.
Every removal carries the reason it happened.

See it on your own jobs

Twenty minutes, your numbers, no slide deck. We’ll build one of your real buildings in front of you and send you the estimate link at the end — yours to keep either way.

or keep browsing features →