Repository navigation
Export the lane's project as DEVLANES_LANE_PROJECT - #109
Conversation
🧭 Changeset detectedMerging this PR will release the following updates: devlanes (Cargo) — minor version bumpMinor changes
Patch changes
devlanes-cli (Cargo) — minor version bumpMinor changes
devlanes-daemon (Cargo) — minor version bumpMinor changes
Patch changes
devlanes-proto (Cargo) — minor version bumpMinor changes
devlanes-proxy (Cargo) — patch version bumpPatch changes
devlanes-resolve (Cargo) — minor version bumpMinor changes
devlanes-runner-pty (Cargo) — patch version bumpPatch changes
devlanes-sys (Cargo) — patch version bumpPatch changes
|
Mira PR WalkthroughFixes a regression where lanes exported Confidence: 4/5 ◉◉◉◉○ Safe with minor checks
31 files reviewed
|
Recording the command's activity queued a second wake that could thaw the lane first, so the command reported nothing to thaw.
DEVLANES_PROJECT is now only a setting a user exports, and it wins over the current folder like -p. The lane's own project is a fallback the cwd's project overrides, so a lane's variables in a later CI step no longer pin another checkout to that project. Replaces the previous commit's inherited-project rule.
…ix/second-checkout-lane
A service that printed and exited at once could leave launch waiting on a leader stuck draining its terminal, so start hung until its timeout. libproc refuses an exiting process; the sysctl fallback now accepts P_WEXIT, and a failed lookup closes the master before waiting.
A daemon restart while connections were closing moved the proxy to its fallback port on macOS and Linux. Found as an e2e failure on macOS CI. The update e2e tests now keep the lab's port slot.
Found through devlanes-run/action#6. The "Two projects in one job" test passes on 0.7.0 and fails on 0.10.0. In the second step,
devlanes startinsecond/test/fixtures/infrafails with…/infra not found; options: fixture@0.Cause
Lanes wrote
DEVLANES_PROJECTinto every process they start, and since 0.8.0 (#92)-p/--projectreads that same variable. The action exports a lane's variables to later steps, so the second step inheritedDEVLANES_PROJECT=fixtureand every command in the other checkout was pinned tofixture. The same happens toeval $(devlanes env show)anddevlanes withshells. The variable was both a user setting and lane context, and devlanes couldn't tell which one it was reading.Fix
Lane variable renamed. Lanes export the project as
DEVLANES_LANE_PROJECT.DEVLANES_PROJECTis only a user setting. Precedence is config < env <-p, and a setDEVLANES_PROJECTwins over the current folder.--filestill beats both.The lane project is a fallback. The CLI sends
DEVLANES_LANE_PROJECTasContext.lane_project, optional on the wire. The daemon uses it only when neither-pnorDEVLANES_PROJECTis set, and only in two cases:devlanes.yamlnames another project. This covers thedevlanes.prod.yamlservice case Identify projects by name, add extends, reload and per-unit drift #92 added the variable for;Otherwise the folder's own project wins.
debug thawrace. This fixes a flake on CI that is also a user-visible bug. Recording the command's activity queued a second wake. When that wake reached the lane first,devlanes debug thawthawed the lane but printed "not throttled or frozen". The command now records its activity without queuing a wake. Under load in WSL, 16 of 200 runs failed before the fix and none of 200 after.Tests
lanes::a_lane_project_gives_way_to_the_cwds_own. It covers two clones, thedevlanes.prod.yamlcase, a cwd in no project, and-p/DEVLANES_PROJECTwinning over both the folder and the lane project.lanes::exported_lane_variables_leave_another_checkouts_project_alone. It replays the action job with CI variables, and checks that a hand-exportedDEVLANES_PROJECTpins the project.lane_project_is_sent_apart_from_the_project.lanes::,with::andlifecycle::: 18 passed.idle::stress runs under load pass.Change files
lane-project-variable.md(minor). Scripts that read the lane's project from its environment now useDEVLANES_LANE_PROJECT.debug-thaw-answers-thawed.md(patch).devlanes-run/action#6 changes its README and e2e check to
DEVLANES_LANE_PROJECT, and requires the release with this change.Agent and model: OpenCode / Claude Opus 5.5.
Also: crashing PTY services on macOS
cli::agent_output_starts_with_stable_wordstimed out on macOS CI. A PTY service that printed and exited at once could hanglaunch: XNU keeps an exiting session leader waiting until its terminal output is read, libproc already refuses it, and the sysctl fallback only accepted zombies, so the daemon killed and waited for a leader that was waiting for the daemon. The fallback now accepts a process withP_WEXIT, and a failed lookup closes the master before waiting. Regression testspawn::tests::a_leader_that_exits_before_its_identity_is_read_is_identified. Change filepty-leader-exits-at-once.md(patch).Also: proxy port after a restart
with::with_runs_the_command_and_stops_the_daemon_it_spawnedfailed on macOS CI because the lab's HTTPS port was still held by closing connections from the previous test, so the proxy fell back to 8443. The main listener now binds withSO_REUSEADDRon Linux; on macOS it retries with it only when nothing answers on the port, so another program's listener is still never hidden. Users saw this asdaemon restartmoving the proxy to 8443/8080 while a browser had connections open. Testsport_with_lingering_connections_binds_againandwildcard_listener_still_falls_back; the update e2e tests now append to the lab config instead of replacing its port slot. Change fileproxy-port-after-restart.md(patch).