Hash-chained ingestion API
External apps push single or batch events over a simple Bearer-key REST API. Each tenant gets a SHA-256 hash chain — hash(n) = sha256(canonical(event_n) + hash(n-1)) — committed under a per-org advisory lock so a chain can never fork.