MZP-120: LAYOUT_QUALITY sagt jetzt, wo es klemmt
hotspots[] mit Ort und beteiligten Kanten, Knoten und Zonen, benannt wie im SVG
Dateien
| Datei | + | - | Ticket | Was |
|---|---|---|---|---|
| LayoutQuality.java | 102 | 8 | MZP-120 | record Hotspot, Metrics.hotspots(), Kappung MAX_HOTSPOTS = 20, Schnittpunkt/Mitte je Befund |
| LayoutQualityTest.java | 77 | 0 | MZP-120 | 6 neue Tests (15 statt 9) |
| DiagramMcpTools.java | 4 | 1 | MZP-120 | Tool-Beschreibung nennt hotspots[] und hotspotsOmitted |
| SvgRenderer.java | 1 | 1 | MZP-120 | edgeKey von private auf paketsichtbar |
| AGENTS.md, agent-workflows/README.md | 7 | 0 | MZP-122 | Workflows eingetragen |
| diff-review.md, project-recap.md (neu) | 252 | 0 | MZP-122 | zwei Agent-Workflows |
Architektur-Verschiebung
Zwei Fassungen desselben Diagramms unter review-mzp-mzp-120-arch, v1 vorher, v2 nachher, verglichen mit diffDiagram(1, 2): 2 Aenderungen, 3 Umroutungen. Die Before|Delta|After-Ansicht: Delta ansehen.
| Element | Aenderung | vorher | nachher |
|---|---|---|---|
| Kante e4 LayoutQuality → SvgRenderer | changed | Knotengroesse | Groesse + Key |
| Kante e8 DiagramMcpTools → Agent | changed | nur Zahlen | Zahlen + Orte |
| Kanten e5, e6, e7 | rerouted | nur anders gefuehrt, weil die Sublabels von LayoutQuality und SvgRenderer laenger wurden | |
Kein neuer Knoten und keine neue Paketkante: LayoutQuality rief SvgRenderer schon vorher auf (growNodesForContent). Die BoundaryRatchet bleibt deshalb unberuehrt.
Ratschen
git diff HEAD -- src/test/resources/ratchet/ ist leer: keine Registerzeile bewegt. LayoutQuality.java steht bei 256 von 400 Zeilen, der Test bei 236 von 300, beide nicht im Register. SvgRenderer.java (registriert mit 1240) behaelt seine Zeilenzahl, nur der Modifier aendert sich.
Testlage
- Suite gruen ohne FxModuleSmokeTest: Tests run 2112, Failures 0, Errors 0, Skipped 2, JaCoCo-Gate „All coverage checks have been met“, BUILD SUCCESS.
- FxModuleSmokeTest rot, auch auf dem sauberen HEAD: fx-fluid 96², Median 9,9 ms statt 2 ms (Node 26.7.0). Mit git stash gegengeprueft, nicht durch diesen Diff verursacht. Bekannt als MZP-67.
- TDD: Die 6 neuen Tests waren vor der Implementierung rot (Kompilierfehler, hotspots() fehlte) und danach gruen.
Urteil
- Vertrag waechst additiv. Die Notice LAYOUT_QUALITY traegt zusaetzlich hotspots (Liste von {kind, x, y, ids}) und hotspotsOmitted. Bestehende Felder bleiben. Evals, die details ganz nach results.json kopieren, werden dadurch groesser, aber nicht falsch.
- Ein Schluessel, eine Quelle. Die Kantennamen kommen aus SvgRenderer.edgeKey selbst, statt einer dritten Kopie neben CanonicalModelFromSpec. Aendert sich das Schema, folgt LayoutQuality automatisch.
- Offener Punkt: Reihenfolge vor der Kappung. Die Hotspots stehen in Fundreihenfolge (Kanten, dann Knoten, dann Zonen). Ein Knaeuel mit mehr als 20 Kreuzungen draengt deshalb eine Knotenkollision aus der Liste, obwohl sie schwerer wiegt. Vorschlag: vor dem Kappen nach Schwere sortieren (nodeOverlap, zoneOverlap, connectorOverlap, crossing).
- Engine-Befund beim Referenzdiagramm. Vier Kanten aus einem Knoten in denselben Rang teilen immer einen Stamm (4 CONNECTOR_OVERLAP), und props.fromSide hilft dagegen nicht. Das ist genau der Nudging-Fall aus dem Band-4-Report (A3).
- Vor dem Merge: Deploy-Smoke gegen die lebende Instanz. Ein validateDiagram mit bekannter Kreuzung muss hotspots mit den Kanten-IDs liefern. Heute liefert Produktion das Feld noch nicht, der Stand ist nicht deployt.