fix(cockpit): tekst van het glas af — uitleesvenster in de flank, label eronder #1929

Merged
brenno merged 12 commits from feat/cockpit-flank-layout into main 2026-09-03 00:17:56 +00:00
Owner

Samenvatting

De cockpit-dia zette de waarde-uitlezing als één ongebonden regel "getal+eenheid" ín de wijzerplaat, op de hoogte van de schaalcijfers en de bandeinden. Een eenheid als "% van maximale hartslag" liep dwars door "50", "100" en tot op de bezel; klassiek kapte hem aan de kaartrand af; de HTML-export liet hem het buurinstrument in lopen. Het label zat vast op 18 px, ook op 1920 px breed, en de flanken naast de ronde bezel bleven leeg.

Herontwerp (ontwerp en besluiten: docs/design/COCKPIT_LAYOUT.md, mock-up op de canvas "Cockpit herontwerp"):

  • Glas vrij. Op de wijzerplaat alleen schaal, banden, naald en de twee schaalcijfers. De thermometer krijgt die nu ook, klim/daling toont "+max / 0 / min", de horizon draagt geen tekst meer op de bruine grond.
  • Venster ernaast. Getal en eenheid in een uitleesvenster in de flank (plaat in face-kleur, het kompasvenster van #1110 voor elk instrument). Eén getalmaat per dia uit het langste getal, zodat de rollende uitlezing nooit van maat springt. Korte eenheid inline, lange op eigen regels.
  • Plaatje eronder. Het label krijgt de volle celbreedte en schaalt mee (32 px bij zes meters op 1080p, was 18).
  • Raster. Drie meters op één rij, vijf met een gecentreerde tweede rij; twee meters (of drie op een rij) stapelen het venster onder de wijzerplaat.
  • Eén rekenkern (lib/services/cockpit_layout.dart, Flutter-vrij) voor painter én HTML-export; elke passingsbeslissing op tekenaantal, niet op gemeten pixels, zodat de export dezelfde regelval kiest. De export tekent daardoor ook dezelfde thermometer en horizon als de app; zijn paneel heeft de verhouding van het app-paneel. De clip-ids in de export dragen een suffix per SVG: twee cockpit-dia's in één document deelden #cockpit-horizon-0 en de tweede verloor zijn tekst.

Bestandsformaat onaangeroerd; geen nieuwe vertaalstring (de horizonregel "P {pitch} B {bank}" wordt op de dubbele spatie gesplitst).

Tests

  • test/cockpit_layout_test.dart pint de rekenkern: kolomregel, venster buiten de bezel voor 1–6 meters, de maten uit het ontwerp, en dat de zes meters uit de aanleiding zonder ellipsis en zonder krimp passen; plus de cascade en het kompas met een lange markerregel.
  • Een rood-eerst-test tegen de oude painter was niet mogelijk: die had geen begrensde tekstzone om op te toetsen (de oude _valueText had geen breedtegrens en geen ellipsis), dus er was niets meetbaars dat "loopt over de schaal" hard kon maken behalve een pixelvergelijking. De golden type_cockpit is opnieuw uit de renderer gebouwd.
  • cockpit_heading_readouts_test.dart (#1110) gaat op in de nieuwe geometrietest; de exporttests zijn bijgewerkt op de nieuwe tekstknopen en het nieuwe palet.

Bewaker

Overgeslagen, expliciet: de wijziging raakt het bestandsformaat, de opslag, afhankelijkheden, uitgaand verkeer noch een publieke belofte. Het cockpit-blok blijft byte voor byte gelijk.

Wat verandert voor bestaande decks

  • Het getal staat niet meer ín de meter (zoals "78 %" in de oude documentatie-screenshot) maar in het venster ernaast.
  • Decks met drie of vijf meters veranderen van indeling (geen leeg vak meer).

Poort

  • make check lokaal groen (zie de commit-status hieronder als de statische poort ook groen is).
  • make check-secrets en make sast: zie de laatste reactie op deze PR.

🤖 Generated with Claude Code

## Samenvatting De cockpit-dia zette de waarde-uitlezing als één ongebonden regel "getal+eenheid" ín de wijzerplaat, op de hoogte van de schaalcijfers en de bandeinden. Een eenheid als "% van maximale hartslag" liep dwars door "50", "100" en tot op de bezel; klassiek kapte hem aan de kaartrand af; de HTML-export liet hem het buurinstrument in lopen. Het label zat vast op 18 px, ook op 1920 px breed, en de flanken naast de ronde bezel bleven leeg. Herontwerp (ontwerp en besluiten: `docs/design/COCKPIT_LAYOUT.md`, mock-up op de canvas "Cockpit herontwerp"): - **Glas vrij.** Op de wijzerplaat alleen schaal, banden, naald en de twee schaalcijfers. De thermometer krijgt die nu ook, klim/daling toont "+max / 0 / min", de horizon draagt geen tekst meer op de bruine grond. - **Venster ernaast.** Getal en eenheid in een uitleesvenster in de flank (plaat in face-kleur, het kompasvenster van #1110 voor elk instrument). Eén getalmaat per dia uit het langste getal, zodat de rollende uitlezing nooit van maat springt. Korte eenheid inline, lange op eigen regels. - **Plaatje eronder.** Het label krijgt de volle celbreedte en schaalt mee (32 px bij zes meters op 1080p, was 18). - **Raster.** Drie meters op één rij, vijf met een gecentreerde tweede rij; twee meters (of drie op een rij) stapelen het venster onder de wijzerplaat. - **Eén rekenkern** (`lib/services/cockpit_layout.dart`, Flutter-vrij) voor painter én HTML-export; elke passingsbeslissing op tekenaantal, niet op gemeten pixels, zodat de export dezelfde regelval kiest. De export tekent daardoor ook dezelfde thermometer en horizon als de app; zijn paneel heeft de verhouding van het app-paneel. De clip-ids in de export dragen een suffix per SVG: twee cockpit-dia's in één document deelden `#cockpit-horizon-0` en de tweede verloor zijn tekst. Bestandsformaat onaangeroerd; geen nieuwe vertaalstring (de horizonregel "P {pitch} B {bank}" wordt op de dubbele spatie gesplitst). ## Tests - `test/cockpit_layout_test.dart` pint de rekenkern: kolomregel, venster buiten de bezel voor 1–6 meters, de maten uit het ontwerp, en dat de zes meters uit de aanleiding zonder ellipsis en zonder krimp passen; plus de cascade en het kompas met een lange markerregel. - Een rood-eerst-test tegen de oude painter was niet mogelijk: die had geen begrensde tekstzone om op te toetsen (de oude `_valueText` had geen breedtegrens en geen ellipsis), dus er was niets meetbaars dat "loopt over de schaal" hard kon maken behalve een pixelvergelijking. De golden `type_cockpit` is opnieuw uit de renderer gebouwd. - `cockpit_heading_readouts_test.dart` (#1110) gaat op in de nieuwe geometrietest; de exporttests zijn bijgewerkt op de nieuwe tekstknopen en het nieuwe palet. ## Bewaker Overgeslagen, expliciet: de wijziging raakt het bestandsformaat, de opslag, afhankelijkheden, uitgaand verkeer noch een publieke belofte. Het `cockpit`-blok blijft byte voor byte gelijk. ## Wat verandert voor bestaande decks - Het getal staat niet meer ín de meter (zoals "78 %" in de oude documentatie-screenshot) maar in het venster ernaast. - Decks met drie of vijf meters veranderen van indeling (geen leeg vak meer). ## Poort - `make check` lokaal groen (zie de commit-status hieronder als de statische poort ook groen is). - `make check-secrets` en `make sast`: zie de laatste reactie op deze PR. 🤖 Generated with [Claude Code](https://claude.com/claude-code)
Eén Flutter-vrije bron voor de indeling van een cockpit-dia: kolomregel
zonder leeg vak, breed/gestapeld per celvorm, wijzerplaat, uitleesvenster in de
flank, labelstrook, en een tekstcascade op tekenaantal zodat painter en
HTML-export dezelfde regelval kiezen. Ontwerp: docs/design/COCKPIT_LAYOUT.md.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
De waarde-uitlezing liep als ongebonden regel door schaalcijfers, bandeinden
en bezel. De painter tekent nu op de plaat alleen schaal, banden, naald en de
twee schaalcijfers; getal en eenheid staan in een venster naast de wijzerplaat,
het label in een strook onder de groep, alles uit CockpitCellPlan. Het
kompasvenster van #1110 is de plaat die elk instrument nu gebruikt; de oude
geometrietest gaat op in cockpit_layout_test.dart.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Zelfde raster, wijzerplaat, venster en label; paneelverhouding van het
app-paneel zodat de export dezelfde breed/gestapeld-keuze maakt; tekstzones in
een clip als vangnet; ids met een suffix per SVG omdat meerdere cockpit-dia's
één document delen.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
slide_preview.dart kreeg een import en een part-regel erbij voor de cockpit en
zat daarmee twee regels boven zijn plafond; de twee logo-helpers horen bij de
scaffold die de logo-bewuste marge al kent.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
style(export): Engels en Nederlands kopcommentaar in eigen blokken (commentaartaal-ratchet)
Some checks failed
scans / scans (pull_request) Has been cancelled
static-gate / static-gate (pull_request) Has been cancelled
c9d69d814d
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Author
Owner

Poortresultaten op HEAD van deze tak:

  • make check: groen (formatting, analyse, conventies, privacyprojectie, methodelengte, dode code, hardgecodeerde tekst, commentaartaal, volledige Flutter-suite, dekkingsvloeren, golden-suite op macOS).
  • make check-secrets: gitleaks en trufflehog, 0 geheimen (werkboom en historie).
  • make sast: semgrep met de lokale regels, 4 regels over 1197 bestanden, 0 bevindingen.
  • DAST (ZAP) niet gedraaid: deze wijziging raakt de webbundel noch het geserveerde oppervlak.
Poortresultaten op HEAD van deze tak: - `make check`: groen (formatting, analyse, conventies, privacyprojectie, methodelengte, dode code, hardgecodeerde tekst, commentaartaal, volledige Flutter-suite, dekkingsvloeren, golden-suite op macOS). - `make check-secrets`: gitleaks en trufflehog, 0 geheimen (werkboom en historie). - `make sast`: semgrep met de lokale regels, 4 regels over 1197 bestanden, 0 bevindingen. - DAST (ZAP) niet gedraaid: deze wijziging raakt de webbundel noch het geserveerde oppervlak.
fix(cockpit): beeldkeuring verwerkt — export-animatie, rollend getal, lampjes, naald, contrast
Some checks failed
scans / scans (pull_request) Has been cancelled
static-gate / static-gate (pull_request) Has been cancelled
0dea4d47c3
- Export: de verplaatsing van een cel op een eigen buitenste <g>; de
  cockpitPowerOn-animatie zet transform:scale() als CSS op .cockpit-meter en
  overschreef het transform-attribuut, waardoor alle meters op cel 0 vielen.
- Rollende uitlezing houdt de decimalen van de eindwaarde en n_dia telt min en
  max in die notatie: geen 1450.3… meer buiten het venster.
- Thermometerbuis begint onder de lampjes; klim/daling-cijfers in de vrije
  linkerhelft (de naald liep door de 0); horizonsymbool wit met donkere rand
  (accent op lucht was 2,5:1); gedempte inkt op volle dekking (schaalcijfers
  onder AA); klassiek muted 0,75.
- Stapel die niet in het venster past krimpt evenredig (horizon op getalmaat,
  gestapelde cel met lange eenheid); gestapelde plaat tussen de schroeven;
  eenheidregels onder 7 px niet getekend (vlekjes in de miniatuur); label
  0,095·h en inline-eenheid 0,36·N.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
fix(cockpit): herkeuring verwerkt — rasterbrede getalmaat, export-dekking, minteken, miniatuur
Some checks failed
static-gate / static-gate (pull_request) Has been cancelled
scans / scans (pull_request) Has been cancelled
880f10045b
- Eén krimpfactor voor alle vensters van de dia (cockpitReadoutScale): een cel
  met twee eenheidregels kreeg als enige een kleiner getal.
- Schaalcijfers in de export op volle dekking (4,05:1 → AA).
- Inline-eenheid onder 7 px niet getekend (vlek in de miniatuur).
- Echt minteken (U+2212) naast de plus.
- Documentatie-screenshot cockpit-dashboard.png opnieuw uit de renderer.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Author
Owner

Stand na de beeldkeuring in de echte renderer (twee rondes, headless harnas met EB Garamond op 2×, plus Chrome voor de export), kop 880f10045:

Eerste ronde vond acht punten, alle verholpen en in de tweede ronde met schermafdruk bevestigd: export-animatie die de cellen op elkaar zette (transform:scale() in de CSS-keyframes overschreef het transform-attribuut), rollend getal met decimalen buiten het venster, thermometerbuis door de lampjes, naald door de "0" van klim/daling, horizonregels buiten de plaat, onzichtbaar vliegtuigsymbool (2,5:1), schaalcijfers onder AA, vlekjes in de miniatuur. Tweede ronde: vier restpunten (getalmaat per cel in gestapelde modus, export-schaalcijfers op 85 % dekking, inline-eenheid onder de tekendrempel, koppelteken als minteken), verholpen en met tests vastgelegd.

make check op 880f10045: groen (volledige suite, dekkingsvloeren, golden-suite). make check-secrets en make sast: 0 bevindingen.

Buiten de scope van deze PR, gezien in de keuring: het LibreKAT-logo (donkere inkt) is op een donkere dia-achtergrond vrijwel onzichtbaar, en de logo-vrije zone laat onder het paneel ±190 px leeg over de volle breedte.

Stand na de beeldkeuring in de echte renderer (twee rondes, headless harnas met EB Garamond op 2×, plus Chrome voor de export), kop 880f10045: Eerste ronde vond acht punten, alle verholpen en in de tweede ronde met schermafdruk bevestigd: export-animatie die de cellen op elkaar zette (`transform:scale()` in de CSS-keyframes overschreef het `transform`-attribuut), rollend getal met decimalen buiten het venster, thermometerbuis door de lampjes, naald door de "0" van klim/daling, horizonregels buiten de plaat, onzichtbaar vliegtuigsymbool (2,5:1), schaalcijfers onder AA, vlekjes in de miniatuur. Tweede ronde: vier restpunten (getalmaat per cel in gestapelde modus, export-schaalcijfers op 85 % dekking, inline-eenheid onder de tekendrempel, koppelteken als minteken), verholpen en met tests vastgelegd. `make check` op 880f10045: groen (volledige suite, dekkingsvloeren, golden-suite). `make check-secrets` en `make sast`: 0 bevindingen. Buiten de scope van deze PR, gezien in de keuring: het LibreKAT-logo (donkere inkt) is op een donkere dia-achtergrond vrijwel onzichtbaar, en de logo-vrije zone laat onder het paneel ±190 px leeg over de volle breedte.
Merge origin/main in feat/cockpit-flank-layout (mermaid-kaart #1926)
All checks were successful
scans / scans (pull_request) Successful in 3m11s
static-gate / static-gate (pull_request) Successful in 7m26s
07575a3d18
Merge origin/main in feat/cockpit-flank-layout
All checks were successful
scans / scans (pull_request) Successful in 2m16s
static-gate / static-gate (pull_request) Successful in 6m58s
6d9eca1b33
brenno merged commit b49580e370 into main 2026-09-03 00:17:56 +00:00
Sign in to join this conversation.
No description provided.