Fehlgeschlagene Teil-Abrufe verschwinden lautlos #19
Notifications
Total Time Spent: 18 minutes
florian.wilde
18 minutes
No due date set.
Dependencies
No dependencies set.
Reference: florian.wilde/nebula#19
Reference in New Issue
Block a user
Der Abgleich holt je Repository acht Listen parallel (Branches, Tags, Commits, Releases, Sprachen, PRs, Issues, CI). Alle acht laufen über
getJsonSafeinlib/git/http.ts:Ein Fehlschlag ist danach nicht mehr von „das Repository hat keine Branches" zu unterscheiden. Der Abgleich läuft weiter, schreibt Nullen in den Snapshot, setzt kein
syncErrorund meldet Erfolg — die Meldung lautet dann wörtlich „Snapshot aktualisiert: 0 Branches, 0 Tags."Beobachtet
syslog-platformzeigt 0 Branches statt 1 und keine Commits statt 65,betreuungs-cockpit0 Tags statt 22 und 0 Releases statt 22. Ältere Repositories, die seitdem nicht abgeglichen wurden, tragen ihre Daten noch.Was bereits ausgeschlossen ist
git.wilde-server.demit genau den URLs ausfetchRepo: alle 200, zusammen 1030 ms, parallel sogar schneller als nacheinander. Branches 1, Tags 22, Commits 50, Releases 10.gitea.ts,http.tsundsecurity/ssrf.tssind seit v1.9.0 beziehungsweise v1.7.0 unverändert; der letzte Commit dort fügt neun ZeilengetIssueStatehinzu, ohnefetchRepozu berühren.syslog-platformist privat, und der Basis-Aufruf liefert weiterhin Name, Sichtbarkeit und Größe. Ohne gültiges Token käme diese Zeile nicht zustande, undgetJsonhätte geworfen.Die Ursache liegt damit in der laufenden Instanz — und lässt sich nicht feststellen, weil genau die Auskunft verworfen wird, die sie benennen würde.
Zu tun
GIT_API_TIMEOUT_MSvalidieren:Number(process.env.GIT_API_TIMEOUT_MS ?? 15000)inhttp.ts:4prüft nichts. Ein leerer oder unlesbarer Wert ergibt0bzw.NaN, undsetTimeoutbricht damit jeden Aufruf sofort ab — eine kaputte Zeile in der.envlegt den ganzen Abgleich still, ohne dass irgendwo etwas steht.Hängt mit dem Verlust des letzten guten Standes zusammen; der ist getrennt erfasst.
🤖 Claude Code hat mit der Umsetzung begonnen.
fix/19-abrufe-nicht-verschluckenpersistSnapshotlässt eine Liste stehen, die nicht geholt werden konnte (#20)GIT_API_TIMEOUT_MSwird validiert;Number("")ergibt heute0und bricht jeden Aufruf sofort abDer eigentliche Fehler ist damit noch nicht gefunden — diese Änderung macht ihn sichtbar. Sobald sie läuft, sagt dir die Projektseite, welcher Status zurückkommt; dann wissen wir, ob es Scopes, Timeout oder etwas Drittes ist.
Zeiterfassung läuft.
✅ Umsetzung abgeschlossen — bereit zum Testen. Schließt #19 und #20.
Was geändert wurde
Teilabrufeinlib/git/http.tssammelt je Feld, was schiefging — mit HTTP-Status, denn daran hängt die Ursache: 403 Scopes, 429 Rate-Limit, 408 Zeitüberschreitung, 0 nicht erreicht. Der Fallback bleibt, ein einzelner Fehlschlag bricht den Abgleich nicht abpersistSnapshotlässt stehen, was nicht geholt werden konnte (#20). Abgeleitete Felder gehen mit ihrer Liste:lastCommit*ancommits,latestTagantagsundreleasesmissing/completeAtam SnapshotsyncErrorbleibt leer, der Zähler fürs Zurückhalten steigt nichtGIT_API_TIMEOUT_MSwird geprüft —Number("")ist0, undsetTimeoutbricht damit jeden Aufruf sofort abGeänderte Dateien
src/lib/git/http.ts·src/lib/git/types.ts·gitea.ts·github.ts·gitlab.tssrc/lib/sync/index.ts·src/components/GitPanel.tsx·src/types/index.tsprisma/schema.prisma·prisma/migrations/20260901160000_snapshot_teilabrufe/(neu)src/lib/git/http.test.ts(neu, 8 Tests) ·FEATURES.md·README.md·CLAUDE.mdSo testest du es
git switch fix/19-abrufe-nicht-verschluckennpm run docker:db, dannnpx prisma migrate deploy— zwei Spalten kommen mitnpm run dev, ein Projekt mit Repository öffnen, Jetzt synchronisierenGeprüft:
tscsauber · 289 Unit-Tests grün (vorher 281) ·npm run builddurch · gegen einen nachgebauten Gitea-Server (Basis antwortet, Teillisten 403) und eine Wegwerf-Datenbank: nichts verloren,completeAtunverändert, nach dem nächsten gesunden Durchlauf wieder geräumt · axe-core 0 Verstöße auf 1280 px und 375 px.Der eigentliche Grund der Ausfälle auf deiner Instanz ist damit noch nicht gefunden — aber nach dem nächsten Abgleich steht er auf der Projektseite.
Aufgewendete Zeit: 00:19
Pull Request: #21
Nach Freigabe:
/issue-freigabe 19🚀 Freigegeben und nach
mainübernommen.97ba863⚠️ Beim Ausrollen läuft eine Migration mit (
20260901160000_snapshot_teilabrufe, zwei Spalten anRepoSnapshot).scripts/update.shruftprisma migrate deployselbst auf.Nach dem nächsten Abgleich steht der HTTP-Status der fehlgeschlagenen Teil-Abrufe auf der Projektseite — damit lässt sich die eigentliche Ursache benennen.
Issue wird geschlossen.