Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
193 commits
Select commit Hold shift + click to select a range
d5f5e73
docs(plan): etappe 2 — XER lezen, getrouw aan P6 op vier assen (conce…
Nozzit Aug 20, 2026
deff3a7
docs(plan): XER-etappeplan herwerkt na hyperkritische review — granul…
Nozzit Aug 20, 2026
147e70f
docs(plan): eigenaarsbesluiten X-O1 t/m X-O4 verwerkt — volledige mul…
Nozzit Aug 20, 2026
56b8d7a
docs(plan): her-check-correctieronde — whitelist gesloten, dedup eerl…
Nozzit Aug 20, 2026
ed6290c
docs(plan): X-O5 besloten conform voorstel, met eigenaars-documentati…
Nozzit Aug 20, 2026
076f67e
docs(plan): delta-check-redactieronde — derde bak (32 kolommen), PROJ…
Nozzit Aug 20, 2026
5f4ee35
feat(xer): X0 — typen, veldlijsten-poort, fidelity-baselinevorm (sonnet)
Nozzit Aug 20, 2026
327d065
merge(xer): X0 typen en meetlatskelet na tier-1-critreview
Nozzit Aug 24, 2026
9c5d617
test(xer): bouw onafhankelijke fidelitymeetlat
Nozzit Aug 24, 2026
a6f1102
test(xer): sluit X1-fidelitymeetlat na critreview
Nozzit Aug 24, 2026
3ea6f12
test(xer): dicht X1-herreviewranden
Nozzit Aug 24, 2026
9f7d16c
merge(xer): X1 onafhankelijke fidelitymeetlat
Nozzit Aug 24, 2026
e18c912
feat: voeg zelfstandige XER-formaatlaag toe
Nozzit Aug 24, 2026
a797f3d
fix: verhard de XER-formaatlaag na review
Nozzit Aug 24, 2026
ab24476
fix: sluit resterende XER-rereviewgrenzen
Nozzit Aug 24, 2026
ba3c58b
fix: sluit laatste XER-grammaticagrenzen
Nozzit Aug 24, 2026
3f652be
merge(xer): X2 robuuste tabel- en encodinglaag
Nozzit Aug 24, 2026
df2676b
Implementeer XER-kalenderdata en uurmodus
Nozzit Aug 24, 2026
bd05f12
Herstel robuuste XER-kalenderdecodering
Nozzit Aug 24, 2026
e4c498e
Versterk XER-kalenderherstel en basegraaf
Nozzit Aug 25, 2026
a8fffe4
Maak XER-basekoppelingen serialiseerbaar
Nozzit Aug 25, 2026
59dd889
merge(xer): X3 kalenderdata en uurmodus
Nozzit Aug 25, 2026
ef7368c
Voeg XER-project- en taakimport toe
Nozzit Aug 25, 2026
91820a9
fix: verwerk reviewbevindingen XER-projectmapping
Nozzit Aug 25, 2026
8a7c75c
fix: behoud isSummary in publieke taakpaden
Nozzit Aug 25, 2026
44c056e
merge(xer): X4a project- en taakmapping
Nozzit Aug 25, 2026
035be36
Voeg XER-meerproject- en baselinelogica toe
Nozzit Aug 25, 2026
6446fee
Bedraad XER-meerprojectimport
Nozzit Aug 25, 2026
2006919
Voeg XER SCHEDOPTIONS-kern toe
Nozzit Aug 25, 2026
4c43e40
Herstel X4b-meerprojectwiring na review
Nozzit Aug 25, 2026
1024023
merge(xer): X4b meerprojectimport en baselines
Nozzit Aug 25, 2026
c9e9399
fix: herstel XER-planningsopties na review
Nozzit Aug 25, 2026
3b80f41
Merge commit '1024023e0daa59bc6e7265fcbc65c9c073a5e429' into codex/xe…
Nozzit Aug 25, 2026
dbc9bdb
Bedraad XER-planningsopties per project
Nozzit Aug 25, 2026
a36c0a9
fix(xer): sluit X5 SCHEDOPTIONS-indexering en bronarchief
Nozzit Aug 25, 2026
b1f2d66
merge(xer): X5 P6-planningsinstellingen
Nozzit Aug 25, 2026
95fa4fb
Bedraad XER-resources en toewijzingen
Nozzit Aug 25, 2026
5079988
Fix XER-resourcecatalogus reviewpunten
Nozzit Aug 25, 2026
e55ead6
Herstel resterende X6-reviewpunten
Nozzit Aug 25, 2026
0453cf5
merge(xer): X6 resources en toewijzingen
Nozzit Aug 25, 2026
fbd181e
Maak planning typecheck package-manager-onafhankelijk
Nozzit Aug 25, 2026
d978b2f
merge(test): package-manager-onafhankelijke planningtypecheck
Nozzit Aug 25, 2026
f6dd010
fix(mpp): breek stilstaande maandcursor direct af
Nozzit Aug 26, 2026
3a0da2c
feat(xer): bedraad metadata-catalogus
Nozzit Aug 26, 2026
e36c5b0
merge(mpp): stabiliseer maandrecurrence-performance
Nozzit Aug 26, 2026
ab5e398
fix(xer): herstel snapshot en performancepoort
Nozzit Aug 26, 2026
7a3642c
merge(mpp): integreer stabiele maandrecurrence
Nozzit Aug 26, 2026
8aeb3fe
fix(xer): indexeer metadata per project
Nozzit Aug 26, 2026
384074f
Voeg P6 XER voortgang en suspend-resume toe
Nozzit Aug 26, 2026
9aab3ea
Pin XER voortgangscorpus op P6-brondata
Nozzit Aug 26, 2026
a7f7231
fix(xer): behoud TASKNOTE-metadata
Nozzit Aug 26, 2026
0a8f19f
Maak XER-projectindex lineair
Nozzit Aug 26, 2026
66017ec
merge(xer): X8 codes vrije velden en notities
Nozzit Aug 26, 2026
eb9bad2
Repareer X7-reviewbevindingen
Nozzit Aug 26, 2026
0f54053
Verstevig X7-voortgang en P6-datuminvarianten
Nozzit Aug 26, 2026
1c60b9e
fix: verschuif P6 Expected Finish met project
Nozzit Aug 26, 2026
80d58e0
fix: behoud X7-datumprecisie per bronveld
Nozzit Aug 26, 2026
0872a06
fix: begrens X7 Expected Finish op werkband
Nozzit Aug 26, 2026
3b85fcb
Integreer X7-actuals en X8-metadata voor XER-import
Nozzit Aug 26, 2026
d69e765
fix(ui): maak documenttabs toegankelijk
Nozzit Aug 26, 2026
3269548
Bewaar XER-bronarchief verliesvrij
Nozzit Aug 26, 2026
cb7f85d
fix(x11): maak documenttabs semantisch en focusvast
Nozzit Aug 27, 2026
0e63155
fix(x11): houd sluitfocus binnen projectoverzicht
Nozzit Aug 27, 2026
fc238a5
Herstel X9 bronarchiefcontract na review
Nozzit Aug 27, 2026
9441004
fix: maak documenttabs en sluiten racevrij
Nozzit Aug 27, 2026
6275f06
fix: canonicaliseer XER-archiefmetadata volledig
Nozzit Aug 27, 2026
28ffef2
Integreer X11 documenttabs en racevrije opslag
Nozzit Aug 27, 2026
a0e92f3
fix(xer): valideer archiefrelaties en UTF-8 strikt
Nozzit Aug 27, 2026
666b1d5
fix(xer): bind X9 archive views to canonical source facts
Nozzit Aug 27, 2026
36e0976
fix(xer): sluit X9 bronarchief-relaties
Nozzit Aug 27, 2026
f73195f
test(xer): borg assignment-skipdiagnostiek
Nozzit Aug 27, 2026
5f7c5b1
Integreer X9 bronarchief en verliesvrije XER-opslag
Nozzit Aug 27, 2026
55ac8b0
feat(xer): meld importfeiten en documenteer XER
Nozzit Aug 27, 2026
9432308
Maak XER-bronarchief compact en zelfstandig
Nozzit Aug 27, 2026
f2544fb
Maak crashherstel incrementeel en atomair
Nozzit Aug 28, 2026
23953b0
Fix X9 koude IFC-reconstructie en reviewpoorten
Nozzit Aug 28, 2026
1259787
feat(xer): X12-productfidelity en P6-semantiek afschermen
Nozzit Aug 28, 2026
97c2742
fix(xer): sluit P6-provenance af voor extensie-invoer
Nozzit Aug 28, 2026
52fdf0e
fix(xer): gebruik koude reconstructie voor X12-roundtrips
Nozzit Aug 28, 2026
5b2ecd5
fix(xer): behoud completed statusdatumsemantiek
Nozzit Aug 28, 2026
dabbe6d
XER completed display/netwerk-scheiding herstellen
Nozzit Aug 28, 2026
37c4b21
Voeg taakniveau replayharnas voor XER toe
Nozzit Aug 31, 2026
9a2797a
tests: maak XER task-replay lifecyclevast
Nozzit Aug 31, 2026
168f042
Voeg XER-planned-floor-trace toe
Nozzit Aug 31, 2026
f53dcc6
Herstel taakvaste XER-traceprojectie
Nozzit Aug 31, 2026
7ca900d
Voeg XER backward float trace toe
Nozzit Aug 31, 2026
23cf072
Fix XER-trace bij verliezende completed-window
Nozzit Aug 31, 2026
1d7ddd0
Voeg XER-diagnose voor completed guards toe
Nozzit Aug 31, 2026
04f423c
Maak completed-guard missingDataDate trace sluitend
Nozzit Aug 31, 2026
dcec280
fix(xer): laat geldige completed suspend-resume-window toe
Nozzit Aug 31, 2026
5bc1f4d
Sta bewezen CP_Phys completed-window toe
Nozzit Aug 31, 2026
5ba6b63
Herstel CP_Phys-grens in XER-voltooidvenster
Nozzit Sep 1, 2026
860bab7
Herstel actual-finish voor voltooide XER-LOE's
Nozzit Sep 1, 2026
fdb841b
Voeg veilige XER data_date-fallback toe
Nozzit Sep 1, 2026
ee7fa2b
Herstel XER data_date-fallback na review
Nozzit Sep 1, 2026
12f1c05
Voeg XER data_date-LOE-regressiebewijs toe
Nozzit Sep 1, 2026
a543b26
Herstel smalle open XER-LOE-span
Nozzit Sep 1, 2026
ea45325
Begrens XER-LOE-duurmeting na bronpoort
Nozzit Sep 1, 2026
1cb772e
Borg dagmodus voor open XER-LOE
Nozzit Sep 1, 2026
ceaf3f0
Herstel verouderde XER-corpusverwachtingen
Nozzit Sep 1, 2026
f53de7d
Veranker XER-fidelity op bronidentiteit
Nozzit Sep 1, 2026
1572a9e
test: bewaak corpusloze XER-fidelitycontracten
Nozzit Sep 1, 2026
3486cf8
test: valideer eigen bronvalidator
Nozzit Sep 1, 2026
16a28b6
Bewaak template-expressies in X12-sourcegate
Nozzit Sep 1, 2026
af51318
Werk browserslist-audit bij
Nozzit Sep 1, 2026
fd9885b
Maak XER-exportverlies per formaat expliciet
Nozzit Sep 1, 2026
d85c061
Herstel datagedreven XER-exportverlies
Nozzit Sep 1, 2026
00e2561
Herstel XER-verliesdetectie en exportmelding
Nozzit Sep 1, 2026
f366d2e
test(browser): voeg fase-1 XER X11-harnas toe
Nozzit Sep 2, 2026
2558065
test(browser): versterk XER X11-bewijs
Nozzit Sep 2, 2026
98864c2
test(browser): maak XER store-inspectie read-only
Nozzit Sep 2, 2026
2abf3a6
test(browser): bind XER evidence aan live Git-state
Nozzit Sep 2, 2026
378a5c3
test(browser): pin Git-eindidentiteit van XER-bewijs
Nozzit Sep 2, 2026
3c7cce5
docs: beschrijf lokale X11-browserproef
Nozzit Sep 2, 2026
b55489d
test(browser): bewijs XER-multidocument en Help
Nozzit Sep 2, 2026
67f6a7e
test(browser): sluit XER-bewijsprivacy af
Nozzit Sep 2, 2026
913e27b
test(browser): onderscheid fasebasis en commitparent
Nozzit Sep 2, 2026
34cba97
Integreer XER-export-loss-fixes
Nozzit Sep 2, 2026
9f09135
Integreer XER-bronretentiepoort
Nozzit Sep 2, 2026
487e8e9
Integreer X11 fase-2B-browserbewijs
Nozzit Sep 2, 2026
d6fac50
Integreer gids voor XER-exportmeldingen
Nozzit Sep 2, 2026
a669108
Merge main (f16bfff7) in de XER/Primavera-importetappe
Nozzit Sep 4, 2026
0ba05e3
Merge origin/main (92a656fb, contour-engine) in de XER/Primavera-impo…
Nozzit Sep 5, 2026
8f09520
docs(xer): eigenaarsbesluiten X-O6–X-O8, vierde whitelistbak en taakt…
Nozzit Sep 4, 2026
87dab10
test: pin X12 productfidelity v2 karakterisering
Nozzit Sep 2, 2026
5c3ab04
Verhard X12-v2-productmeetlat
Nozzit Sep 2, 2026
396d5f7
test: pin 52 X12-mutanten afzonderlijk
Nozzit Sep 2, 2026
8b87c7d
test(xer): leg SCHEDOPTIONS-provenance fail-closed vast
Nozzit Sep 2, 2026
d1c8e25
feat(xer): bak 4 lezen — zes P6-rekenuitvoerkolommen als apart, niet-…
Nozzit Sep 5, 2026
8947e7e
fix(xer): resourcecurves via de contour-engine, geen eigen best-fit meer
Nozzit Sep 5, 2026
8c1c415
fix(xer): P6-export claimt geen LATE_PEAK-verlies meer
Nozzit Sep 5, 2026
a5b158e
feat(p6xml): lees <DurationType> naar Task.p6DurationType
Nozzit Sep 5, 2026
5ad6004
docs(todo): registreer XER-opgeslagen-werk-beperking onder Contour-en…
Nozzit Sep 5, 2026
50cb5b5
fix(xer): registreer check-xer-recorded-times.ts in run.sh
Nozzit Sep 5, 2026
92e98b8
test(kalender): spiegelpoort add/subtract + XER-projectie expliciet b…
Nozzit Sep 5, 2026
64aad29
feat(xer): X12-mutatiebewijs positieve helft — recordedTimes beweegt,…
Nozzit Sep 5, 2026
5d7be72
feat(xer): bron-orakel als derde laagkeuze + gedeelde applyRecordedTi…
Nozzit Sep 5, 2026
dd8782d
feat(xer): late zijde van voltooide activiteiten volgt P6 (statusdatu…
Nozzit Sep 5, 2026
9a25398
Voeg read-only XER-bronroute voor extensies toe
Nozzit Sep 2, 2026
8f1b57e
fix(extensies): read-only XER-bronroute achter aparte permissie 'impo…
Nozzit Sep 5, 2026
f391450
fix(extensies): canoniseer XER-catalogus-offset tegen total i.p.v. op…
Nozzit Sep 5, 2026
791876b
docs(extensies): documenteer de read-only XER-bronroute in docs/exten…
Nozzit Sep 5, 2026
6a384d0
fix(extensies): validation.ts leest permissies uit permissions.ts, ni…
Nozzit Sep 5, 2026
bb06b3b
docs(wiki): breng Extensions-Authoring.md in lijn met de importSource…
Nozzit Sep 5, 2026
aab1c4e
fix(extensies): fail-closed documentdrift bij XER-catalogus-paginering
Nozzit Sep 5, 2026
e7824f6
test(renderer): mijlpaal-met-duur-fixture dag-onafhankelijk (weekend-…
Nozzit Sep 5, 2026
34031a4
test(xer): herpin X12-v2-productbaseline op p6CompletedLateFromRemain…
Nozzit Sep 5, 2026
f6db6f7
test(xer): herpin corpusloze X12-eindpoort (laag C) op dezelfde late-…
Nozzit Sep 5, 2026
91e8c96
feat(xer): datums zoals opgeslagen standaard aan bij restverschillen …
Nozzit Sep 5, 2026
1868f61
feat(xer): markering "datums zoals opgeslagen" in tabel en eigenschap…
Nozzit Sep 5, 2026
c282458
docs(xer): "datums zoals Primavera ze opsloeg" in de XER-gids en de #…
Nozzit Sep 5, 2026
e663d2f
feat(xer): recordedTimes overleven IFC-opslaan/heropenen en crashhers…
Nozzit Sep 5, 2026
141bc76
MCP: inspecteer retained XER-provenance
Nozzit Sep 2, 2026
9c88342
fix(mcp): XER-provenance niet batchable, vrije bronrijen achter opt-in
Nozzit Sep 5, 2026
095bc5b
test(mcp): pin dat een schema-ongeldige batchstap isDirty niet aanraakt
Nozzit Sep 5, 2026
da596a7
docs(claude): tooltalling bijwerken naar 40 planner_*-tools
Nozzit Sep 5, 2026
6652a10
fix(mcp): XER-provenance-vrijetekstgate op eigenschap i.p.v. drie paden
Nozzit Sep 5, 2026
262a59f
fix(mcp): deny-by-default vrije tekst, summary door de poort, N4/N5-f…
Nozzit Sep 5, 2026
d86576f
fix(mcp): sleutels in generieke objecttak afkappen, summary-afwezig-t…
Nozzit Sep 5, 2026
0b8dbeb
fix(xer): kalenderblokken over weekends + penaltyprojectie ontdubbeld…
Nozzit Sep 5, 2026
f33dbec
fix(xer): klemherstel per record + P6-penaltyprojectie eruit (7b herw…
Nozzit Sep 5, 2026
90f5e32
fix(xer): klemherstel-restlek gedicht + dossier 7b-4 en X-O7-uitzonde…
Nozzit Sep 5, 2026
e191575
docs(xer): klemherstel-poort eerlijk begrensd + randtelling ondubbelz…
Nozzit Sep 5, 2026
f44e032
feat(xer): heropen-beleid — alleen een verse XER-import zet "datums z…
Nozzit Sep 5, 2026
a237362
fix(i18n): meldingstekst "datums zoals opgeslagen" is bronafhankelijk…
Nozzit Sep 5, 2026
3a9caee
fix(xer): SS/SF-conversie, één gedeelde poort en retained-logic-klem …
Nozzit Sep 5, 2026
f99f295
test(xer): motorrun van de 13 P6-23.12-casussen, en de task-replay-co…
Nozzit Sep 5, 2026
8e3509f
docs+test(xer): de 215 verslechterde cellen benoemd, v1-harness ontbl…
Nozzit Sep 5, 2026
4277c5f
fix(tabel): "Niet vastgelegd" alleen in de modus — aanbodstand verbor…
Nozzit Sep 5, 2026
bd1a7ab
fix(xer): nulrestduur-kloon laat geen eindmijlpaalgrens ontstaan, en …
Nozzit Sep 5, 2026
635b50f
fix(recovery): modusvlag "datums zoals opgeslagen" als manifestmetada…
Nozzit Sep 5, 2026
c0108a2
fix(xer): openingsmelding zegt "niet herberekend" alleen wanneer de m…
Nozzit Sep 5, 2026
77fc068
docs(xer): gidsen bijtrekken op het heropen-beleid en de aanbodstand
Nozzit Sep 5, 2026
79a06cf
fix(xer): geen verzonnen speling/late datum via CSV-export en de MCP-…
Nozzit Sep 5, 2026
132de42
chore(xer): P3-opruiming uit de critreview laag 3 (bevindingen 7–11)
Nozzit Sep 5, 2026
cd0381b
fix(xer): v1-cel-regressiebaseline hersteld naast eigen v2-bestandsnaam
Nozzit Sep 5, 2026
6f6013e
fix(tabel): badge in het eigenschappenpaneel zegt hetzelfde als de kolom
Nozzit Sep 5, 2026
1206e01
docs(xer): overdrachtsstand 2026-09-07 (§10) — corpusherkomst, X12/X1…
Nozzit Sep 7, 2026
dd8331a
fix(xer): laag 3 her-check — "niet vastgelegd" in de echte tabel, kle…
claude Sep 7, 2026
6390179
fix(xer): 7a her-review — brongetrouwe P6-casussen, procentlag op SS/…
claude Sep 7, 2026
0a392fb
merge(xer): laag 1 klasse (i) — claude/xer-7a mét her-reviewfixes in …
claude Sep 7, 2026
806732a
merge(xer): laag 3 "Datums zoals opgeslagen" — claude/xer-6 mét her-c…
claude Sep 7, 2026
365ff27
merge: origin/main (t/m PR #107) in de XER-etappebranch
claude Sep 7, 2026
c6f4ac2
test(xer): één herpin ná 7a+7b, laag 3 en main — v2-baseline, in-bron…
claude Sep 7, 2026
213d6f5
fix(xer): laag 3 her-check ronde 2 — vastgelegde samenvattingen blijv…
claude Sep 7, 2026
15e76f2
docs(xer): plan §5/§9 en TODO — bewijsstatus klasse (i), dossiers 7b-…
claude Sep 7, 2026
1339d9b
fix(xer): 7a her-check ronde 2 — plan §5 brongetrouw, transcriptie-di…
claude Sep 7, 2026
c362953
docs(xer): §10 overdrachtsstand herzien na de integratie van 7a, laag…
claude Sep 7, 2026
fd271ac
merge: origin/main (PR #108, tabblad Statistieken) in de XER-etappebr…
claude Sep 7, 2026
f94122d
docs(xer): §10.c/§10.e — X11-blokkade (niet-gepushte fase-2A-basis) e…
claude Sep 7, 2026
7839969
fix(xer): eindreview verwerkt — bak-2-sluiproutegrep, OPS_SchedulingO…
claude Sep 7, 2026
2b8cd8f
docs(xer): eigenaarsbesluiten 2026-09-09 — heropen-beleid optie B, 'd…
claude Sep 9, 2026
17d12f7
docs(xer): verduidelijking eigenaar — alleen de meetlat-etappe naar d…
claude Sep 9, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
Original file line number Diff line number Diff line change
@@ -0,0 +1,130 @@
# X6 — resources en toewijzingen

## Afbakening

Deze wijziging bedraadt uitsluitend de actuele X6-kern in de XER-leesroute. RSRC, RSRCRATE,
ROLERATE, RSRCCURVDATA en TASKRSRC worden één keer uit de geparste tabelset gelezen. X4b-
meerdocumentselectie en baseline-uitsluiting blijven ongewijzigd; X5 SCHEDOPTIONS blijft
ongewijzigd. Er is geen X8-wiring en er is geen X9-IFC-, recovery- of exportserialisatieclaim.
De retained XER-metadata is uitsluitend in-memory bronbewijs voor een latere X9-overdracht.

## Gewijzigde bestanden

- `src/services/xer/xerResourceTypes.ts`: retained bronvormen, fouten en read-context.
- `src/services/xer/xerResourceCurves.ts`: 21 rauwe curvepunten en niet-destructieve best-fit.
- `src/services/xer/xerResourceAssignments.ts`: lineaire TASKRSRC-partitionering en projectview.
- `src/services/xer/xerResources.ts`: bestandsbrede resource-/rol-/ratecatalogus en mutable
projectmaterialisatie.
- `src/services/xer/xerReader.ts`: catalogus/index éénmaal maken en per X4b-project projecteren.
- `src/services/xer/xerTables.ts`: rows en cells na parsing runtime-bevriezen.
- `src/services/xer/xerMultiProject.ts`: catalogus/raw rows referentie-identiek herstellen na
de bestaande mutable projectclone.
- `src/services/importTypes.ts`: optionele retained X6-metadata onder `xer`.
- `tests/planning/check-xer-resources.ts`: X6-contract voor calendar/rates/curves,
task.resourceIds, X4b-projectfiltering, baselineretentie, catalogusalias en clone-isolatie.
- `tests/planning/check-xer-resource-corpus.ts`: onafhankelijke bytescan met anonieme hashes,
twee publieke corpuspins en parser-/kernperformance/heap-poorten.
- `tests/planning/run.sh`: beide X6-checks éénmaal buiten de tijdzonematrix; de corpuscheck met
`--expose-gc`.
- `tests/planning/check-xer-schedule-options.ts`, `src/utils/wbs.ts` en
`src/state/slices/librarySlice.ts`: type- en instrumentatieaanpassingen die nodig waren nu
parserrows bevroren zijn; geen nieuwe X5- of library-semantiek.

## Invarianten en mutatiebewijs

- Eén `parseXerTables()` voedt één immutable catalogus; de catalogus deelt de ruwe `XerRow`
referenties met iedere projectview.
- TASKRSRC wordt éénmaal naar `proj_id` gepartitioneerd. Een project materialiseert alleen zijn
rijen; ongescope en baseline-rijen blijven uitsluitend in de catalogus voor X9.
- Per project worden resources gekloond en assignments nieuw geprojecteerd. De X4b-test muteert
P1-resource en -assignment en bewijst dat P2 ongewijzigd blijft, terwijl de catalogus gedeeld
en bevroren blijft.
- Arbeidsfractie blijft `1 = 100%`; materiaal per uur wordt met de resourcekalender naar per dag
omgerekend. De tijdelijke productiemutatie `rawRate * 100` maakte de verse X6-bundel rood met
exitcode 1: `0,5 -> 50` en de onafhankelijke P2-waarde `2 -> 200`. De regel is daarna met
`apply_patch` exact hersteld; de verse contracttest is weer groen.

## Onafhankelijke orakels en performance

De corpuscheck importeert geen productiemodule voor zijn eerste meting. Hij scant de XER-bytes
zelf, telt tabellen/typen en vergelijkt de anonieme SHA-16-pins voor Roads en rehab-2. Daarna
controleert hij de productiecatalogus en lineaire projectprojectie tegen die onafhankelijke scan.

De geslaagde rerun mat:

| corpuspin | parser | parserheap | X6-kern | kernheap |
| --- | ---: | ---: | ---: | ---: |
| `a2ef7b35c00d8cf8` | 81,6 ms | 20.391.440 B | 59,6 ms | 2.919.512 B |
| `2c1dce175b9f0781` | 977,5 ms | 243.986.592 B | 778,9 ms | 41.203.632 B |

Beide bleven onder de vastgelegde grenzen. De bronlog staat lokaal in
`task-X6-planning-rerun.log`; die log is bewust genegeerd en niet onderdeel van de commit.

## Uitgevoerde poorten

- Gerichte X6-contracttest na herstel: exitcode 0, 7 checks.
- Gerichte X6-corpuscheck met openbare `OPS_XER_CORPUS`: exitcode 0, 14 checks.
- `npm run typecheck`: exitcode 0.
- Volledige `npm run test:planning` met `OPS_XER_CORPUS` en `OPS_P6_COMPARISON`: exitcode 0,
560/560 en UTC, America/New_York, Pacific/Midway, Pacific/Auckland en Atlantic/Azores groen.
- Volledige `npm run verify` met dezelfde publieke corpuscontext: exitcode 0; inclusief lint,
planning/library/MCP/dev-server, examples, docs, i18n, cycles en audit (0 vulnerabilities).
- `git diff --check`: exitcode 0.

## X9-overdracht

X9 moet de retained `xer.resources`-catalogus en projectassignment-view door het
documentcontract, IFC-writer/-reader en recovery-bronserialisatie voeren. Deze X6-commit bewaart
alleen de in-memory raw rows met referentie-identiteit; zij claimt expliciet geen save/reload-
round-trip, export of MCP-leespaddocumentatie.

## Reviewfix X6 — 2026-08-25

De bestandsbrede catalogus is nu runtime-diep bevroren: nested resources, sourceprojecties,
rate-entiteiten/-tuples, curve-tuples en issues zijn immutable. De doorloop werkt in-place en
stopt bij de reeds bevroren parserrijen, dus raw `XerRow`- en celidentiteit wordt nooit gekloond.
Documentprojecties blijven bewust mutable en geïsoleerd.

`duplicateDocument()` kloont XER-metadata gericht: catalogus plus raw rows worden gedeeld, maar
projectassignmentbronnen (entity, quantities, costs, rawCurves) en issues zijn nieuwe objecten.
Hiermee wordt een catalogus met 52.640 retained TASKRSRC-rijen niet meer JSON-gekloneerd.

De corpuspoort start met een directe byte-/tabelscanner voor presence/tellingen, exacte rates en
ingangsdatums, resourcekalenders, role-only assignments, 21 curvepunten/best-fit, projectpartitie
en raw-rowidentiteit. Zij rapporteert afzonderlijk parser, catalogusbouw, materialisatie en de
volledige `readXER`-route. Heap is een live-delta vanaf één nulmeting per corpuscase, omdat alle
resultaten voor het onafhankelijke orakel terecht live blijven.

Laatste openbare corpusrun: Roads 90,6 / 6,6 / 72,4 / 246,1 ms; rehab-2 1.079,2 / 13,1 /
1.066,6 / 2.707,8 ms (parser / catalogusbouw / materialisatie / end-to-end), 40 checks,
exitcode 0. Rode mutaties (ieder exitcode 1, direct hersteld): rate ×100, verkeerde kalender,
20 i.p.v. 21 curvepunten, resourceIds-fan-out weg, projectmisrouting en catalogusfilter met
baseline/unscoped-verlies. De voorafgaande RED-tests bewezen ook shallow freeze en rawmetadata-
klonen bij duplicateDocument().

## Herreviewfix X6 — 2026-08-25 (twee Important-restpunten)

De runtime-freeze is nu ook statisch afgedwongen. `XerReadonly<T>` is de ene canonieke,
tuple-behoudende diep-readonlycompositie voor de catalogusgrens; `XerResourceCatalog` exposeert
alle resources, identiteiten, rows, rates, entities, kostentuples, curve-tuples, issues en raw
rows als readonly. De bestaande `Xer*`-bronvormen blijven de expliciet mutabele,
documentgebonden projectie beschrijven. De compile-time contracttest zet `@ts-expect-error` op
catalogusmutaties; wanneer een daarvan weer compileert wordt die directive ongebruikt en faalt
de typecheck. Dezelfde proef bevestigt dat entity, assignedRole, quantities, costs en rawCurves
in een `XerResourceReadResult` wél mutabel blijven.

Materialisatie kloont naast resources nu ook catalogusidentiteiten, issues en bronwrappers voor
resources, roles, rates en curves. Alleen `rawRow` blijft per ontwerp referentie-identiek aan de
catalogus/parserrij. De X6-contracttest vergelijkt voor resource-, role- en
assignmentprojecties afzonderlijk de objectidentiteit met catalogus/peerprojectie en vervolgens
de isolatie na mutatie. Een tijdelijke vervanging van `structuredClone(catalog.resources)` door
de catalogusreferentie gaf exitcode 1 met twee gerichte contractverschillen (identiteit en
“gematerialiseerde projectie is niet mutable”), zonder stacktrace; de tijdelijke mutatie is
direct hersteld.

Zelf gereproduceerd op `50799884`: vóór de fix waren acht `@ts-expect-error`-directives
ongebruikt (`npm run typecheck`, exitcode 2), dus catalogusmutaties compileerden. Dezelfde
tijdelijke materialisatieclone-regressie beëindigde de oude test met een ongehanteerde
`TypeError` en exitcode 1. Na de fix waren de gerichte resource-, duplicateDocument- en
openbare corpuschecks respectievelijk groen met 38, 7 en 40 checks (alle exitcode 0); de
volledige poorten staan onder de commit vastgelegd.
47 changes: 44 additions & 3 deletions CLAUDE.md
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,7 @@ npm run test:library # los: bibliotheek/IFC/i18n-checks
npm run test:mcp # los: MCP-tools
npm run test:dev-server # los: node:test-units + integratietest van de dev-serverpoort/-locks
npm run test:browser # los: echte gebruikersflows in Chromium via Playwright
npm run test:browser:x11 # lokaal headed; vereist OPS_XER_CORPUS + desktopdisplay, vervangt de corpusloze CI-poort niet
npm run verify:examples # los: de gebundelde voorbeelden laden/rekenen door zoals verwacht
npm run verify:docs # los: in-app gidsen — nl+en hard vereist, overige 12 talen indien aanwezig
npm run verify:i18n # los: ontbrekende vertaalsleutels t.o.v. nl (CLDR-pluralcategorieën meegerekend)
Expand Down Expand Up @@ -105,6 +106,46 @@ eigenschappenpaneel (`TaskTimephasedNotice.tsx`); beide linken via `openHelpArti
`tests/planning/check-mpp-*.ts`-batterijen (import/relations/calendars/summary-relations) voor de
rest van de regressiedekking.

### De XER-lezer (Primavera P6): bronarchief in het IFC, P6-getrouwheid in drie lagen

`src/services/xer/` leest het native `.xer`-uitwisselingsformaat van Primavera P6 rechtstreeks
(geen Rust, geen externe bibliotheek): `xerTables.ts` (tabelparser, getalnotatie uit `CURRTYPE`,
tekencodering BOM → UTF-8 → Windows-1252), `xerReader.ts` (entry point `readXER()`, hetzelfde
`ImportResult`-contract als de andere lezers, via `formatRegistry.ts` achter een dynamic import),
`xerMultiProject.ts` (één bestand ⇒ meerdere documenten; baselineprojecten worden bij hun huidige
project gematerialiseerd), `xerCalendarData.ts` (de `clndr_data`-decoder incl. herstelcodes),
`xerScheduleOptions.ts` (SCHEDOPTIONS → `SchedulingOptions`, X5), `xerRecordedTimes.ts` (zie
hieronder) en de resource-/metadata-lezers. Het volledige plan met eigenaarsbesluiten, dossiers en
de overdrachtsstand staat in `docs/superpowers/plans/2026-08-20-plan-xer-p6-lezer.md`; lees §4.1
(de veldwhitelist met vier "bakken") vóór je een TASK-kolom aanraakt.

Drie architectuurregels die je moet kennen. (1) **Het bronarchief.** De volledige oorspronkelijke
`.xer`-bytes reizen als `xerSourceArchive` (+ `xerImportMetadata`, `xerSourceProjectId`) mee in
`DOCUMENT_FIELDS` én in `IFC_SAVE_KEYS` (`src/services/xerSourceArchive.ts`): het IFC-projectbestand
en elke crashherstel-snapshot dragen het archief, zonder bovengrens — gemeten 17,7 MB `.xer` ⇒ ±50 MB
IFC, ±3,6 s hoofdthread per auto-save-tick (`docs/xer-recovery-guardrails.md`; eigenaarsbesluit,
plan §10.f). De MCP-tool `planner_xer_provenance` en de extensie-API `data.getImportSource*` (achter
de permissie `importSource`, default-deny) lezen eruit. (2) **Bak 4 — opgeslagen rekenuitvoer is
weergave, nooit solverinvoer.** De zes P6-uitvoerkolommen (`early_/late_start/end_date`,
`total_/free_float_hr_cnt`) mogen uitsluitend via `xerRecordedTimes.ts` gelezen worden, als
`ImportResult.recordedTimes`; ze voeden de weergave "Datums zoals opgeslagen" (issue #63, hierboven
onder *State*) en de X12-meetlat, nooit `Task.time` als invoer. Bak 2 (`restart_date`, `driving_path_flag`,
…) mag de lezer nooit lezen. `tests/planning/check-xer-field-whitelist.ts` grept beide grenzen
corpusloos over heel `src/`; de X12-non-interferentie in `check-xer-product-fidelity-x12.ts` bewijst
het per mutatie. (3) **P6-gedrag is fail-closed op `p6Source`.** Elke P6-specifieke solvertak
(`CPMSolver.ts`, `p6Completed*.ts`, `p6OpenLoe*.ts`) staat achter
`schedulingOptions.p6Source === 'XER'`; de XER-lezer zet die vlag, het IFC round-tript haar (met
`sanitizeSchedulingOptions` als type-/sleutelpoort in `ifcReader.ts`), andere formaten blijven
byte-identiek — de corpusloze planningssuite bewaakt dat. Uitzondering: `lagCalendar` is sinds X5 een
werkende instelling voor élk formaat (was een dode UI-keuze).

Meten gaat via het corpus (`OPS_XER_CORPUS`, plan §10.a; niet in de repo, geen CI-poort):
`check-xer-product-fidelity-x12.ts` telt zesassige afwijkingen tegen P6's eigen uitvoer
(`OPS_XER_FIDELITY_REPORT=summary|detail|baseline`), gepind in `xer-product-fidelity-baseline-v2.json`
en corpusloos in `check-xer-corpusless-fidelity-gate.ts`. Het nuldoel van plan §1 is niet gehaald
(15.056 op 2026-09-07); mét corpus staat de suite daarom by design rood op precies die drie regels.
Gebruikersgidsen: `public/docs/{nl,en}/gids-xer-import.md` en `datums-zoals-opgeslagen.md`.

### De contour-engine: werkverdeling-per-dag als data, de curve-formule als terugval

`src/engine/contour/contourEngine.ts` (puur, 2026-09) is de rekenkern voor **resource-contouring**:
Expand Down Expand Up @@ -248,10 +289,10 @@ bedrading — álle `@tauri-apps/*`-imports dynamisch achter `isTauri()`, zodat
bouwen), `dispatcher.ts`, `schemaValidate.ts` (schema's worden in de dispatcher afgedwongen, óók
binnen `planner_batch` — een draaiboek mag de poort niet omzeilen), `toolRegistry.ts`/`toolIndex.ts`,
`staleGuard.ts` (`ensureFreshSchedule`), `backup.ts` (AI-backups per document in `appDataDir`,
`MAX_PER_DOC = 10`) en `activityLog.ts` (ring-buffer achter het AI-activiteitenpaneel). De 39
`MAX_PER_DOC = 10`) en `activityLog.ts` (ring-buffer achter het AI-activiteitenpaneel). De 40
`planner_*`-tools staan in `src/services/mcp/tools/` (taken, relaties, resources, kalender, project,
baselines, documenten/bestanden, leestools, en `planner_batch` als transactionele executor met
temp-id-resolutie).
baselines, documenten/bestanden, leestools, XER/P6-bronprovenance, en `planner_batch` als
transactionele executor met temp-id-resolutie).

Veiligheid is state, geen conventie: `ui.aiMode` (de hele AI-tab en bridge verschijnen pas hierdoor),
`ui.aiPaused`, `ui.aiReadOnly` en `ui.aiServerStatus` leven in `uiSlice`; de per-request `McpContext`
Expand Down
2 changes: 1 addition & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -73,7 +73,7 @@ src/
extensions/ # Extensiesysteem (types, api, loader, service)
i18n/ # Vertalingen, 14 talen × 4 namespaces
hooks/ types/ utils/ styles/
public/docs/ # In-app handleiding: 32 artikelen × 14 talen (voedt ook de wiki)
public/docs/ # In-app handleiding: 33 artikelen × 14 talen (voedt ook de wiki)
examples/ # Voorbeeldplanningen in IFC
tests/ # planning · library · mcp · dev-server · browser
src-tauri/ # De Rust-schil (dun: precies één native command)
Expand Down
Loading
Loading