From 50413c87d83559d5c5d88979dc10d8e12e82ce20 Mon Sep 17 00:00:00 2001 From: patrick Date: Fri, 18 Sep 2026 01:12:11 +0200 Subject: [PATCH] docs(PROJ-13): clarify OBS-16-7 is not a bug Platform SYSTEM_ADMIN is deliberately independent of org membership status (PROJ-13 non-goal: revoke is DB-only, no suspend concept on users). requireSystemAdmin already reads the flag fresh per request, so revocation is immediate. QA's finding conflated org-level suspension with platform-admin revocation. Co-Authored-By: Claude Sonnet 5 --- features/INDEX.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/features/INDEX.md b/features/INDEX.md index 21a183f..899b8a2 100644 --- a/features/INDEX.md +++ b/features/INDEX.md @@ -38,7 +38,7 @@ Empfohlene Baureihenfolge PROJ-13 bis PROJ-18: PROJ-13 → PROJ-14 → PROJ-15 Nachträge 2026-09-11 (commit bc4d749): Passwort-Reset → [[PROJ-1]], Mitglied hart löschen → [[PROJ-3]]. Nachtrag 2026-09-11 (commit ffe2d45): API-Zugriff bei suspended/left sofort entziehen (nicht nur Matrix) → [[PROJ-3]]. Nachtrag 2026-09-12: Admin-Direkt-Passwort-Setzen → [[PROJ-3]]. -Nachtrag 2026-09-17 (QA PROJ-16, OBS-16-7): `requireSystemAdmin` prüft nur `users.isSystemAdmin`, ignoriert suspended/left — suspendierter SYSTEM_ADMIN behält vollen `/api/system-admin/**`-Zugriff → [[PROJ-13]]. +Nachtrag 2026-09-18 (Klarstellung zu OBS-16-7): kein Bug. `isSystemAdmin` ist laut PROJ-13-Design bewusst unabhängig von Org-Mitgliedschaft, Widerruf ist explizit DB-only (Non-Goal: kein UI). `users` hat kein Suspend-Status-Feld — nur `members.status` (Org-Ebene). `requireSystemAdmin` liest das Flag frisch pro Request, kein Caching → Revoke wirkt sofort. OBS-16-7 verwechselte Org-Suspendierung mit Platform-Admin-Widerruf → [[PROJ-13]]. Noch nicht gespect't, auf Nutzerwunsch für später vorgemerkt: eigenständiger E-Mail+Passwort-Login der Mitglieder direkt bei Synapse/Element (aktuell nur über TalkTime via Puppet-Login möglich, siehe [[PROJ-11]]).