Zwanzig Funde fuer Diagramm-Engine, Agenten-Ergonomie und visuelles Handwerk — je Fund gekennzeichnet als Moonshot, ticket-reif oder Muster
Datum
2026-09-27
Anlass
Suche nach extravaganten Erweiterungen im GitHub-Universum, zugeschnitten in einem kurzen Grilling: Kern sind Diagramm-Engine/Viewer, Agenten-Ergonomie am MCP und die visuellen Handwerks-Workflows, Qualitaets-Gates laufen als Beifang mit. Wiki/Wissen ist bewusst ausgeschlossen (deprecated).
Massstab
Konzepte zum Nachbauen im MZP-Stil und Vergleichsprojekte zum Benchmarken zuerst, Bibliotheken nur, wenn der Nutzen die Abhaengigkeit klar rechtfertigt. Einbau nur bei permissiver Lizenz, Aktivitaet in den letzten 12 Monaten, Sidecars erlaubt, wenn selbst gehostet (Muster mzone-render).
Abgrenzung
137 Repos aus 18 Vorgaenger-Reports (Band 1–3, Goldgruben, Trend-Radare, Markdown-zu-Folien) sind ausgeschlossen. Jeder Fund unten taucht dort weder als Repo noch als Konzept auf.
Grundlage
Sterne, letzter Push und Lizenz per GitHub-API am 2026-09-27; Code-Bezuege gegen main (fc30ea3) geprueft, offene Tickets gegen das Backlog-Cockpit. Stand-Spalte und Abschnitt „Naechste Runde“ am 2026-09-28 erneut gegen main (31e9958), Backlog und Produktion (Live-Probe validateDiagram) abgeglichen. Am 2026-09-29 erneut gegen main (dc93136) und das Backlog; MZP-126/128 nach Nachweis im echten Claude-Host geschlossen. Am 2026-10-01 erneut gegen main (595cd7c), das Backlog und Produktion (Live-Proben validateDiagram mit constraints[] und unbekanntem Mermaid-Dialekt, getCapabilityFor('constraints, analog')) abgeglichen. Am 2026-10-02 erneut gegen main (fffe69d), das Backlog und Produktion (Live-Proben validateDiagram mit ascii, validateArtifact mit data-tusche="beide" auf verschobener viewBox, /lib/analog@1.1.0 byte-gleich mit dem Repo) abgeglichen.
TL;DR
Der groesste Hebel dieser Runde liegt nicht in einer Bibliothek, sondern in einem Protokoll:
MCP Apps (offizielle MCP-Erweiterung seit 2026-01-26, laeuft in Claude, ChatGPT,
VS Code, Cursor) wuerde den interaktiven Diagramm-Viewer direkt in den Chat holen. MZP ist dafuer
ungewoehnlich gut vorbereitet: viewer.js liest den Graphen allein aus
dem SVG-DOM und kommt ohne Framework aus. Genau das braucht ein Iframe in der Sandbox.
Dahinter kommen drei Funde, die jeweils eine Luecke schliessen, die der Code selbst zeigt:
NodeContentMetrics schaetzt Textbreiten mit festen 8 px pro Zeichen
(Pretext-Muster). LAYOUT_QUALITY meldet, wie viele
Kreuzungen es gibt, aber nicht wo (Befund-Overlay nach dem Muster von VFLM und IntroSVG).
Und die Tool-Beschreibungen werden von Hand gepflegt, obwohl es seit MZP-113 ein Eval-Mass gibt,
gegen das man sie optimieren koennte (GEPA-MCP-Adapter).
Die Moonshots sind absichtlich verrueckt: eine isometrische Skin-Variante, die Ratschen als
begehbare 3D-Code-Stadt und eine Klangspur fuer den Simulationsmodus.
Auf einen Blick
Stand 2026-10-02 (gegen mainfffe69d, das Backlog und Produktion geprueft): 14 von 20 Funden sind bearbeitet (A1–A5, C1, C2, C4, D1–D4, D6, E2), A7 hat ein Ticket ohne Umsetzung,
5 sind offen (A6, C3, C5, D5, E1). Neu seit dem 01.10.: D3 und D2 sind gebaut und live. ASCII-Skizzen sind die vierte Diagramm-Eingabe (Parameter ascii, die Lage wird zu constraints[]), und der Tuschestrich steht als analog@1.1.0 unter /lib/. Der Folgebug MZP-145 (Filterregion) ist behoben und ebenfalls live. Die drei Umsetzungen seit dem 01.10. sind nachtraeglich als Tickets verbucht: A4/N7 als MZP-146, D2 als MZP-147, D3 als MZP-148, alle auf REVIEW. Davor, seit dem 29.09.: der Moonshot A4 ist gebaut und live, zusammen mit N7 —
constraints[] in der Spec, Layout-Wuensche per Geste und Tastatur aus dem Chat-Viewer. Die Abnahme-Runde hat zehn
Tickets dieses Berichts auf DONE gebracht (MZP-119 bis 124, 127, 129, 130, 132). D1 ist ohne vtracer erledigt (Inventar mit Pixelkoordinaten,
MZP-139), der D4-Blocker faellt mit getCapabilityFor('analog') (MZP-137), und D6 steht als Admin-Rubrik ix.
Aus der „Naechsten Runde“ sind N3 und N9 live, N1 ist mit einer echten A-Messung beendet.
„live“ heisst: auf publisher.maierzone.de deployt und dort nachgeprueft.
REVIEW heisst: umgesetzt, Abnahme steht aus. DONE heisst: abgenommen.
#
Fund
Front
Label
Andockstelle
Stand 02.10.
A1
MCP Apps — Viewer im Chat
Engine / MCP
ticket-reif
DiagramMcpTools, mzone-mcp-common
abgenommen MZP-126 · DONE, live im echten Claude-Host nachgewiesen (29.09.), Bug MZP-128 damit ebenfalls DONE, Spike MZP-118 DONE. Statische ui://mzp/diagram-viewer, Rueckkanal Knotenauswahl → ui/update-model-context. Restgrenze: Kopier-Knoepfe im Chat-Widget ohne Funktion, dort nicht gebraucht
A2
Pretext — echte Textmasse
Engine
ticket-reif
NodeContentMetrics
abgenommen MZP-119 · DONE, live im Browser nachgemessen: max. 2,3 % Abweichung, 8 Skins
A3
libavoid / HOLA — Routing mit Nudging
Engine
ticket-reif
EdgeRouter, MZP-95
abgenommen MZP-129 · DONE, live EdgeNudger: Overlaps 269 → 235, Kreuzungen 56 → 54, Knicke 988 → 936. Die Ursache im Router (N5) ist weiter offen
umgesetzt MZP-146 · REVIEW, live (01.10.) constraints[] mit sameRank, before, order (flussbezogen, hoechstens 12) als harte Vorgabe fuer Rang und Reihenfolge. Widersprueche sind ERROR mit Vorschlag, an Pins oder Zonen scheiternde Vorgaben WARNING CONSTRAINT_UNMET. Live-Probe: 2 Vorgaben, 0 verletzt
Motion Canvas / Revideo — WebM ohne neue Abhaengigkeit
Viewer / Export
ticket-reif
mzone-render, MZP-56
Ticket MZP-56 · IDEA SVG-Knopf (Teil 1) schon frueher gebaut; WebM wartet weiter auf MZP-85 (READY, nicht gezogen)
C1
GEPA — Tool-Beschreibungen optimieren
Agent
ticket-reif
@McpTool-Texte, MZP-113
abgenommen MZP-123 · DONE Kein GEPA. Folge MZP-127 · DONE: A-Lauf am 29.09. nachgeholt. A und B messen gleich (Sonnet 15/15 beide, Haiku 14/15 vs. 13/15, Median 2 Aufrufe beide). B bleibt, kein Ausrollen auf weitere Tools: Beschreibungstext bewegt die Erfolgsquote in diesem Korpus nicht messbar. GEPA bleibt damit vom Tisch
C2
VFLM / IntroSVG — Befund-Overlay
Agent / Engine
ticket-reif
LayoutQuality, validateDiagram
abgenommen MZP-120 · DONE, live (hotspots[]) Teil 2 ersetzt durch N2: MZP-132 · DONE. Nummerierte Marker im Chat-Viewer, im echten Claude-Host abgenommen
ersetzt MZP-139 · REVIEW ohne vtracer: das Modell liefert das Skizzen-Inventar selbst mit Pixelkoordinaten (inventar.json), die Deckungspruefung im Sketch-Workflow gleicht es mit den Rahmen der Reinzeichnung ab. Herkunft: Band 5 (H4)
D2
perfect-freehand + rough-notation — Tuschestrich
Handwerk
ticket-reif
analog-v1, /lib/
umgesetzt MZP-147 · REVIEW, live (02.10.) analog@1.1.0 mit data-tusche="schwell|filter|beide". Die Kontur rechnet der Server beim Validieren und Publizieren in Java (TUSCHE_APPLIED), der Handkreis ist reines CSS. Keine Bibliothek. Folgebug MZP-145 · REVIEW, live
D3
svgbob — ASCII-Kritzel als Eingabe
Handwerk / Engine
Muster
mermaid/-Paket als Vorbild
umgesetzt MZP-148 · REVIEW, live (02.10.) Parameter ascii an validateDiagram/publishDiagram, getCapabilityFor('ascii'). Kaesten, Zonen, Unicode-Boxzeichen, Beschriftung, gestrichelte Kanten. Laufrichtung und order aus der Lage. Live-Probe: 3 Kaesten, 0 Kreuzungen, Richtung LR abgeleitet
D4
StarVector / OmniSVG / SkeTikZ — Datensatz als Eval-Korpus
Handwerk / Evals
Moonshot
evals/tasks
abgenommen MZP-130 · DONE SkeTikZ nicht uebernehmen. Der Blocker „Server erklaert den Stil nicht“ ist geloest: /lib/analog@1.0.0 und getCapabilityFor('analog') (MZP-137, REVIEW, live). Die Eval-Aufgaben selbst warten als MZP-141 (IDEA)
D5
Tone.js — Klangspur
Viewer
Moonshot
MZP-85
offen
D6
CodeCharta — die Ratschen als Stadt
Handwerk / Gates
Moonshot
three@0.170.0, livedata/
umgesetzt MZP-144 · committet nicht oeffentlich, sondern als Admin-Rubrik ix. (/admin/ratschen): Schnappschuss aus priv-ratschen-stadt, gebaut von scripts/ratchet-city.py. Keine Live-Quelle, Register-Interna bleiben privat. Backlog-Status noch IDEA
E1
pixelmatch / odiff — Pixel-Baseline
Gates
ticket-reif
LayoutQualityRatchetTest, mzone-render
offen
E2
greadability — Lesbarkeitsmetriken
Gates
ticket-reif
LayoutQuality
abgenommen MZP-121 · DONE, live (Registersumme 26,95) edgeLengthCv; Kreuzungswinkel gestrichen (Router nur rechtwinklig)
A · Diagramm-Engine und Viewer
Nach der Archify-Paritaet (MZP-88 bis 93) und dem Layout-Paket vom 2026-09-22 (MZP-109 bis 112) ist der
Viewer weit. Was jetzt noch Wirkung hat, liegt entweder ausserhalb der Seite (im Chat) oder tief
in der Geometrie (Textmasse, Routing).
A1 · Protokoll
MCP Apps — der Viewer zieht in den Chat
github.com/modelcontextprotocol/ext-apps (~2,9k Sterne, Spec 2026-01-26, aktiv) · github.com/MCP-UI-Org/mcp-ui (~5,2k, Apache-2.0) · Hosts laut Support-Matrix: Claude Web/Desktop, ChatGPT, VS Code Copilot, M365 Copilot, Cursor, Goose, MCPJam
Die Idee: Ein Tool verweist in seinen Metadaten auf eine ui://-Ressource (HTML), und der Host rendert sie als Iframe in einer Sandbox direkt in der Unterhaltung, mit einem Nachrichtenkanal zurueck zum Server.
ticket-reifGroesster Hebel der Runde, zuerst als Spike
Heute endet publishDiagram mit einer URL, und der Mensch wechselt in den
Browser. Mit MCP Apps stuende der interaktive Viewer mit Radar, Linse, Steckbrief und Drill-down
direkt unter der Antwort. Die Voraussetzungen sind ungewoehnlich gut:
viewer.js und radar.js sind Vanilla-IIFEs,
die nur aus dem SVG-DOM lesen. Sie brauchen keinen Server-Zustand und kein Framework, also genau
das, was in einer Sandbox ohne Netz funktioniert.
Zugeschnitten auf MZP
(1) Eine Ressource ui://mzp/diagram/{slug}, die das vorhandene
Viewer-Bundle (DiagramViewerAssets) samt SVG inline ausliefert.
(2) publishDiagram und validateDiagram verweisen
in den Tool-Metadaten auf diese Ressource, und die Preview erscheint im Chat, bevor publiziert wird.
(3) Der Rueckkanal ist das eigentlich Extravagante: Klickt der Mensch im Chat-Viewer einen Knoten an,
geht die Auswahl als Kontext an den Agenten zurueck („diesen Knoten aufteilen“).
Spike-Frage vorab: Traegt die Java-SDK 2.0.0 bzw. die Spring-AI-Annotation @McpTool
die noetigen _meta-Felder? Falls nicht, betrifft das
mzone-mcp-common und damit mehr als dieses Repo (AGENTS.md-Warnung).
beruehrt: DiagramMcpTools, DiagramViewerAssets, mzone-mcp-common · Werkbank zum Testen: MCPJam/inspector · Stufe: Spike, dann Story
A2 · Geometrie
Pretext — echte Textmasse statt 8 Pixel pro Zeichen
github.com/chenglou/pretext (~50,6k Sterne, MIT, aktiv) · Mehrzeilige Textmessung und Umbruch ohne DOM-Reflow, ueber Canvas-Metriken, laeuft auch serverseitig
Die Idee: Text einmal vorbereiten (prepare), danach Hoehe, Zeilen und Breite rein arithmetisch berechnen (layout). Das ermoeglicht Shrink-Wrap, ausbalancierte Zeilen und Text, der um Hindernisse fliesst.
ticket-reifDas Muster uebernehmen, die Bibliothek nicht
NodeContentMetrics rechnet Knotenbreiten mit
NAME_CHAR_W = 8 und SUB_CHAR_W = 5.5. Ein „WWW“
wird damit zu schmal geschaetzt, ein „iii“ zu breit. Das eine erzeugt Ueberlaeufe, das andere verschenkt Platz,
und beides wirkt ueber die Knotengroesse bis ins Layout und in LAYOUT_QUALITY
hinein. Die Schriften liegen bereits im Haus (fonts-maierzone@1.0.0).
Zugeschnitten auf MZP
Serverseitig mit java.awt.font gegen die gebuendelten Font-Dateien messen.
Das ist JDK, also keine neue Abhaengigkeit, und die Werte werden je (Schrift, Groesse, Zeichen) gecacht.
Von Pretext uebernommen wird die Umbruch- und Balance-Logik (ausgeglichene Zeilen statt Gierumbruch).
Die Schaetzung bleibt als Rueckfall bestehen. Die Layout-Ratsche meldet danach ein Schrumpfen, und das
ist in diesem Fall erwuenscht.
Die Idee: Kanten werden als kuerzeste orthogonale Wege um Hindernisse gesucht. Danach schiebt ein eigener Schritt (Nudging) parallel verlaufende Segmente auf Abstand, damit sie sich nicht ueberdecken. Dazu minimiert das Verfahren Kreuzungen und Knicke als eigene Kosten.
ticket-reifAlgorithmus als Referenz, kein Fremdcode (LGPL, C++)
EdgeRouter baut Elbow-Routen und weicht auf die andere Achse aus, wenn die
Primaerroute eine fremde Box kreuzt. Das ist eine gute Heuristik, aber eben keine Suche. Die Beschwerde in
MZP-95 (Knaeuel bei wachsender Knotenzahl) ist genau der Fall, fuer den Nudging erfunden wurde:
Parallelfuehrung auf derselben Rasterlinie.
Zugeschnitten auf MZP
Nur den Nudging-Schritt nachbauen: Nach dem Routing werden kollineare Segmente gesammelt, nach
Ziel sortiert und in 4-px-Schritten (DiagramRules.GRID) aufgefaechert.
Das ist klein, testbar und wird von der LayoutQualityRatchetTest direkt
gemessen (connectorOverlaps muss sinken).
Umgesetzt als MZP-129 (EdgeNudger, am Ende von EdgeRouter.routeAll): Schrittweite 8 px statt 4, kreuzungsbewusst, dazu eine Glaettung von Kehrtwenden auf derselben Linie, die den Grossteil der Knick-Verbesserung bringt.
A4 · Denkmodell
Penrose und Bluefish — Beziehungen statt Koordinaten
Die Idee: Penrose trennt Substance (was existiert), Style (wie es aussieht) und Domain (was es geben darf) und loest das Layout als Optimierung ueber Randbedingungen. Bluefish macht Beziehungen wie Align, Stack und Distribute zu eigenstaendigen Elementen des Diagramms.
MoonshotDie dritte Eingabeform neben x/y und Auto-Layout
MZP hat die Trennung schon zur Haelfte: DiagramSpec entspricht Substance,
DiagramVariant und DiagramSkinCss entsprechen Style,
DiagramTypeSchemas entspricht Domain. Was fehlt, ist die Zwischenstufe zwischen
„alles pinnen“ und „alles der Engine ueberlassen“. Heute muss ein Agent, der „Cache steht rechts neben
API“ will, Koordinaten setzen, und die Engine laesst das Diagramm dann komplett in Ruhe
(LayoutEngine.apply-Fruehausstieg).
Zugeschnitten auf MZP
Ein optionales Feld constraints[] in der Spec
({"rightOf":["cache","api"]}, {"align":"y","nodes":[...]},
{"sameRank":[...]}), das der Sugiyama-Pfad als Vorgabe fuer Rang und Reihenfolge
nimmt. Kein Optimierer wie bei Penrose, sondern harte Vorgaben fuer RankAssignment
und OrderingPass. Verletzte Constraints meldet der Validator als Notice.
Das ist der Grund fuer das Label Moonshot: Es greift in den Kern von layout/ ein.
Umgesetzt am 2026-10-01 zusammen mit N7 als MZP-146 (Spec docs/superpowers/specs/2026-10-01-layout-constraints-design.md). Anders als hier skizziert: kein Bildschirmvokabular wie rightOf und kein align, sondern flussbezogene Arten sameRank, before und order — die Engine garantiert nur, was Rang und Reihenfolge hergeben. Bausteine: ConstraintGraph, ConstraintRanks, ConstraintOrder, ConstraintValidator. Eine Golden-Baseline fuer das Auto-Layout sichert ab, dass Diagramme ohne Vorgaben unveraendert bleiben. Mit Mermaid traegt das Overlay die Vorgaben.
LikeC4 — der naechste Paritaets-Massstab nach Archify
github.com/likec4/likec4 (~5,7k Sterne, MIT, Push 2026-09-25) · Architecture-as-Code mit Live-Diagrammen aus dem Code, VS-Code-Erweiterung, eigenem MCP-Server
Die Idee: Ein Modell, viele Sichten. Dynamic Views erzaehlen einen Ablauf Schritt fuer Schritt ueber dieselben Elemente, man navigiert zwischen den Ebenen, und die Diagramme bleiben aktuell, weil sie aus dem Modell generiert werden.
BenchmarkArchify hat die Viewer-Paritaet getrieben, LikeC4 kann die Modell-Paritaet treiben
Archify war ein Viewer-Vergleich, und der ist abgearbeitet. LikeC4 misst eine andere Achse: Wie viel
Modell steckt hinter dem Bild? Bei MZP sind Drill-down (MZP-111), Views/Kapitel (MZP-54),
Simulation (MZP-85) und der Code-Mapper (MZP-88) einzelne Bausteine. Bei LikeC4 sind es Sichten auf
ein Modell. Eine Paritaetsliste nach dem Muster von Archify zeigt, welche Luecken echt sind und
welche MZP bewusst anders loest.
Zugeschnitten auf MZP
Ein SPIKE: LikeC4 lokal gegen dieses Repo laufen lassen, dieselbe Architektur wie
code-to-architecture-mapper modellieren und die Ergebnisse nebeneinanderlegen.
Heraus kommt eine gewichtete Paritaetsliste. Kein Code.
Die Idee: Infrastruktur-Diagramme als isometrische Szene mit Kacheln auf einer Rautenebene, Knoten als extrudierte Bloecke und Kanten als Pfade am Boden.
MoonshotBilliger, als es aussieht: eine Projektion, kein neues Layout
Das Layout bleibt, wie es ist. Isometrie ist eine affine Abbildung
(matrix(0.866, 0.5, -0.866, 0.5, 0, 0)) ueber die fertigen Koordinaten,
dazu zwei Seitenflaechen je Knoten fuer die Tiefe. Fuer deployment und
architecture waere das eine neue DiagramVariant,
die in einem Pitch-Deck verlaesslich die meisten Blicke bekommt.
Zugeschnitten auf MZP
Eine Variante iso im SvgRenderer: Die Projektion
wirkt auf die Szenengruppe, und Beschriftungen werden zurueckprojiziert, damit sie lesbar bleiben. Der
Viewer muss mitspielen (getBBox-Treffer fuer Radar und Hover). Deshalb Moonshot:
Die Wirkung ist gross, aber die Nebenwirkungen im Viewer sind noch nicht vermessen.
Die Idee: Animation als Code mit exakten Frames, gerendert zu Video, bei Revideo sogar headless per API.
ticket-reifDie ehrliche Antwort ist die kleinere: kein neues Werkzeug
MZP-56 hat WebM an Bewegung gekoppelt. Die gibt es seit MZP-54 (trace), und
mit MZP-85 kommt der skriptgesteuerte Playback dazu. mzone-render faehrt schon
Playwright 1.50, und Playwright nimmt nativ Video auf (recordVideo). Die Seite
spielt den Playback ab, der Dienst filmt mit, und heraus kommt ein WebM ohne neue Abhaengigkeit.
Revideo lohnt sich erst, wenn Frame-Genauigkeit gebraucht wird, etwa fuer Schnittfassungen.
Zugeschnitten auf MZP
Neuer Endpunkt in mzone-render: Er oeffnet /published/{slug}/?play=1,
startet die Aufnahme, wartet auf ein Ende-Signal (window.__mzPlaybackDone)
und liefert diagram.webm als Begleitdatei. Die Share-Card 1200×630 aus MZP-56
entsteht auf demselben Weg als Screenshot.
beruehrt: mzone-render/server.js, DiagramPageRenderer · abhaengig: MZP-85 · Stufe: nach MZP-85
C · Agenten-Ergonomie am MCP
Der MZP hat sich in dieser Achse ueber Notices, Capabilities und Evals schon viel Ruf erarbeitet. Die
extravagante Erweiterung besteht darin, den Agenten sehen zu lassen, was er gebaut hat, und
Menschen zurueckreden zu lassen.
C1 · Selbstoptimierung
GEPA — Tool-Beschreibungen gegen die eigenen Evals optimieren
github.com/gepa-ai/gepa (~6,8k Sterne, MIT, aktiv) mit MCP-Adapter fuer stdio- und HTTP-Server · arXiv 2602.14878 „MCP Tool Descriptions Are Smelly!“ (2026)
Die Idee: Reflektive Optimierung. GEPA liest Ausfuehrungsspuren (Fehler, falsche Toolwahl), diagnostiziert, woran es lag, und schlaegt gezielt bessere Tool-Beschreibungen und System-Prompts vor. Es braucht dafuer einen Datensatz, eine Metrik und einen Startstand.
ticket-reifMZP hat alle drei Zutaten bereits im Haus
Der Datensatz sind die Aufgaben unter evals/tasks/, die Metrik ist das Gate von
/mzp-eval (gruen/gelb/rot), der Startstand sind die heutigen
@McpTool-Texte. Die Studie misst im Mittel +5,85 Prozentpunkte Erfolgsquote
durch bessere Beschreibungen, aber auch Rueckschritte in 16,7 % der Faelle. Genau deshalb passt es:
Das Eval-Gate faengt diese Rueckschritte ab.
Zugeschnitten auf MZP
Ein Offline-Lauf, kein Laufzeit-Feature: GEPA gegen eine lokale Instanz, das Ergebnis ist ein Diff auf die
Tool-Beschreibungen, den ein Mensch prueft. Nebenbei wird damit messbar, was die vielen Byte in den
Beschreibungen tatsaechlich bringen. Mancher Absatz duerfte sich als verzichtbar herausstellen.
github.com/FolSpark/VFLM („Seeing is Improving“, CVPR 2026, Apache-2.0) · IntroSVG (CVPR 2026, Generator-Kritiker-Schleife) · „See it. Say it. Sorted.“ (arXiv 2508.15222)
Die Idee: generieren, rendern, das Bild ansehen, gezielt verbessern. Die Arbeiten zeigen, dass Layouts in mehreren Runden besser werden, wenn das Modell das gerenderte Ergebnis sieht, statt nur Zahlen zu lesen.
ticket-reifMZP liefert heute das Wie-viel, aber nicht das Wo
validateDiagram meldet LAYOUT_QUALITY mit
edgeCrossings, connectorOverlaps und weiteren Zahlen,
dazu visualProof (sichtbare Formen). Mit „3 Kreuzungen“ weiss ein Agent aber nicht,
welche Kanten sich kreuzen, und muss raten. Die Geometrie dafuer rechnet
LayoutQuality bereits, sie wird nur zu einer Zahl verdichtet.
Zugeschnitten auf MZP
(1) LAYOUT_QUALITY bekommt eine Liste hotspots[] mit
Art, Koordinate und den beteiligten Kanten- bzw. Knoten-IDs. Das ist billig und rein textuell.
(2) Optional critique:true: ein kleines PNG ueber
DiagramRasterizer/mzone-render mit roten, nummerierten Markern an den Hotspots,
als MCP-Bildinhalt zurueckgegeben. Damit wird die Schleife aus den Papern im Tool selbst moeglich.
Annotorious + text-annotator — Review-Links, die zurueckreden
github.com/annotorious/annotorious (~870 Sterne, BSD-3, Push 2026-09-25) · github.com/recogito/text-annotator-js (BSD-3, aktiv) · beide speichern im Format W3C Web Annotation
Die Idee: Rechtecke, Polygone und Textmarkierungen direkt auf Bild und Seite zeichnen und als standardisiertes JSON ablegen.
ticket-reifMacht aus R13 eine Feedback-Schleife
Review-Links (R13, reviewTtlSeconds bis 7 Tage) bringen ein Artefakt zu
Menschen ohne Zugang. Deren Antwort kommt heute per Mail oder Chat, also formlos und ohne Ortsbezug.
Mit einer Anmerkungsschicht auf der Preview markiert der Reviewer „diese Kante ist falsch“ direkt am SVG,
und der Agent liest die Anmerkungen strukturiert zurueck, mit Koordinate und getroffener
data-node-id.
Zugeschnitten auf MZP
Anmerkungsschicht nur auf /preview/{token} (nicht auf
/published/), Ablage am ReviewPreviewFile-Datensatz, neues Lese-Tool
getReviewAnnotations(previewToken). Die Bibliotheken wandern nach
/lib/. Sie sind BSD-lizenziert und liegen im Browser des Reviewers, nicht im
Spring-Prozess.
beruehrt: ReviewPreviewStore, neue Flyway-Migration, neues MCP-Tool · Stufe: mittelfristig
C4 · Gattungen
visual-explainer — Seitengattungen, die MZP hosten sollte
github.com/nicobailon/visual-explainer (~9,9k Sterne, MIT, Push 2026-08) · Agent-Skill fuer Claude Code, Cursor, Pi u.a.
Die Idee: feste Seitengattungen fuer Agentenarbeit wie /diff-review, /plan-review, /project-recap und /fact-check, jede mit einem eigenen Aufbau statt einer ASCII-Tabelle im Terminal.
MusterDas Skill schreibt nach ~/.agent/diagrams, MZP haette Versionierung, Validierung und eine URL
Fast 10k Sterne zeigen die Nachfrage. Das Projekt endet aber auf der lokalen Platte. MZP hat alles,
was danach kommt: validateArtifact mit Browser-Blick, Versionen, Review-Links
und Live-Daten. Interessant sind die Gattungen selbst, vor allem fact-check (ein Dokument
gegen den Code pruefen) und project-recap (Wiedereinstieg nach einer Pause).
Zugeschnitten auf MZP
Zwei neue Agent-Workflows unter docs/agent-workflows/:
diff-review.md (ein Branch wird zur Seite mit einem diffDiagram
und den geaenderten Ratschen-Werten) und project-recap.md (Backlog, letzte Commits und
offene REVIEW-Tickets als lebender Report mit liveData: ["backlog"]). Kein Core-Code.
beruehrt: docs/agent-workflows · Stufe: sofort
C5 · Vorstufe
GitNexus — ein Code-Wissensgraph vor dem Architecture-Mapper
github.com/abhigyanpatwari/GitNexus (~47,6k Sterne, Push 2026-09-27, Lizenz „Other“, vor jeder Nutzung pruefen) · Code-Graph ohne Server, laeuft im Browser, mit MCP-Anbindung
Die Idee: ein Repo in einen Wissensgraphen aus Symbolen, Aufrufen und erkannten Clustern bzw. Communities verwandeln, abfragbar durch Agenten.
MusterDie Clusterbildung ist genau der Schritt, den der Mapper von Hand macht
Der code-to-architecture-mapper (MZP-88) muss ein Repo auf 9 Knoten und
12 Kanten verdichten, und diese Aggregation ist der schwierigste Schritt im Workflow. Eine
Community-Erkennung auf dem Aufrufgraphen liefert Kandidaten fuer die 9 Knoten mit Begruendung
(Kohaesion) statt nach Gefuehl.
Zugeschnitten auf MZP
Nur als optionaler Vorschritt im Workflow-Dokument: Wer GitNexus (oder den hauseigenen IntelliJ-MCP mit
analyze_calls) zur Hand hat, laesst sich die Cluster geben, bevor die Aggregation
beginnt. Solange die Lizenz nicht geklaert ist, bleibt es beim Muster.
Sketch-to-Figure (MZP-107/108) und analog-v1 sind reines Agenten-Handwerk ohne
Engine. Hier liegen die schoensten und die verruecktesten Funde.
D1 · Deckung
vtracer — pruefen, ob die Reinzeichnung zur Skizze passt
github.com/visioncortex/vtracer (~7,1k Sterne, MIT, Push 2026-09-26) · Raster zu Vektor, Rust, CLI und WASM
Die Idee: ein Pixelbild in saubere SVG-Pfade zerlegen, farbig oder binaer, mit einstellbarer Glaettung.
ticket-reifMacht die Treue zur Skizze messbar
Der Workflow verspricht „Skizze treu“. Geprueft wird heute aber nur die innere Passung
(.frame-Konvention, Toleranz 0), nicht die Treue zum Foto. Vektorisiert man das
Skizzenfoto, erhaelt man Kasten- und Linienkandidaten mit Koordinaten. Legt man diese ueber die Rahmen der
Reinzeichnung, faellt ein vergessener Kasten oder ein vertauschter Pfeil auf, bevor ein Mensch hinschaut.
Zugeschnitten auf MZP
(1) Die Umschaltebene Skizze/Reinzeichnung bekommt optional eine vektorisierte Skizze statt des JPEGs.
Das ist leichter und skaliert scharf. (2) Ein Deckungsbericht im Workflow: Jeder Rahmen der Reinzeichnung
sucht seinen Partner in der Trace, und Rahmen ohne Partner werden gemeldet. vtracer laeuft beim Agenten
oder als WASM im Browser, der MZP-Kern bleibt unberuehrt.
Erledigt ohne vtracer (MZP-139, aus Band 5): Seit das Modell Rahmen in absoluten Pixelkoordinaten liefert, wird das Inventar zur Begleitdatei inventar.json, und die Deckungspruefung laeuft gegen dieses Inventar statt gegen eine Vektor-Trace.
perfect-freehand + rough-notation — Tuschestrich und Handmarkierung
github.com/steveruizok/perfect-freehand (~5,7k Sterne, MIT, Push 2026-04) · github.com/rough-stuff/rough-notation (~9,7k, MIT; seit 2024 still, aber abgeschlossen und klein)
Die Idee: perfect-freehand macht aus einer Punktfolge eine Kontur mit simuliertem Druck, also an- und abschwellende Linien wie mit Feder. rough-notation zeichnet animierte Handmarkierungen (Kreis, Unterstreichung, Klammer, Highlight) um beliebige Elemente.
ticket-reifDer Kartografie-Stil bekommt seine Feder
analog-v1 zeichnet heute mit gleichmaessigem stroke-width.
Echte Kartografie lebt vom Schwellstrich. perfect-freehand erzeugt ihn deterministisch, also mit gleicher
Eingabe und gleichem Pfad, und bleibt damit versionierbar. rough-notation ist das fehlende Hover-Vokabular:
Beim Ueberfahren wird der Knoten von Hand eingekreist, statt nur einen Tooltip zu zeigen.
Zugeschnitten auf MZP
Beide nach /lib/ (immutable, mit Version im Pfad), dazu ein Baustein
tusche im Katalog von sketch-to-figure.md.
Die Selbstpruefung der Passung muss die Konturen statt der Mittellinien messen, was im Ticket festzuhalten ist.
Eine Abhaengigkeit des Spring-Dienstes entsteht dabei nicht, es sind nur ausgelieferte Browser-Dateien.
Umgesetzt am 2026-10-02 als MZP-147 (Spec docs/superpowers/specs/2026-10-02-analog-tusche-design.md), anders als hier skizziert: keine der beiden Bibliotheken unter /lib/. Der Server rechnet die Schwellstrich-Kontur nach dem perfect-freehand-Muster selbst (TuscheWriter, TuscheBundle), fest ins SVG geschrieben. Damit sehen Seite, figure.svg und figure.png gleich aus. Drei Stricharten (schwell, filter, beide), Opt-in allein ueber die Version: Blaetter auf analog@1.0.0 bleiben unberuehrt. Der Handkreis (rough-notation-Muster) ist ein CSS-Baustein. Die Passungspruefung misst die Kontur und nicht die Mittellinie, Eval art-analog-tusche. Folgebug MZP-145: Bei einer viewBox, die nicht bei 0 begann, schnitt die Filterregion Knoten in translate()-Gruppen weg. Behoben und am 02.10. live nachgeprueft (Region jetzt -Breite … Breite).
MZP-110 hat mit Mermaid gezeigt, wie eine fremde Eingabeform als Uebersetzer in eine
DiagramSpec ohne Koordinaten funktioniert. ASCII ist die Form, in der Agenten
ohnehin denken, und gleichzeitig eine abgetippte Handskizze. Aus einer ASCII-Zeichnung lassen sich Boxen
mit Text, Verbindungen und sogar die relative Lage gewinnen. Die Lage liefert A4 gratis Constraints.
Zugeschnitten auf MZP
Ein Paket diagram/ascii neben diagram/mermaid. Die
svgbob-Regeln dienen als Referenz, geschrieben wird in Java, weil nur Boxen, Kanten und Labels gebraucht
werden, nicht svgbobs volle Zeichenkunst. Unbekanntes wird strukturiert als Fehler gemeldet, wie bei
MERMAID_UNSUPPORTED.
Umgesetzt am 2026-10-01/02 als MZP-148 (Spec docs/superpowers/specs/2026-10-01-ascii-input-design.md) als eigener Raster-Scanner in Java, ohne svgbob-Code, WASM oder Sidecar. Eingang ist ein eigener Tool-Parameter ascii und kein Feld im JSON, damit Backslashes und Zeilenumbrueche nicht maskiert werden muessen. diagramJson wirkt als Overlay (Titel, nodeType, Icons). Die Lage wird wie geplant zu Vorgaben: Laufrichtung aus den Pfeilen, Kaesten auf derselben Fluss-Ebene als order. Mermaid und ASCII teilen sich jetzt importer/ (Overlay, Ids). Die Fehlermeldungen zeigen den Weg (ASCII_EDGE_DANGLING mit Zeile und Spalte: „Zwischen Linie und Kastenrand darf kein Leerzeichen stehen“). In der Live-Probe ist genau daran der erste Versuch gescheitert. Eval dia-ascii-architecture.
Die Idee: Bild-zu-SVG als Codegenerierung. Die Modelle sind gross, brauchen eine GPU und scheiden damit fuer den Betrieb aus.
MoonshotDie Handskizzen als Eval-Korpus fuer MZP-113
Interessant ist SkeTikZ: echte Handskizzen mit Referenzdiagramm. Das ist genau die Eingabe von Sketch-to-Figure.
Zwanzig ausgewaehlte Paare als evals/tasks/eval-sketch-* machen messbar, wie gut ein
Agent mit dem MZP-Werkzeug eine Skizze umsetzt, gemessen gegen die Referenz, etwa ueber Knotenzahl, Kantenzahl
und Deckung (siehe D1).
Zugeschnitten auf MZP
Moonshot, weil die Bewertung „passt die Figur zur Skizze“ erst mit D1 automatisierbar wird und die Lizenz des
Datensatzes vor der Uebernahme zu klaeren ist.
Die Idee: Musik und Klang im Browser programmieren, mit Takt, Synthesizern und Effekten.
MoonshotDer verrueckteste Fund, mit einem ernsten Kern
MZP-85 bringt Schritt-Arten (active | reject | commit | review | pass). Hoerbar
gemacht bekommt jede Art einen Klang: commit einen aufloesenden Akkord, reject eine Dissonanz,
die Tonhoehe folgt dem Rang des Knotens. Wer den Ablauf abspielt, hoert eine Schleife, bevor er sie sieht.
Der ernste Kern ist Sonifikation als Barrierefreiheit: Ein Ablaufdiagramm, das man hoeren kann, ist fuer
blinde Nutzer mehr als ein Alt-Text.
Zugeschnitten auf MZP
Opt-in-Knopf im Playback, standardmaessig stumm, prefers-reduced-motion gilt auch hier.
Tone.js wandert nach /lib/. Wenn es nur um fuenf Klaenge geht, reicht vielleicht
schon das rohe Web-Audio-API, und die Bibliothek entfaellt.
github.com/MaibornWolff/codecharta (~540 Sterne, BSD-3, Push 2026-09-26) · Code-Metriken als 3D-Stadt: Grundflaeche = LOC, Hoehe und Farbe = weitere Metriken
Die Idee: Ein Repo wird zur Stadtkarte, Pakete sind Viertel, Dateien Gebaeude. Wo es brennt, sieht man aus der Vogelperspektive.
MoonshotMZP hat die Daten, die Bibliothek und den Live-Mechanismus
Die Ratschen-Register tragen genau solche Zahlen: filesize.txt (LOC je Datei mit
Begruendung), coverage.txt (Abdeckung je Paket), boundaries.txt
(Kanten). three@0.170.0 liegt bereits unter /lib/,
und E11 kann Zahlen live liefern. Eine Stadt, in der jede Registerausnahme als rot gluehendes Hochhaus steht,
ist die ehrlichste Darstellung von „die Ratschen halten den Bestand, statt ihn zu verbessern“.
Zugeschnitten auf MZP
Eine neue Live-Datenquelle ratchets, die nur Zahlen liefert und damit
LiveDataShapeTest einhaelt, plus ein Artefakt mit Treemap-Layout und three.js.
Das Muster wird von CodeCharta uebernommen, nicht der Code.
Umgesetzt anders als geplant (MZP-144): keine Live-Datenquelle ratchets, sondern ein Schnappschuss city.json in priv-ratschen-stadt, gezeigt als Admin-Rubrik ix. Der Grund: Klassennamen und Registerbegruendungen gehoeren nicht auf eine oeffentliche Seite. Nach jedem Deploy neu bauen mit mvn test && python scripts/ratchet-city.py --publish.
pixelmatch / odiff — die Pixel-Baseline fuer den Layout-Korpus
github.com/mapbox/pixelmatch (~7k Sterne, ISC, ~150 Zeilen, keine Abhaengigkeiten) · github.com/dmtrKovalenko/odiff (~3,2k, MIT, SIMD) · github.com/lost-pixel/lost-pixel (~1,7k, MIT, als Vergleichsprojekt)
Die Idee: zwei Renderings pixelgenau vergleichen und ein Differenzbild erzeugen, als Alternative zu Percy oder Chromatic.
ticket-reifDie Zahlen-Ratsche um ein Bild-Gedaechtnis ergaenzen
LayoutQualityRatchetTest zaehlt Kreuzungen, Ueberlappungen und Knicke ueber einen
festen Korpus. Eine Aenderung, die die Zahlen haelt, das Bild aber verschiebt (Farbe, Abstand, Schrift),
rutscht durch. Zwei Anwendungen: (1) Pixel-Baseline fuer den Korpus in mzone-render,
(2) diffVersions bekommt ein visuelles Diff zwischen zwei Versionen einer Seite
als PNG mit markierten Aenderungsflaechen.
Zugeschnitten auf MZP
pixelmatch als einzige neue Abhaengigkeit, und zwar in mzone-render (Node), nicht im
Spring-Dienst. Eine Toleranzschwelle gehoert ins Register, mit Begruendung, wie bei jeder Ratsche.
greadability — Lesbarkeit von Graph-Layouts als Zahl
github.com/rpgove/greadability (~80 Sterne, BSD-3; seit 2018 still, verletzt damit die Aktivitaetsregel und wird bewusst nur als Definitionsquelle genommen) · Gove 2018, „It Pays to Be Lazy“
Die Idee: vier Metriken fuer die Lesbarkeit von Layouts, jeweils normiert auf 0 bis 1. Kreuzungsanteil, Kreuzungswinkel (90° ist gut), Winkelaufloesung am Knoten und Kantenlaengen-Varianz.
ticket-reifKlein: zwei Metriken fehlen in LAYOUT_QUALITY
LayoutQuality zaehlt Kreuzungen, misst aber nicht ihren Winkel. Eine
rechtwinklige Kreuzung liest sich fast so gut wie keine, eine spitze ist ein Knaeuel. Bei orthogonalem Routing
ist der Winkel zwar meist 90°, wichtig wird er bei Kurven und schraegen Kanten (Radial- und Mindmap-Layout).
Zugeschnitten auf MZPcrossingAngleMin und edgeLengthCv als zusaetzliche Felder
in LAYOUT_QUALITY und im Register layout-quality.txt.
Die Definitionen stehen im Paper, Code wird nicht uebernommen.
Sofort, klein, mit sicherer Wirkung: A2 Textmasse, C2(1) Hotspots, E2 Lesbarkeitsmetriken und
C4 zwei Workflow-Dokumente. Alle vier sind ohne neue Abhaengigkeit machbar, und drei davon misst die Layout-Ratsche direkt.
Spikes mit grossem Hebel: A1 MCP Apps (zuerst die Frage nach dem SDK), C1 GEPA gegen die Evals und
A5 LikeC4-Paritaetsliste.
Wenn Lust auf Glanz besteht: D2 Tuschestrich, A6 Isometrie und D6 Ratschen-Stadt. D5 Klangspur
bleibt der Joker nach MZP-85.
Stand 2026-09-27
Sofort-Block erledigt: A2 (MZP-119), C2 Teil 1 (MZP-120), E2 (MZP-121) und C4 (MZP-122).
Die Layout-Ratsche hat A2 mitgemessen (Kreuzungen 57 → 56, Overlaps 264 → 269) und traegt seit E2
eine vierte Zeile, edgeLengthCv. Der Kreuzungswinkel aus E2 ist gestrichen: der
EdgeRouter routet nur rechtwinklig, jede Kreuzung ist 90 Grad.
Spikes: A1 hat ueber den Spike hinaus gefuehrt, MZP-126 bringt den Viewer bereits in den Chat.
C1 endete mit „kein GEPA jetzt“, zuerst eine Kuerzungs-A/B (MZP-127). A5 LikeC4 (MZP-124) ist noch offen.
Naheliegend als Naechstes (27.09.): A5 LikeC4-Paritaetsliste, MZP-127 als billiger Test, ob
Beschreibungstext die Erfolgsquote bewegt, und A3 Nudging, weil die Overlap-Zahl der Ratsche genau dort haengt.
Alle drei wurden noch am selben Tag angegangen: A5 und A3 sind umgesetzt, bei MZP-127 ist Variante B live und die Messung offen. Siehe unten.
Naechste Runde · Stand 2026-09-28
Die erste Runde hat Bausteine geliefert, die einzeln fertig sind, aber noch nicht zusammenarbeiten:
hotspots[] weiss, wo es hakt, der Chat-Viewer (MZP-126) kann Dinge
zeigen und hat einen Rueckkanal, und die LikeC4-Liste nennt, was dem Modell hinter dem Bild fehlt.
Die folgenden Erweiterungen verbinden diese Teile. Sie sind nach Hebel pro Aufwand sortiert, und keine davon braucht eine
neue Abhaengigkeit.
#
Erweiterung
baut auf
Label
Andockstelle
Aufwand
Stand 02.10.
N0
Abnahme-Runde und Aufraeumen
alle REVIEW
Pflege
Backlog
1 h
weitgehend Stand 02.10.: auf REVIEW stehen MZP-133, 134, 136 bis 139 und 145 bis 148. A4/N7, D2 und D3 sind nachtraeglich als MZP-146 bis 148 verbucht. Offen: MZP-144 aus IDEA holen (committet und als Admin-Rubrik ix. gebaut)
N1
MZP-127 messen, dann ausrollen
C1
ticket-reif
run-llm.py, Top-5-Tools
Lauf + 1 Tag
abgenommen MZP-127: A = B. Nicht ausrollen, Muster beendet
N2
Hotspots im Chat-Viewer
C2 + A1
ticket-reif
chat-bridge.js, viewer.js
klein
abgenommen MZP-132 · DONE
N3
queryDiagram als MCP-Tool
A5 (Luecke 2)
ticket-reif
diagram.json, DiagramMcpTools
klein
umgesetzt MZP-133 · REVIEW, live. direction=in|out|paths, depth, version
N4
DRILLDOWN_EDGE_MISSING
A5 (Luecke 1), MZP-111
ticket-reif
DiagramValidator
klein
offen
N5
Kehrtwenden an der Quelle vermeiden
A3
ticket-reif
EdgeRouter, EdgeNudger
mittel
offen
N6
MZP-85 ziehen, als Knoten fuer A7 und D5
A7, D5
Entscheidung
viewer.js, SimulationValidator
gross
offen
N7
Auswahl im Chat als Constraint
A1 + A4
Moonshot
chat-bridge.js, layout/
gross
umgesetzt zusammen mit A4 als MZP-146 · REVIEW, live. Abnahme im echten Host steht aus
N8
Visuelles Diff im diff-review
C4 + E1
ticket-reif
mzone-render, diff-review.md
mittel
offen
N9
Mermaid-Fehler, die weiterhelfen
MZP-127 (Befund)
ticket-reif
diagram/mermaid
klein
umgesetzt MZP-134 · REVIEW, live: die Meldung nennt die vier Dialekte und verweist auf diagramJson. Folgebefund MZP-135 (Phantomknoten)
N10
analog-v1 vom Server erklaeren
MZP-130 (Blocker 4)
ticket-reif
getCapabilityFor
klein
umgesetzt MZP-137 · REVIEW, live als getCapabilityFor('analog') samt 30 Bausteinen und 'analog.<key>'
N0 · Pflege
Abnahme-Runde, bevor Neues dazukommt
Im Backlog stehen aus dieser Recherche allein acht Tickets auf REVIEW (MZP-119, 120, 121, 122, 123, 124, 126 und 129).
Solange sie dort liegen, weiss niemand, ob „umgesetzt“ auch „abgenommen“ heisst. Dazu kommt Buchhaltung:
Das Spike-Ticket MZP-118 steht noch auf IDEA, obwohl MZP-126 es inhaltlich erledigt hat.
MZP-128 („Tool behauptet ein Chat-Widget, das es nicht gibt“) ist am selben Tag entstanden
wie MZP-126 und muss gegen einen MCP-Apps-faehigen Host neu bewertet werden: Dort stimmt der Hinweis inzwischen.
Relevant bleibt er nur fuer Hosts ohne MCP Apps.
beruehrt: Backlog · Stufe: sofort
N1 · Messen
MZP-127 zu Ende messen und das Muster ausrollen
Variante B ist live, die Beschreibung von validateDiagram ist von 7.160 auf 3.780 Zeichen gefallen.
Die Messung A gegen B steht aber aus, und das Ticket selbst verlangt sie, bevor etwas als gut gilt. Dabei ist ein Haken zu beachten:
Der Plan sah A vor dem Deploy vor. Da B jetzt schon live ist, muss A gegen einen lokalen Stand vor
a22e331 laufen, sonst werden zweimal dieselben Texte verglichen.
Naechster Schrittrun-llm.py --tasks dia-architecture-auto,dia-diff,dia-mermaid-flow,dia-quadrant-longlabels,dia-radar-wrapped
gegen beide Staende. dia-mermaid-flow ist der kritischste Test, weil die Syntax jetzt nur noch
ueber getCapabilityFor('mermaid') zu finden ist. Haelt B, geht das Muster (Leitfaden auslagern, Namen
im Text lassen) auf publishArtifact, validateArtifact,
publishAsset und getCapabilities. Das spart geschaetzt noch einmal 8–10k
Zeichen je Sitzung.
Hotspots im Chat-Viewer statt eines markierten PNG
C2 Teil 2 wollte ein PNG mit roten Markern ueber DiagramRasterizer zurueckgeben. Seit MZP-126
gibt es dafuer einen billigeren Weg: Der Chat-Viewer rendert das Diagramm ohnehin, und hotspots[]
liefert Art, Koordinate und IDs. Die Live-Probe vom 2026-09-28 zeigt das Format:
{"kind":"connectorOverlap","x":272,"y":164,"ids":["e1","e2"]}.
Die Marker kommen als Overlay-Schicht in den Viewer, und die betroffenen Kanten werden mit dem vorhandenen
markActive hervorgehoben.
Zugeschnitten auf MZPgetDiagramChatView reicht die Hotspots der Preview mit durch, und viewer.js zeichnet nummerierte
Marker. Wenn der Mensch einen Marker anklickt, geht „Hotspot 2: e1/e2 decken sich“ ueber
ui/update-model-context an den Agenten. So entsteht die Schleife aus VFLM und IntroSVG, bei der
der Mensch zeigt, wo es hakt. Kein Rasterweg und kein Bild im Modellkontext.
Das ist Luecke 2 aus MZP-124. Der LikeC4-MCP bietet query-incomers-graph,
query-outgoers-graph und find-relationship-paths. MZP hat Reach-Trace und
Routen-Sonde, aber nur im Browser. Ein Agent kann einen publizierten Graphen deshalb nicht fragen, was von
db abhaengt, ohne das ganze JSON in den Kontext zu laden.
Zugeschnitten auf MZP
Ein Lese-Tool queryDiagram(slug, nodeId, direction=in|out|paths, to?) ueber das
diagram.json im Bundle, gelesen wie in DiagramDeltaService.
Es liefert nur IDs, Labels und Kanten-Keys, keine Geometrie. Die BFS-Logik existiert schon in viewer.js,
in Java sind das rund 60 Zeilen. Zusammen mit props.drillDown kann der Agent Pfade auch ueber
Unterdiagramme hinweg verfolgen.
Das ist die billige Form von Luecke 1 aus MZP-124. LikeC4 hebt Kanten automatisch in die hoeheren Ebenen, weil alles ein Modell ist.
MZP verbindet zwei unabhaengige Specs ueber drillDown, deshalb koennen die Kanten auseinanderlaufen.
Statt ein gemeinsames Modell zu bauen, reicht eine Pruefung: Kanten, die im Unterdiagramm nach aussen fuehren, brauchen eine
Entsprechung am Elternknoten.
Zugeschnitten auf MZP
Heute prueft DrillDownCheck.missingTargets nur, ob der Ziel-Slug existiert. Neu laedt die Pruefung
das diagram.json des Ziel-Bundles, so wie DiagramDeltaService es fuer
diffDiagram schon tut. Fehlt eine Entsprechung, gibt es eine WARNING mit beiden Kanten-Keys. Wie
MISSING_REFERENCE (siehe offener Defekt D2 aus MZP-109..112) braucht es einen Test gegen Fehlalarme,
bevor die Pruefung live geht.
MZP-129 hat einen Router-Befund zutage gefoerdert: Der Router erzeugt Routen wie
(x,112) → (x,104) → (x,248). EdgeNudger.ohneZacken glaettet sie
nachtraeglich, das bringt den Grossteil der Verbesserung (Knicke −52). Die Ursache sitzt aber im Router. Solange nachtraeglich
geglaettet wird, rechnen Validator-Pfade vor dem Nudger auf verzackten Routen.
Zugeschnitten auf MZP
Im EdgeRouter die Stelle finden, an der Stub-Ende und Luecken-Waypoint gegenlaeufig liegen, und dort den Waypoint ueberspringen.
Die Glaettung bleibt als Netz, und ein Zaehler im Test haelt fest, wie oft sie noch greift. Das Ziel ist null.
Nebenbei gewinnt EdgeRouter Luft unter der Groessenratsche (577 Zeilen im Register).
Der Simulationsmodus steht seit dem 2026-09-07 auf READY, und der Spike MZP-87 hat Schema und DOM-Vertrag bestaetigt.
An ihm haengen A7 (WebM ueber Playwright recordVideo), D5 (Klangspur) und die
LikeC4-Beobachtung zu Dynamic Views: Schritt-Labels unabhaengig vom Kantenlabel mitdenken, also
text pro Schritt statt Kantenbeschriftung. Die Vorbedingung aus dem Ticket (MZP-91/92 landen lassen)
ist erfuellt, beide stehen auf DONE.
Zu entscheiden
MZP-85 ist P3, laut Ticket bewusst wegen des Demo-Werts. Wenn A7 oder D5 gewollt sind, muss es gezogen werden, sonst
bleiben beide Funde dauerhaft blockiert. Schritt 1 bleibt der offset-path-Prototyp gegen
atlas-plate-ii-mzone.
A4 (Constraints statt Koordinaten) scheiterte an der Frage, wie ein Agent „Cache rechts neben API“ ausdrueckt.
Mit dem Rueckkanal aus MZP-126 kann der Mensch es zeigen: Er zieht im Chat-Viewer zwei Knoten nebeneinander, die Bruecke
meldet {"rightOf":["cache","api"]} als Modellkontext, und der Agent schickt es als
constraints[] an validateDiagram. Die Engine behaelt das Auto-Layout und
nimmt den Wunsch nur als Vorgabe fuer Rang und Reihenfolge.
Warum Moonshot
Die Chat-Seite ist klein (Drag-Geste plus eine Meldung). Der Aufwand liegt in A4 selbst, also in
RankAssignment und OrderingPass. N7 macht A4 aber zum ersten Mal
nutzbar, ohne dass ein Agent Koordinaten raten muss.
Umgesetzt am 2026-10-01 als MZP-146 (chat-wuensche.js): Der Mensch formuliert Wuensche per Geste oder Tastatur im Chat-Viewer, die Bruecke meldet sie zusammen mit Auswahl und Hotspot als einen Kontext-Bericht an den Agenten, und der Agent schickt sie als constraints[] an validateDiagram. Der Viewer layoutet bewusst nicht selbst neu.
Der Workflow diff-review.md (MZP-122) zeigt das Architektur-Delta ueber diffDiagram
und die bewegten Ratschen-Zeilen. Was fehlt, ist das Bild: Wie sieht der Korpus nach der Aenderung aus? E1 (pixelmatch) wollte das als
Ratsche. Als Review-Beilage ist es kleiner und sofort nuetzlich: fuer die fuenf Korpusgraphen mit der groessten Aenderung in
layout-quality ein Vorher/Nachher-PNG und ein Differenzbild.
Zugeschnitten auf MZP
pixelmatch nur in mzone-render (Node, ~150 Zeilen, ISC). Der diff-review-Workflow bekommt einen optionalen
Schritt dafuer. Erst wenn sich das bewaehrt, wird daraus die Pixel-Ratsche aus E1, mit Toleranz im Register.
Zuerst N0 (Abnahme und Aufraeumen) und N1 (Messlauf). Beides kostet keinen Code und entscheidet,
ob die Tool-Texte der naechste grosse Hebel sind.
Dann ein Paket „Graph zum Anfassen“: N2, N3 und N4, alle klein, ohne Abhaengigkeit und aus
Befunden entstanden, die schon im Code stecken. Zusammen machen sie aus dem Viewer im Chat ein Werkzeug, mit dem Agent und
Mensch am selben Graphen arbeiten.
Offen zur Entscheidung: N6 (MZP-85 ziehen oder A7/D5 bewusst liegen lassen). N5 und N8 sind solide
Mittelfristkandidaten, N7 ist der Moonshot dieser Runde.
Unveraendert offen aus der ersten Runde: C3 Annotorious, C5 GitNexus, D1–D4, D6, E1, A6. Nichts davon ist
durch die neuen Befunde dringlicher geworden. D2 (Tuschestrich) bleibt der schoenste Glanz-Kandidat, weil
/lib/ weiter nur chart.js, d3, three und mzone-ui traegt.
N9 · Fehlermeldung
Mermaid-Fehler, die den Weg zeigen
Aus dem B-Lauf zu MZP-127: Beide Haiku-Fehlschlaege und ein teurer Umweg hingen nicht am Beschreibungstext, sondern an
der Fehlermeldung. Haiku erfindet Dialekte (architecture, quadrant-diagram)
und schreibt Subgraph-Ids mit Umlaut (prüfkette → „Zeile 12 nicht lesbar“). Das kostet
jeweils 1–4 Aufrufe.
Zugeschnitten auf MZP
Ein unbekannter Dialekt nennt in der Meldung die vier unterstuetzten und verweist auf diagramJson.
Ids mit Umlauten werden normalisiert (ae/oe/ue/ss), statt die Zeile abzulehnen. Messbar mit denselben fuenf
dia-*-Aufgaben gegen die Baseline vom 28.09.
Der D4-Spike (MZP-130) hat einen Blocker gefunden, der schwerer wiegt als die Lizenzfrage: Snippet, Bausteinkatalog und
.frame-Konvention leben nur in docs/agent-workflows/sketch-to-figure.md.
Ein Agent ohne Repo-Zugriff kann den Stil nicht kennen, und jede Sketch-Eval wuerde vor allem das messen.
Zugeschnitten auf MZP
Ein Eintrag getCapabilityFor('analog-v1') mit Snippet und Katalog, wegen des 8192-B-Budgets
nicht im Index von getCapabilities. Das ist die Voraussetzung fuer alles Weitere aus D1/D4.
beruehrt: CapabilitiesAssembler, sketch-to-figure.md · Stufe: vor jeder Sketch-Eval
Empfehlung · Stand 2026-10-02
Von den vier Punkten des Vortags sind die beiden groesseren erledigt: D3 (ASCII) und D2 (Tusche) sind gebaut und live.
Liegen geblieben sind die beiden kleinen. Der Bericht hat damit eine eigene Schieflage: Gebaut wird schneller,
als abgenommen und verbucht wird. Drei Funde liefen ohne Ticket in Produktion (inzwischen verbucht als MZP-146 bis 148), zehn Tickets warten auf REVIEW,
und zwei neue Evals sind noch nie gegen Produktion gelaufen. Der Bericht vom 01.10. zaehlt 13 Aufgaben, unter
evals/tasks liegen inzwischen 15.
1. Verbuchen und abnehmen (klein, sofort, kein Code). Erledigt am 02.10.: Tickets MZP-146 (A4/N7), MZP-147 (D2) und MZP-148 (D3) angelegt, die Platzhalter
im Code (A4/N7, (D2), (D3)) durch die Keys ersetzt.
Danach /mzp-eval laufen lassen (der Stand ist deployt), damit dia-ascii-architecture und
art-analog-tusche ihre erste Messung bekommen, und die REVIEW-Tickets (MZP-133, 134, 136–139, 145–148) abnehmen. Die Abnahme-Schritte stehen jeweils im Ticket.
Die LLM-Stufe fuer ASCII ist die eigentlich spannende Frage: Zeichnet ein Agent ohne Anleitung eine ASCII-Skizze, die der Scanner
ohne Korrekturrunde nimmt? Die Live-Probe sagt: nicht sicher, denn das Leerzeichen vor dem Kastenrand ist ein typischer Fehler.
2. MZP-135, dann N4 (unveraendert). Der Phantomknoten im Mermaid-Import ist weiterhin ein stiller Fehler. Seit Mermaid
und ASCII sich importer/ teilen, sollte die Pruefung „Kante auf Zonen-Id“ dort fuer beide Eingaben
gelten. N4 DRILLDOWN_EDGE_MISSING bleibt das letzte Stueck aus „Graph zum Anfassen“.
Danach: Aus Band 4 sind nur noch die grossen Funde offen: A6 Isometrie, C3 Annotorious, D5 Klang (haengt an MZP-85)
und E1 Pixel-Baseline. Dazu C5 als reines Dokument. Kleine, sichere Schritte gibt es hier nicht mehr. Die naechste Runde sollte deshalb
eine Richtungsentscheidung sein und kein weiterer Einzelfund.
Empfehlung · Stand 2026-10-01 (abgeloest)
Seit dem 29.09. ist der Bericht weitgehend abgearbeitet: Das Paket „Graph zum Anfassen“ steht bis auf N4, und der Moonshot
A4/N7 ist schneller gekommen als erwartet. Damit hat sich die Lage auf den drei Achsen verschoben.
Die Engine kennt jetzt Absicht und nicht nur Koordinaten. Am MCP kann der Agent
zeigen, fragen und Wuensche entgegennehmen. Beim Handwerk erklaert der Server den analog-Stil selbst
und misst die Passung (MZP-136 bis 139 aus Band 5).
1. A4/N7 festmachen (klein, sofort). Backlog-Ticket anlegen und den Platzhalter „A4/N7“ im Code durch den Key ersetzen
(Konvention: Ticket-Bezug im Kommentar). Danach die Abnahme im echten Claude-Host: Ein Knoten-Klick darf offene Wuensche nicht aus dem
Kontext loeschen, und die Geste muss auch per Touch gehen. Die LLM-Stufe der Eval dia-constraints hat noch keinen
verify-Schritt. Ob ein Agent order aus der Prosa findet, ist deshalb ungemessen.
2. MZP-135, dann N4. Der Phantomknoten im Mermaid-Import (Kante auf eine Subgraph-Id) ist ein stiller Fehler und betrifft
jetzt auch Constraints, weil das Overlay mit den normalisierten Mermaid-Ids arbeitet. N4 DRILLDOWN_EDGE_MISSING ist das
letzte kleine Stueck aus „Graph zum Anfassen“. Zusammen mit queryDiagram (MZP-133) ergibt es eine Konsistenzpruefung ueber Ebenen.
3. D3 svgbob neu bewerten. Der Fund hat durch A4 am meisten gewonnen. Bisher hiess es dort „die Lage liefert A4 gratis
Constraints“ — jetzt gibt es A4. Eine ASCII-Skizze traegt die Lage, die der Agent sonst erst in before/order
uebersetzen muss. Das Paket diagram/ascii neben diagram/mermaid wird damit vom Muster zum ticket-reifen Kandidaten.
4. D2 Tuschestrich als analog@1.1.0. Der Einwand „/lib/ traegt nur chart.js, d3, three und mzone-ui“
gilt nicht mehr: analog@1.0.0 liegt versioniert unter /lib/ und hat einen Bausteinkatalog. Ein Baustein tusche
landet dort als Minor-Version, und die Passungspruefung laeuft seit MZP-138 im Browser mit (FIGURE_FIT, FIGURE_COLLISION). Ob sie Schwellstrich-Konturen statt Mittellinien misst, gehoert ins Ticket.
Danach: N5 (Kehrtwenden im Router) bleibt der solide Engine-Kandidat, N8 und E1 der fuer die Gates. N6 (MZP-85, READY seit dem 07.09.)
bleibt die offene Grundsatzfrage, an der A7 und D5 haengen. N1 ist geschlossen: Beschreibungstext ist in diesem Korpus kein Hebel,
Fehlermeldungen schon (N9).
Mit dem Nachweis im echten Claude-Host ist die Frage beantwortet, an der die ganze zweite Runde hing: Der Chat-Viewer
funktioniert. Damit lohnt sich jetzt alles, was ihn nutzt, und der Rest tritt zurueck.
1. MZP-132 im echten Host abnehmen (Minuten). Ein validateDiagram mit bekanntem
connectorOverlap in claude.ai aufrufen, auf den Marker klicken und pruefen, ob die Meldung beim Agenten
ankommt. Danach die zehn REVIEW-Tickets dieses Berichts in einem Rutsch abnehmen (N0 zu Ende).
2. N3 queryDiagram, dann N4. Seit Viewer und Hotspots im Chat laufen, fehlt dem
Agenten nur noch das Gegenstueck: den Graphen befragen, ohne das JSON zu laden. Klein, keine Abhaengigkeit, und
zusammen mit N2 der Kern von „Graph zum Anfassen“.
3. N9 Mermaid-Fehlermeldungen. Der einzige Punkt, fuer den es schon Messdaten gibt, und der billigste Weg,
Haiku von 13/15 auf 15/15 zu bringen.
Danach: N10, falls der Sketch-Workflow weiter wachsen soll. N1-Ausrollen nur mit einer echten A-Messung vor dem
Deploy. N6 (MZP-85) bleibt die offene Grundsatzfrage. Als Moonshot hat N7 an Wert gewonnen, weil der Rueckkanal
aus dem Chat jetzt nachweislich traegt.