Skip to content

Execute the Rust cutover: drive PR #260 to a merged 0.1.0 release #261

Description

@blooop

Execution ticket (wayfinder:build) for the follow-on effort that map #248 defers
to its own map with an execution override. The plan is decided (#248, tickets
#249#255, docs/rust-rewrite-plan.md); this ticket is the doing: finish PR #260,
turn CI green, then merge and ship the first Rust release.

Where it stands

  • Branch: rust/big-bang-portPR Rust port of devlaunch (big-bang cutover, 0.1.0) #260 (open, mergeable, not draft). 24 commits.
  • The port is functionally complete: four-layer Rust workspace under rust/
    (runner → tool clients → domain → flows), dl + aid binaries, ~1410 Rust tests
    incl. 108 binary-boundary tests against Python goldens, parity manifest empty,
    spec ledger 0 pending, compare.py 10/10 SAME.
  • A six-angle adversarial review ran against the finished tree; every material
    finding was reproduced and the fixes are committed (waves 1–2 + CI-fix commits).
  • A post-review tree audit re-confirmed the in-PR fixes actually landed: R9
    refresh-path fetch timeout (5s ls-remote bound; no unbounded fetch on any
    user-facing path), R7 prune lock-wait notice, F1 migration-under-lock+reload,
    the --force grammar, empty-id launch refusal, and the maturin wheel packaging.
    The one gap it found — aid's SIGINT handler was a bare _exit that skipped
    dl's cleanup, leaking the staged GitHub token and orphaning the up child on a
    Ctrl-C mid-aid-launch
    — is now fixed (both binaries share one
    dl::install_interrupt_handler; new aid/tests/interrupt.rs guards it).

Remaining work (the finish line)

  1. CI green. The rust-parity job was deterministically killing the GitHub
    runner at ~46m. Root cause: the lock_wait integration test drove dl --prune
    through .output() (blocks on stderr-pipe EOF that a detached refresh grandchild
    can hold open), and its later 30s "deadline kill" used kill -KILL -<pgid> with
    no --, which procps parses as a signal word and no-ops — so nothing was killed
    and an orphaned test binary held the step's log pipe open. Fixed in the last two
    commits (stderr→file + process-group + a deadline that kills via Child::kill
    plus kill -KILL -- -<pgid>; CI step routes cargo output through a file). The
    per-binary Test split in ci.yml was a diagnostic — consider collapsing it back
    to one bounded step once stable. The fix is confirmed: on the run before the
    aid commit, Test dl lock_wait and Test dl interrupt both passed (the runner
    no longer dies). aid's process-spawning interrupt test got the same log-pipe
    fence. Verify the latest run is fully green before merging.

  2. File the pre-existing security findings PRIVATELY. The review surfaced host
    RCE paths and path-containment issues that exist in the frozen Python too and
    are therefore NOT introduced by this PR. They must NOT be disclosed in a public
    issue or PR comment. The private write-up is with the owner; file via the repo's
    private security-advisory flow, not the public tracker. (Details deliberately
    omitted here — this is a public ticket.)

  3. Merge + release 0.1.0. Cutover ships as 0.1.0, version single-sourced in
    Cargo.toml; both channels (PyPI maturin bin-wheel + prefix.dev conda) publish
    from one tag on version change (publish.yml/conda-publish.yml), linux-64 only.
    The released dl/aid flip from Python to Rust here. Rollback = pin <0.1.
    Merge and release only on explicit owner go-ahead.

Constraints for the taker

Closes the execution half of #248.

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