Abuse observability: link/approve/unlink audit trail + report path #78
Labels
No labels
bug
duplicate
enhancement
help wanted
invalid
question
wontfix
No milestone
No project
No assignees
1 participant
Notifications
Due date
No due date set.
Dependencies
No dependencies set.
Reference
dark/nether-voicebridge#78
Loading…
Add table
Add a link
Reference in a new issue
No description provided.
Delete branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Reactive abuse tooling for open registration: an audit trail and a report path feeding the existing ban tooling.
Context
Two-sided auth structurally prevents non-consensual bridging, but residual vectors remain for a public instance: rapid bridge churn, resource hogging, or a legitimate owner using the voice relay abusively (voice content is not moderatable by design — no recording/transcription).
Need 1 — audit observability
A consistent, queryable record of lifecycle-security events:
link/approve/unlink/banwith who, which guild+room, when, and (for approvals) the approver. Some of this is already logged and the approval outcome is posted in-channel (#64) — consolidate into a coherent audit trail so patterns are visible for manual bans before automated detection is worth building.Need 2 — abuse report path
A way for someone to report an abusive bridge (a management/DM command, and/or a documented contact address), feeding the existing owner/guild/room deny-list tooling. Pair with the docs work (#75).
Related: #47, #43, #63/#64 (consent + disclosure).
Merged to
master(44386f3). Implements both needs; reactive by design (voice content is unmoderatable — never recorded/transcribed).Need 1 — coherent, queryable audit trail. The
<data_dir>/audit.jsonltrail (from #47) already covered link/approve/unlink/ban; this adds:reports [count]— operator-only command that renders recent report events over DM (no host shell), each next to the exactban <kind> <value>to run.Need 2 — abuse report path → deny-list.
report <owner|guild|room> <value> [reason]— self-serve-tier + operators. Records an advisoryreportaudit event and acks; it never auto-bans (auto-acting on untrusted input is itself an abuse vector — feeds manual bans). Rate-limited via the sharedmgmt_cooldown; reason trimmed + length-capped.No new config knobs. All in
crates/matrix-rtc/src/mgmt.rs; README "Abuse controls" section + CHANGELOG added.Verification. Workspace clippy
-D warningsclean;nvb-matrix-rtc99 tests,nvb-e2e19 tests. Live on staging:mgmt_self_serve_linkPASS 53.4s (extended with report/reports/operator-readback steps), with thereportevent + invite-audit events confirmed in the real bridge'saudit.jsonl.Not yet released/deployed (code on master). The out-of-band report contact address half of Need 2 is docs → #75; prod should set
mgmt_cooldown_secssoreportis rate-gated before enabling open registration.Done. Abuse observability + report path:
report <owner|guild|room> <value> [reason](self-serve, advisory — feeds manual bans), operatorreports [count]review command, and invite accept/reject audit coverage, all on the existingaudit.jsonltrail. Merged (master44386f3), live-validated with the report event confirmed in the real trail, shipped in v0.3.0-alpha.16, deployed.linkof an invite-only room is unsatisfiable — the invite gate rejects the invite the link reply instructs #111