build(bpmn): adopt central @miragon/bpmnlint-plugin-rules - #27
Merged
Conversation
…ng gate Replace the bare `bpmnlint:recommended` setup with the central Miragon plugin, which bundles the structural rules, the Camunda-7 deployability layer and the Miragon BPMN conventions behind one dependency. - add @miragon/bpmnlint-plugin-rules@0.5.0 (exact pin) - bump bpmnlint 11.12.1 -> 11.13.0 (exact; plugin peer needs >=11.13) - .bpmnlintrc extends bpmnlint:recommended + camunda-compat/camunda-platform-7-24 (+ camunda moddleExtension) + plugin:@miragon/rules/all (default config, no rule overrides), so every Miragon rule blocks at error - lint:bpmn runs with --max-warnings=0 so warnings (e.g. standard-size, fake-join) also fail the build; the pre-commit hook and pre-merge CI job pick this up No custom rules existed to remove (the old .bpmnlintrc only extended recommended).
Adjust the MODELS (not the rules) to satisfy the plugin's default config. - element-id-naming (default camelCase): boundary events adopt the `event_` prefix (boundary_contractNotSigned -> event_contractNotSigned); the existing camelCase local parts are kept as-is - no-generated-ids: sequence flows get readable, stable camelCase ids (Flow_0cq39pq -> flow_requestToValidation, E01 -> flow_withdrawalToReversal) - fake-join (bpmnlint:recommended, now blocking via --max-warnings=0): the three rejection paths (invalid / not-solvent / not-signed) now merge through an explicit exclusive gateway `gateway_rejectionJoin` before `serviceTask_sendRejection` - regenerate the typed process API (generateBpmnModels); SCREAMING_SNAKE constants are stable except the boundary->event prefix change (BOUNDARY_CONTRACT_NOT_SIGNED -> EVENT_CONTRACT_NOT_SIGNED, updated in the test) - propagate flow/element ids to the Bruno + Playwright scenarios (activity ids / task-definition keys sent to engine-rest) and a few doc comments bpmnlint --max-warnings=0 is green; ./gradlew :service:app:test passes; openapi.json unchanged; frontend typecheck clean.
emaarco
force-pushed
the
emaarco/migrate-to-miragon-bpmnlint
branch
from
August 20, 2026 15:30
6ebdf39 to
57d9eaf
Compare
emaarco
enabled auto-merge (squash)
August 20, 2026 15:34
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
Migrates BPMN linting to the central
@miragon/bpmnlint-plugin-rulesplugin (v0.5.0) using its defaultallconfig with no rule customization, wires it as a blocking gate that fails on warnings too, and adjusts the models (never the rules) so both diagrams pass.Changes
Adopt the plugin as a blocking gate (
build(bpmn))@miragon/bpmnlint-plugin-rules@0.5.0(exact pin); bumpbpmnlint→11.13.0(exact — the plugin importsbpmnlint/rules/standard-size, first exported there)..bpmnlintrcextendsbpmnlint:recommended+plugin:camunda-compat/camunda-platform-7-24(+camundamoddle extension, matching the CIB seven engine) +plugin:@miragon/rules/all. Norules{}overrides.lint:bpmnruns with--max-warnings=0, so warnings block the build too. The pre-commit hook andpre-merge.ymljob pick this up automatically (Node 24, ≥ the plugin'snode>=22).Conform the models (
refactor(bpmn))element-id-naming(default camelCase): boundary events adopt theevent_prefix (boundary_contractNotSigned→event_contractNotSigned); existing camelCase local parts kept.no-generated-ids: sequence flows get readable, stable camelCase ids (Flow_0cq39pq→flow_requestToValidation,E01→flow_withdrawalToReversal).fake-join(frombpmnlint:recommended, now blocking): the three rejection paths merge through a new explicit exclusive gatewaygateway_rejectionJoinbeforeserviceTask_sendRejection.BOUNDARY_CONTRACT_NOT_SIGNED→EVENT_CONTRACT_NOT_SIGNED) updated in its test. Propagated ids to the Bruno + Playwright scenarios and doc comments.Verification
bpmnlint --max-warnings=0: green, 0 findings../gradlew :service:app:test: passes (ArchUnit, JGiven process tests driving the engine, OpenAPI export).openapi.json: no drift. Frontendtypecheck: clean.Notes for the plugin team
.bpmnlintrconly extendedbpmnlint:recommended.element-id-namingdefaults to camelCase; the boundary-event convention forces theevent_prefix. That's a default, not a customization — flagged only so the team can decide if the preset should differ.