list_pages: order_by=TITLE liefert stillschweigend unvollständige Ergebnisse #1
Loading…
Reference in a new issue
No description provided.
Delete branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Beobachtung
list_pagesgibt mit der Default-Sortierungorder_by="TITLE"nur einen Bruchteil der Seiten zurück. Gemessen gegen einer produktiven Instanz (91 Seiten, Localede):order_bylimitIDIDTITLETITLEDie bei
TITLEzurückgegebenen Treffer sind jeweils der Anfang der alphabetischen Sortierung (ALB-Cloud,ALB-DNS01,ALB-DNS) — die Liste wird also nicht falsch sortiert, sondern nach dem Sortieren abgeschnitten. Die Trefferzahl sinkt weit unter das gesetzte Limit.Warum das kritisch ist
TITLEist der Default (server.py:152,client.py:174). Ein Aufruf ohne Parameter liefert damit im Normalfall eine unvollständige Liste, die vollständig aussieht — der Hinweis „Limit erreicht" bleibt aus, weillen(pages) < limitist. Ein Konsument (LLM oder Skript) hat keine Möglichkeit, die Lücke zu erkennen.Einordnung
client.list_pages(client.py:169-201) reichtlimitundorderByunverändert an die GraphQL-Query durch, es gibt keine Nachbearbeitung mehr. Der Kommentar abclient.py:179dokumentiert, dass ein früherer Post-Filter-Bug dieser Art bereits behoben wurde. Die Kürzung passiert demnach oberhalb, impages.list-Resolver von Wiki.js. Ursache dort ist noch nicht verifiziert.Ein Fix in diesem Repo ist damit defensiv, nicht ursächlich.
Vorschlag
server.py:152undclient.py:174aufIDumstellen.TITLE/PATH/UPDATEDerst wieder als Default zulassen, wenn das Verhalten gegen die eingesetzte Wiki.js-Version verifiziert ist.IDladen und client-seitig sortieren.Definition of Done
list_pages()ohne Parameter liefert gegen eine Instanz mit >90 Seiten dieselbe Menge wieorder_by="ID".IDundTITLEbei gleichemlimitvergleicht.Behoben in
7245ca1— Ursache ist eine andere als vermutet.pages.listholt die Tags überwithGraphJoined('tags')und legtlimitauf das Ergebnis dieses Joins, also auf Zeilen statt Seiten. Eine Seite mit vier Tags verbraucht vier Plätze. Gemessen gegen einer produktiven Instanz, inzwischen 128 Seiten:order_bylimitorderByist unbeteiligt. Dass ID unauffällig wirkte, lag allein daran, dass die Seiten mit niedriger id ungetaggt sind — beilimit: 100schneidet ID genauso ab, zusätzlich mit gekürzter Tag-Liste auf der letzten Seite. Der vorgeschlagene DefaultIDhätte den Fehler also nur verschoben.Umgesetzt stattdessen: kein
limitin der Query, sortiert wird client-seitig insort_pages(), gekürzt erst im Tool. Regressionstest vergleicht die Trefferzahl bei ID und TITLE.