SessionService::sendMessage() is deprecated in favor of postMessage() + WorkflowLauncherInterface
## Problem / motivation
`Drupal\flowdrop_session\Service\SessionService::sendMessage()` does two
unrelated things in one call: it **appends a user message to the session's
room**, and it **launches a workflow pipeline** for that message. Conflating
the two means callers cannot post a message without triggering execution, and
cannot launch a pipeline from an existing message. It also couples the session
service to the executor, which now owns launching behind a BC-locked interface.
The responsibilities have since been split into two focused APIs:
- `SessionService::postMessage()` — append a message to the room only.
- `WorkflowLauncherInterface::launch()` (HTTP: `POST /run`) — start a pipeline
for a workflow, with validated, named inputs.
## Deprecated
`SessionService::sendMessage()` is deprecated and will be removed. Callers
should post the message and launch the pipeline as two explicit steps.
## Before
```php
$message = $sessionService->sendMessage($session, $content, $inputs);
After
// 1. Append the user's message to the room.
$message = $sessionService->postMessage($session, $content);
// 2. Launch the workflow pipeline for the session.
$result = $workflowLauncher->launch(
$session->getWorkflow(),
$inputs,
new LaunchOptions(sessionId: $session->id()),
);
```
The workflow launcher resolves named inputs against the workflow's declared
input ports, validates them, and dispatches via the workflow author's declared
orchestrator (async queue worker or in-process deferred execution). The caller
no longer controls the dispatch path.
Remaining work
The FlowDrop playground (flowdrop_playground) is the last in-tree consumer of
sendMessage(). The deprecation call site there is suppressed with a scoped
@phpstan-ignore method.deprecated until the playground is migrated to the
post + launch flow, after which the method is removed.
> Change record: [#3593549](https://www.drupal.org/node/3593549)
issue