Follow-up aus dem Bug-Hunt zu PR #79 (Cross-Model: Orchestrator-Wiring-Review). PR #79 stellte die Note-Seitenanker auf Druckseiten-/PageLabels um — zwei Konsumenten ziehen die Seitenzahl aber weiter aus dem physischen Index. Beides diagnostisch/Edge-Case, nicht gating (Headline-Metriken hallucination/coverage sind text-basiert und unverfälscht).
Fund 1 (MED) — Stage-8-Eval nutzt physischen PyMuPDF-Index
generative/eval_quality_v2.py:194 (_pdf_sentences) nummeriert range(1, len(pdf_doc)+1) + enumerate(pages, start=1), und generative/eval_quality.py:88 (_extract_page_text) nutzt pdf_doc[page_num-1] — beides physische 1-basierte Seiten. Die geschriebene Note zitiert nach PR #79 aber Druckseiten-Labels (z. B. „S. 159" für physische Seite 178).
Folge: best_page (persistiert in quality_history.jsonl) und die dem Judge gezeigten Pool-Seiten-Header (eval_quality_v4.py [K1] Seiten {pages}) liegen in einem anderen Namespace als die Note. Vor PR #79 nummerierte pdf_to_pages für alle PDFs (i+1, p) → gleicher Namespace; die Divergenz ist durch PR #79 neu. Betrifft nur label-tragende PDFs (Gate aktiv).
Fix-Skizze: Eval-Seitennummerierung ebenfalls aus _pdf_page_labels/_usable_page_labels ableiten (gemeinsame Quelle mit pdf_chunker), damit best_page + Judge-Pool im Druckseiten-Namespace liegen.
Fund 2 (LOW) — --load-drafts über Pipeline-Versionsgrenze
orchestrator.py lädt Drafts mit eingefrorenen source_anchors, figure_alt.embed_alt_figures liest die /PageLabels jedoch live neu aus der PDF. Wurde der State von einer Pre-PageLabel-Pipeline gespeichert (Anker = Form-Feed „S. 5"), berechnet das neue figure_alt Label-Seiten („S. 163") → bind_figures_to_drafts findet 0 Matches → alle Figuren still als no_match verworfen. Nur bei versions-gemischtem save/load; selten.
Quelle: statischer Orchestrator-Wiring-Review (Explore-Subagent), 2026-06-27. Fund 1 im echten Code (eval_quality_v2.py:194, eval_quality.py:88) verifiziert; Fund 2 als Edge-Case gemeldet.
Follow-up aus dem Bug-Hunt zu PR #79 (Cross-Model: Orchestrator-Wiring-Review). PR #79 stellte die Note-Seitenanker auf Druckseiten-
/PageLabelsum — zwei Konsumenten ziehen die Seitenzahl aber weiter aus dem physischen Index. Beides diagnostisch/Edge-Case, nicht gating (Headline-Metriken hallucination/coverage sind text-basiert und unverfälscht).Fund 1 (MED) — Stage-8-Eval nutzt physischen PyMuPDF-Index
generative/eval_quality_v2.py:194(_pdf_sentences) nummeriertrange(1, len(pdf_doc)+1)+enumerate(pages, start=1), undgenerative/eval_quality.py:88(_extract_page_text) nutztpdf_doc[page_num-1]— beides physische 1-basierte Seiten. Die geschriebene Note zitiert nach PR #79 aber Druckseiten-Labels (z. B. „S. 159" für physische Seite 178).Folge:
best_page(persistiert inquality_history.jsonl) und die dem Judge gezeigten Pool-Seiten-Header (eval_quality_v4.py[K1] Seiten {pages}) liegen in einem anderen Namespace als die Note. Vor PR #79 nummeriertepdf_to_pagesfür alle PDFs(i+1, p)→ gleicher Namespace; die Divergenz ist durch PR #79 neu. Betrifft nur label-tragende PDFs (Gate aktiv).Fix-Skizze: Eval-Seitennummerierung ebenfalls aus
_pdf_page_labels/_usable_page_labelsableiten (gemeinsame Quelle mitpdf_chunker), damit best_page + Judge-Pool im Druckseiten-Namespace liegen.Fund 2 (LOW) —
--load-draftsüber Pipeline-Versionsgrenzeorchestrator.pylädt Drafts mit eingefrorenensource_anchors,figure_alt.embed_alt_figuresliest die/PageLabelsjedoch live neu aus der PDF. Wurde der State von einer Pre-PageLabel-Pipeline gespeichert (Anker = Form-Feed „S. 5"), berechnet das neuefigure_altLabel-Seiten („S. 163") →bind_figures_to_draftsfindet 0 Matches → alle Figuren still alsno_matchverworfen. Nur bei versions-gemischtem save/load; selten.Quelle: statischer Orchestrator-Wiring-Review (Explore-Subagent), 2026-06-27. Fund 1 im echten Code (eval_quality_v2.py:194, eval_quality.py:88) verifiziert; Fund 2 als Edge-Case gemeldet.