persistSnapshot in lib/sync/index.ts überschreibt Branches, Tags, Commits, Releases, Sprachen, PRs und Issues bedingungslos mit dem, was fetchRepo geliefert hat:
Kommen die Listen leer zurück, weil die Abrufe gescheitert sind (siehe #19), ist der vorher gespeicherte Stand weg — überschrieben mit Nullen, ohne Fehler, ohne Rückfrage.
Beobachtet
Genau so verloren gegangen: Ältere Repositories, die seit dem Auftreten des Problems nicht abgeglichen wurden, tragen ihre Commits, Tags und Branches noch. syslog-platform hatte sie ebenfalls — bis auf „Jetzt synchronisieren" gedrückt wurde. Ein Klick, und der letzte brauchbare Stand ist ersetzt.
Das macht die Fehlersuche teurer, als sie sein müsste: jeder Versuch, das Problem nachzustellen, zerstört weitere Daten.
Zu tun
Ein Abgleich, der eine Liste nicht holen konnte, darf die vorhandene nicht ersetzen. Der Snapshot ist ein Zwischenspeicher, kein Protokoll — ein alter Stand mit einem sichtbaren Hinweis „zuletzt erfolgreich am …" ist in jedem Fall brauchbarer als eine leere Liste, die aussieht wie eine Aussage.
Wichtig ist die Unterscheidung, die es heute nicht gibt: leer geholt (das Repository hat wirklich keine Tags) gegenüber nicht geholt (der Abruf ist gescheitert). Nur der zweite Fall darf den Bestand stehen lassen. Setzt damit #19 voraus.
`persistSnapshot` in `lib/sync/index.ts` überschreibt Branches, Tags, Commits, Releases, Sprachen, PRs und Issues bedingungslos mit dem, was `fetchRepo` geliefert hat:
```ts
branchCount: data.branches.length,
tagCount: data.tags.length,
branches: data.branches as unknown as object,
tags: data.tags as unknown as object,
commits: data.commits as unknown as object,
releases: data.releases as unknown as object,
```
Kommen die Listen leer zurück, weil die Abrufe gescheitert sind (siehe #19), ist der vorher gespeicherte Stand weg — überschrieben mit Nullen, ohne Fehler, ohne Rückfrage.
## Beobachtet
Genau so verloren gegangen: Ältere Repositories, die seit dem Auftreten des Problems nicht abgeglichen wurden, tragen ihre Commits, Tags und Branches noch. `syslog-platform` hatte sie ebenfalls — bis auf „Jetzt synchronisieren" gedrückt wurde. Ein Klick, und der letzte brauchbare Stand ist ersetzt.
Das macht die Fehlersuche teurer, als sie sein müsste: jeder Versuch, das Problem nachzustellen, zerstört weitere Daten.
## Zu tun
Ein Abgleich, der eine Liste nicht holen konnte, darf die vorhandene nicht ersetzen. Der Snapshot ist ein **Zwischenspeicher**, kein Protokoll — ein alter Stand mit einem sichtbaren Hinweis „zuletzt erfolgreich am …" ist in jedem Fall brauchbarer als eine leere Liste, die aussieht wie eine Aussage.
Wichtig ist die Unterscheidung, die es heute nicht gibt: **leer geholt** (das Repository hat wirklich keine Tags) gegenüber **nicht geholt** (der Abruf ist gescheitert). Nur der zweite Fall darf den Bestand stehen lassen. Setzt damit #19 voraus.
🤖Claude Code hat mit der Umsetzung begonnen — zusammen mit #19.
Branch: fix/19-abrufe-nicht-verschlucken
Verstanden als: Eine Liste, die nicht geholt werden konnte, darf die gespeicherte nicht ersetzen. „Leer geholt“ und „nicht geholt“ müssen unterscheidbar werden.
Warum auf demselben Branch: genau diese Unterscheidung entsteht in #19. Ohne sie könnte persistSnapshot gar nicht wissen, wann es den Bestand stehen lassen soll — getrennt umgesetzt wäre es geraten. Der PR schließt beide Issues, die Zeit läuft auf #19.
🤖 **Claude Code hat mit der Umsetzung begonnen — zusammen mit #19.**
- Branch: `fix/19-abrufe-nicht-verschlucken`
- Verstanden als: Eine Liste, die nicht geholt werden konnte, darf die gespeicherte nicht ersetzen. „Leer geholt“ und „nicht geholt“ müssen unterscheidbar werden.
- Warum auf demselben Branch: genau diese Unterscheidung entsteht in #19. Ohne sie könnte `persistSnapshot` gar nicht wissen, wann es den Bestand stehen lassen soll — getrennt umgesetzt wäre es geraten. Der PR schließt beide Issues, die Zeit läuft auf #19.
Zeiterfassung läuft (auf #19).
persistSnapshot lässt jetzt stehen, was nicht geholt werden konnte. Nachgewiesen gegen einen nachgebauten Gitea-Server, dessen Teillisten 403 liefern: Branches, Tags, Commits und Releases bleiben unverändert, completeAt wird nicht fortgeschrieben, und nach dem nächsten gesunden Durchlauf räumt sich der Hinweis von selbst weg.
Issue wird geschlossen.
🚀 **Freigegeben und nach `main` übernommen** — zusammen mit #19.
<!-- claude-status
merge: 97ba8633564f6571fd66b64e154cf083b38159fd
pr: 21
zeit_sekunden: 0
-->
- Merge-Commit: `97ba863`
- Pull Request: #21 (gemergt)
- Zeit erfasst auf #19 (gemeinsamer Branch): 00:19
`persistSnapshot` lässt jetzt stehen, was nicht geholt werden konnte. Nachgewiesen gegen einen nachgebauten Gitea-Server, dessen Teillisten 403 liefern: Branches, Tags, Commits und Releases bleiben unverändert, `completeAt` wird nicht fortgeschrieben, und nach dem nächsten gesunden Durchlauf räumt sich der Hinweis von selbst weg.
Issue wird geschlossen.
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.
persistSnapshotinlib/sync/index.tsüberschreibt Branches, Tags, Commits, Releases, Sprachen, PRs und Issues bedingungslos mit dem, wasfetchRepogeliefert hat:Kommen die Listen leer zurück, weil die Abrufe gescheitert sind (siehe #19), ist der vorher gespeicherte Stand weg — überschrieben mit Nullen, ohne Fehler, ohne Rückfrage.
Beobachtet
Genau so verloren gegangen: Ältere Repositories, die seit dem Auftreten des Problems nicht abgeglichen wurden, tragen ihre Commits, Tags und Branches noch.
syslog-platformhatte sie ebenfalls — bis auf „Jetzt synchronisieren" gedrückt wurde. Ein Klick, und der letzte brauchbare Stand ist ersetzt.Das macht die Fehlersuche teurer, als sie sein müsste: jeder Versuch, das Problem nachzustellen, zerstört weitere Daten.
Zu tun
Ein Abgleich, der eine Liste nicht holen konnte, darf die vorhandene nicht ersetzen. Der Snapshot ist ein Zwischenspeicher, kein Protokoll — ein alter Stand mit einem sichtbaren Hinweis „zuletzt erfolgreich am …" ist in jedem Fall brauchbarer als eine leere Liste, die aussieht wie eine Aussage.
Wichtig ist die Unterscheidung, die es heute nicht gibt: leer geholt (das Repository hat wirklich keine Tags) gegenüber nicht geholt (der Abruf ist gescheitert). Nur der zweite Fall darf den Bestand stehen lassen. Setzt damit #19 voraus.
🤖 Claude Code hat mit der Umsetzung begonnen — zusammen mit #19.
fix/19-abrufe-nicht-verschluckenpersistSnapshotgar nicht wissen, wann es den Bestand stehen lassen soll — getrennt umgesetzt wäre es geraten. Der PR schließt beide Issues, die Zeit läuft auf #19.Zeiterfassung läuft (auf #19).
🚀 Freigegeben und nach
mainübernommen — zusammen mit #19.97ba863persistSnapshotlässt jetzt stehen, was nicht geholt werden konnte. Nachgewiesen gegen einen nachgebauten Gitea-Server, dessen Teillisten 403 liefern: Branches, Tags, Commits und Releases bleiben unverändert,completeAtwird nicht fortgeschrieben, und nach dem nächsten gesunden Durchlauf räumt sich der Hinweis von selbst weg.Issue wird geschlossen.