Gantt-slidetype (Procesverbetering): tabel-opslag → Mermaid-render #1238

Closed
opened 2026-08-04 20:57:20 +00:00 by brenno · 1 comment
Owner

Wat

Een nieuw SlideType.gantt in de Procesverbetering-module die een projectschema als Gantt-chart rendert. Opslag is een gewone Markdown-tabel; render gebruikt de bestaande MermaidRenderService via een tabel→DSL-converter.

Design-doc: docs/design/GANTT_SLIDETYPE.md (gecommit op design/gantt-slidetype)

Waarom

Een Gantt is het enige LibrePlan-artefact dat geen bestaand slidetype dekt — duurbalken op een tijdas met afhankelijkheden, milestones en voortgang. De andere LibrePlan-views (WBS, resource-load, timesheet, kosten, RACI, critical path) dekken bestaande types (tree, chart, table, scorecard, matrix, flow).

De keuze: tabel-opslag, Mermaid-render

Drie scenario's overwogen; het hybride scenario gekozen:

  • Opslag = Markdown-tabel (leesbaar in plain Marp, bewaker-toets slaagt)
  • Render = tabel → Mermaid gantt-DSL → bestaande MermaidRenderService (DSL is afgeleid, nooit opgeslagen — net als flow's roll-up strip)
  • Geen nieuwe dependency (Mermaid is al aan boord voor slides, presenter, export)
  • Geen nieuwe Scene-layout-engine (Mermaid's gantt dekt FS-dependencies, milestones, sections, progress-status)

Scope van dit issue

  1. gantt_dsl.dart — pure-Dart tabel→Mermaid-DSL converter (~60 regels)
  2. SlideType.gantt langs de nieuw-slidetype-ketting (~16 plekken, zie design-doc §4)
  3. backedByTable: true in slideTypeMeta (inhoud leeft in Slide.tableRows)
  4. Formaat-docs in FILE_FORMAT.md, USER_GUIDE.md, SOURCE_MAP.md, API_DOCUMENTATION.md
  5. 31 vertalingen via make add-l10n
  6. Tests voor de converter (pure Dart, table in → DSL string out)

Wat expliciet niet in dit issue zit

  • LibrePlan-connector — apart follow-up issue. De connector is een specialist module (off by default) die via REST een snapshot ophaalt en slides vult. Afhankelijk van dit type, maar aparte scope en aparte security-review.
  • Deck-style-profile theming voor Mermaid — v1 gebruikt theme: 'neutral' (zoals alle Mermaid-slides). Theming-koppeling is een cross-cutting follow-up.
  • Animatie — een Gantt is statisch in v1.
  • SS/FF/SF-dependency-types — v1 is FS-only. Mermaid gantt ondersteunt alleen after (FS). Known ceiling, gedocumenteerd in design-doc §7.

Open vragen (te bevestigen in implementatie)

  1. Max tasks — voorgesteld: 30 (een slide is een samenvatting, niet een planbestand)
  2. Date parsing strictness — voorgesteld: fall back naar after of drop met quality warning
  3. Dependency-resolutie bij dubbele taaknamen — voorgesteld: suffix

Referenties

  • Design-doc: docs/design/GANTT_SLIDETYPE.md
  • Skill: nieuw-slidetype (de ketting)
  • Sibling: docs/design/PROCESS_IMPROVEMENT.md
  • Render-infra: lib/services/mermaid_render_service.dart, lib/services/mermaid_config.dart
## Wat Een nieuw `SlideType.gantt` in de Procesverbetering-module die een projectschema als Gantt-chart rendert. Opslag is een gewone Markdown-tabel; render gebruikt de bestaande `MermaidRenderService` via een tabel→DSL-converter. **Design-doc:** `docs/design/GANTT_SLIDETYPE.md` (gecommit op `design/gantt-slidetype`) ## Waarom Een Gantt is het enige LibrePlan-artefact dat geen bestaand slidetype dekt — duurbalken op een tijdas met afhankelijkheden, milestones en voortgang. De andere LibrePlan-views (WBS, resource-load, timesheet, kosten, RACI, critical path) dekken bestaande types (`tree`, `chart`, `table`, `scorecard`, `matrix`, `flow`). ## De keuze: tabel-opslag, Mermaid-render Drie scenario's overwogen; het hybride scenario gekozen: - **Opslag = Markdown-tabel** (leesbaar in plain Marp, bewaker-toets slaagt) - **Render = tabel → Mermaid gantt-DSL → bestaande MermaidRenderService** (DSL is afgeleid, nooit opgeslagen — net als `flow`'s roll-up strip) - **Geen nieuwe dependency** (Mermaid is al aan boord voor slides, presenter, export) - **Geen nieuwe Scene-layout-engine** (Mermaid's gantt dekt FS-dependencies, milestones, sections, progress-status) ## Scope van dit issue 1. `gantt_dsl.dart` — pure-Dart tabel→Mermaid-DSL converter (~60 regels) 2. `SlideType.gantt` langs de nieuw-slidetype-ketting (~16 plekken, zie design-doc §4) 3. `backedByTable: true` in `slideTypeMeta` (inhoud leeft in `Slide.tableRows`) 4. Formaat-docs in `FILE_FORMAT.md`, `USER_GUIDE.md`, `SOURCE_MAP.md`, `API_DOCUMENTATION.md` 5. 31 vertalingen via `make add-l10n` 6. Tests voor de converter (pure Dart, table in → DSL string out) ## Wat expliciet niet in dit issue zit - **LibrePlan-connector** — apart follow-up issue. De connector is een specialist module (off by default) die via REST een snapshot ophaalt en slides vult. Afhankelijk van dit type, maar aparte scope en aparte security-review. - **Deck-style-profile theming voor Mermaid** — v1 gebruikt `theme: 'neutral'` (zoals alle Mermaid-slides). Theming-koppeling is een cross-cutting follow-up. - **Animatie** — een Gantt is statisch in v1. - **SS/FF/SF-dependency-types** — v1 is FS-only. Mermaid gantt ondersteunt alleen `after` (FS). Known ceiling, gedocumenteerd in design-doc §7. ## Open vragen (te bevestigen in implementatie) 1. Max tasks — voorgesteld: 30 (een slide is een samenvatting, niet een planbestand) 2. Date parsing strictness — voorgesteld: fall back naar `after` of drop met quality warning 3. Dependency-resolutie bij dubbele taaknamen — voorgesteld: suffix ## Referenties - Design-doc: `docs/design/GANTT_SLIDETYPE.md` - Skill: `nieuw-slidetype` (de ketting) - Sibling: `docs/design/PROCESS_IMPROVEMENT.md` - Render-infra: `lib/services/mermaid_render_service.dart`, `lib/services/mermaid_config.dart`
Author
Owner

Update: raw DSL en de bredere type-vraag

Naar aanleiding van de vraag of de hybride aanpak (Markdown → DSL) voor alle Mermaid-types kan, en of raw DSL altijd ondersteund moet blijven, is het design-doc aangescherpt (commit 95110a50 op design/gantt-slidetype):

1. Raw DSL is geen tweede keus — het is de andere route

De freeMarkdown-slide met ```mermaid blokken is de gelijkwaardige route voor wie Mermaid-DSL direct schrijft. Die route bestaat al en blijft. Het Gantt-type bestaat ernaast, niet in plaats van. Geen van beide is deprecated.

2. Raw DSL als invoermodus in het Gantt-type zelf?

Open vraag (§7.4): of het Gantt-type ook een "raw DSL"-tab in zijn eigen editor moet bieden. v1: nee, table-only. De freeMarkdown-route dekt de techneut vandaag. Een dual-mode editor (tabel ↔ DSL met heen-en-weer conversie) is extra werk en riskeert dataverlies bij DSL-features die de tabel niet kan uitdrukken (SS/FF/SF, excludes weekends). Follow-up als de vraag echt leeft.

3. Welke Mermaid-types geschikt zijn voor de hybride aanpak

Niet voor allemaal. De eerlijke assessatie per type (§9):

  • Wel geschikt (natuurlijke Markdown-vorm, verliesvrije round-trip): gantt, pie, er, journey, mindmap, timeline. Dat zijn precies de types waar OciDeck al een gestructureerd slidetype voor heeft, of nu toevoegt (gantt).
  • Niet geschikt (rijke visuele structuren gaan verloren in een vlakke tabel/lijst): flowchart, sequence, state. Die blijven raw DSL in freeMarkdown — en dat is het juiste antwoord, geen compromis. Twee niet-gelijkwaardige representaties van dezelfde data is erger dan één eerlijke.

Het principe: een diagram wiens data een tabel of lijst is, hoort in een gestructureerde editor. Een diagram wiens data een graaf met vormen en randen is, hoort in DSL.

## Update: raw DSL en de bredere type-vraag Naar aanleiding van de vraag of de hybride aanpak (Markdown → DSL) voor alle Mermaid-types kan, en of raw DSL altijd ondersteund moet blijven, is het design-doc aangescherpt (commit `95110a50` op `design/gantt-slidetype`): ### 1. Raw DSL is geen tweede keus — het is de andere route De `freeMarkdown`-slide met ` ```mermaid ` blokken is de gelijkwaardige route voor wie Mermaid-DSL direct schrijft. Die route bestaat al en blijft. Het Gantt-type bestaat ernaast, niet in plaats van. Geen van beide is deprecated. ### 2. Raw DSL als invoermodus in het Gantt-type zelf? Open vraag (§7.4): of het Gantt-type ook een "raw DSL"-tab in zijn eigen editor moet bieden. **v1: nee, table-only.** De `freeMarkdown`-route dekt de techneut vandaag. Een dual-mode editor (tabel ↔ DSL met heen-en-weer conversie) is extra werk en riskeert dataverlies bij DSL-features die de tabel niet kan uitdrukken (SS/FF/SF, `excludes weekends`). Follow-up als de vraag echt leeft. ### 3. Welke Mermaid-types geschikt zijn voor de hybride aanpak Niet voor allemaal. De eerlijke assessatie per type (§9): - **Wel geschikt** (natuurlijke Markdown-vorm, verliesvrije round-trip): gantt, pie, er, journey, mindmap, timeline. Dat zijn precies de types waar OciDeck al een gestructureerd slidetype voor heeft, of nu toevoegt (gantt). - **Niet geschikt** (rijke visuele structuren gaan verloren in een vlakke tabel/lijst): flowchart, sequence, state. Die blijven raw DSL in `freeMarkdown` — en dat is het juiste antwoord, geen compromis. Twee niet-gelijkwaardige representaties van dezelfde data is erger dan één eerlijke. Het principe: een diagram wiens data een tabel of lijst is, hoort in een gestructureerde editor. Een diagram wiens data een graaf met vormen en randen is, hoort in DSL.
Sign in to join this conversation.
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set

Reference
LibreKAT/Ocideck#1238
No description provided.