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>
Veröffentlichte Version nur lesend, Bearbeiten legt einen Entwurf an.
Im Entwurf: Inhalt wie im Assistenten (auf der Distro nicht umgesetzte
Einträge gesperrt), Webapps aus Vorlage oder frei, Wirkungsvorschau
(+/− je Bereich, wie viele Geräte automatisch umsteigen, gepinnte,
Profile), Veröffentlichen mit Notiz, Verwerfen. Dazu Nutzung,
Versionsliste, Name/Zweck, Vorlage und Sichtbarkeit (alle, Kundengruppen,
Organisationen), Kopieren mit Vorab-Prüfung für andere Distro, Löschen
nur wenn ungenutzt mit Bestätigung.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Sechs Schritte: Name/Zweck/Eigentümer, Apps, Webapps, Richtlinien
(aufklappbar wie im Katalog), Distro, Prüfen. Mitlaufende Distro-Leiste
zeigt, welche Distro noch möglich ist; bei Konflikten nennt Schritt 5 die
fehlenden Einträge mit Alternativen aus derselben Kategorie und
Entfernen-Knopf. Ohne JavaScript ein langes Formular, der Server prüft
ohnehin. Workspace-Liste verweist auf den Assistenten statt auf das alte
Schnellformular.
Nebenbei gefunden: das Inline-Skript in base.html, das ein manuell
gewähltes Hell-/Dunkel-Design vor dem CSS setzt, wurde von der eigenen
CSP blockiert - jetzt static/theme-init.js.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Workspace-Zuweisung an Gerätegruppen entfällt (Kunden- und Admin-Seite),
Gruppen ergänzen nur noch. Workspace-Liste zeigt Distro, Version,
Eigentümer und Vorlagen-Status, beim Anlegen wählbare Distro.
Workspace-Creator neu, Schritt C.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Workspace-Liste unter /admin/workspaces/liste, Merkmale, Kategorien,
Webapp-Vorlagen und Distro-Abdeckung (frühere Flottenmatrix) unter
/admin/workspaces/vorlagen. Gemeinsame Unternavigation, Menüpunkt
Datenbank entfällt, alte /admin/technik-Adressen leiten weiter
(POST mit 307). Workspace-Creator neu, Schritt B.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Katalog ersetzt die Flottenmatrix als Übersicht: Apps, Webapps und
Konfigurationsrichtlinien aufklappbar nach Kategorien, je Eintrag Icon
(Fallback Zahnrad) und Distro-Verfügbarkeit aus den Blueprints.
Kategorien bekommen eine Art (App/Richtlinie), Webapp-Vorlagen eine
Kategorie. Workspace-Creator neu, Schritt A.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Menüpunkt ausgegraut, /workspace zeigt nur einen Hinweis plus die
bereitstehenden Workspaces (lesend), alle schreibenden Endpunkte liefern
403. Zuweisung an Gerätegruppen bleibt offen. Freischalten über
WORKSPACE_CREATOR_FREIGEGEBEN in routers/workspace.py.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Angehakte /home-/var-Partitionen wurden ohne Hinweis verworfen, wenn das
separate Auswahlfeld auf 'Einfach' stand (Kunden-ISO-Test 02.10.2026).
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Neues Schema-Dropdown (single/custom) + feste Auswahl fuer /home, /var,
/usr (Aktivieren-Checkbox + Prozent + Dateisystem je Mountpoint) - bewusst
keine freie Mountpoint-Liste, einfacher serverseitig zu validieren und
deckt die konkret gewuenschten Faelle ab. Admin-Tabelle zeigt das
gewaehlte Schema jetzt mit an.
Teil der E2E-Testrunde, siehe platform-docs/roadmap/
e2e-testrunde-lokale-adressierung.md Phase 3. Gegenstueck in
provisioning-server (Validierung, DB-Persistenz) ist dort bereits
committet.
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DWKevK2QUK5tsGmqfSD6Yy
Neuer Proxy /admin/technik/merkmal-icons/{filename} (gleiches Muster wie
der bestehende Webapp-Icon-Proxy, anode kennt seine öffentliche Adresse
nicht) - anders als dort aber mit tatsächlich durchgereichtem Content-
Type statt fest angenommenem "image/x-icon", weil der Bildtyp hier
wirklich variiert (Simple-Icons-SVG vs. Favicon-ICO/PNG/JPG). Icons sind
klein genug (Obergrenze 2 MB) für einmaliges Einlesen statt echtem
Streaming.
Merkmale-Verwaltung zeigt jetzt Icon + Beschreibung sichtbar (vorher nur
im Bearbeiten-Formular versteckt), Flottenmatrix zeigt das Icon neben
Key/Name der Zeile.
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01VLk93dhDMrkPXefVdknMV9
Beide Platzhalter-Dashboards aus Phase 1 bekommen jetzt echten Inhalt -
Nächste-Schritte-Checkliste, Flotten-Gesundheit (Balken für Platten-/
RAM-Auslastung, Liste überfälliger Check-ins), letzte Aktionen. Holt die
Auswertung von den neuen anode-Endpunkten (provisioning-server), ergänzt
kundenseitig nur die Installationsmedium-Prüfung (iso_build_id lebt in
installationsmedium_konfiguration, kundenplattforms eigener DB).
Grafiken bewusst als einfache CSS-Balken (.balken/.balken-fuellung in
base.html) - kein Chart-Framework/CDN-Import, passt zum bestehenden
Vanilla-JS/CSS-Ansatz (table-tools.js, theme-toggle.js).
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01VLk93dhDMrkPXefVdknMV9
Formular-Ergänzung zum serverseitigen Gegenstück (provisioning-server):
optionale Kategorie-Auswahl (dieselben App-Kategorien wie bei Merkmalen)
und ein Kiosk-Modus-Kontrollkästchen. Das Kontrollkästchen ist deaktiviert
mit Hinweistext, solange der Workspace weder Chrome noch Chromium als
Merkmal hat (hat_kiosk_browser in workspace.py) - vermeidet einen
Schalter, der sichtbar existiert, aber wirkungslos wäre. Webapp-Liste
zeigt Kategorie/Kiosk-Status als kleine Badges an.
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01VLk93dhDMrkPXefVdknMV9
Nutzer-Feedback (11.09.2026): der Excel-artige Spalten-Filter (Runde von
heute Vormittag) fehlte weiterhin auf einigen Spalten - Hostname/Kennung/
Gruppen/Letzter Check-in in der Flotte, Key/Name in den Merkmalen, sowie
allen Spalten der Flottenmatrix. Jetzt bekommt konsequent jede
data-sort-Spalte auch data-filter, wie beim Vorbild Excel (auch dort hat
jede Spalte einen Autofilter, unabhängig von der Sinnhaftigkeit im
Einzelfall).
Zweiter Wunsch: solange ein Filter tatsächlich einschränkt (nicht mehr
alle Werte angehakt), färbt sich die Titelzeile sanft in der Akzentfarbe
(neue CSS-Klasse .spalten-gefiltert, von wendeSpaltenFilterAn() gesetzt) -
das Trichter-Icon nutzt fill="currentColor" und färbt sich automatisch
mit.
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01VLk93dhDMrkPXefVdknMV9
Schliesst die Lücke aus dem heutigen Nutzer-Feedback: Organisationen ohne
einen einzigen eigenen Workspace hatten keinen Weg mehr zu Webapps, weil
Webapps strikt an Besitz gebunden sind (fetch_sichtbaren_workspace()).
Neue Route POST /workspace/{id}/uebernehmen prüft Sichtbarkeit (global
oder eigene Organisation), ruft den neuen anode-Klon-Endpunkt auf und
leitet auf die Detailseite des neuen, voll editierbaren Workspace um.
Button dazu in workspace_detail.html, nur bei schreibgeschützten
(globalen) Standards sichtbar.
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01VLk93dhDMrkPXefVdknMV9
Gleicher Rueckfall wie der Bugfix vom Vortag (workspace_namen|length),
diesmal in der neuen clientseitigen baueSpaltenFilter() - Nutzer wollte
das Icon konsistent immer sehen, unabhaengig von der aktuellen
Werteanzahl in der Spalte.
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01VLk93dhDMrkPXefVdknMV9
Live vom Nutzer gefunden: eine Aktualisierung von table-tools.js kam
nicht an, weil der Browser die alte Version unter derselben URL
gecacht hatte - kein Grund fuer den Browser, neu zu laden. Neuer
static_version-Jinja-Global (Hash ueber den tatsaechlichen Inhalt aller
static/-Dateien, bei Prozessstart berechnet), als ?v=... an pico.min.css/
table-tools.js/theme-toggle.js angehaengt - aendert sich automatisch bei
jedem Deploy, ohne manuelles Hochzaehlen.
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01VLk93dhDMrkPXefVdknMV9
Nutzer-Wunsch: Filter-Icon direkt in der Titelzeile statt eines eigenen
Blocks unter der Suche. table-tools.js komplett umgebaut - ein
th[data-filter] bekommt automatisch ein ▾-Symbol, Klick oeffnet ein
Dropdown mit Checkboxen fuer jeden in dieser Spalte tatsaechlich
vorkommenden Wert (rein clientseitig aus den gerenderten Zellen
ermittelt, kein Server-Code mehr noetig). Ersetzt das aeltere,
serverseitig befuellte data-table-category-filter-Muster vollstaendig -
Merkmale/Kategorie und beide Geraete-Listen/Workspace nutzen jetzt nur
noch das Attribut, kein <details>-Block + kein workspace_namen/
Wertelisten-Handling im Router mehr noetig. Bei Gelegenheit gleich auf
OE, Status (Kunde) und Organisation (Admin) ausgeweitet, da jetzt keine
Server-Aenderung mehr pro Spalte noetig ist.
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01VLk93dhDMrkPXefVdknMV9
Nutzer-Feedback: als Org-Admin (Liebherr, aktuell alle 6 Geräte auf
'Entwickler') war der Filter unsichtbar, weil er absichtlich erst ab 2
unterschiedlichen Workspace-Namen erschien - schlechte Entscheidung,
Filter jetzt immer sichtbar sobald mindestens ein Workspace vorkommt.
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01VLk93dhDMrkPXefVdknMV9
Organisations-Admins bekommen erstmals Zugriff auf die Workspace-
Komposition (bisher exklusiv /admin/technik/workspaces vorbehalten,
ADR-0028 hatte das als "zunaechst admin-only" offen gelassen).
- routers/workspace.py (Neubau, ersetzt den Phase-1-Platzhalter):
/workspace (eigene Workspaces + bereitgestellte globale Standards,
ueber den bestehenden ADR-0028-Endpunkt), /workspace (POST, anlegen -
organization_id kommt nie aus dem Formular), /workspace/{id} (Detail:
eigener Workspace -> volle Kategorie-Checkbox-Komposition, Wiederver-
wendung von admin_technik.gruppiere_merkmale_nach_kategorie(); globaler
Standard -> reine Leseansicht, kein Formular).
- Webapps-Verwaltung zieht von der bisherigen eigenen Seite (/webapps)
hierher um (workspace_detail.html, nur fuer eigene Workspaces sichtbar)
- alte Route bleibt nur noch als 301-Redirect auf /workspace bestehen.
- Neue Besitz-/Sichtbarkeitspruefung fetch_sichtbaren_workspace() (eigene
Organisation ODER global sichtbar, sonst 404) analog zum bestehenden
find_oe_in_organization()-Muster.
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01VLk93dhDMrkPXefVdknMV9
Nach dem in Runde 2 gebauten data-table-category-filter-Muster (gleicher
JS-Mechanismus, kein neuer Code) - Kunden- und Admin-Geräteliste bekommen
einen Checkbox-Filter nach Workspace-Name. Admin-Geräteliste hatte bisher
gar keine Workspace-Spalte, jetzt ergänzt.
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01VLk93dhDMrkPXefVdknMV9
- Neue Primaer-Nav-Reihenfolge Kunde: Dashboard -> Organisation ->
Workspace (neu) -> Installationsmedium -> Flotte (ans Ende verschoben).
- Neue Primaer-Nav-Reihenfolge Admin: Dashboard -> Organisationen ->
Datenbank -> Flotte -> Admin-Accounts (Flows als eigener Punkt entfernt).
- Dashboard (Kunde+Admin) und Workspace (Kunde) als Platzhalter-Routen
angelegt - Navigationspunkte von Anfang an klickbar, Inhalt folgt in
spaeteren Phasen (Dashboard: Phase 5: Workspace: Phase 3).
- "Webapps" aus der Organisation-Unternavigation entfernt (zieht in
Phase 3 in den neuen Workspace-Bereich um, vorlaeufig weiter unter
/webapps erreichbar ueber einen Link auf der Workspace-Platzhalterseite).
- Flows: frueherer eigenstaendiger Einstiegspunkt (/admin/flows,
Organisationswahl) entfernt (admin/flows_index.html geloescht) - neuer
7. Reiter "Flows" auf der Organisations-Detailseite
(admin/kunden_detail.html + admin/flows_organisation.html mit
derselben Reiter-Nav), routers/admin_flows.py-Logik unveraendert.
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01VLk93dhDMrkPXefVdknMV9
Pico setzt "nav ul { align-items: center }" fuer den ueblichen
horizontalen Navbar-Fall - durch die erzwungene flex-direction:column
in .primary-nav wurde daraus horizontale Zentrierung jedes Eintrags
statt linksbuendig ueber die volle Spaltenbreite. align-items:stretch
behoben, macht nebenbei die ganze Zeile klickbar statt nur den Text.
Mobile Zeilen-Variante behaelt bewusst align-items:center (dort richtig).
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01VLk93dhDMrkPXefVdknMV9
Der GUI-Umbau vom Vortag entfernte den "Organisation"-Nav-Punkt fuer
is_superuser-Konten - "Mein Konto" lag aber ausschliesslich auf
/organisation, wodurch root sein eigenes Passwort nicht mehr erreichen
konnte (Route funktionierte weiter, war nur aus der Navigation
verschwunden - live vom Nutzer bemerkt). passwort_aendern() antwortet
jetzt rollenabhaengig (admin/accounts.html statt organisation.html fuer
is_superuser-Konten), neue "Mein Konto"-Sektion auf der Admin-Accounts-
Seite, beide Formulare posten an denselben bestehenden Endpunkt.
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01VLk93dhDMrkPXefVdknMV9