AuditJsonlSink.emit_audit_event() in audit.py:226-233 opens the file with open(path, "a") for every single event, with no file locking. With
parallel = 5, concurrent appends cause OSError. The JSONL file ended up with 5,466 lines, meaning ~469 events were silently dropped.
Root cause: No file lock or buffered writer. Each emit_audit_event call opens/closes the file independently.
AuditJsonlSink.emit_audit_event() in audit.py:226-233 opens the file with open(path, "a") for every single event, with no file locking. With
parallel = 5, concurrent appends cause OSError. The JSONL file ended up with 5,466 lines, meaning ~469 events were silently dropped.
Root cause: No file lock or buffered writer. Each emit_audit_event call opens/closes the file independently.