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.
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
| Ticket | Fall | Ergebnis | Beleg |
|---|---|---|---|
| MZP-110 | flowchart LR: subgraph, 6 Knotenformen, -->|x|, -- x -->, -.->, ==>, class, ::: | ok | 7 Knoten, 2 Zonen; ==>→accent, -.->→dashed, store/focal gesetzt |
| MZP-110 | Overlay: props.icon per normalisierter id db | ok | SVG trägt data-icon="database" |
| MZP-110 | stateDiagram-v2: [*], as, Beschreibung, Verbund-State, <<choice>> | ok | 9 Knoten, 1 Zone; publiziert: mermaid-state, RENDER_CLEAN |
| MZP-110 | erDiagram mit PK/FK, 4 Kardinalitäten | ok | 5 Entitäten, clean: true |
| MZP-110 | erDiagram mit UK | Defekt D3 | MERMAID_SYNTAX Zeile 8 |
| MZP-110 | erDiagram mit Attribut-Kommentar und Relationslabel in Anführungszeichen | ok | 2 Knoten, 1 Kante |
| MZP-110 | classDiagram: <<interface>>, <|.., *--, o--, ..>, --> | ok | 5 Knoten, 6 Kanten, 9 Deko-Marker |
| MZP-110 | sequenceDiagram → Ablehnung | ok | MERMAID_UNSUPPORTED mit Verweis auf typeBlocks.lifelines |
| MZP-110 | Frontmatter title:, graph TD, %%, A --> B & C | ok | Titel übernommen, TB, 4 Kanten |
| MZP-110 | ohne Titel → Default | ok | MERMAID_TITLE_DEFAULTED |
| MZP-110 | flowchart RL, ---/===/-.-, Label mit Klammer in Anführungszeichen | ok, K2 | Richtung still LR |
| MZP-109a | architecture, 3 Zonen, keine Koordinaten | ok | zoneOverlaps: 0, 2 Kreuzungen; publiziert, siehe unten |
| MZP-109a | ein gepinnter Knoten in einer Zone | ok | ZONE_BANDS_SKIPPED, pinned 1 / computed 2 |
| MZP-109a | c4 ohne Koordinaten | ok | 5 Knoten, clean: true |
| MZP-109a | deployment ohne Koordinaten, 2 Zonen, bullets/badge | ok | clean: true; publiziert, RENDER_CLEAN |
| MZP-109b | db-schema ohne x/y/h, 1 bis 6 Spalten | ok, A1 | h=132 bei 6 Zeilen (≥ 28+16·6 = 124) |
| MZP-109b | uml-class ohne Koordinaten | ok | 5 Knoten, 16 Deko, clean: true |
| MZP-111 | Slug-Validierung: Ungueltig Slug!, ../etc/passwd | ok | 2× INVALID_DRILLDOWN (ERROR) |
| MZP-111 | fehlendes Ziel / vorhandenes Ziel | ok | DRILLDOWN_TARGET_MISSING nur beim fehlenden |
| MZP-111 | Viewer live: Markierung, Steckbrief-Link, Doppelklick, Rücklink, XSS im ?from= | Defekt D1 | Navigation ok, from falsch; XSS-Wert verworfen (kein Crumb) |
| MZP-112 | LAYOUT_QUALITY auf allen Läufen; gezielte Knotenkollision | ok | nodeOverlaps: 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.
Was nicht geprüft wurde
- Die visuelle Güte der Zonen-Bänder bei großen Diagrammen: geprüft wurden nur die Zahlen (
zoneOverlaps), nicht der optische Eindruck. - MZP-95, MZP-107 und MZP-93 (ebenfalls REVIEW) waren nicht Teil dieses Deploys.
- Die Suite (
mvnd test) lief nicht, dieser Test prüft nur das Live-System.
Erstellt mit Claude Code · Werkzeuge: validateDiagram, publishDiagram, Chrome headless + CDP