Chart-export kan geldige vier-backtick-fences ongeldig herschrijven #1685
Labels
No labels
accepted
bug
declined
docs
duplicate
enhancement
good first issue
in-progress
needs-info
privacy
security
triage
No milestone
No project
No assignees
1 participant
Notifications
Due date
No due date set.
Dependencies
No dependencies set
Reference
LibreKAT/Ocideck#1685
Loading…
Reference in a new issue
No description provided.
Delete branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Probleem
De document→deck-brug kan fence-runlengtes generiek lezen, maar serialiseert chartblokken altijd terug met drie backticks. Een geldig chartblok dat juist vier backticks gebruikt omdat de inhoud een regel met drie backticks bevat, wordt bij projectie/export in een kortere fence gezet. Die innerlijke regel sluit dan voortijdig het blok en de export-Mardown raakt structureel beschadigd.
Reproductie
Verwacht
De oorspronkelijke veilige runlengte blijft behouden of de serializer kiest dynamisch een fence langer dan iedere run in de inhoud.
Technische aanwijzing
DocumentDeckBridge heeft een generieke _FenceInfo bij lezen, maar de chart-serialisatie emitteert vast drie backticks.
Gevonden bij audit van commit
d439638c6b.Triage: accepted
Bevestigd tegen
main(e93ef205c). De leeskant kent de runlengte:_fenceOpen(lib/services/document_deck_bridge.dart) ontleedt`{3,}en~{3,}en_isFenceCloseeist minstens dezelfde lengte. De schrijfkant niet:document_deck_bridge.dartgeeft'```chart\n${slide.customMarkdown}\n```'terug, met drie backticks vast ingebakken.Hetzelfde staat in
lib/services/markdown_service_serialize.dart:_writeChartSlideen_writeCockpitSlideschrijven een vaste hekrij. De code-dia is de enige die het goed doet — die gebruiktfenceFor(lib/services/markdown_service_fenced.dart), dat precies hiervoor bestaat.Oplossingsrichting
fenceFor(body)gebruiken op élke plek die een fenced blok schrijft: chart, cockpit, question én de brug. De hekrij volgt dan uit de inhoud en is per definitie lang genoeg.De brug importeert
markdown_serviceniet (alleenmodels/,markdown_table_codec,pentest_blocks,document_timeline), dusfenceForverhuist naarlib/utils/en beide bibliotheken importeren hem daar. Niet een tweede kopie in de brug laten ontstaan — dat is exact hoe dit soort verschillen groeien (zie ook #1657).Wat ik er níét bij zou doen: de oorspronkelijke hekrij bewáren. De leeskant kent hem wel (
_FenceInfo.length) maar laat hem vallen bij het bouwen van de chart-dia, en een~~~chartkomt sowieso als backticks terug. Dat herstellen vraagt een veld opSlideen lost geen kapotte uitvoer op; de hekrij uit de inhoud berekenen dekt het correctheidsgeval volledig.Regressietest (verplicht)
test/document_deck_bridge_test.dart: chart-hek van vier backticks met een losse ``` -regel erin → heen en terug, en de geserialiseerde vorm omsluit de inhoud nog (parseer het resultaat terug en vergelijk de inhoud, niet de tekst).Kosten
Eén verhuisde functie plus vier aanroepplekken. Let op de registratieketen bij een nieuw bestand in
lib/utils/(SOURCE_MAP+ dekking).Prioriteit
Middel: zeldzame constructie, maar de uitkomst is structureel kapotte uitvoer-Markdown.