Repository navigation
XER-review #109: MCP-resourcenamen na toestemming, geen 1970-start, regeleinde in een cel, Arabische/Cyrillische codering - #296
Merged
Conversation
…ceNames Eigenaarsbesluit 22-09 (bevestigd 2026-10-07): codes altijd, resourcenamen alleen achter een opt-in die de AI-client eerst aan de gebruiker vraagt. - planner_inspect_xer_provenance krijgt includeResourceNames (standaard false). Zonder optie: resources[].name weg (nameHidden: true), RSRC- bronrijcellen dicht ook met includeRawRows, rawSource geweigerd. - De resourcecode (rsrc_short_name) staat altijd als `code` op resources en resourceSources. - Toolbeschrijving en optiebeschrijving: eerst de gebruiker om toestemming vragen; namen gaan naar de AI-aanbieder. - Docblok "GEACCEPTEERD RISICO" vervangen door de nieuwe regel met de afweging per name-sleutel. - Tests (echte lezer, resource "Jan de Vries"/JDV); mutant "standaard true" geeft rood. Gids ref-ai-tools (nl/en) en rules/xer.md bijgewerkt. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
… 1970 Review PR #109, N1. Een TASK zonder target_start_date kreeg 1970-01-01 en het project nam die als projectstart, zonder melding. De XER-lezer volgt nu resolveMissingScheduleDates zoals de andere lezers: anker = statusdatum (last_recalc_date, of data_date als die kolom ontbreekt), dan PROJECT.plan_start_date, dan de vroegste aanwezige taakstart. Ontbrekende finish = start + duur waar dat eenduidig is. De openingsmelding telt de vervangen starts (nieuwe regel xerImportMissingPlannedStarts, 14 locales). Tests in check-import-missing-schedule-dates (6a–6f); mutant "oude 1970-terugval" geeft rood. Corpus: MER-1 (beide), sample.xer, kedular: 0 taken op 1970. measure:profiles: X12 76, nieuw=0 verslechterd=0 groter=0. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Review PR #109, N2 (Fable 8). P6 schrijft een regeleinde in een cel als DEL-DEL; ook MPXJ breekt een record op elke CR/LF. Een bewerkte XER kan toch een echte LF/CRLF in bv. task_name dragen: dan verloor de taak duur en datums. De tabelparser voegt een te korte %R nu samen met de direct volgende regels zonder %-marker, max. 8, alleen als het veldental exact klopt; anders blijft XER_ROW_FIELD_COUNT_MISMATCH zoals voorheen. Tests 33–33d in check-xer-tables (LF en CRLF, twee regeleinden, niet samen te voegen, overschrijding, grens); mutant "nooit samenvoegen" geeft rood. Corpusscan: geen enkel bestaand bestand verandert. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…ndows-1252 Review PR #109, N3 (Fable 15); de eigenaar zag het bij rehab-2. Binnen besluit B17 (BOM, anders UTF-8, anders enkelbyte; de melding noemt de keuze) kiest de lezer nu tussen Windows-1252/-1251/-1253/-1256: detectSingleByteEncoding telt woorden die alleen uit bytes >= 0x80 bestaan en scoort per codetabel hoeveel daarvan een geldig woord van één schrift met gewoon hoofdletterpatroon geven. Afwijken van 1252 alleen bij >= 8 zulke woorden, >= 50 % aandeel, score >= 0,9 en >= 0,3 voorsprong. Latijnse 1250/1254 zijn niet eenduidig te scheiden en blijven 1252 (twijfel). Typen en de archiefvalidator kennen de drie nieuwe coderingen; de compacte IFC-container reconstrueert uit de bytes, dus een Arabisch archief overleeft de ronde (check-ifc-xer-archive-container 22-24). Tests: check-xer-tables 34-34f (Arabisch, Cyrillisch, Grieks, West-Europees, twee Arabische eenheden tussen Latijn, Pools cp1250, te weinig bewijs); mutant "altijd 1252" geeft rood. Corpus: rehab-2 = windows-1256, 6977/6977 taaknamen Arabisch, projectnaam "مشروع الرحاب - 2"; de tien overige niet-UTF-8-bestanden blijven windows-1252 (C1-pin bijgewerkt, R1 nieuw). Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
De N1-fix leest PROJECT.plan_start_date als anker voor een activiteit zonder target_start_date. De veld-firewalls (xer-field-whitelist: grep én AST; xer-chunk-boundary) kenden die naam alleen als verboden TASK-uitvoer. Zelfde gepinde uitzondering als PROJECT.plan_end_date: precies `projectRow.cells.plan_start_date` in xerReader.ts, één keer. Een TASK-lezing blijft rood. check-xer-project-data-date pinde de oude 1970-terugval; nu de statusdatum uit data_date. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…tnamen leesbaar Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Nozzit
added a commit
that referenced
this pull request
Oct 12, 2026
Eigenaarsbesluit 2026-10-12 (optie 1): een melding bij het openen van een bestand blijft staan tot het kruisje als de app bij het openen data invulde, verving, repareerde of wegliet. Anders verdwijnt hij na 5 s. - Nieuwe vlag `sticky` in het meldingenkanaal (geen error: kleur blijft info). NotificationHost start voor een sticky info geen timer; bij een volle stapel gaat eerst een gewone info weg. - De regel staat op één plek: src/state/openNoticeSticky.ts (STICKY_OPEN_NOTICE_KEYS): XER-parser-/kalenderbevindingen, getalnotatie, enum-terugval, P6-instellingen met terugval, beschermende baseline-terugval, genegeerde baselineverwijzingen, onbruikbaar XER-bronarchief, dubbele id's hernummerd, relaties die niet meerekenen. De sleutel xerImportMissingPlannedStarts (PR #296) staat er al in. - fileSlice: de bestandsmelding en de archiefmelding van een voorbeeld gaan door withOpenNoticeSticky; duplicateIdsRenamed en summaryRelationsDropped zijn sticky. - Gids ref-meldingen (nl, en en 26 vertalingen) noemt de regel; docs-sources bijgewerkt. - Tests: check-notifications S1-S8; browsertest toast-open-sticky (enum- terugval blijft staan, schone XER weg na 5 s; ontbrekende geplande start als fixme tot #296 op main staat). Fixtures in tests/browser/fixtures/xer. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Nozzit
added a commit
that referenced
this pull request
Oct 12, 2026
Twee teksten kwamen zonder `npm run i18n:add` binnen: de familie `common:notifications.xerImportMissingPlannedStarts` (#296, van vóór de vertaalstraat) en de nieuwe tekst van `task:duration.conversionNotExact` (#319). Daardoor stond `en` in `translate status` als "zonder hash" en "verouderd". Beide sleutels opnieuw gezet met `i18n:add --update` (nl + en, tekst ongewijzigd): `en` is actueel. In de andere talen viel de oude hash van `conversionNotExact` weg; de bestaande vertalingen blijven staan tot de vertaalstraat ze bijwerkt (besluit B5). Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This was referenced Oct 12, 2026
Nozzit
added a commit
that referenced
this pull request
Oct 12, 2026
…elaties of activiteiten Afstemming #320 × #330: een relatie tussen projecten die niet als relatie is overgenomen (p6xmlImportCrossProjectRelations) en een activiteit zonder project die niet is ingelezen (p6xmlImportUnassignedActivities) laten data weg; volgens de regel van #320 blijft de openingsmelding dan staan tot het kruisje. Losse baselineverwijzingen hergebruiken de al blijvende xerImportDanglingBaselineReferences. Aantal projecten, lege projecten en gekoppelde baselines veranderen niets en blijven dus na 5 s weg, zoals bij XER. Commentaar over #296 bijgewerkt (staat nu op main). Gids ref-meldingen (nl, en) gelijkgetrokken met de lijst. check-p6xml-open-notice: 6f/7b/8b2/8b3 (mutatie: de twee sleutels weg ⇒ 6f en 8b3 rood). Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Nozzit
added a commit
that referenced
this pull request
Oct 12, 2026
…XML-uitleg één keer - toast-open-sticky.spec: test.fixme → test. #296 staat op main, dus de XER-lezer meldt een ontbrekende geplande start (xerImportMissingPlannedStarts) en de openingsmelding blijft staan. - format-notice.spec: P6 XML met meerdere projecten (fixture p6xml-genest-meerdere-projecten) opent twee documenten en zet precies één keer een uitleg klaar (p6xml, met de baselinezin); een P6 XML zonder activiteiten geeft de foutmelding, geen document en geen uitleg. Mutatiebewijs: uitleg vóór het lezen klaarzetten ⇒ de P6 XML-test rood; de sleutel xerImportMissingPlannedStarts uit STICKY_OPEN_NOTICE_KEYS ⇒ de sticky-test rood. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
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.
Kleine fixes uit de review van PR #109 (XER/P6-lezer) door de eigenaar op 2026-10-07: één eigenaarsbesluit dat nooit gebouwd was, en drie bevestigde fouten uit de code-review (Opus 5.5,
hyperkritische-review). De eigenaar zag de coderingsfout zelf in de app ("kloppen al die namen wel?").1. MCP: resourcenamen alleen na toestemming
Eigenaarsbesluit 22-09, bevestigd 2026-10-07 ("bouwen"): "codes altijd; resourcenamen alleen achter een opt-in, en de AI-client moet die opt-in aan zijn gebruiker vragen." Tot nu toe stond in de code "GEACCEPTEERD RISICO:
nameencodeblijven zichtbaar".planner_inspect_xer_provenancekrijgtincludeResourceNames(standaard false), los vanincludeRawRows.resources[].nameverdwijnt (nameHidden: true); de RSRC-bronrij blijft dicht, ook metincludeRawRows(er staan ook e-mail, personeelsnummer en telefoon in);rawSourcewordt geweigerd omdat de bytes de RSRC-tabel bevatten. Codes (rsrc_short_name) blijven altijd zichtbaar.data.getImportSource*) is ongewijzigd: daar is de permissieimportSource(standaard uit, door de gebruiker verleend) de toestemming.2. N1: geen startdatum 1970 meer
Een XER-taak zonder geplande start kreeg
1970-01-01, en het project nam die als projectstart, zonder melding. Alle andere lezers gebruikten al de gedeelde regel voor ontbrekende datums; de XER-lezer niet.last_recalc_date, andersdata_date), danPROJECT.plan_start_date, dan de gedeelde regelresolveMissingScheduleDates. De statusdatum gaat vóórplan_start_dateomdat P6 onbegonnen werk vanaf de data date plant en bestaande bestanden zo uur-precies gelijk blijven.xerImportMissingPlannedStartsin 14 talen.PROJECT.plan_start_datestond op de verbodslijst van de veldpoorten. Het is een projectinstelling (geplande projectstart), geen P6-rekenuitvoer, net alsPROJECT.plan_end_date, dat al een gepinde uitzondering had. Dezelfde gepinde uitzondering is toegevoegd incheck-xer-field-whitelist(grep én AST) encheck-xer-chunk-boundary. Het alternatief (niet lezen) laatsample.xerop "vandaag" starten.sample.xerenkedular-field-mismatchhebben 0 taken op 1970.3. N2: regeleinde in een cel
P6 schrijft een regeleinde in een cel als DEL-DEL; een rauw regeleinde komt uit een met een spreadsheet of script bewerkt bestand en kapte de rij af.
joinLineBrokenRowvoegt een te korte rij samen met de volgende regels zonder%-marker, hooguit 8 regels en alleen als het veldental dan exact klopt; anders blijft de bestaande melding. Geen enkel corpusbestand verandert.4. N3: tekencodering voor Arabisch, Cyrillisch en Grieks
Niet-UTF-8-bestanden werden altijd als Windows-1252 gelezen. Binnen besluit B17 (UTF-8, anders 1252, de melding noemt de keuze) kiest
detectSingleByteEncodingnu ook 1251, 1253 of 1256, maar alleen bij sterk bewijs; bij twijfel blijft het 1252.Hoe getest
tests/mcp/cases-xer-provenance.ts(resource "Jan de Vries"),check-import-missing-schedule-dates6a–6f,check-xer-tables33–33d en 34–34f,check-ifc-xer-archive-container22–24,check-xer-corpusR1.npm run verifyzonder corpus: exit 0 (planning 560/560, browser 405). Met corpus:check-xer-byte-paths,check-xer-corpus,check-xer-field-whitelist(342) exit 0;measure:profiles: X12 = 76, nieuw=0 verslechterd=0 groter=0.Wat overblijft
includeRawRows, niet achterincludeResourceNames.🤖 Generated with Claude Code