MZP · Agenten-Evals · MZP-113 · 2026-10-03

Siebter Eval-Lauf: 15 von 15 grün, erste volle LLM-Stufe

Die deterministische Stufe ist unverändert sauber: 15 Aufgaben grün, 42 Aufrufe wie am 02.10., keine Regression. Neu ist die LLM-Stufe über den ganzen Korpus statt nur über fünf Diagramm-Aufgaben. Sie zeigt, wo sich der Server gut selbst erklärt (Diagramme, Report-Artefakte) und wo nicht (Live-Daten, ASCII-Skizzen, analog-Blätter). Zwei Befunde sind echte Server-Fehler, die keine Suite sieht.

Ziel
https://publisher.maierzone.de
Aufgaben
bed2685, 15 Aufgaben, unverändert gegenüber der Baseline
Stufen
deterministisch (Skill /mzp-eval) und LLM (run-llm.py, Sonnet 5 + Haiku 4.5, je 3 Läufe)
Baseline
mzp-eval-2026-10-02: Gate grün, 15 grün; LLM-Baseline mzp-eval-2026-09-30 (nur Haiku, 5 Diagramm-Aufgaben)
Rohdaten
results.json · calls.jsonl.txt (jeder deterministische Aufruf mit exaktem Payload)

Handlungsbedarf

Kein UNEXPECTED_PASS, kein Marker zu entfernen. Aus der LLM-Stufe kommen zwei Server-Befunde, beide still (der Server meldet Erfolg oder schweigt):

  1. figure.svg fällt bei HTML-Entities still weg. Steht im <svg id="az-svg"> eines analog-Blatts eine HTML-Entity wie &middot;, verwirft FigureSvgExtractor das Fragment als nicht wohlgeformt. Es entsteht weder figure.svg noch figure.png, der Publish meldet trotzdem FIGURE_CLEAN. Die Agenten haben die Entity aus dem Gerüst von getCapabilityFor('analog') übernommen (dort im Kopf, außerhalb des SVG) und in die Pflicht-Legende gesetzt. So scheiterten zwei von drei Sonnet-Läufen von art-analog-tusche. Vorschlag: Entities vor der Extraktion auflösen oder eine Notice FIGURE_SVG_SKIPPED ausgeben.
  2. publishPage meldet einen ungültigen Slug unstrukturiert. publishArtifact antwortet auf eval-slug.test mit INVALID_SLUG, suggestion und resolution; der Template-Weg publishPage nur mit nacktem Text. Sonnet wählte zweimal genau diesen Weg (B9 dort nur halb behoben).

Dazu kommen Schwächen der Aufgaben selbst (siehe unten, Was an den Aufgaben liegt). Dieser Lauf ändert keine Aufgaben-Dateien.

Deterministische Stufe

grün
15
gelb
0
rot
0
UNEXPECTED_PASS
0
AufgabeFamilieStatusAufrufeknownIssueKernbefund
art-a11y-checkartifactgrün1—A11Y_IMAGE_ALT als WARNING, 1 Element, ok bleibt true
art-analog-tuscheartifactgrün3—4 Schwellstriche, FIGURE_CLEAN; Seite und figure.svg tragen die Tusche-Kontur
art-asset-bundleartifactgrün3—3 Dateien, erreichbar, Render sauber
art-brokenartifactgrün2—ok:false mit allen vier Codes, keine Seite entstanden
art-live-reportartifactgrün3—Live-Daten stats im Snapshot (449 Seiten), 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-autodiagramgrün3—3 Kreuzungen, 8 Überlappungen, 24 Knicke (02.10.: 3 / 8 / 24)
dia-ascii-architecturediagramgrün3—4 Knoten, 3 Kanten, 2 Zonen; 1 Lage-Vorgabe, 0 unerfüllt; Layout sauber
dia-constraintsdiagramgrün2—1 Wunsch, 0 unerfüllt; 0 Kreuzungen, 4 Knicke
dia-diffdiagramgrün4—diffDiagram meldet genau 1 Knoten + 1 Kante
dia-mermaid-flowdiagramgrün3—7 Knoten, 1 Zone; 2 Kreuzungen, 12 Knicke wie am 02.10.
dia-quadrant-longlabelsdiagramgrün2—textInsideViewBox sauber (viewBox 960 × 540)
dia-radar-wrappeddiagramgrün3—typeBlocks entpackt (INFO), Achsentext im SVG
edge-invalid-slugedgegrün2—INVALID_SLUG strukturiert, suggestion eval-slug-test

42 MZP-Aufrufe in den Aufgaben, genau wie am 02.10.; alle Layout-Kennzahlen sind unverändert (dia-architecture-auto 3 / 8 / 24, dia-mermaid-flow 2 / 0 / 12). Beim Aufräumen am Anfang war Produktion rund 40 Sekunden nicht erreichbar: 16 von 17 parallel gesendeten deletePage kamen als HTTP 502 zurück. Danach wurde nur noch einzeln gesendet, alle 17 Slugs waren schon weg. Ob die parallelen Aufrufe den Ausfall ausgelöst haben, ist nicht geklärt. ms ist nicht gemessen.

LLM-Stufe: erster Volllauf

Erstmals alle 15 Aufgaben, je drei Läufe mit Sonnet 5 und Haiku 4.5, abgeschottet wie am 28.09. (nur ToolSearch und MZP-Tools). Gemessen sind 87 von 90 Läufen: Der Lauf brach zweimal ab, weil das Nutzungslimit auch die Helfer-Sitzungen für Aufräumen und Nachprüfung stoppte (NO_CALL). Es fehlen die drei Haiku-Läufe von edge-invalid-slug, ein Sonnet-Lauf derselben Aufgabe ist VERIFY_ERROR (nicht gemessen). Vor dem Lauf wurde ein Fehler im Runner behoben: run-llm.py schnitt das Frontmatter von dia-ascii-architecture an dem --- in der ASCII-Skizze ab; die Aufgabe hätte sonst keinen Nachprüf-Schritt gehabt.

Sonnet 5
22/31
Haiku 4.5
21/34
Läufe gesamt
87
Warnungen (Q18)
1
AufgabeSonnet 5 ErfolgSonnet 5 AufrufeHaiku 4.5 ErfolgHaiku 4.5 Aufrufe
art-a11y-checknur gemessen (+3 ungültig)1 (0–2)nur gemessen (+3 ungültig)0 (0–0)
art-analog-tusche1/34 (4–5)0/34 (3–5)
art-asset-bundle2/2 (+1 ungültig)1 (0–2)1/1 (+2 ungültig)1 (1–1)
art-broken0/0 (+3 ungültig)0 (0–0)1/30 (0–1)
art-live-report2/34 (1–6)0/31 (1–3)
art-patch0/1 (+2 ungültig)0 (0–0)0/30 (0–0)
art-report3/32 (2–2)3/31 (1–1)
dia-architecture-auto2/2 (+1 ungültig)2 (0–2)2/35 (3–6) CALLS_UP
dia-ascii-architecture0/35 (1–10)2/39 (5–9)
dia-constraintsnur gemessen (+3 ungültig)3 (2–3)nur gemessen (+3 ungültig)1 (1–2)
dia-diff3/32 (2–2)3/32 (2–3)
dia-mermaid-flow3/32 (2–3)3/31 (1–1)
dia-quadrant-longlabels3/33 (2–3)3/33 (2–6)
dia-radar-wrapped3/33 (2–3)3/34 (3–4)
edge-invalid-slug0/2 (+1 ungültig)2 (0–2)——

Erfolg = bestandene Nachprüfung / gemessene Läufe; „ungültig“ = Läufe, die der Runner nicht misst (Agent griff zu einem gesperrten Werkzeug). Aufrufe als Median mit Spanne (min–max) über alle drei Läufe.

Vergleich mit der LLM-Baseline (Q18). Nur die fünf Diagramm-Aufgaben × Haiku sind vergleichbar. Erfolg 14/15 wie am 30.09., also kein SUCCESS_DOWN. Eine CALLS_UP-Warnung: dia-architecture-auto × Haiku braucht im Median 5 statt 2 Aufrufe, mit 6 abgelehnten Eingaben (DIAGRAM_INVALID). dia-quadrant-longlabels fällt von 4 auf 3 Aufrufe, dia-radar-wrapped bleibt bei 4.

Wo sich der Server gut erklärt. art-report, dia-diff, dia-mermaid-flow, dia-quadrant-longlabels und dia-radar-wrapped bestehen mit beiden Modellen jeden Lauf, meist mit 1–3 Aufrufen.

Wo nicht.

Was an den Aufgaben liegt. Zwölf Läufe sind ungültig, weil der Agent zu Bash oder Glob griff. Drei Prompts lesen sich so, als lägen Dateien bereit: art-a11y-check („ein Bild bild.svg“), art-broken („als eine einzige Datei index.html“), art-patch („mit einer eingebundenen app.js“) und art-asset-bundle (Platzhalter-Bild erzeugen). art-patch kam deshalb in keinem Lauf zum Publish (0/4 gemessen). Bei art-broken fehlt dem Prompt der kaputte Inhalt; ein Haiku-Lauf „bestand“, indem er eine eigene saubere Seite schrieb. Das misst B1 nicht. Diese Prompts sollten den Inhalt nennen oder ausdrücklich sagen, dass der Agent ihn selbst schreibt.

Verlauf

Liniendiagramm über sieben Läufe: grün steigt von 5 über 9, 10, 12 und 13 auf 15 und bleibt bei 15, gelb fällt von 1 auf 0, rot bleibt 0, Aufrufe steigen von 28 über 30, zweimal 34 und 36 auf 42 und bleiben bei 42.
Abb. 1 · Gezeichnet von MZP (Diagrammtyp line, Slug mzp-eval-trend-2026-10-03). Aufrufe 28 → 30 → 34 → 34 → 36 → 42 → 42, grün 5 → 9 → 10 → 12 → 13 → 15 → 15, gelb 1 → 0, rot 0. Die Historie mit den LLM-Werten je Modell steht in results.json.