Repository navigation
Say what Trips is, and correct the Runner impl count #409
Description
Question
Doc-only, three places. Trips is a third fake devpod the conformance corpus does not cover decided that Trips is a recording harness rather than a fake devpod, that nothing joins test/fixtures/devpod/conformance.json, and that the argv guard it asked for already exists. What is left is that none of that is written where a reader lands.
1. Runner's doc line — rust/devlaunch-runner/src/lib.rs:384-385 says "Implemented once for real processes ([ProcessRunner]) and once for tests (devlaunch_test_support::FakeRunner)." There are nine impls. Replace the count with the shape, which is what a reader actually needs:
- one production impl,
ProcessRunner; - one shared fake,
FakeRunner— call recorder, argv-prefix response table, andDevpodMachinebehind them; - seven test-local wrappers over those two. Three of them route by program name so the programs they do not fake reach real processes:
FakeDevpodRealGit(flows/listing.rs:1208),Devpod(flows/lifecycle.rs:3417),StubbedLfs(flows/workspace_clone.rs:4026).ScriptedRunner(core/testing.rs:88) adds the timing exclusion,FakeGit(flows/repo_manager.rs:1855) adds filesystem effects forgit clone, andTrips(flows/provision.rs:2463) withRebuilding(:4876) answer by call index.
Do not write "seven" as a number that will rot the way "once" did — say the structure and name the three routers, since those are the ones a reader currently learns by grepping.
2. Trips' doc comment (rust/devlaunch-core/src/flows/provision.rs:2359-2371) — say it is a recorder, not a fake devpod: it answers by call index (:2442) and never reads argv to decide an outcome, holds no workspace state, and therefore cannot be driven over a corpus row, which is given state → argv → exit + then state. Say that the fake devpod the rest of the suite meets is DevpodMachine, reached through FakeRunner, and that it is the corpus-covered one — so a reader does not conclude a third fake escaped #309.
3. Trip::script (:2347-2355) — say which argv it is re-parsing (setup_pass, :1939-1944), and that the expect is the guard: the payload moves or the flag is renamed, and this fails loudly at the read rather than returning a neighbouring element. Worth noting alongside that the shape itself is pinned as real devpod behaviour: --command is in SSH_VALUE_FLAGS (devlaunch-test-support/src/devpod.rs:180) and conformance.json:258 carries an ssh ... --command row measured against v0.26.1.
Optional one-liner while in there: &self.argv[at + 1] panics with an unnamed index message when --command is the last element. .get(at + 1).expect("a --command with a payload") says which of the two assumptions broke. Test-side code, no production change.
Testing the outcome
No behaviour changes, so no new test. pixi run cargo test --workspace, clippy --locked --all-targets -- -D warnings and fmt --check from rust/ are the whole gate. The claims above are checkable by hand: grep -rn "impl Runner for" rust/ returns nine, and three of those files hold a ProcessRunner field.
Out of scope
Adding corpus rows for Trips, adding a second argv guard, and retiring any fake (ruled out on evidence in #309).
Activity
blooop commentedon Aug 24, 2026
Built in #415 (
docs/runner-seam-and-trips), not merged.Counts confirmed against the tree: nine
impl Runner for, three of which hold areal
ProcessRunner(FakeDevpodRealGit,Devpod,StubbedLfs) — #405'snumbers hold. One nuance:
StubbedLfsroutes on thelfssubcommand rather thanthe program name, and only its
capturereaches real processes, so the doc says"hands it whatever they do not fake".
Per the steer in the ticket, the
Runnerdoc states the shape and names the grepas the enumeration rather than listing the seven wrappers or the three routers —
both are counts that rot the way "once" did. What it names instead is the two
shapes worth recognising: part real, and recorder.
Trips,Trip::scriptanddevlaunch-test-support/src/devpod.rs's module doc got the rest.One guard added,
devlaunch-runner/tests/one_seam.rs:ProcessRunneris theonly
Runneroutside test code, scanned rather than asserted in prose. Provenred first. Gate green from
rust/(test --workspace, clippy -D warnings, fmt).blooop commentedon Aug 24, 2026
breadcrumb: wf-review on #415 — request changes. Docs verified accurate and
Trip::scriptis a clean improvement, but the new guard has two demonstrated bypasses (impl<'a> Runner for X,impl devlaunch_runner::Runner for Xboth pass green) and one demonstrated false positive (any attribute between#[cfg(test)]andmod tests {makes test wrappers read as production). Also: this ticket asks to "name the three routers" and the shipped doc names onlyFakeDevpodRealGit— worth reconciling here. #415fix: a line was the wrong unit for the one-seam guard
blooop commentedon Aug 24, 2026
breadcrumb: the review's spec finding on this ticket is settled in the
ticket's favour, in 1dead6d on #415.
"Do not write 'seven' as a number that will rot the way 'once' did — say the
structure and name the three routers" is one sentence, and the clause forbidding
the count does not carry over to the names; the names are what the sentence asks
for. No later steer superseded it. The PR body claimed the opposite and has been
corrected.
Runner's doc now namesFakeDevpodRealGit,flows::lifecycle'sDevpodandflows::workspace_clone'sStubbedLfsin the "Part real" bullet,with
StubbedLfs's nuance stated, and still writes no count for the wrappers.The same commit rebuilds
tests/one_seam.rsaround a token rather than a line,which is what the review's two blocking guard findings turned out to be: both
bypasses (
impl<'a> Runner for X,impl devlaunch_runner::Runner for X) and the#[cfg(test)]false positive were artefacts of the unit, plus a fourth holewhere anything written below an inline test module read as test code. Seven of
the nine tests run the scanner over source held as a string; four were red
against the old logic first.
Still open, not closed by this.
blooop commentedon Aug 28, 2026
Shipped in PR #415. The
Runnerdoc states the shape and, after the review settled the spec dispute this ticket's way (commit 1dead6d), names all three routers (FakeDevpodRealGit,Devpod,StubbedLfs).Tripsis documented as a recorder, not a third fake devpod, and the count guard lives indevlaunch-runner/tests/one_seam.rs, rebuilt token-wise after the review's bypass findings.