Kunden landen auf /organisation#konto (Abschnitt klappt auf), root auf
/admin/accounts#konto. Auf dem Handy bleibt nur das Symbol.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Das Portal zeigt die Anleitungen aus dem Repo manuals selbst an
(Klon unter /opt/tuxflotte-manuals, KUNDENPLATTFORM_MANUALS_DIR) statt
auf git.tuxflotte.de zu verlinken; geänderte Dateien werden ohne
Neustart neu eingelesen. Verweise zwischen den Anleitungen zeigen auf
/hilfe, Anker wie bei Gitea, kein Roh-HTML.
Die Suche hat einen neuen Bereich "Anleitungen" (Abschnitte nach
Überschriften, Neuigkeiten/Roadmap nachrangig), Funktionstreffer der
Kunden verlinken die passende Anleitung. Kopfzeile: Hilfe-Knopf neben
der Lupe; der Secure-Boot-Hinweis verlinkt jetzt /hilfe.
Neue Abhängigkeit Markdown 3.11.2.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Lupe neben dem Anmeldenamen führt zu /suche: Funktionen (fester Index in
routers/suche.py), Geräte, Merkmale und Apps, beim Admin auch
Organisationen und Workspaces. Workspace-Creator › Workspaces gruppiert
nach Organisation (tuxflotte offen) mit Filter nach Name, Organisation,
Distro und Vorlagen.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Pico macht nav zu einem Flex-Container (Balken nur so breit wie die
Einträge) und zieht das erste ul nach links.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Abschnitte (Standort/Zweck, Debug-Modus, Veyon, Personalisierung,
Einzelgerät) und Merkmal-Kategorien starten eingeklappt; die Köpfe
zeigen den aktuellen Stand, Merkmal-Suche über alle Kategorien.
Aufklapp-Köpfe seitenweit leicht in der Primärfarbe hinterlegt.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Deaktiviert die Kunden-Konten der Organisation (benutzer.is_active), auch
laufende Sitzungen. Benötigt provisioning-server mit Migration 0076.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Raum bleibt der Standort/Zweck (Schlüssel, Raumliste je OE). Auf der
Einstellungsseite des Standorts: Veyon einschalten (ohne Häkchen) und
Lehrergerät(e) ankreuzen; die kommen in die Gruppe "Lehrergeräte" (eine je
Organisation, Häkchen veyon_lehrer gesetzt), alle anderen dort sind
Schülergeräte. Ausschalten nimmt die Lehrergeräte aus der Gruppe. Hinweis
auf die alte Falle (Häkchen am Standort), Speichern behebt sie.
Geräteseite: "Als Lehrergerät festlegen" / "Kein Lehrergerät mehr".
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Befund Erstkontakt 25.10.2026 (Bildschirmschoner ließ sich nicht mehr
entsperren). Benötigt provisioning-server d76fdad (gesperrt_durch_einladung).
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Befund Erstkontakt 25.10.2026: Der Workspace wurde angelegt, der neue
Standort nicht; die Auswahlliste stand unbemerkt auf "Später entscheiden".
Jetzt drei Optionsfelder mit "Neuen Standort/Zweck anlegen" vorausgewählt
und Namensfeld direkt darunter; ein eingetragener Name legt den Standort
auch ohne passende Wahl an.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Assistent: 1 Distribution (Kurzcharakteristik, für Kunden Hinweis ohne
eingerichtete Installation, Debian vorerst nur Admin), 2 Name und
Standort/Zweck (bestehend, neu oder später; Namensvorschlag), 3-5 nur
Einträge der gewählten Distro (Wechsel wählt ab, mit Hinweis), 6 Prüfen.
Speichern weist im Kundenportal gleich zu, Fehler der Zuweisung stehen auf
der Workspace-Seite. Distro-Leiste und Konfliktkarten entfallen; behebt
nebenbei den Absturz der Zusammenfassung im Kundenportal (Eigentümerfeld
gibt es nur im Admin). Versionsliste und Version festhalten unter
Erweitert; Link "neuen Workspace für … erstellen" bei jedem Standort.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Geräteseite: Formular immer da; fehlt "Personalisierung möglich", kommt
das Gerät beim Senden in die Gruppe "Personalisierte Geräte" (eine je
Organisation, bei Bedarf angelegt, Merkmal aktiv). Gruppen- und
Standortseite: mit aktivem Merkmal eine Liste der Geräte mit E-Mail-Feld,
nach dem Senden zurück auf dieselbe Seite. Gefunden im Erstkontakt-Probelauf.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Kunden landen nach der Anmeldung auf dem Dashboard; der Assistent
verschwindet mit dem ersten Gerät online, danach ein Hinweis auf
Standorte/Zwecke, solange es nur "Neue Geräte" gibt.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
WLAN der Organisation, anderes WLAN oder Kabel; Standort/Zweck nur bei
Auswahl; Offline-Medium und Neuinstallation unter Erweitert;
Installationsprofil nur für Tuxflotte-Admins (sonst wählt der Server).
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
/personalisierung/vergessen ohne Gerät fragt die Adresse ab, Antwort immer
gleich, Begrenzung je IP. Kiosk-Aufruf mit Gerät und Token bleibt.
Einladungsmail, Stand-Seite und Admin-Reset verweisen auf die Seite.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Geräte-Info: Adressfeld (Domänenliste, nur mit Merkmal), erneut senden,
zurückziehen. Öffentlich: Einladungsseite mit Namensvorschlag, Stand-Seite
mit Selbstaktualisierung, Hinweis für den Kiosk älterer Rollen.
Code-Formular und Bestätigungsseiten entfernt.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Die Distro-Ablehnung stand oben auf der Seite und wurde übersehen (Befund
Liebherr 23.10.2026). Jetzt erscheint sie im aufgeklappten Formular der
OE, die Seite springt dorthin; ebenso im Admin-Reiter. Kundenseitig zeigt
jede OE zusätzlich Gerätezahl und Distro.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Im fest ausgerichteten Aktionen-Menü klappte die Auswahlliste wieder zu,
abgeschickt wurde die alte OE (Liebherr-84, 23.10.2026). Jetzt auf der
Geräteseite (#oe), Erfolg und Distro-Ablehnung erscheinen dort. Der
Admin-Weg zeigt die Ablehnung jetzt ebenfalls an.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
- Freischaltung je Organisation (Portal-Migration 0010, alle bisherigen
Organisationen = Testschulen frei), Schalter unter Admin › Organisation ›
Organisationsdaten
- Kunden-Creator auf den Stand des Admin-Creators: Assistent mit Distro,
Entwurf/Veröffentlichen, Webapps, Standardbrowser, Kopie, Löschen;
gemeinsame Vorlagen _workspace_detail.html/_workspace_assistent.html
- Vorlagen von tuxflotte nur lesend, ohne fremde Nutzung; Kopie immer in
die eigene Organisation
- Organisation › Struktur: Workspace je OE zuweisen
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
- Admin › Organisation: Hostnamenkonvention und Ressourcen als aufklappbare
Abschnitte der Organisationsdaten, Aktivierungscodes bei den
Bereitstellungsvorlagen (mit Abgrenzung Vorlage/Workspace), Flows oben
auf Aktivitäten; alte Adressen leiten weiter
- Katalog: Kategorien und Webapp-Vorlagen aufklappbar unter den Einträgen,
keine vierte Navigationsebene mehr
- Kunden-Dashboard: Läufe ohne Fehler je Gerät zusammengefasst, aufklappbar
- Ausgegebene Medien: Deaktivieren und Löschen
- Geräteliste: Tooltips zu De-Provisionieren und Löschen, Löschtext ehrlich
- Inline-Skripte (Aktivitäten-Filter, Katalog-Suche) in statische Dateien:
die CSP (script-src 'self') hatte sie blockiert
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Flotten-Gesundheit als Ampel (Zahlenkacheln Handeln/Beobachten/In
Ordnung, je Gerät ein Kästchen mit Tooltip und Link aufs Protokoll,
Liste der auffälligen Geräte mit Grund), Statusfarben aus der
Dataviz-Palette, immer mit Symbol und Text. Ersetzt Textlisten und den
Ring "Gerätezustand". Admin-Dashboard: "Änderungen an der Plattform"
(Deploy, Migration, Boot-Medium, Stände vorab/stabil) statt Agent-Läufen.
Braucht provisioning-server 844faa2 mit Migration 0071.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Kundenseite: aufklappbarer Abschnitt "Ausgegebene Medien" mit allen
Enrollment Sessions und Status (aktuell, gültig, aufgebraucht,
abgelaufen, widerrufen). Admin-Flows: neueste Session offen, ältere
unter "Ältere Sessions" mit Zahl der noch gültigen. Kein automatisches
Ungültigmachen (Entscheidung 22.10.2026).
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Tage (Ortszeit) als aufklappbare Abschnitte, der neueste offen.
Agent-Läufe ohne Fehler je Gerät und Tag in einer Zeile mit Zahl der
Läufe; Fehler und Installationen einzeln. Filter nach Gerät und Art
(Nur Fehler, Installationen, Agent-Läufe). Abruf 500 statt 100.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Eine Seite "Einträge" statt drei: nach Bereich und Kategorie aufklappbar,
je Zeile Name, Key, Distro-Kennzeichen (Tooltip mit Ansible-Rolle) und
"Bearbeiten" für Merkmale und Webapp-Vorlagen. Suche und Filter "Fehlt
auf <Distro>" ersetzen die frühere Matrix. Alte Adressen leiten auf den
Katalog, die POST-Ziele bleiben.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
- Struktur/Gruppen: OE-Kette und Gruppen sind gleichberechtigte Stimmen,
aktiv gewinnt auch gegenüber der OE (ADR-0012, resolve_katalog_overrides)
- Anrede wie in manuals: du statt Sie, auch in den Passwort-Mails
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Öffentliches Formular /personalisierung (Code, dann E-Mail mit
Domänenvorgabe, Anmeldename, Passwort; ?kiosk=1 zeigt Abmelden), Passwort
nur als SHA-512-crypt an anode, Bestätigungslink per mail_ausgang (GET
zeigt Knopf, erst POST bestätigt). Geräte-Info: Code erzeugen (einmalig
angezeigt), Kästchen „Bestehenden Zugang behalten“, zurückziehen, Verlauf.
Geräteliste: Spalte Personalisiert, Schuladressen sichtbar. Organisation:
E-Mail-Domänen.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Nutzer-Wunsch 15.10.2026. In Chromium gemessen: 18 -> 20,7 px, 700,
--pico-primary; Zaehler 'aktiv: n von m' normal und gedaempft.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Nutzer-Wunsch 15.10.2026: Gruppe/OE (Kunden- und Admin-Seite) zeigten alle
Kategorien offen, man scrollte weit. Jetzt <details> je Kategorie mit
'aktiv: n von m' im Kopf, ein Suchfeld filtert ueber alle Kategorien und
klappt Treffer auf (static/merkmal-kategorien.js); offene Kategorien
bleiben nach dem Neuladen (Aktiv/Inaktiv) offen. Verhalten in headless
Chromium geprueft.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
optionen_felder: veyon_lehrer (Checkbox, Entscheidung 15.10.2026).
Bisher konnte der root-Admin auf den Admin-Seiten fuer Gruppe/OE keine
Optionen setzen (Aktiv-Formular ohne Felder, Route ohne Formular) - betraf
auch Org-WLAN. Jetzt wie auf der Kundenseite: Felder im Aktiv-Formular,
parse_optionen_form, optionen an die API.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Kunden-Admins pflegen Mail, Nextcloud, ownCloud, WebDAV, SMB und Web-Proxy
ihrer Organisation (Formulare aus den Typ-Definitionen des Servers, keine
Zugangsdaten), Wirkung fuer die ganze Org, OEs oder Gruppen. Unterseite
erscheint nur fuer freigeschaltete Organisationen; root pflegt immer.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Hinweis laut Entscheidung vom 13.10.2026 (Roadmap Schritt 2). Dabei
behoben: Ein gespeichertes Passwort wurde bei leerem Feld immer
weiterverwendet, auch fuer ein offenes Netz, eine andere SSID oder ohne
WLAN. Jetzt verworfen bei "Offenes WLAN", leerer SSID oder neuer SSID
ohne neues Passwort.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Auswahl im Entwurf, Anzeige in der veroeffentlichten Version und in der
Wirkungsvorschau. Die Brave-Option "Als Standardbrowser festlegen" an OE
und Gruppe entfaellt dafuer.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
- Aktionen-Menue in den Geraetelisten oeffnet nach oben, wenn unten kein
Platz ist, bleibt im Fenster und wird unter 1024 px nicht mehr vom
scrollenden Hauptbereich abgeschnitten (static/dropdown-platz.js).
- Flows-Seite nutzt dieselbe Reiterleiste wie die Organisationsseite; ihre
eigene Kopie kannte Struktur, Diagnosezugang und Aktivitaeten nicht.
- Dashboard: "Erstes Geraet aktiv" zeigte auf /flotte (gibt es nicht),
jetzt /geraete.
- Kundenkonten: E-Mail und Org-Admin-Zuweisung nachtraeglich aendern.
- Merkmale bearbeiten: Tabelle kompakt, Knopf nicht mehr abgeschnitten.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Das Sitzungs-JWT traegt einen Abdruck des Passwort-Hashes; jeder
Passwortwechsel (Reset per Mail, Selbstaenderung, Skript) beendet damit
alle bestehenden Sitzungen des Kontos. Die Selbstaenderung stellt der
eigenen Sitzung ein neues Cookie aus. Alte Tokens ohne Abdruck gelten
nicht mehr - nach dem Ausrollen einmalige Neuanmeldung fuer alle.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Login-Seite verlinkt 'Passwort vergessen?'. Der Link in der Mail gilt
eine Stunde und nur einmal (fastapi-users-Token). Gleiche Antwort fuer
bekannte und unbekannte Adressen, Begrenzung je Adresse und IP.
Plattform-Admins (is_superuser) sind ausgenommen.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
mail.py reiht Mails in mail_ausgang ein (Migration 0009), eine
Versandschleife im Dienst liefert sie per SMTP mit Anmeldung ein und
wiederholt bei Fehlern. Voreinstellung ist Trockenlauf; das Passwort
kommt als systemd-Credential. Dazu scripts/testmail.py und Tests.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Auftragskatalog, Log und 'In OE verschieben' im Aktionen-Menue statt
eigener Knoepfe/Spalte; Kennung unter dem Hostnamen; kompakte Tabelle -
passt jetzt ab 1280px ins Fenster (vorher ~1560px). In beiden Listen
fuehrt der Hostname direkt zum Auftragskatalog. Lokal geprueft.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Nutzer-Befund 09.10.2026 (Kunden-Admin, Flotte): 'Auftragskatalog' war
deutlich groesser als 'Aktionen', und das Aktionen-Menue wurde vom
scrollenden Tabellenrahmen (GUI-Runde Punkt 1) abgeschnitten.
- Tabellen mit Aufklapp-Menue scrollen nicht im Rahmen; Menues in der
letzten Spalte oeffnen nach links; Formulare im Menue untereinander.
- Kunden-Geraeteliste schmaler: Auftragskatalog als erster Menue-Eintrag,
Kennung klein unter dem Hostnamen, kompakte Tabelle - passt ab 1280px
ohne Seitenscrollen; bis 1024px scrollt der Hauptbereich.
- Admin-Geraeteliste: kleine, gleich hohe Knoepfe.
Lokal mit headless Chromium geprueft (Menue vollstaendig sichtbar,
800/1024/1280/1440/1920px).
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Reines SVG (Geometrie in templating.ring_segmente, Makros in
_diagramme.html), kein JS. Farben nach den Dataviz-Regeln: Kategorien
in fester Reihenfolge, mit validate_palette.js gegen Pico hell/dunkel
geprueft; Statusfarben plus Symbol fuer den Geraetezustand; 'Weitere'
und Sonderfaelle grau. Legende mit Zahl und Prozent (Farbe nie allein),
Tooltip je Segment, eine einzige Kategorie als Satz statt Ring.
Hell/dunkel und 390-1920px lokal geprueft.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Sortier-/filterbare Tabelle mit Distro, Partitionierung, Nutzung;
Hinweis, wenn die Distro nicht zum Workspace passt (in Produktion bei
zwei Liebherr-Entwicklungsprofilen). Bezeichnung fuehrt zur
Bearbeiten-Seite (vorbelegtes Formular, Loeschen nur ohne Nutzung).
Backend-Feld entfaellt, die Distro kommt vom Workspace; nur globale und
eigene Workspaces zur Auswahl. Lokal mit Browser-Ablauf geprueft.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Alle Zeitstempel-Ausgaben laufen durch den Filter datum; sortierbare
Datumsspalten tragen data-sort-wert (ISO), table-tools.js sortiert danach
chronologisch statt textuell. Neuer Reiter 'Aktivitaeten' bei der
Organisation, 'Letzte Aktivitaeten' auf beiden Dashboards mit
zusammengefassten Agent-Laeufen statt Einzelereignissen. Lokal geprueft.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Neue Tabelle mit Bezeichnung, Status (aktiv/deaktiviert/abgelaufen),
Gueltig bis, Nutzung, Datum statt Rohzeitstempel; Anlegen mit
Bezeichnung und Gueltigkeit; Loeschen mit Bestaetigung. Neuer
Jinja-Filter datum (Ortszeit, deutsches Format), gemeinsame Bausteine
(kompakte Tabelle, Status-Marken, Inline-Aktionen), Tabellen scrollen
im eigenen Rahmen statt die Seite zu verbreitern. Lokal mit headless
Chromium geprueft (Anlegen/Deaktivieren/Loeschen, Breiten 1280-1920).
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Pico setzt den Container-Innenabstand ab 576px auf 0; mit unseren groesseren
max-width-Stufen war der Container so breit wie das Fenster, der Inhalt
klebte am Rand und Picos -10px-Rand der Kopfzeilen-Liste erzeugte einen
horizontalen Scrollbalken. Jetzt fester seitlicher Innenabstand. Auf dem
Handy: E-Mail in der Kopfzeile ausgeblendet, breite Tabellen scrollen im
Hauptbereich statt die ganze Seite. Lokal mit headless Chromium bei
390/800/1280/1440/1920px geprueft (scrollWidth == clientWidth).
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Hauptmenü heißt Workspace-Creator mit den Reitern Katalog und Workspaces;
der verwechselbare Reiter Vorlagen entfällt, Merkmale/Kategorien/
Webapp-Vorlagen/Distro-Abdeckung liegen als Unterseiten im Katalog.
Vorlagen zeigen „für Schulen“ bzw. „für alle“/Organisationsnamen statt
„Kundengruppe“. Aufklapp-Bereiche der Workspace-Einstellungen sehen wie
Knöpfe aus und heben sich geöffnet ab (Nutzer-Feedback 07.10.2026).
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Beim E2E-Test mit Ziel-OE gefunden: der Name zeigte den Workspace des
Installationsprofils, installiert wird aber der der Ziel-OE.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Admin-Reiter je Organisation: OE-Baum als Karten mit Geräten/Distros,
eigenem bzw. geerbtem Workspace, Workspace zuweisen (automatisch oder
Version pinnen) und Unter-OEs anlegen; Ablehnungen der Distro-Regel
werden mit Begründung angezeigt. Reiterleiste bricht jetzt um.
Kundenseite: Struktur zeigt den Workspace je OE, Gerät verschieben zeigt
die Ablehnung statt sie zu verschlucken, Installationsmedium mit
Ziel-OE (gespeichert, Konflikt mit dem Profil verständlich gemeldet).
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>