fix(eval): reeval_baseline.py fuer #232-Re-Eval-Sweep einsatzbereit machen#303
Merged
Merged
Conversation
…achen Ist-Zustand (Dry-Run auf master a720399): "Zu evaluieren: 0 Notes" — alle 14 Baseline-Ordner in .cache/eval/baseline/ wurden uebersprungen. Zwei Bugs: 1. _already_done() pruefte hartkodiert eval_version='4.1'. Nach dem EVAL_VERSION-Bump auf 4.3 (#298) markierte das jede historisch mit 4.1 evaluierte Note als "schon erledigt" — obwohl deren Re-Evaluierung unter der aktuellen Version der Zweck des Sweeps ist. 2. PDF_MAP war veraltet (verwies auf nicht-existierende Dateinamen, kannte die meisten der 14 Ordner gar nicht) und nutzte Praefix-Matching (folder.startswith(prefix)) — das kollidiert real: "Porst-2014-Auszug- S1-40-bak-preclean-20260530" beginnt mit "Porst-2014-Auszug-S1-40" und haette denselben Eintrag geerbt, obwohl der Backup-Ordner ausgeschlossen sein soll. Fix: - Guard scopt auf _eq.EVAL_VERSION (additiv — Alt-Zeilen bleiben, Resume innerhalb einer Version bleibt erhalten). - PDF_MAP komplett rekonstruiert aus der historischen Note->PDF-Zuordnung in atomic_analytics.db (note_evals.pdf je vault__*.md-Datei, eval_version=4.1) + Existenz-Check gegen LITERATURE_DIR (Config-Konstante statt hartkodierter OneDrive-Pfade — CLAUDE.md-Pfadregel). Exakter Ordnername statt Praefix. 6 Ordner gemappt, 8 explizit ausgeschlossen (dokumentiert im Code-Kommentar je Eintrag): leerer Alt-Ordner, Backup, 3x Test-/Struktur-Fixture, 2x fehlendes historisches PDF (bates-2017.pdf, zettelkasten-primer.pdf), 1x Auszug-PDF fehlt (Porst — bewusst NICHT durchs Voll-PDF ersetzt, Score- Verwaesserung durch mehr Chunks; offener Punkt s. PR-Body). - Neue --baseline-dir-Option (Default ROOT-relativ) fuer Funktionsnachweise aus einem isolierten Worktree ohne eigenes .cache. Dry-Run danach (--baseline-dir gegen das Haupt-Repo-Cache, read-only): 27 Notes ueber 6 Ordner zu evaluieren, 0 uebersprungen, 8 Ordner sauber geskippt. Tests: TDD (9 RED -> GREEN, test_reeval_baseline_guard.py neu). Volle Suite (generative + lib/decision_engine/tests + shared/tests): 5969 passed, 3 skipped, 8 deselected.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Ist-Zustand
python reeval_baseline.py --dry-runauf master (a720399, enthält #298) meldet „Zu evaluieren: 0 Notes" — alle 14 Ordner ingenerative/.cache/eval/baseline/werden übersprungen. Zwei unabhängige Bugs:_already_done()prüft hartkodierteval_version='4.1'(Zeile 92). Nach dem EVAL_VERSION-Bump auf 4.3 (fix(eval): CID-Font-Artefakte (U+0231/U+022C) im Quelltext zurückmappen — Grounder bestraft OCR-degradierte PDFs nicht mehr (#278) #298) markiert das jede historisch mit 4.1 evaluierte Note als „schon erledigt" — obwohl deren Re-Evaluierung unter der aktuellen Version der Zweck des Sweeps ist.PDF_MAPist veraltet (verweist auf nicht-existierende Dateinamen wie „Bates - 2017 - Information Behavior.pdf"; kennt die meisten der 14 Ordner gar nicht) und nutzt Präfix-Matching (folder.startswith(prefix)).Fix
eval_version='4.1'_eq.EVAL_VERSION(aktuell 4.3), additiv — alte Zeilen bleiben, Resume innerhalb einer Version bleibt erhaltenquery_note_evals(eval_version="4.1")query_note_evals(eval_version=_eq.EVAL_VERSION)folder.startswith(prefix)) — kollidiert real (s.u.)PDF_MAP.get(folder_name))C:/Users/tillq/OneDrive/...-Literalegenerative.config.LITERATURE_DIR(vorhandene Config-Konstante; CLAUDE.md-Pfadregel: keine hartkodiertenC:/Users/...-Literale im Code)BASELINE_DIRnicht überschreibbar--baseline-dir-Option (Default bleibt ROOT-relativ) +main(argv=...)für Tests/FunktionsnachweiseDie Präfix-Kollision konkret:
"Porst-2014-Auszug-S1-40-bak-preclean-20260530"beginnt mit"Porst-2014-Auszug-S1-40"— unter Präfix-Matching hätte der Backup-Ordner denselben Eintrag geerbt wie der Hauptordner, obwohl er explizit ausgeschlossen sein soll. Test dafür (synthetisch,Foo/Foo-bak):TestFindPdfExactMatchNoPrefixCollision.PDF_MAP — historischer Beleg je Eintrag
Rekonstruiert aus
atomic_analytics.db(note_evals.pdfjevault__*.md-Datei des jeweiligen Ordners, read-only Query gegen die Bestandsdaten) + Existenz-Check gegenLITERATURE_DIR(C:/Users/tillq/OneDrive/Dokumente/Literatur/). Alle 14 aktuell existierenden Baseline-Ordner:POISON_TITLE-Fixture intest_title_trust_cross_check.py/test_load_draft_state_roundtrip.py— vermutlich Testkontamination der Produktions-DB, nicht die reale Quelle); „Der rote Faden...md" → Schlebbe-PDF; „Information Need.md" ohne DB-Historie-bak-preclean)source-file: "flags.pdf"source-file: "src.pdf"6 Ordner gemappt, 8 explizit ausgeschlossen (jeweils mit Grund im Code-Kommentar bei
PDF_MAP, kein stilles Weglassen).Sonderfall-Entscheide (Auftrag Punkt 3)
vault__*.md-Dateien, aber deren Frontmatter (source-file: "flags.pdf"bzw."src.pdf") zeigt eindeutig Pytest-Fixtures — keine echten Baseline-Notes. Sauber geskippt (kein PDF im Mapping, Skip-Meldung „kein PDF für: …").LITERATURE_DIR→ Skip + Dokumentation.Dry-Run — Vorher/Nachher
Vorher (master, unverändert):
Zu evaluieren: 0 NotesNachher (
--baseline-dirgegen das Haupt-Repo-Cache,ATOMIC_DB_PATH/ATOMIC_AGENT_PDF_BASEauf die echten Pfade gesetzt, read-only — kein LLM-Call, kein DB-Write):27 Notes über 6 Ordner (Bates - Information Behavior 4, Ebner 2, Hrastinski 2, Schlebbe 3, Spreitzer 4, Sühl-Strohmenger 12), 0 „übersprungen" (bereits mit 4.3 evaluiert) — korrekt, da alle 27 bisher nur 4.1-Historie haben. 8 Ordner sauber geskippt. 6 + 8 = 14, deckt alle real existierenden Baseline-Ordner ab.
Tests (TDD)
Neue Datei
generative/tests/test_reeval_baseline_guard.py, 12 Tests, alle vorher gegen den unveränderten Code als RED verifiziert (9 schlugen erwartungsgemäß fehl, 3 bestanden bereits als Baseline-Sanity-Checks):TestAlreadyDoneUsesCurrentEvalVersion— Guard nutzt_eq.EVAL_VERSION, nicht 4.1 (RED:assert False is Truebzw.assert True is Falsegegen Alt-Code).TestFindPdfExactMatchNoPrefixCollision— exakter Abgleich, synthetisch (Foo/Foo-bak), deckt die reale Präfix-Kollision ab.TestPdfMapRealBaselineFolders— Regression-Lock der obigen Beleg-Tabelle (6 gemappte + 8 ausgeschlossene Ordner).test_no_hardcoded_literature_path_in_source— Regression-Guard analogeval_figure_feasibility.py(keineOneDrive/Dokumente/Literatur-Literale).TestBaselineDirOption— neue CLI-Option +argv-Parameter.Ergebnis: 12/12 GREEN, keine Regression in
test_baseline_run_namespace.py(bestehende reeval_baseline-Tests, 13/13 weiterhin grün).Volle Suite (
generative+lib/decision_engine/tests+shared/tests): 5969 passed, 3 skipped, 8 deselected (keine Failures).ruff:
ruff checkclean,ruff format --checkclean (nachruff formatauf beide geänderten Dateien angewendet).Offene Punkte
LITERATURE_DIRliegen. Falls diese PDFs nachträglich in die Literatur-Sammlung aufgenommen werden,PDF_MAPentsprechend ergänzen (nicht automatisch durch ein "ähnliches" PDF ersetzen).ATOMIC_AGENT_PDF_BASEist auf diesem Rechner aktuell nicht gesetzt (weder ingenerative/.envnoch als User-/Machine-Umgebungsvariable) —LITERATURE_DIRfällt dann auf das nicht existierende~/Documents/Literaturzurück. Für den echten Sweep muss die Variable (oder ein Eintrag ingenerative/.env) auf den OneDrive-Literatur-Ordner zeigen, sonst melden alle 6 gemappten Ordner „PDF nicht gefunden". Für den Dry-Run-Nachweis in diesem PR wurde sie inline im Kommando gesetzt — kein Repo-File geändert.Kein echter Sweep in diesem PR (keine LLM-Calls, kein DB-Write) — der läuft separat nach Merge.