Categorie: root Bijgewerkt: 2026-04-05 log changelog onderhoud

Wiki Log

Chronologisch logboek van alle ingests, queries en onderhoud. Append-only — voeg nieuwe entries altijd onderaan toe.


2026-04-05 — Initiële compilatiebewerken

Type: ingest (bulk) Bronnen: 22 bestanden uit Data/ Resultaat: 66 wiki-artikelen aangemaakt

Verwerkte bronnenbewerken

Bron → Artikelen
Ultimo_Help_Complete.md concepts/assets, concepts/jobs, concepts/periodiek-onderhoud, concepts/planning, concepts/inkoop, concepts/magazijn, concepts/contracten, concepts/hse
UCT-Handleiding.md concepts/uct-overzicht, configuration/*
Frontend-Handleiding.md concepts/self-service (webwinkel, kennisboom, Mijn Ultimo)
ultimo-uctool-help.md concepts/uct-overzicht (aanvulling)
Entities.xml (643 entiteiten) entities/* (17 hoofdentiteiten + index)
database-schema.json entities/* (kolomdetails, types)
workflows.xml (~360K regels) workflows/workflow-patronen
ultimo_workflow_documentation.md workflows/workflow-instructies, workflows/workflow-engine
ultimo_expression_documentation.md workflows/expressions
UltimoDeveloperDocumentation.md api/rest-api, api/http-post, api/soap, api/api-keys
ultimo_importconnectors_2026-02-25.xml api/import-connectors (XSLT voorbeelden)
Application Element Tree settings.md configuration/application-element-tree
process-settings.md (61 configuraties) configuration/process-settings
ApplicationSettings.json configuration/application-settings
ApplicationElementTreeData.json configuration/application-element-tree
Default_Text_Templates.xml (referentie, niet direct verwerkt)
ultimo-implementation-documentation.md concepts/implementatie (DCS, UDIT, MDS, asset tree)
ultimo_announcements_batch1-5.md troubleshooting/nieuwe-features, troubleshooting/veelvoorkomende-problemen

Aangemaakte categorieënbewerken


2026-04-06 — Karpathy LLM Wiki pattern alignmentbewerken

Type: onderhoud Actie: Wiki uitgebreid met ontbrekende elementen uit het LLM Wiki pattern (Karpathy gist):


2026-04-09 — Nieuw artikel: Workflow Designer (UCT)bewerken

Type: ingest (handmatig) Bronnen: Training/ Resultaat: 1 wiki-artikel aangemaakt

Artikel Omschrijving
workflows/workflow-designer.md Stap-voor-stap gids voor de Workflow Designer in UCT: interface, property-vertaling, workflow aanmaken, variables, schermknoppen koppelen, UCB, publiceren, debugger en valkuilen

Index bijgewerkt: <a href="/workflows/workflow-designer">workflows/workflow-designer</a> toegevoegd aan de Workflows-sectie in index.md.


2026-04-09 — Nieuw artikel: SQL Patronen voor Ultimo Consultantsbewerken

Type: ingest (handmatig) Bronnen: Training/ (diverse Curriculum-bestanden, "Data import using Excel sheet"-video, "Generate Scripts"-video) Resultaat: 1 wiki-artikel aangemaakt

Artikel Omschrijving
troubleshooting/sql-patronen.md Uitgebreide SQL-referentiegids: verbinding SSMS, tabel/kolomconventies, SELECT/WHERE/JOIN/GROUP BY patronen, INSERT/UPDATE/DELETE, volledig Excel-importpatroon met OPENROWSET/AutoKey/ExternalID/DataProvider/COLLATE, Generate Scripts stap-voor-stap, best practices en veelvoorkomende fouten

Index bijgewerkt: <a href="/troubleshooting/sql-patronen">troubleshooting/sql-patronen</a> toegevoegd aan index.md en troubleshooting/index.md.


2026-04-09 — Update: workflow-instructies verrijkt met praktijkvoorbeeldenbewerken

Type: onderhoud (verrijking bestaand artikel) Bronnen: Training/ (consultant tips, Workflow Designer handleiding) Resultaat: 1 wiki-artikel uitgebreid

Sectie Toegevoegd
Insert Parameter-voorbeelden: Status/Context als property name, OutputProperty opslaan, minimale betrouwbare Job-Insert
GetItem Property chaining via ${root.job.Equipment.Id}, waarschuwing exact 1 resultaat, UCB Properties tab vs. beschermd Start-blok
GetList Output type WithList(EntityName), verplicht OrderBy, AND-logica meerdere filters, BetweenFilter met datumfuncties, ${lijst.Count}
ForEach Bulk statuswijzigingspatroon: GetList → ForEach → ChangeStatus per item in eigen Transaction
ChangeStatus Waarschuwing: altijd ChangeStatus gebruiken, nooit Assign — Status Matrix, Pre/Post workflows en history worden anders overgeslagen
Dialog Container verplicht, Text (Width/LabelCode/OutputProperty), SelectionList (ColumnName, SqlWhereClause met kolomnamen, Required), Ctrl+drag tip
WorkflowCall ActionField-waarschuwing: nooit direct aanroepen, zoek sub-workflow op
View Volledige parameterlijst: DomainObject, ScreenName, CreateNewRecord, OpenNewWindow, FocusEditableField met voorbeeld na Insert

Frontmatter bijgewerkt: date naar 2026-04-09.

2026-04-09 — Nieuw artikel: Entity Overview en Property Mappingbewerken

Type: ingest (handmatig) Bronnen: Training/ Resultaat: 1 wiki-artikel aangemaakt

Artikel Omschrijving
concepts/entity-overview.md Foundational artikel over het drie-lagen model (scherm → entiteit/property → tabel/kolom): Technical Screen Information (?-icoon), Screen Database Objects, Entity Overview (UCT), compleet vertaalproces met voorbeeld (Department op Job), property chaining syntax, veelgebruikte entiteiten met tabel/prefix/PK, foreign key patronen, contextwaarden en valkuilen

Index bijgewerkt: <a href="/concepts/entity-overview">concepts/entity-overview</a> toegevoegd aan index.md en concepts/index.md. Artikelteller bijgewerkt naar 144.


2026-04-09 — Uitbreiding bestaande workflow- en configuratie-artikelenbewerken

Type: onderhoud (ingest uit trainingsmateriaal) Bronnen: Training/ (curriculum, praktijkvoorbeelden) Resultaat: 4 bestaande wiki-artikelen uitgebreid met praktijkkennis

Artikel Toegevoegde sectie
workflows/workflow-engine.md Variables en Properties — naamgeving, type (entiteitsreferentie vs. datatype), Accessor (Internal/Root/Optional/Required), Direction (none/In/Out/InOut), referentiesyntax ${variableName}, property chaining ${root.job.Equipment.WarrantDate}
workflows/scheduled-workflows.md Praktijkvoorbeeld: Wekelijks email rapport — volledig stappenplan: GetList met datumfilters (startOfDay/addDays), TextTemplate met conditionele tekst op ${jobs.Count}, Email-actie met #{Settings.EmailSender} en Required ${to} parameter, Scheduler instelling maandag 07:00, Test Run knop
configuration/messages.md Expressies in berichten — enkelvoud/meervoud met if(${count} == 1, ...), .Description vs. ID, Load knop in Message action, Label vs. Ultimo berichttype, voorbeeldcodes 9000-9007
workflows/expressions.md Veelgebruikte patronen — datumberekeningen (startOfDay/addDays), null checks (== Empty/!= Empty), lijst tellen (${list.Count}), beschrijving ophalen (.Description), conditioneel in messages, property chaining

Frontmatter bijgewerkt: date gewijzigd naar 2026-04-09 in alle 4 artikelen.

2026-04-09 — update-section: workflows/expressions.mdbewerken

Reden: Lijst tellen: Waarschuwing: #count() werkt niet op List[DomainObject], gebruik altijd .Count

2026-04-09 — ingest: concepts/voortgangsstatussen.mdbewerken

Reden: Nieuw artikel: Voortgangsstatussen — compleet configuratiehandboek met statusflow, autorisatie, validaties, SLA-impact, equipment-integratie en consultant best practices. Bron: Ultimo_Help_Complete.md, ultimo-implementation-documentation.md, database-schema.json, ApplicationElementTreeData.json.

2026-04-14 — update-section: configuration/package-manager.mdbewerken

Reden: Pakketbestanden: Technische structuur .up-bestand toegevoegd: ZIP-formaat, BOM-vereiste, bestandsnaamlimiet 34 tekens, PackageDefinition.xml formaat met actie-voorbeelden, FileServiceData mapstructuur

2026-04-15 — update-section: workflows/workflow-instructies.mdbewerken

Reden: Gerelateerde artikelen: Sectie toegevoegd over Hash/Security attributen en MessageCode 2060 bij custom workflows

2026-04-15 — update-section: workflows/workflow-instructies.mdbewerken

Reden: Custom Workflow XML: Hash en Security attributen: Hash-algoritme geverifieerd tegen .wfl bestanden: SHA1 van UTF-8 bytes zonder BOM en zonder Hash attribuut. Python implementatie en CRLF/tab details toegevoegd.

2026-04-15 — update-section: workflows/workflow-instructies.mdbewerken

Reden: Email: Email instructie bijgewerkt met verplicht twee-stappen patroon (Concept + ChangeStatus naar Draft), gebaseerd op standaard workflow ActionField667. Inclusief property-declaratie, Transaction-vereiste, en correcte From-referentie.

2026-04-15 — update-section: workflows/workflow-patronen.mdbewerken

Reden: Email versturen bij statuswijziging: Email patroon bijgewerkt met verplicht twee-stappen patroon (Concept + ChangeStatus naar Draft). Oud patroon zonder Transaction/Concept/ChangeStatus verwijderd. UCB-voorbeeld toegevoegd. From-referentie gecorrigeerd naar UltimoSettings.


2026-04-16 — Brondata-framework fase 1bewerken

Type: infrastructure + reference-generation Scope: Nieuwe raw-data MCP-tools + reference-pagina's + Brondata-conventie + linter + showcase-retrofit

Wijzigingen:

Tests: 31 nieuwe tests (per parser + smoke + linter). Alle pass.

Volgende fases:

Ontwerp: docs/superpowers/specs/2026-04-16-brondata-citaat-framework-design.md Plan: docs/superpowers/plans/2026-04-16-brondata-framework-fase-1.md


2026-04-16 — Brondata-framework fase 2bewerken

Type: retrofit Scope: ## Brondata sectie toegevoegd aan alle 56 handgeschreven wiki/entities/*.md

Wijzigingen:

Tests: 8 nieuwe unit-tests voor het retrofit-script (tests/test_retrofit_entity_brondata.py). Alle 69 tests pass.

Linter: Brondata-errors onder wiki/entities/: 0 (was 54). Totaal Brondata-errors in de wiki: 0 (was 56).

Volgende fase:

Plan: docs/superpowers/plans/2026-04-16-brondata-framework-fase-2.md


2026-04-16 — Brondata-framework fase 3bewerken

Type: retrofit (handpicked + broad sweep) Scope: Alle resterende handgeschreven wiki-artikelen

Wijzigingen:

Deel 1 — handpicked (9 artikelen, commit b61693a): Artikelen met een 1-op-1 raw-data counterpart kregen een tailored Brondata-sectie met frontmatter-update naar de bijbehorende raw-data bron:

Deel 2 — broad sweep (69 artikelen, commit 92ed206): Via scripts/retrofit_broad_brondata.py kreeg elk resterend synthese-artikel een uniforme tool-cheat-sheet Brondata. Twee templates:

Resultaat:

Afgerond: Brondata-framework is nu operationeel over de hele wiki. Toekomstige artikelen krijgen Brondata "bij aanraking" — de linter valideert het voor artikelen met raw-data source:.

Plan: handpicked kreeg geen apart plan-document (9 artikelen — inline); broad sweep was één subagent-task.


2026-04-17 — GoManager (Ultimo Go/Go+ mobile) integratiebewerken

Type: infrastructure + reference-generation + synthesis Scope: Nieuwe raw-data bron ultimo_gomanager.xml (597 definities) ontsloten via het bestaande Brondata-framework.

Wijzigingen:

Tests: 8 parser-tests + 6 smoke-tests = 14 nieuwe tests. 83/83 totaal.

Linter: 0 BRONDATA-errors na de wijzigingen.

Ontwerp: docs/superpowers/specs/2026-04-17-gomanager-integration-design.md Plan: docs/superpowers/plans/2026-04-17-gomanager-integration.md

2026-04-23 — create: api/hierarchische-scoping.mdbewerken

Reden: Nieuw artikel: Hiërarchische scoping via boom-aggregatie

2026-04-23 — update-section: api/odata-filters.mdbewerken

Reden: $select - Properties selecteren: $select+expand-valkuil toegevoegd: relatie-properties vereisen expand

2026-04-23 — update-section: api/odata-filters.mdbewerken

Reden: $top en $skip - Paginering: paginatie-sectie uitgebreid met praktische top-limiet en keyset-valkuil op alfanumerieke IDs

2026-04-23 — update-section: api/odata-filters.mdbewerken

Reden: $count - Totaal aantal: count-only pattern toegevoegd: $top=0 + $count=true voor efficiënte counts

2026-04-23 — update-section: api/odata-filters.mdbewerken

Reden: in operator: praktische in-operator limiet toegevoegd (circa 100 waarden)

2026-04-23 — update-section: api/odata-filters.mdbewerken

Reden: Job management: TargetDate-valkuil bij achterstalligheidsfilters: altijd ne null toevoegen

2026-04-23 — update-section: api/odata-filters.mdbewerken

Reden: Beperkingen: samenvatting van toegevoegde valkuilen in centrale beperkingen-lijst

2026-04-23 — update-section: api/odata-filters.mdbewerken

Reden: Gerelateerde artikelen: link naar nieuwe hierarchische-scoping artikel toegevoegd

2026-04-23 — update-section: api/index.mdbewerken

Reden: API Beheer: nieuw artikel hierarchische-scoping opgenomen in API-index


2026-04-28 — Onderhoud: Workflow Commands gedocumenteerd via 19.10 DLL-decompilatiebewerken

Type: ingest + onderhoud

Bronnen:

Resultaat:

Nieuwe wiki-pagina's:

Nieuwe MCP-tools (Python + TypeScript):

Bijgewerkt:

Caveat: Baseline is Ultimo 19.10.11.414 (november 2019). Class-signatures zijn doorgaans stabiel; method-bodies kunnen in nieuwere versies afwijken. Frontmatter version-baseline: "19.10" markeert dit per pagina.

2026-04-30 — update: configuration/package-manager.mdbewerken

Reden: Toegevoegd: sectie 'ApiKey-permissies in PackageDefinition.xml' met AuthorizationLevel-enum, implicit Id/composite-key regels en tenant-afhankelijke RecordChangeDate.

2026-05-19 — update-section: configuration/package-manager.mdbewerken

Reden: Technische structuur van een .up-bestand: Workflow hash-algoritme toegevoegd (reverse-engineered, round-trip geverifieerd 2026-05-19). Opgenomen ter voorkoming van import-fout "Workflow was edited with an unauthorized tool".

2026-05-26 — ingest: LicentiePerWorkflow.txt (licentie per workflow)bewerken

Type: ingest — nieuwe raw-data bron

Bron: Data/LicentiePerWorkflow.txt — JSON-export met 8.834 workflows/ActionFields en per workflow welke licentietypes (isLight, isTechnician, isSelfService, isCustom, neverPublished, isUserContent) mogen triggeren.

Analyse: Licentietoegang is strikt genest: SelfService (2.258) ⊆ Light (2.340) ⊆ Technician (2.515) ⊆ Full (8.834). Per minimale licentie: SelfService 2.258, Light-only 82, Technician-only 175, Full-only 6.319. Slechts 7 custom workflows; neverPublished/isUserContent overal false.

Nieuwe wiki-pagina:

Nieuwe MCP-tools (Python + TypeScript):

Bijgewerkt:

Geen reference-pagina's: hoge cardinaliteit (8.834) — tool-only, conform grid widgets/import connectors.

2026-05-26 — update-section: concepts/licenties.mdbewerken

Reden: Veelgestelde vragen: FAQ uitgebreid: melder/aanvrager vereist alleen SelfService-licentie

2026-05-26 — onderhoud: Training-survey + workflow-designer uitbreidingbewerken

Type: onderhoud (content-gap-analyse + kleine ingest)

Actie: Data/Training/ (42 bestanden) opnieuw doorgelicht op ongedekte kennis. Conclusie: het trainingsmateriaal is al vrijwel volledig verwerkt (workflow-designer, workflow-instructies, workflow-debugger, scheduled-workflows, entity-overview, sql-patronen). Eén reëel gat gevuld:

Overig: nieuwe tools/eval_search.py (retrieval-eval, pass@5 20/20 / MRR 0.808 tegen hybrid); reindex-bij-deploy in start.sh; 2 broken links gefixt (linter negeert nu links in code-spans).

2026-05-27 — ingest: entiteiten-sweep fase 4 (53 nieuwe entiteit-artikelen)bewerken

Type: ingest (curated entiteit-artikelen)

Bronnen: Data/Entities.xml (643 entiteiten) + Data/database-schema.json (677 tabellen)

Aanleiding: Gap-analyse — curated laag wiki/entities/ dekte 67 van 643 entiteiten; veel belangrijke standalone-entiteiten (relatie-targets als EquipmentType, WorkOrderType, Company, RiskClass, ...) misten een curated artikel. Reference-laag was al compleet (643/643).

Methode: Ground-truth scripted geëxtraheerd (contexts, statussen, properties, uitgaande + inkomende relaties, DB computed/triggers/defaults) → skeleton met proza-markers → curated NL proza via 9 parallelle agents (alleen proza, feiten staan vast in skeleton) → deterministische merge → lint. Pipeline: tools/_entity_extract.py, _entity_gen.py, _entity_fill.py.

Resultaat: 53 nieuwe wiki/entities/*.md (57 → 110 artikelen). Elk volledig equipment-stijl met ## Brondata.

Bijgewerkt:

Lint: 0 broken links, 0 ontbrekende Brondata, geen nieuwe orphans.

2026-05-27 — feat: property-usage laag (welke workflows elke property lezen/schrijven/filteren)bewerken

Type: feature (afgeleide index + MCP-tools + reference-pagina's + curated narratief)

Bron: Data/workflows.xml (op property-niveau) + Data/Entities.xml (type-resolutie)

Aanleiding: Behoefte om per entiteit-property te zien wélke workflows hem vullen/lezen en wat ze ermee doen (bv. "hoe wordt Job.ScheduledStartDate gevuld?" → o.a. Job_RecalculatePlanningDatesBasedOnPriority op basis van prioriteit). Voorheen alleen handmatig uit 22 MB workflow-XML te halen.

Engine: Indexer in lib/raw_data.py + src/rawdata.ts (exacte pariteit). Resolvet ${Variabele.Property}-referenties in de workflow-body via de workflow-<Properties> (variabele→entiteit-type) en classificeert read/write/filter (Assign/Insert/ChangeStatus = write; PropertyFilter = filter; overige ${} = read). Geneste paden ${A.B.C} worden hop-voor-hop geresolved. Resultaat: 5.087 entiteit-property-paren, 641 entiteiten, 4.085 betrokken workflows.

Tools: lookup_property_usage(entity, property) en find_property_usages(query, entity?) — geregistreerd in server.py + src/mcp.ts, opgenomen in TOOL_NAMES en de MCP-instructies.

Wiki:

Tests: tests/test_raw_data_property_usage.py (13 tests: write/read/filter-classificatie, variabele→type-resolutie, geneste resolutie, no-double-count, synthetische buckets uitgesloten, onbekend→None).

Docs: CLAUDE.md (raw-data-toollijst + Tools-tabel), wiki/_meta/sources.md.

Noot: de oorspronkelijk genoemde OriginalFinalFinishDate bestaat niet als ${}-referentie; Job.ScheduledStartDate (20 schrijvende workflows) is als representatief proof gebruikt.

2026-05-27 — feat: property-gedrag narratief uitgebreid (Equipment, PM, Article, inkoopketen)bewerken

Type: content (curated narratief, vervolg op de property-usage laag)

Aanleiding: Data-gedreven prioritering — entiteiten gerangschikt op aantal workflows dat hun properties schrijft (writers = gedrag). Na Job (225 writers): Equipment (78), inkoop-regels (PurchaseRequestLine 70 / PurchaseLine 48), PmWorkOrder (38), Article (27/179 touch), ServiceDeskReportType, etc.

Resultaat: Sectie "## Functionaliteit & property-gedrag" toegevoegd aan 6 curated artikelen, met echte workflow-namen uit de property-usage index (evidence: tools/_pu_evidence/*.txt):

Elk artikel kreeg 2 Brondata-bullets (lookup_property_usage · reference/properties/<Entity> + lookup_workflow(...)).

Verificatie: lint 0 broken links / 0 ontbrekende Brondata / geen nieuwe orphans; alle geciteerde workflow-namen geverifieerd tegen workflows.xml.

2026-05-27 — feat: property-gedrag uitgebreid + 3 nieuwe entiteit-artikelenbewerken

Type: content (vervolg property-usage laag), data-gedreven prioritering op writers.

Groep A — narratief toegevoegd aan bestaande artikelen:

Groep B — NIEUWE curated artikelen (equipment-stijl, feiten scripted via pipeline) + narratief, voor workflow-zware entiteiten die nog geen artikel hadden:

Methode: writers-ranglijst (writers = workflows die property's vullen). Feiten van de 3 nieuwe entiteiten scripted via tools/_entity_extract.py dump-names_entity_gen.py; curated proza + narratief door agents, gegrond op echte workflow-namen uit de property-usage index (tools/_pu_evidence/*).

Bijgewerkt: wiki/entities/index.md (3 nieuwe rijen + subsectie "Operations & ploegenlogboek"), wiki/index.md. 1 oude placeholder-broken-link in log.md gefixt (in code gezet).

Verificatie: lint 0 broken links / 0 ontbrekende Brondata / geen nieuwe orphans; geciteerde workflow-namen geverifieerd tegen workflows.xml.

2026-05-27 — feat: property-gedrag voor JobMaterial + SpaceMaintenanceActivitybewerken

Type: content (vervolg property-usage laag), data-gedreven (writers-ranglijst).

Sectie "## Functionaliteit & property-gedrag" toegevoegd aan 2 bestaande artikelen:

Elk kreeg 2 Brondata-bullets (lookup_property_usage · reference/properties/<Entity> + lookup_workflow). Verificatie: lint 0 broken links / 0 ontbrekende Brondata / geen nieuwe orphans; geciteerde workflow-namen geverifieerd tegen workflows.xml.

Stand: property-gedrag-narratieven nu voor 14 entiteiten (Job, Equipment, PmWorkOrder, PmJob, Article, PurchaseRequest, Purchase, ServiceDeskReportType, Reservation, ConditionFlawPresent, WarehouseServeOut, ShiftLogLine, JobMaterial, SpaceMaintenanceActivity).

2026-05-27 — feat: property-gedrag voor ProcessFunction + Invoicebewerken

Type: content (vervolg property-usage laag), writers-ranglijst.

Sectie "## Functionaliteit & property-gedrag" toegevoegd aan 2 bestaande artikelen:

Elk kreeg 2 Brondata-bullets (lookup_property_usage · reference/properties/<Entity> + lookup_workflow). Verificatie: lint 0 broken links / 0 ontbrekende Brondata / geen nieuwe orphans; geciteerde workflow-namen geverifieerd tegen workflows.xml.

Stand: property-gedrag-narratieven nu voor 16 entiteiten.

2026-05-27 — feat: property-gedrag voor Space, WorkOrder, JobInspectionLine, Warehousebewerken

Type: content (vervolg property-usage laag), op verzoek.

Sectie "## Functionaliteit & property-gedrag" toegevoegd:

PmWorkOrder, Equipment en ProcessFunction waren al gedekt (overgeslagen). Elk artikel kreeg property-usage Brondata-verwijzingen (lookup_property_usage · reference/properties/<Entity> + lookup_workflow).

Verificatie: lint 0 broken links / 0 ontbrekende Brondata / geen nieuwe orphans; geciteerde workflow-namen geverifieerd tegen workflows.xml.

Stand: property-gedrag-narratieven nu voor 20 entiteiten.

2026-05-27 — onderhoud: LLM-navigatie naar property-gebruik (MCP-guidance)bewerken

Type: onderhoud (MCP tool-guidance; best-practice onderzoek → beslissing)

Aanleiding: Een MCP kan een werkwijze niet afdwingen (model-controlled, geen harde sequencing in de spec), alleen sturen. Hoogste-impact levers (bron: MCP-spec, MCP/Anthropic-blogs, Block's playbook): (1) server-instructions, (2) tool-descriptions; in-band output-hints zijn secundair (spaarzaam). Doel: de LLM moet betrouwbaar van entiteit → property-gebruik navigeren, niet "verdwalen".

Doorgevoerd (Python + TS, in sync):

Geen wiki-content gewijzigd. Verificatie: beide servers laden; pointer aanwezig in lookup_entity-output.

2026-05-27 — fix(web): relatieve ../ wiki-links resolven correct in de frontendbewerken

Type: bugfix (frontend-renderer) + regressietest

Probleem: gegenereerde reference-pagina's gebruiken relatieve links <a href="/reference/entities/Job">../tables/Job</a> / ../entities/X (1247 pagina's). De frontend-renderer (src/web.ts resolveWikiLinks) stripte ../ i.p.v. relatief te resolven → <a href="/reference/entities/Job">../tables/Job</a> werd een redlink naar /tables/Job (404) i.p.v. /reference/tables/Job.

Waarom niet eerder gevangen: lint.py/health.py gebruiken een permissieve resolver (suffix-match) die deze links als "opgelost" zag; er was geen check tegen de échte frontend-renderer. Drie resolvers, niet in lijn.

Fix: resolveWikiLinks resolvet nu in prioriteit: (1) root-relatief literal, (2) relatief t.o.v. de huidige pagina (met ../.-normalisatie), (3) bare stem. Lost alle 1247 pagina's in één keer op; full-path en bare links blijven werken; #anchors blijven behouden.

Regressietest: src/web.test.ts (toegevoegd aan npm run test:ts) rendert reference-pagina's via de echte renderArticle en eist dat ../-links resolven en er geen redlinks zijn. 27 TS-tests groen.

2026-05-27 — fix(mcp): find_workflows stuurt property-vragen naar lookup_property_usagebewerken

Type: bugfix/guidance (n.a.v. een echte foutieve LLM-sessie)

Observatie: een LLM zocht "waar wordt Job.ScheduledStartDate gebruikt" via find_workflows("ScheduledStartDate", entity="Job") → 9 workflows (enkel met de term in de NAAM) en presenteerde dat als het antwoord. Het juiste lookup_property_usage("Job","ScheduledStartDate") geeft 20 schrijvers + 95 lezers + 3 filters (~118). De LLM zei zelf dat de property-usage-tool niet in z'n lijst stond → verouderde tool-lijst (client moet herverbinden; server hééft de tool, live geverifieerd).

Hardening (Py + TS): find_workflows maakt nu in description én output expliciet dat het een NAAM/beschrijving-zoek is, met een pointer naar lookup_property_usage(entity, property) voor property-gebruik. Zo wordt zelfs een gewoontegetrouwe of net-herverbonden LLM naar de juiste tool gestuurd i.p.v. een onvolledig naam-resultaat als antwoord te nemen.

Verificatie: beide servers laden; hint aanwezig in find_workflows-output.

2026-05-27 — feat: property-gedrag samenvatting per workflow (proof: Job.ScheduledStartDate)bewerken

Type: feature (LLM-gegenereerde property-specifieke samenvattingen via subagents)

Aanleiding: lookup_property_usage toonde per workflow alleen de naam (+ workflow-Description). Die zegt wat de WORKFLOW doet, niet wat er met de PROPERTY gebeurt. De deterministische Assign-waarde was te oppervlakkig (vaak een interne variabele als ${CalculatedStartDate}). Daarom: per (workflow, property) een korte samenvatting laten maken door de workflow-logica te begrijpen.

Aanpak: 3 Haiku-subagents lazen de workflow-XML van de 20 schrijvers van Job.ScheduledStartDate en traceerden hóe/waaróm de property wordt gezet → één NL-zin per workflow. Gemerged naar Data/property_behavior.json (entity → property → workflow → zin).

Integratie: lib/raw_data.py + src/rawdata.ts krijgen get_property_behavior(...); lookup_property_usage toont per regel de property-specifieke samenvatting met de workflow-Description als fallback. Py + TS in sync.

Voorbeeld-output (writers van Job.ScheduledStartDate):

Scope: proof = Job.ScheduledStartDate (20 writers). Opschaalbaar naar alle Job-writers (225) en het corpus (2330 distinct write-workflows) door meer subagent-batches te draaien en te mergen.

Opgeruimd: 5 letterlijke NUL-bytes in src/rawdata.ts (gebruikt als Map-sleutel-scheidingsteken) vervangen door de -escape — identiek runtime-gedrag, schone tekst-source.

2026-05-27 — feat: property-gedrag uitgebreid naar alle Job-writers (596/603 edges)bewerken

Type: data-uitbreiding (vervolg op de property-gedrag-feature)

10 Haiku-subagents hebben de XML van alle 225 schrijvende Job-workflows gelezen en per geschreven Job-property samengevat wat er gebeurt + waarom. Resultaat: 147 Job-properties met per-workflow samenvattingen in Data/property_behavior.json, dekking 596/603 write-edges (98,8%); de 7 ontbrekende vallen terug op de workflow-Description. Gevalideerd: alleen echte write-edges behouden (geen gehallucineerde props), alle parts valide JSON.

lookup_property_usage("Job", <property>) toont nu voor vrijwel elke schrijvende workflow een property-specifieke zin (bv. Status: "naar Approved vanwege approval"; Priority: "default uit settings als leeg"; TargetDate: "herberekend uit ScheduledStartDate + Duration").

Opschaalbaar naar het hele corpus (2330 distinct write-workflows) via dezelfde subagent-batch-aanpak. Reads/filters nog op Description-fallback.

2026-05-27 — feat: property-gedrag uitgerold over het HELE corpus (5037/5037 write-edges)bewerken

Type: data-uitbreiding (afronding van de property-gedrag-feature)

De property-gedrag-laag is nu volledig: alle 5.037 write-edges (entity.property × workflow) over 641 entiteiten hebben een property-specifieke NL-zin in Data/property_behavior.json. Dekking 100%.

Aanpak: corpus-brede pijplijn tools/_pu_behavior_gen.py (plan/merge) bouwt de nog-niet-gedekte write-edge-map (index minus reeds gedekt), dumpt per golf 10 batches × ~30 workflows als _batch_<i>.json + per-workflow XML, en valideert bij merge dat elke zin een échte write-edge betreft (geen gehallucineerde props). In 8 golven (na de Job-fases) verwerkten telkens 10 Haiku-subagents de workflow-XML en traceerden hóe/waaróm elke doel-property wordt gezet. Merge-resultaten per golf: +709, +580, +422, +520, +629, +698, +644, +238 (+1 handmatig) edges; alle parts valide JSON (één BOM-afkeuring opgevangen, edges keerden terug in de pool en zijn in een latere golf alsnog gedekt).

Integratie: ongewijzigd t.o.v. de Job-fase — get_property_behavior(entity, property, workflow) in lib/raw_data.py + src/rawdata.ts (exacte pariteit geverifieerd: write=5037, entities=641 in beide), lookup_property_usage toont per schrijvende workflow de property-specifieke zin met workflow-Description als fallback. Reads/filters blijven op Description-fallback.

Resultaat: een willekeurige lookup_property_usage(<entity>, <property>) levert nu voor vrijwel elke schrijver een concrete zin (bv. "Status → Approved vanwege approval", "BookDate = systeemdatum indien leeg", "QuantityOut beperkt tot beschikbare voorraad in magazijnlocatie"). Wegwerp-intermediates (tools/_pu_behavior/) opgeruimd.