Security Audit Log Spec — Adversarial Sandbox¶
Specializes governance/audit/audit-log-spec.md for the adversarial sandbox. Required event schema for every test run.
Required fields (extends generic spec)¶
In addition to the generic fields, sandbox events require:
| Field | Type | Notes |
|---|---|---|
test_id |
string | Unique per test run. |
target_repo |
string | org/repo@commit. |
test_class |
enum | sast | dast | fuzz | dep_scan | secret_scan | adversarial_llm. |
tool_identity |
string | Tool / model name + version. |
finding_id |
string (optional) | Set on finding-related events. |
severity |
enum (optional) | Set on finding events. |
iteration |
int (optional) | Loop iteration count. |
Event vocabulary¶
| Action | When |
|---|---|
sandbox_launched |
Container started and isolation checks passed. |
sandbox_torn_down |
Container stopped and volume sanitized. |
tool_invoked |
A test tool or adversarial-LLM workflow began. |
tool_completed |
The same finished. |
finding_emitted |
A finding was filed. |
fix_proposed |
A patch was proposed for a finding. |
fix_applied |
A patch was applied in sandbox branch. |
fix_reverted |
A patch was reverted. |
signoff_recorded |
Loop ended with explicit signoff. |
acceptance_recorded |
A finding was accepted (not fixed) with rationale. |
network_attempt |
Sandbox attempted outbound traffic (always logged). |
escape_suspected |
Suspected sandbox escape; triggers SPB-14. |
Lifecycle correlation¶
- All events in a run share the same
correlation_id == test_id. - All events in a fix loop share an additional
parent_event_idchain to the originatingfinding_emitted.
Retention¶
- Findings, fixes, signoffs: 365 days minimum.
- Tool-invocation events: 180 days minimum.
- Logs are tamper-evident; all
severity∈ {critical, high} events also signed.
Sample event¶
{
"id": "8a1f...",
"ts": "2026-05-04T19:55:00Z",
"actor": "agent:sec-tester",
"actor_credential_label": "sandbox-sast-runner",
"runtime": "local",
"action": "finding_emitted",
"target": "/sandbox/target/services/api/handler.py",
"scope": "sandbox-rw",
"outcome": "success",
"data_classification": "internal",
"correlation_id": "test-3d0a...",
"test_id": "test-3d0a...",
"target_repo": "myorg/api@e3b2",
"test_class": "sast",
"tool_identity": "semgrep@1.74.0",
"finding_id": "F-0017",
"severity": "high"
}