Loading
Keep concurrent writes on incident resume, uninstall orchestra_server cleanly, use the resolved Kessai client, keep node id case, and fix five more defects
Closes https://www.drupal.org/project/orchestra/issues/3633206
One commit per defect:
- Incident resume keeps concurrent writes.
IncidentResumeFormwrote back every variable it showed, so a value another branch wrote after the form was built was put back. It now writes only the values the operator changed. The form carries the values it showed in hidden fields, because on submit it is rebuilt from the variables as they are then. Test:IncidentResumeFormTest(submits through the form builder with a variable changed in between). - Workflow usage counts only local subprocess parents.
WorkflowUsageread any node'sprocesssetting, so a remote child's name held a local workflow of the same name. It now asks the task type, through the staticSubprocessTaskInterface::getChildWorkflowId(array $configuration), so no plugin is built per node (counting 60 workflows of 3 subprocess nodes: 0.28 ms vs 0.25 ms on 1.x, medians of 7, same peak memory; delete paths only). Test:RemoteDeletionTest::testRemoteChildDoesNotReferenceTheLocalNamesake(). - Node names keep their case. The model editor lowercased every node name on save, renaming BPMN.io nodes such as
Activity_1and orphaning their layout and translations. A refused duplicate names the existing node as it is spelled. Test:OrchestraCmFormTest::testNodeNameKeepsItsCase(). - Payment steps use the resolved Kessai client.
PaymentInteraction,SettleTask,PaymentLapsedandPaymentOperationsControllerfetchedkessai.payment_engineby name. On a site with only a remote client they could not be built. Test:DeclaredDependenciesTest::testEveryPaymentStepUsesTheResolvedClient(). - orchestra_server uninstalls. Its
.installremoved the consumer fields itself, then core removed them again and the uninstall stopped on an already deleted field. Core handles them now. Test:ModuleUninstallTest. - One base path in links. The instance page's back link, the webform escape buttons and the webform signal URLs passed an address that already held the base path to
Url::fromUserInput(), giving/sub/sub/...on a subdirectory install. The payment interaction's fix moved toInternalPathPolicy::buildUrl(), used by all four. Test:SubdirectoryUrlTest. - Bulk actions say what they did. The
orchestra_vboactions returned nothing, so a skipped row looked done. Each row now gets a translated message, including a cancel that lost to another actor. Tests:ProcessActionsTest::testSkippedRowsSayWhy(),testTheCancelThatLostSaysSo(). - Remote child process is checked. The remote subprocess node refuses a process the remote does not list. It asks only when the remote or process changed from the saved settings, which the forms editor checks and the BPMN modeler (validating with the settings it saves) does not. It accepts the process when the remote does not answer. Test:
RemoteSubprocessTest::testTheChildProcessIsOneTheRemoteLists(). - Label columns load workflows once.
WorkflowLabelandNodeLabelpreloaded workflows and then loaded them again per row (config entities have no static cache). They now keep the page's workflows (PageWorkflowsTrait).NodeLabelno longer loads instances.WorkItemLabeldrops its unused instance load and hands the page's workflow toWorkItemManagerInterface::getLabel(), which takes it as an optional argument and ignores a workflow the token does not name. Test:ShippedViewsTest::testTheLabelColumnsLoadTheWorkflowsOnce().
Every test fails on 1.x.
AI-Generated: Yes (Claude Code was used to audit the module and to write this code, its tests and this description.)
Edited by Frank Mably