DarkIRC (and the chat in app, which embeds the irc2 stack) has no moderation:
any RLN-rate-limited message renders for everyone, so signal-to-noise in public
channels depends entirely on posters' good behavior. Moderation today would
require either a central operator or protocol changes rushed into the chat path.
The event graph already provides the right primitives — a replicated, never-
pruned static DAG (currently RLN-only) and rotating chat DAGs — so we can add
owner-designated, client-enforced channel policy without a central party and
without touching anonymity: policy targets signal-to-noise, not traffic (flooding
remains RLN's job).
#) channel can be
registered in the static DAG with an owner public key. Owner actions
(transfer ownership, set default policy list, pin messages) form a
prev-linked, owner-signed chain; resolution is deterministic (longest valid
chain, canonical tie-break).u8 policy enum (AllowList, AdminHide,
Filter, …) with named values on the ChanServ command surface
(ALLOWLIST, ADMINHIDE, FILTER). The owner publishes the channel's
default policy list with per-policy enable flags and opaque params. Users
override defaults locally.AdminHide
policy) publish signed hide/unhide actions as rotating events referencing a
target event id. Hidden messages are marked hidden in clients, never removed
from the DAG. Tombstones expire with their targets (same rotation window).irc2: /msg ChanServ REGISTER|INFO|TRANSFER|POLICY|PIN|HIDE|
UNHIDE|HELP for channel owners and admins. Works in desktop darkirc; the app
does not expose owner flows in this version.#dev) becomes tappable via a button placed over the existing label;
it opens a per-channel overlay listing the owner's current default policy
set, where the user can toggle each policy off/on locally. Overrides are
stored as rows in the app's local table. No user-installed policies in this
version.event-graph/app-payloads: Tagged application payloads in the static DAG and
content-type tag bytes on darkirc rotating events; admission, dispatch, and
unknown-content handling for both DAG kinds.chat-moderation: Channel registration and owner chains, the hardcoded
policy enum and default policy lists, rotating-DAG hide actions, ChanServ
commands, and client-side policy application (desktop + app UI toggles).(none — no existing specs)
src/event_graph/ — static-DAG admission (handle_static_put), static_sync
re-verification, RLN state rebuild must skip app payloads; touches the RLN
admission path (security-critical zone; needs review).bin/darkirc/ (irc2) — Privmsg wire format (tagged content, optional
signature fields), content-tag dispatch in the relay path, ChanServ service,
config keys for signing keypairs, static-event broadcast for owner chains.bin/app/ — plugin/darkirc.rs relay (tag dispatch, hidden marking),
policy cache, per-channel policy toggle UI, override rows in the local table,
owner-key storage in the settings store; the chat screen's channel-name
label gets a button overlay opening the policy overlay.