# 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; jede Stelle wird unabhängig mit randomInt gewählt. Codes werden dauerhaft nur gehasht gespeichert; der aktuelle Klartext wird für die Besitzeranzeige im Arbeitsspeicher des App-Prozesses gehalten. Gültigkeit 30 Minuten; falsche Versuche sind begrenzt. 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 nach 30 Minuten automatisch erneuern, solange keine aktive Stationssperre vorliegt. Abgelaufene Codes erlauben keinen neuen Beitritt, auch wenn ihre Erneuerung wegen aktiver Stationen aufgeschoben ist. Mitgliedschaften bleiben erhalten. Wartung im Serverprozess starten und beim Beenden stoppen. - 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 zeigt unmittelbar den echten fünfstelligen Einladungscode. Keine vorgeschaltete Zwei-Wichtel-Vorschau wieder einführen; sie wurde mit dem Code verwechselt. Eine unvollständige Codeantwort nicht anzeigen. - Codeanzeige und Codeeingabe verwenden getrennte breite native Dialoge. Alle fünf Drehräder nebeneinander anordnen; Wiederholungen weiterhin zulassen. - Scrollschritt in groups.js und Optionshöhe/Innenabstand in editor.css müssen übereinstimmen (96 Pixel). Schließen der Eingabe verwirft verspätete Antworten; die automatische Einladungsaktualisierung darf die Eingabe nicht überdecken.