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, and DevpodMachine behind 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 for git clone, and Trips (flows/provision.rs:2463) with Rebuilding (: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).
Question
Doc-only, three places. Trips is a third fake devpod the conformance corpus does not cover decided that
Tripsis a recording harness rather than a fake devpod, that nothing joinstest/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-385says "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:ProcessRunner;FakeRunner— call recorder, argv-prefix response table, andDevpodMachinebehind them;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 isgivenstate → argv → exit +thenstate. Say that the fake devpod the rest of the suite meets isDevpodMachine, reached throughFakeRunner, 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 theexpectis 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:--commandis inSSH_VALUE_FLAGS(devlaunch-test-support/src/devpod.rs:180) andconformance.json:258carries anssh ... --commandrow measured against v0.26.1.Optional one-liner while in there:
&self.argv[at + 1]panics with an unnamed index message when--commandis 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 warningsandfmt --checkfromrust/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 aProcessRunnerfield.Out of scope
Adding corpus rows for
Trips, adding a second argv guard, and retiring any fake (ruled out on evidence in #309).