Rapport: resourcediagram — typelaag, rapportageperiode en toewijzingskolommen (#113, manuvarkey 1–3) - #138
Merged
Conversation
… manuvarkey punt 2) Optie "Groeperen op resourcetype": eerst een band per type — arbeid, ploeg, onderaannemer, materieel, materiaal, in die vaste volgorde (niet op vertaald label, zodat een uitgedeeld vel in elke taal dezelfde blokvolgorde heeft) — daarbinnen de resourcebanden zoals voorheen, de taken op diepte 2. "(geen)" blijft achteraan op diepte 0: taken zonder resource hebben geen type. Zonder de optie zijn de rijen byte-identiek. Bij "elke resource op een nieuwe pagina" krijgt een band direct onder een band geen eigen gedwongen breekpositie, zodat een typekop bij zijn eerste resource blijft in plaats van alleen op een leeg vel te staan. Instelling in reportSettings.resourceGantt (tolerante parser), vinkje in het paneel, sleutel in 14 locales, gidsen nl+en. Regressie: check-reports (volgorde, dieptes, tellingen, unieke sleutels, byte-identiek zonder optie, gelijknamigen over twee typen), check-print-report (breekposities bij een typelaag), settings-check, browserspec (typekop blijft bij eerste resource: nog steeds drie pagina's). Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_014zosxbSXvi3YSGmeN1MsQq
…, manuvarkey punt 3) Het resourcediagram krijgt de gedeelde rapportageperiode (issue #120, `ReportingPeriodField`/`resolveReportingPeriod`) als eigen optie: alleen bladtaken die het venster raken (start ≤ tot én einde ≥ van, dagniveau, dezelfde overlapregel als de tabelrapporten) doen mee, de tellingen volgen die gefilterde set en `counts.outsidePeriod` telt het weggelatene; het paneel toont dat en geeft een eigen lege-staat-tekst. Default *Hele project* = geen venster, byte-identiek aan vóór deze optie. De render kent nu `PrintOptions.timeWindow`: de tijdas loopt exact van `from` t/m `to` zonder de marge van 7/14 dagen, en omdat `Draw2D` geen clip kent wordt de geometrie geklemd op het chartgebied — balken (ook gesplitste), voortgang, speling, mijlpalen, samenvattingshaken (zonder haakje op een afgekapt uiteinde) en baseline; een balk of ruit die helemaal buiten het venster valt tekent niets, ook geen label. Zonder venster is de render byte-identiek. Relatiepijlen worden niet geklemd: het venster wordt alleen aangeboden op het resourcediagram, dat er geen tekent. Instelling via dezelfde tolerante periodeparser als de tabelrapporten, twee sleutels in 14 locales, gidsen nl+en (resourcediagram- en periodesectie). Regressie: check-reports (venster van één dag, overlapregel, outsidePeriod, leeg venster, alles-omvattend venster identiek), check-print-report (asbreedte = vensterdagen × zoom, balk geklemd op de chartrand, geen balk/label buiten het venster, tabelrij blijft, byte-identiek), settings-check (onbekende preset en omgekeerd bereik ⇒ Hele project, round-trip), browserspec (eigen bereik ⇒ één resource, tellingen incl. buiten de periode, terug naar Hele project herstelt alles). Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_014zosxbSXvi3YSGmeN1MsQq
…manuvarkey punt 1)
Per taakrij onder een resourceband levert `computeResourceGanttRows` nu de
toewijzing van die band op die taak (`assignmentByRowKey`, per `rowKey`):
eenheden per dag opgeteld over records van dezelfde resource, de curve alleen
als alle records dezelfde hebben (afwezig telt als UNIFORM), anders null.
Rijen onder "(geen)" hebben geen entry.
De render tekent dat als twee tabelkolommen direct achter de naam
(`PrintOptions.assignmentColumns` + `rowAssignments` + `curveLabels`): eenheden
rechts uitgelijnd (geheel zonder decimalen, anders tot twee), de vertaalde
curve links en afgekort met `fitText`, een streepje bij verschillende curves;
kolomkoppen via `labels.tableHeaders.unitsPerDay`/`curve`. De tabel wordt
precies de twee kolombreedtes (45 + 75) breder; `buildPrintRows` hangt de
toewijzing aan `PrintRow.assignment`. Zonder de optie byte-identiek, ook mét
meegegeven `rowAssignments`. De preview-signatuur serialiseert de Map expliciet
(anders `{}`, dus geen herrender bij een gewijzigde inzet).
Optie `showAssignmentColumns` standaard aan (dit is de informatie waarvoor het
rapport wordt uitgedeeld), tolerante parser; drie sleutels in 14 locales
(twee kolomkoppen, één optielabel); curvenamen uit `common:resource.curve.*`;
gidsen nl+en; CLAUDE.md-rapportparagraaf voor de drie nieuwe opties.
Regressie: check-reports (optelling, UNIFORM-terugval, null bij verschillende
curves, entries exact voor de taakrijen onder resourcebanden), check-print-report
(tabelbreedte, celteksten per kolom, koppen, zonder optie byte-identiek),
settings-check, browserspec (standaard aan; uitzetten rastert opnieuw).
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_014zosxbSXvi3YSGmeN1MsQq
…ode van het resourcediagram (#113) Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_014zosxbSXvi3YSGmeN1MsQq
…staat, kolombreedte (#113) Hyperkritische review op de drie punten van manuvarkey ("nee, nog niet"): 1. De Curve-kolom zei "Uniform" waar de app zelf "Contour" of "Geïmporteerde curve" zegt: de engine las alleen `assignment.curve`, terwijl de lastverdeling (`assignmentDayUnits`) en het eigenschappenpaneel drie lagen kennen. `RowAssignment.curve` is nu `RowCurve` (contour op de taak via `matchContoursToAssignments` > `curveValues` zonder OPS-vorm = 'imported' > `curve`, afwezig = UNIFORM); het paneel geeft de twee toestandslabels uit `task:properties.assignments.*` mee. 2. Met een tijdvenster kon een mijlpaalruit (en de baselineruit) op de eerste vensterdag bij lage zoom half over de tabel hangen: de zichtbaarheidstest was geen klem. Het middelpunt wordt nu binnen [tabelrand + size, chartrand − size] geklemd; de testrecorder legt gevulde paden vast en bewaakt dat niets in het chartgebied links van de tabelrand komt. 3. `emptyPeriod` wees naar de periode terwijl er wél taken in het venster stonden zonder toewijzing: nieuw `counts.inPeriod`, de melding komt alleen als er géén bladtaak meer in het venster is. 4. De default (kolommen aan) blijft — het resourcediagram is nog in geen release uitgeleverd, dus er is geen bestaand gedrag dat breekt — maar de gidsen nl+en zeggen nu expliciet dat de tabel breder en de tijdas smaller wordt, en wat *Contour*/*Geïmporteerde curve* betekent. 5. Gecomprimeerde as + venster zonder werkdag kleefde naar een datum buiten het venster: valt voor dat venster terug op de kalender-as. 6. Curve-kolom 75 → 92 px (pl/pt-labels pasten niet, gemeten op Inter). 7. De 3 px-minimumbreedte van een balk steekt niet meer over de chartrand. 8. Kleurvakken (resourcekleurmodus) worden op de ruwe tijdas verdeeld en per vak op het chartgebied geknipt, zodat een afgekapte balk de kleuren van het zichtbare stuk toont. 9. Relaties worden bij een venster nooit getekend (`showDeps && !windowed`) i.p.v. alleen per conventie. 10. Lege-staat-tekst gaat door `fitText`; gids: het getal achter een typeband telt taakrijen. Regressie: check-reports (imported/contoured/OPS-vorm/contour-per-resource, inPeriod), check-print-report (ruit binnen het chartgebied bij 4 px/dag, minimumbreedte geklemd bij 1 px/dag, tabelbreedte +137). Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_014zosxbSXvi3YSGmeN1MsQq
… curvetoestand-doc, contourkoppeling, lege-staat-wrap (#113) Hyperkritische review ronde 2 ("ja, mits"): - Curve-kolom 92 → 98 px: "Obciążony na początku"/"Zaimportowana krzywa" (pl) pasten op de echte Inter-metriek nog niet in 84 px netto. - De moduledoc claimde "dezelfde drie lagen als de lastverdeling"; dat is onwaar (`assignmentDayUnits` verdeelt met `curveValues` óók naast een `curve`, en negeert een contour zonder periodes). De doc zegt nu wat het is: de weergaveregel van het eigenschappenpaneel, zodat rapport en paneel gelijk lopen; een gedeelde toestandshelper is een vervolgstap. Gids nl+en: "Geïmporteerde curve" alleen als het geen van de acht eigen vormen is, en de tijdas kan bij lange namen met afkappen uit bijna verdwijnen. - Contourkoppeling op de volledige recordlijst per taak (ook records naar een onbekende resource), zoals `contourLookup` en het paneel — anders viel de legacy-terugval (`assignments.length === 1`) hier anders uit dan daar. - Lege staat: woord-wrap (`wrapWords`) i.p.v. één afgekapte regel — de Duitse `emptyPeriod` kapte bij 100 % al halverwege de instructie af. - Ruitklem alleen als het middelpunt zelf in de chart ligt (anders niet tekenen): een naar binnen geklemde baselineruit suggereerde een dag waarop de mijlpaal niet valt. - Minimumbreedte van een balk bij een venster: naar binnen geschoven zoals de ruit i.p.v. afgeknepen tot sub-pixel; zonder venster ongewijzigd. - Test: ruit-assertie eist `pts.length > 0` (was vacuüm vervulbaar), wrap-test op de lege staat, legacy-contour met een record naar een onbekende resource. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_014zosxbSXvi3YSGmeN1MsQq
De twee updater-specs faalden op CI (run 34869219752) op een 403 van api.github.com — de onbevoegde Releases-API is op een gedeelde runner rate-limited — en in een sandbox achter een proxy op ERR_CERT_AUTHORITY_INVALID; beide als console.error, die de harness als fout telt. De tests asserteren niets uit die vergelijking (de pure functies staan in tests/planning/check-just-updated.ts), dus de route antwoordt nu deterministisch met een lege lijst. Lokaal 2/2 groen, waar dezelfde spec eerder in deze sandbox rood stond. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_014zosxbSXvi3YSGmeN1MsQq
Nozzit
pushed a commit
that referenced
this pull request
Sep 14, 2026
…kolommen laten vallen, weekendcijfers, getalnotatie, artifacts-beleid, middernacht-doc Alle zes vervolgpunten die na PR #138 waren blijven liggen, in één keer: - Eén weergaveregel voor de curvetoestand van een toewijzing (`src/engine/contour/curveState.ts`: `assignmentCurveState`, `contouredAssignmentIds`) die het eigenschappenpaneel én het resourcediagram delen; het verschil met de verdeelregel van `assignmentDayUnits` staat daar gedocumenteerd in plaats van op twee plekken herhaald. - De toewijzingskolommen vallen automatisch weg zodra de tabel minder dan `MIN_CHART_WIDTH_PX` (240 px) tijdlijn per papierbreedte overlaat (lange taaknamen met afkappen uit); `RenderReportResult.assignmentColumnsDropped`, melding in het overzichtsblok, sleutel in 14 locales. - Een tijdvenster zonder werkdag dat op de kalender-as terugvalt nummert nu ook de weekenddagen (anders stond er geen enkel dagcijfer). - Eén getalnotatie voor alle rapporten (`src/utils/reportNumber.ts`): hoogstens twee decimalen, geen duizendtalscheiding, decimaalteken van de app-taal — tabelrapporten via `dd.num`/`dd.signed`, de eenhedenkolom via `PrintOptions.numberLocale`; zonder taal de neutrale punt (tests ongewijzigd). - Artifacts-beleid vastgelegd: `artifacts/<onderwerp>/` = klein gecommit schermbewijs bij een PR, `qa/` = lokaal (CLAUDE.md, .gitignore). - Gids nl+en: presets zonder statusdatum schuiven na middernacht een dag op; de kolommen kunnen wegvallen bij een brede naamkolom. Regressie: check-print-report (weglaten bij 800 px naamkolom op A4 liggend, niet bij de gewone; weekendcijfers 10/11 op een weekendvenster; "1,5" bij numberLocale nl), check-reports (curvetoestand-helper, contourkoppeling, getalnotatie nl/en/de/plus). Browserspecs resourcediagram, tabelrapporten, contourdialoog en rapportopties groen. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_014zosxbSXvi3YSGmeN1MsQq
5 tasks
Nozzit
added a commit
that referenced
this pull request
Sep 14, 2026
…kqmzu Rapport: restpunten uit de reviews op #138 (curvetoestand, kolommen laten vallen, weekendcijfers, getalnotatie, artifacts-beleid)
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
What and why
Refs #113. Na de merge van het resourcediagram (#132) stelde manuvarkey drie uitbreidingen voor; dit zijn ze, elk als eigen commit en eigen optie in
reportSettings.resourceGantt, bediend in het Rapport-paneel. Volgorde bewust: eerst het kleinste (2), dan wat op #134 wachtte (3), dan het grootste (1).Punt 2 — Groeperen op resourcetype (
14b01d8, optiegroupByType, default uit). Eerst een band per type in de vaste volgorde arbeid, ploeg, onderaannemer, materieel, materiaal (RESOURCE_TYPE_BAND_ORDER— niet op vertaald label gesorteerd, zodat een uitgedeeld vel in elke taal dezelfde blokvolgorde heeft), daarbinnen de resourcebanden op diepte 1, de taken op diepte 2; "(geen)" blijft achteraan op diepte 0. Bij Elke resource op een nieuwe pagina krijgt een band direct onder een band geen eigen gedwongen breekpositie, zodat een typekop bij zijn eerste resource blijft in plaats van alleen op een leeg vel. Zonder de optie byte-identiek.Punt 3 — Rapportageperiode (
27c984b, optieperiod, default Hele project). De gedeelde rapportageperiode uit #134 (ReportingPeriodField,resolveReportingPeriod;useResolvedPeriodis nu geëxporteerd) als tijdvenster: alleen bladtaken die het venster raken (start ≤ tot én einde ≥ van, dagniveau — dezelfde overlapregel als de tabelrapporten), tellingen op die gefilterde set,counts.outsidePeriod/inPeriodin het overzichtsblok en een eigen lege-staat-tekst (alleen als er géén bladtaak meer in het venster staat). De render kentPrintOptions.timeWindow: tijdas exact van van t/m tot zonder de 7/14-dagenmarge, en omdatDraw2Dgeen clip kent klemtclampXbalken (ook gesplitste; de 3 px-minimumbreedte schuift naar binnen), voortgang, speling, samenvattingshaken (zonder haakje op een afgekapt uiteinde) en baseline op het chartgebied; mijlpaal- en baselineruiten met hun middelpunt in de chart worden naar binnen geklemd, erbuiten niet getekend; een balk die er helemaal buiten valt tekent niets, ook geen label; relaties worden bij een venster nooit getekend; een venster zonder werkdag valt op de gecomprimeerde as terug op de kalender-as. Bij Hele project geen venster ⇒ byte-identiek.Punt 1 — Eenheden/dag en curve (
8fdeb52, optieshowAssignmentColumns, default aan — dit is de informatie waarvoor je het rapport uitdeelt; het resourcediagram zit nog in geen release, dus er is geen bestaand gebruikersgedrag dat hierdoor verandert — reviewer heeft dat tegen de releasetags gecontroleerd). De engine levertassignmentByRowKey: per taakrij onder een resourceband de toewijzing van díé band op die taak —unitsPerDayopgeteld over records van dezelfde resource; de curvetoestand is exact de weergaveregel van het eigenschappenpaneel (contour gekoppeld aan de toewijzing ⇒ Contour,curveValueszonder OPS-vorm ⇒ Geïmporteerde curve, anderscurve, afwezig = UNIFORM), alleen als alle records dezelfde hebben, andersnull. Let op: dat is een weergaveregel, niet de verdeelregel vanassignmentDayUnits(die verdeelt metcurveValuesóók naast eencurve); rapport en paneel lopen gelijk, een gedeelde toestandshelper is een vervolgstap. De render tekent twee kolommen direct achter de naam (COL.units45,COL.curve98 — gemeten op de ingebedde Inter voor pl/pt): eenheden rechts uitgelijnd, de vertaalde curve links en afgekort, een streepje bij verschillende curves;buildPrintRowshangt de toewijzing aanPrintRow.assignment. Zonder de optie byte-identiek, ook mét meegegevenrowAssignments; de preview-signatuur serialiseert de Map expliciet.Schermbewijs:
artifacts/resourcediagram/04-typelaag-en-toewijzingskolommen.pngen05-rapportageperiode-14-sep-tot-11-okt.png(van vóór de reviewfixes; de kolomkoppen en -breedte zijn sindsdien licht gewijzigd).Hyperkritische reviews (subagent, Opus), twee rondes. Ronde 1 "nee, nog niet", tien bevindingen, verwerkt in
9ecbe4b: Curve-kolom zei "Uniform" bij gecontoureerde of geïmporteerde curves (hoog); mijlpaalruit kon bij een venster half over de tabel hangen; misleidendeemptyPeriod; default gedocumenteerd; gecomprimeerde as zonder werkdag; kolombreedte; minimumbreedte over de rand; kleurvakken van een afgekapte balk; relaties per conventie uit; lege-staat-tekst en gids. Ronde 2 "ja, mits", verwerkt in8b6bbc7: kolom 98 px (pl paste nog niet), de onware claim "dezelfde drie lagen als de lastverdeling" gecorrigeerd in doc, gids en hier, contourkoppeling op de volledige recordlijst (legacy-terugval anders dan het paneel), lege staat met woord-wrap i.p.v. ellipsis, ruitklem alleen bij een middelpunt in de chart, minimumbreedte verschoven i.p.v. afgeknepen, en een vacuüm vervulbare testassertie dichtgezet. De reviewer bewees de byte-identiteit zonder opties met een eigen probe tegen eenbb47188-worktree (lege diff). Bewust gelaten (pre-existing): weekend-dagcijfers op de kalender-as, decimaalteken van de eenheden (punt, zoalsnum()), hetartifacts/-beleid.How it was verified
npm run verifygreen — lokaal, alle onderdelen los op de branch vóór de reviewfixes: typecheck, lint, verify:docs (34 × 14), verify:i18n, cycles, store-/gantt-boundaries, examples, de volledige planningssuite (188 batterijen + tijdzone-matrix, exit 0), library, mcp, dev-server; de volledige browsersuite 145/146 (de ene:just-updated-dialog.spec.tsopERR_CERT_AUTHORITY_INVALIDvan de sandbox-proxy-CA, code die dit diff niet raakt en op CI groen). Reviewer ronde 2 draaide de volledige planningssuite (560/560) nogmaals op9ecbe4b. Na elke reviewronde opnieuw: typecheck, lint, cycles, docs, de drie rapportbatterijen (252 rapportchecks, print-report, settings) en de browserspecsresource-gantt-report,report-footer,report-preview-performance.tests/planning/check-reports.ts,check-print-report.ts(incl. ruit binnen het chartgebied bij 4 px/dag met een recorder die gevulde paden vastlegt, minimumbreedte bij 1 px/dag, gewrapte lege staat, tabelbreedte +143),check-report-resource-gantt-setting.tsentests/browser/resource-gantt-report.spec.ts.Does this touch
ops-reportSettings.t(...):resourceGantt.groupByType,emptyPeriod,outsidePeriod,showAssignmentColumnsentableHeaders.unitsPerDay/curvein alle 14report.json-locales; curvenamen uit het bestaandecommon:resource.curve.*entask:properties.assignments.{contoured,importedCurve}.@tauri-apps/*— n.v.t.Documentation
public/docs/{nl,en}/gids-rapporten-printen.md: resourcediagram-sectie (drie opties, typebandtelling, Contour/Geïmporteerde curve, bredere tabel) en de periodesectie. De twaalf vertaalde gidsen volgen de maandelijkse vertaalronde (verify:docseist kop-/linkpariteit, die klopt).CLAUDE.md: rapportparagraaf voor de drie opties.docs/CHANGELOG.mdbewust niet (alleen bij een release).🤖 Generated with Claude Code
https://claude.ai/code/session_014zosxbSXvi3YSGmeN1MsQq