Web: automatische broncontrole faalt doordat Isolate.run niet wordt ondersteund #2764

Closed
opened 2026-11-03 01:29:56 +00:00 by brenno · 2 comments
Owner

Probleem en gebruikersimpact

De automatische broncontrole van presentaties gebruikt in de webversie Isolate.run. Dart4web ondersteunt deze aanroep niet. Na de wachttijd van 350 ms ontstaat een onafgevangen fout; bijgewerkte validatie, schrijftips en optionele Marp-controle worden niet geleverd en de pendingstatus wordt niet beëindigd.

De editor plant de ronde al bij openen en opnieuw na een tekstwijziging. Zoeken is geen voorwaarde. Tekstverlies of een volledige appcrash is niet aangetoond.

Reproductie en bewijs

Open de presentatiebroneditor in Chrome met de productie-uitvoering van deckChecksRunner, wijzig een teken en wacht meer dan 350 ms. Een browserregressie mag de runner niet door de synchrone widgettestfixture vervangen.

De concrete Chrome-reproductie tijdens het zoekwerk leverde:

Unsupported operation: dart:isolate is not supported on dart4web
package:ocideck/services/deck_source_checks.dart 46:13
package:ocideck/services/deck_source_checks.dart 58:30

lib/services/deck_source_checks.dart is bytegelijk aan basiscommit 580a344fb; SHA-256 van beide: 79c64548254057ea0617cf58e682c50cd0b5e79b65fcf6e4fe734494ef50962d. Dit is een bestaande fout, afzonderlijk van #2705–#2708. De onafhankelijke zoekgeometrietest slaagt in Chrome en native met dezelfde synchrone fixture als de bestaande broneditortests; die fixture repareert de productiebroncontrole niet.

Gerichte duplicaatcontrole inclusief gesloten issues vond geen passende melding. #2713 behandelde de prestaties van dezelfde bundel, #875 presentatie-import en #2661 file://-CORS; deze fout heeft een andere trigger.

Aanpak

Maak alleen de uitvoeringskeuze van de standaardrunner platformbewust: behoud achtergrondverwerking op native en gebruik op web een ondersteunde uitvoering. Behoud de pure controleregelset, debounce en bescherming tegen verouderde resultaten. Schakel controles niet uit en verberg de fout niet met een lege catch. Geen nieuwe afhankelijkheid of algemene workerarchitectuur nodig.

Acceptatie

  • Een Chrome-regressie gebruikt de standaardrunner zonder override en ontvangt daadwerkelijk een controleresultaat.
  • Openen en wijzigen zijn afgedekt; ongeldige bron levert de verwachte melding, zonder isolate-exception en met beëindigde pendingstatus.
  • Een oudere ronde overschrijft geen nieuwere bron; een verwijderde editor krijgt geen callback.
  • Native behoudt achtergrondverwerking en dezelfde controle-uitvoer.
  • De bronzoekgeometrietest blijft in Chrome en native groen; inhoud en bestandsformaat blijven intact.
  • Repository-native poort en gerichte Chrome-regressie zijn groen op de uiteindelijke commit; geen onbewezen off-threadclaim voor web.
## Probleem en gebruikersimpact De automatische broncontrole van presentaties gebruikt in de webversie `Isolate.run`. Dart4web ondersteunt deze aanroep niet. Na de wachttijd van 350 ms ontstaat een onafgevangen fout; bijgewerkte validatie, schrijftips en optionele Marp-controle worden niet geleverd en de pendingstatus wordt niet beëindigd. De editor plant de ronde al bij openen en opnieuw na een tekstwijziging. Zoeken is geen voorwaarde. Tekstverlies of een volledige appcrash is niet aangetoond. ## Reproductie en bewijs Open de presentatiebroneditor in Chrome met de productie-uitvoering van `deckChecksRunner`, wijzig een teken en wacht meer dan 350 ms. Een browserregressie mag de runner niet door de synchrone widgettestfixture vervangen. De concrete Chrome-reproductie tijdens het zoekwerk leverde: ``` Unsupported operation: dart:isolate is not supported on dart4web package:ocideck/services/deck_source_checks.dart 46:13 package:ocideck/services/deck_source_checks.dart 58:30 ``` `lib/services/deck_source_checks.dart` is bytegelijk aan basiscommit `580a344fb`; SHA-256 van beide: `79c64548254057ea0617cf58e682c50cd0b5e79b65fcf6e4fe734494ef50962d`. Dit is een bestaande fout, afzonderlijk van #2705–#2708. De onafhankelijke zoekgeometrietest slaagt in Chrome en native met dezelfde synchrone fixture als de bestaande broneditortests; die fixture repareert de productiebroncontrole niet. Gerichte duplicaatcontrole inclusief gesloten issues vond geen passende melding. #2713 behandelde de prestaties van dezelfde bundel, #875 presentatie-import en #2661 file://-CORS; deze fout heeft een andere trigger. ## Aanpak Maak alleen de uitvoeringskeuze van de standaardrunner platformbewust: behoud achtergrondverwerking op native en gebruik op web een ondersteunde uitvoering. Behoud de pure controleregelset, debounce en bescherming tegen verouderde resultaten. Schakel controles niet uit en verberg de fout niet met een lege catch. Geen nieuwe afhankelijkheid of algemene workerarchitectuur nodig. ## Acceptatie - [ ] Een Chrome-regressie gebruikt de standaardrunner zonder override en ontvangt daadwerkelijk een controleresultaat. - [ ] Openen en wijzigen zijn afgedekt; ongeldige bron levert de verwachte melding, zonder isolate-exception en met beëindigde pendingstatus. - [ ] Een oudere ronde overschrijft geen nieuwere bron; een verwijderde editor krijgt geen callback. - [ ] Native behoudt achtergrondverwerking en dezelfde controle-uitvoer. - [ ] De bronzoekgeometrietest blijft in Chrome en native groen; inhoud en bestandsformaat blijven intact. - [ ] Repository-native poort en gerichte Chrome-regressie zijn groen op de uiteindelijke commit; geen onbewezen off-threadclaim voor web.
Author
Owner

Opgepakt in tak fix/web-deck-checks-2764. Raakt lib/services/deck_source_checks.dart (standaardrunner: native Isolate.run, web Future.sync, zoals ExportService._offload), een browserregressie test/markdown_deck_editor_web_test.dart, test/deck_source_checks_test.dart (native én Chrome), docs/CHECKS.md en de CHANGELOG.

Opgepakt in tak `fix/web-deck-checks-2764`. Raakt `lib/services/deck_source_checks.dart` (standaardrunner: native `Isolate.run`, web `Future.sync`, zoals `ExportService._offload`), een browserregressie `test/markdown_deck_editor_web_test.dart`, `test/deck_source_checks_test.dart` (native én Chrome), `docs/CHECKS.md` en de CHANGELOG.
Author
Owner

Opgelost in 3c88fd61d (PR #2788). De standaardrunner kiest nu kIsWeb ? Future.sync : Isolate.run. Browserregressie zonder runnervervanging: test/markdown_deck_editor_web_test.dart (openen, wijzigen, verdwenen editor). Platformneutraal: test/deck_source_checks_test.dart (zelfde oordeel; native buiten de UI-isolate, bewezen met sabotage; verlopen ronde levert niets af). Rood vóór de fix: alle vier in Chrome. make check/check-secrets/sast zijn groen.

Niet meegenomen:

  • De Chrome-toetsen zitten niet in make check (er is geen --platform chrome-doel); ze staan in docs/CHECKS.md om los te draaien.
  • Geen off-thread op het web: de ronde draait daar op de main thread.
  • Dezelfde fout in lib/utils/sanitize_svg.dart (SVG > 256 KB) krijgt een eigen issue.
Opgelost in 3c88fd61d (PR #2788). De standaardrunner kiest nu `kIsWeb ? Future.sync : Isolate.run`. Browserregressie zonder runnervervanging: `test/markdown_deck_editor_web_test.dart` (openen, wijzigen, verdwenen editor). Platformneutraal: `test/deck_source_checks_test.dart` (zelfde oordeel; native buiten de UI-isolate, bewezen met sabotage; verlopen ronde levert niets af). Rood vóór de fix: alle vier in Chrome. `make check`/`check-secrets`/`sast` zijn groen. **Niet meegenomen:** - De Chrome-toetsen zitten niet in `make check` (er is geen `--platform chrome`-doel); ze staan in `docs/CHECKS.md` om los te draaien. - Geen off-thread op het web: de ronde draait daar op de main thread. - Dezelfde fout in `lib/utils/sanitize_svg.dart` (SVG > 256 KB) krijgt een eigen issue.
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#2764
No description provided.