Skip to content

Sync main to acc v1.9.9#29

Merged
sgort merged 45 commits into
mainfrom
acc
Jun 30, 2026
Merged

Sync main to acc v1.9.9#29
sgort merged 45 commits into
mainfrom
acc

Conversation

@sgort

@sgort sgort commented Jun 30, 2026

Copy link
Copy Markdown
Owner

No description provided.

sgort and others added 30 commits May 19, 2026 15:25
Auto-detect shell/subprocess relationships on BPMN import and startup;
remove unused DsoWerkzaamheid and zoekActiviteiten imports.
…caffold downloads

- Added Applicable Rules section to Activity Detail panel showing toepasbare regels
  from the DSO Uitvoeren Gegevens API, grouped by Conclusie / Indieningsvereisten
- Backend: new /toepasbare-regels routes (metadata, STTR, DMN extraction, form scaffold)
- Backend: uitvoerenGegevensBaseUrl added to both pre and prod DSO config
- Form scaffold parses uitv:uitvoeringsregels from dmn:extensionElements (boolean→checkbox,
  list→select with options, number→number, string→textfield/textarea, bijlage→textfield)
- DMN extraction returns the full dmn:definitions element as a standalone file
- STTR route now sends Content-Disposition: attachment to trigger browser download
- Linked TreeFellingPermitSubProcess to nl.imow-gm0995.activiteit.HoutopstandVellen
  via ronl:dsoActiviteitUrn; bumped example version to re-seed
- Added verified STTR example outputs for Gemeente Lelystad HoutopstandVellen
- Release v1.9.3
@
feat(dso): location-scoped name search in Activities tab (Phase 2d)

Fixing a location preset now loads the authority full activity set in
one call (pageSize 200) and reveals a name search box that live-filters
by omschrijving client-side. Makes activities like HoutopstandVellen
findable without walking the hierarchy.
@
@
feat(dso): import indieningsvereisten form scaffold into LDE (Phase 4.2)

Adds an "Import into LDE" button to indieningsvereisten entries in the
Applicable Rules panel. The DSO form scaffold is already a form-js
schema, so it is saved straight into the form store via
FormService.saveForm (localStorage + assets API), stamped with the
execution-platform metadata the editor and Operaton deploy expect. It
lands in the Form Editor as a wip draft named after the activity and
tagged with the authority as organization.

DMN import (Phase 4.1) stays download-only: DMNs have no local asset
store (the picker reads from TriplyDB via SPARQL), so importing needs an
architectural decision (deploy-to-Operaton / validate / local store),
deferred and documented in the phase plan.
@
@
fix(dso): resolve readable authority name for imported form organization

The RTR API only returns the authority code (e.g. GM0995), so imported
forms were tagged with the code instead of a name. Add a shared
LOCATION_PRESETS table + authorityLabel() resolver: known authority OINs
(Lelystad, Flevoland) map to their names, others fall back to the code.
The Activities tab presets now reuse the same table.
@
@
chore: release v1.9.4

Changelog entry for Phase 2d (location-scoped activity name search),
Phase 4.2 (import form scaffold into LDE), and the readable authority
name fix for imported forms.
@
@
chore: gitignore .claude/ local config and memory

Claude Code local settings and per-machine memory live under .claude/
and encode a machine-specific absolute path, so they are not portable
and should not be tracked.
@
@
feat(dso): publish-via-CPSV-Editor handoff deep-link

Add a "Publish via CPSV Editor" action on Conclusie entries in the
Applicable Rules panel. It opens the CPSV Editor with a deep-link
(dsoImport=dmn + identifiers + DSO metadata); the CPSV Editor fetches
the DMN XML from the shared backend, so the payload never rides in the
URL. New VITE_CPSV_EDITOR_URL env var per environment.

Also: gitignore local .env (committed envs remain .env.development /
.acceptance / .production) and the v1.9.4 changelog entry.
@
@
fix(dso): normalize STTR-extracted DMN for Operaton deploy + eval

The Sogelink STTR DMN neither deploys nor evaluates on Operaton as-is.
normalizeDmnForOperaton now: upgrades DMN 1.2 -> 1.3 (engine only
transforms 1.3); injects ids on inputs/inputExpressions (engine rejects
inputs without one); renames variable names to FEEL-safe identifiers and
rewrites their inputExpression references (hyphens/spaces broke FEEL
evaluation); and types output columns (BIZ-004). Rule logic and output
value literals are left untouched.

Verified against operaton.open-regels.nl: deploys all 7 decisions and the
root decision evaluates (HTTP 200) where it previously threw a FEEL
exception. historyTimeToLive remains the deployer (CPSV Editor) concern.

Updates the phase plan and the committed HoutopstandVellen example DMN.
@
@
feat(dso): add historyTimeToLive so extracted DMN is deploy-ready

This Operaton instance enforces camunda:historyTimeToLive at deploy.
normalizeDmnForOperaton now declares the camunda namespace and stamps
historyTimeToLive="180" (matching the LDE BPMN-template convention) on
every <decision>, so the extracted DMN deploys as handed off — the CPSV
Editor deploys it as-is, no patching. Decisions that already declare
HTTL are left untouched.

Verified: the normalized HoutopstandVellen DMN now deploys directly
(all 7 decisions) and the root decision evaluates, with no external HTTL.
@
@
feat(form): green DSO badge for forms imported from DSO

Forms imported via the DSO Applicable Rules panel now get status "dso"
and render a green DSO badge in the Form Editor list, instead of the
generic yellow WIP badge. form_schemas.status is unconstrained TEXT, so
the new value persists fine; DSO forms stay editable like wip forms.

Includes the v1.9.5 changelog entry (HTTL deploy-ready DMN + this badge).
@
This Operaton instance enforces camunda:historyTimeToLive at deploy.
normalizeDmnForOperaton now declares the camunda namespace and stamps
historyTimeToLive="180" (matching the LDE BPMN-template convention) on
every <decision>, so the extracted DMN deploys as handed off — the CPSV
Editor deploys it as-is, no patching. Decisions that already declare
HTTL are left untouched.

Verified: the normalized HoutopstandVellen DMN now deploys directly
(all 7 decisions) and the root decision evaluates, with no external HTTL.
Forms imported via the DSO Applicable Rules panel now get status "dso"
and render a green DSO badge in the Form Editor list, instead of the
generic yellow WIP badge. form_schemas.status is unconstrained TEXT, so
the new value persists fine; DSO forms stay editable like wip forms.

Includes the v1.9.5 changelog entry (HTTL deploy-ready DMN + this badge).
sgort and others added 15 commits June 11, 2026 08:22
test(shacl): add CPRMV/CPSV-AP/RONL validation fixtures + changelog

Add valid/invalid SHACL fixtures across all three layers and a malformed
Turtle case for the parser path:
  - cprmv-nonconformant.ttl (pairs with the renamed cprmv-conformant.ttl)
  - cpsv-ap-rule-nonconformant.ttl
  - org-collision-{pass,fail}.ttl
  - malformed.ttl
Rename cprmv-test.ttl -> cprmv-conformant.ttl for a clear conformant/
nonconformant pair. Declare the cprmv key on the frontend ValidationResult
layers type. Note the SHACL/CPRMV work under v1.9.5 in the changelog.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
@
…s (v1.9.6)

- getAllDmns and chain-link queries only matched cprmv:DecisionModel
  under the old 0.3.0 namespace, so DMNs published under the new CPRMV
  0.4.1 namespace (e.g. vast_bedrag_op_vestiging) were missing from
  /v1/dmns and the ChainBuilder DMN picker. Both namespaces are now
  supported side by side until existing 0.3.0 data is migrated.
- ChainBuilder "Fill with test data" rendered Integer/Double inputs as
  empty when the RDF-sourced test value was 0 (0 || '' = ''), making it
  look like nothing was filled in. Now uses ?? so 0 displays correctly.
SHACL issue messages and focus-node locations were cut off with an ellipsis
and could not be read in full.

- frontend (ShaclValidator IssueRow): the location used a single-line CSS
  truncate. Location now wraps (break-all), message wraps (break-words), and
  both expose the complete text on hover via a title tooltip.
- backend (shacl-validation.service offendingValues): removed the 60-char cap
  that truncated offending values reported for cardinality (maxCount /
  uniqueLang) violations; the full value is now included in the message
  (whitespace still normalized).
- changelog: add v1.9.7 (bug fix), demote 1.9.6 to Released.
…shapes

Closes two coverage gaps identified in the CPSV Editor field-mapping audit:
- cprmv:ParameterWaarde had no SHACL shape; Parameters tab was entirely
  unvalidated. New shape requires skos:notation [1,1] and skos:prefLabel [1,n];
  all other properties (schema:value, unitCode, dct:description,
  cprmv:validFrom/validUntil) are optional [0,1].
- cprmv:TemporalRule had no SHACL shape; validFrom/validUntil/confidenceLevel/
  isBasedOn extensions on Rules were unvalidated. New shape captures all four
  as optional [0,1] with correct datatypes.
Also adds skos:, schema:, dct: prefix declarations required by the new shapes.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
deployProcess now stamps a process-level <camunda:property name="boardOwner">
onto the main BPMN at deploy time. The value is taken from an explicit
boardOwner request field, or derived from the process's candidate groups
(infra/rip groups -> infra-board, caseworker/hr groups -> caseworker).

Injection is idempotent and conservative: on any unexpected BPMN shape the
original XML is deployed untouched, so existing bundles never break. Consumed
downstream by ronl-business-api to split open tasks and the Projecten archive
by board without a hardcoded process allowlist.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Adds an isolated "Board ownership" rectangle above "Resources to deploy" with
segmented buttons: Auto (shows the auto-detected board), Infra-board, Caseworker,
None (leave untagged). Auto omits boardOwner so the backend derives it; an
explicit board overrides; None sends '' to deploy untagged.

Backend boardOwner semantics made explicit: undefined=derive, ''=untagged,
value=override.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Deploy modal now requires a board: the "None (leave untagged)" option is gone,
Deploy is disabled until a board resolves (auto-detected or picked), and the
resolved board is sent on both the Operaton deploy and the record write-back.

Persisted via a new process_definitions.board_owner column (markDeployed) and
surfaced through /bundles/public so downstream consumers (ronl-business-api
Procesbibliotheek) can display it.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Task_MapRoleOutputs now sets a leadRole process variable from the intake
projectType (contractbeheer → manager-pb, else projectleider). This is the
ownership signal the Infra-board Portfolio ROL filter reads — distinct from the
task candidateGroups. Changelog v1.9.9 updated.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
@sgort sgort merged commit bb3f1da into main Jun 30, 2026
4 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant