lint zählt Zitat-Zeilen statt Zitat-Blöcke, das Quote-Limit meldet umbrochene Zitate falsch #22

Closed
opened 2026-08-31 18:18:01 +00:00 by torben · 1 comment
Owner

Der Anlass

Beim Verifizieren von #8 (1.7.1) meldete tools/wikitool lint --fail-on-error:

## Pages Exceeding Quote Limit (>2/page)

- [[Source - Conversation - Auto Mode and Tool Choice Session 2026-08-31]] has 4 quoted lines - trim or confirm they're load-bearing

Die Seite hat aber kein viertes Zitat, sondern genau eines. Zeilen 48-51:

> While auto mode is active: Do your work through the Bash tool wherever it can accomplish the
> job: read files with `cat`, `head`, or `sed -n`, search with `grep` and `find`, and make file
> changes with `sed`, heredocs, or short scripts, rather than using the dedicated Read, Edit, or
> Write tools. Fall back to a dedicated tool only when Bash genuinely cannot do the job.

Ein einziger Blockquote, auf vier Zeilen umbrochen.

Die Ursache

tools/wiki_tools/commands/lint.py:157:

quote_count = sum(1 for line in page.body.splitlines() if line.lstrip().startswith(">"))
if quote_count > QUOTE_LIMIT:

Gezählt werden >-Zeilen, nicht Zitate. Damit misst die Regel die Zeilenbreite mit, gegen die sie gar nichts sagen will: dasselbe Zitat als eine lange Zeile geschrieben zählt 1, umbrochen zählt 4.

Warum das mehr ist als ein Schönheitsfehler

Die Regel soll gegen zu viel wörtlich übernommenen Quelltext auf einer kb/-Seite schützen — das ist eine Aussage über Menge an fremdem Wortlaut, und die korreliert mit der Zahl der Zitate, nicht mit dem Zeilenumbruch. In der jetzigen Form belohnt sie überlange Zeilen und bestraft die Umbruchbreite, die der Rest des Repos einhält. Ein Autor, der die Meldung ernst nimmt, macht die Seite also schlechter lesbar, um den Lint zu beruhigen.

Praktisch schlimmer: ein Falschbefund pro Lint-Lauf gewöhnt den nächsten Leser daran, den Abschnitt zu überfliegen. Genau die Seiten, die die Regel finden soll, stehen dann daneben.

Vorschlag

Zusammenhängende >-Zeilen als einen Block zählen — eine Leerzeile oder eine Nicht-Zitat-Zeile trennt zwei Zitate. QUOTE_LIMIT bleibt bei 2, bedeutet dann aber „zwei Zitate", was es dem Namen nach ohnehin schon behauptet.

Offen und bewusst nicht mitentschieden: ob zusätzlich eine Obergrenze für die Länge eines einzelnen Zitats sinnvoll ist. Ein 80-zeiliges Einzelzitat wäre nach dem Fix legal und ist vermutlich auch ein Befund — aber das ist eine zweite Regel mit eigener Schwelle, nicht dieser Bugfix.

Akzeptanzkriterien

  • Ein über mehrere Zeilen umbrochenes Zitat zählt als eines.
  • Zwei durch eine Leerzeile getrennte Zitate zählen als zwei.
  • Test für beide Fälle, plus der Grenzfall „drei Blöcke, davon zwei umbrochen".
  • Source - Conversation - Auto Mode and Tool Choice Session 2026-08-31 verschwindet aus dem Bericht, ohne dass die Seite angefasst wird.
  • Changelog-Eintrag, PATCH.

Herkunft

Gefunden in der Sitzung zu #8, dort nicht behoben, weil es eine andere Datei und eine andere Regel ist als die dort geänderte.

## Der Anlass Beim Verifizieren von #8 (1.7.1) meldete `tools/wikitool lint --fail-on-error`: ``` ## Pages Exceeding Quote Limit (>2/page) - [[Source - Conversation - Auto Mode and Tool Choice Session 2026-08-31]] has 4 quoted lines - trim or confirm they're load-bearing ``` Die Seite hat aber **kein** viertes Zitat, sondern genau eines. Zeilen 48-51: ```markdown > While auto mode is active: Do your work through the Bash tool wherever it can accomplish the > job: read files with `cat`, `head`, or `sed -n`, search with `grep` and `find`, and make file > changes with `sed`, heredocs, or short scripts, rather than using the dedicated Read, Edit, or > Write tools. Fall back to a dedicated tool only when Bash genuinely cannot do the job. ``` Ein einziger Blockquote, auf vier Zeilen umbrochen. ## Die Ursache `tools/wiki_tools/commands/lint.py:157`: ```python quote_count = sum(1 for line in page.body.splitlines() if line.lstrip().startswith(">")) if quote_count > QUOTE_LIMIT: ``` Gezählt werden `>`-Zeilen, nicht Zitate. Damit misst die Regel die Zeilenbreite mit, gegen die sie gar nichts sagen will: dasselbe Zitat als eine lange Zeile geschrieben zählt 1, umbrochen zählt 4. ## Warum das mehr ist als ein Schönheitsfehler Die Regel soll gegen zu viel wörtlich übernommenen Quelltext auf einer `kb/`-Seite schützen — das ist eine Aussage über *Menge an fremdem Wortlaut*, und die korreliert mit der Zahl der Zitate, nicht mit dem Zeilenumbruch. In der jetzigen Form belohnt sie überlange Zeilen und bestraft die Umbruchbreite, die der Rest des Repos einhält. Ein Autor, der die Meldung ernst nimmt, macht die Seite also schlechter lesbar, um den Lint zu beruhigen. Praktisch schlimmer: ein Falschbefund pro Lint-Lauf gewöhnt den nächsten Leser daran, den Abschnitt zu überfliegen. Genau die Seiten, die die Regel finden soll, stehen dann daneben. ## Vorschlag Zusammenhängende `>`-Zeilen als **einen** Block zählen — eine Leerzeile oder eine Nicht-Zitat-Zeile trennt zwei Zitate. `QUOTE_LIMIT` bleibt bei 2, bedeutet dann aber „zwei Zitate", was es dem Namen nach ohnehin schon behauptet. Offen und bewusst nicht mitentschieden: ob zusätzlich eine Obergrenze für die *Länge* eines einzelnen Zitats sinnvoll ist. Ein 80-zeiliges Einzelzitat wäre nach dem Fix legal und ist vermutlich auch ein Befund — aber das ist eine zweite Regel mit eigener Schwelle, nicht dieser Bugfix. ## Akzeptanzkriterien - [ ] Ein über mehrere Zeilen umbrochenes Zitat zählt als eines. - [ ] Zwei durch eine Leerzeile getrennte Zitate zählen als zwei. - [ ] Test für beide Fälle, plus der Grenzfall „drei Blöcke, davon zwei umbrochen". - [ ] `Source - Conversation - Auto Mode and Tool Choice Session 2026-08-31` verschwindet aus dem Bericht, ohne dass die Seite angefasst wird. - [ ] Changelog-Eintrag, PATCH. ## Herkunft Gefunden in der Sitzung zu #8, dort nicht behoben, weil es eine andere Datei und eine andere Regel ist als die dort geänderte.
torben added the prio/waiting label 2026-08-31 18:18:01 +00:00
Author
Owner

Umgesetzt in 1.7.2 (49bd7d4).

count_quote_blocks() in tools/wiki_tools/commands/lint.py zählt jetzt Läufe zusammenhängender >-Zeilen; eine Leerzeile oder eine Nicht-Zitat-Zeile trennt zwei Zitate. QUOTE_LIMIT bleibt bei 2 und bedeutet damit, was der Name schon behauptet hat.

Über den Vorschlag hinaus: Code wird vor dem Zählen maskiert (dieselbe Hilfsfunktion wie #20). Ein > in einem eingezäunten Shell-Transkript ist ein Fortsetzungsprompt oder eine Umleitung, keine Zitatzeile — ohne die Maskierung wäre der Blockzähler an dieser Stelle genauso falsch gewesen wie der Zeilenzähler.

Bewusst nicht mitentschieden, wie im Issue vorgesehen: eine Obergrenze für die Länge eines einzelnen Zitats. Ein 80-zeiliges Einzelzitat ist nach diesem Fix legal. Das bleibt eine zweite Regel mit eigener Schwelle; kein Folge-Issue angelegt, weil es bisher keinen Befund dazu gibt — wenn einer auftaucht, ist er die Begründung.

Lazy continuation (ein Zitat, dessen umbrochene Zeilen das > weglassen) zählt hier als zwei Zitate. Das überzählt in genau die Richtung, in die das Limit ohnehin irrt, und der Korpus präfixt jede Zeile — die Alternative (Absatzzustand mitführen) kauft nichts.

Akzeptanzkriterien

  • Ein über mehrere Zeilen umbrochenes Zitat zählt als eines — test_lint_counts_a_wrapped_quote_once.
  • Zwei durch eine Leerzeile getrennte Zitate zählen als zwei — mitabgedeckt vom Grenzfall unten.
  • Test für beide Fälle plus Grenzfall „drei Blöcke, davon zwei umbrochen" — test_lint_counts_separated_quotes_separately, plus test_lint_does_not_count_a_shell_prompt_as_a_quote. Alle drei waren gegen die alte Zeilenzählung nachweislich rot (verifiziert durch temporäres Zurücksetzen der Implementierung).
  • Source - Conversation - Auto Mode and Tool Choice Session 2026-08-31 ist aus dem Bericht verschwunden, ohne dass die Seite angefasst wurde — lint --json meldet quote_limit_violations = [].
  • Changelog-Eintrag, PATCH — 1.7.1 → 1.7.2.
Umgesetzt in 1.7.2 (`49bd7d4`). `count_quote_blocks()` in `tools/wiki_tools/commands/lint.py` zählt jetzt Läufe zusammenhängender `>`-Zeilen; eine Leerzeile oder eine Nicht-Zitat-Zeile trennt zwei Zitate. `QUOTE_LIMIT` bleibt bei 2 und bedeutet damit, was der Name schon behauptet hat. **Über den Vorschlag hinaus:** Code wird vor dem Zählen maskiert (dieselbe Hilfsfunktion wie #20). Ein `>` in einem eingezäunten Shell-Transkript ist ein Fortsetzungsprompt oder eine Umleitung, keine Zitatzeile — ohne die Maskierung wäre der Blockzähler an dieser Stelle genauso falsch gewesen wie der Zeilenzähler. **Bewusst nicht mitentschieden**, wie im Issue vorgesehen: eine Obergrenze für die Länge eines einzelnen Zitats. Ein 80-zeiliges Einzelzitat ist nach diesem Fix legal. Das bleibt eine zweite Regel mit eigener Schwelle; kein Folge-Issue angelegt, weil es bisher keinen Befund dazu gibt — wenn einer auftaucht, ist er die Begründung. **Lazy continuation** (ein Zitat, dessen umbrochene Zeilen das `>` weglassen) zählt hier als zwei Zitate. Das überzählt in genau die Richtung, in die das Limit ohnehin irrt, und der Korpus präfixt jede Zeile — die Alternative (Absatzzustand mitführen) kauft nichts. ## Akzeptanzkriterien - [x] Ein über mehrere Zeilen umbrochenes Zitat zählt als eines — `test_lint_counts_a_wrapped_quote_once`. - [x] Zwei durch eine Leerzeile getrennte Zitate zählen als zwei — mitabgedeckt vom Grenzfall unten. - [x] Test für beide Fälle plus Grenzfall „drei Blöcke, davon zwei umbrochen" — `test_lint_counts_separated_quotes_separately`, plus `test_lint_does_not_count_a_shell_prompt_as_a_quote`. Alle drei waren gegen die alte Zeilenzählung nachweislich rot (verifiziert durch temporäres Zurücksetzen der Implementierung). - [x] `Source - Conversation - Auto Mode and Tool Choice Session 2026-08-31` ist aus dem Bericht verschwunden, ohne dass die Seite angefasst wurde — `lint --json` meldet `quote_limit_violations = []`. - [x] Changelog-Eintrag, PATCH — 1.7.1 → 1.7.2.
Sign in to join this conversation.
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: torben/chemenu#22