Gitea deckelt Antworten auf 50 - die Seitenlogik rechnet mit 100 #22
Notifications
Total Time Spent: 8 minutes
florian.wilde
8 minutes
No due date set.
Dependencies
No dependencies set.
Reference: florian.wilde/nebula#22
Reference in New Issue
Block a user
Gitea begrenzt jede Listenantwort auf
MAX_RESPONSE_ITEMS— Voreinstellung 50 —, unabhängig davon, waslimitsagt. Nebula fragt an mehreren Stellen 100 an und geht davon aus, 100 zu bekommen.Gemessen an
florian.wilde/flimmer(76 Commits)Was daraus folgt
calendarByPaginginlib/git/calendar.ts:88:CALENDAR_PAGE_SIZEist 100, Gitea liefert nie mehr als 50 — die Schleife bricht bei jedem Gitea-Repository nach der ersten Seite ab. Die fünf erlaubten Seiten werden nie ausgenutzt.Sichtbar bei
flimmer: Heatmap „50 an 2 Tagen · seit 01.09.2026" statt der vollen Historie, Aktivitätskurve über 50 statt 100 Commits. Gitea selbst zeigt 76 Commits.Und schlimmer als die fehlenden Daten:
truncatedbleibt dabeifalse. Die Anzeige behauptet, den ganzen Zeitraum zu kennen, den sie zeigt — dabei beginnt sie schlicht beim ältesten der 50 geholten Commits. „seit 01.09.2026" liest sich wie eine Aussage über das Repository und ist in Wahrheit eine über die Seitengröße.Dieselbe Annahme steckt in
fetchRepo, daslimit=100für die Aktivitätskurve holt und 50 bekommt.Zu tun
Nicht die angefragte Seitengröße als Maßstab nehmen, sondern die erste tatsächlich gelieferte. Eine Seite ist erst dann die letzte, wenn sie leer ist oder kürzer als die vorherige. Der Deckel muss ehrlich gesetzt werden: reicht die Historie weiter zurück als die geholten Seiten, ist
truncatedwahr.Betrifft nur Gitea — GitHub und GitLab erlauben
per_page=100, dort stimmt die Annahme. Die Lösung sollte trotzdem allgemein sein:MAX_RESPONSE_ITEMSist konfigurierbar, eine andere Instanz kann 20 oder 250 liefern.🤖 Claude Code hat mit der Umsetzung begonnen.
fix/22-gitea-seitengroessecalendarByPagingmerkt sich die Länge der ersten Seite und vergleicht daran. Kürzer als die erste heißt letzte Seite; leer heißt Endetruncatedmuss dabei ehrlich bleiben: wahr nur, wenn der Seitendeckel greift, während erkennbar noch mehr da wäre. In der Heatmap steht dann „(Älteres nicht abgerufen)"fetchRepo(„100 statt 15") wird richtiggestellt; dort gibt es kein Blättern, die Kurve kürzt sich schon heute ehrlich auf den belegten Zeitraumflimmerselbst — 76 Commits, die heute als 50 ankommenZeiterfassung läuft.
✅ Umsetzung abgeschlossen — bereit zum Testen.
Was geändert wurde
calendarByPagingmisst „volle Seite" an der ersten tatsächlich gelieferten Antwort statt an der angefragten Größe. Kürzer heißt letzte Seite, leer heißt Endetruncatedwird weiterhin nur gesetzt, wenn der Seitendeckel greift, während erkennbar mehr da wäre — in der Heatmap steht dann „(Älteres nicht abgerufen)"MAX_RESPONSE_ITEMSist konfigurierbar, eine andere Instanz kann 20 liefernfetchRepoin allen drei Clients richtiggestellt; dort gibt es kein Blättern und die Kurve kürzt sich schon heute ehrlichAm echten Repository nachgesehen —
flimmer, gegen die laufende Instanz:Was es kostet: bei Gitea bis zu fünf Kalender-Aufrufe statt einem, und ein Repository mit kurzer Historie fragt eine Seite mehr, um zu erfahren, dass nichts mehr kommt. Läuft höchstens einmal am Tag.
Vier bestehende Tests angefasst. Ihr Fixture lieferte für jede Seite dieselben Daten und hielt nur deshalb an, weil die alte Regel eine kurze Seite für die letzte hielt — also wegen genau dieses Fehlers. Sie holen ihre Daten jetzt über
eineSeite()und prüfen unverändert Zählen und Filtern.Geänderte Dateien
src/lib/git/calendar.ts·src/lib/git/calendar.test.tssrc/lib/git/gitea.ts·github.ts·gitlab.ts(nur Kommentare)So testest du es
git switch fix/22-gitea-seitengroesse,npm run devUPDATE "RepoSnapshot" SET "commitCalendarAt" = NULL;und erneut synchronisierenflimmer: „76 an … Tagen" statt „50 an 2 Tagen"Geprüft:
tscsauber · 293 Unit-Tests grün (vorher 289) ·npm run builddurch · gegengeprobt, dass die vier neuen Tests mit der alten Zeile fallen.Eine Prüfung der laufenden Anwendung war nicht möglich — Docker Desktop ist hier zwischendurch stehen geblieben. Die Oberfläche ist unverändert; es ändern sich nur die Zahlen dahinter.
Aufgewendete Zeit: 00:09
Pull Request: #24
Nach Freigabe:
/issue-freigabe 22