Een onleesbare git-wachtrij telt als leeg #2723

Closed
opened 2026-11-02 22:19:37 +00:00 by brenno · 0 comments
Owner

Wat er mis is

Raakt de opgeslagen wachtende commit beschadigd, bijvoorbeeld afgekapt JSON na een crash midden in het schrijven, dan ziet een synchronisatie hem niet. De badge staat op 0. Een stille sync stopt met niets in de wachtrij. De werkkopie met de tekst blijft onaangeroerd op schijf. Het werk komt nooit op de forge, en er is geen foutmelding.

Bewijs

  • lib/services/git/outbox.dart forDeck: een decodefout logt en geeft null. pending slaat null over. isEmpty loopt via pending.
  • De badge en de stille flush behandelen die leegte als niets te doen.
  • De werkkopie heeft het omgekeerde contract: corruptie mag niet als leeg lezen (DraftStoreCorrupt).

Er is geen test die een kapotte outbox-sleutel laat staan en eist dat flush niet “niets te synchroniseren” zegt.

Voorstel

Een onleesbare sleutel als fout teruggeven, dezelfde vorm als DraftStoreCorrupt. pending en isEmpty tellen die niet als afwezig. Flush meldt de deckmap en laat de sleutel staan.

Regressietest: voorkeuren met git_outbox::<deck> op een afgekapt {, daarna is pending niet leeg en krijgt flush de status mislukt, zonder de werkkopie te wissen.

Het bestandsformaat verandert niet.

## Wat er mis is Raakt de opgeslagen wachtende commit beschadigd, bijvoorbeeld afgekapt JSON na een crash midden in het schrijven, dan ziet een synchronisatie hem niet. De badge staat op 0. Een stille sync stopt met niets in de wachtrij. De werkkopie met de tekst blijft onaangeroerd op schijf. Het werk komt nooit op de forge, en er is geen foutmelding. ## Bewijs - `lib/services/git/outbox.dart` `forDeck`: een decodefout logt en geeft `null`. `pending` slaat `null` over. `isEmpty` loopt via `pending`. - De badge en de stille flush behandelen die leegte als niets te doen. - De werkkopie heeft het omgekeerde contract: corruptie mag niet als leeg lezen (`DraftStoreCorrupt`). Er is geen test die een kapotte outbox-sleutel laat staan en eist dat flush niet “niets te synchroniseren” zegt. ## Voorstel Een onleesbare sleutel als fout teruggeven, dezelfde vorm als `DraftStoreCorrupt`. `pending` en `isEmpty` tellen die niet als afwezig. Flush meldt de deckmap en laat de sleutel staan. Regressietest: voorkeuren met `git_outbox::<deck>` op een afgekapt `{`, daarna is `pending` niet leeg en krijgt flush de status mislukt, zonder de werkkopie te wissen. Het bestandsformaat verandert niet.
brenno 2026-11-03 00:46:43 +00:00
Sign in to join this conversation.
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
LibreKAT/Ocideck#2723
No description provided.