feat: Größe ist das letzte alleinstehende (L)-Token der Zeile (D68)

Erkannt nur alleinstehend angesetzt (wie #id und :#…) — damit greifen die
Zitier-Konventionen "(L)" und ((L)) von selbst, und Backend(L) bleibt
Label. Das letzte Token gewinnt statt des ersten: Die Größe steht hinter
dem Titel, frühere Vorkommen sind Text. SPEC §1/§5 und llms.md nachgezogen;
mitgelieferte Beispiele unverändert (Parse-Vergleich alt/neu).

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
mhoennig
2026-08-25 10:19:52 +02:00
co-authored by Claude Fable 5
parent 9999c7973e
commit 59da485af6
6 changed files with 119 additions and 5 deletions
+42
View File
@@ -5056,3 +5056,45 @@ kann den Handler prinzipiell nicht treffen — der erste Prüflauf sah deshalb
wie ein Fehler aus, der keiner war. Geprüft wird das Tastatur-Pendant mit
einem korrekt gebauten `KeyboardEvent`; der Klick-Weg ließ sich dagegen echt
auslösen.
## D68 — Größe: das letzte alleinstehende Token, nicht das erste
Gemeldet vom Nutzer: Manchmal braucht der Titel runde Klammern — und wenn ihr
Inhalt zufällig ein Größenkürzel ist (`Variante (L) bauen`), fraß die
Extraktion das Titel-`(L)` als Größe. Mit echter Angabe dahinter war es
doppelt falsch: Das Literal wurde die Größe, das gemeinte `(M)` blieb im
Label. Entschieden (Nutzer): beide vorgeschlagenen Regeln kombiniert.
**Alleinstehend angesetzt** (`(^|\s)\(…\)`) — dieselbe Regel-Familie wie bei
`#id`, `:#…`, `!!!` und `&tag`, und der eigentliche Gewinn liegt darin, dass
die **vorhandenen Zitier-Konventionen dadurch von selbst greifen**: `"(L)"`
bleibt Label (das `(` hängt am `"`), `((L))` ebenso (am äußeren `(`). Kein
neues Zeichen, kein Escape — die Notation escapt weiterhin nirgends (D59).
Wer eine Größe erwähnen will, zitiert sie; llms.md führt beide Formen in der
Zitier-Faustregel.
**Das letzte Token gewinnt, nicht das erste.** Die übliche Schreibweise
stellt die Größe hinter den Titel — das letzte Token ist die Angabe, alles
davor ist Text. Damit löst sich auch der Fall ohne Anführungszeichen richtig
auf: `Variante (L) bauen (M)` → Größe `M`, Label „Variante (L) bauen“. In
der Idee-Runde war „letztes statt erstes“ zunächst verworfen worden („stille
Umdeutung bestehender Zeilen“); der Einwand wiegt hier wenig, weil die alte
Erste-gewinnt-Lesart in genau diesen Zeilen schon falsch war — es gibt keine
richtige Bedeutung, die verloren ginge.
**Preis, benannt:** `Backend(L)` ohne Leerzeichen ist keine Größe mehr. Der
Fehlermodus ist der laute (das Badge fehlt sichtbar, D59-Haltung), und in den
mitgelieferten Beispielen kommt die enge Schreibweise nicht vor — geprüft per
Grep und per Parse-Vergleich alt/neu über alle `docs/examples/*.werkbaum`
(Knoten- und Größenzahlen identisch, Warnungen unverändert; die drei
`sizeConflict` der Demo-Pläne sind Altbestand).
**Umgesetzt als Schleife über alle Treffer** statt eines cleveren
Rückwärts-Regex: gut lesbar, und der führende Leerraum der Fundstelle bleibt
beim Entfernen stehen (wie `pre` bei den übrigen Extraktionen). SPEC §1
(Schritt 4, eigener Größen-Block, Referenz-Regex) und §5 zuerst, llms.md im
selben Zug (Schritt-3-Regel, Größen-Abschnitt, Zitier-Faustregel).
**Nachgemessen:** 445 Tests (4 neue in `tests/parser.test.js`); Gegenprobe
per Mutation: erster statt letzter Treffer → genau der Letztes-gewinnt-Test
fällt; Anker entfernt → genau die zwei Alleinstehend-/Zitier-Tests. Alle
Snapshots (kanonisches Beispiel §10) unverändert.