You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Cold interactive launch issues three sequential devpod ssh exec round trips into the same container — tools probe, tools transfer, hostname — before the attach. At the map's working number of ~0.45–0.56s per devpod round trip, that is roughly 1.4s of the cold path spent on process spawn and connection setup rather than work. Decide whether these collapse, and into what.
This fog was parked pending the tools-transfer decision, which is now settled on #141: the probe becomes three-state (provisioned/lendable/absent), the payload stays all-or-nothing, and ensure_tools never runs on fast-attach — so this is a cold-path-only question and the warm path must not be touched.
Decide against the principles (maintainability > simplicity):
Collapse or overlap? Options include: one devpod ssh invocation running a single composed remote script that probes, receives, and reports the hostname in one round trip; keeping them separate but overlapping the independent ones concurrently; or leaving them sequential because the coupling costs more in legibility than 1.4s buys. Note the probe's result decides whether the transfer happens, so probe→transfer is a genuine data dependency — a naive merge would either always transfer or need the remote script to branch. The hostname fetch has no such dependency.
Where does the composed script live?Three-state tools probe: only the official claude layout counts as provisioned #151 built a pure probe_script that reports resolved paths as marked key value lines and names no state at all — the host decides the state from those facts via _is_official_claude, the same predicate _claude_source uses, so the two sides cannot drift. (This supersedes the earlier "prints exactly one of three states" wording, which is what let a shim under versions/ be trusted; see the amendment on Three-state tools probe: only the official claude layout counts as provisioned #151.) It never executes the candidate binary. If a composed script is the answer, it must reuse that script rather than growing a second copy of the probe logic (principle 2: one concept beats two that overlap).
Failure legibility. Three round trips fail with three distinguishable errors; one composed script can fail opaquely. Say how a failure in the merged form still names which stage failed — this is the main cost against merging and must be answered, not waved.
How is the outcome tested?test/test_devpod_spawn_counts.py pins exact devpod argv sequences per command and is the established seam for round-trip regressions; a reduction here should show up as a changed pin there, so the saving cannot silently regress.
Code changes graduate as build ticket(s); this ticket only decides. Measure the actual per-round-trip cost before and after rather than assuming the ~0.5s working number — PR #156 adds env-gated timing instrumentation that should make this measurable.
Blocked by #151 — the probe's final shape is an input to this decision.
Amendment (2026-08-09). Question 2 originally described #151's probe as printing one of three state tokens. It does not, and deliberately so — see the amendment on #151. Any composed script this ticket designs must therefore compose a script that reports facts, and must keep the state decision on the host side; re-introducing state naming in the container would restore the two-predicate drift that #151 removed. The "reuse rather than grow a second copy" constraint is unchanged and now matters more, since the thing being reused is a fact reporter rather than a classifier.
Question
Cold interactive launch issues three sequential
devpod sshexec round trips into the same container — tools probe, tools transfer, hostname — before the attach. At the map's working number of ~0.45–0.56s per devpod round trip, that is roughly 1.4s of the cold path spent on process spawn and connection setup rather than work. Decide whether these collapse, and into what.This fog was parked pending the tools-transfer decision, which is now settled on #141: the probe becomes three-state (
provisioned/lendable/absent), the payload stays all-or-nothing, andensure_toolsnever runs on fast-attach — so this is a cold-path-only question and the warm path must not be touched.Decide against the principles (maintainability > simplicity):
devpod sshinvocation running a single composed remote script that probes, receives, and reports the hostname in one round trip; keeping them separate but overlapping the independent ones concurrently; or leaving them sequential because the coupling costs more in legibility than 1.4s buys. Note the probe's result decides whether the transfer happens, so probe→transfer is a genuine data dependency — a naive merge would either always transfer or need the remote script to branch. The hostname fetch has no such dependency.probe_scriptthat reports resolved paths as markedkey valuelines and names no state at all — the host decides the state from those facts via_is_official_claude, the same predicate_claude_sourceuses, so the two sides cannot drift. (This supersedes the earlier "prints exactly one of three states" wording, which is what let a shim underversions/be trusted; see the amendment on Three-state tools probe: only the official claude layout counts as provisioned #151.) It never executes the candidate binary. If a composed script is the answer, it must reuse that script rather than growing a second copy of the probe logic (principle 2: one concept beats two that overlap).test/test_devpod_spawn_counts.pypins exact devpod argv sequences per command and is the established seam for round-trip regressions; a reduction here should show up as a changed pin there, so the saving cannot silently regress.Code changes graduate as build ticket(s); this ticket only decides. Measure the actual per-round-trip cost before and after rather than assuming the ~0.5s working number — PR #156 adds env-gated timing instrumentation that should make this measurable.
Blocked by #151 — the probe's final shape is an input to this decision.
Amendment (2026-08-09). Question 2 originally described #151's probe as printing one of three state tokens. It does not, and deliberately so — see the amendment on #151. Any composed script this ticket designs must therefore compose a script that reports facts, and must keep the state decision on the host side; re-introducing state naming in the container would restore the two-predicate drift that #151 removed. The "reuse rather than grow a second copy" constraint is unchanged and now matters more, since the thing being reused is a fact reporter rather than a classifier.