fix(documentmodus): vier bevindingen uit de beeldkeuring #1540

Merged
brenno merged 5 commits from fix/keuring-bevindingen into main 2026-08-17 18:33:02 +00:00
Owner

Vier bevindingen uit de beeldkeuring op main, alle vier van eigen makelij. Twee ervan waren correcties op fouten die ik zelf eerder verkeerd had gediagnosticeerd.

1. De app las haar eigen sleutels nooit terug

Het editorscherm gaf document.body aan de paginaopmaak-resolver — en daar is de frontmatter net vanaf gehaald. Gevolg: het speldje verscheen nooit, en een document dat papersize: a4 droeg werd alsnog op de app-instelling getoond (A5 in de proef). De bytes reisden mee, de app deed er niets mee. Daarmee was de functie uit #1525 in de praktijk inert.

De codec was altijd goed en alle unit-tests waren groen; de fout zat precies tussen twee lagen die elk apart klopten. De regressietest kijkt daarom op het scherm — aantoonbaar rood tegen de oude code.

2. Een pagina-einde liet inkt achter

Een --- brak de pagina én werd als streep getekend, dus elk vers vel opende met een lijn boven de kop. In de pagina-weergave ís die streep het einde; hij wordt daar niet meer getekend (hideRules). In de lezer blijft het een gewone horizontale lijn — en dát staat nu ook onder test, want die keerzijde was nergens gepind (gevonden door de poortwachter).

3. Een document dat mét een --- begon opende met een leeg vel

De uitzondering beschermde alleen blok 0, dus de kop erachter brak alsnog af op een vel waar nog niets op stond. Met de hoofdstukinstelling aan gaf dat vier vellen voor twee koppen. Een geforceerd einde telt nu alleen wanneer er sinds het vorige einde échte inhoud staat — en een streep telt daarbij niet als inhoud.

4. De witruimte tussen alinea's ontbrak in het schrijfvlak

Alinea's plakten tegen elkaar tot één muur tekst, terwijl de weergave ernaast twaalf punten ertussen zet. Bij een lange tekst was dat slechter leesbaar dan vóór de documenttypografie.

De oorzaak is beschamend eenvoudig: de afstand stond in de vierde parameter van DefaultTextBlockStyle (regelafstand binnen een blok) in plaats van de derde (ruimte om het blok). Een eerdere correctie daarvan is stil mislukt — de tekstvervanging matchte niet — en ik concludeerde toen dat Quill die instelling negeert. Dat klopte niet.

Daarmee vervalt ook de compensatie die ik erop had gebouwd: kQuillMissingBlockGap telde bij het meten twaalf punten per blok op om de hoogte te laten kloppen met de weergave. Een keurig gedocumenteerde correctie voor een fout die ik zelf had gemaakt. De toets die beide renderwerelden op dezelfde hoogte pint sloeg hierop aan — hij liep naar 1,09 zodra de afstand echt verscheen. Precies waar zo'n toets voor is.

Onderweg

De nieuwe getter duwde _DocumentEditorScreenState over zijn plafond (die stond op precies 1000); hij is top-level gemaakt in dezelfde part in plaats van de basislijn op te rekken.

Poorten

make check groen (9617 tests, dekking 86,9%). make check-secrets groen, make sast groen (0 findings).

Vier bevindingen uit de beeldkeuring op main, alle vier van eigen makelij. Twee ervan waren correcties op fouten die ik zelf eerder verkeerd had gediagnosticeerd. ## 1. De app las haar eigen sleutels nooit terug Het editorscherm gaf `document.body` aan de paginaopmaak-resolver — en daar is de frontmatter net vanaf gehaald. Gevolg: het speldje verscheen nooit, en een document dat `papersize: a4` droeg werd alsnog op de app-instelling getoond (A5 in de proef). De bytes reisden mee, de app deed er niets mee. Daarmee was de functie uit #1525 in de praktijk inert. De codec was altijd goed en alle unit-tests waren groen; de fout zat precies tussen twee lagen die elk apart klopten. De regressietest kijkt daarom **op het scherm** — aantoonbaar rood tegen de oude code. ## 2. Een pagina-einde liet inkt achter Een `---` brak de pagina én werd als streep getekend, dus elk vers vel opende met een lijn boven de kop. In de pagina-weergave ís die streep het einde; hij wordt daar niet meer getekend (`hideRules`). In de lezer blijft het een gewone horizontale lijn — en dát staat nu ook onder test, want die keerzijde was nergens gepind (gevonden door de poortwachter). ## 3. Een document dat mét een `---` begon opende met een leeg vel De uitzondering beschermde alleen blok 0, dus de kop erachter brak alsnog af op een vel waar nog niets op stond. Met de hoofdstukinstelling aan gaf dat vier vellen voor twee koppen. Een geforceerd einde telt nu alleen wanneer er sinds het vorige einde échte inhoud staat — en een streep telt daarbij niet als inhoud. ## 4. De witruimte tussen alinea's ontbrak in het schrijfvlak Alinea's plakten tegen elkaar tot één muur tekst, terwijl de weergave ernaast twaalf punten ertussen zet. Bij een lange tekst was dat slechter leesbaar dan vóór de documenttypografie. De oorzaak is beschamend eenvoudig: de afstand stond in de **vierde** parameter van `DefaultTextBlockStyle` (regelafstand *binnen* een blok) in plaats van de **derde** (ruimte *om* het blok). Een eerdere correctie daarvan is stil mislukt — de tekstvervanging matchte niet — en ik concludeerde toen dat Quill die instelling negeert. Dat klopte niet. Daarmee vervalt ook de compensatie die ik erop had gebouwd: `kQuillMissingBlockGap` telde bij het *meten* twaalf punten per blok op om de hoogte te laten kloppen met de weergave. Een keurig gedocumenteerde correctie voor een fout die ik zelf had gemaakt. De toets die beide renderwerelden op dezelfde hoogte pint sloeg hierop aan — hij liep naar 1,09 zodra de afstand echt verscheen. Precies waar zo'n toets voor is. ## Onderweg De nieuwe getter duwde `_DocumentEditorScreenState` over zijn plafond (die stond op precies 1000); hij is top-level gemaakt in dezelfde part in plaats van de basislijn op te rekken. ## Poorten `make check` groen (9617 tests, dekking 86,9%). `make check-secrets` groen, `make sast` groen (0 findings).
**De app las haar eigen sleutels nooit terug.** Het editorscherm gaf
`document.body` aan de paginaopmaak-resolver — en daar is de frontmatter
net vanaf gehaald. Gevolg: het speldje verscheen nooit, en een document
dat A4 had vastgelegd werd alsnog op de ingestelde maat getoond. De bytes
reisden mee, de app deed er niets mee; daarmee was de hele functie uit
#1525 inert. De drie plekken lezen nu de volledige bron.

De toets die dat vastpint kijkt op het scherm en niet op de functie
eronder, want daar zat de fout niet: de codec was altijd al goed.

**Een pagina-einde liet inkt achter.** Een `---` breekt de pagina én werd
als streep getekend, dus elk vers vel opende met een lijn boven de kop. In
de pagina-weergave ís die streep het einde; hij wordt daar niet meer
getekend. In de lezer blijft het gewoon een horizontale lijn.

**Een document dat mét een `---` begon opende met een leeg vel.** De
uitzondering beschermde alleen blok 0, dus de kop erachter brak alsnog af
op een vel waar nog niets op stond. Een geforceerd einde telt nu alleen
wanneer er sinds het vorige einde échte inhoud staat — en een streep telt
daarbij niet als inhoud.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
De beeldkeuring zag dat alinea's in de visuele stand tegen elkaar aan
plakten tot één muur tekst, terwijl de weergave ernaast er wel twaalf
punten tussen zet. Bij een lange tekst was dat slechter leesbaar dan vóór
de documenttypografie.

De oorzaak is beschamend eenvoudig: de afstand stond in de vierde plek van
DefaultTextBlockStyle (de ruimte *tussen de regels binnen* een blok) in
plaats van de derde (de ruimte *om het blok*). Een eerdere correctie
daarvan is stil mislukt — de tekstvervanging matchte niet — en ik heb toen
de verkeerde conclusie getrokken: dat Quill die instelling negeert. Dat
klopte niet; hij honoreert haar gewoon.

Daarmee vervalt ook de compensatie die ik erop had gebouwd. Die telde bij
het *meten* twaalf punten per blok op om de hoogte te laten kloppen met de
weergave — een correctie voor een fout die ik zelf had gemaakt. Nu de
afstand echt getekend wordt, klopt de hoogte vanzelf en meet de
schrijfstand weer wat er staat.

De toets die beide werelden op dezelfde hoogte pint sloeg hier ook op aan:
hij liep naar 1,09 zodra de afstand echt verscheen. Dat is precies waar
zo'n toets voor is.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
De analyse-poort ziet elke import die niet meer gebruikt wordt als fataal.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
_pageSetupSource was een getter op _DocumentEditorScreenState, en die
klasse zat al op 1000 regels. Als top-level functie met `ref` als
parameter doet hij hetzelfde en telt hij niet meer bij de klasse.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
test(documentweergave): pin dat een --- in de lezer een streep blijft
All checks were successful
scans / scans (pull_request) Successful in 2m47s
static-gate / static-gate (pull_request) Successful in 6m4s
de5d39a617
De nieuwe hideRules-vlag heeft twee kanten, en maar één ervan stond onder
test. Dat een `---` in de pagina-weergave géén lijn tekent is gepind; dat
hij in de documentatielezer wél een lijn blijft, nergens. Zet iemand die
vlag ooit standaard aan, dan verdwijnt de streep stil uit de lezer zonder
dat één test omvalt.

Gevonden door de poortwachter, niet door mij.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
brenno merged commit b029ce7ab4 into main 2026-08-17 18:33:02 +00:00
Sign in to join this conversation.
No description provided.