Publish Audit Log Spec¶
Specializes governance/audit/audit-log-spec.md for the documentation and publishing pipeline.
Required fields (extends generic spec)¶
| Field | Type | Notes |
|---|---|---|
content_type |
string | Identifier from content-type.schema.json. |
content_id |
string | Stable id of the content artifact (hash of frontmatter + body, or assigned uuid). |
source_lineage |
array | List of {kind, ref, rev} entries for source pins. |
venue |
string (optional) | Adapter name; absent for pure doc-generation events. |
venue_artifact_id |
string (optional) | Venue-side identifier (post id, video id, etc.). |
approval_chain |
array (optional) | Approver names and timestamps for events that require approval. |
policy_version |
string | Editorial + publishing policy versions in effect. |
Event vocabulary¶
Documentation generation:
| Action | When |
|---|---|
draft_created |
First filled template instance. |
draft_revised |
Subsequent edits before finalization. |
quality_check_passed / quality_check_failed |
Lint / editorial policy result. |
signoff_recorded |
Reviewer approved per editorial policy matrix. |
finalized |
All quality flags true; content artifact frozen. |
Publishing:
| Action | When |
|---|---|
approval_recorded |
An approver signed off per publishing-policy.yaml. |
publish_dry_run |
Dry-run executed against an adapter. |
publish_attempted |
Publish call sent to adapter. |
publish_succeeded |
Adapter confirmed success and post-publish verification matched. |
publish_failed |
Adapter reported failure or post-publish mismatch. |
unpublish_attempted |
Unpublish call sent. |
unpublish_succeeded |
Unpublish confirmed. |
Lineage correlation¶
- All events for a single content artifact share
correlation_id == content_id. - All publish events for that content artifact reference its
finalizedevent asparent_event_id.
Retention¶
- All events: 365 days minimum.
publish_succeededandpublish_failed: kept indefinitely (metadata only; content payloads not retained in audit logs).- Logs are append-only and tamper-evident.
Sample event¶
{
"id": "c1a4...",
"ts": "2026-05-04T20:14:00Z",
"actor": "agent:publisher",
"actor_credential_label": "publisher-internal-docsite",
"runtime": "local",
"action": "publish_succeeded",
"target": "internal-docsite/posts/operator-manual",
"scope": "publish-internal-docsite",
"outcome": "success",
"data_classification": "internal",
"correlation_id": "doc-9f2c...",
"parent_event_id": "evt-finalized-9f2c",
"content_type": "technical-doc",
"content_id": "doc-9f2c...",
"venue": "internal-docsite",
"venue_artifact_id": "post-12345",
"approval_chain": [
{"approver": "docs_owner", "ts": "2026-05-04T20:00:00Z"}
],
"policy_version": "editorial-1.0,publishing-1.0"
}