Audit metadata
Every entity in SteadyOn carries audit metadata. This page lists the fields, where they appear, and how they’re computed.
The four audit fields
Section titled “The four audit fields”Every domain row carries:
| Field | Type | Notes |
|---|---|---|
audit.createdAt | timestamp (ms) | When the row was first created. |
audit.updatedAt | timestamp (ms) | When the row was last modified. |
audit.createdByName | text snapshot | The creator’s full name as it stood at the time. |
audit.updatedByName | text snapshot | The last modifier’s full name as it stood at the time. |
There is also a userId link to the original creator/modifier, but
the snapshot strings are what’s shown in the UI — they survive user
deletion and renames.
Where it appears
Section titled “Where it appears”List pages
Section titled “List pages”Every list page has Created and Modified columns (sortable, filterable). Both show the timestamp; if you hover, you see the snapshot name.
Detail pages
Section titled “Detail pages”The footer of every detail page reads:
Created by [Name] on [date]. Last modified by [Name] on [date].
If creator and modifier are the same and the dates are within minutes of each other, only the Created line shows.
CSV exports
Section titled “CSV exports”Exports include four columns: Created, Modified, Created by, Modified by. They round-trip cleanly (although they’re ignored on import).
The audit log
Section titled “The audit log”The Log tab on each detail page (and the global Log page in the sidebar) shows every change as an event row:
- Action (created, updated, status changed, etc.).
- Actor (snapshot name).
- Timestamp.
- For updates, the diff (old vs new values).
Why snapshots and not live joins
Section titled “Why snapshots and not live joins”Live joins would re-read the actor’s current name on every render. That’s bad for two reasons:
- It rewrites history. If “Bob” renames himself “Robert”, every audit row in the past suddenly reads “Robert” — including changes he made when he was Bob.
- It can show blank or “Deleted user” if the user is removed. Many regulator audits won’t accept “Deleted user” as a valid actor name.
Snapshots solve both. The actor’s name on April 12th was Bob; that record stays as Bob forever.
What if a name is missing
Section titled “What if a name is missing”If a user has never set a name (a new user who hasn’t completed their profile), the snapshot stores the empty string. The UI shows “(no name)” — a prompt to fix it.
If you’ve just renamed yourself and want history rewritten, that’s not supported by design. Going forward, your changes will use the new name.