Skip to content

fix: PDF-Info-Dict-Autor/Jahr nicht mehr zitierfähig + kaputter Dup-Wikilink#71

Merged
TillQuandel merged 2 commits into
masterfrom
fix/pdf-metadata-attribution
Jun 25, 2026
Merged

fix: PDF-Info-Dict-Autor/Jahr nicht mehr zitierfähig + kaputter Dup-Wikilink#71
TillQuandel merged 2 commits into
masterfrom
fix/pdf-metadata-attribution

Conversation

@TillQuandel

Copy link
Copy Markdown
Owner

Zwei universelle Pipeline-Fehler, aufgedeckt durch einen realen Lauf über Knowles, From Pedagogy to Andragogy (Notes → Inbox), TDD-implementiert und Cross-Model-reviewt (Codex Pass 1+2, Qwen).

FIX #1 (HIGH) — Quellen-Fehlattribution

Das PDF trug im Info-Dict Author: Pierre Landry (wer das Kapitel 2019 in Word abtippte) + CreationDate 2019alle 7 erzeugten Notes zitierten „Landry 2019" statt Knowles. Universelle Klasse: Info-Dict-Autor = Datei-Ersteller, CreationDate-Jahr = Abtipp-/Speicher-Zeitpunkt — beide identifizieren weder Werk-Autor noch Publikationsjahr (betrifft jedes abgetippte/gescannte/neu-gespeicherte PDF).

  • pdf_chunker._parse_pdfinfo_output() (neu, pure): Info-Dict-Autor/CreationDate nur diagnostisch (InfoDictAuthor/InfoDictCreationYear), nicht als Author/Year.
  • vault_writer.apply_filename_citation_metadata() (neu): zitierfähigen Autor/Jahr aus dem Dateiname befüllen (CrossRef behält Vorrang, Filename-Jahr autoritativ) — vor dem Extractor, sonst Platzhalter „Autor" im Body.
  • orchestrator: Helper vor dem Extractor; Enrichment-Gate öffnet jetzt → CrossRef läuft.
  • pdf_enrich._zotero_author_matches_embedded (zweiter Info-Dict-Kanal, von Codex gefunden): embedded Autor nur bei positiver Dateiname-Bestätigung — nicht-parsbarer Dateiname → False (vorher fälschlich True); Nachname-Gleichheit statt Substring (keine „Li" bestätigt „Williams"-Falle).

Knowles-Fall danach korrekt: Dateiname „Knowles" widerspricht „Landry" → embedded verworfen → „Knowles" gewinnt.

FIX #2 (MED) — kaputter Sammel-Wikilink

Das LLM lieferte duplicate_path als EINE kommaseparierte Liste von 4 Titeln → related-Eintrag wurde [[A, B, C, D]].

  • cross_reference._clean_dup_targets() (neu, pure): zerlegt in saubere Einzelziel-Stems.
  • run(): bei >1 Kandidat Review-Flag + saubere Einzel-Links, kein action=extend. Einzel-Target-Pfad unverändert.

Bewusst nicht in diesem PR

  • pdftotext ohne -layout (zweispaltige PDFs): ein korrekter Fix ist kein Minimal-Fix (selbst -layout entwürfelt die Spalten nicht; spalten-bewusste Extraktion = eigenes Feature mit Regressionsrisiko für den häufigen einspaltigen Fall) und verursachte im Lauf keinen Inhaltsfehler. Eigener Design-Pass.

Tests

15 neue TDD-Tests (je RED→GREEN), volle generative-Suite 644 passed.

🤖 Generated with Claude Code

Tilltime added 2 commits June 25, 2026 20:13
Realer Lauf (Knowles "From Pedagogy to Andragogy") deckte systematische
Quellen-Fehlattribution auf: das PDF trug im Info-Dict Author "Pierre Landry"
(wer das Kapitel abtippte) + CreationDate 2019 → alle erzeugten Notes zitierten
"Landry 2019" statt Knowles. Universell (nicht quellen-spezifisch): Info-Dict-
Author = Datei-Ersteller, CreationDate-Jahr = Speicher-/Abtipp-Zeitpunkt — beide
identifizieren weder Werk-Autor noch Publikationsjahr.

- pdf_chunker._parse_pdfinfo_output() (neu, pure): Info-Dict-Author/CreationDate
  nur diagnostisch (InfoDictAuthor/InfoDictCreationYear), nicht als Author/Year.
- vault_writer.apply_filename_citation_metadata() (neu): zitierfähigen Author/Year
  aus dem Dateiname befüllen (CrossRef behält Vorrang, Filename-Year autoritativ),
  vor dem Extractor — sonst Platzhalter "Autor" im Body.
- orchestrator: Helper vor dem Extractor aufrufen (ersetzt inline Year-Merge);
  Enrichment-Gate öffnet jetzt (kein Info-Dict-Author/Year) → CrossRef läuft.
- pdf_enrich._zotero_author_matches_embedded (2. Info-Dict-Kanal, Codex-Review):
  embedded Author nur bei positiver Dateiname-Bestätigung — nicht-parsbarer
  Dateiname → False (vorher fälschlich True); Nachname-Gleichheit statt Substring
  (keine "Li" bestätigt "Williams"-Falle).

TDD: 13 neue Tests. Cross-Model-reviewt (Codex Pass 1+2, Qwen). Suite grün.
…s ein Wikilink

Knowles-Lauf: das LLM lieferte duplicate_path als EINE kommaseparierte Liste von
4 Titeln → related-Eintrag wurde der kaputte Sammel-Wikilink
"[[A, B, C, D]]". duplicate_path ist als EIN Merge-Ziel modelliert.

- _clean_dup_targets() (neu, pure): zerlegt in saubere Einzelziel-Stems
  (Komma-Split, Klammern/Alias/Pfad entfernt).
- run(): bei >1 Kandidat Review-Flag + saubere Einzel-Links, KEIN action=extend
  (man kann nicht in mehrere Notes mergen). Einzel-Target-Pfad unverändert
  (elif statt dup_risk-Reassignment — Klarheit, Qwen-Review).

TDD: 3 neue Helper-Tests. Suite grün.
@TillQuandel TillQuandel merged commit 9f2931c into master Jun 25, 2026
2 checks passed
@TillQuandel TillQuandel deleted the fix/pdf-metadata-attribution branch June 25, 2026 18:29
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

ER-Stage-1-Threshold bei Praefix-dominanten Titeln Refine-Redesign: iterative Ueberarbeitung statt Neugenerierung

2 participants