fix: restant openstaande issues — stijlknop, file://-melding, Linux enkel-exemplaar #2665

Merged
brenno merged 3 commits from feat/batch-restant-issues into main 2026-10-29 14:29:41 +00:00
Owner

Summary

Restant van de openstaande-issues-batch (vier issues, drie commits):

  • #2662: Profiel verwijderen is nu uit wanneer er maar één opgeslagen profiel is (de ingebouwde vulling telde vroeger mee), én bij een gekozen ingebouwd profiel — regressietest dekt alle drie de toestanden.
  • #2661: de webbundel op file:// toont een eerlijke uitleg in het laadscherm (boot.js) in plaats van een dood scherm met console-fouten; HTTP-pad onveranderd (getest: boot + canvas, geen pageerrors). Docs + changelog bijgewerkt.
  • #2656: Linux krijgt de Windows-behandeling — een tweede starter stuurt zijn paden via een AF_UNIX-socket in $XDG_RUNTIME_DIR naar het draaiende exemplaar en stopt vóór runApp; herstelbestanden dragen een sessiestempel met een heartbeat-lock, zodat loadAll momentopnames van een nog-levende eigenaar overslaat en vervallen locks opruimt.
  • #2660: geen code nodig — op main al gefixt door het #2640-werk (72dd0f902, mem:-assets in het gehele logo-pad). Issue wordt gesloten met uitleg.
  • #2657: status gezet — deels gedekt door PR #2654; de rest is hardware-gebonden (echte Windows-machine nodig).

Test plan

  • make check groen (format, analyze, conventions, volledige suite 14903 tests, coverage 86.5%, golden)
  • make check-secrets + make sast groen
  • Doelgericht: settings_dialog_profile_test (29), single_instance_test (6), recovery_service_test (35), open_file_channel_test (14), web_index_splash_test, source_map_coverage_test, network_sink_guard_test
  • Web-boot op HTTP én file:// met de browser bekeken

Generated with Devin

## Summary Restant van de openstaande-issues-batch (vier issues, drie commits): - **#2662**: *Profiel verwijderen* is nu uit wanneer er maar één opgeslagen profiel is (de ingebouwde vulling telde vroeger mee), én bij een gekozen ingebouwd profiel — regressietest dekt alle drie de toestanden. - **#2661**: de webbundel op `file://` toont een eerlijke uitleg in het laadscherm (`boot.js`) in plaats van een dood scherm met console-fouten; HTTP-pad onveranderd (getest: boot + canvas, geen pageerrors). Docs + changelog bijgewerkt. - **#2656**: Linux krijgt de Windows-behandeling — een tweede starter stuurt zijn paden via een AF_UNIX-socket in `$XDG_RUNTIME_DIR` naar het draaiende exemplaar en stopt vóór `runApp`; herstelbestanden dragen een sessiestempel met een heartbeat-lock, zodat `loadAll` momentopnames van een nog-levende eigenaar overslaat en vervallen locks opruimt. - **#2660**: geen code nodig — op main al gefixt door het #2640-werk (`72dd0f902`, mem:-assets in het gehele logo-pad). Issue wordt gesloten met uitleg. - **#2657**: status gezet — deels gedekt door PR #2654; de rest is hardware-gebonden (echte Windows-machine nodig). #### Test plan - [x] `make check` groen (format, analyze, conventions, volledige suite 14903 tests, coverage 86.5%, golden) - [x] `make check-secrets` + `make sast` groen - [x] Doelgericht: `settings_dialog_profile_test` (29), `single_instance_test` (6), `recovery_service_test` (35), `open_file_channel_test` (14), `web_index_splash_test`, `source_map_coverage_test`, `network_sink_guard_test` - [x] Web-boot op HTTP én `file://` met de browser bekeken Generated with [Devin](https://devin.ai)
De knop keek naar de zichtbare lijst (opgeslagen + ingebouwde), terwijl
_deleteProfile op de werkkopie weigert bij één profiel. Met één eigen
profiel naast de ingebouwde was hij dus klikbaar maar dood. Nu alleen aan
als het gekozen profiel in de werkkopie staat én er meer dan één is —
ingebouwde profielen zijn niet verwijderbaar.
Vanaf file:// weigert elke browser de wasm/module-fetches en de service
worker — de console vulde met CORS-fouten en de pagina bleef dood. Een
externe boot.js (CSP staat geen inline script toe) injecteert de
Flutter-bootstrap nu alleen over http(s) en toont anders in het
laadscherm de uitleg plus de http.server-hint. De enige resterende
console-regel is de frame-ancestors-meta, die moet blijven voor de
byte-exacte spiegel met de .htaccess-header.

Geverifieerd in Chrome: file:// toont de melding met alleen die ene
benigne regel; over http boot de app volledig.
Linux kreeg de Windows-behandeling: een tweede starter stuurt zijn
bestandspaden via een Unix-socket in $XDG_RUNTIME_DIR naar het draaiende
exemplaar en stopt vóór runApp, in plaats van een tweede venster met
gedeelde herstel- en voorkeursbestanden te openen. De paden lopen via
dezelfde onOpenFiles-route als WM_COPYDATA op Windows.

Herstelbestanden dragen nu een sessiestempel met een heartbeat-lock naast
de map: de eigenaar ververst zijn lock-mtime periodiek; loadAll slaat
momentopnames van een nog-levende eigenaar over (dat exemplaar beheert ze
zelf) en ruimt vervallen locks mee op. Een nette afsluiting wist eigen
lock en socket via endSession/dispose; een crash laat een vervallen lock
achter die bij de volgende start als dood telt.
brenno merged commit c8a02eb572 into main 2026-10-29 14:29:41 +00:00
brenno deleted branch feat/batch-restant-issues 2026-10-29 14:29:42 +00:00
Sign in to join this conversation.
No description provided.