Files
Wegwichtel/docs/agents/GRUPPENBEARBEITUNG.md
T
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

111 lines
7.4 KiB
Markdown

# 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](../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.