From 14c0db7d7c187a802c9878d9f6d8a513af69fe06 Mon Sep 17 00:00:00 2001 From: Thore Cimbal Date: Fri, 21 Aug 2026 12:00:00 +0000 Subject: [PATCH] =?UTF-8?q?issues:=20#0107=20=E2=80=94=20an=20account=20wi?= =?UTF-8?q?thout=20a=20profile=20row=20only=20surfaces=20as=20a=20complain?= =?UTF-8?q?t?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit It has happened twice, to two accounts, and both times the only detector was a person saying calls do not work. The second time it had stood for four days and cost four wrong diagnoses on top, because the symptom coincided with an unrelated change of the same day. Nothing needs inventing. The daily group check from #0103 has the exact shape, and it came from the same user for the same reason: signed in, silently broken, noticed by complaint. What must not be trimmed from that template is written into the issue — the wait loop against the policy race at pod start, and the control that proves the query read anything at all, because zero affected accounts and an empty database look identical otherwise. The cause is ordinary operation rather than a fault: deactivating drops the row, reactivating does not restore it. Two corrections travel with it. The diagnostic shortcut from the first case, a token count of zero, is stale and misled me today — it only catches accounts that never placed a call, and this one had twenty-one, all old. And the AAR said nine active accounts lacked a row while eight of them were deactivated, which cannot both be true: nine lacked a row, eight were deactivated, one was not. --- STATUS.md | 7 +- ...21-clark-calls-reset-vier-fehldiagnosen.md | 14 ++- ...l-zeile-faellt-nur-durch-beschwerde-auf.md | 106 ++++++++++++++++++ 3 files changed, 118 insertions(+), 9 deletions(-) create mode 100644 docs/issues/0107-aktives-konto-ohne-profil-zeile-faellt-nur-durch-beschwerde-auf.md diff --git a/STATUS.md b/STATUS.md index c460b07..6b8215e 100644 --- a/STATUS.md +++ b/STATUS.md @@ -2,9 +2,9 @@ -## Issues (47 open, 53 closed) +## Issues (48 open, 53 closed) -Verteilung: M1 1 · M2 16 · M3 4 · M4 11 · M5 15 +Verteilung: M1 1 · M2 16 · M3 4 · M4 11 · M5 16 Bedeutung der Meilensteine: siehe [roadmap.md](roadmap.md). @@ -60,7 +60,7 @@ Bedeutung der Meilensteine: siehe [roadmap.md](roadmap.md). | [0100](docs/issues/0100-threadnet-web-13-asset-pfade-tragen-weiterhin-element-themes-e.md) | low | open | Asset-Pfade tragen weiterhin "element" (themes/element/…) | | [0101](docs/issues/0101-threadnet-call-4-kaputtes-paket-0-19-2-threadnet-6-in-der-regi.md) | low | open | Kaputtes Paket 0.19.2-threadnet.6 in der Registry — Herkunft ungeklärt | -### M5 (15) +### M5 (16) | Issue | Priorität | Status | Title | |---|---|---|---| @@ -76,6 +76,7 @@ Bedeutung der Meilensteine: siehe [roadmap.md](roadmap.md). | [0068](docs/issues/0068-gitops-28-lynis-security-baseline.md) | medium | open | Lynis security baseline | | [0069](docs/issues/0069-gitops-29-crowdsec-integration.md) | medium | open | CrowdSec integration | | [0070](docs/issues/0070-gitops-30-falco-runtime-monitoring.md) | medium | open | Falco runtime monitoring | +| [0107](docs/issues/0107-aktives-konto-ohne-profil-zeile-faellt-nur-durch-beschwerde-auf.md) | medium | open | Ein aktives Konto ohne Profil-Zeile fällt nur durch eine Beschwerde auf | | [0071](docs/issues/0071-gitops-31-trivy-image-scanning-for-cves.md) | low | open | Trivy image scanning for CVEs | | [0089](docs/issues/0089-gitops-58-eigene-images-sind-unsigniert-beim-deploy-pru.md) | low | open | Eigene Images sind unsigniert — beim Deploy prüft nichts die Herkunft | | [0090](docs/issues/0090-gitops-59-kein-kubernetes-audit-log-zugriffe-an-der-api.md) | low | open | Kein Kubernetes-Audit-Log — Zugriffe an der API werden nicht protokolliert | diff --git a/docs/aar/2026-08-21-clark-calls-reset-vier-fehldiagnosen.md b/docs/aar/2026-08-21-clark-calls-reset-vier-fehldiagnosen.md index d76a983..9a74e50 100644 --- a/docs/aar/2026-08-21-clark-calls-reset-vier-fehldiagnosen.md +++ b/docs/aar/2026-08-21-clark-calls-reset-vier-fehldiagnosen.md @@ -6,6 +6,7 @@ related: - "docs/wiki/stolpersteine/fremder-defekt-der-aenderung-angelastet.md" - "docs/aar/2026-08-11-apo-calls-profile-zeile.md" - "docs/issues/0088-gitops-56-networkpolicy-ausgehender-verkehr-ist-unbesch.md" + - "docs/issues/0107-aktives-konto-ohne-profil-zeile-faellt-nur-durch-beschwerde-auf.md" --- # AAR: Clarks Calls und Identitäts-Reset — vier Fehldiagnosen bis zur bekannten Ursache @@ -59,8 +60,9 @@ Ausgerechnet `clark` diente dort als *gesundes Referenzkonto*; seine Zeile ist seitdem verschwunden (deaktiviert und reaktiviert; Deaktivieren löscht das Profil, Reaktivieren legt es nicht neu an). -**Die Gegenprobe lieferte sich selbst:** Von neun aktiven Konten ohne -Profil-Zeile waren **acht deaktiviert** — `clark` war der einzige Ausreißer. +**Die Gegenprobe lieferte sich selbst:** Neun Konten hatten keine Profil-Zeile, +**acht davon waren deaktiviert** — `clark` war das einzige **aktive** darunter +und damit der einzige Ausreißer im Muster. ## Why the difference @@ -107,9 +109,9 @@ Tokens gewesen. - [x] Gedächtnis-Eintrag zum apo-Fall um dieses zweite Vorkommen ergänzt, samt der Abfrage, die beim nächsten Mal zuerst laufen soll, und der Falle im alten Diagnose-Kürzel. -- [ ] **Offen:** Es gibt keine Prüfung, die ein aktives Konto ohne Profil-Zeile - meldet. Der Fall ist jetzt zweimal aufgetreten (apo, clark), beide Male - erst nach einer Nutzermeldung. Eine Regel darauf wäre billig — gehört als - Issue vorgeschlagen, nicht hier entschieden. +- [x] Issue **#0107** angelegt (Zustimmung sorb, 2026-08-21): tägliche + Stichprobe auf aktive Konten ohne Profil-Zeile, gebaut wie die + Gruppenprüfung aus #0103 — dieselbe Bauart, derselbe Anlass, derselbe + Nutzer als Auslöser. - [ ] **Offen:** Ob weitere reaktivierte Konten betroffen sind, ist heute mit **0** beziffert; es gibt aber keinen Automatismus, der das hält. diff --git a/docs/issues/0107-aktives-konto-ohne-profil-zeile-faellt-nur-durch-beschwerde-auf.md b/docs/issues/0107-aktives-konto-ohne-profil-zeile-faellt-nur-durch-beschwerde-auf.md new file mode 100644 index 0000000..5bca590 --- /dev/null +++ b/docs/issues/0107-aktives-konto-ohne-profil-zeile-faellt-nur-durch-beschwerde-auf.md @@ -0,0 +1,106 @@ +--- +type: issue +id: "0107" +status: open +created: 2026-08-21 +milestone: M5 +priority: medium +area: security +host: matrix +projekt: gitops +related: + - "docs/aar/2026-08-21-clark-calls-reset-vier-fehldiagnosen.md" + - "docs/aar/2026-08-11-apo-calls-profile-zeile.md" + - "docs/issues/0103-wiki-zugang-ohne-gruppe-endet-stumm.md" +--- + +# Ein aktives Konto ohne Profil-Zeile fällt nur durch eine Beschwerde auf + +Fehlt einem Konto die Zeile in Synapses `profiles`-Tabelle, bricht das Setzen +des Anzeigenamens mit `TypeError` in `_check_profile_size`. Ohne Anzeigenamen +initialisiert das Element-Call-Widget nie, ohne Widget gibt es keinen +OpenID-Token und keinen SFU-Eintritt. **Anmeldung und Chat laufen weiter** — +der Nutzer kann nur nicht telefonieren und seine Identität nicht zurücksetzen. + +Nichts an diesem Zustand meldet sich. Kein Zähler, keine Logzeile, keine +Alarmregel. + +## Zweimal aufgetreten, zweimal erst nach einer Beschwerde + +| Datum | Konto | Wie es auffiel | Verzug | +|---|---|---|---| +| 2026-08-11 | `@apo` | Nutzer meldete „kein Call kommt zustande" | unbekannt | +| 2026-08-21 | `@clark` | sorb meldete hängende Calls und hängenden Reset | **4 Tage** (letzter OpenID-Token 08-17 20:26) | + +Beim zweiten Mal kostete die Suche zusätzlich **vier Fehldiagnosen**, weil das +Symptom zeitlich mit einer laufenden Egress-Änderung zusammenfiel — siehe den +AAR und `docs/wiki/stolpersteine/fremder-defekt-der-aenderung-angelastet.md`. + +**Die Ursache entsteht im Normalbetrieb:** Deaktivieren löscht die Profil-Zeile, +Reaktivieren legt sie nicht neu an. Es braucht keinen Fehler, nur einen +Verwaltungsvorgang. + +## Ist-Stand am 2026-08-21 + +Nach der Reparatur von `@clark`: **8 aktive Konten, davon 0 ohne Profil-Zeile.** +Acht weitere Konten ohne Zeile sind sämtlich deaktiviert und damit unauffällig. + +⚠️ Diese Null ist eine **Momentaufnahme von Hand**, kein gehaltener Zustand. Am +nächsten Tag kann sie eine Eins sein, und niemand erführe es. + +## Was zu tun ist + +**Eine tägliche Stichprobe auf der Datenbank — gebaut wie `wikijs-gruppenpruefung` +(#0103), nicht neu erfunden.** Dieselbe Bauart ist bereits im Einsatz und stammt +aus demselben Anlass: Auch #0103 wurde von `@apo` ausgelöst, auch dort war ein +Nutzer „angemeldet, aber unsichtbar kaputt", auch dort fiel es nur durch eine +Beschwerde auf. + +Was aus jener Vorlage übernommen gehört und **nicht** weggekürzt werden darf: + +- Die **Wartschleife** auf die Datenbank. Die NetworkPolicy eines neu erzeugten + Pods ist beim Containerstart noch nicht programmiert; ohne Schleife scheitert + der Job nachts am Wettlauf, und man gewöhnt sich an den roten Job. +- Die **Gegenprobe**: Erst prüfen, dass überhaupt Konten gelesen wurden. Sonst + sieht „0 Konten ohne Profil-Zeile" bei leerer oder falscher Datenbank genauso + aus wie ein sauberes Ergebnis — stiller Erfolg ist hier das größere Risiko als + ein Fund. +- Ausgabe nach stdout, damit sie über Alloy in Loki landet; `exit 1` bei einem + Fund, damit `BackupJobFailed` greift und die Meldung im Wartungsraum steht. + +Die Abfrage selbst ist ein Einzeiler und liefert ihre Gegenprobe mit — *jedes* +Konto ohne Profil-Zeile muss deaktiviert sein: + +```sql +SELECT u.name FROM users u +LEFT JOIN profiles p ON p.full_user_id = u.name +WHERE p.user_id IS NULL AND u.is_guest = 0 AND u.deactivated = 0; +``` + +## Abnahmekriterien + +1. Ein aktives Konto ohne Profil-Zeile führt binnen **24 h** zu einer Meldung im + Wartungsraum — ohne dass jemand sich beschwert. +2. Die Prüfung wird **rot vorgeführt**, nicht nur grün behauptet: ein Konto + testweise ohne Zeile, Meldung erscheint, Zeile wieder herstellen. +3. Eine leere oder falsche Datenbank meldet einen **Fehler**, nicht „0 Konten + betroffen". +4. Der Fund nennt den Localpart, damit die Reparatur ohne weitere Abfrage + möglich ist. + +## Nicht Teil davon + +- **Die Ursache abstellen.** Dass Reaktivieren die Zeile nicht neu anlegt, ist + Synapse-Verhalten; ein Patch dagegen wäre unverhältnismäßig. Diese Prüfung + macht den Zustand sichtbar, sie verhindert ihn nicht. +- **Andere Folgen fehlender Profil-Zeilen** als Calls und Identitäts-Reset. +- Das Homelab und `game-operating`. + +## Nebenbefund für die Behebung + +⚠️ Das dokumentierte Diagnose-Kürzel aus dem apo-Fall — `open_id_tokens = 0` — +ist **veraltet** und hat am 2026-08-21 in die Irre geführt. Es greift nur bei +Konten, die *nie* telefoniert haben; `@clark` hatte 21 Einträge, sämtlich alt. +Maßgeblich ist das **Datum des jüngsten** Tokens im Vergleich zu einem gesunden +Konto. Wer diese Prüfung baut, sollte das Kürzel im Gedächtnis-Eintrag und im +Runbook mitkorrigieren.