Recherche · Band 5 · Opus 5.5

Das Handwerk messbar machen

Acht Empfehlungen für Sketch-to-Figure und analog-v1, drei Moonshots, zwei Beifänge für Engine und Export und ein kleiner Abschnitt zum Backlog-Brett

Datum
2026-09-30
Anlass
Anschlussrecherche an Band 4 (research-mzp-extravaganzen), zugeschnitten in einem kurzen Grilling: Kern ist das visuelle Handwerk, Engine/Viewer und Export laufen als Beifang mit, das Backlog-Brett bekommt einen Abschnitt mit niedriger Priorität. Wiki bleibt ausgeschlossen. Nur Report, keine Tickets.
Maßstab
Wenige harte Empfehlungen statt einer breiten Liste. Jede nennt die Andockstelle im Code, den Aufwand und ein Urteil, ob sie wegen der Modellgeneration lohnt oder unabhängig davon. Leitplanken wie in Band 4: keine neue Abhängigkeit im Spring-Dienst, Konzept vor Bibliothek, permissive Lizenz, Aktivität in den letzten zwölf Monaten.
Abgrenzung
18 Vorgänger-Reports wurden heruntergeladen und nach jedem Kandidaten durchsucht. Excalidraw, tldraw, Rough.js, roughViz und der Excalidraw-MCP stehen dort schon und fehlen hier. Die Funde unten tauchen in keinem der 18 Reports auf.
Grundlage
Code gegen main (f5a4a06) gelesen, dazu mzone-render/server.js. Produktion am 2026-09-30 befragt (getCapabilityFor, backlogQuery, drei publizierte Blätter per HTTP). Sterne, Push und Lizenz per GitHub-API am selben Tag. Was nicht geprüft wurde, steht am Ende.

TL;DR

Der größte Hebel dieser Runde ist kein Fund aus dem Netz, sondern ein Befund im eigenen Haus: analog-v1 ist im MZP ein Gast, kein Bewohner. Der Server kennt den Stil nicht (getCapabilityFor('analog-v1') antwortet heute mit unknown), vier der fünf Schriftschnitte kommen von Google, und die Passungsprüfung mit „Toleranz 0“ läuft von Hand in einem lokalen Headless-Chrome, obwohl mzone-render dieselbe Art Messung für Diagramme längst macht.

Die ersten drei Empfehlungen (H1 bis H3) beheben das zusammen: Schriften ins Haus, der Stil nach /lib/ mit Auskunft über getCapabilityFor, und Passung plus Kollision als Befund im vorhandenen Render-Check. Danach ist ein Blatt für jeden Agenten baubar und vom Server geprüft, nicht nur für einen, der das Repo lesen kann.

Zur Modellgeneration: Die Ankündigung von Opus 5.5 (2026-09-22) sagt nichts über Bildverstehen. Was dem Handwerk wirklich hilft, gilt schon seit Claude 4.7: Bilder bis 2576 px an der langen Kante und Bounding-Boxes in absoluten Pixelkoordinaten. Darauf bauen H4, H5 und H7. Alles andere lohnt unabhängig vom Modell. Opus 5.5 selbst macht vor allem die Eval-Läufe billiger (4 $/20 $ je Million Tokens).

Auf einen Blick

#EmpfehlungLabelAndockstelleAufwandModellgeneration
H1Schriften ins Haus holenticket-reiffonts-maierzone, FigureSvgExtractorkleinunabhängig
H2analog nach /lib/, Server erklärt den Stilticket-reifstatic/lib, getCapabilityFormittelunabhängig, hilft kleinen Modellen am meisten
H3Passung und Kollision in den Render-Checkticket-reifmzone-render, validateArtifactmittelunabhängig
H4Skizzen-Inventar mit Pixelkoordinatenticket-reifsketch-to-figure.mdkleinwegen der Modellgeneration (ab Claude 4.7)
H5Pauspapier-Ansicht statt Umschalterticket-reifSnippet analog-v3mittelwegen der Modellgeneration (baut auf H4)
H6Blätter für Screenreader lesbar machenticket-reifBausteinkatalog, art-a11y-checkkleinunabhängig
H7Eval-Aufgaben eval-sketch-*ticket-reifevals/tasksklein, nach H2–H4wegen der Modellgeneration (Modellvergleich)
H8Etiketten nach Kandidatenliste setzenMustersketch-to-figure.md, Regel B3kleinunabhängig
B1PDF über page.pdf im Render-Dienstticket-reifmzone-render, MZP-131mittelunabhängig
B2Skin kartografie für die Engineticket-reifDiagramVariant, DiagramSkinCssmittelunabhängig
M1Das Blatt zeichnet sich selbstMoonshotSnippet, mzone-rendermittelunabhängig
M2Entwürfe sehen aus wie EntwürfeMoonshotLifecycle draft, /lib/mittelunabhängig
M3Plotter-Export auf echtes PapierMoonshotfigure.svggroßunabhängig
K1Backlog-Brett: fünf kleine Eingriffeniedrige Prioritätbacklog_board.htmlje Stundenunabhängig

H · Visuelles Handwerk

Der Workflow sketch-to-figure.md ist mit 48.765 Zeichen das größte Dokument unter docs/agent-workflows/ und trägt Stil, Snippet, 30 Bausteine und zwei Prüfskripte in sich. Das war für den Anfang richtig. Jetzt, mit zwei publizierten Blättern im Stil (analog-musterkarte, analog-coding-harness), lohnt es sich, die tragenden Teile aus dem Dokument in den Server zu ziehen.

H1 · Schriften

Spectral und Plex Mono 600 ins Haus holen

Befund im Code, keine externe Quelle · FigureSvgExtractor.FONT_FACE_CSS, static/lib/fonts-maierzone@1.0.0

ticket-reifDie Messung mit Toleranz 0 hängt an einem fremden Server

fonts-maierzone@1.0.0 enthält IBM Plex Mono nur in 400 und 500 und Spectral gar nicht. Die Bausteine setzen aber fast überall font-weight="600". Deshalb lädt FigureSvgExtractor vier von fünf Schnitten von fonts.gstatic.com, und alle drei geprüften Blätter binden fonts.googleapis.com ein.

Das hat drei Folgen. Der PNG-Export (figure.png) hängt zur Renderzeit an Google. Jeder Besucher eines Blatts schickt seine IP dorthin. Und die Passungsprüfung misst mit getBBox() gegen die Schrift, die gerade geladen ist. Fällt der Abruf aus, misst sie Georgia und Monospace, und ein „Passung = 0“ sagt dann nichts über das Blatt, das der Leser sieht.

Zugeschnitten auf MZP fonts-maierzone@1.1.0 mit Spectral 400, 600 und 400 kursiv sowie Plex Mono 600 (neue Versionsnummer, weil /lib/ immutable ausliefert). FONT_FACE_CSS zeigt danach nur noch auf /lib/, der Workflow ersetzt den Google-Link durch fonts.css. Die Lizenzdatei für Spectral kommt wie bei den anderen dazu.

berührt: static/lib/fonts-maierzone, FigureSvgExtractor, sketch-to-figure.md · Aufwand: klein · Messgröße: kein Abruf an fonts.g* beim Laden eines Blatts

H2 · Stil als Bibliothek

analog nach /lib/, und der Server erklärt den Stil

Live-Probe 2026-09-30: getCapabilityFor('analog-v1, analog') → "unknown": ["analog-v1", "analog"] · offen seit Band 4 (N10, Blocker aus MZP-130)

ticket-reifDie Einfrier-Regel des Workflows ist genau das, was /lib/ schon kann

Der Workflow verlangt von Hand, was die Bibliotheksauslieferung technisch erzwingt: „Änderungen an diesem Snippet erzeugen analog-v2, alte Blätter bleiben eingefroren.“ Unter /lib/analog@1.0.0/ wäre das keine Absprache mehr, sondern die Versionsnummer im Pfad. Heute trägt jedes Blatt rund 5 KB Snippet inline, und ein Agent ohne Repo-Zugriff kommt an Katalog und Regeln gar nicht heran.

Zugeschnitten auf MZP (1) /lib/analog@1.0.0/analog.css und analog.js mit dem heutigen Stand von analog-v2, dazu die sechs Marker als einbindbares Fragment. (2) getCapabilityFor('analog') liefert Tokens, Regeln und die Bausteinliste als Namen mit Größe und Knoten-Eigenschaft; ein einzelner Bausteinname liefert dessen SVG-Fragment. Das ist dasselbe Muster wie bei icons (MZP-105) und spart dem Agenten, 48 KB Dokument zu lesen, um drei Bausteine zu brauchen. (3) Das Workflow-Dokument schrumpft auf Ablauf und Kompositionsregeln. Das widerspricht dem Nicht-Ziel „keine /lib/-Versionierung“ aus v1. Mit zwei Blättern im Stil und einem Eval, das daran scheitert, ist der Grund dafür entfallen.

berührt: static/lib, LibRegistry, CapabilitiesAssembler, sketch-to-figure.md · Aufwand: mittel · Messgröße: ein Agent ohne Repo baut ein Blatt, das H3 besteht

H3 · Prüfen

Passung und Kollision als Befund im Render-Check

Befund im Code · mzone-render/server.js ruft für Diagramme bereits page.evaluate(messeDiagramm) und liefert overflow, containment, legendCollisions

ticket-reifDie zwei Prüfskripte aus dem Workflow gehören neben messeDiagramm

Schritt 5 des Workflows verlangt heute einen lokalen Chrome mit --dump-dom, eine Testkopie mit eingefügtem Skript und das Auslesen von window.__fitcheck und window.__collcheck. Das setzt einen Agenten mit Shell und Browser voraus. Der Render-Dienst lädt dieselbe Seite ohnehin in Chromium, sobald validateArtifact läuft.

Zugeschnitten auf MZP Eine dritte Messfunktion messeFigur, die nur greift, wenn die Seite ein #az-svg trägt, und vorher auf document.fonts.ready wartet (deshalb nach H1). Drei Notices: FIGURE_FIT (Text läuft aus seinem Rahmen, mit data-name und Text), FIGURE_COLLISION (fremdes Element schneidet einen Knoten) und FIGURE_NO_FRAMES für den Fall, den das Dokument selbst als Falle nennt: kein .frame, also blind null Treffer. Stufe WARNING, wie bei a11y. Die Skripte stehen fertig im Workflow und wandern nur um. Ein Tester der Opus-5.5-Ankündigung schreibt, Selbstprüfschleifen seien leichter aufzusetzen. Dieser Haken ist die Stelle, an der eine solche Schleife ansetzt.

berührt: mzone-render/server.js, RenderCheck-Notices, sketch-to-figure.md (Schritt 5 entfällt großteils) · abhängig: H1 · Aufwand: mittel · Messgröße: beide publizierten Blätter liefern 0/0

H4 · Lesen

Skizzen-Inventar mit Pixelkoordinaten

Anthropic-Doku „Vision“ und „Coordinates and bounding boxes“ (abgerufen 2026-09-30) · Hochauflösende Stufe für „Claude 4.7 and later models“: 2576 px lange Kante, 4784 Bild-Tokens, automatisch

Die Idee: Das Modell liefert zu jedem Element der Skizze einen Rahmen [x1, y1, x2, y2] in absoluten Pixeln des Bildes, das es sieht. Die Doku rät ausdrücklich zu Pixeln statt normierten Werten und dazu, das Bild vorher selbst auf die Zielgröße zu bringen.

ticket-reifErsetzt D1 (vtracer) aus Band 4, ohne neues Werkzeug

Schritt 2 des Workflows heißt heute „Elemente, Beschriftungen und die grobe Anordnung inventarisieren“ und hinterlässt nichts Prüfbares. Band 4 wollte die Treue zur Skizze über eine Vektorisierung des Fotos messen. Das Modell kann das Inventar selbst mit Koordinaten liefern, und ein Handyfoto verliert auf der hochauflösenden Stufe deutlich weniger als früher: 3 Megapixel gehen laut Tabelle ungekürzt durch, auf der Standardstufe wurden sie auf 1269×952 verkleinert.

Zugeschnitten auf MZP Das Inventar wird zur Begleitdatei inventar.json im Bundle: je Element eine Id, der gelesene Text, der zugeordnete Baustein und der Rahmen. Jedes .el aus der Skizze trägt data-sketch-id. Daraus folgt ein Deckungsbericht ohne Bildverarbeitung: jeder Inventar-Eintrag braucht ein Element, jedes Element ohne Eintrag braucht den +-Baustein. Die Doku nennt die Koordinaten „approximate“ und empfiehlt eine Sichtprobe. Dafür ist H5 da.

berührt: sketch-to-figure.md (Schritt 2 und 5) · Aufwand: klein (nur Dokument) · Messgröße: Inventar-Einträge ohne Element = 0

H5 · Vergleichen

Pauspapier-Ansicht statt Umschalter

arXiv 2601.06944 „SketchJudge“ (Januar 2026; 1.015 handgezeichnete Schülerlösungen, github.com/yuhangsu82/SketchJudge, Apache-2.0)

Die Idee hinter der Quelle: Die Autoren messen, wie gut multimodale Modelle handgezeichnete Diagramme bewerten, und halten fest, dass selbst starke Modelle deutlich hinter Menschen zurückbleiben.

ticket-reifDas Modell liest, der Mensch urteilt — also muss der Vergleich einen Blick kosten

Der Knopf „Skizze zeigen“ tauscht heute SVG gegen Foto aus (display:none hin und her). Wer die Treue prüfen will, muss sich das eine Bild merken, während er das andere ansieht. Die Treue von einem Modell benoten zu lassen, wäre nach SketchJudge der falsche Schluss.

Zugeschnitten auf MZP Das Foto liegt als halbtransparente Ebene unter der Reinzeichnung, mit einem Schieberegler für die Deckkraft. Skalierung und Versatz ergeben sich aus den Rahmen in inventar.json (H4) und den Rahmen der zugehörigen Elemente, als einfache Ausgleichsrechnung über die Mittelpunkte. Wo die Reinzeichnung von der Skizze abweicht, sieht man es sofort als Doppelkontur. Das ändert den Snippet und erzeugt nach der Einfrier-Regel analog-v3.

berührt: Snippet (analog-v3), sketch-to-figure.md · abhängig: H4, sinnvoll nach H2 · Aufwand: mittel

H6 · Zugänglichkeit

Blätter für Screenreader lesbar machen

W3C „WAI-ARIA Graphics Module 1.0“ (Recommendation, 2018-10-02): Rollen graphics-document, graphics-object, graphics-symbol

ticket-reif41 fokussierbare Elemente, ein einziges aria-label

Beide publizierten Blätter tragen je 41 Elemente mit class="el" tabindex="0", aber nur ein aria-label und eine role auf der ganzen Seite. Name und Erklärung stehen in data-name und data-desc und erreichen nur das Tooltip-Skript. Ein Screenreader landet per Tab auf 41 namenlosen Gruppen. Das trifft genau die Regel „Form vor Farbe“, die der Stil für Farbsehschwäche schon ernst nimmt.

Zugeschnitten auf MZP Im Katalog bekommt das <svg> role="graphics-document" mit einem aria-label aus dem Blatttitel, jeder Baustein role="graphics-symbol", aria-label gleich data-name und die Erklärung als aria-description. Schattenkopien und Deko bekommen aria-hidden. Gemessen wird mit dem vorhandenen a11y: true (axe-core im Render-Dienst). Die Unterstützung der Grafik-Rollen ist je Screenreader ungleich; falls axe oder ein Test sie nicht anerkennt, ist role="img" mit aria-label der robuste Rückfall.

berührt: Bausteinkatalog (30 Vorlagen), analog-musterkarte, Eval art-a11y-check · Aufwand: klein · Messgröße: A11Y_CLEAN auf beiden Blättern

H7 · Messen

Eval-Aufgaben eval-sketch-* mit deterministischer Bewertung

Anschluss an MZP-130 (Ergebnis: eigene Skizzen statt SkeTikZ, Bild per stream-json; Blocker: der Server erklärt den Stil nicht) und MZP-113

ticket-reifMit H2 bis H4 wird Sketch-to-Figure zum ersten Mal zählbar

Unter evals/tasks/ liegen zwölf Aufgaben, keine davon mit einem Bild als Eingabe. Der Spike MZP-130 hat den Weg gezeigt und ist am fehlenden Stil-Wissen des Servers hängen geblieben. Sobald H2 den Blocker löst und H3 Befunde liefert, braucht eine Sketch-Aufgabe kein Modell als Richter.

Zugeschnitten auf MZP Drei bis fünf eigene Skizzen mit einem von Hand geschriebenen Soll-Inventar. expect prüft: Zahl der .node-Elemente, die Menge der data-name-Werte, FIGURE_FIT und FIGURE_COLLISION gleich null, Legende vorhanden. Der Lauf über Haiku, Sonnet und Opus zeigt dann, ab welchem Modell das Handwerk trägt. Bei 4 $/20 $ je Million Tokens für Opus 5.5 ist die Matrix rund ein Fünftel billiger als mit Opus 5.

berührt: docs/agent-workflows/evals/tasks, run-llm.py · abhängig: H2, H3, H4 · Aufwand: klein

H8 · Etiketten

Kantenbeschriftungen nach Kandidatenliste setzen

github.com/kevinschaul/avoid-overlap (10 Sterne, Push 2026-03, ohne Lizenzangabe — deshalb nur als Muster) · entstanden für Grafiken der Washington Post

Die Idee: zwei Techniken gegen überlappende Beschriftungen. Choices probiert je Etikett eine vorgegebene Liste von Positionen durch, Nudge schiebt Etiketten auseinander, bis nichts mehr kollidiert.

MusterDie Kollisionsprüfung findet das Problem, sagt aber nicht, wohin mit dem Etikett

Regel B3.4 lautet „Beschriftung auf die Mitte des längsten geraden Segments“. Das ist genau eine Position. MZP-108 hat die Kollisionsprüfung nachgerüstet, weil diese eine Position oft in einem fremden Knoten landet.

Zugeschnitten auf MZP Die Regel wird zur Reihenfolge: Mitte des längsten Segments, dann Mitte des zweitlängsten, dann je 12 px quer versetzt. Die erste Position ohne Kollision gewinnt. FIGURE_COLLISION (H3) kann die nächste freie Kandidatenposition gleich mitliefern, dann kostet die Korrektur den Agenten einen Aufruf statt drei.

berührt: sketch-to-figure.md (B3), optional messeFigur · Aufwand: klein

B · Beifang für Export und Engine

B1 · Export

PDF über page.pdf im Render-Dienst

Playwright-Doku page.pdf(): nutzt standardmäßig das Print-Medium; page.emulateMedia({ media: 'screen' }) davor liefert die Bildschirmfassung

ticket-reifLöst MZP-131 mit dem Werkzeug, das schon läuft

MZP-131 beschreibt ein PDF, das erfolgreich aussieht und leer ist, weil pandoc kein JavaScript ausführt. mzone-render fährt Playwright 1.50 und kennt drei Pfade: /render, /inspect und /rasterize. Ein PDF-Pfad fehlt.

Zugeschnitten auf MZP Ein vierter Pfad /pdf: Seite laden, auf Ruhe warten wie beim Render-Check, dann page.pdf mit Hintergründen. Der Export-Endpunkt aus MZP-76 wählt den Weg nach Seitenart: Template-Seiten bleiben bei pandoc/typst, Artefakt-Bundles gehen an den Render-Dienst. Für Slidev hängt er ?print an, wie im Ticket beschrieben. Nebenbei fällt für jedes analog-Blatt ein Vektor-PDF zum Drucken ab. Unabhängig davon sollte der pandoc-Weg einen leeren Rumpf als Notice melden, statt ein leeres PDF als Erfolg auszugeben.

berührt: mzone-render/server.js, Export-Endpunkt (MZP-76) · Aufwand: mittel · Messgröße: legacy-frontend-migration-playbook liefert ein PDF mit Text

B2 · Engine

Skin kartografie für die Diagramm-Engine

Befund im Code · DiagramVariant kennt zehn Skins plus custom, keine davon mit der Palette aus analog-v1

ticket-reifFür Abläufe bis zwölf Knoten rechnet die Engine, was der Agent heute von Hand setzt

Die Kompositionsregeln „Flow bauen“ (Raster 40, Ports, keine Kante durch einen Knoten, 12 px Abstand) beschreiben in Prosa, was LayoutEngine, EdgeRouter und EdgeNudger ausrechnen und was die Layout-Ratsche misst. Für reine Ablaufdiagramme ist die Handkomposition der teurere und fehleranfälligere Weg.

Zugeschnitten auf MZP Eine elfte Variante mit den zehn Tokens des Stils, Spectral und Plex Mono, dem harten Versatzschatten als versetzte Formkopie und den zwei Kantenarten (Rost durchgezogen, Petrol gestrichelt). Die Handkomposition bleibt für alles, was kein Graph ist: Ringe, Git-Bahn, Zeitachse, Vorher/Nachher. Der Workflow bekommt eine Weiche am Anfang: Ist die Skizze ein Ablauf, dann publishDiagram mit der Skin. Ob custom das schon heute teilweise kann, habe ich nicht gelesen. Das ist der erste Schritt des Tickets.

berührt: DiagramVariant, DiagramSkinCss, SvgRenderer, sketch-to-figure.md · abhängig: H1 · Aufwand: mittel

M · Moonshots

M1 · Bewegung

Das Blatt zeichnet sich selbst

github.com/dai-shi/excalidraw-animate (~2,1k Sterne, MIT, Push 2026-09-10) · github.com/excalimate/excalimate (76 Sterne, MIT, Push 2026-09-18; MCP-Server mit 35 Tools, Export als WebM und animiertes SVG; die README warnt selbst, dass viel Code KI-erzeugt und noch nicht aufgeräumt ist)

Die Idee: Eine Zeichnung baut sich Strich für Strich in einer festgelegten Reihenfolge auf, so wie sie am Whiteboard entstanden wäre.

MoonshotDer Trick dafür steckt schon im Snippet

Der Puls auf den Rost-Kanten nutzt pathLength und stroke-dashoffset. Dieselbe Technik zeichnet eine Kontur von null auf voll. Mit einem data-order je Element entsteht aus einem Blatt eine Erklärung in Leserichtung.

Zugeschnitten auf MZP Ein Knopf „Aufbau zeigen“, der unter prefers-reduced-motion verschwindet. Mit dem Aufnahmeweg aus Band 4 (A7, Playwright recordVideo) wird daraus ein WebM für Präsentationen. Moonshot, weil es das Nicht-Ziel „kein Schrittmodus“ berührt und die Reihenfolge vom Agenten gepflegt werden muss. Übernommen wird das Muster, keine der beiden Bibliotheken.

berührt: Snippet (neue Version), Bausteinkatalog · Aufwand: mittel

M2 · Zustand

Entwürfe sehen aus wie Entwürfe

github.com/fskpf/svg2roughjs (217 Sterne, MIT, Push 2026-06-12) · wandelt ein fertiges SVG im Browser in eine handgezeichnet wirkende Fassung um

Die Idee: der umgekehrte Weg zu Sketch-to-Figure. Aus einer sauberen Vektorgrafik wird wieder eine Skizze.

MoonshotDer Lifecycle-Status wird sichtbar, ohne dass jemand ein Banner lesen muss

MZP kennt den Status draft. Eine Seite in diesem Status sieht heute genauso fertig aus wie eine abgenommene. Ein Diagramm oder Blatt, das im Entwurf krakelig gezeichnet erscheint und erst mit current glatt wird, sagt einem Reviewer auf den ersten Blick: Hier darf noch alles anders werden.

Zugeschnitten auf MZP Nur auf Review-Links und Draft-Seiten, als Browser-Skript aus /lib/, nie im Spring-Dienst. Offen ist, ob die Umwandlung deterministisch genug ist, damit zwei Reviewer dasselbe sehen, und ob Viewer-Funktionen (Hover, Radar) die umgezeichneten Pfade noch treffen. Rough.js als Unterbau käme als zweite Bibliothek mit.

berührt: static/lib, DiagramPageRenderer, Preview-Auslieferung · Aufwand: mittel, mit Spike vorab

M3 · Papier

Plotter-Export: das Kartografie-Blatt auf echtem Papier

github.com/golanlevin/p5.plotSvg (208 Sterne, MIT, Push 2026-06-23) · SVG-Export für Stiftplotter: reine Pfade, Ebenen je Stift

Die Idee: SVG so ausgeben, dass ein Stiftplotter es zeichnen kann. Keine Füllungen, keine Filter, je Stiftfarbe eine Ebene.

MoonshotDer verrückteste Fund: der Kreis von der Handskizze zurück zur Tusche

Der Stil hat genau drei Strichfarben (Tinte, Rost, Petrol) und verzichtet auf Verläufe und Filter. Das ist zufällig fast die Definition eines plotbaren Blatts. Was fehlt, sind Flächen als Schraffur statt Füllung und Text als Pfad.

Zugeschnitten auf MZP Eine zweite Begleitdatei figure.plot.svg neben figure.svg: drei Ebenen, Schattenkopien als Schraffur, Text über eine Einlinien-Schrift. Nutzen hat es nur, wenn ein Plotter im Haus steht. Als Wandbild eines Architekturblatts wäre es allerdings das einzige MZP-Artefakt, das man anfassen kann.

berührt: FigureSvgExtractor · Aufwand: groß

K · Das Backlog-Brett (niedrige Priorität)

Das Brett ist ein Thymeleaf-Fragment mit HTMX 2.0.3 und selbst geschriebenem HTML5-Drag-and-drop, bewusst ohne Bibliothek. Der Charakter (Kontobuch, Liegezeit auf jeder Karte) ist eigenständig und sollte bleiben. Fünf Eingriffe modernisieren das Gefühl, ohne den Aufbau zu ändern. Den Admin-Bereich konnte ich nicht ansehen (Basic-Auth); alles hier stammt aus backlog_board.html.

  1. Karten gleiten statt springen. Ein Zug tauscht heute das ganze Brett per outerHTML. HTMX kann den Tausch in eine View Transition legen: swap: 'outerHTML transition:true', dazu je Karte ein eindeutiger view-transition-name. Die Karte wandert dann sichtbar in ihre neue Spalte, die Zähler blenden um. Same-Document View Transitions sind seit Firefox 144 (Oktober 2025) „Baseline newly available“; ältere Browser tauschen einfach wie bisher. Rund fünfzehn Zeilen.
  2. Verschieben ohne Ziehen. WCAG 2.2 verlangt in Erfolgskriterium 2.5.7 (Stufe AA) für jede Zieh-Bedienung eine Alternative mit einfachem Zeiger. Ein kleines Menü je Karte („nach Bereit“, „nach In Arbeit“) über denselben /place-Endpunkt erfüllt das und macht das Brett am Telefon und per Tastatur bedienbar.
  3. Die Ideen-Spalte entlasten. Von 25 offenen Tickets stehen heute 20 auf IDEA, je zwei auf READY und REVIEW, eines auf DOING. Eine Spalte trägt also vier Fünftel des Bretts. Innerhalb der Spalte nach Priorität gruppieren und P3 als <details> einklappen. Dazu Filter-Chips für Labels; die Daten trägt jedes Ticket schon.
  4. Ticket als Seitenblatt. Ein Klick auf eine Karte verlässt heute das Brett. Ein <dialog>, per hx-get gefüllt, hält Brett und Ticket nebeneinander. Der Link bleibt als Rückfall und für „in neuem Tab öffnen“.
  5. HTMX ins Haus. _layout.html lädt HTMX von unpkg.com. Der Kommentar im Brett begründet den Verzicht auf Bibliotheken gerade mit der CSP. Die eine Bibliothek, die es gibt, gehört dann nach /lib/.

Nicht empfohlen: eine Drag-and-drop-Bibliothek. atlassian/pragmatic-drag-and-drop (~12,8k Sterne) ist gut, setzt aber auf dieselben nativen Ereignisse, die das Brett schon nutzt, und löst für fünf Spalten kein Problem, das Punkt 2 nicht billiger löst.

Was ich ausdrücklich nicht empfehle

Reihenfolge

Ein Block, zusammen etwa drei bis vier Tage: H1, H2, H3. Danach ist der Stil im Server zu Hause, und jedes weitere Blatt wird geprüft statt beaufsichtigt. H6 passt in denselben Zug, weil der Katalog ohnehin angefasst wird.

Danach messen: H4 ins Workflow-Dokument, H7 als Aufgaben, ein Lauf über drei Modelle. Das Ergebnis sagt, ob H5 und H8 nötig sind oder ob die Blätter schon stimmen.

Unabhängig davon: B1, weil MZP-131 ein Fehler ist, der wie ein Erfolg aussieht. MZP-135 (Phantomknoten beim Mermaid-Import) hat dieselbe Eigenschaft und sollte vor jedem neuen Engine-Ausbau fallen.

Wenn Lust auf Glanz besteht: B2 zuerst, weil es Arbeit spart, dann M1. M2 und M3 nur mit Spike. K1 jederzeit, in Stunden.

Was nicht geprüft wurde

Quellen

Alle abgerufen am 2026-09-30.