enhancement
major
#29704
tl-archetype-app: Neue Anwendung standardmäßig mit React-Oberfläche erzeugen, klassische Oberfläche per Option
#29729
TL Views: Ein Flussdiagramm (flow-diagram) lässt sich nicht für Mehrfachauswahl konfigurieren
#29781
TL Views: Aktionsketten mit benannten Argumenten – Auslöser liefern mehrere Werte, Skripte verwenden sie als implizite Variablen, Aktionen mit Ergebnis führen Folgeaktionen in <with-result> aus
#29856
React UI: consolidate the access check definitions of views, commands and TL-Script functions
#29860
Konfigurationsformulare: Eingabefelder werden über fachliche Annotationen (@MultiLine, @Code, @Html, @Inline, …) gewählt, in klassischer und React-Oberfläche gleich; @ControlProvider und @ConfigControl entfallen
#29865
Configuration layering: removing a list entry whose key the underlying layers do not (or no longer) define fails the application start
#29877
Developer docs: an article on the persistency configuration of an application (single branch vs. multiple branches, type systems, what changes the schema)
#29880
XIO: Import of an evolving external format: report unknown elements, reject a second composite container with a location, match several values in one <switch> case
#29887
TL Views: Einfügevorschläge für ein Textfeld - per TL-Script berechnete Vorschläge an der Schreibmarke
#29892
view-layer forms: actions that enter and leave edit mode (<enter-edit-mode/>, <leave-edit-mode/>)
#29896
Typed configuration: config:ref addresses an entry of a keyed list by a globally unique key without naming the path to it; a view overlay addresses every element by its id
#29906
Design System wave 5c: calendar, kanban, dashboard and value list read the design system package
#29914
Design System wave 5d: foundation pieces and foreign stylesheets read the design system package; tlReactControls.css is removed
#29941
TL Views: Auswahlfeld, das zusätzlich einen frei eingegebenen Wert annimmt ("auswählen oder neu eingeben")
#29942
TL Views: Erwähnungen im HTML-Editor - Verweise auf Objekte (z.B. Projektmitglieder, Tickets) per @/# einfügen, die zu Links werden
#29947
Steueranwendung: Workspace-Management – leere TopLogic-Anwendung in einem Docker-Container anlegen, starten, stoppen und aufräumen
#29948
Credentials für externe Dienste ohne Geheimnisse in der Konfiguration: Secret-Quellen, Token-basierte Authentifizierung (Keycloak/OIDC, Workload Identity, Azure) und API-Gateway
#29953
Steueranwendung: Agenten-Harness im Workspace – Auftrag an Claude Code, Live-Transkript, Übernahme durch einen Menschen, LLM-Zugang über einen Proxy
#29954
KI: Modellkatalog aus der Dienstkonfiguration des LLM-Anbieter-Dienstes herausnehmen und in einer eigenen Ansicht zeigen
#29955
React-UI: Dienstkonfiguration anzeigen, bearbeiten und speichern (mit Kennzeichnung "Neustart erforderlich")
#29956
Anwendungen und Fragment-Module ohne TopLogic-Parent-POM bauen: BOM, Maven-Packaging tl-app/tl-fragment und Feature-Starter
#29974
XML import: <unless-known> cannot import the attributes of a known element without its structure
#29975
XML import: <resolve-existing> loads only the partition of existing objects an ID belongs to; linking checks membership without reading the whole reference
#29976
View layer: <tree-table> offers no <export> (Excel export) although the export writes trees as outlines
#29977
View layer: <tree-table> has no node display (icon, label, CSS class per cell) and no row-class
#29981
View layer: a table column cannot be declared unsortable, so the groups it forms cannot keep the order of their rows
#29989
Javadoc-Verweise und ungenutzte Imports im Maven-Build prüfen, Eclipse meldet fehlerhaftes Javadoc nur noch als Warnung
minor
#29852
TL Views: Mehrwertige Binärwerte als Datei-Chips (oder Werteliste) mit Mehrfach-Upload, Pflichtfeld, Validierung und accept-Filter; <file-list> entfällt
#29872
TL Views: the min/max/step of a number input (slider) are fixed in the configuration and cannot come from a channel or expression
major
#29798
Derived reference reads as empty in the commit check (no user): result filter of AttributeByExpression stays on
#29869
A React view window that lost its SSE connection keeps every later KB revision in memory until its session ends
#29876
KnowledgeBase on H2: deleting objects scans the association tables (the reference indexes start with BRANCH, and H2 seeks an IN list only on the first index column)
#29895
deploy/local applies only to the module in the working directory: a module of a multi-module build cannot be started from the reactor root
#29918
Design System: a panel's toolbar sticks to the title instead of standing at the end of the title bar
#29920
TL Views: Die Zeilenauswahl in einer React-Tabelle braucht bis zu einer Sekunde, weil jede Auswahl alle Zellen neu überträgt und bei einer Tabelle mit Eingabekanal alle Zellen neu erzeugt
#29922
Composition-Tabelle in einem Formular bekommt keine Höhe, ein Dialog kann nicht mehr bis zur Tabelle scrollen
#29923
React-Oberfläche: Inhalt eines Navigationseintrags mit route="none" erzeugt URLs, die sich nicht öffnen lassen
#29932
Gruppen und Adressen sind für Superuser nicht lesbar: tl.accounts:Group und tl.accounts:Address haben keine Rollenquelle
#29933
React-UI: Der Griff eines Split-Panels "läuft weg" beim Ziehen mit der Maus; tiefe Baumknoten brechen um statt waagerecht zu rollen
#29934
View-Designer: Zur Laufzeit geöffnete Sichten (Rahmen eines tile-stack, navigate-push, open-dialog) fehlen im Entwurfsbaum und lassen sich nicht per "Sicht auswählen" anwählen
#29964
React UI: password login sometimes logs out immediately - a command of the replaced window triggers the stale-UI reload of the old window URL
#29970
React-Bridge: Ein Sprung, der seine Zielseite erst erzeugt, malt sie ohne die gesetzte Auswahl
#29971
React-Views: Die Ausführbarkeit eines Befehls übersieht einen Commit eines fremden Threads während des Seitenaufbaus
#29978
View layer: <tree-table> does not reveal a selected object under a collapsed node and misses changes while hidden
#29979
Migration: migrations of an application module without a stored version never run, the auto model upgrade runs instead
#29980
Migration: update-class with a new-name in another module does not move the class's associations
#29983
View layer: a tab strip wider than its container neither scrolls nor wraps nor collapses into a menu
#29990
React-UI: Panels und bedingte Inhalte nehmen in Split-Flächen, Tabs und Stacks die falsche Höhe
#30001
Entwicklungsmodus: neu geschriebene WEB-INF-Dateien sind über den FileManager erst verzögert sichtbar (Theme-Import zeigt keine Variablen, ThemeEditor_Ticket-24158_Import-export scheitert sporadisch)
#30005
React-Oberfläche: Ein Einstiegspunkt verliert beim Laden seine View-Datei aus der URL, F5 zeigt die Default-View (Regression #29957)
#30013
TL Views: Auswahlfelder bieten später angelegte Objekte ihres Typs erst nach neuer Anmeldung an
#30014
React-Formulare: Sichtbarkeit beim Anlegen (create-visibility) eines Attributs wird nicht berücksichtigt
#30015
React-Oberfläche: Anlegen in einem Container wird nicht geprüft, solange der Container-Kanal leer ist
#30016
Aufzählungswerte (Klassifikatoren) sind für Benutzer ohne Administratorrechte nicht entdeckbar: Ein Aufzählungs-Attribut kann nicht gesetzt werden
#30019
TABLE.debounce() verwendet globalen Singleton-Timer — Slice-Nachladen schlägt bei mehreren Tabellen fehl
#30024
React-Oberfläche: NullPointerException in ModelAccessPolicy.isGrantable, wenn ein Zugriffs-Parent seine Parent-Typen nicht statisch kennt
#30026
Instabiler Test: TestQueueReporter#testGetReport schlägt fehl, wenn zwei Builds auf demselben Knoten gleichzeitig laufen oder der Rechner ausgelastet ist
minor
#29868
KBChangeAnalzyer logs "There is a part id ... but no item for update" for every update of a part of a monomorphic inline-set storage
#29883
A boolean attribute without a value reads as false on a persistent object, as null on a transient one
#29894
Commit einer geänderten Annotation loggt ERROR mit Stacktrace, wenn der alte Wert eines abgeleiteten Attributs (z.B. options) nicht mehr instanziierbar ist
#29935
Popup-Fenster (Skript-Rekorder, Dokumentation) lässt sich nach dem Schließen nicht sofort wieder öffnen (Edge/Chromium): Fehler "Cannot read properties of null (reading 'services')"
#29959
Persönliche Einstellungen werden nicht gespeichert, wenn der Benutzer eine verletzte Modell-Bedingung hat (z. B. root ohne Kontaktdaten)
enhancement
(Nutzer-sichtbar)
major
#29955
React-UI: Dienstkonfiguration anzeigen, bearbeiten und speichern (mit Kennzeichnung "Neustart erforderlich")
Kontext
In der React-Oberfläche gibt es unter Administration → System → Dienste bisher nur eine Dienstverwaltung zum Starten, Stoppen und Neustarten. Die klassische Oberfläche bietet zusätzlich einen Editor für die Dienstkonfiguration. Mit diesem Ticket erreicht die React-Oberfläche denselben Funktionsumfang und ordnet die Dienste zusätzlich fachlichen Kategorien zu.
Verhalten
- Die Diensttabelle zeigt Dienst, Status, Modul (das Softwaremodul, das den Dienst mitbringt) und Implementierung. Sie ist anfangs nach Kategorie gruppiert; der Gruppenkopf nennt die Kategorie in der Spalte "Dienst", ein Tooltip erklärt, was in die Kategorie gehört. Die Spalte "Kategorie" selbst ist ausgeblendet und kann über die Spaltenauswahl eingeblendet werden. Ein Suchfeld durchsucht alle angezeigten Spalten. "Aktualisieren" liest Dienste und Status neu ein.
- Kategorien: Laufzeit & Konfiguration, Modell, Persistenz, Anmeldung & Benutzer, Zugriffsrechte, Skripting & Suche, Internationalisierung & Formate, Benutzeroberfläche, Schnittstellen, Betrieb & Überwachung, Entwicklungswerkzeuge, KI; Dienste ohne Zuordnung erscheinen unter "Sonstige". Alle Dienste der Engine sind zugeordnet.
- Stoppen und Neustart fragen nach, wenn andere Dienste von dem gewählten abhängen, und listen diese auf, da sie mit gestoppt bzw. neu gestartet werden (wie in der klassischen Oberfläche). Ohne abhängige Dienste wird das Kommando direkt ausgeführt.
- Die Aktivierung eines Dienstes (Doppelklick oder Pfeil-Schaltfläche der Zeile) öffnet eine Detailansicht, die die Tabelle ersetzt (Drill-down mit Breadcrumb "Dienste › <Dienst>" in der Kopfleiste und Adresse .../service/<Implementierungsklasse>), statt sie wie in der klassischen Oberfläche daneben anzuzeigen.
- Die Detailansicht zeigt die Konfiguration des Dienstes schreibgeschützt an. Über "Bearbeiten" wird sie editierbar, "Speichern" prüft die Konfiguration, legt sie als In-App-Konfiguration (autoconf) ab und lädt die Anwendungskonfiguration neu; "Abbrechen" verwirft die Änderungen. Dienste ohne einstellbare Eigenschaften zeigen "Dieser Dienst hat keine einstellbaren Eigenschaften."; Dienste mit @InApp(false) werden nur angezeigt.
- Solange die gespeicherte Konfiguration inhaltlich von der abweicht, mit der der Dienst gestartet wurde, ist er als "Neustart erforderlich" gekennzeichnet – in der Statusspalte ("Läuft – Neustart erforderlich") und als Warnhinweis in der Detailansicht. "Neustart" übernimmt die gespeicherte Konfiguration. Wer die ursprünglichen Werte wieder speichert, bekommt keine Kennzeichnung.
- "Änderungen verwerfen" (im Warnhinweis, nach Rückfrage) stellt den Stand beim Start des Dienstes wieder her; ein Neustart ist nicht nötig.
- "In-App-Konfiguration entfernen" (nur sichtbar, wenn eine In-App-Konfiguration existiert, nach Rückfrage) löscht sie; danach gilt wieder die Konfiguration aus den Konfigurationsdateien der Anwendung.
- Wer die Detailansicht mit ungespeicherten Änderungen verlässt, wird gefragt (Abbrechen / Verwerfen / Speichern).
Technische Hinweise
- Dienstkategorien: Marker-Interfaces, die com.top_logic.basic.module.ServiceCategory erweitern (vordefinierte in com.top_logic.basic.module.category, AICategory in tl-ai-tool-api); ein Dienst deklariert seine mit @ServiceCategory.Of(...) (vererbt), die Reihenfolge mit @ServiceCategory.Order. Die Beschriftung ist das Klassen-Label (TLDoclet erzeugt Label und Tooltip für jeden ServiceCategory-Subtyp). Anwendungen können eigene Kategorien definieren; Artikel service-categories.
- BasicRuntimeModule hält eine ConfigurationBaseline: vor der ersten Änderung der gespeicherten Konfiguration seit dem Start werden der Stand der autoconf-Datei und die wirksame Konfiguration festgehalten (InAppServiceConfigBaseline); ein erfolgreicher Start verwirft die Baseline. isConfigurationChanged() vergleicht die wirksame Konfiguration inhaltlich (ConfigEquality).
- TLServiceUtils (com.top_logic) bietet Laden, Prüfen, Speichern, Entfernen und Verwerfen (discardConfigurationChanges) einer Dienstkonfiguration; die klassischen Command-Handler und Regeln verwenden diese Methoden ebenfalls.
- SoftwareModule (com.top_logic.basic): ermittelt zu einer Klasse das Softwaremodul aus ihrer Herkunft.
- <config-form>: Aktionsketten <save-action> / <cancel-action>, <edit-executability>, Teilnahme an der Rückfrage bei ungespeicherten Änderungen (ConfigFormStateHandler); Speichern ist gesperrt, solange ein Feld einen Fehler zeigt. ConfigEditorControl.hasDisplayedProperty sagt, ob eine Konfiguration angezeigte Eigenschaften hat.
- <table>-Spalten: <tooltip>-Skript pro Zelle und Gruppenkopf.
- <tile-stack>: <bindings> teilt Kanäle der umgebenden Sicht mit allen Frames.
- Die Diensttabelle ist ein gewöhnliches <table> mit berechneten Spalten über die TL-Script-Funktionen service... (u. a. serviceDependents für die Rückfrage); ServiceConfigurationAction (SAVE / RESET / DISCARD).
- Sichten: admin/system/services.view.xml (Stack), services/overview.view.xml, services/service-detail.view.xml.