v0.29.0
[0.29.0] - 2026-07-10
Bug Fixes
- Resolve ERM self-loop relationship-name/role label collisions (svg)
Features
- Render ERM diagrams end-to-end (all four notations) (kuml-web)- Scaffold kuml-language-server LSP skeleton (Wave 2) (lang-server)- Wire LSP diagnostics via subprocess CLI (lang-server)- Record kuml version/path per run for reproducibility (gcr-benchmark)- Wire LSP client + live-preview webview (vscode)- 3-samples-per-cell replication (GPT-4o, Gemini 2.5 Flash/Pro) (gcr-benchmark)- Per-family and per-difficulty 3-sample breakdowns (gcr-benchmark)- Add OclSyntax facade with recursion-guarded parser for editor highlight/type-check (ocl)- Add protected annotation for transitions + EditPolicy guard gate (ocl)- Add ModelPatch.ChangeGuard + applyPatch for live guard edits (runtime)- Add OclGuardEditor composable for inline OCL guard editing (widget)- Wire changeGuard bridge into BehaviourWidget (OCL editor widget wiring) (widget)- Add Compose UI robot tests for OclGuardEditor + ControlPanel (widget)
Other
- Wire textDocument/completion + completionItem/resolve- Add layout hint endpoint for drag-and-drop grid placement
Introduces LayoutHintService and the /api/layout/hint route so the frontend can persist a dropped element's grid cell back into the DSL script. Relocates UmlModelDslPrinter into kuml-core-dsl so both the CLI reverse command and the web layer can share it, fixing up the resulting imports in ImportCommand/ReverseCommand/ScriptSerializer.- Add drag-and-drop node geometry to render response (V3.2 Wave 2)
Extends RenderResponse with per-node hit-test boxes (NodeBox) and an
approximate uniform grid (GridGeometry), extracted from the same
LayoutResult used by the SVG renderer, so a drag-and-drop client can
hit-test nodes and resolve pointer drops to grid cells (GridCellResolver)
without re-implementing layout math. Grid extraction is limited to CLASS
diagrams, matching the layout-hint endpoint added in Wave 1.- V3.2 Wave 3: browser drag-and-drop gesture for class-diagram nodes
Adds a pointer-events-based drag gesture to the kUML Web UI preview pane,
consuming the Wave 1-2 backend contract (POST /api/render returns
nodes + grid; POST /api/layout/hint applies a col/row drop) without any
Kotlin production changes. app.js adds a DragController (pointer
down/move/up/cancel via event delegation on #preview) that maps screen
pixels to SVG viewBox user-space, mirrors the server-side
GridCellResolver to resolve a drop cell, and wires the result into the
existing CodeMirror editor + re-render flow; app.css adds the
grab/grabbing cursor affordance and ghost/snap styling.
ApiRoutesTest.kt hardens the existing nodes+grid contract test with the
invariants the browser-side mirror depends on.
Co-Authored-By: Claude Sonnet 5 noreply@anthropic.com- V3.2 Wave 4: drag-and-drop UX polish (kuml-web)
Adds hover/grabbing affordance, an occupied-cell snap-preview highlight,
and a distinct auto-dismissing error banner for drag-and-drop node
placement in the web editor, so users get clearer visual feedback during
drag operations and transient drop errors no longer read as persistent
render failures. Locks the occupied-cell error contract with a new
route-level regression test in ApiRoutesLayoutHintTest.
Co-Authored-By: Claude Sonnet 5 noreply@anthropic.com- LSP server, interactive OCL guard editing, kuml-web drag-and-drop + ERM rendering (v0.29.0)
Refactor
- Extract editor-agnostic brain from kuml-jetbrains (lang-support)
Tests
- Fix stale ContainerDiagramBuilder exclude() test to actually exercise exclusion (c4)