Repository navigation
refactor: drop Camunda Forms and complete user tasks through domain endpoints - #112
Merged
emaarco merged 2 commits intoNov 7, 2026
Merged
Conversation
…ndpoints
Both user tasks carry no form in any example any more. Every task is
completed through a domain endpoint: the new
POST /api/bike-leasing/{id}/clarify-return (confirm-only, 202) joins
clarify-alternative. Bruno and Playwright no longer complete tasks
through the engine REST API, and the Tasklist scenario is gone.
Each example records the decision in an ADR that points to
process-engine-recipes for the other form types.
Closes #27
…d Fluxnova happy path
emaarco
deleted the
emaarco/refactor-drop-camunda-forms-complete-user-tasks
branch
November 7, 2026 13:32
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.
Why
A user task could be completed two ways: through its Camunda Form in the Tasklist (or the engine REST API), which bypasses the domain services, or through a domain endpoint.
Clarify return with supplierwas even form-only on purpose. The.formfiles were one more artifact to keep in step with the variables the process reads. Every example now has one pro-code path, and the logic is the same in all of them.What
camunda:formRef/zeebe:formDefinitionremoved from both user tasks with bpmn-cli (element ids unchanged), documentation now names only the domain endpoint. The.formfiles and every form entry in deployment patterns, deployment adapters and deployment tests are gone.POST /api/bike-leasing/{applicationId}/clarify-returnin every example, temporal included: no body, answers 202, confirm-only (nothing new on the aggregate, no process variables).ClarifyReturnUseCase,ClarifyReturnService,ClarifyReturnControllerand their tests are byte-identical across examples;LeasingProcess.completeReturnClarificationis implemented the way each process adapter already completesclarifyAlternative. Process tests complete the task through the adapter;openapi.jsonis re-exported (Kotlin controller returnsResponseEntity<Void>, so Kotlin and Java export the same contract).features/clarify-returnwith a "rücknahme geklärt" button in the WITHDRAWN alert on the detail page, regenerated client, copy inde/en.e2e/03-abort.spec.tsclicks the button;helpers/engine-rest.tsonly waits for the task.03-abortcompletes clarify-return through the new endpoint;10-alternative-via-tasklistis deleted in every example.zeebe:formDefinition externalReferencewithout a form, because VanillaBP 1.10 binds@WorkflowTaskby it and refuses to start without it.ClarifyReturnTasknow stores the task id on the workflow aggregate (migrationV3__clarify_return_task.sql).applicationIdintocallActivity_cancelBikeOrder, so the user task pool can find the clarify-return task.EngineApiConfigurationsubscribes to both task keys.returnClarifiedto<applicationId>-cancel-order.camunda-compat/user-task-definition.*-user-tasks-without-forms.mdthat links the process-engine-recipescibseven-user-task-forms(Camunda 7 family) orzeebe-external-tasklist(Camunda 8) recipe for the other form types. AGENTS.md, READMEs, Bruno READMEs, skills and thereview-processagents no longer describe the form path or the form-only anti-pattern.drift.yml/drift.lock.yml: stale form and Tasklist entries removed, the new single-example files (ADRs, fullstack frontend slice, vanillabp migration) classified; three formerly differing files are identical again and lost theirdiffersentry.Verification
./gradlew build(Kotlin) and./mvnw verify(Java) in all 12 examples, including process tests and the generated process API drift (unchanged except the newapplicationIdinput in the two process-engine-api C7 examples).npm --prefix frontend run verify(37 tests),api:check,npm run lint:bpmn.npm run lint:bpmnin the BPMN examples with lint tooling installed.npm run drift("12 examples in step"),npm run generate:check,scripts/check-owner.sh,npm test(48/48).Out of scope / Follow-ups
returnClarifiedsignal sent before the cancel-order workflow waits for it and consumes it later; rejecting it would need an update with a validator in the workflow.Closes #27