fix(editor): HTML-tag-placeholders zoals <persoon1> trappen visuele modus niet meer uit #1779

Merged
brenno merged 1 commit from fix/visual-html-placeholder-fallback into main 2026-08-24 15:54:28 +00:00
Owner

Probleem

Bij zoeken/vervangen in de visuele documentbewerker (bijv. p.frissen<persoon1> als privacy-redactieplaceholder) trapt de editor terug naar code-view met de melding dat de regel HTML-tags bevat. Sluit #1777.

Oorzaak

markdown_visual_compatibility.dart flaggde elke </?[A-Za-z][^>]*> als rawHtml-beperking, op de aanname dat HTML niet verliesvrij door de Markdown↔Quill codec round-tript. Geverifieerd: alle HTML-tags round-trippen byte-getrouw als letterlijke tekst (<persoon1>, <br>, <div>, <span>, <script>, <img>, <a> — allemaal getest via MarkdownQuillCodec). De detectie was een verouderde false positive. <persoonN> is een gangbare privacy-redactieconventie in incidentrapporten — precies het domein van OciDeck.

Oplossing

_rawHtml flagt alleen nog HTML-commentaar (<!--), niet meer HTML-tags. Comments blijven metadata (marp <!-- _class: lead -->, niet-herkende toc/timeline-varianten) die in de bron hoort; tags reizen als platte tekst door de codec.

Tests

  • Regressietest: <persoon1>-placeholder en <br>/<b>-tags in proza zijn geen beperking meer.
  • HTML-commentaar buiten inline code blijft wel een beperking.
  • Bestaande tests die <html>-tags als rawHtml verwachten zijn omgezet naar comments (tag-round-trip is geen beperking meer).
  • markdown_visual_compatibility_test, pentest_visual_mode_test, markdown_editor_lossless_test, table_editor_test, find_replace_dialog_test geïsoleerd groen.

Scope-check (bewaker)

Raakt geen bestandsformaat, opslag, afhankelijkheid, uitgaand verkeer of publieke belofte — alleen wanneer de editor naar bronmodus terugvalt. De .md-inhoud verandert niet (HTML round-tript al dan niet getoond in visueel). Bewaker-stap expliciet overgeslagen.

Wat bewust níet is meegenomen

De l10n-melding ("Regel {n} bevat HTML-commentaar of HTML-tags …") blijft ongewijzigd. De key staat in 31 vertaalbestanden; een wijziging betekent een grote diff met merge-conflictrisico met lopende sessies, voor enkel een cosmetische aanscherping (de fallback vuurt nu alleen nog voor comments, dus "of HTML-tags" is iets te breed maar niet misleidend — de gebruiker ziet op de probleemregel een comment).

Lokale poort

make check: format, analyze, toolchain, conventions en registrations groen. De volle widget-suite vertoonde op deze machine de bekende omgevingsgebonden flakiness (asset-loading AssetManifest.bin/mermaid.min.js, WebDAV/S3/git-shell time-outs onder zware parallelle load). De relevante editor/markdown-tests zijn geïsoleerd allemaal groen gedraaid. De CI static-gate draait de lichte subset en is de arbiter.

Generated with Devin

## Probleem Bij zoeken/vervangen in de visuele documentbewerker (bijv. `p.frissen` → `<persoon1>` als privacy-redactieplaceholder) trapt de editor terug naar code-view met de melding dat de regel HTML-tags bevat. Sluit #1777. ## Oorzaak `markdown_visual_compatibility.dart` flaggde elke `</?[A-Za-z][^>]*>` als `rawHtml`-beperking, op de aanname dat HTML niet verliesvrij door de Markdown↔Quill codec round-tript. **Geverifieerd: alle HTML-tags round-trippen byte-getrouw als letterlijke tekst** (`<persoon1>`, `<br>`, `<div>`, `<span>`, `<script>`, `<img>`, `<a>` — allemaal getest via `MarkdownQuillCodec`). De detectie was een verouderde false positive. `<persoonN>` is een gangbare privacy-redactieconventie in incidentrapporten — precies het domein van OciDeck. ## Oplossing `_rawHtml` flagt alleen nog HTML-*commentaar* (`<!--`), niet meer HTML-*tags*. Comments blijven metadata (marp `<!-- _class: lead -->`, niet-herkende toc/timeline-varianten) die in de bron hoort; tags reizen als platte tekst door de codec. ## Tests - Regressietest: `<persoon1>`-placeholder en `<br>`/`<b>`-tags in proza zijn geen beperking meer. - HTML-commentaar buiten inline code blijft wel een beperking. - Bestaande tests die `<html>`-tags als rawHtml verwachten zijn omgezet naar comments (tag-round-trip is geen beperking meer). - `markdown_visual_compatibility_test`, `pentest_visual_mode_test`, `markdown_editor_lossless_test`, `table_editor_test`, `find_replace_dialog_test` geïsoleerd groen. ## Scope-check (bewaker) Raakt **geen** bestandsformaat, opslag, afhankelijkheid, uitgaand verkeer of publieke belofte — alleen wanneer de editor naar bronmodus terugvalt. De `.md`-inhoud verandert niet (HTML round-tript al dan niet getoond in visueel). Bewaker-stap expliciet overgeslagen. ## Wat bewust níet is meegenomen De l10n-melding ("Regel {n} bevat HTML-commentaar of HTML-tags …") blijft ongewijzigd. De key staat in 31 vertaalbestanden; een wijziging betekent een grote diff met merge-conflictrisico met lopende sessies, voor enkel een cosmetische aanscherping (de fallback vuurt nu alleen nog voor comments, dus "of HTML-tags" is iets te breed maar niet misleidend — de gebruiker ziet op de probleemregel een comment). ## Lokale poort `make check`: format, analyze, toolchain, conventions en registrations groen. De volle widget-suite vertoonde op deze machine de bekende omgevingsgebonden flakiness (asset-loading `AssetManifest.bin`/`mermaid.min.js`, WebDAV/S3/git-shell time-outs onder zware parallelle load). De relevante editor/markdown-tests zijn geïsoleerd allemaal groen gedraaid. De CI `static-gate` draait de lichte subset en is de arbiter. Generated with [Devin](https://devin.ai)
fix(editor): HTML-tag-placeholders zoals <persoon1> trappen visuele modus niet meer uit (#1777)
All checks were successful
scans / scans (pull_request) Successful in 2m53s
static-gate / static-gate (pull_request) Successful in 6m55s
71dde4af91
De rawHtml-detectie in markdown_visual_compatibility.dart flaggde elke
</?[A-Za-z][^>]*> als beperking, op de aanname dat HTML niet verliesvrij
door de Markdown↔Quill codec round-tript. Geverifieerd: alle HTML-tags
(<persoon1>, <br>, <div>, <span>, <script>, <img>, <a>) round-trippen
byte-getrouw als letterlijke tekst. De detectie was een verouderde false
positive die een gangbare privacy-redactieconventie (<persoonN>) de
visuele modus uit trapte — precies het domein van OciDeck.

HTML-*commentaar* (<!-- … -->) blijft wel flaggen: dat is metadata
(marp <!-- _class: lead -->, niet-herkende toc/timeline-varianten) die
in de bron hoort. Bestaand gedrag voor comments blijft daarmee behouden.

Waarom de l10n-melding ("HTML-commentaar of HTML-tags") bewust ongewijzigd
blijft: de key staat in 31 vertaalbestanden; een wijziging betekent een
grote diff met merge-conflictrisico met lopende sessies, voor enkel een
cosmetische aanscherping. De fallback vuurt nu alleen nog voor comments,
dus "of HTML-tags" is iets te breed maar niet misleidend.

Regressietests: <persoon1>-placeholder en <br>/<b>-tags in proza zijn
geen beperking; HTML-commentaar buiten inline code blijft wel een
beperking. Bestaande tests die <html>-tags als rawHtml verwachten zijn
omgezet naar comments (de tag-round-trip is geen beperking meer).

Generated with [Devin](https://devin.ai)

Co-Authored-By: Devin <158243242+devin-ai-integration[bot]@users.noreply.github.com>
brenno merged commit 08ca05255d into main 2026-08-24 15:54:28 +00:00
Sign in to join this conversation.
No description provided.