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
Description of model parts as formatted text (rich text)
#28708
Enable Standard Selection in (Tree) Tables and Grids via TL Script
#29102
Add com.top_logic.layout.react module for React/SSE integration
#29221
Automatic determination of possible authorization configurations
#29349
XML Parsing Functions for TL-Script via XMLImporter
#29374
TL Script: gzip()
#29389
Code Completion for Variables ($) in the TL Script Editor
#29396
Conversation display for TL Views: object list element, file chips, card panels
#29399
Info Service Notifications: Display at the bottom instead of the top, and keep them in place when hovering over them with the mouse
#29400
Introduce a first-class "operation mode" service for applications (OperationMode enum + ApplicationModeService)
minor
#29085
Re-login on session timeout instead of redirect to login page
#29089
Extend the TL Script functions log() and info() to include selectable message levels (INFO, WARN, ERROR)
#29195
Problems with HTML attributes and TL script
#29306
TL Script: dateFormat() should accept an explicit timezone to format Calendar values losslessly
#29382
Expose a public, classpath-driven overload of `Workspace.getAppPaths`
#29385
The app archetype should automatically generate a standard git-ignored local-credentials overlay (tl_config) by default
#29392
Transaction Abort on Non-2xx Response
#29398
Login Form: Use "Username" Instead of "Name"

defect

major
#29383
A dead SOCKET_APPENDER (Chainsaw, localhost:4445) in the default logging configuration can cause logging to stall and operations to abort under heavy load
#29384
The TL-Script functions `resetSequence` and `generateSequenceId` generate a different sequence ID than `SequenceDefaultProvider` (in terms of suffix and 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
Reference value attributes only generate errors with SingleSelection
#29359
Inappropriate tooltips on some main tabs
#29360
Occasional error message in the log: "mainLayout" is null.
#29361
Invalid database definition for tag
#29363
Missing validation of dialogs in GOTO statements to dialogs of invisible parents
#29380
Context-sensitive auto-numbering fails if the context and the numbered object are created within a single transaction
#29381
Double-clicking in a graphic component does not work reliably
#29390
Subtree selection ends too early if the lowest level is not included in the level filter
#29393
URL routing in the React view layer is broken: ForwardingReactContext does not delegate getRouteManager()
#29401
Images in an image drop zone cannot be copied or saved using the browser's context menu
#29402
Tree selection is lost when the view is refreshed (invalidated)
#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 "operation mode" service for applications (OperationMode enum + ApplicationModeService)

Migration

Motivation

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

Specifically, tl-ai already performs exactly this reconstruction—hardcoded in TopLogicSecurityContext.executionMode()—to determine whether an agent tool is allowed to run (e.g., STRUCTURAL tools are blocked in production). We want a single, engine-managed source of truth that 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)

  • A new strict enum, `OperationMode`, implements `ExternallyNamed` in a new package, `com.top_logic.base.operation ` (module `com.top_logic ` / `tl-core`), with exactly three members: `DEVELOPMENT` ("development"), `TEST` ("test"), and `PRODUCTION` ("production").
  • New `ApplicationModeService` extends `ConfiguredManagedClass<Config> ` in the same package, modeled after `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 installation can be within a maintenance window). isMaintenanceActive() delegates (null-safe) to MaintenanceWindowManager; the Javadoc documents the intended folding for consumers.
  • **Default derivation when mode is unconfigured** (backward compatible): isTesting() -> TEST; else !Environment.isDeployed() -> DEVELOPMENT; else PRODUCTION. An explicitly configured mode always takes precedence.
  • **Per-deployment override with no code change**: config mode="%OPERATION_MODE%", alias %OPERATION_MODE% = ${env:tl_operation_mode:} in top-logic.xml; leaving it empty falls back to the derivation. Module enabled and configured in top-logic.config.xml (mirrors the TimeRangeService entries).
  • The environment axis is **boot-time / static** (must not change while the app is running). Maintenance remains switchable at runtime via the existing manager, unchanged.

Consumer contract (follow-up)

This service becomes the single source of truth that tl-ai's TopLogicSecurityContext.executionMode() will consume, replacing its hard-coded calls to MaintenanceWindowManager and Environment.isDeployed(). tl-ai currently builds against engine 7.11.0, so a backport may be needed when the consumer side is implemented.

Open questions / possible follow-ups

  • Whether to add STAGING later (no existing equivalent at this time).
  • 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 reversed: the operation mode is the source of truth, and Environment.isDeployed() is derived from it.

Environment.isDeployed() no longer detects a developer workspace based on the classpath 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 no longer have any effect.

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 require no changes.

  • Replace -Dtl_developerMode=true with -Dtl_operation_mode=development in every Eclipse .launch file, .mvn/jvm.config file, start script, and CI job that runs the application from the workspace. Values: development, test, production (the default; test is used under the test container). The archetype launch configurations and the engine’s own bin/launch/*.launch files have been updated accordingly.
  • Optionally, set ` tl_operation_mode=production ` explicitly in deployment descriptors (as the archetype’s ` Dockerfile_template ` does) for clarity.
  • The Chainsaw socket appender in the default logging configuration is enabled by -Dtl_logReceiver=true instead of developer mode (see #29383).
  • Application code that previously relied on Environment.isDeployed() should now use OperationModeService.getInstance().getMode() (OperationMode.DEVELOPMENT, TEST, PRODUCTION); the IDEOnly executability rule already does this.
  • Get Started
  • Github
  • Discord
  • Das Unternehmen hinter TopLogic
  • Softwareentwicklung heute
  • Kontakt

© Copyright – Business Operation Systems GmbH

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