list_pages: Vollständigkeits-Hinweis (len(pages) >= limit) ist nicht belastbar #2

Closed
opened 2026-08-16 11:42:43 +02:00 by Lyra · 1 comment
Collaborator

Beobachtung

Der Vollständigkeits-Hinweis in server.py:187 prüft:

if len(pages) >= limit:
    lines += ["", f"Hinweis: Limit von {limit} erreicht — es gibt womöglich weitere Seiten."]

Das erkennt nur den Fall, dass genau am gesetzten Limit abgeschnitten wurde. Wird die Ergebnismenge oberhalb gekürzt (siehe Issue zu order_by=TITLE), ist len(pages) < limit und der Hinweis bleibt aus — obwohl die Liste unvollständig ist.

Der Aufrufer bekommt in diesem Fall eine stillschweigend gekürzte Liste ohne jedes Signal.

Warum das kritisch ist

Das Tool wird von einem LLM konsumiert, das die Ausgabe als vollständig behandelt, solange kein Hinweis dransteht. Falsche Vollständigkeit ist hier schlimmer als ein zu häufiger Hinweis: sie führt zu Aussagen wie „die Seite existiert nicht", obwohl sie nur nicht im Listing war.

Vorschlag

  • Gesamtzahl der Seiten separat ermitteln und gegen die Trefferzahl prüfen, statt nur gegen limit.
  • Echte Paginierung (Offset/Cursor) statt eines stillen Deckels, damit Vollständigkeit erreichbar ist und nicht nur diagnostiziert wird.
  • Solange beides nicht steht: bei jeder Antwort die Trefferzahl und das wirksame Limit ausgeben, damit die Kürzung wenigstens sichtbar ist.

Definition of Done

  • Eine gekürzte Liste ist an der Ausgabe erkennbar, unabhängig davon, wo die Kürzung entsteht.
  • Test, der eine oberhalb gekürzte Antwort simuliert und den Hinweis erwartet.
## Beobachtung Der Vollständigkeits-Hinweis in `server.py:187` prüft: ```python if len(pages) >= limit: lines += ["", f"Hinweis: Limit von {limit} erreicht — es gibt womöglich weitere Seiten."] ``` Das erkennt nur den Fall, dass genau am gesetzten Limit abgeschnitten wurde. Wird die Ergebnismenge oberhalb gekürzt (siehe Issue zu `order_by=TITLE`), ist `len(pages) < limit` und der Hinweis bleibt aus — obwohl die Liste unvollständig ist. Der Aufrufer bekommt in diesem Fall eine stillschweigend gekürzte Liste ohne jedes Signal. ## Warum das kritisch ist Das Tool wird von einem LLM konsumiert, das die Ausgabe als vollständig behandelt, solange kein Hinweis dransteht. Falsche Vollständigkeit ist hier schlimmer als ein zu häufiger Hinweis: sie führt zu Aussagen wie „die Seite existiert nicht", obwohl sie nur nicht im Listing war. ## Vorschlag - Gesamtzahl der Seiten separat ermitteln und gegen die Trefferzahl prüfen, statt nur gegen `limit`. - Echte Paginierung (Offset/Cursor) statt eines stillen Deckels, damit Vollständigkeit erreichbar ist und nicht nur diagnostiziert wird. - Solange beides nicht steht: bei jeder Antwort die Trefferzahl und das wirksame Limit ausgeben, damit die Kürzung wenigstens sichtbar ist. ## Definition of Done - Eine gekürzte Liste ist an der Ausgabe erkennbar, unabhängig davon, wo die Kürzung entsteht. - Test, der eine oberhalb gekürzte Antwort simuliert und den Hinweis erwartet.
Author
Collaborator

Behoben in 7245ca1, zusammen mit #1.

Der Hinweis über len(pages) >= limit ist ersatzlos entfallen: das Tool kürzt jetzt selbst und kennt die Gesamtzahl, der Kopf nennt immer X von Y Seiten plus Restanzahl. Am exakten Limit schlug die alte Prüfung außerdem falsch an — auch das ist getestet.

Oberhalb gekürzte Antworten kann es nicht mehr geben, weil kein limit mehr in die Query geht. Der geforderte Test simuliert die Kürzung deshalb auf Tool-Ebene (tests/test_list_pages_vollstaendigkeit.py).

Behoben in 7245ca1, zusammen mit #1. Der Hinweis über `len(pages) >= limit` ist ersatzlos entfallen: das Tool kürzt jetzt selbst und kennt die Gesamtzahl, der Kopf nennt immer `X von Y Seiten` plus Restanzahl. Am exakten Limit schlug die alte Prüfung außerdem falsch an — auch das ist getestet. Oberhalb gekürzte Antworten kann es nicht mehr geben, weil kein `limit` mehr in die Query geht. Der geforderte Test simuliert die Kürzung deshalb auf Tool-Ebene (`tests/test_list_pages_vollstaendigkeit.py`).
Lyra closed this issue 2026-08-16 13:10:14 +02:00
Sign in to join this conversation.
No labels
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set

Reference
draventec/wikijs-mcp#2
No description provided.