Skip to content

v0.27.0

Choose a tag to compare

@github-actions github-actions released this 09 Jul 17:43
· 197 commits to master since this release

[0.27.0] - 2026-07-09

Bug Fixes

  • Correct SQL generator option key from dialect to sql-dialect (docs)

Chore

  • Bump version to 0.27.0 (release)

Documentation

  • Document ERM (entity-relationship modelling) in handbook + README- Fix release-review findings for v0.27.0

Other

  • KUML V3.4.1 - ERM Metamodell, DSL und Constraint-Checker

Neues eigenstaendiges Modul kuml-metamodel-erm: Entity/Attribute/
Relationship/View/Index/CheckConstraint-Modell sowie eine ermModel{}-DSL
mit notation-bewusster Diagrammerstellung (Martin/Crow's-Foot, Bachman,
Chen, IDEF1X als einheitliche notation-Eigenschaft auf Modellebene;
Rendering der unterschiedlichen Notationen folgt in V3.4.2). Haengt nur
von kuml-core-model ab, keine Wiederverwendung von kuml-metamodel-uml.

ErmConstraintChecker mit 15 Struktur-Regeln (u.a. Primaerschluessel-,
Fremdschluessel-, View-, Index- und Check-Constraint-Validierung,
inklusive der zuvor fehlenden Regel 15 fuer nicht-leere Check-Constraint-
Ausdruecke).

Verdrahtung des Checkers in die bestehenden Pipelines: kuml validate
fuehrt ERM-Strukturregeln jetzt im bestehenden "structural"-JSON-Abschnitt
unter der Kategorie "erm" aus. Render-Pipelines (Desktop/Web/Asciidoctor/
Vault-Example-Renderer) geben fuer ERM-Diagramme eine klare "noch nicht
unterstuetzt"-Meldung statt eines Absturzes aus (Rendering geplant fuer
V3.4.2). Der MCP-Validate-Tool und der Beispiel-Katalog wurden um
ERM-Awareness erweitert.

Neue CLI-Smoke-Tests und ERM-Fixtures (valid-ecommerce.kuml.kts,
broken-fk.kuml.kts).

Co-Authored-By: Claude Sonnet 5 noreply@anthropic.com- KUML V3.4.2 - ERM/Martin-Notation SVG-Renderer

Neu:

  • ERM/Martin-SVG-Renderer (kuml-io-svg): ErmMartinSvg, ErmMartinEdgeSvg,
    ErmSizing, ErmViewSvg (+ Tests), verdrahtet in KumlSvgRenderer.toSvg/
    toSvgFile und SvgDocument-Stylesheet.
  • ERM-Layout-Bridge (kuml-layout-bridge): ErmContentSizeProvider,
    ErmLayoutBridge (+ jvmTests) — legt ERM-Entitaeten/Views per ELK layoutet
    aus, analog zu UML-Klassendiagrammen.
  • kuml-io-svg und kuml-layout-bridge deklarieren neu
    api(project(":kuml-metamodel:kuml-metamodel-erm")).
  • DumpJsonCommand und VaultExampleRenderer nutzen jetzt die neue Layout-
    Bridge + den neuen Renderer statt des V3.4.1-Stubs ("ERM rendering not
    yet supported").
  • ValidateCommandErmTest prueft echtes SVG fuer Martin-Notation; Bachman/
    Chen/IDEF1X werfen weiterhin den strukturierten "not yet supported"-Fehler.

Fix:

  • RenderPipeline.renderErm faengt IllegalArgumentException aus
    KumlSvgRenderer.toSvg gezielt ab (neuer ermToSvg-Helper) und wirft sie als
    ScriptEvaluationException weiter — analog zur bestehenden Konvention fuer
    nicht unterstuetzte ERM-Formate/LaTeX. Der zu breite catch-Block in
    RenderCommand, der zuvor jede require(...)-Verletzung in der gesamten
    Pipeline als harmlosen Skriptfehler maskierte, wurde entfernt.

Co-Authored-By: Claude Sonnet 5 noreply@anthropic.com- KUML V3.4.3 - ERM/Bachman-Notation SVG-Renderer

Implementiert die Bachman-Notation (Pfeil + Kreis) für ERM-Diagramme als
zweite unterstützte Notation neben Martin/Crow's-Foot (V3.4.2).

  • KumlSvgRenderer: renderErmBachman-Pfad ergänzt, der sich Layout,
    Entity-/View-Rendering und Relationship-Label-Stacking mit
    renderErmMartin über eine neue gemeinsame renderErm-Body-Funktion
    teilt. Nur der Kanten-Glyph-Renderer (renderRelationship) variiert pro
    Notation. ErmNotation.BACHMAN wirft nicht mehr "not yet supported",
    sondern rendert echtes SVG; die Fehlermeldungen für CHEN (V3.4.4) und
    IDEF1X (V3.4.5) sind entsprechend aktualisiert.
  • ErmBachmanEdgeSvg.kt (neu): Bachman-spezifischer Kantenrenderer mit
    Pfeilspitze für "many" und gefülltem Kreis für "mandatory" (Pendant zu
    den Crow's-Foot-/Bar-Glyphen der Martin-Notation).
  • SvgDocument: neue CSS-Klassen .kuml-erm-bachman-arrow und
    .kuml-erm-bachman-mandatory; Entity-Boxen und der hohle
    .kuml-erm-optional-marker-Kreis werden unverändert wiederverwendet.
  • RenderPipelineTest: CLI-Test für "--notation bachman" aktualisiert —
    erwartet jetzt gerendertes SVG (kuml-erm-entity, kuml-erm-bachman-arrow)
    statt der bisherigen not-yet-supported-Exception; neuer Test bestätigt,
    dass "--notation chen" weiterhin die strukturierte Fehlermeldung wirft.
  • ErmMartinSvgTest: BACHMAN aus der Liste der Notationen entfernt, die
    noch die not-yet-supported-Exception werfen (nur noch CHEN/IDEF1X).
  • ErmBachmanSvgTest.kt (neu): Sample-Output-Tests für die neue Bachman-
    Notation (Pfeilspitzen, Mandatory-Kreise, Label-Stacking, XML-Escaping).
  • ValidateCommandErmTest: analoger Fix im CLI-Smoke-Test — "render
    --notation bachman" erwartet jetzt gerendertes SVG statt exit 3;
    neuer Test bestätigt, dass "--notation chen" weiterhin die
    strukturierte Fehlermeldung wirft (war im Feature-Branch übersehen
    worden und ließ ./gradlew check erst rot werden).- KUML V3.4.4 - ERM/Chen-Notation SVG-Renderer

Neuer Renderer-Pfad für ER-Diagramme in klassischer Chen-Notation
(Rechtecke für Entities, Rauten für Relationships, Ellipsen für
Attribute, verbunden über einfache Linien statt Crow's-Foot-Pfeilen).

  • ErmChenSvg: SVG-Zeichenlogik für Chen-Notation (Entity-Boxen,
    Relationship-Rauten, Attribut-Ellipsen inkl. Primärschlüssel-
    Unterstreichung und Multi-/schwache Entity-Darstellung)
  • ErmChenSizing: Content-aware Größenberechnung für Chen-Elemente
  • ErmChenLayoutBridge / ErmChenSizeProvider: Anbindung an die
    Layout-Bridge, analog zum bestehenden Bachman-Renderer-Pfad
  • KumlSvgRenderer, RenderCommand, RenderPipeline um den neuen
    Notationsmodus erweitert
  • Testabdeckung: ErmChenSvgTest, ErmChenLayoutBridgeTest,
    RenderPipelineTest, ValidateCommandErmTest, ErmMartinSvgTest
    (Regressionsschutz) ergänzt/angepasst

Co-Authored-By: Claude Sonnet 5 noreply@anthropic.com- KUML V3.4.5 - ERM/IDEF1X-Notation SVG-Renderer

Neu:

  • ErmCategory als First-Class-Element im ERM-Metamodell (Supertyp/Subtypen,
    Vollstaendigkeits-Flag, Diskriminator-Attribut), DSL-Funktion category(...)
  • Neue Constraint-Regeln 16-19 (Supertyp/Subtypen aufloesbar, kein Selbstbezug,
    Diskriminator gehoert zum Supertyp) sowie Ausnahme der Kategorie-Subtypen
    von Regel 3s PK-Pflicht
  • ErmIdef1xLayoutBridge: behaelt echte Entity-/View-/Relationship-Ids
    (im Gegensatz zur Chen-Bridge) und injiziert fuer IDEF1X-Kategorien einen
    synthetischen Diskriminator-Kreis-Knoten plus Supertyp-/Subtyp-Kanten
  • IDEF1X-SVG-Renderer (renderErmIdef1x()): rundet Ecken abhaengiger Entitaeten
    (weak, Identifying-Ziel, Kategorie-Subtyp); zeichnet Identifying/
    Non-Identifying-Linien mit gefuelltem Kind-Punkt, optionaler Eltern-Raute
    und P/Z/1-Kardinalitaets-Annotation; Kategorie-Diskriminator-Kreis mit
    einfacher/doppelter Vollstaendigkeits-Linie; neue CSS-Klassen in SvgDocument
  • CLI-Anbindung: RenderPipeline.renderErm waehlt fuer IDEF1X die neue
    ErmIdef1xLayoutBridge; --notation-Hilfetext und KDocs aktualisiert
    (idef1x wirft nicht mehr)

Bisherige "idef1x throws / not yet supported"-Regressionstests in
RenderPipelineTest, ValidateCommandErmTest, ErmMartinSvgTest und
ErmChenSvgTest zu echten Render-Assertions umgeschrieben.

Betroffene Module: kuml-metamodel-erm, kuml-layout-bridge, kuml-io-svg, kuml-cli.- KUML V3.4.6 - UML-zu-ERM Modelltransformation (M2M) + Exposed-Mapping-Profil

Neues Codegen-Modul kuml-transform-uml-to-erm: transformiert UML-Klassenmodelle
(annotiert mit dem neuen dev.kuml.profiles.erm-Mapping-Profil, kuml-profile-erm)
in ERM-Metamodelle sowie in ausführbare Kotlin-Exposed-DAO-Skripte.

  • UmlToErmTransformer: Klassen -> Entities, Assoziationen -> FKs/Join-Tabellen,
    inklusive JOINED-Inheritance-Auflösung root-to-leaf (applyJoinedLinks)
    und Kollisions-Auflösung für FK-Spaltennamen über Assoziationsend-Rollen
  • UmlToErmScriptTransformer + ErmScriptRenderer: Rendering des ERM-Modells als
    Kotlin-Exposed-Skript (Tabellen, Spalten, Fremdschlüssel, Referential Actions)
  • SqlIdentifiers/UmlErmTypeMapper: sichere SQL-Identifier-Erzeugung und
    UML-Typ-zu-SQL-Typ-Mapping
  • Security-Fixes: Neutralisierung von Kotlin-Script-Injection über $ sowie
    CR/LF-Injection im generierten Skript-Header-Kommentar (ErmScriptRenderer)
  • Neues Profil-Modul kuml-profile-erm (ErmMappingProfile, ErmProfileNames) als
    Gegenstück zum bestehenden AUTOSAR-Profil-Muster
  • Registrierung über ServiceLoader (KumlTransformerProvider, KumlProfileProvider)
    und Anbindung in settings.gradle.kts
  • Vault-Beispiel "38 UML Profil – Exposed" ergänzt (Profil-Definition +
    renderbares PSM-Beispiel), Übersicht und Playground-Mapping aktualisiert

Basiert auf 5 WIP-Commits von feature/v3.4.6-uml-to-erm-transform, per
Squash-Merge zu einem Release-Commit auf master zusammengefasst.- KUML V3.4.7 - kuml-gen-sql auf ERM-Eingabe umgestellt

Repoints kuml-gen-sql von direktem UML-Stereotyp-String-Matching auf das
getippte ERM-Metamodell (V3.4.6). Ein neuer ErmSqlEmitter ist die einzige
DDL-Rendering-Engine fuer zwei gleichwertige Eingangspfade:

  • SqlDdlGenerator (UML-Direktpfad): KumlDiagram -> UmlToErmTransformer ->
    ErmModel -> ErmSqlEmitter -> DDL.
  • ErmSqlDdlGenerator (ERM-first, neu): ErmModel -> ErmSqlEmitter -> DDL,
    ueber eine neue ErmCodeGenerator/ErmCodeGenRegistry-SPI in kuml-codegen-api.

Der Emitter unterstuetzt jetzt Composite-PKs, Indizes, Views, Check-
Constraints und referentielle Aktionen (ON DELETE/ON UPDATE) - keiner davon
war im alten UML-Direktpfad abbildbar. FK-Spalten stehen direkt in CREATE
TABLE statt per ALTER TABLE ADD COLUMN, M:N-Assoziationen erzeugen echte
Junction-Tables statt TODO-Kommentaren, Enums werden als VARCHAR+CHECK statt
Postgres-CREATE-TYPE emittiert (bewusste Verhaltensaenderung).

FlywayBaselineGenerator bekommt ein ERM-first-Gegenstueck
(ErmFlywayBaselineGenerator), beide teilen sich die Pfad-Traversal-Guards
ueber ein neues FlywayFileNaming-Objekt. GenerateCommand (CLI) und
GenerateTool (MCP) verzweigen jetzt auf UML- oder ERM-Skripte.

Co-Authored-By: Claude Sonnet 5 noreply@anthropic.com- KUML OKF-Spike - Workspace info/validate/render fuer Obsidian-Knowledge-Format (ADR-0011 FT-1)

Neuer kuml workspace-Befehl mit den Subcommands info, validate und
render fuer Obsidian-Vault-Workspaces im Open Knowledge Format (OKF):

  • Frontmatter-Parser fuer YAML-Frontmatter in Markdown-Notizen
    (Frontmatter.kt)
  • OKF-Dokumentmodell und -Typen (OkfDocument.kt, OkfType.kt)
  • Validator fuer OKF-Konformitaet von Workspace-Notizen (OkfValidator.kt)
  • WorkspaceScanner durchsucht ein Obsidian-Vault nach OKF-Notizen anhand
    einer .kuml-workspace.toml-Konfiguration
  • WorkspaceRenderer rendert eingebettete kuml-Blöcke aus Workspace-Notizen;
    Block-Namen werden sanitisiert um Path-Traversal beim Datei-Output zu
    verhindern
  • WorkspaceCommand verdrahtet die drei Subcommands in der CLI
    (KumlCli.kt)
  • Testabdeckung: FrontmatterParserTest, WorkspaceCommandTest sowie ein
    Beispiel-Workspace unter src/test/resources/okf-workspace/ (Artikel,
    Konzepte, Modelle, Index)
  • ktlint-Formatierung auf alle neuen Sources angewendet

Squash-Merge von feature/okf-validation-spike (3 Commits: WIP-Implementierung,
ktlint-Formatierung, Path-Traversal-Fix).- KUML DSL-Stereotypen - Attribut-/Assoziations-Stereotypen in DSL, Rendering und Layout

Fuehrt Stereotyp-Unterstuetzung fuer Attribute und Assoziationen ein: DSL-Builder
(AssociationBuilder, ClassBuilder) koennen Stereotypen setzen, das Relationships-
Metamodell traegt sie, StereotypeHelper rendert sie im SVG-Output, und
UmlContentSizeProvider beruecksichtigt sie bei der Knotengroessenberechnung.
Inklusive Tests in kuml-core-dsl, kuml-io-svg und kuml-layout-bridge.- KUML V3.4.8 - ERM-zu-Exposed Transformer-Kette

ErmToExposedTransformer + ErmExposedGenerator/ErmExposedEmitter fuer
den direkten ERM->Exposed-PSM-Schritt der MDA-Persistenzschicht-
Pipeline (ADR-0016), sowie UmlToExposedViaErmScriptTransformer als
Kettenwrapper (UML->ERM->Exposed). Neue Service-Provider fuer
ErmCodeGeneratorProvider und KumlTransformerProvider registriert.- KUML V3.4.9 - SQL-zu-ERM Reverse Engineering

Neue ERM-tragende Reverse-SPI (ErmReverseEngine/ErmReverseResult/
ErmReverseEngineRegistry) in kuml-codegen-reverse-api, parallel zur
bestehenden UML-Reverse-SPI, da SQL-DDL ein ErmModel statt eines
KumlModel liefert.

Neues Modul kuml-codegen-reverse-sql implementiert PostgresErmReverseEngine
(JVM-only, JSqlParser 5.3) mit 2-Pass-Pipeline: CREATE TABLE -> Entities +
Attribute (Typ-Mapping inkl. SERIAL/pg_dump-nextval-Erkennung, PK/UNIQUE/
DEFAULT/CHECK/REFERENCES-Parsing aus JSqlParsers Roh-Token-Spalten-Specs),
dann ALTER TABLE ADD CONSTRAINT/CREATE INDEX/CREATE VIEW gegen den
vollstaendigen Tabellennamen-Index aufgeloest, abschliessend Relationship-
Inferenz (Identifying/Weak-Entity bei FK-in-PK, Kardinalitaet aus Nullable/
Unique/Composite-PK). Relationship-Konvention (source=Parent, target=Kind)
verifiziert gegen UmlToErmTransformer.kt fuer Konsistenz mit dem bestehenden
UML->ERM-Pfad. Dollar-Quote-/String-/Kommentar-bewusster Fallback-Splitter
faengt PL/pgSQL-Bloecke (CREATE FUNCTION/DO $$...$$) ab, die JSqlParsers
Grammatik nicht unterstuetzt, ohne die gesamte Datei zu verwerfen; eigener
Daemon-Thread-Executor umgeht einen Thread-Leak in JSqlParserUtils
Convenience-Overloads bei Parse-Fehlern.

CLI: kuml reverse <file|dir> --format sql [--dialect postgres] via neuem
ErmModelDslPrinter (rendert Entities/Attribute/Relationships/Views/Indizes
als ermModel-DSL, analog ErmScriptRenderer). --list-engines zeigt SQL-Engines
zusaetzlich. Neuer Exit-Code REVERSE_SQL_PARSE_FAILED (17).

Abweichung von der urspruenglichen Aufgabenbeschreibung: JSqlParser liegt auf
Maven Central unter der Koordinate com.github.jsqlparser:jsqlparser (verifiziert
gegen repo1.maven.org) statt des historischen, seit 2012 verwaisten
net.sf.jsqlparser:jsqlparser:0.8.0.

Tests: 59 Unit-Tests in kuml-codegen-reverse-sql (Typ-Mapping, Constraint-
Parsing, Relationship-Inferenz, Identifier-Folding, Statement-Collector-
Fallback, ServiceLoader-Registry) + 11 CLI-Smoke-Tests in kuml-cli. Alle
betroffenen Module (reverse-api, reverse-sql, cli) gruen inkl. ktlint,
distTar und runtimeZip verifiziert.

Co-Authored-By: Claude Sonnet 5 noreply@anthropic.com- KUML ERM-Vault-Beispiel - E-Commerce-Schema + MCP Example-Catalog-Wiring

Fuegt das Vault-Beispiel "39 ERM Martin - E-Commerce Schema" (neutrale
E-Commerce-Domaene: FKs, Selbstreferenz, schwache/identifizierende
Entitaet, Multi-FK-Fan-out, Views/Indexe/Checks) als Test-Resource fuer
kuml-vault-examples-tests hinzu, kuratiert es im ExampleCatalog als
sechste Example-Catalog-Sprache (erm/martin) und erweitert den
Vault-Examples-Tests-Runtime-Classpath um kuml-metamodel-erm, damit der
Script-Host ermModel(...) aufloesen kann. Aktualisiert die zwei
hartkodierten Fuenf-Sprachen-Assertions in ExampleCatalogTest und
ExamplesToolTest auf die neue Sechs-Sprachen-Liste.