fork-trust: keep failed starts on the selected harness

Merged
TE
10d ago
+120-3

A failed start of the selected harness now leaves the waiting message unsent. It cannot silently start the default harness or send the message to a previous chat. Successful starts keep their existing ordering.

Relevant notes:

It was codex? Not claude? Picker has some problems
If u don't trust it, u can't get it

The shared session-start path preserves a creation's failure and refuses empty results. Nine behavioral cases drive the real client against a mock protocol endpoint: rejected/empty starts with and without a previous chat, both direct sends and the app's separate session preflight, plus successful selected-harness delivery.

Observed / Not run

  • Focused command through cmux-ci test: bun test src/agent-session/acpmux/sessionStartFailure.test.ts from webviews/.
  • Initial regression, test-only commit 49cfcd1204b94b0d185f57508f366ac5d4715864: run 40482230069, four failing fallback cases and a passing success control.
  • Expanded preflight regression, commit 561c2866220a68861d3f39b8b956b93f6faab0b4: run 40483999047, the two empty-preflight cases fail, seven pass.
  • Final head fc8e090afd3468d04437c0276aa2636845820d11: run 40484136695, nine pass, zero fail. The tested snapshot and PR head share tree 6e7b2125a7c3b8aba9294eccbdee814efa144ea8.
  • Changed-file formatting/lint and prepush gate pass. pr-overlap found no overlapping open PR.
  • Full web lint stops on unchanged base 8ff9fcfca4ca5c77d6dbdf0f4e4e38efc55a4591 issues: SendScrollSetting gallery type scale, channelsCard/store formatting, App hook dependencies, stale protocol generated methods. None of those files change here.
  • No capture: transport-only change; no layout or visual styling changes. Native app tests were not run.
  • The earlier independent review identified empty-preflight fallthrough; the final head repairs it. Requested lane-place review and its documented review-router fallback were unavailable. An independent Codex runtime subagent with a fresh context at xhigh reviewed the final diff and call paths, without builds or edits.

Review (final_transport_review, Codex xhigh): SHIP at fc8e090afd3468d04437c0276aa2636845820d11

Agent session: agent session