fix(marp): laad het opgeslagen thema in een gewone marp deck.md (#1804) #1812

Merged
brenno merged 3 commits from fix/marp-theme-loading-1804 into main 2026-08-27 15:24:01 +00:00
Owner

Wat

Marp CLI ontdekt een stylesheet naast de deck niet automatisch. OciDeck schrijft al themes/<naam>.css naast de .md, maar een gewone marp deck.md -o out.html viel terug op het standaardthema, zodat de section.split-tweekolomslay-out (en de afbeeldingspositie) verloren ging. #1804.

Oplossing

OciDeck schrijft nu een .marprc.yml naast de .md die de gegenereerde thema-CSS via Marp's standaard themeSet-optie registreert. De gewone aanroep — uitgevoerd vanuit de projectmap — laadt het thema zonder extra vlaggen:

marp deck.md -o out.html

Het pad in de config is relatief, dus verhuizen/hernoemen van de projectmap blijft werken. Het draagbare .ocideck-pakket draagt dezelfde .marprc.yml aan zijn root mee.

Beperking (eerlijk gedocumenteerd)

Draai je Marp elders, of met --no-config-file, dan valt het terug op het standaardthema en gaat de split-lay-out verloren. Dat is de gedocumenteerde beperking, geen bug — de .marprc.yml is precies wat de gewone aanroep laat werken.

Regression proof

  • Dart-test (test/file_service_test.dart): bewaakt dat opslaan .marprc.yml schrijft met themeSet: [themes/ocideck.css] en dat het pakket het lid meedraagt. Loopt in make check (CI-static-gate).
  • Gepinde echte-Marp-controle (tool/marp-check, make check-marp, in check-full): rendert een minimaal bulletsImage split-fixture met de echte @marp-team/marp-cli@4.4.0 en stelt:
    • de ondersteunde aanroep produceert de split-lay-out in DOM/CSS (section.split, .split-text, .split-image) én een 1280×720-screenshot;
    • --no-config-file produceert de lay-out níet (de gedocumenteerde beperking);
    • verhuizen van de projectmap breekt thema-ontdekking niet;
    • paden met spaties werken;
    • offline nadat npm ci de afhankelijkheden heeft voorbereid;
    • faalt zichtbaar zodra section.split afwezig is (geverifieerd door de config te saboteren → exit 1).

Node ontbreekt → de controle slaat over met een melding (zelfde vorm als DAST zonder container-runtime); de Dart-test blijft de CI-poort.

Docs

KNOWN_LIMITATIONS (en nl), FILE_FORMAT (§1.1, §7, en nl), USER_GUIDE (en nl) vastgelegd met de geverifieerde aanroep, de beperking en datering 2026-08-27. De oude "Marp CLI-compatibiliteit is niet geverifieerd"-tekst is vervangen.

Bewaker

Deze wijziging raakt geen bestandsformaat (de .md blijft ongewijzigd), geen opslag, geen afhankelijkheid van de app (alleen een test-toolingpin in tool/), geen uitgaand verkeer en geen publieke belofte die niet in de docs staat. De .marprc.yml is een standaard Marp-configbestand met een relatief pad — geen OciDeck-specifieke ondoorzichtige data in de Markdown. Bewaker-stap expliciet overgeslagen omdat niets uit het rijtje (bestandsformaat/opslag/afhankelijkheid/uitgaand verkeer/publieke belofte) wordt geraakt.

Test plan

  • make check groen (10593 tests, 87,1% coverage)
  • make check-secrets schoon (0 leaks)
  • make sast schoon (0 findings)
  • make check-marp PASS (echte Marp CLI, split-lay-out overleeft)
  • sabotage-test: zonder .marprc.yml faalt de controle zichtbaar (exit 1)
  • CI static-gate groen op de PR

Generated with Devin

## Wat Marp CLI ontdekt een stylesheet naast de deck niet automatisch. OciDeck schrijft al `themes/<naam>.css` naast de `.md`, maar een gewone `marp deck.md -o out.html` viel terug op het standaardthema, zodat de `section.split`-tweekolomslay-out (en de afbeeldingspositie) verloren ging. #1804. ## Oplossing OciDeck schrijft nu een `.marprc.yml` naast de `.md` die de gegenereerde thema-CSS via Marp's standaard `themeSet`-optie registreert. De gewone aanroep — **uitgevoerd vanuit de projectmap** — laadt het thema zonder extra vlaggen: ```sh marp deck.md -o out.html ``` Het pad in de config is relatief, dus verhuizen/hernoemen van de projectmap blijft werken. Het draagbare `.ocideck`-pakket draagt dezelfde `.marprc.yml` aan zijn root mee. ## Beperking (eerlijk gedocumenteerd) Draai je Marp elders, of met `--no-config-file`, dan valt het terug op het standaardthema en gaat de split-lay-out verloren. Dat is de gedocumenteerde beperking, geen bug — de `.marprc.yml` is precies wat de gewone aanroep laat werken. ## Regression proof - **Dart-test** (`test/file_service_test.dart`): bewaakt dat opslaan `.marprc.yml` schrijft met `themeSet: [themes/ocideck.css]` en dat het pakket het lid meedraagt. Loopt in `make check` (CI-static-gate). - **Gepinde echte-Marp-controle** (`tool/marp-check`, `make check-marp`, in `check-full`): rendert een minimaal `bulletsImage` split-fixture met de echte `@marp-team/marp-cli@4.4.0` en stelt: - de ondersteunde aanroep produceert de split-lay-out in DOM/CSS (`section.split`, `.split-text`, `.split-image`) én een 1280×720-screenshot; - `--no-config-file` produceert de lay-out níet (de gedocumenteerde beperking); - verhuizen van de projectmap breekt thema-ontdekking niet; - paden met spaties werken; - offline nadat `npm ci` de afhankelijkheden heeft voorbereid; - faalt zichtbaar zodra `section.split` afwezig is (geverifieerd door de config te saboteren → exit 1). Node ontbreekt → de controle slaat over met een melding (zelfde vorm als DAST zonder container-runtime); de Dart-test blijft de CI-poort. ## Docs `KNOWN_LIMITATIONS` (en nl), `FILE_FORMAT` (§1.1, §7, en nl), `USER_GUIDE` (en nl) vastgelegd met de geverifieerde aanroep, de beperking en datering 2026-08-27. De oude "Marp CLI-compatibiliteit is niet geverifieerd"-tekst is vervangen. ## Bewaker Deze wijziging raakt geen bestandsformaat (de `.md` blijft ongewijzigd), geen opslag, geen afhankelijkheid van de app (alleen een test-toolingpin in `tool/`), geen uitgaand verkeer en geen publieke belofte die niet in de docs staat. De `.marprc.yml` is een standaard Marp-configbestand met een relatief pad — geen OciDeck-specifieke ondoorzichtige data in de Markdown. Bewaker-stap expliciet overgeslagen omdat niets uit het rijtje (bestandsformaat/opslag/afhankelijkheid/uitgaand verkeer/publieke belofte) wordt geraakt. ## Test plan - [x] `make check` groen (10593 tests, 87,1% coverage) - [x] `make check-secrets` schoon (0 leaks) - [x] `make sast` schoon (0 findings) - [x] `make check-marp` PASS (echte Marp CLI, split-lay-out overleeft) - [x] sabotage-test: zonder `.marprc.yml` faalt de controle zichtbaar (exit 1) - [ ] CI `static-gate` groen op de PR Generated with [Devin](https://devin.ai)
Marp CLI ontdekt een stylesheet naast de deck niet automatisch, dus een gewone
`marp deck.md` viel terug op het standaardthema en de section.split-lay-out
ging verloren. De opslag schrijft nu een `.marprc.yml` die de gegenereerde
themes/<naam>.css via Marp's themeSet registreert; het pakket draagt hetzelfde
lid aan zijn root mee. Dart-test bewaakt dat het bestand geschreven wordt en
naar de juiste CSS wijst.

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

Co-Authored-By: Devin <158243242+devin-ai-integration[bot]@users.noreply.github.com>
tool/marp-check rendert een minimaal split-fixture met de gepinde Marp CLI
(@marp-team/marp-cli 4.4.0) en stelt dat section.split overleeft in DOM/CSS en
een schermafbeelding — ook na verhuizen en op paden met spaties. De
default-aanroep (--no-config-file) documenteert de beperking: zonder het
configbestand valt Marp terug en gaat de lay-out verloren. `make check-marp`
draait het (in check-full, niet check-static, want Node nodig); node_modules is
gitignored, de pin (package.json/lock) is geversioneerd.

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

Co-Authored-By: Devin <158243242+devin-ai-integration[bot]@users.noreply.github.com>
docs(marp): geverifieerde Marp CLI-aanroep + gedocumenteerde beperking (#1804)
All checks were successful
scans / scans (pull_request) Successful in 4m0s
static-gate / static-gate (pull_request) Successful in 9m25s
e84dd27463
KNOWN_LIMITATIONS, FILE_FORMAT (§1.1, §7) en USER_GUIDE (en nl) vastleggen dat
`marp deck.md -o out.html` vanuit de projectmap het thema laadt via de
opgeslagen .marprc.yml, dat verhuizen en spaties werken, en dat draaien elders
of met --no-config-file de split-lay-out verliest — de beperking, geen bug.
Datering 2026-08-27; de oude "niet geverifieerd"-tekst is vervangen.

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

Co-Authored-By: Devin <158243242+devin-ai-integration[bot]@users.noreply.github.com>
brenno force-pushed fix/marp-theme-loading-1804 from e84dd27463
All checks were successful
scans / scans (pull_request) Successful in 4m0s
static-gate / static-gate (pull_request) Successful in 9m25s
to c8edd0fb79
All checks were successful
scans / scans (pull_request) Successful in 3m12s
static-gate / static-gate (pull_request) Successful in 6m52s
2026-08-27 15:16:09 +00:00
Compare
brenno merged commit bcde8be6ab into main 2026-08-27 15:24:01 +00:00
Sign in to join this conversation.
No description provided.