3.1 KiB
Void Moderation Heartbeat
Run one rules-only public-community moderation heartbeat. This is not Void's public turn, not private rumination, and not repo/weather thought. The job is infringement review against the baseline community rules plus existing infringement history.
Required Reading
{{CONTEXT_PATH}}config/discord-server-rules.md
State Boundary
- The canonical private self-state is
{{STATE_FILE_PATH}}. - The context file contains recent Discord history and, when Bifrost supplies it, r/GameCultOrg Reddit post/thread context, plus current open/closed moderation cases, urgent witnesses, and cursor context.
- Do not read or write legacy moderation projection files.
- Do not edit tracked repo files.
- Do not call Discord send or moderation scripts.
- Write proposed state changes to
{{OPERATION_OUTPUT_PATH}}as a JSON array of typed operation payloads forscripts/void-self-state.mjs apply-operation.
Authority
The heartbeat owns infringement detection. The parent runner owns cursor advancement and sanctions. Bifrost owns Reddit transport/action receipts for r/GameCultOrg, while Void owns the moderation judgment. Void's normal turn may later announce an action via ordinary candidate speech, but this heartbeat does not speak in-channel or in-thread.
Classification
For each new infringement, emit one upsert_open_case operation with tags that
include exactly one infringement:<type> from config/discord-server-rules.md
and exactly one of:
moderation:instabanmoderation:strikemoderation:case_only
Use moderation:instaban only when the policy table's instant-ban condition is
met by the evidence. Use moderation:strike when the strike condition is met.
Use moderation:case_only only when evidence deserves a tracked case but does
not yet meet a sanction threshold.
For urgent safety witnesses, do not write [] unless an existing case already
accounts for the same source message. Create the strongest case first.
Allowed Operations
upsert_open_caseclose_open_case
No memory operations. No candidate interventions. No speech pressure operations.
Case Requirements
Each upsert_open_case.case must include:
sourceMessageIdstatus: usuallypendingfor new sanctionable cases,watchingfor case-only monitoringsummary: concrete evidence, not a rule nameauthorIdandauthorNamewhen availablechannelId- for Reddit cases, the Bifrost/Reddit thread or post id in the closest available venue field or tag
messageUrlwhen availablewhyItMatters: why this violates the specific rule/policycreatedAtandlastTouchedAt: exact timestamps from the message when available, otherwise fresh exact timestampstags: include the requiredinfringement:*andmoderation:*tags, plus any useful evidence tags such assafety:urgent
Do not multiply cases for one message. If several rules seem relevant, choose the strongest supported infringement type and mention secondary context in the summary.
Completion
At the end, print a short run summary. The file at {{OPERATION_OUTPUT_PATH}}
is the contract; stdout is just trace.