feat: initial v0.1 scaffold - #1
Merged
Merged
Conversation
Public API: log/2 (sync), log_async/2, query/2,3. Append-only by API contract: no update or delete. nova_audit_event:build/1 auto-assigns event_id (UUIDv7 via jhn_uuid), schema_version (1), occurred_at (microseconds). Required fields: actor + action; everything else optional. Per-log redactor applied at write-time only. Umbrella layout with apps/nova_audit (core) and apps/nova_audit_kura (Kura/Postgres adapter as a separate OTP app). Logger adapter ships in core for dev / no-DB deployments. Async dispatch checks code:is_loaded(shigoto) at runtime: routes through Shigoto if available, otherwise through the per-log nova_audit_worker gen_server. Worker is bounded (default 10_000), drop-newest semantics via process_info(WorkerPid, message_queue_len) check at enqueue time. Drops emit [nova_audit, overflow] telemetry. In-flight loss on crash documented. nova_audit_kura ships hardening_sql/0,1 returning REVOKE UPDATE, DELETE statements for the operator to apply post-migration. schema_sql/0 provides the recommended table shape (UUID PK, indexes on occurred_at, actor_id, action, target_id, request_id). Telemetry events for log + query (start/stop/exception), overflow, and write_error. Eight query filter keys: actor_id, action, occurred_after, occurred_before, outcome, target_id, target_type, request_id. Taure/erlang-ci v2 CI + release workflows, ex_doc guides for getting-started, adapters, compliance notes (DORA/NIS2/GDPR/AI Act mapping), and telemetry.
ℹ️ 15 OTP CVEs auto-ignored (already fixed in running version)These CVEs are patched in the installed OTP version but NVD data
|
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
Initial v0.1 scaffold of
nova_audit— append-only audit-event log for the Nova ecosystem. Compounds the DORA / NIS2 / GDPR / AI Act compliance story without locking into any single framework.Public API
nova_audit:log/2— sync writenova_audit:log_async/2— async via Shigoto if loaded, per-log worker otherwisenova_audit:query/2,3— cursor-paginated, 8 filter keysLayout
Umbrella:
apps/nova_audit(core) +apps/nova_audit_kura(Postgres adapter as separate OTP app).Adapters
nova_audit_log— OTPlogger(write-only)nova_audit_kura— Postgres via Kura; shipshardening_sql/0,1+schema_sql/0Guardian-flagged additions implemented
event_id(UUIDv7 viajhn_uuid) — library-assignedschema_version(1) — library-assignedoccurred_at— microsecondstarget_id,target_type,request_idprocess_info(message_queue_len),[nova_audit, overflow]telemetry, in-flight loss documentednova_audit_kura:hardening_sql/0for operator to REVOKE UPDATE/DELETE post-migrationTest plan
rebar3 compilecleanrebar3 ct— 11/11 passrebar3 dialyzercleanrebar3 xrefcleanrebar3 hankcleanrebar3 fmt --checkcleanv0.1.0Follow-ups (not in v0.1)
nova_audit_storageadapter (usesnova_storagefor object-store-backed logs)nova_audit_signedwrapper)nova_audit_retentionlibrary or Sentinel/Prova-owned)