docs(teams): phase 8 as built — the gate §7.2 could not check, and the key it could not hold #162

Merged
whitlocktech merged 1 commits from feature/teams-phase8-notifications-bridge into edge 2026-08-19 01:32:25 +00:00
Member

Amends TEAMS.md §7.2 inline, marks phase 8 done in Part 12, and adds the team_integration_config row to BACKEND_DESIGN.md's schema table. Pairs with website#158.

Two of the five amendments are things the tree disproved, not choices we made.

  1. §7.2's DDL cannot hold its own default row. PRIMARY KEY (platform, team_id) with team_id INT NULL — MariaDB coerces every primary-key column to NOT NULL, so the deployment-wide default that every override overrides is unrepresentable and the mechanism has no base case. Confirmed against a real MariaDB, which silently rewrote the column and then answered ERROR 1048 (23000): Column 'team_id' cannot be null. The amendment records the surrogate-key + generated-team_key shape, and the foreign key the original had no room for.

  2. §7.2's visibility gate has no data source on either side, and cannot have one. The four team.* streams carry no visibility (only team_activity rows do); forum threads have no public/members column because a forum is members-only by construction, every thread behind team_forum_grants; and core cannot see a Discord channel's permissions. So §7.2's own example config names exactly the two events that can never be public. The section now carries a "The gate, as built" subsection: an attributed operator acknowledgement, with the four properties that make it a gate rather than a checkbox.

The other three: one-shot rather than queued (the section said "identical to announce and mod-reverse", which are two different reliability models); the author exclusion stops at the channel; and a roster event carries a count and never a name.

Also records where the admin surface lives and why it is not in the Discord Bot panel — phase 10 makes the platform a registry lookup, and what should change then is what fills the panel, not where it is.

The phase entry notes ONE code repo, not the plan's website + bot: bot is a workspace inside website, and unlike phase 7 nothing here belongs to a module, so module-uo is untouched and MODULE_API_VERSION does not move.


  • AI-assisted: Claude Code (Claude Opus 5)

🤖 Generated with Claude Code

https://claude.ai/code/session_01WnDSWzpUjw8t8C2hghysNz

Amends `TEAMS.md` §7.2 inline, marks phase 8 done in Part 12, and adds the `team_integration_config` row to `BACKEND_DESIGN.md`'s schema table. Pairs with **website#158**. **Two of the five amendments are things the tree disproved, not choices we made.** 1. **§7.2's DDL cannot hold its own default row.** `PRIMARY KEY (platform, team_id)` with `team_id INT NULL` — MariaDB coerces every primary-key column to `NOT NULL`, so the deployment-wide default that every override overrides is unrepresentable and the mechanism has no base case. Confirmed against a real MariaDB, which silently rewrote the column and then answered `ERROR 1048 (23000): Column 'team_id' cannot be null`. The amendment records the surrogate-key + generated-`team_key` shape, and the foreign key the original had no room for. 2. **§7.2's visibility gate has no data source on either side, and cannot have one.** The four `team.*` streams carry no `visibility` (only `team_activity` rows do); forum threads have no public/members column because a forum is members-only *by construction*, every thread behind `team_forum_grants`; and core cannot see a Discord channel's permissions. So §7.2's own example config names exactly the two events that can never be public. The section now carries a "The gate, as built" subsection: an attributed operator acknowledgement, with the four properties that make it a gate rather than a checkbox. The other three: **one-shot rather than queued** (the section said "identical to `announce` and `mod-reverse`", which are two different reliability models); **the author exclusion stops at the channel**; and **a roster event carries a count and never a name**. Also records where the admin surface lives and why it is not in the Discord Bot panel — phase 10 makes the platform a registry lookup, and what should change then is what fills the panel, not where it is. The phase entry notes **ONE code repo**, not the plan's `website` + `bot`: `bot` is a workspace inside `website`, and unlike phase 7 nothing here belongs to a module, so `module-uo` is untouched and `MODULE_API_VERSION` does not move. --- - [x] AI-assisted: Claude Code (Claude Opus 5) 🤖 Generated with [Claude Code](https://claude.com/claude-code) https://claude.ai/code/session_01WnDSWzpUjw8t8C2hghysNz
wtclaude added 1 commit 2026-08-19 01:26:58 +00:00
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>
whitlocktech merged commit d00ead09b6 into edge 2026-08-19 01:32:25 +00:00
whitlocktech deleted branch feature/teams-phase8-notifications-bridge 2026-08-19 01:32:26 +00:00
Sign in to join this conversation.
No description provided.