How to do it
- Open the Audit log In the app, open Audit log to see recent actions with actor, action, and target.
- Follow a post's history Find the rows for a post to see who drafted it, what changed, who approved it, and when it published.
- Check citations Drafts from triggers cite their source, such as the GitHub release they came from.
- Verify the chain Run the verify check on the Audit log page, or call GET /v1/audit/verify with the owner key.
What is recorded
- Drafts, with the agent key that created them.
- Edits, approvals, rejections, and change requests, with the person who made them.
- Publishes and failures, with the network's post id.
- Policy applies from .socialhandoff/policy.json, with the owner key that applied them.
How the hash chain works
Each new row stores a hash of its own content plus the hash of the row before it. Changing or deleting an old row breaks every hash after it. The verify check re-hashes the whole chain and returns:
{ "ok": true, "checked": 1204, "brokenAt": null }If ok is false, brokenAt tells you the first row that no longer matches. See hash chain.
What it is for
- Answering "who posted this?" An agent key, a person, and a time for every public post.
- Reviewing an agent before promotion. Its drafts, edits, and rejections in one place.
- Compliance evidence. A record you can show that approvals happened. See the compliance teams use case.
Limits
The chain proves rows were not changed after they were written. It cannot prove what happened outside SocialHandoff, such as a post edited directly on the network. Retention on a self-hosted server is whatever your Postgres keeps. Read the audit log glossary entry.