Skip to content

fix(pipeline): Akronym-Fix verschont H1-Titel + verwirft Bindestrich-Kurzformen#295

Merged
TillQuandel merged 1 commit into
masterfrom
fix/279-h1-akronym
Jul 15, 2026
Merged

fix(pipeline): Akronym-Fix verschont H1-Titel + verwirft Bindestrich-Kurzformen#295
TillQuandel merged 1 commit into
masterfrom
fix/279-h1-akronym

Conversation

@TillQuandel

Copy link
Copy Markdown
Owner

Problem

expand_acronyms() wurde auf den kompletten draft.body inkl. H1-Header angewandt (Aufrufstelle generative/orchestrator.py:846). Zusaetzlich liess _short_is_valid() Bindestriche in der Short Form zu (generative/pipeline/acronym_fix.py:48-68), wodurch der Schwartz-Hearst-Scanner Fragmente wie „KI-" faelschlich als eigenstaendiges Akronym erkannte und beliebigen Fliesstext danach als „Langform" interpretierte.

Beleg aus Issue #279 (Lauf 5, Dreisiebner-PDF, alle 5 Notes betroffen):

# Spannungsfeld KI (künstlicher Intelligenz)- (KI-Einsatz im Studium und Berufsleben vorbereitet.)Fokus vs. …

statt des sauberen Titels # Spannungsfeld KI-Fokus vs. Skepsis.

Ursache

  1. _short_is_valid() (Zeile 48-68) akzeptierte Short Forms mit Bindestrich — „KI-" bestand die Validierung.
  2. expand_acronyms() (Zeile 180-205 bzw. jetzt 186-228) kannte keinen Header-Schutz und fuegte Auflösungen auch in die erste Zeile (den H1-Titel) ein.

Fix

  • _short_is_valid() lehnt jede Short Form mit - ab (Bindestrich-Fragmente sind per Schwartz-Hearst-Spec keine gueltigen Akronyme, sondern abgeschnittene Wortenden).
  • expand_acronyms() trennt die erste Zeile ab, wenn sie mit # beginnt (Markdown-H1), und wendet die Insertion nur noch auf den Rest an. Der Header wird beim Zusammenbau unveraendert vorangestellt. Notes ohne H1 verhalten sich unveraendert.
  • Keine Aenderung an der Aufrufstelle orchestrator.py:846 noetig — der Schutz sitzt zentral in expand_acronyms().

Testnachweis

RED (vor Fix, Tests bereits geschrieben, Fix zurueckgesetzt):

FAILED generative/tests/test_acronym_fix.py::test_short_invalid_hyphen_fragment
  AssertionError: assert not True
   +  where True = _short_is_valid('KI-')
FAILED generative/tests/test_acronym_fix.py::test_expand_acronyms_preserves_h1_header_against_corruption
  AssertionError: assert '# Spannungsf...s vs. Skepsis' == '# Spannungsf...s vs. Skepsis'
  - # Spannungsfeld KI-Fokus vs. Skepsis
  + # Spannungsfeld KI (künstliche Intelligenz)-Fokus vs. Skepsis
2 failed, 32 passed

GREEN (nach Fix):

34 passed

Volle Suite (generative, lib/decision_engine/tests, shared/tests):

5941 passed, 3 skipped, 8 deselected in 423.55s

ruff check + ruff format --check auf beiden geaenderten Dateien: beide gruen.

Scope

Nur generative/pipeline/acronym_fix.py (Fix) + generative/tests/test_acronym_fix.py (5 neue Tests). Keine Aenderung an orchestrator.py — Aufrufstelle bleibt unveraendert, da der Schutz zentral in expand_acronyms() liegt.

Fixes #279

…Kurzformen

Schwartz-Hearst-Scanner akzeptierte Bindestrich-Fragmente wie „KI-" als
eigenstaendige Short Form und interpretierte den folgenden Fliesstext als
vermeintliche Langform. expand_acronyms() wandte diese Fehlerkennung dann
auf den kompletten draft.body inkl. H1-Header an — in Lauf 5 (KI-Thema)
waren dadurch 4/5 Notes im H1-Titel entstellt (Issue #279).

Fix:
- _short_is_valid() lehnt Short Forms mit Bindestrich grundsaetzlich ab.
- expand_acronyms() nimmt die erste Zeile aus, wenn sie ein Markdown-H1
  (`# ...`) ist — Insertion greift nur noch auf den Body danach.

Tests: 5 neue Faelle in test_acronym_fix.py, u.a. Repro des Issue-Beispiels
(H1 mit „KI-" bleibt unveraendert) und Regressionsschutz fuer normale
Akronyme ohne Bindestrich (TAM, SEM).
@TillQuandel TillQuandel merged commit 6aae21f into master Jul 15, 2026
4 checks passed
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.

[HOCH] H1-Titel-Korruption durch Akronym-Fix — Schwartz-Hearst akzeptiert Bindestrich-Kurzformen wie „KI-"

2 participants