fix(ux): zeg wáárom een bestand niet openging (#646) #694

Merged
brenno merged 1 commit from fix/open-foutmelding-646 into main 2026-07-22 21:39:02 +00:00
Owner

Derde item uit #646, en de laatste die de issue zelf als "echte gebruikersimpact" aanmerkt.

Het probleem

"Kon dit bestand niet openen." — geen reden, geen suggestie. En die ene zin stond voor vier heel verschillende dingen: het bestand bestaat niet meer, het is te groot, het is geen tekst, of de markdown is afgebroken.

Waar het werkelijk zat

Niet in de melding, maar in de vertaling tussen de lagen. FileService.openDeckDetailed gaf de reden allang terugOpenFailure onderscheidt zes gevallen — maar openFileByPath gooide alles behalve "geen presentatie" weg en maakte er één OpenResult.unreadable van. Het antwoord lag twee lagen lager voor het oprapen.

Dat corrigeert ook mijn eigen inschatting van vanochtend: ik dacht dat dit een enum-refactor over 26 plekken zou vragen. Dat was niet zo.

Wat er nu gebeurt

Oorzaak Melding
Pad bestaat niet meer Dit bestand bestaat niet meer op deze plek.
Boven de deckgrootte-limiet Dit bestand is te groot om te openen.
Geen geldige UTF-8 Dit bestand is geen leesbare tekst. OciDeck opent Markdown.
Markdown afgebroken/onparseerbaar Deze presentatie is beschadigd of half opgeslagen.
Onbekend Kon dit bestand niet openen.

Die laatste rij is opzet. Er zijn 26 plekken die unreadable teruggeven en de meeste weten écht niet meer dan dat — een afgebroken open, een tabblad dat verdween. Een reden verzinnen bij een onbekende oorzaak is slechter dan zwijgen: een melding die de verkeerde kant op wijst kost meer tijd dan een vage.

De reden wordt vóór elke poging gewist. Anders krijgt de volgende fout een verklaring die niet van hem is — precies de valkuil van een provider die iets onthoudt.

Wat dit níét oplost

Een regelnummer. De parser draagt geen positie mee, dus "beschadigd of half opgeslagen" is zo precies als het nu kan. Dat vraagt een parser die zijn positie bijhoudt; dat is een eigen klus. Het staat zo in de CHANGELOG en in de probleemoplossingsgids in plaats van weggelaten te worden.

Vertalingen

Vier strings × 31 talen = 124 vertalingen, via make add-l10n. Gedelegeerd; de vertaler heeft per taal het bestaande huisvocabulaire aangehouden (ficheiro voor pt, berkas voor id) en per taal gemeld waar hij twijfelde — Klingon en Latijn wisselen in het corpus zelf tussen meerdere woorden voor "bestand", en daar is de keuze van de buurstring aangehouden zodat de vijf meldingen samen consistent zijn.

De ratchet had gelijk

TabsNotifier ging over zijn plafond. Terecht: het vastleggen én het vertalen van de uitkomst horen niet in die klasse. Ze staan nu top-level, en de klasse is netto drie regels kleiner dan ervoor — basislijn meeverlaagd.

Ik heb onderweg één keer overwogen om verklarend commentaar weg te knippen om de teller te halen. Dat is de verkeerde prikkel; er is echt gedrag verplaatst in plaats daarvan.

Bijvangst

TROUBLESHOOTING_GUIDE.md zei nog dat video, audio én de notities niet naar git meereizen. Dat klopt sinds #515 en #541 geen van drieën. Rechtgezet en gedateerd, met een tabel van de nieuwe meldingen erbij.

Getoetst

  • make check groen, make check-secrets en make sast schoon, make l10n-check groen.
  • Vijf tests op de doorgifte. Twee mutaties geplant: de reden niet doorgeven (4 rood) en het vooraf wissen weglaten (1 rood — precies de test die daarover gaat).

Wat van #646 overblijft

Alleen polijstwerk: de consentmuur die "Akkoord" grijs laat zonder te zeggen waarom, de dubbele opslagdialoog, de half-Engelse macOS-menubalk, en de tijdstempel in de exportnaam. Alle drie de items die je als "echte gebruikersimpact" aanmerkte zijn nu weg.

Werkt aan #646.

Derde item uit #646, en de laatste die de issue zelf als "echte gebruikersimpact" aanmerkt. ## Het probleem *"Kon dit bestand niet openen."* — geen reden, geen suggestie. En die ene zin stond voor vier heel verschillende dingen: het bestand bestaat niet meer, het is te groot, het is geen tekst, of de markdown is afgebroken. ## Waar het werkelijk zat Niet in de melding, maar in de vertaling tussen de lagen. `FileService.openDeckDetailed` **gaf de reden allang terug** — `OpenFailure` onderscheidt zes gevallen — maar `openFileByPath` gooide alles behalve "geen presentatie" weg en maakte er één `OpenResult.unreadable` van. Het antwoord lag twee lagen lager voor het oprapen. Dat corrigeert ook mijn eigen inschatting van vanochtend: ik dacht dat dit een enum-refactor over 26 plekken zou vragen. Dat was niet zo. ## Wat er nu gebeurt | Oorzaak | Melding | | --- | --- | | Pad bestaat niet meer | *Dit bestand bestaat niet meer op deze plek.* | | Boven de deckgrootte-limiet | *Dit bestand is te groot om te openen.* | | Geen geldige UTF-8 | *Dit bestand is geen leesbare tekst. OciDeck opent Markdown.* | | Markdown afgebroken/onparseerbaar | *Deze presentatie is beschadigd of half opgeslagen.* | | Onbekend | *Kon dit bestand niet openen.* | Die laatste rij is opzet. Er zijn 26 plekken die `unreadable` teruggeven en de meeste weten écht niet meer dan dat — een afgebroken open, een tabblad dat verdween. **Een reden verzinnen bij een onbekende oorzaak is slechter dan zwijgen**: een melding die de verkeerde kant op wijst kost meer tijd dan een vage. De reden wordt vóór elke poging gewist. Anders krijgt de volgende fout een verklaring die niet van hem is — precies de valkuil van een provider die iets onthoudt. ## Wat dit níét oplost **Een regelnummer.** De parser draagt geen positie mee, dus *"beschadigd of half opgeslagen"* is zo precies als het nu kan. Dat vraagt een parser die zijn positie bijhoudt; dat is een eigen klus. Het staat zo in de CHANGELOG en in de probleemoplossingsgids in plaats van weggelaten te worden. ## Vertalingen Vier strings × 31 talen = 124 vertalingen, via `make add-l10n`. Gedelegeerd; de vertaler heeft per taal het bestaande huisvocabulaire aangehouden (`ficheiro` voor pt, `berkas` voor id) en per taal gemeld waar hij twijfelde — Klingon en Latijn wisselen in het corpus zelf tussen meerdere woorden voor "bestand", en daar is de keuze van de buurstring aangehouden zodat de vijf meldingen samen consistent zijn. ## De ratchet had gelijk `TabsNotifier` ging over zijn plafond. Terecht: het vastleggen én het vertalen van de uitkomst horen niet in die klasse. Ze staan nu top-level, en de klasse is **netto drie regels kleiner** dan ervoor — basislijn meeverlaagd. Ik heb onderweg één keer overwogen om verklarend commentaar weg te knippen om de teller te halen. Dat is de verkeerde prikkel; er is echt gedrag verplaatst in plaats daarvan. ## Bijvangst `TROUBLESHOOTING_GUIDE.md` zei nog dat video, audio én de notities niet naar git meereizen. Dat klopt sinds #515 en #541 geen van drieën. Rechtgezet en gedateerd, met een tabel van de nieuwe meldingen erbij. ## Getoetst - `make check` groen, `make check-secrets` en `make sast` schoon, `make l10n-check` groen. - Vijf tests op de doorgifte. Twee mutaties geplant: de reden niet doorgeven (4 rood) en het vooraf wissen weglaten (1 rood — precies de test die daarover gaat). ## Wat van #646 overblijft Alleen polijstwerk: de consentmuur die "Akkoord" grijs laat zonder te zeggen waarom, de dubbele opslagdialoog, de half-Engelse macOS-menubalk, en de tijdstempel in de exportnaam. Alle drie de items die je als "echte gebruikersimpact" aanmerkte zijn nu weg. Werkt aan #646.
fix(ux): zeg wáárom een bestand niet openging (#646)
Some checks failed
CI / Web hardening (push) Failing after 22s
CI / Gate (Linux) · Format · Analyze · Coverage (push) Failing after 26s
CI / Docs links (push) Failing after 22s
CI / Supply-chain (Trivy · advisory) (push) Failing after 21s
CI / Gate (Linux) · Format · Analyze · Coverage (pull_request) Failing after 23s
CI / Web hardening (pull_request) Failing after 22s
CI / Docs links (pull_request) Failing after 23s
CI / Supply-chain (Trivy · advisory) (pull_request) Failing after 25s
CI / Test (macos-latest) (push) Has been cancelled
CI / Test (windows-latest) (push) Has been cancelled
CI / Test (macos-latest) (pull_request) Has been cancelled
CI / Test (windows-latest) (pull_request) Has been cancelled
9fb53cdaf0
"Kon dit bestand niet openen." stond voor vier verschillende dingen: het bestand
bestaat niet meer, het is te groot, het is geen tekst, of de markdown is
afgebroken. Voor een product dat om Markdown draait is dat mager — je kon er
niet uit opmaken of je het verkeerde bestand koos, of dat er iets stuk was, of
dat je er iets aan kon doen.

**Het venijn zat tussen de lagen, niet in de melding.** `openDeckDetailed` gaf
de reden allang terug — `OpenFailure` onderscheidt zes gevallen — maar
`openFileByPath` gooide alles behalve "geen presentatie" weg en maakte er één
`OpenResult.unreadable` van. Het antwoord lag twee lagen lager voor het oprapen.

Bewust géén reden door alle 26 `unreadable`-plekken heen gedragen. De meeste
weten écht niet meer dan dat — een afgebroken open, een tabblad dat verdween —
en dáár is de algemene zin eerlijk. Alleen waar de oorzaak vaststaat wordt hij
vastgelegd, via een provider in dezelfde vorm als `importSecurityAlarmProvider`.
De reden wordt vóór elke poging gewist: die van de vorige keer zou de volgende
fout een verklaring geven die niet van hem is, en een melding die de verkeerde
kant op wijst kost meer tijd dan een vage.

Vier nieuwe meldingen, elk in 31 talen. De onleesbaar-melding draagt de
suggestie in zijn tweede zin ("OciDeck opent Markdown"), want dat is het geval
waarin de gebruiker meestal simpelweg het verkeerde bestand koos.

**Wat dit níét oplost: een regelnummer.** De parser draagt geen positie mee, dus
"beschadigd of half opgeslagen" is zo precies als het nu kan. Dat staat zo in de
CHANGELOG en in de probleemoplossingsgids, in plaats van het weg te laten.

De klasseratchet viel onderweg en had gelijk: het vastleggen én het vertalen van
de uitkomst horen niet in `TabsNotifier`. Ze staan nu top-level, en de klasse is
netto drie regels kleiner dan ervoor — basislijn meeverlaagd.

Onderweg rechtgezet in TROUBLESHOOTING_GUIDE: die zei nog dat video, audio en de
notities niet naar git meereizen. Dat klopt sinds #515 en #541 geen van drieën.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
brenno merged commit bc4be36188 into main 2026-07-22 21:39:02 +00:00
Sign in to join this conversation.
No description provided.