Files
Wegwichtel/docs/agents/GRUPPENBEARBEITUNG.md
Florian Zumpe cacc63be66
Sonarqube Scanner / Prepare environment (push) Successful in 8s
Sonarqube Scanner / Build and test (push) Successful in 24s
Sonarqube Scanner / SonarQube analysis (push) Failing after 1m2s
Sonarqube Scanner / Deploy to Server (push) Successful in 6s
fix tests and change invitation mechanics
2026-10-19 17:21:50 +02:00

7.4 KiB

Agent-Hinweise zur Gruppenbearbeitung

Implementierter erster Stand: gemeinsame serverseitige Kopien von eigenen und veröffentlichten Strecken, fünf Unicode-Wichtel im Einladungscode, Drehrad-Eingabe, Sitzungen, Rollen owner/member, Codewechsel und Widerruf. Bedienung und Einspielen: Gruppenbearbeitung.md.

Beizubehalten

  • Originale bleiben unverändert; keine Schreibrechte auf freigegebene Strecken öffnen. Neue gemeinsame Kopien brauchen erneut die normale Moderationsfreigabe.
  • creator_id bleibt Ersteller-Metadatum. Eigentums-/Mitgliedsrechte werden durch zufällige Sitzungsgeheimnisse geprüft. Niemals Rechte anhand einer frei übermittelten creator_id oder eines von einem Client behaupteten Rollenfelds vergeben.
  • Sitzungsgeheimnisse nur als Hash serverseitig und als HttpOnly-/SameSite-Strict- Cookie auf dem Client speichern; bei HTTPS zusätzlich Secure. Nicht ausgeben.
  • Einladungscodes haben fünf Stellen mit den vorhandenen neun Symbolen. Wiederholungen sind erlaubt. Das Auswahlpopup wird zufällig vorbelegt; erst die Bestätigung speichert den vom Nutzer gewählten Code. Server erzeugt oder ersetzt Codes niemals automatisch. Ungültige bzw. belegte Codes zurückweisen.
  • Codes dauerhaft in collaboration_invitations speichern; SHA-256-Abdruck und Ablaufzeitpunkt bleiben in collaboration_groups. Klartext nur für Besitzer ausliefern, auch nach Neustart. Gültigkeit 60 Minuten; falsche Versuche begrenzen. Variationselektoren ändern die Unicode-Zuordnung nicht.
  • Schutz auch auf den ursprünglichen /api/routes/...-Adressen für alle Gruppen- Dateien durchsetzen. Anders geschriebene IDs (führende Nullen, Prozentkodierung, Exponentialschreibweise, Groß-/Kleinschreibung der Pfade) dürfen ihn nicht umgehen.
  • Gemeinsame Entwürfe aus öffentlichen Listen ausschließen. Änderungen verwenden die geladene Gruppenrevision als If-Match. Hintergrundlisten dürfen diese Bearbeitungsrevision nicht auf einen neueren Stand setzen. Konflikte zeigen, ohne ungespeicherte Eingaben zu ersetzen. Schreibanfragen bis zum Abschluss sperren.
  • Codewechsel entfernt nur die alte Einladung, Gruppenschließung entzieht auch bestehenden Mitbearbeitern Rechte. Besitzer behalten Zugriff. Gemeinsame Strecken nicht über die normalen Delete-/Restore-Endpunkte entfernen/wiederherstellen.
  • Gruppenzugang benötigt Internet. Lokale Entwürfe weiter sofort anzeigen und ihre Dateien erst bei Bedarf bzw. beim Übertragen laden.
  • Rechtliche Hinweise zu Sitzungs-Cookies und serverseitigen Gruppenentwürfen statisch auf Deutsch halten; Bedienung vollständig in Deutsch und Englisch.

Weitere Aufgaben

  • Wiederherstellung des eröffnenden Zugangs nach Cookie-/Geräteverlust und eine ausdrücklich autorisierte Eigentumsübertragung entwickeln.
  • Einzelne Mitglieder verwalten und gezielt entfernen; beigetretene Sitzungen sind derzeit nur gemeinsam über „Gruppe schließen“ widerrufbar.
  • Automatisches Zusammenführen bzw. feinere Konflikte und transaktionale Mehrdatei-Übertragungen evaluieren. Bereits erfolgreiche Teiländerungen können bei einem späteren Fehler bestehen bleiben. Neue Routen-POSTs sind noch nicht gegen verlorene Erfolgsantworten idempotent.
  • Expliziten unabhängigen Moderationszugang für private Gruppenmedien und einen Ablauf zum Anfordern ihrer Veröffentlichung ergänzen; keinen Rechte-Bypass anhand frei setzbarer Header oder beliebiger Basic-Auth-Header einführen.
  • Aufbewahrung und Bereinigung verwaister Gruppen, Sitzungen und Kopien sowie weitergehende Quoten und verteilte Sperren für einen Mehrprozessbetrieb planen.
  • Der Gruppen-Code ist eine Einladung, kein persönlicher Identitätsnachweis. Rechteprüfung für einzelne Inhalte bleibt eine getrennte offene Aufgabe.

Stationssperren und zurückgehaltene Änderungen

  • src/services/point-locks.js verwaltet atomare JSON-Sperrdateien pro Station mit creator_id, Sitzungshash und zufälligem Bearbeitungsschlüssel. Rechte nicht allein anhand der creator_id prüfen. Übernahmen brauchen eine bestätigte, vergleichende Ersetzung des gerade angezeigten Schlüssels; während laufender Speicherung weder freigeben noch übernehmen oder die Gruppe schließen.

  • Alle Stations-Schreibpfade einschließlich Bilder/Ton, Entfernung und Umordnung durch guardPoint schützen, auch bei alternativen URL-Schreibweisen.

  • X-Poi-Lock und If-Poi-Match sind Pflicht. Der Inhaltsabdruck berücksichtigt auch tatsächliche Dateibytes. Antwortheader X-Poi-Version/X-Poi-Id nach erfolgreichen Teiländerungen aktualisieren. Stations-Schreibzugriffe verwenden diese Prüfung anstelle des streckenweiten If-Match, damit verschiedene Stationen unabhängig bearbeitbar sind. Das Einprozessmodell bleibt erforderlich.

  • public/js/group-points.js sichert Entwürfe inklusive File/Blob und Entfernungsvormerkungen vor dem Senden in IndexedDB. Transaktionsabschluss abwarten; bei Quotenfehlern niemals erfolgreiche Sicherung behaupten.

  • Entwürfe auch ohne Netz bzw. nach verlorenem Zugang anzeigen. Erst nach erneutem Sperrerwerb und Inhaltsvergleich senden. Bei Abweichungen Vergleich mit ausdrücklicher Bestätigung; keine automatische Wiederholung/Überschreibung.

  • Datei-Entfernungen bei Gruppen zunächst vormerken. Bereits quittierte Übertragungen aus der Warteliste nehmen. Die ursprüngliche Vergleichsbasis behalten, bis sämtliche Änderungen erfolgreich übertragen wurden.

  • Weiter offen: atomare Mehrdatei-Übertragungen/Idempotenz bei verlorenen Erfolgsantworten, gezieltes Zusammenführen einzelner Felder und Auflösung entfernter Stationen sowie verteilte Sperren. Eine nachfolgende Aufnahme kann nicht ohne Einschränkungen zurückgerufen werden.

  • Einladungscodes laufen nach 60 Minuten ohne Nutzung ab, bleiben unverändert und erlauben dann keinen neuen Beitritt. Erfolgreicher Beitritt, explizites Öffnen zur Bearbeitung, Sperrerwerb, gültige Aktivitätsmeldung und erfolgreiche Speicherung verlängern auf 60 Minuten. Bestehende Mitgliedschaften bleiben erhalten und können durch Bearbeitung denselben Code reaktivieren. Passive Abfragen ändern keine Frist. Wartung bereinigt nur abgelaufene Stationssperren, niemals Codes.

  • Sperren nach 60 Minuten ohne Aktivität entfernen; updated_at bei tatsächlicher Bearbeitung/Speicherung aktualisieren. Reine Statusabfragen und unbenutzte Fenster dürfen die Frist nicht verlängern. Laufende Schreibanfragen nicht wegen Zeitablauf entsperren. Zeitprüfung auch vor dem endgültigen Speichern.

  • GET auf den Stations-Sperrpfad liefert 204 für frei, 423 für gesperrt, 404 für nicht vorhanden; bestehende Gruppenrechte gelten unverändert. Heartbeats sind POSTs mit eigenem Bearbeitungsschlüssel und dürfen weder fremde noch bereits abgelaufene Sperren übernehmen.

Code-Popups

  • Gruppenbutton öffnet zuerst fünf zufällig vorbelegte, veränderbare Drehräder. Auswahl vor Übertragung lokaler Strecken bestätigen lassen. Abbrechen überträgt nichts. Danach gespeicherten Code anzeigen; Editor erst nach ausdrücklicher Aktion.
  • Auswahl, Beitritt und Codeanzeige verwenden breite native Dialoge. Alle fünf Drehräder nebeneinander; Wiederholungen zulassen. Codeänderung nur ausdrücklich.
  • Scrollschritt in groups.js und Optionshöhe/Innenabstand in editor.css stimmen überein (96 Pixel). Schließen der Eingabe verwirft verspätete Antworten; die passive Einladungsabfrage darf die Eingabe nicht überdecken.