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

8.0.0-alpha7
TopLogic Release

2026-07-30

enhancement

critical
#29088
Model-based access rights
#29108
Lightweight UI definition layer (TL Views) based on React UI-Components
major
#28694
Beschreibung von Modellteilen als formatierter Text (Rich Text)
#28708
Standard-Selektion in (Baum-)Tabellen und Grids per TL-Script berechenbar machen
#29102
Add com.top_logic.layout.react module for React/SSE integration
#29221
Automatische Bestimmung möglicher Berechtigungskonfigurationen
#29349
XML-Parse-Funktionen für TL-Script über XMLImporter
#29374
TL-Script: gzip()
#29389
Code-Completion für Variablen ($) im TL-Script-Editor
#29396
Conversation display for TL Views: object-list element, file chips, card panels
#29399
Info-Service-Meldungen: unten statt oben anzeigen und beim Überfahren mit der Maus fixieren
#29400
Introduce a first-class application "operation mode" service (OperationMode enum + ApplicationModeService)
minor
#29085
Neu einloggen bei Session Timeout anstatt Redirect zur Login-Seite
#29089
TL-Script-Funktionen log() und info() um wählbaren Meldungs-Level (INFO, WARN, ERROR) erweitern
#29195
Probleme mit HTML-Attributen und TL-Script
#29306
TL Script: dateFormat() should accept an explicit timezone to format Calendar values losslessly
#29382
Expose a public classpath-driven Workspace.getAppPaths overload
#29385
App archetype should scaffold a standard git-ignored local-credentials overlay (tl_config) by default
#29392
Transaktionsabbruch bei Nicht-2xx Response
#29398
Login-Maske: Statt "Name" besser "Benutzername"

defect

major
#29383
Dead SOCKET_APPENDER (Chainsaw, localhost:4445) in default logging config can stall logging and abort operations under load
#29384
TL-Script resetSequence/generateSequenceId build a different sequence id than SequenceDefaultProvider (suffix/context order), so they cannot reset a provider-managed sequence with a dynamic context
#29394
Editable tables in the React UI: generalized row-set bindings for tabular editing in forms
#29410
Attribut filename der Structured-Text-Bildablage case-sensitive (binär) speichern
#29419
Understandable save failures and form validation feedback in the React view layer
minor
#28816
Referenzwertige Attribute erzeugen Fehler nur bei SingleSelection
#29359
Unsinniger Tooltip bei einigen Hauptreitern
#29360
Sporadische Fehlermeldung im Log: "mainLayout" ist null.
#29361
Invalide Datenbankdefinition für Tag
#29363
Fehlende Validierung von Dialogen bei GOTOs zu Dialogen von unsichtbaren Parents
#29380
Kontextabhängige Auto-Nummerierung schlägt fehl, wenn Kontext und nummeriertes Objekt in einer Transaktion erzeugt werden
#29381
Doppelklick in Grafikkomponente funktioniert nicht zuverlässig
#29390
Teilbaum-Auswahl endet zu früh, wenn die unterste Ebene vom Ebenen-Filter nicht mitgezählt wird
#29393
URL-Routing der React-View-Schicht defekt: ForwardingReactContext delegiert getRouteManager() nicht
#29401
Bilder in einem Bild-Drop-Feld können nicht über das Browser-Kontextmenü kopiert/gespeichert werden
#29402
Baum-Selektion geht bei Aktualisierung der Ansicht (invalidate) verloren
#29412
Flaky TestDynamicComponentService.testIncrementalUpdates: asserts on asynchronous WatchService event after a fixed 10ms sleep
#29416
Anzeige des Änderungslogs schlägt fehl, wenn parallel Änderungen committet werden
#29420
FlowDiagram: Fehlerfall im row-wise Sub-Grid: subGridCols=2 und subGridStartCol=1
#29426
FlowDiagram: Text in PDF-eingebettetem Diagramm ist nicht selektierbar

task

major
#29407
Security-Scan: npm-Abhängigkeiten der React-Module aktualisieren
#29408
Security-Scan: httpcore5 anheben; pdfbox-/azure-Findings bewerten
minor
#29415
Slim down the repository CLAUDE.md and consolidate developer guidance into skills and FAQ articles
enhancement

major

#29400

Introduce a first-class application "operation mode" service (OperationMode enum + ApplicationModeService)

Migration

Motivation

There is no first-class notion of "what operational state is this application in" in the engine. The prod/dev distinction is scattered across Environment.isDeployed() (~22 callers) plus independent is-deployed flags in ThemeFactory and FileCompiler, and assorted tl_* system properties; runtime maintenance state lives in MaintenanceWindowManager. Downstream modules that need to ask "what mode are we in?" have no single API and must reconstruct the answer.

Concretely, tl-ai already does exactly this reconstruction, hardcoded in TopLogicSecurityContext.executionMode(), to decide whether an agent tool may run (e.g. STRUCTURAL tools are denied in production). We want a single, engine-owned source of truth these consumers can query.

Scope of this ticket

The **engine service only**. tl-ai is not modified here; the consumer rewire and any modernization of MaintenanceWindowManager are separate follow-up tickets.

Design (decided)

  • New strict enum OperationMode implements ExternallyNamed in a new package com.top_logic.base.operation (module com.top_logic / tl-core), exactly three members: DEVELOPMENT("development"), TEST("test"), PRODUCTION("production").
  • New ApplicationModeService extends ConfiguredManagedClass<Config> in the same package, modelled on TimeRangeService. Public API: getInstance(), OperationMode getMode(), boolean isMaintenanceActive().
  • **Maintenance is a separate axis, folded in** - NOT a member of OperationMode (environment and runtime maintenance are orthogonal; a production install can be in a maintenance window). isMaintenanceActive() delegates (null-safe) to MaintenanceWindowManager; javadoc documents the intended fold for consumers.
  • **Default derivation when mode is unconfigured** (backward compatible): isTesting() -> TEST; else !Environment.isDeployed() -> DEVELOPMENT; else PRODUCTION. An explicit configured mode always wins.
  • **Per-deployment override with no code change**: config mode="%OPERATION_MODE%", alias %OPERATION_MODE% = ${env:tl_operation_mode:} in top-logic.xml; empty falls through to the derivation. Module enabled + configured in top-logic.config.xml (mirror the TimeRangeService entries).
  • The environment axis is **boot-time / static** (must not flip under a running app). Maintenance stays runtime-switchable via the existing manager, untouched.

Consumer contract (follow-up)

This service becomes the single source of truth that tl-ai's TopLogicSecurityContext.executionMode() will consume, replacing its hardcoded MaintenanceWindowManager + Environment.isDeployed() reads. tl-ai currently builds against engine 7.11.0, so a backport may be needed when the consumer side lands.

Open questions / possible follow-ups

  • Whether to add STAGING later (no existing analogue today).
  • Modernize MaintenanceWindowManager's raw int state constants to an enum.
  • Route the scattered Environment.isDeployed() callers and the ThemeFactory/`FileCompiler` is-deployed flags through this service.

Migration

The service was implemented as com.top_logic.base.operation.OperationModeService (getInstance(), getMode()), and the derivation was turned around: the operation mode is the source of truth, and Environment.isDeployed() is derived from it.

Environment.isDeployed() no longer detects a developer workspace from the class-path layout (isJarFile() combined with tl_developerMode). It returns true unless the system property or environment variable tl_operation_mode is set to development. tl_developerMode and Environment.isJarFile() are deprecated and have no effect any more.

Consequence: an IDE or Maven run of an application that does not set the operation mode is treated as a production deployment (deployed theme and script handling, no modular resource path, IDEOnly commands hidden). Production deployments need no change.

  • Replace -Dtl_developerMode=true by -Dtl_operation_mode=development in every Eclipse .launch, .mvn/jvm.config, start script and CI job that runs the application from the workspace. Values: development, test, production (the default; test is derived under the test container). The archetype launch configurations and the engine's own bin/launch/*.launch files were changed accordingly.
  • Optionally set tl_operation_mode=production explicitly in deployment descriptors (the archetype's Dockerfile_template does) for clarity.
  • The Chainsaw socket appender of the default logging configuration is enabled by -Dtl_logReceiver=true instead of developer mode (see #29383).
  • Application code that decided on Environment.isDeployed() should ask OperationModeService.getInstance().getMode() (OperationMode.DEVELOPMENT, TEST, PRODUCTION); the executability rule IDEOnly already does.
  • 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