Files
Dune/docs/ADMIN_DISCUSSION.md
T
Quintine 160fdc1f30 Prototype administrative discussion mute controls
Let owners/operators mute or unmute new public/private sends from a human seat while retaining history, incoming messages, gameplay and credentials. Fence metadata and durable audit writes with live authority, membership and versions. Preserve exact admin/message retries and inherit restrictions through seat recovery.

Validation: types/lint, 5431 offline tests, build, 52 HTTP integration tests, 24 administrator HTTP groups, independent SQL/privacy/UI review and desktop/mobile refresh acceptance. All 2230 prior games and 4746 seats preserved. Additive migration 0016. Verified runtime fingerprint 588967fbb9c2e3b6abe2990c4fce96ee69e2256fb7e3ee416314b87593cebba9; documentation-only grammar/button-label review gives b5e57bdd26812debede91c588e38f247f1fa895ad23e7ae30bc8550eedcd90ec. New-revision deployed acceptance remains open; full admin/rules scope is unfinished.
2026-09-26 14:30:52 +10:00

68 lines
3.8 KiB
Markdown

# Administrative discussion controls
**Discussion controls** in the administration directory lets an owner or operator
mute or unmute new public and private messages from one human seat. Viewers can
inspect the public roster and discussion settings. A muted player can still read
history, receive messages and play the game. This prototype does not revoke seat
access, remove a participant or permit administrators to read private messages.
## Use and recovery
Select the human participant, enter a short operational reason, type the room
code and acknowledge that the setting follows the seat. **Mute discussion** or
**Unmute discussion** applies the change. Human seats using AI remain eligible;
permanent AI seats do not send messages. Closed and archived rooms permit settings
for reopening; a removed room must first be restored. Closing a room still blocks
all new sends independently of its seat settings.
The player sees a persistent explanation when muted, with **Refresh discussion
availability** for checking an unmute while browsing older history. Only the
caller's mute status is returned with their message page. Other players receive
no mute indicator or private discussion activity. Incoming history remains under
the existing sender/recipient privacy rules. Recovery and voluntary handover
inherit the logical seat's setting; revoked credentials remain invalid.
The exact admin operation, room version, seat-setting revision, target, setting
and reason are saved in account/room-scoped tab storage before sending. The first
request shows concise progress. Uncertain requests retain explicit retry controls
across refresh; success text stays until a deliberate action. Retrying an old
mute after a later unmute confirms the old receipt without muting again. Existing
committed message requests can likewise be confirmed while muted; altered or
new requests cannot bypass the restriction. A new owner cannot replay the former
credential's message receipt.
## Persistence and authority
Additive migration [0016](../drizzle/0016_seat_discussion_controls.sql) stores
seat settings separately from game JSON. The action leaves room versions, game
change timestamps, private custody, credentials, readiness and AI pacing intact.
It requires the current room version and a separate seat-setting revision. Live
admin authority, human membership, room availability and both versions are fenced
at commit. The setting and audit receipt commit together or roll back together.
Message insertion independently checks the live mute setting in SQL, preventing
a stale browser from sending. A message committed before a later mute still
returns its successful receipt.
Controls: [admin panel](../components/admin-discussion.tsx),
[player discussion](../components/table-talk.tsx),
[client retry](../lib/admin-discussion-client.ts).
Server: [route](../app/api/admin/rooms/[code]/discussion/route.ts),
[admin transaction](../db/admin-discussion.ts), [message store](../db/table-talk.ts).
```sh
npm test -- admin-discussion table-talk
npm run test:integration -- admin-boundary table-talk
```
Focused regressions cover rollback, concurrent/conflicting operations, live
role/session/membership/version changes, stale revisions after unmute, receipt
replay, own-only status, incoming messages, mute/send ordering and seat rotation.
The dedicated admin HTTP verifier creates a new QA room for deny/mute/read/retry/
unmute flows and preserves both seats. Independent SQL/privacy and UI source
reviews found no blocking defects. Browser, checkpoint and preservation evidence
are recorded separately; deployed acceptance must match the running revision.
Access revocation, disruptive participant removal, administrator-assisted recovery,
backup/restore and operational audit browsing remain unfinished. Discussion
moderation is a partial participant-support prototype, not full admin acceptance.