MZP · Agenten-Evals · MZP-113 · 2026-09-28
Dritter Eval-Lauf: Gate grün, erste LLM-Baseline
Zwölf Aufgaben liefen mit festen Eingaben gegen Produktion. Es gibt keine Regression. Zehn Aufgaben sind grün, die zwei mit knownIssue-Marker bestehen beide. Neu ist die LLM-Stufe: 30 Agentenläufe mit Sonnet 5 und Haiku 4.5 über die fünf Diagramm-Aufgaben, gemessen nach der Kürzung der validateDiagram-Beschreibung (MZP-127). Sonnet schafft 15 von 15, Haiku 13 von 15. Das ist ab jetzt die LLM-Baseline.
Handlungsbedarf: 2 × UNEXPECTED_PASS
Zwei Aufgaben tragen einen knownIssue-Marker und bestehen trotzdem. Beide Marker müssen raus, sonst verdeckt die Aufgabe einen späteren Rückfall als „gelb“. Dieser Lauf ändert keine Aufgaben-Dateien.
art-live-report(knownIssue: E11): Alle drei Schritte bestehen. Der Snapshot_data.snapshot.jsonliefertsources.stats.pages = 421. Die Aufgabe ist neu im Korpus, der Marker stammt aus der Zeit vor dem E11-Deploy.dia-architecture-auto(knownIssue: E3): 3 Kreuzungen bei Schwelle 3, wie schon am 26.09. Der Marker steht dort seit zwei Läufen zu Unrecht.
Deterministische Stufe
| Aufgabe | Familie | Status | Aufrufe | knownIssue | Kernbefund |
|---|---|---|---|---|---|
art-a11y-check | artifact | grün | 1 | — | neu: A11Y_IMAGE_ALT als WARNING, 1 Element, ok bleibt true |
art-asset-bundle | artifact | grün | 3 | — | 3 Dateien, erreichbar, Render sauber |
art-broken | artifact | grün | 2 | — | ok:false mit allen vier Codes, keine Seite entstanden |
art-live-report | artifact | UNEXPECTED_PASS | 3 | E11 | neu: Live-Daten stats im Snapshot, Render sauber |
art-patch | artifact | grün | 5 | — | Patch lässt app.js stehen, der Diff zeigt nur index.html |
art-report | artifact | grün | 3 | — | validate → stagingToken → publish, Render sauber |
dia-architecture-auto | diagram | UNEXPECTED_PASS | 3 | E3 | 3 Kreuzungen, 8 Überlappungen, 24 Knicke (26.09.: 3 / 8 / 26) |
dia-diff | diagram | grün | 4 | — | diffDiagram meldet genau 1 Knoten + 1 Kante |
dia-mermaid-flow | diagram | grün | 3 | — | 7 Knoten, 1 Zone; Überlappungen 1 → 0 |
dia-quadrant-longlabels | diagram | grün | 2 | — | textInsideViewBox sauber |
dia-radar-wrapped | diagram | grün | 3 | — | typeBlocks entpackt; Seriennamen jetzt als Legende gezeichnet |
edge-invalid-slug | edge | grün | 2 | — | INVALID_SLUG strukturiert, suggestion eval-slug-test |
Insgesamt 34 MZP-Aufrufe (Baseline 30; die vier zusätzlichen gehören zu den zwei neuen Aufgaben). ms ist nicht gemessen, weil der Skill über MCP keine Zeitstempel sieht.
LLM-Stufe: erste Baseline
Jede Aufgabe lief dreimal je Modell in einer abgeschotteten Claude-Code-Sitzung: nur die MZP-Tools, keine Plugins, alle anderen Connectoren gesperrt. Erfolg prüft der Runner selbst nach, die Selbstauskunft des Agenten zählt nicht. Gemessen wurde nach der Kürzung aus MZP-127: Die Beschreibung von validateDiagram fiel von 7.160 auf 3.780 Zeichen, der Rest steht jetzt in getCapabilityFor('diagramMeta') bzw. ('mermaid').
| Aufgabe | Sonnet 5 | Aufrufe S | Haiku 4.5 | Aufrufe H |
|---|---|---|---|---|
dia-architecture-auto | 3/3 | 1–2 | 2/3 | 2–3 |
dia-diff | 3/3 | 2 | 3/3 | 2 |
dia-mermaid-flow | 3/3 | 2–4 | 2/3 | 1–2 |
dia-quadrant-longlabels | 3/3 | 3 | 3/3 | 2–6 |
dia-radar-wrapped | 3/3 | 2–3 | 3/3 | 3–5 |
Befund: In keinem der 30 Läufe hat ein Agent getCapabilityFor('mermaid') oder ('diagramMeta') aufgerufen. Abgerufen wurden nur Typ-Schemas (quadrant, radar). Die zwei Fehlschläge betreffen beide Haiku: Einmal erfindet es einen Mermaid-Dialekt architecture, einmal baut es 8 statt 7 Knoten. Keiner der beiden hängt am ausgelagerten Text. Einen A/B-Vergleich gibt es nicht, weil vor der Kürzung keine LLM-Messung lief. Deshalb gibt es auch keine Warnungen nach Q18.
Zur Herkunft der Zahlen: Der Lauf brach nach 29 Läufen beim Aufräumen ab, eine Hilfssitzung rief deletePage nicht auf. Die 29 Läufe sind aus den gespeicherten Rohströmen mit demselben StreamAnalyzer nachgerechnet. Aufrufe, Fehlversuche und ToolSearch stimmen in allen 29 Läufen mit den Live-Werten des Runners überein. Lauf 30 wurde nachgeholt. Der Runner schreibt seither nach jedem Lauf.
Was der Nudger (MZP-129) gebracht hat
Seit dem 26.09. fächert das Routing deckungsgleiche Kantensegmente auf, aber nur, wenn dabei keine Kreuzung entsteht. Beim Mermaid-Flow verschwindet so die letzte Überlappung. Bei der Architektur-Topologie bleibt es bei 8: Jede Auffächerung hätte dort eine Kreuzung gekostet. Die Knicke sinken leicht, weil der Nudger Kehrtwenden auf derselben Linie glättet.
| dia-architecture-auto | Kreuzungen | Überlappungen | Knicke |
|---|---|---|---|
| 2026-09-23 (vor E3) | 4 | 3 | 16 |
| 2026-09-26 (nach E3) | 3 | 8 | 26 |
| 2026-09-28 (nach MZP-129) | 3 | 8 | 24 |
Was keine Prüfung fängt
Die drei stillen Mängel vom 26.09., nachgemessen an den heutigen SVGs:
- S1quadrantErledigt: „GROSSER AUFWAND“ und „E11 Lebende Reports“ liegen jetzt 21 px auseinander. Einen Kollisionstest zwischen Texten (
textOverlap) gibt es weiterhin nicht. - S2radarErledigt: Die Seriennamen stehen als Legende im SVG.
- S3lineTeilweise erledigt: Das Trenddiagramm zeichnet jetzt Achsenwerte und eine Legende. Der Titel steht nur im
<title>-Element und ist nicht sichtbar.
Verlauf
line, Slug mzp-eval-trend-2026-09-28). Aufrufe 28 → 30 → 34, grün 5 → 9 → 10, gelb 1 → 0 → 0, rot 0. Die Historie steht in results.json.