Releases: kuml-dev/kUML
Releases · kuml-dev/kUML
v0.14.0
v0.13.0
[0.13.0] - 2026-06-17
CI
- Switch to advanced setup with manual build — fix Kotlin daemon crash (codeql)- Add --no-build-cache to force recompilation for CodeQL tracing (codeql)
Documentation
- Update to v0.12.0 — UML/C4 support sections, CLI commands, roadmap, modules (readme)
Other
- Plugin ecosystem (SPI + loader + CLI + signatures + desktop UI + 5 reference plugins) + theme overhaul (nodeFill, Elegant redesign, KumlBrand white canvas) (v0.13.0)
v0.12.0 — Reverse Engineering, Desktop App, AI Assistant, XMI Import/Export
[0.12.0] - 2026-06-16
Bug Fixes
- Add missing vault-examples-tests module files (ci)
Chore
- CHANGELOG entry + version bump 0.11.0 → 0.12.0 (v0.12.0)
Other
- Reverse engineering, desktop app, AI assistant, XMI/EMF import-export (v0.12.0)
v0.11.0
[0.11.0] - 2026-06-15
Bug Fixes
- Disable kuml-asciidoc extension in Antora pipeline (handbook)- Use
url: .for Antora content source (handbook)- Move Antora playbook to repo root (handbook)
Documentation
- Publish to docs.kuml.dev via GitHub Pages (handbook)- Link to kuml.dev website and docs.kuml.dev handbook (readme)
Features
- Add Project block to handbook nav with kuml.dev + GitHub (handbook)
Other
- Squashed commit of the following:
commit aa63f1d65e2ae5a80e67b2ab3d03de00ba803996
Author: Irakli Betchvaia betschwa@web.de
Date: Mon Jun 15 06:53:34 2026 +0200
fix(renderer): SEQ-Fragment-Frame asymmetrisch — Nachbar-Nachrichten nicht mehr verschluckt
Die V3.0.x-Erstiteration hat `FRAGMENT_PADDING` von 8 auf 24 erhöht, um den
horizontalen Atemraum für Guard-Labels zu schaffen. Das war richtig in H,
aber es hat AUCH die vertikale Geometrie geändert: Frame-Top zog sich 24 px
über `(minSeq - 0.5)`-Pfeil-Mittelpunkt hinaus, Frame-Bottom 24 px darunter.
Symptom im Sample "Place Order — API Submit":
- POST /orders (Sequenz 2, direkt vor dem Fragment) saß in der ALT-Box
- confirmation (Sequenz 7, direkt nach dem Fragment) auch
- 400 Bad Request stand zu nah am unteren Rahmenrand und wurde von der
Frame-Linie angeschnitten
Eigentliche Ursache: Die ursprüngliche Symmetrische-Padding-Formel
`(minSeq - 0.5) * ROW - V` / `(maxSeq + 0.5) * ROW + V` war geometrisch
falsch — auch mit V = 8 (vor V3.0.x). Im SysML-2-Test-Sample fiel das nicht
auf, weil dort KEINE Folge-Nachrichten ums Fragment lagen.
**Asymmetrische Geometrie**, weil Nachrichten-Labels 4 px ÜBER der Pfeillinie
sitzen (Baseline) und mit Ascent 11 + Descent 3 ein Label-Hintergrund-Band
von `arrow_y - 15` bis `arrow_y - 1` bilden. Der "freie Korridor" zwischen
zwei Pfeilen ist deshalb NICHT mittig zwischen den Pfeilen, sondern:
prev_label_bottom = arrow_n - 1 (Label-Descent)
next_label_top = arrow_(n+1) - 15 (Label-Ascent)
Korridor-Breite = 18 px
Korridor-Mitte = arrow_n + 8
Für die Frame-Kanten:
- TOP: Mitte des oberen Korridors bei `arrow_minSeq - 24` → `FRAGMENT_TOP_OUTSET = 24`
- BOTTOM: Mitte des unteren Korridors bei `arrow_maxSeq + 8` → `FRAGMENT_BOTTOM_OUTSET = 8`
Beide Konstanten exportiert als private `const val`, neue Formel im UML- und
SysML-2-Renderer:
// UML — Pfeil-Y bei `headBottom + seq * ROW`
frameY = headBottom + minSeq * ROW - FRAGMENT_TOP_OUTSET
frameBottom = headBottom + maxSeq * ROW + FRAGMENT_BOTTOM_OUTSET
// SysML-2 — Pfeil-Y bei `headBottom + (seqNo + 1) * ROW`
frameY = headBottom + (minStartSeqNo + 1) * ROW - FRAGMENT_TOP_OUTSET
frameBottom = headBottom + (maxEndSeqNo + 1) * ROW + FRAGMENT_BOTTOM_OUTSET
H-Padding (24 px) und der Canvas-Padding-Override im KumlSvgRenderer (28 px)
bleiben unverändert — die Rechts-Clipping-Korrektur aus dem vorigen Commit
hängt nicht von der V-Geometrie ab.
`./gradlew check` grün (618 Tasks). Visuelle Verifikation: POST /orders +
confirmation jetzt klar AUSSERHALB der ALT-Box, 400 Bad Request mittig in
der [invalid]-Region. SysML-2-Test-Sample `combined-fragment-alt-two-operands`
ebenfalls verifiziert — keine Regression in der ursprünglich-getesteten
Konfiguration.
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
commit 6cb94e4fbda4de4051833b8f63bbae29f156ee25
Author: Irakli Betchvaia betschwa@web.de
Date: Mon Jun 15 06:31:03 2026 +0200
fix(renderer): SEQ-Frame nicht mehr von Canvas geclippt — Padding-Override
Die zwei vorherigen Commits haben `FRAGMENT_PADDING` von 8 auf 24 px erhöht,
damit der Frame links Atemraum für die Guard-Labels schafft. Symmetrisch
ragt der Frame jetzt aber auch 24 px rechts über die rechteste Lifeline
hinaus — und das Default-Canvas-Padding (`SvgRenderOptions.paddingPx = 16`)
reicht dafür nicht. Symptom: ALT-Box rechts in der SVG-`viewBox` abgeschnitten
(8 px Überstand am Beispiel `Place Order — API Submit`: Frame-Right-Edge bei
canvas.width + 56, viewBox-Edge bei canvas.width + 32).
Fix in beiden SEQ-Render-Pfaden (`renderUmlSequence` für UML und
`toSvg(SeqDiagram, …)` für SysML 2): wenn die Interaktion Combined Fragments
enthält, wird `options.paddingPx` auf `max(default, FRAGMENT_PADDING + 4)`
hochgesetzt — also 28 px. Das wirkt sowohl im Lifeline-Shift (Nodes wandern
um zusätzliche 12 px nach rechts) als auch in der Canvas-Größe in
`SvgDocument.render` (Breite + 24 px), weil beide `options.paddingPx` lesen.
Diagramme ohne Fragments bleiben bei 16 px Padding — kein unnötiges Bloat.
Padding-Mathematik:
frame_right = maxLifelineX_shifted + FRAGMENT_PADDING
= canvas.width + padding + 24
viewBox_right = canvas.width + 2 * padding
frame_right ≤ viewBox_right ⟺ padding ≥ FRAGMENT_PADDING
Mit `+4` Sicherheitsmarge (Stroke-Width / Anti-Aliasing) → 28 px.
Konstanten-Quellen: `UML_SEQ_FRAGMENT_PADDING` aus dem UmlSequenceSvg-Commit
und `SYSML2_SEQ_FRAGMENT_PADDING` aus dem Sysml2SequenceSvg-Commit. Doppelte
Wertfestlegung bewusst — die zwei Renderer sind unabhängig voneinander
versionierbar; ein gemeinsamer Konstanten-File hätte die Architektur-
Divergenz aus dem Sysml2SequenceSvg-Header-Kommentar nivelliert.
`./gradlew check` grün (618 Tasks). Visuelle Verifikation per `kuml render`
am Vault-Beispiel: ALT-Box rahmt jetzt symmetrisch um alle Lifelines, kein
Clipping rechts.
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
commit 31fe37bcff9e9efa77956104a455e6950b2f86bd
Author: Irakli Betchvaia betschwa@web.de
Date: Mon Jun 15 06:30:38 2026 +0200
fix(renderer): SysML-2-Sequence-Frame — Guard-Labels nicht mehr von Lifeline abgeschnitten
Spiegelt den UML-Fix auf die parallele SysML-2-Seite. Die beiden Sequence-
Renderer sind seit V2.0.x bewusst getrennt (siehe `Sysml2SequenceSvg.kt`-
Header-Kommentar zur Architektur-Divergenz), tragen aber dieselbe Frame-
Geometrie und damit dieselben Defekte:
1. **Guard-Labels durch erste Lifeline geclippt.** Sample
`combined-fragment-alt-two-operands.png` zeigte `[credentials valid]` und
`[credentials invalid]` durch die dashed Zeit-Achse von Lifeline `a`
zerschnitten. Fix identisch zum UML-Renderer: Guard auf `frameX + 4`,
`tagY + tagH + 14`, `FRAGMENT_PADDING` von 8 auf 24.
2. **Labels von dashed Linien zerschnitten.** Neuer Helper
`drawSeqLabelWithWhiteBackground()` mit derselben Höhen-Heuristik
(`BODY_TEXT_ASCENT = 11`, `BODY_TEXT_DESCENT = 3`). Angewendet auf
Message-Labels, Self-Call-Labels, Guard-Labels und die `messageLabel`-
Komponente der `«create»` / `«destroy»` Lifecycle-Nachrichten. Die
Stereotype-Marker selbst (`«create»` / `«destroy»`) bleiben ohne
Hintergrund — sie sitzen 16 px über der Baseline, weit über der
Pfeillinie, also kein Konflikt.
3. **`SYSML2_SEQ_FRAGMENT_PADDING` als `internal const` exportiert.**
Vorbereitung für den Canvas-Padding-Override im Folge-Commit.
Sample-Output-Tests `SEQ renders alt fragment with two operands separated by
dashed line` etc. grün. Deterministischer Byte-Identitäts-Test (`combined
fragment + execution spec render byte-identically`) grün.
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
commit 378ec9085e9f9cc3c5f7d71e039c6e34295a03fb
Author: Irakli Betchvaia betschwa@web.de
Date: Mon Jun 15 06:30:16 2026 +0200
fix(renderer): UML-Sequence-Frame — Guard-Labels nicht mehr von Lifeline abgeschnitten
Drei eng verflochtene Defekte in `UmlSequenceSvg`:
1. **Guard-Labels durch erste Lifeline geclippt.** `[valid]` / `[invalid]`
saßen rechts neben dem ALT-Pentagon bei `tagX + 50 + 6 = minLifelineX + 48`,
während die dashed Zeit-Achse der linkesten Lifeline bei `minLifelineX + 70`
(Lifeline-Width / 2) verläuft. Die Achse schnitt mitten durch die Bracket-
Texte.
Fix: Guard-Position auf `frameX + 4` (linker Frame-Rand), `tagY + tagH + 14`
(unter dem ALT-Pentagon statt rechts daneben). `FRAGMENT_PADDING` von 8 px
auf 24 px erhöht — der Frame ragt jetzt 24 px links über die linkeste
Lifeline hinaus, in diesem Atemraum sitzt der Guard.
2. **Nachrichten-Labels von gestrichelten Linien zerschnitten.** Lifeline-
Verticals und Operand-Separatoren kreuzten durch das Innere der Glyphen.
Symptom: `400 Bad Request` saß exakt auf der Separator-Linie zwischen
`[valid]`- und `[invalid]`-Operand.
Fix: neuer Helper `drawLabelWithWhiteBackground()` zeichnet einen weißen
`<rect>` hinter dem Text. Höhen-Heuristik (`BODY_TEXT_ASCENT = 11`,
`BODY_TEXT_DESCENT = 3`) so dimensioniert, dass der Hintergrund die
Glyphen abdeckt, aber knapp ÜBER der Baseline endet — der 4 px unterhalb
der Baseline gezeichnete Pfeilschaft bleibt durchgezogen. Anwendung auf
Message-Labels, Self-Call-Labels und Guard-Labels.
3. **`UML_SEQ_FRAGMENT_PADDING` als `internal const` exportiert.** Vorbereitung
für den Canvas-Padding-Override im zentralen Renderer (Folge-Commit).
`./gradlew check` grün (618 Tasks). Visuelle Regression am Beispiel
`Place Order — API Submit` aus dem Vault verifiziert.
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>- Renderer & layout overhaul — SEQ, STM, Activity, Component, Package, C4 (v0.11.0)
v0.10.0
[0.10.0] - 2026-06-14
Other
- Kuml-desktop editor + live-preview + renderer improvements (v0.10.0)
v0.9.0
[0.9.0] - 2026-06-14
Bug Fixes
- K2-Kompatibilität deklarieren — Plugin in K2-Mode wieder aktiv (jetbrains)- Plugin-Version explizit auf 0.8.0 + changeNotes vollständig (jetbrains)- V2.0.46 Renderer-Polish — port-label collision + edge-label routing (renderer)
Other
- Reverse Engineering — Track B complete (V3.0.7 + V3.0.8 + V3.0.9) (v0.9.0)
v0.8.0
[0.8.0] - 2026-06-11
Bug Fixes
- Renderer-Validierung 2026-06-11 — 15 von 17 Defekten behoben (renderer)
Chore
- Ktlint formatting + UmlCollaborationSvgTest expectation update (renderer)- Bump version to 0.8.0 (release)
Documentation
- Document V2.0.39–V2.0.43 + Renderer-Validierung 2026-06-11 (changelog)
Features
- Kuml-runtime-trace — STM Trace-Replay + OTLP-JSON export (v2.0.39)- Sandbox-Garantien — EffectExecutor, TimeLimitedGuardEvaluator, SandboxValidator (v2.0.40)- JetBrains Autovervollständigung + Rename Refactoring (v2.0.41)- Activity-Trace-Replay (Stufe B) — ActivityTraceReplayer + TraceFlavourDetector (v2.0.42)- Executable Behaviour Widget (MVP) — BehaviourWidget + SvgHighlight (v2.0.43)- ELK back as default engine; kuml.grid opt-in via --layout=grid (layout)
v0.7.0
[0.7.0] - 2026-06-10
Features
- Upgrade Kotlin 2.3.21 → 2.4.0 + fix K2 strictness in examples (kotlin-2.4)- StateMachineSnapshot/Restore + MigrationPolicy (v2.0.35)- Kuml-web LaTeX-Download — POST /api/render format=latex + standalone toggle (v2.0.36)- JetBrains Code Folding for .kuml.kts DSL blocks (v2.0.37)- Kuml run CLI — stdin/MCP/batch live event adapters (v2.0.38)
Other
- Bump version + changelog for V2.0.34–38 (v0.7.0)
v0.6.0
[0.6.0] - 2026-06-10
Bug Fixes
- Renderer correctness — 10 visual bugs fixed (z-order, missing edges, entity escaping, sizing, pin labels)- Update example scripts to current DSL API (operation returnType, message from/to, C4 relationship description)- Component diagram connector port IDs — UmlLayoutBridge splits "::" suffix into EndpointRef(nodeId, portId) so Grid layout no longer crashes- Upgrade com.gradleup.shadow 8.3.6 → 9.4.2 to fix Gradle 9.5.1 incompatibility- Kuml-web distTar duplicate + packaging CC + macOS jpackage version (v0.6.0-release)- Kuml-cli distTar/distZip duplicate runtime-desktop JAR (v0.6.0-release)- Replace softprops/action-gh-release@v2 with gh CLI in release.yml (ci)- Make release.yml idempotent for Maven Central + GitHub Release (ci)- Docker tag mismatch, portable SHA-256, native ARM64 runner (ci)
CI
- Add Windows + Linux ARM64 to package-runtime matrix and SDKMAN! release
Chore
- Update all dependencies to latest stable (deps)
Documentation
- Add official kUML logo assets (light + dark/negative variants)- Update README.adoc + add examples index for kuml simulate/transform/validate features- Update kUML logo assets (70mm viewBox with inset padding)- Handbook V2.x catch-up — SysML 2, runtime-MCP, validate, CLI refresh, Car2x showcase (v2.0.33)- Update examples README.adoc — new directories (keysight, rest, k8s, docker, c4-to-uml) + all 5 transformers + Car2x simulate quickstart
Features
- ActivityRuntime + Sysml2ActivityAdapter — kuml simulate now runs SysML 2 ACT diagrams end-to-end (v2.0.18)- Pepela thermostat showcase — STM+ACT demo of the executable behaviour runtime (v2.0.19)- Typed expression AST + parser + STM-guard integration (first half of expression refactor) (v2.0.20a)- Typed expression AST wired through ACT guards, PAR constraints, and STM/ACT effect bodies — single expression language across all producers (v2.0.20b)- KumlTransformer interface + rule-DSL + UmlToJpaTransformer + kuml transform CLI — opens M2M transformation track (v2.0.21)- UmlToRestTransformer — OpenAPI 3.0 YAML from UML class diagrams (v2.0.22)- UmlToK8sTransformer + UmlToDockerTransformer — K8s manifests and Dockerfiles from UML component diagrams (v2.0.23+v2.0.24)- C4ToUmlTransformer — C4 model to UML class diagram script (v2.0.25)- Kuml-runtime-mcp — kuml.run.start/event/snapshot/patch/stop MCP Tools (v2.0.27)- Grid-Layout als Default für Class/Component/UseCase/State + LayoutHintWriter (v2.0.26)- JetBrains Annotator + 4 Quick Fixes (missing param, unknown param, rename, suppress) (v2.0.28a)- Keysight Car2x Szenario — V2X intersection scenario as runnable SysML 2 state machine (v2.0.29)- JetBrains Live-SVG Split-View + StructureView (KumlSplitEditorProvider + KumlPreviewPanel) (v2.0.28b)- JetBrains live SVG preview — Batik JSVGCanvas + zoom/pan + full render pipeline (v2.0.30)- Kuml validate structural checks + --latex-standalone CLI flag (v2.0.31)- Distribution phase 1 — jpackage DEB/RPM/DMG/MSI tasks + Docker CLI image + release-installers CI workflow (v2.0.32)- UML SEQ + STATE renderer-direct paths + bridge support- Kuml-web — Ktor server with live SVG preview, code editor, and download buttons (v2.0.34)
Other
- Bump version + changelog for V2.0.22–V2.0.33 (M2M transformers, JetBrains plugin, distribution, MCP runtime, handbook) (v0.6.0)
Tests
- SVG sample-output tests now write PNG alongside SVG for visual regression verification- Update SVG test fixtures — correct edge maps, REQ width 280, BDD content-aware heights- PNG-Tests schreiben sample-output-Dateien auf Festplatte (analog zu SVG-Tests)
v0.5.1
[0.5.1] - 2026-06-07
Documentation
- Add release choreography — kUML release implies kuml.dev sync (claude-md)
Features
- SysML 2 edge labels — UC/REQ/STM/ACT/PAR stereotypes + guards + dashes via Sysml2EdgeAdapter (v2.0.13)- SysML 2 PNG export — alle acht Diagrammtypen via Batik-Transcoder (v2.0.14)- SEQ Combined Fragments + Execution Specs + Create/Destroy messages (v2.0.15)- ACT Activity Partitions (Swimlanes) + Pins (v2.0.16)- SysML 2 STM ↔ Behaviour-Runtime adapter —
kuml simulatenow accepts SysML 2 scripts (v2.0.17)
Other
- Bump version + changelog for SysML 2 polish (V2.0.13–V2.0.17) (v0.5.1)