Share the subprocess map fields and the action-link views field shape
Moves two pieces of the subprocess mapping contract onto the trait that exists to hold it, and gives the three action-link Views fields the base class the module already uses twice for that shape.
SubprocessMappingTrait gains buildMapFields() (the input/output textareas, which were byte-identical in both nodes) and validateMapNames() (the reserved-name refusal, identical apart from its comment). Neither node gains a dependency; both already used the trait.
That refusal had no test on the remote node - it was passing there only because the loop had been pasted in - so RemoteSubprocessTest now asserts it, and the local node keeps its own assertion in PluginSettingsFormTest. Between them the shared rule is pinned from both ends. Emptying validateMapNames() fails the new test.
ActionLinkFieldBase carries the empty query(), clickSortable() FALSE and the user/url cache contexts, with the reasoning written once instead of three drifting comments. orchestra_inbox_views already declared a dependency on orchestra_views while importing nothing from it.
AssignmentCacheTrait deliberately stays on the concrete classes: it reads the matcher and the viewer off its host, as its own docblock requires, and phpstan confirms the base is not a valid host for it.