enhancement
major
#29993
Konfiguration: Jede konfigurierte Funktion wahlweise in Java oder TL-Script implementierbar, mit derselben Konfigurationssyntax (auch im React-Konfigurationseditor)
#30000
Design-System-UI-Durchlauf, Teil 1: ein Auswahlformular; „surface-interactive-selected“ wird zu „surface-interactive-strong“
#30006
Engine-Erweiterungen für die Steueranwendung: beschreibbarer Geheimnisspeicher in der Datenbank, Kontextpfad der Anwendung im Entwicklungsmodus (tl.contextPath) und Instanzsuche nach Attributwert
#30025
React-Oberfläche: Befehle und Einheiten ausblenden, für die der angemeldete Benutzer auf keinem Objekt die nötige Rolle hat
#30031
Datenbank erzwingt keine Eindeutigkeit der Werte von Referenzen ohne Duplikate: eindeutiger Index auf den Link-Tabellen, eigene Link-Tabellen für Bags
#30041
Self-Service-Konten: Einladungen verfallen und ihre Annahme wird protokolliert; Einladungen können in der React-Benutzeroberfläche angenommen und verwaltet werden; lokalisierte E-Mail-Vorlagen
#30045
Ebenen-Slots anzeigen: Bericht über „ <slot-content> “, das „no <slot> “ erreicht, leeres Fallback von „ <slot> “, Slot-Positionen in geteilten Fenstern und in der Seitenleiste
#30053
Agent läuft: Begrenzt die Anzahl paralleler Tool-Aufrufe (AgentLoop.TOOL_WORKERS) und teilt einem Benutzer mit, dessen Chat-Nachricht auf einen freien Worker wartet
#30054
Screenshots von Agenten gehören zu ihrem Chat: Sie werden zusammen mit diesem gelöscht und im Chat als Miniaturansichten angezeigt.
#30057
Verwaltung der React-Benutzeroberfläche: Scheduler (Aufgabenliste, Jetzt ausführen, Stoppen, Aktivieren/Deaktivieren, Cluster-Sperre, Ausführungsverlauf) mit einem einheitlichen Schalter zum Aktivieren/Deaktivieren pro Aufgabe
#30058
Verwaltung der React-Benutzeroberfläche: Speicherverlaufsdiagramm (Speicherauslastung im Zeitverlauf einschließlich Garbage Collection) und die übrigen Überwachungsansichten der klassischen Benutzeroberfläche
#30059
Verwaltung der React-Benutzeroberfläche: Wartungsfunktionen der klassischen Wartungsseiten (Datenbank-Export/Import/Verlaufskomprimierung, SQL-Konsole, Neuladen, Suchindex, Sicherheitsspeicher, Verschlüsselung)
#30062
Modell-Editor der React-Benutzeroberfläche: Instanz-Browser und Instanz-Import des ausgewählten Typs
#30063
Verwaltung der React-Benutzeroberfläche: Personen (Kontakte mit optionaler Anmeldung) in einem Formular
#30064
Verwaltung der React-Benutzeroberfläche: Anmeldemeldungen (Meldungen, die bei der Anmeldung angezeigt werden, mit Angabe ihrer Gültigkeitsdauer)
#30065
React-Oberfläche: Workflow-Administration mit BPMN-Editor, Schrittansichten aus dem View-Designer und Aufgabenbearbeitung (BPE)
#30066
React-Administration: Wirksame Rechte eines Kontos auf einem Objekt anzeigen und erklären (Rolleninspektor)
#30074
React-Oberfläche: Anmeldung mit Passkeys (WebAuthn) - passwortlos oder als zweiter Faktor neben TOTP, Verwaltung der eigenen Passkeys in den Einstellungen
#30075
Protokollansicht (React-UI): Details eines Eintrags (Stacktrace) in einem Dialog lesbar anzeigen
#30076
React-Oberfläche: Passwortänderung mit Bestätigungsmeldung und Prüfung vor der Identitätsabfrage; Schutz gegen Durchprobieren von Passwörtern und Einmalcodes
#30081
TL Views: Authenticator-App wechseln (neues TOTP-Geheimnis), Zwei-Faktor-Authentifizierung durch Administrator zurücksetzen
#30086
XML-Import: Die Datei „ <update> “ unter <unless-known> muss die Struktur der untergeordneten Elemente, die sie aktualisiert, wiedergeben.
#30088
Ebene anzeigen: Dokumentieren Sie, wie eine „ChannelSource“ einen Monitor am Laufen hält, während dessen Ansicht ausgeblendet ist, und ihn mit dem Fenster beendet.
#30097
JavaScript-Bibliotheken (umljs, ace, require.js, bpmn-js) im Maven-Build erzeugen statt einzuchecken, bpmn-js auf 18 aktualisieren
#30098
Designsystem als Engine-Modul: Erstellung durch Maven anstelle einer eingecheckten Kopie mit Seals
#30104
Nächtliche Vorschau-Versionen der Engine mit fester Maven-Version und Änderungsliste statt eines wandernden SNAPSHOT
#30108
pac4j-Anmeldung: Die Konto-Zuordnung erhält die ganze Identität des Identity-Providers (Subject, Claims) statt nur eines Login-Namens
#30120
Ebene anzeigen: Optionen eines Zeichenfolgenattributs dürfen keine Anzeigebezeichnungen enthalten
#30126
tl-chat: Chat-Aktionen laufen als React-Commands des Fensters statt über einen eigenen ChatServlet; der Proxy-Workaround des Chats entfällt zugunsten des Pollings der Engine
#30131
Ebene anzeigen: Den Fallback von „AttributeWithFallbackStorage“ als Platzhalter für ein Formularfeld anzeigen
#30132
Ebene anzeigen: Die Wert-Listener des Modells (<value-listeners>) reagieren über einen UI-unabhängigen Listener-Vertrag auf Feldänderungen im React-Formular.
#30148
RecollateStringColumnsProcessor: ANALYZE nach dem Umstellen der Collation ausführen (PostgreSQL)
#30149
Einem Chat-Agenten soll es ermöglicht werden, Seitenbefehle auszuführen, die auf der Chat-Seite zulässig sind, z. B. einen Dialog zu öffnen
#30150
Stellen Sie einen Anbieter mit aufgezeichneten Musterantworten für die Agentenprüfungen der Bewerbungen bereit
#30151
React-View-Schicht: Befehle ohne HandlerResult - View-Befehle melden Fehler als Exception, React-Befehlshandler liefern ihre Antwort als msgbuf-Nachricht
#30157
React-Oberfläche: Bilder im HTML-Editor einfügen per Strg+V und Drag&Drop, Größe mit Anfassern ändern, nie breiter als der Inhalt
#30158
TL-Chat: Einem Chat-Agenten ermöglichen, die Eingabe eines von ihm ausgeführten Seitenbefehls weiterzugeben
#30160
Albert in eine Anwendung integrieren: fertige React-Chat-Seite, Anleitung und Standardwerte für Archetypen
#30163
SQLFactory: Spaltenänderungen (modifyColumnName/Type/Mandatory) nur mit vollständiger Spaltendefinition erzeugen
#30167
Datenbank-Defaults für Spalten entfernen: Pflichtspalten per „anlegen, füllen, Pflicht setzen“ hinzufügen
#30179
Eine Anwendung, die mit „useSSO=true“ erstellt wurde, bietet die generische OpenID-Anmeldung an, die über die Umgebungsvariablen „tl_pac_*“ aktiviert wird – auch auf dem Entwicklungsserver.
#30190
Entfernen Sie die Steuerungsanwendung „tl-factory“ aus der Engine; sie wird in einem eigenen Repository entwickelt.
#30200
Agent-Zugriff und Aufzeichnung: Kommandos arbeiten auf stabilen Objekt-IDs, fachliche Schlüssel nur für Aufzeichnung und Wiedergabe
#30223
Self-Service-E-Mails: Texte in der Servicekonfiguration bearbeitbar, Sprache der Einladung wählbar
#30225
Modell: Handler, die für ein Attribut (Änderung) oder einen Typ (Erstellung, Löschung) deklariert sind, werden innerhalb des Commit ausgeführt
#30250
TL-Ansichten: <start-job> / <job-status> – Schließen-Schaltfläche für einen abgeschlossenen Job, „Point of No Return“, Teilergebnis eines abgebrochenen Jobs, Schließen des Dialogs aus dem Folgejob heraus, der Folgejob sieht die Commits des Jobs
#30253
tl-ai-core bindet die Playwright-Browser (Driver-Bundle, 200 MB) in jede Anwendung ein: Die Browser-Tools werden in das optionale Modul tl-ai-browser ausgelagert.
#30266
React-Konfigurationseditor: Mehrzeilige Texte (HTML, Markdown, Code, mehrzeilig) nutzen standardmäßig die ganze Zeile
minor
defect
critical
#30146
Datenmigration ist beim gleichzeitigen Start mehrerer Cluster-Knoten nicht gegen parallele Ausführung geschützt
#30196
Abbrechen eines Hintergrundjobs (TL Views <start-job>, Scheduler-Task, JMS-Consumer) unterbricht den Thread mitten im Datenbankzugriff und schließt eine eingebettete H2-Datenbank (MVStore panic, Anwendung unbenutzbar)
major
#29847
Der Skript-Test „TestTransactionMonitor-01_RevertRevision“ schlägt fehl, wenn eine geplante Aufgabe gleichzeitig eine Transaktion abschließt.
#30043
TL Views: Ein Wert, den der Server festlegt, während der React-Rich-Text-Editor den Fokus hat, wird nie übernommen; der Editor behält seinen Text nach dem Absenden bei.
#30067
React-Oberfläche: Anmeldung in einem Browser-Tab meldet sofort wieder ab, wenn ein zweiter Tab der Anwendung offen ist
#30077
TL Views: Wizard - ein erneut betretener Auto-Weiter-Schritt ohne eigene Navigation lässt den Benutzer ohne Weg zurück in den Ablauf
#30078
React-Oberfläche: Beim Einrichten der Zwei-Faktor-Authentifizierung wird der Schlüssel für die manuelle Eingabe nicht angezeigt, nur der QR-Code
#30082
React-Oberfläche: Reiter eines Dialogs verändern die Adresse der Seite und bleiben nach dem Schließen in der URL stehen
#30090
Scheduler: Ein beim Start fälliger Task wird beim Herunterfahren abgehängt, während er noch läuft (NullPointerException in TaskImpl.getLog())
#30099
Scheduler-Tests: testStartTaskImmediately / testPeriodically laufen seit der Überarbeitung des Schedulers zeitweise in einen Timeout
#30103
tl-maven-plugin: Schlägt das Zusammenführen der View-Overlays beim Bau einer Anwendung fehl, bleibt das Build grün
#30106
tl-chat: Befehle im Kopf einer data-list zeigen ihren Zustand nicht (ausgeblendet, deaktiviert mit Grund); ein Klick auf einen gesperrten Befehl bleibt stumm
#30107
tl-maven-plugin: Schlägt das Erzeugen eines Layouts beim Bau einer Anwendung fehl, bleibt das Build grün
#30109
tl-chat: Nach der Anmeldung im selben Browser-Fenster bleibt der Chat bei „Melde dich an, um den Chat zu nutzen“
#30118
Passkeys je Anwendung entweder zum Anmelden ohne Passwort oder als zweiter Faktor, nicht beides zugleich
#30123
Scheduler meldet fälschlich „There is no thread to remove“, wenn der Start eines Tasks scheitert
#30124
OpenAPI-Server: Fehlermeldung eines gescheiterten Skripts ist unlesbar und wird außerhalb des Interaction-Contexts erzeugt
#30125
Agent-Zugriff: /agent-api antwortet auf eine Anfrage ohne gültige Anmeldedaten mit einer Weiterleitung zur Anmeldeseite statt mit einem 401-Fehler.
#30127
Eine Anwendung im Server-Stammverzeichnis behält ihre Sitzung bei: Das Sitzungs-Cookie wird an alle ihre Pfade gesendet, und die React-Seite zeigt ihr Symbol an.
#30128
Ein Aufruf ohne Anmeldedaten des Anbieters führt zu einem Authentifizierungsfehler, und der HTTP-Code 402 bedeutet bei jedem Anbieter einen Abrechnungsfehler.
#30133
Ebene anzeigen: Ein Feld, das aufgrund der dynamischen Sichtbarkeit als Pflichtfeld gekennzeichnet ist, verliert bei einer Validierungsänderung die Markierung „erforderlich“.
#30143
TL Chat: Während ein Agent mehrere Schritte ausführt, bleibt sein letzter Text sichtbar und die Laufzeile nennt den aktuellen Schritt, statt nur "…" und "Arbeitet …" zu zeigen
#30144
In einer Anwendung mit modellbasierter Sicherheit sind Chat-Sitzungen für ihren Eigentümer nicht sichtbar.
#30147
React-Oberfläche: Menü "Weitere Aktionen" schließt nicht mit Escape, wenn alle Einträge deaktiviert sind
#30159
Script-Recorder der React-Oberfläche: Aufnahmen von Baum, Mehrfachauswahl und Dropdown-Assertions lassen sich in einer anderen Sitzung wiederholen
#30164
TL-Chat: Ein Lauf, der mit einer Ausnahme fehlschlägt, hinterlässt keinen Fehler im Chat; er verschwindet nach einem Neuladen.
#30165
React: Ein Befehl mit „ignoreStaleUi“ an ein Steuerelement, das nicht mehr auf dem Bildschirm angezeigt wird, schlägt weiterhin mit dem Fehler 404 „Steuerelement nicht gefunden“ fehl.
#30166
TL-Chat: „runPageCommand“ gibt dem Modell die Ablehnung eines Seitenbefehls auf Englisch statt in der Sprache des Benutzers zurück.
#30173
Die OIDC-Anmeldeschaltfläche wird angezeigt, obwohl der Client weder über eine Discovery-URI noch über Anbieter-Metadaten verfügt.
#30177
Der Entwicklungsserver ignoriert X-Forwarded-*-Header, sodass eine relative Callback-URL hinter einem Proxy den falschen Ursprung angibt.
#30201
Veto gegen die Modellbeschränkungen einlegen: Bei einem fehlgeschlagenen Auftrag (und dessen Protokoll) wird lediglich „Kann nicht gespeichert werden, Beschränkungen verletzt“ angezeigt, ohne dass die Probleme aufgeführt werden.
#30216
Hintergrundarbeit scheitert mit „Session revision invalid", wenn das Fenster währenddessen speichert (Jobs, KI-Läufe)
#30251
tl-ai-core, Anthropic-Anbieter: Claude 5.5-Modelle fehlen im mitgelieferten Modellkatalog, und claude-haiku-5-5 hat ein „Thinking Budget“ zurückgegeben (HTTP 400)
#30252
tl-ai-mcp-server: „tools/list“ wird nicht anhand der Zugriffsrechte des Aufrufers gefiltert, und „/mcp/“ mit einem abschließenden Schrägstrich liefert den Status 404.
minor
#29961
React-Anwendungen enthalten Module der klassischen Oberfläche (Self-Service, WYSIWYG-Editor, Code-Editor, Suche, Monitoring, KI-Administration)
#30044
TL-Ansichten: Ein Seitenleisten-Trennzeichen bleibt sichtbar, wenn alle darauf folgenden Elemente ausgeblendet sind; in der anonymen Sitzung wird das System-Trennzeichen angezeigt, unter dem sich nichts befindet.
#30085
Vorgabewerte <country value="..."/> und <time-zone value="..."/> (CountryDefaultProvider, TimeZoneDefaultProvider) nicht nutzbar
#30089
TL-Script-Funktionen `binarySize()` und `modelHealthReset()` liefern Ganzzahl statt Double und protokollieren bei jedem Aufruf einen Fehler
#30134
Ebene anzeigen: „ <composition-table> “ ignoriert die Sichtbarkeit (dynamic-visibility, hidden, read-only) seines zusammengesetzten Attributs.
#30140
TL Views: „TestViewsLoad“ erkennt keine undefinierte Variable im Wert-Ausdruck einer berechneten Spalte
#30142
CommaSeparatedStringSet: Nicht-deterministische Serialisierung erzeugt doppelte key-attributes in Schema-Baseline
#30181
Flow-Diagram (Gantt): Diagramm wird immer komplett eingepasst – kein vertikales Scrollen, unlesbar bei vielen Zeilen
#30185
Flow-Diagram (Gantt): Beschriftung von LineDeco (z. B. „Heute“) unter fixierten Kopfzeilen abgeschnitten; Kanten ohne Pfeilspitze
#30191
Die Modulabschaltung führt zu keiner Abschaltung des Moduls, wenn die Klasse seines InContext-Jobs nicht geladen werden kann (die Datenbank bleibt in der JVM des Containers geöffnet).
#30197
React-Tabelle: Datumszelle im In-Place-Edit übernimmt jeden Tastatur-Zwischenstand (z. B. Jahr 0002)
#30198
React-Views: Baumtabelle ({{{<tree-table>}}}) ohne Zeilenbearbeitung ({{{row-edit}}}) – kein Ersatz für das klassische Tree-Grid
#30199
React-Views: Zeilenbearbeitende Tabelle zeigt bei verletztem Constraint nur einen roten Rahmen, keinen Meldungstext
#30204
React-Tabelle: Attributspalte bei mehreren Zeilentypen nur am ersten Typ aufgelöst (Beschriftung, Sortierung, Filter)
#30205
React-Tabelle mit Row-Edit: Spalte auf ein abgeleitetes Attribut ist editierbar, Speichern scheitert
#30211
React: Eingebaute Regeln von delete-object und Co. greifen vor den konfigurierten (visible-if wirkungslos)
#30213
Binärattribut: Abfrage des Inhaltstyps lädt den ganzen Inhalt; BLOB-Spalten in Objekttabellen nur für kleine Werte
#30214
Ebene anzeigen: Tooltips lassen die Zeilenumbrüche ihres Textes weg (.tl-tooltip__body hat „white-space: normal“)
#30256
React-UI: Farbrolle einer Zeile, Zelle oder Anzeige als eigenes Skript (row-role, cell-role, role) statt der wirkungslosen Statusklassen tl-status-*
#30257
React-UI: Befehle eines Fensters aus einer abgelösten Sitzung erzeugen je Befehl zwei WARN-Zeilen
#30258
React-UI: Reiter nur für einen Typ zeigen geht nur über eine Typabweichung in access-control, und die wird als WARN geloggt
#30259
KB: Committable.rollback() wird nach erfolgreichem Datenbank-Commit aufgerufen, wenn das Veröffentlichen der Änderungen oder Caches scheitert
enhancement
major
#30006
Engine-Erweiterungen für die Steueranwendung: beschreibbarer Geheimnisspeicher in der Datenbank, Kontextpfad der Anwendung im Entwicklungsmodus (tl.contextPath) und Instanzsuche nach Attributwert
Kontext
Die Steueranwendung tl-factory (Repository TopLogic/tl-factory) braucht für Mandanten, Git-Verbindungen und die Vorschau-Route drei Erweiterungen der Engine: Zugangsdaten, die Nutzer zur Laufzeit eingeben (z. B. Git-Tokens), müssen verschlüsselt gespeichert werden; eine Anwendung im Entwicklungsmodus muss unter einem frei wählbaren, auch mehrteiligen Kontextpfad laufen; und Objekte müssen sich über einen Attributwert finden lassen, ohne alle Instanzen eines Typs zu lesen.
Verhalten
Beschreibbarer Geheimnisspeicher
- Eine Anwendung kann Geheimnisse zur Laufzeit schreiben, ersetzen und löschen: SecretStoreService.getWritableStore() bzw. SecretStoreService.writableSecretStore() liefern den beschreibbaren Speicher, null, wenn keiner konfiguriert ist.
- Neuer Speicher <database-store/> (DatabaseSecretStore): legt Geheimnisse AES-GCM-verschlüsselt in der unversionierten Tabelle StoredSecret ab. Den Schlüssel liefert das Geheimnis tl_secret_store_key (Attribut key-secret) aus den übrigen Speichern, z. B. aus einer Umgebungsvariable; ohne Schlüssel meldet der Speicher einen Fehler. Manipulierte oder vertauschte Chiffrate werden abgelehnt.
- ChainSecretStore kombiniert mehrere Speicher (Suche der Reihe nach) und bietet den ersten beschreibbaren als Schreibziel an; ein Präfix der Kette wird jedem Namen vorangestellt, auch beim Schreiben.
- Ein konfiguriertes Override hat weiterhin Vorrang vor allen Speichern.
- Artikel credentials/secret-stores.
Kontextpfad im Entwicklungsmodus
- tl-parent-app startet die Anwendung im Entwicklungsmodus unter dem Kontextpfad aus dem Property tl.contextPath (Standard: Artifact-ID). Er darf mehrere Segmente haben, z. B. -Dtl.contextPath=/preview/ws-1/my-app.
- Artikel application-project, Abschnitt „Starting the application in development mode“.
Instanzen nach Attributwert
- AttributeOperations.instancesWithValue(type, attribute, value) liefert die Instanzen eines Typs (einschließlich Untertypen) mit einem Wert eines primitiven Attributs über eine Datenbank-Abfrage (Spalte oder Flex-Attribut), statt alle Instanzen zu lesen. Gefunden werden nur committete Objekte.
Verifikation
- TestDatabaseSecretStore (Lesen über den Service, Ersetzen und Löschen, Klartext nicht gespeichert, manipulierte und vertauschte Chiffrate, fehlender, ungültiger und falscher Schlüssel, Kette mit Präfix, kein beschreibbarer Speicher).
- TestInstancesWithValue (Spalten- und Flex-Attribute, Untertypen, nicht committete Objekte, Ablehnung von Referenzen und null).
- Die Steueranwendung im Repository TopLogic/tl-factory nutzt alle drei Erweiterungen (Git-Tokens im Datenbank-Speicher, Vorschau-Route unter mehrteiligem Kontextpfad, Zuordnung von Workspaces und Mitgliedern); die Funktionen der Steueranwendung selbst sind dort Issue 3.