docs(teams): phase 8 as built — the gate §7.2 could not check, and the key it could not hold
Amends §7.2 inline and marks phase 8 done in Part 12; adds the team_integration_config row to BACKEND_DESIGN.md's schema table. Two of the amendments are things the tree disproved rather than choices: - §7.2's DDL cannot hold its own default row. MariaDB coerces PRIMARY KEY columns to NOT NULL, so `team_id NULL` is unrepresentable and the override mechanism has no base case. Confirmed against a real MariaDB (error 1048). - §7.2's visibility gate has no data source on either side and cannot have one: the streams carry no visibility, a forum thread is members-only by construction rather than by a column, and core cannot see a channel's permissions. The gate becomes an attributed operator acknowledgement. Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
@@ -553,6 +553,7 @@ core's.
|
||||
| `team_forum_moderation` | append-only, per Team, recording `actor_role` — WHICH authority was exercised. Deliberately not merged with `mod_actions`/`appeals`, which is Discord-sanction-shaped |
|
||||
| `team_forum_uploads` | attribution for `uploads` mode: who uploaded what, when, how big, and to which post. Also the sweep's worklist |
|
||||
| `team_notification_prefs` | per-Team notification preference (phase 6). **Opt-out for push, opt-IN for email** — `muted` defaults 0 and `email_mode` defaults `'off'`, so the two sinks default opposite ways and the asymmetry lives here rather than in a condition anyone has to remember. Team scoping lives in this table and in the recipient computation, never in a stream id. `last_digest_at` is the digest's only state and the worker is its only writer |
|
||||
| `team_integration_config` | where a Team's notifications go on another platform (phase 8). One row per (platform, Team) plus a **deployment-wide default** whose `team_id` is NULL — expressed with a generated `team_key AS IFNULL(team_id, 0)` in the unique key, because a NULL cannot live in a primary key and the default row is the base case of the whole override mechanism. `members_ack` is a **precondition, not a preference**: forum posts and announcements are members-only always, core cannot see a channel's permissions, so enabling one requires an attributed operator acknowledgement that the destination is restricted — and changing the channel clears it |
|
||||
| `content_reports` | member-raised abuse reports (phase 5). **Not a `team_*` table and not named for the forum** — `target_type` is a plain VARCHAR so a wiki page or a news comment becomes a value rather than a table. Team forum content is only the first consumer |
|
||||
|
||||
**Core had no user-facing report flow of any kind before `content_reports`.** `moderation`,
|
||||
|
||||
Reference in New Issue
Block a user