ffce30afa2
Behaviour-preserving refactor ahead of the second-adapter work. All herdr transport shared by any peer kind — tab/pane placement, the CB-306 spawn-readiness gate, unique naming + CB-117 orphan reap, teardown, listing, cwd resolution, and the peer-neutral git-forge grant — moves into a new abstract HerdrPeerLauncher (Template-Method base). ClaudeCodeLauncher becomes a final subclass supplying only the two Claude-specific seams: the `claude` name prefix and buildLaunch(), which encodes the subscription boundary (ANTHROPIC_BASE_URL + SubscriptionGuard assert, inline --mcp-config and --append-system-prompt reply charter). The base owns the injectable clock + sleeper for the readiness gate; the poll interval is baked into the sleeper, so the vestigial spawnReadyPollMs field is dropped from the base and from the full testability constructor (the explicit sleeper already encodes it). The 6-arg and 8-arg production constructors keep their signatures; three full-ctor test sites drop the now-unused poll argument. No behaviour change: 242 tests green, both refactored files 0 IDE problems.