- wire the directory pick's continue flag through InsertTextRequest to the
input shell, which re-tracks at the caret so descent reopens completion
(the flag was produced and forwarded but never consumed)
- guard the image-only send against a second Enter during the Host round-trip
- keep text appended after the sent snapshot when a submit settles ok; only
interleaved edits clear with the committed content
- drop the dead restoreImages left from the sink rewrite
- read recall labels through a shared defensive sessionRecallLabels helper
instead of unchecked casts over durable log data, and take the reference
summary separator from the locale dictionary
- align the composer specs merged from master with the transactional submit
contract (sinks resolve SubmitOutcome, settlement is awaited, call
assertions carry the AbortSignal), and restore master's forms where the
divergence served nothing (queue-mode sink case, single-line filter
expectation, component-identity slot lookup)
A test file under packages/client now says which face it covers:
`*.client.spec.{ts,tsx}` and its `*.client.{ts,tsx}` helpers belong to the
Client aggregate, `*.host.spec.ts` to the host aggregate. The carrier's four
node-half specs take the Host suffix.
The two suffixes are mutually exclusive, so each aggregate excludes the
other's and both keep one broad test glob: `exclude` wins over `include`, and
`packages/client/**` no longer has to be excluded wholesale from the host
program with per-file `files` entries carved back out of it. A Host-face spec
that reaches only Host source therefore needs no cross-face project
reference, which the split-project rule rejects.
vitest still discovers every file through `**/*.spec.{ts,tsx}`.