MZP · Live-Test nach Deploy · 22.09.2026

Testreport: Layout, Mermaid, Drill-down, Layout-Qualität

Geprüft wurden die heute deployten Tickets MZP-109 bis MZP-112, und zwar gegen den Live-Server publisher.maierzone.de über die MCP-Tools validateDiagram und publishDiagram. Das Viewer-Verhalten (Doppelklick, Rücklink) wurde zusätzlich per Chrome/DevTools-Protokoll ferngesteuert. Kern-Ergebnis: Die Features funktionieren. Drei neue Defekte sind dabei aufgefallen, zwei davon betreffen jedes interaktive Diagramm.

21Testfälle
17bestanden
3neue Defekte
3Kleinbefunde / Lücken
1Altbefund

Befunde

D1 · Falscher Rücklink beim Drill-down (MZP-111)

Beobachtet: Doppelklick auf Publisher in mzp-test-2026-09-22-landschaft navigiert korrekt ins Unterdiagramm, hängt aber ?from=publisher-landschaft an. Der Rücklink zeigt deshalb auf /published/publisher-landschaft/, und diese Seite gibt es nicht. Der Steckbrief-Link hat denselben Fehler.

Ursache: viewer.js:29 liest currentSlug aus .dd-export[data-slug]. Dieser Wert ist aber slugFor(meta.title) aus DiagramPageRenderer.java:272, also der Download-Dateiname aus MZP-93 und nicht der Seiten-Slug. Richtig ist er nur, wenn der Titel zufällig dem Slug entspricht.

Vorschlag: den Slug im Viewer aus location.pathname (/published/<slug>/) ziehen oder serverseitig ein eigenes data-page-slug setzen. In der Preview (/preview/<token>/) sollte kein from mitgehen.

D2 · Fehlalarm MISSING_REFERENCE auf jedem interaktiven Diagramm

Beobachtet: Jedes validateDiagram/publishDiagram mit meta.interactive=true meldet eine Warnung. Als Dateiname trägt sie JavaScript-Quelltext:

MISSING_REFERENCE  Referenz ');\n    if (!from || !/^[a-z0-9]...createElement(' zeigt auf eine Datei, die nicht im Bundle liegt

Ursache: Der neue MZP-111-Code q.get('from') in viewer.js:1523 passt auf das Muster SCRIPT_IMPORT in ArtifactValidator.java:81 (\bfrom\s*['"]…). Der Lookbehind sperrt nur - und ., nicht das vorangehende Anführungszeichen. Ohne interactive bleibt die Warnung aus (gegengeprüft).

Vorschlag: Lookbehind auf (?<![-.'"]) erweitern. Das behebt die Ursache für alle Bundles, nicht nur für den Viewer. Dazu ein Test mit x.get('from').

D3 · Mermaid-ER: Schlüssel UK wird abgelehnt (MZP-110)

Beobachtet: string slug UK scheitert mit MERMAID_SYNTAX „Zeile 8 nicht lesbar“. Mermaid kennt drei Schlüssel: PK, FK und UK. PK, FK und Kommentare in Anführungszeichen (int id PK "…") gehen durch.

Wirkung: Ein aus echtem Mermaid kopiertes ER-Diagramm fällt komplett durch, statt nur das Kürzel zu verlieren. Vorschlag: UK annehmen (und Kombinationen wie PK, FK).

K1 · [[Subroutine]] rendert mit Klammer

Aus Mermaid R[[Renderer]] wird der Text „[Renderer]“. Die Subroutinen-Form wird nicht erkannt, und die innere Klammer bleibt im Label stehen.

K2 · flowchart RL / BT fallen still auf LR / TB

flowchart RL meldet LAYOUT_APPLIED … (LR) ohne Hinweis darauf, dass die Richtung umgedeutet wurde. Eine INFO-Notice wie MERMAID_DIRECTION_MAPPED würde das offenlegen.

K3 · LAYOUT_APPLIED nennt beim Raster-Layout „LR“

db-schema, uml-class und er laufen seit MZP-109b über GridLayout, die Notice meldet trotzdem direction: LR. Das ist irreführend, denn das Raster hat keine Laufrichtung. Besser wäre z.B. layout: grid in den details.

A1 · Altbefund: db-schema-Tabellenname liegt über den Spaltenzeilen

Der Tabellenname wird vertikal mittig in der Box gesetzt (t6 bei y=142 bei einer Box von 72..204) statt im Kopfstreifen über der Trennlinie bei y+28. Er überlagert deshalb die Spaltenzeilen. Das tritt auch mit gepinnten Koordinaten auf, ist also keine Regression durch MZP-109, fällt durch die neue Auto-Höhe aber stärker auf.

Testmatrix

TicketFallErgebnisBeleg
MZP-110flowchart LR: subgraph, 6 Knotenformen, -->|x|, -- x -->, -.->, ==>, class, :::ok7 Knoten, 2 Zonen; ==>→accent, -.->→dashed, store/focal gesetzt
MZP-110Overlay: props.icon per normalisierter id dbokSVG trägt data-icon="database"
MZP-110stateDiagram-v2: [*], as, Beschreibung, Verbund-State, <<choice>>ok9 Knoten, 1 Zone; publiziert: mermaid-state, RENDER_CLEAN
MZP-110erDiagram mit PK/FK, 4 Kardinalitätenok5 Entitäten, clean: true
MZP-110erDiagram mit UKDefekt D3MERMAID_SYNTAX Zeile 8
MZP-110erDiagram mit Attribut-Kommentar und Relationslabel in Anführungszeichenok2 Knoten, 1 Kante
MZP-110classDiagram: <<interface>>, <|.., *--, o--, ..>, -->ok5 Knoten, 6 Kanten, 9 Deko-Marker
MZP-110sequenceDiagram → AblehnungokMERMAID_UNSUPPORTED mit Verweis auf typeBlocks.lifelines
MZP-110Frontmatter title:, graph TD, %%, A --> B & CokTitel übernommen, TB, 4 Kanten
MZP-110ohne Titel → DefaultokMERMAID_TITLE_DEFAULTED
MZP-110flowchart RL, ---/===/-.-, Label mit Klammer in Anführungszeichenok, K2Richtung still LR
MZP-109aarchitecture, 3 Zonen, keine KoordinatenokzoneOverlaps: 0, 2 Kreuzungen; publiziert, siehe unten
MZP-109aein gepinnter Knoten in einer ZoneokZONE_BANDS_SKIPPED, pinned 1 / computed 2
MZP-109ac4 ohne Koordinatenok5 Knoten, clean: true
MZP-109adeployment ohne Koordinaten, 2 Zonen, bullets/badgeokclean: true; publiziert, RENDER_CLEAN
MZP-109bdb-schema ohne x/y/h, 1 bis 6 Spaltenok, A1h=132 bei 6 Zeilen (≥ 28+16·6 = 124)
MZP-109buml-class ohne Koordinatenok5 Knoten, 16 Deko, clean: true
MZP-111Slug-Validierung: Ungueltig Slug!, ../etc/passwdok2× INVALID_DRILLDOWN (ERROR)
MZP-111fehlendes Ziel / vorhandenes ZielokDRILLDOWN_TARGET_MISSING nur beim fehlenden
MZP-111Viewer live: Markierung, Steckbrief-Link, Doppelklick, Rücklink, XSS im ?from=Defekt D1Navigation ok, from falsch; XSS-Wert verworfen (kein Crumb)
MZP-112LAYOUT_QUALITY auf allen Läufen; gezielte KnotenkollisionoknodeOverlaps: 1, clean: false; Kreuzungen und Überlappungen stimmen mit CONNECTOR_OVERLAP überein

Lebende Belege

Die folgenden Seiten wurden für diesen Test publiziert. Die Landschaft ist interaktiv, und ein Doppelklick auf Publisher führt ins Deployment. Dort ist Defekt D1 zu sehen: Der Rücklink oben läuft ins Leere.

architecture · Zonen-Bänder · drillDown → öffnen
deployment · Auto-Layout ohne Koordinaten → öffnen
state · direkt aus Mermaid importiert → öffnen

Was nicht geprüft wurde

Erstellt mit Claude Code · Werkzeuge: validateDiagram, publishDiagram, Chrome headless + CDP