feat(import): OpenKAT-rapportages importeren — het invoerpunt (#767) #773

Merged
brenno merged 2 commits from feat/openkat-invoerpunt-767 into main 2026-07-23 18:20:23 +00:00
Owner

Closes #767.

De geparkeerde servicelaag (wip/openkat-services-672) krijgt zijn aanroeppunt: … → OpenKAT-rapportages importeren… kiest een map JSON-exports en bouwt er één managementoverzicht van; dezelfde actie op een geopend OpenKAT-deck werkt het bíj.

Wat het aansluiten aan het geparkeerde werk toevoegde:

  • Invoerpoort: bytegrens per rapportbestand vóór het lezen (eerlijk manifest: 'error: too large'), symlinks worden niet gevolgd, en schrijfnamen gaan door een safe-filter — de map komt van buiten.
  • Atomische schrijfwegen en een dode bare-catch eruit (Uri.tryParse gooit niet).
  • Platform-splitsing (io/web-romp, patroon draft_store_factory): dart:io reist de webbundel niet in; het menu-item bestaat op web niet.

De bewaker verwierp de eerste versie op drie punten, alle verwerkt mét pin-tests:

  1. een gedupliceerde gegenereerde dia (markering reist mee met Slide.duplicate) verdween stil bij herimport terwijl de melding het tegendeel beloofde → per markering telt alleen de éérste dia als gegenereerd; kopieën zijn gebruikerswerk en blijven;
  2. handmatige dia's verhuisden naar het eind → de herimport vervangt nu op zijn plek, de opbouw van de presentatie blijft heel;
  3. de docs beloofden data die de hoofdroute niet schreef én de aggregator kapte de data al af vóór de weergavelimiet → de aggregator levert nu álles en de dia's begrenzen via #672-weergavelimieten (met twee meegenomen wip-fouten: 'top op kolom #' keerde de lijst om, 'bottom op een tekstkolom' sorteerde op niets — beide naar bronvolgorde van de al gesorteerde aggregator); de docs zeggen wat waar is.

9 tests over service en actie; 8 strings × 31 talen; SOURCE_MAP/USER_GUIDE/CHANGELOG bij; projectiegrens-register kent het nieuwe schrijfoppervlak (bron-getrouw, mét reden).

Poort: make check groen, check-secrets en sast schoon.

🤖 Generated with Claude Code

Closes #767. De geparkeerde servicelaag (wip/openkat-services-672) krijgt zijn aanroeppunt: … → OpenKAT-rapportages importeren… kiest een map JSON-exports en bouwt er één managementoverzicht van; dezelfde actie op een geopend OpenKAT-deck werkt het bíj. Wat het aansluiten aan het geparkeerde werk toevoegde: - **Invoerpoort**: bytegrens per rapportbestand vóór het lezen (eerlijk manifest: 'error: too large'), symlinks worden niet gevolgd, en schrijfnamen gaan door een safe-filter — de map komt van buiten. - **Atomische schrijfwegen** en een dode bare-catch eruit (Uri.tryParse gooit niet). - **Platform-splitsing** (io/web-romp, patroon draft_store_factory): dart:io reist de webbundel niet in; het menu-item bestaat op web niet. De **bewaker verwierp de eerste versie** op drie punten, alle verwerkt mét pin-tests: 1. een gedupliceerde gegenereerde dia (markering reist mee met Slide.duplicate) verdween stil bij herimport terwijl de melding het tegendeel beloofde → per markering telt alleen de éérste dia als gegenereerd; kopieën zijn gebruikerswerk en blijven; 2. handmatige dia's verhuisden naar het eind → de herimport vervangt nu op zijn plek, de opbouw van de presentatie blijft heel; 3. de docs beloofden data die de hoofdroute niet schreef én de aggregator kapte de data al af vóór de weergavelimiet → de aggregator levert nu álles en de dia's begrenzen via #672-weergavelimieten (met twee meegenomen wip-fouten: 'top op kolom #' keerde de lijst om, 'bottom op een tekstkolom' sorteerde op niets — beide naar bronvolgorde van de al gesorteerde aggregator); de docs zeggen wat waar is. 9 tests over service en actie; 8 strings × 31 talen; SOURCE_MAP/USER_GUIDE/CHANGELOG bij; projectiegrens-register kent het nieuwe schrijfoppervlak (bron-getrouw, mét reden). Poort: make check groen, check-secrets en sast schoon. 🤖 Generated with [Claude Code](https://claude.com/claude-code)
Adoptie van gestrand werk uit de hoofdwerkkopie (stond daar sinds 23-07
14:22 niet-gecommit en ongeclaimd). Zes services plus modellen en een
groene testsuite (scanner, normalisatie, aggregatie, deckgeneratie,
import), maar er is nog geen enkel aanroeppunt in de app — landen op
main zou dode code zijn. Deze tak bewaart het werk tot de invoerkant
er is; zie het vervolgissue.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
feat(import): OpenKAT-rapportages importeren — het invoerpunt (#767)
All checks were successful
ci / gate (pull_request) Successful in 37m9s
9a76a181f4
De geparkeerde servicelaag (wip/openkat-services-672) krijgt zijn
aanroeppunt: een menu-actie met mapkiezer die een map JSON-exports tot
één managementoverzicht bouwt, en hetzelfde pad dat een geopend
OpenKAT-deck bijwerkt met behoud van handmatige dia's (de
ocideck_openkat_view-markering is de scheidslijn).

Wat er bij het aansluiten bij moest:
- de invoerpoort: een bytegrens per rapportbestand vóór het lezen, met
  een eerlijk manifest ('error: too large') — de map komt van buiten;
- atomische schrijfwegen voor manifest en organisatiebestanden, en een
  dode bare-catch eruit (Uri.tryParse gooit niet);
- platform-gesplitste actie (io/web-romp, patroon draft_store_factory)
  zodat dart:io de webbundel niet in reist; het menu-item bestaat op web
  niet — weglaten, niet grijs;
- de melding telt geladen én overgeslagen uit het manifest: een import
  die stil half slaagt is erger dan een die faalt.

Vier tests (nieuw deck, lege map, herimport-in-plaats, de bytegrens);
8 strings × 31 talen; docs bij.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
brenno merged commit edc23bd688 into main 2026-07-23 18:20:23 +00:00
Sign in to join this conversation.
No description provided.