GitHub-Recherche · Band 4 · Extravaganzen

Was der MZP sich Verruecktes leisten koennte

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 main fffe69d, 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.

#FundFrontLabelAndockstelleStand 02.10.
A1MCP Apps — Viewer im ChatEngine / MCPticket-reifDiagramMcpTools, mzone-mcp-commonabgenommen
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
A2Pretext — echte TextmasseEngineticket-reifNodeContentMetricsabgenommen
MZP-119 · DONE, live
im Browser nachgemessen: max. 2,3 % Abweichung, 8 Skins
A3libavoid / HOLA — Routing mit NudgingEngineticket-reifEdgeRouter, MZP-95abgenommen
MZP-129 · DONE, live
EdgeNudger: Overlaps 269 → 235, Kreuzungen 56 → 54, Knicke 988 → 936. Die Ursache im Router (N5) ist weiter offen
A4Penrose + Bluefish — Beziehungen statt KoordinatenEngineMoonshotDiagramSpec, layout/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
A5LikeC4 — naechster Paritaets-BenchmarkEngine / ViewerBenchmarkMZP-85, MZP-88, MZP-111abgenommen
MZP-124 · DONE
Luecke 2 geschlossen durch MZP-133 (queryDiagram, REVIEW, live). Luecke 1 (Kanten ueber Ebenen) bleibt N4
A6FossFLOW / isoflow — isometrische SkinEngineMoonshotDiagramVariant, DiagramSkinCssoffen
A7Motion Canvas / Revideo — WebM ohne neue AbhaengigkeitViewer / Exportticket-reifmzone-render, MZP-56Ticket
MZP-56 · IDEA
SVG-Knopf (Teil 1) schon frueher gebaut; WebM wartet weiter auf MZP-85 (READY, nicht gezogen)
C1GEPA — Tool-Beschreibungen optimierenAgentticket-reif@McpTool-Texte, MZP-113abgenommen
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
C2VFLM / IntroSVG — Befund-OverlayAgent / Engineticket-reifLayoutQuality, validateDiagramabgenommen
MZP-120 · DONE, live (hotspots[])
Teil 2 ersetzt durch N2: MZP-132 · DONE. Nummerierte Marker im Chat-Viewer, im echten Claude-Host abgenommen
C3Annotorious — Review-Anmerkungen zum AgentenAgentticket-reifReviewPreviewStore, R13offen
C4visual-explainer — SeitengattungenAgentMusterdocs/agent-workflowsabgenommen
MZP-122 · DONE
diff-review.md, project-recap.md
C5GitNexus — Code-Graph vor dem MapperAgentMustercode-to-architecture-mapperoffen
D1vtracer — Deckungspruefung Skizze/ReinzeichnungHandwerkticket-reifsketch-to-figureersetzt
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)
D2perfect-freehand + rough-notation — TuschestrichHandwerkticket-reifanalog-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
D3svgbob — ASCII-Kritzel als EingabeHandwerk / EngineMustermermaid/-Paket als Vorbildumgesetzt
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
D4StarVector / OmniSVG / SkeTikZ — Datensatz als Eval-KorpusHandwerk / EvalsMoonshotevals/tasksabgenommen
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)
D5Tone.js — KlangspurViewerMoonshotMZP-85offen
D6CodeCharta — die Ratschen als StadtHandwerk / GatesMoonshotthree@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
E1pixelmatch / odiff — Pixel-BaselineGatesticket-reifLayoutQualityRatchetTest, mzone-renderoffen
E2greadability — LesbarkeitsmetrikenGatesticket-reifLayoutQualityabgenommen
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.

beruehrt: NodeContentMetrics, LayoutConstants, ratchet/layout-quality.txt · Stufe: sofort

A3 · Routing

libavoid und HOLA — orthogonales Routing mit Nudging

github.com/mjwybrow/adaptagrams (~320 Sterne, C++, Monash University; letzter Push 2025-10) · github.com/Aksem/libavoid-js (WASM-Port, LGPL-2.1) · Wybrow/Marriott: „Orthogonal Connector Routing“, HOLA „Human-like Orthogonal Layout“

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).

beruehrt: EdgeRouter, DiagramValidator#checkAttachSpacing · Stufe: mittelfristig

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

github.com/penrose/penrose (~8,0k Sterne, MIT, CMU, aktiv) · github.com/bluefishjs/bluefish (~160, MIT, MIT CSAIL)

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.

beruehrt: DiagramSpec, layout/RankAssignment, layout/OrderingPass, DiagramValidator · Stufe: spaeter

A5 · Benchmark

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.

beruehrt: nichts (Spike) · Folgekandidaten: MZP-85, MZP-111 · Stufe: sofort

A6 · Skin

FossFLOW / isoflow — Architektur in Isometrie

github.com/markmanx/isoflow (~1,7k Sterne, MIT, Push 2025-09) · github.com/Abrar74774/FossFLOW (Fortfuehrung von stan-smith/FossFLOW, MIT, Push 2026-08)

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.

beruehrt: DiagramVariant, DiagramSkinCss, SvgRenderer, viewer.js · Stufe: spaeter

A7 · Bewegtbild

Motion Canvas / Revideo — und warum Playwright reicht

github.com/motion-canvas/motion-canvas (~19k Sterne, MIT) · github.com/midrender/revideo (vormals redotvideo/revideo, ~4k, MIT, headless Rendering-API)

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.

beruehrt: application/mcp/*McpTools, docs/agent-workflows/evals · Stufe: Spike

C2 · Sehen

VFLM / IntroSVG — das Befund-Overlay

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.

beruehrt: LayoutQuality, DiagramMcpTools#validateDiagram, DiagramRasterizer · Stufe: (1) sofort, (2) mittelfristig

C3 · Rueckkanal

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.

beruehrt: docs/agent-workflows/code-to-architecture-mapper.md · Stufe: sofort (nur Dokument)

D · Visuelles Handwerk

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.

beruehrt: docs/agent-workflows/sketch-to-figure.md, ggf. publishAsset · Stufe: mittelfristig

D2 · Strich

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).

beruehrt: static/lib/, sketch-to-figure.md, analog-musterkarte · Stufe: sofort

D3 · Eingabe

svgbob — ASCII-Kritzel als vierte Eingabeform

github.com/ivanceras/svgbob (~4,2k Sterne, Apache-2.0, Push 2026-04) · „Convert your ascii diagram scribbles into happy little SVG“

Die Idee: ein Parser, der Box-Zeichnungen aus +--+, | und Pfeilen als Grafik versteht.

MusterSprachmodelle zeichnen erstaunlich gute ASCII-Diagramme

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.

beruehrt: neues Paket application/support/diagram/ascii, DiagramMcpTools · Stufe: spaeter

D4 · Korpus

StarVector / OmniSVG / SkeTikZ — der Datensatz ist das Geschenk, nicht das Modell

github.com/joanrod/star-vector (~4,6k Sterne, Apache-2.0) · github.com/OmniSVG/OmniSVG (~2,6k, Apache-2.0, NeurIPS 2025) · Sketch2Diagram / SkeTikZ (ICLR 2025, 3.231 Paare aus Handskizze und TikZ)

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.

beruehrt: docs/agent-workflows/evals · abhaengig: D1 · Stufe: spaeter

D5 · Klang

Tone.js — eine Klangspur fuer den Simulationsmodus

github.com/Tonejs/Tone.js (~14,7k Sterne, MIT, Push 2026-09-16) · Web-Audio-Framework

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.

beruehrt: viewer.js (Playback aus MZP-85) · abhaengig: MZP-85 · Stufe: spaeter

D6 · Stadt

CodeCharta — die Ratschen als begehbare Stadt

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.

beruehrt: application/support/livedata, src/test/resources/ratchet · Stufe: spaeter

E · Qualitaets-Gates (Beifang)

E1 · Pixel

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.

beruehrt: mzone-render, PublisherMcpTools#diffVersions · Stufe: mittelfristig

E2 · Lesbarkeit

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 MZP crossingAngleMin und edgeLengthCv als zusaetzliche Felder in LAYOUT_QUALITY und im Register layout-quality.txt. Die Definitionen stehen im Paper, Code wird nicht uebernommen.

beruehrt: LayoutQuality, LayoutQualityRatchetTest · Stufe: sofort

Empfohlene Reihenfolge

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.

#Erweiterungbaut aufLabelAndockstelleAufwandStand 02.10.
N0Abnahme-Runde und Aufraeumenalle REVIEWPflegeBacklog1 hweitgehend
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)
N1MZP-127 messen, dann ausrollenC1ticket-reifrun-llm.py, Top-5-ToolsLauf + 1 Tagabgenommen
MZP-127: A = B. Nicht ausrollen, Muster beendet
N2Hotspots im Chat-ViewerC2 + A1ticket-reifchat-bridge.js, viewer.jskleinabgenommen
MZP-132 · DONE
N3queryDiagram als MCP-ToolA5 (Luecke 2)ticket-reifdiagram.json, DiagramMcpToolskleinumgesetzt
MZP-133 · REVIEW, live. direction=in|out|paths, depth, version
N4DRILLDOWN_EDGE_MISSINGA5 (Luecke 1), MZP-111ticket-reifDiagramValidatorkleinoffen
N5Kehrtwenden an der Quelle vermeidenA3ticket-reifEdgeRouter, EdgeNudgermitteloffen
N6MZP-85 ziehen, als Knoten fuer A7 und D5A7, D5Entscheidungviewer.js, SimulationValidatorgrossoffen
N7Auswahl im Chat als ConstraintA1 + A4Moonshotchat-bridge.js, layout/grossumgesetzt
zusammen mit A4 als MZP-146 · REVIEW, live. Abnahme im echten Host steht aus
N8Visuelles Diff im diff-reviewC4 + E1ticket-reifmzone-render, diff-review.mdmitteloffen
N9Mermaid-Fehler, die weiterhelfenMZP-127 (Befund)ticket-reifdiagram/mermaidkleinumgesetzt
MZP-134 · REVIEW, live: die Meldung nennt die vier Dialekte und verweist auf diagramJson. Folgebefund MZP-135 (Phantomknoten)
N10analog-v1 vom Server erklaerenMZP-130 (Blocker 4)ticket-reifgetCapabilityForkleinumgesetzt
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 Schritt run-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.

beruehrt: evals/, application/mcp/*McpTools, DiagramInputGuide · Stufe: sofort

N2 · Sehen im Chat

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 MZP getDiagramChatView 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.

beruehrt: chat-bridge.js, viewer.js, DiagramMcpTools#getDiagramChatView · ersetzt: C2 Teil 2 · Stufe: sofort

N3 · Abfragen

queryDiagram: den publizierten Graphen befragen

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.

beruehrt: DiagramMcpTools (neues Tool), getArtifactSource-Lesepfad · Stufe: sofort

N4 · Konsistenz

DRILLDOWN_EDGE_MISSING: Ebenen gegeneinander pruefen

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.

beruehrt: DiagramValidator, MZP-111-Pfad · Stufe: sofort

N5 · Routing

Kehrtwenden an der Quelle vermeiden

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).

beruehrt: EdgeRouter, EdgeNudger, ratchet/layout-quality.txt · Stufe: mittelfristig

N6 · Knoten im Plan

MZP-85 ziehen, weil drei Funde daran haengen

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.

beruehrt: viewer.js, viewer.css, DiagramPageRenderer, neuer SimulationValidator · Stufe: Entscheidung

N7 · Moonshot

Auswahl im Chat wird zur Layout-Vorgabe

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.

beruehrt: chat-bridge.js, DiagramSpec, layout/ · abhaengig: A4 · Stufe: spaeter

N8 · Review

Visuelles Diff als dritte Spalte im diff-review

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.

beruehrt: mzone-render, docs/agent-workflows/diff-review.md · abhaengig: E1 (Bibliothek) · Stufe: mittelfristig

Reihenfolge fuer die naechste Runde

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.

beruehrt: application/support/diagram/mermaid · Stufe: sofort

N10 · Stil erklaeren

analog-v1 vom Server erklaeren

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).

Fortsetzung der Recherche: Band 5 — Das Handwerk messbar machen (H1–H7, B1).

Empfehlung · Stand 2026-09-29 (abgeloest)

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.

Quellen