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.

Ziel
https://publisher.maierzone.de, Stand main 31e9958 (MZP-119, 120, 121, 126, 127, 129 deployt)
Aufgaben
c371a24, 12 Aufgaben (neu gegenüber dem 26.09.: art-a11y-check, art-live-report)
Stufen
deterministisch (Skill /mzp-eval) und LLM (run-llm.py, 05:35–06:33 Uhr)
Baseline
mzp-eval-2026-09-26: Gate grün, 9 grün, 1 UNEXPECTED_PASS; LLM: keine
Rohdaten
results.json · calls.jsonl.txt (jeder deterministische Aufruf mit exaktem Payload)

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.

Deterministische Stufe

grün
10
gelb
0
rot
0
UNEXPECTED_PASS
2
AufgabeFamilieStatusAufrufeknownIssueKernbefund
art-a11y-checkartifactgrün1—neu: A11Y_IMAGE_ALT als WARNING, 1 Element, ok bleibt true
art-asset-bundleartifactgrün3—3 Dateien, erreichbar, Render sauber
art-brokenartifactgrün2—ok:false mit allen vier Codes, keine Seite entstanden
art-live-reportartifactUNEXPECTED_PASS3E11neu: Live-Daten stats im Snapshot, Render sauber
art-patchartifactgrün5—Patch lässt app.js stehen, der Diff zeigt nur index.html
art-reportartifactgrün3—validate → stagingToken → publish, Render sauber
dia-architecture-autodiagramUNEXPECTED_PASS3E33 Kreuzungen, 8 Überlappungen, 24 Knicke (26.09.: 3 / 8 / 26)
dia-diffdiagramgrün4—diffDiagram meldet genau 1 Knoten + 1 Kante
dia-mermaid-flowdiagramgrün3—7 Knoten, 1 Zone; Überlappungen 1 → 0
dia-quadrant-longlabelsdiagramgrün2—textInsideViewBox sauber
dia-radar-wrappeddiagramgrün3—typeBlocks entpackt; Seriennamen jetzt als Legende gezeichnet
edge-invalid-slugedgegrün2—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').

Sonnet 5
15/15
Haiku 4.5
13/15
Median Aufrufe
2
Warnungen
0
AufgabeSonnet 5Aufrufe SHaiku 4.5Aufrufe H
dia-architecture-auto3/31–22/32–3
dia-diff3/323/32
dia-mermaid-flow3/32–42/31–2
dia-quadrant-longlabels3/333/32–6
dia-radar-wrapped3/32–33/33–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-autoKreuzungenÜberlappungenKnicke
2026-09-23 (vor E3)4316
2026-09-26 (nach E3)3826
2026-09-28 (nach MZP-129)3824

Was keine Prüfung fängt

Die drei stillen Mängel vom 26.09., nachgemessen an den heutigen SVGs:

  1. S1quadrant
    Erledigt: „GROSSER AUFWAND“ und „E11 Lebende Reports“ liegen jetzt 21 px auseinander. Einen Kollisionstest zwischen Texten (textOverlap) gibt es weiterhin nicht.
  2. S2radar
    Erledigt: Die Seriennamen stehen als Legende im SVG.
  3. S3line
    Teilweise erledigt: Das Trenddiagramm zeichnet jetzt Achsenwerte und eine Legende. Der Titel steht nur im <title>-Element und ist nicht sichtbar.

Verlauf

Liniendiagramm über drei Läufe: grün steigt von 5 über 9 auf 10, gelb fällt von 1 auf 0, rot bleibt 0, Aufrufe steigen von 28 über 30 auf 34.
Abb. 1 · Gezeichnet von MZP (Diagrammtyp 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.