TopLogic - the automated application engine
  • Releases
  • Dokumentation
  • Github
  • Discord
  1. Home
  2. Releases
  3. TL_8.0.0-alpha12
  4. #29947

8.0.0-alpha12
TopLogic Release

2026-10-30

enhancement

major
#29658
TL Views: Schwebende Hauptaktion (Floating Action Button) und Aktionsfächer (Speed Dial)
#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
#29875
Design System wave 5a: color input, icon select and slider read the design system package
#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
#29888
view-layer forms: normalize an entered value before it is stored
#29892
view-layer forms: actions that enter and leave edit mode (<enter-edit-mode/>, <leave-edit-mode/>)
#29893
Model upgrade log does not mention a reference whose target type changed
#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
#29904
Design System wave 5b: media controls read the design system package
#29905
Switch tl-engine to Java 21
#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
#29917
Rollenprofil-Import: implizite Leserechte der umgebenden Sicherheits-Layouts ergänzen
#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
#29944
Konfigurierbare Start-Haken, die nach dem Start aller Services ausgeführt 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
#29957
React-Oberfläche: Browser-Tab-Titel folgt der angezeigten Ansicht
#29963
Development-Menü im React-UI nur für angemeldete Benutzer anzeigen
#29965
tl-ai-core: LLM-Anbieter ohne Anwendungskonfiguration über Umgebungsvariablen aktivieren
#29968
Filterleiste: Presets mit Zähler und eigener CSS-Klasse
#29973
XML import: <set-translation> stores an empty text and needs a bound language
#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
#30012
Translator: erkannte Ausgangssprache bei automatischer Spracherkennung zurückgeben
#30017
Build: Git-Merge-Treiber für die generierten Ressourcendateien, damit parallele Pull-Requests nicht bei jedem neuen Schlüssel in Konflikt geraten
#30051
Initiale Gruppen "user" und "superuser" in der Basis anlegen
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
#29873
TL Views: a time input (ReactDatePickerControl.Kind.TIME) cannot enter or show seconds
#29874
TL Views: a select input always sorts its options by label - no way to keep the order of the option list
#29898
Development start (tl-ide-jetty) provides no Jakarta WebSocket container
#29952
React-View-Schicht: Fenster folgen Commits anderer Threads ohne eigene Konfiguration – ersetzt CommitSource und den Refresh-Teil von AgentViewRefreshService

defect

critical
#29926
Derived attributes computed by a <query> storage evaluate to null for a user without Discover right on the object (regression of #29782 in 8.0.0-alpha11)
#29994
Build: master verletzt den JavaDoc- und Import-Check von #29989 (tl-chat, tl-ai-core, tl-factory)
major
#29742
Konfigurierte Defaults (<defaults>) wirken nicht innerhalb der Anwendungskonfiguration
#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)
#29886
view-layer <confirm>: line breaks of the message are collapsed
#29889
Adding one element to a set reference reads the whole set (quadratic set building)
#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
#29908
React-Tabelle zeigt nach dem Neuladen der Seite in den oberen Zeilen keinen Inhalt
#29916
Rollenprofile: Leserecht eines Dialogs wird auf die öffnende Komponente übertragen
#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
#29925
TestGenerateJavaIntegration fails with the split local Maven repository of the CI builds
#29931
invert-link-table makes both ends of a link the destination on MySQL
#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
#29967
React-UI: Spaltenauswahl der Tabelle bietet das Gruppieren nach einer Spalte nicht mehr an
#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
#29991
View layer: split-panel ignores unit="px" of a pane and treats its size as a weight
#29992
React-Modelleditor: Annotation "Eingabekontrolle" bietet keine Umsetzung zur Auswahl an
#29999
React-UI: Tabelle zeigt nicht mehr an, welche Spalten gefiltert sind
#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)
#30002
Service-Editor: Konfiguration aller Services fehlerfrei anzeigen
#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
#30030
Mail-Server-Daemon: neue Mails anhand der IMAP-UID statt des Gelesen-Flags erkennen, unbekannte Mails standardmäßig im Postfach belassen
#30055
TL Views: a table with active-preset and search-term channels renders every filtered row instead of a window; 15k rows load 88 MB and crash the browser tab
minor
#29515
Inkonsistente Drop-Typ Konfiguration für Drop-Operationen möglich
#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)
#29960
React-Oberfläche: Browser-Tab zeigt immer "TopLogic View" statt des Anwendungsnamens
#29969
SecurityConfiguration: Crash durch DeletedObjectAccess
#29972
composition-table im Bearbeitungsmodus: die Lösch-Spalte bekommt den freien Platz statt der letzten Datenspalte
#30056
TL Views: NullPointerException in ReactControl.commitUpdate from the session-timeout notice countdown ("Failed to announce the activity of session")

task

major
#29767
Clean up loose design documents (docs/, specs/, module doc folders): valid content into the developer documentation, open work into tickets
#29924
Integrate the tl-ai repository into tl-engine: its modules become engine modules
#30037
Name the base type of polymorphic configuration properties as wildcard bound (PolymorphicConfiguration<? extends X>) and check the rule in the build
minor
#29921
Renovate hinterlässt in npm-Lock-Dateien verwaiste Einträge, die der nächste Maven-Build wieder entfernt

update

critical
#29949
Update dependency dompurify to ^3.4.17 [SECURITY]
#29950
Update dependency vite to ^6.4.4 [SECURITY]
#29984
Update dependency serialize-javascript to ^7.1.3 [SECURITY]
#30008
Update dependency com.google.guava:guava to v33 [SECURITY]
enhancement

major

#29947

Steueranwendung: Workspace-Management – leere TopLogic-Anwendung in einem Docker-Container anlegen, starten, stoppen und aufräumen

AgenticTLFactory

Kontext

Erster Schritt der Steueranwendung aus #29946, in der ein KI-Agent TopLogic-Anwendungen baut. Gebaut wird hier die Grundlage aller weiteren Schritte: Jede verwaltete Anwendung bekommt einen Workspace in einem eigenen Docker-Container. Die Steueranwendung verwaltet den Lebenszyklus dieses Containers.

Definition of Done: In der Steueranwendung kann ein Anwender eine leere TopLogic-Anwendung anlegen, starten, stoppen und aufräumen. Die gestartete Anwendung ist über einen Vorschau-Link im Browser erreichbar.

Verhalten

Projekt anlegen

  • Der Anwender legt ein Projekt an mit Name, Maven-Koordinaten (Group-ID, Artifact-ID) und Engine-Version. Die Engine-Version ist ein stabiles Release.
  • Die Steueranwendung erzeugt den Workspace-Container mit seinen Volumes. Im Container erzeugt sie aus tl-archetype-app eine leere Anwendung in der gewählten Engine-Version und baut sie.
  • Der Fortschritt und die Ausgabe des Anlegens und des Builds sind in der Steueranwendung sichtbar. Ein Fehler setzt den Workspace in einen Fehlerzustand und zeigt die Ausgabe an.

Starten

  • Die Anwendung im Container läuft auf dem festen Port 8080.
  • Beim Start des Containers bildet die Steueranwendung den Port auf einen freien Host-Port ab und merkt ihn sich am Workspace.
  • Die Steueranwendung zeigt den Vorschau-Link an, sobald die Anwendung antwortet.

Stoppen

  • Die Anwendung und der Container werden angehalten.
  • Die Volumes mit Quellen, Workspace-Repository und Datenbank bleiben erhalten. Ein erneuter Start setzt auf diesem Stand auf.

Aufräumen

  • Container und Volumes des Workspaces werden entfernt.
  • Das Projekt bleibt erhalten und kann einen neuen Workspace anlegen.
  • Die Steueranwendung räumt nur Container und Volumes auf, die sie selbst angelegt hat. Sie erkennt sie an Labels.

Zustand

  • Ein Workspace hat einen sichtbaren Status: angelegt, wird gebaut, gestoppt, läuft, Fehler.
  • Nach einem Neustart der Steueranwendung gleicht sie den Status mit den tatsächlich vorhandenen Containern ab.

Technische Umsetzung

  • Neues Engine-Modul der Steueranwendung, Name noch festzulegen. Die Oberfläche entsteht in der React-View-Schicht (.view.xml).
  • Modell: Project (Name, Maven-Koordinaten, Engine-Version) und Workspace (Container-ID, Status, Host-Port, Volumes).
  • Abstraktion WorkspaceProvider für Anlegen, Starten, Stoppen, Entfernen, Status und Ausgabe-Stream. Erste Implementierung: Docker auf dem Host der Steueranwendung über die Docker-Engine-API. Den Zugriff auf Docker hat nur die Steueranwendung, kein Workspace-Container erhält den Docker-Socket.
  • Workspace-Image mit JDK 21, Maven und Node. Harness und Browser kommen mit den Folgeschritten hinzu.
  • Maven:
    • Das Workspace-Repository für Snapshots liegt in einem Volume des Workspaces.
    • Die Engine-Artefakte der gewählten Version löst ein eigener Resolver-Container einmal auf (mvn tl:resolve) und legt sie in einem gemeinsamen Volume ab. Die Workspace-Container binden dieses Volume nur lesend als Tail-Repository ein (maven.repo.local.tail).
  • Docker-spezifische Werte wie Image, Netzwerk, Port-Bereich und Volume-Präfix sind in der Konfiguration des Providers festgelegt.

Abgrenzung

  • Agenten-Harness im Container, Git-Repository und CI/CD gehören zu den Folgeschritten von #29946.
  • Ressourcen-Limits und mehrere Workspaces je Projekt folgen in Version 2.

Verifikation

  • Ein Integrationstest des Docker-Providers durchläuft Anlegen, Starten, Stoppen und Aufräumen. Ohne erreichbaren Docker-Daemon wird er übersprungen.
  • Eine UI-Prüfung in der laufenden Steueranwendung: Projekt anlegen, starten, Vorschau-Link öffnen (Login-Seite der leeren Anwendung), stoppen, aufräumen.

Umsetzung

Module

  • tl-factory (Fragment): Workspace-Abstraktion, Docker-Implementierung, Modell tl.factory (Project, Workspace), Hintergrund-Operationen, Abgleich beim Start und die Views. Andere Anwendungen können die Steueranwendung damit einbinden.
  • tl-factory-app: lauffähige Steueranwendung (React-View-Schicht, Login root).
  • Entwicklerartikel factory/index.md mit Konfiguration und Betriebsarten.

Workspace-Abstraktion

  • WorkspaceProvider (plattformneutral): Images bauen und laden, Workspaces anlegen, starten, stoppen, entfernen, Status, Liste, Aufräumen, Kommandos im Container ausführen, gemeinsame Volumes.
  • DockerWorkspaceProvider über die Docker-Engine-API (docker-java). Konfigurierbar sind Daemon-URI (unix:// oder tcp:// mit TLS), Netzwerk, öffentlicher Host für Vorschau-Links, Host-Port-Bereich, Label-Namensraum und Namenspräfix.
  • Eigentum wird ausschließlich über Labels erkannt, nie über Namen. Fremde Container und Volumes und die Steueranwendung selbst bleiben beim Aufräumen unberührt.
  • Es werden nur benannte Volumes angelegt, keine Bind-Mounts.

Anwendung im Workspace

  • ApplicationWorkspaces erzeugt die Anwendung aus tl-archetype-app, baut sie und startet sie. Die Engine-Version ist konfigurierbar, Standard ist die neueste freigegebene Version.
  • Das Workspace-Image (JDK 21, Maven, Node, git, Maven-Settings für das TopLogic-Release-Repository) wird über die Abstraktion gebaut. Sein Tag ist ein Hash des Build-Kontexts.
  • Je Engine-Version gibt es ein gemeinsames Release-Repository als Volume. Ein Resolver-Container füllt es einmal (tl:resolve), die Workspaces binden es nur lesend als maven.repo.local.tail ein. Das Snapshot-Repository liegt in einem Volume des Workspaces.
  • Ein Entry-Skript startet die Anwendung im Vordergrund auf Port 8080, sobald sie gebaut ist. Container starten und stoppen heißt damit Anwendung starten und stoppen.
  • Jeder Workspace erhält ein zufälliges initiales root-Passwort (tl_initial_password). Es wird in der Detailansicht angezeigt.

Steueranwendung

  • Lange Operationen (Anlegen, Starten bis zur Antwort der Anwendung) laufen im Hintergrund. Ihre Ausgabe wird gebündelt etwa jede Sekunde in das Log des Workspaces geschrieben, der Status in eigenen Transaktionen.
  • Allgemeine Erweiterung der View-Schicht: CommitSource (in com.top_logic.layout.view). Mit dieser Kanalquelle folgen Views Commits anderer Threads innerhalb des Aktualisierungsintervalls des Kanals, z. B. dem Live-Log und dem Status.
  • Beim Start gleicht die Steueranwendung die gespeicherten Workspaces mit den vorhandenen Containern ab. Ist Docker nicht erreichbar, blockiert das den Start nicht.
  • Die Befehle Anlegen, Starten, Stoppen, Aufräumen und Projekt löschen sind je nach Status aktiv.

Betriebsarten

  • Steueranwendung direkt auf dem Docker-Host: Sie greift über den lokalen Socket auf Docker zu.
  • Steueranwendung selbst im Container: Die Workspaces laufen als Geschwister-Container auf demselben Daemon. Der Docker-Zugriff erfolgt über einen Socket-Proxy, der die API einschränkt, oder über einen entfernten Daemon (tcp:// mit TLS). Der Container der Steueranwendung wird mit dem Workspace-Netzwerk verbunden. Der öffentliche Host für die Vorschau-Links wird konfiguriert.

Verifikation

  • TestDockerWorkspaceProvider: Lebenszyklus, Fehlerfälle und fremde Objekte gegen einen echten Docker-Daemon. Ohne Daemon laufen die Tests nicht.
  • TestApplicationWorkspaces: kompletter Ablauf vom Anlegen bis zum Aufräumen inklusive Initialpasswort. Der Test läuft nur mit -Dtl.factory.integration=true, weil er Images und Engine-Artefakte lädt.
  • TestWorkspaceReconciliation: Abgleich gegen einen Test-Provider.
  • UI-Prüfung in tl-factory-app: Projekt anlegen, Live-Log, Vorschau öffnen, Login als root, stoppen, starten, aufräumen, löschen.

Offen für Folgeschritte

  • Kommandos im Container haben keinen Timeout. Nur der Start der Anwendung ist zeitlich begrenzt.
  • Die Container laufen als root.
  • Die eigene Ausgabe der Anwendung (Container-Log) wird in der Steueranwendung nicht angezeigt.
  • Get Started
  • Github
  • Discord
  • Das Unternehmen hinter TopLogic
  • Softwareentwicklung heute
  • Kontakt

© Copyright – Business Operation Systems GmbH

  • top-logic.com
  • Nutzungsbedingungen
  • Impressum
  • Rechtlicher Hinweis
  • Datenschutz
  • EN
  • Login