Skip to content

Decide: wf links devlaunch-core vs keeps the wire seam — prototype before cutover #266

Description

@blooop

Question

Does wf linking devlaunch-core in-process actually beat the wire seam it has today — decided by a prototype, before PR #260 merges?

This is load-bearing for the cutover, not sequencing detail. The linked-crate reuse was the sole surviving driver of #53's go — perf was disclaimed at decision time (one devpod round-trip costs 5× the Python interpreter startup), distribution doesn't change (same two channels, narrowing to linux-64), and the port's genuine side-yield (bug finds, the boundary-test harness, the grammar fixes) is language-independent. The owner-directed re-litigation of 2026-08-19 (recorded on #261) re-measured that driver against wf's actual code and found it weaker than #250 estimated:

  • The wire-tolerance layer is ~100–200 lines of serde parse in wf's src/reap.rs plus one version-floor message — not ~300. The rest of reap.rs is deletion policy (what wf may destroy, the --force waiver) that survives linking unchanged.
  • wf's launch path deliberately execs into the dl binary for terminal handoff (launch.rs) — linking converts only the listing/rm calls; the binary stays in wf's world either way.
  • Skew doesn't die, it moves: today it's a loud runtime version-floor error ("needs devlaunch 0.0.21+"); under a pinned git dep it's silent pin-time staleness.
  • The wire seam delivers dl fixes to wf for free via pixi global update; a crate pin requires re-pin → rebuild → wf release for every devlaunch fix — a permanent coupling tax on a repo that shipped 16 releases in ten days.

The experiment (~1 day)

Branch wayfinder; swap reap.rs's dl --ls --json subprocess call for a devlaunch-core git dependency pinned to the rust/big-bang-port branch (the frozen api module: enriched_listing/json_document, typed workspace_delete). Judge:

  • Is the typed model materially better to live with than the tolerant serde parse — including a typed unsaved instead of dl's rendered words?
  • Walk the loop that hurts: "devlaunch fixed a bug, ship it to wf" under release coupling, vs today's pixi global update.
  • What the exec-into-dl launch path looks like alongside a linked core (it stays either way — is a half-linked wf coherent?).

The two outcomes (follow-on tickets filed after the decision, not now)

Linking wins → merge #260 (which is the 0.1.0 release — Auto-publish fires on the merge commit) and cut over, with hard retirement conditions attached rather than left as loose ends:

  • a dated wf re-pin/switch ticket on blooop/wayfinder;
  • the Python tree deleted within N releases;
  • the parity apparatus (goldens, spec ledger, shim, compare.py) deleted with it;
  • the dev-loop follow-up (dev.sh / pixi run dl still installing Python) done at cutover.

Linking loses → do not merge; harvest instead:

  • unfreeze Python (the freeze exists to serve the port and dies with it);
  • backport the port's ~8 real bug finds;
  • keep the devpod shim + DEVLAUNCH_DL_CMD boundary-test harness, pointed at the Python binary;
  • land the divergence-table grammar improvements (rows 14–15, 23, 25) as Python changes;
  • complete the private security-fix flow (unchanged either way);
  • close Rust port of devlaunch (big-bang cutover, 0.1.0) #260 with the reasoning recorded.

Constraints

  • "Park the branch" is not an outcome. Python moved 375 commits in ten days before the freeze; big-bang parity decays in weeks. The choice is binary: merge now, or harvest and discard.
  • A standing owner preference for an all-Rust ecosystem (wf already is; one typed model; agent-driven development where the compiler does free review) is itself a legitimate resolution that skips the experiment — this ticket exists so the reason on record is a real one, not so a preference is laundered through a prototype.
  • Decide: Rust rewrite — go or no-go #53's go/no-go record stands as decided-then-revived; this ticket re-examines the driver's weight now that the port exists, per the owner's direction — it does not reopen Decide: Rust rewrite — go or no-go #53.

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions