docs(teams): phase 9 as built — roles, not overwrites, and three things §7.3 named that do not exist #163
Reference in New Issue
Block a user
No description provided.
Delete Branch "docs/teams-phase9-voice"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Amends
TEAMS.md§7.3 inline, marks phase 9 done in Part 12, and adds theteam_integrationsrow toBACKEND_DESIGN.md's schema table. Pairs withwebsite#159.
The access model changed shape, and it moves the ceiling. The org lead
settled on a per-Team role always, rather than per-member overwrites escalating
to a role above ~90 members. That deletes
voice_overwrite_max, the escalationand the
modecolumn — but the part worth stating plainly is that the bindinglimit moves with it: overwrites are capped per CHANNEL, so the designed shape's
ceiling was "how big can one Team be"; roles are capped per GUILD at 250, so the
built shape's ceiling is "how many Teams can have voice at all". A limit on the
number of Teams is one an operator must be told about before reaching it, so it
is in the admin panel rather than in an error afterwards. The section carries
that as a table.
Three things §7.3 names that the tree does not have, all settled the same
way — by asking the operator, because nothing in the data model can answer:
guild_configknows a news channel, a modlog channel, an autorole and a filter allowlist,
and none of them means staff. Now a list of role ids the admin designates,
empty by default; administrators bypass overwrites anyway, so what was really
missing is a way to let NON-admin staff in.
the id nowhere to live, since
team_integrations.team_idis NOT NULL. Itlands in settings, written by the server after the bot reports it.
checked. The operator invites the bot by hand and no invite URL with a
permission integer exists in the tree. A preflight is now a precondition:
enabling is refused 422 while the bot cannot manage channels and roles.
And one number that counts something different from what it says.
voice_min_linked_membersbecomesteams_voice_min_members, counting everyactive member: the question an operator answers with it is "is this Team real
enough", and link state answers a different one.
Two smaller amendments: "recover inside the window → no Discord call made" is
narrowed to no DESTRUCTIVE call (a Team that regained members has members to
grant, and refusing to call at all would leave them outside the channel); and
switching voice off tears nothing down, because a checkbox must not delete
structure in somebody's guild.
Also records what the live rig proved and the two defects it found — a duplicate
result column that made every query fail, and a "Sync now" that reported nothing
had happened while it was happening — plus two problems outside the phase that
it had to work around: swagger-autogen's per-file route limit in
teams.router.js, and a timezone skew between MariaDB'sNOW()and JSDate.now()that moves every staleness judgement, phase 3's public freshnessbanner included.
🤖 Generated with Claude Code
https://claude.ai/code/session_01WnDSWzpUjw8t8C2hghysNz