Skip to content

lane-worktrees: follow-ups deferred from the Opus review of #174 (rows 4-12, 14) #183

Description

@brettheap

Deferred under Brett Heap's close-out direction of 2026-10-06 from the Opus adversarial review of PR #174 (head 499d2ab). The three must-fix rows (trailer adoption, unmarked sandboxes, cross-estate claims) are fixed in #174 itself; these are not.

# class file:line @499d2ab scenario one-line fix
4 data loss, niche _loss_plan 2973 a commit named only by a per-worktree ref (refs/worktree/*, refs/bisect/*, refs/rewritten/*) is not in the loss plan: tree removed, ref gone, not on origin, not in a bundle add those refs to the worktree's candidates
5 data loss, niche _wip_rescue 3319 a partially staged version (index differs from HEAD and the working file) is lost: the WIP snapshot overwrites it also bundle write-tree of the real index when it differs from the snapshot
6 A11 partial _deps_partial 2735 dependents outside the estate root are not searched; a --shared dependent outside the root is left with a broken alternates pointer after --include-foreign removal walk each registered lane's estate root and $HOME (bounded), or count any out-of-root dependent as a partial search
7 A1 sibling Helper.call 455, fetch_register 587 an inherited LANES_NO_GIT=1 (or a LANES_REPO elsewhere) makes the helper read a register the sweep's fetch never moves, so a lane re-bound on another host reads as here and the tree is removed under --yes drop LANES_NO_GIT, LANES_REPO, LANES_DIR, LANES_FILE from the helper's environment, or refuse
8 A8 sibling :3227, branch_items 4181 the remote branch is deleted while an OPEN PR uses it as its BASE (GitHub retargets only for a MERGED PR; the dependent is closed instead) never delete a remote branch while any OPEN PR's baseRefName equals it
9 B6 partial act 2875, _register_items B6 holds for trees only: scratch, branch, cache and sandbox items all act before any of their register lines is attempted note each item as acted on; stop at the first NOT WRITTEN
10 :4394 pytest-of-$USER/* and run.sh roots have no minimum-age check although the docstring says they do apply sandbox_min_age_minutes to every kind
11 expiry_rows ~4516 *-ignored.tar.gz and scratch-*.tar.gz archives are only copies yet expire after 90 days; a bundle of untracked files never expires ledger rows for those tars, or document the asymmetry
12 A7 residual :2589 a remote branch with no PR and no Lane: trailer at its tip (a person's branch) still gets the lane's commits pushed onto it with no trailer and no PR, use a rescue branch
14 nits register_text rewrites , inside the verbatim --word; any directory named venv is treated as a virtual env without checking for pyvenv.cfg

Also from the merge preview: the gate's --include-scratch turns on the whole-estate walk, about 17 s per lane-end on Eagle (defer with #176).

Probe scripts: this lane's session scratchpad probes/probe174*.py (may not survive the session).

Lane: openRepoTools-3

Activity

  1. brettheap commented on Oct 6, 2026

    @brettheap
    ContributorAuthor

    Added from the re-verification of #174 at 4ea84c8 (R1, R2, R3 all PASS; verdict LAND): R3 still blocks in a SHARED checkout. With no trees of the lane's own, one FOREIGN worktree registered in the checkout (another lane's) and one pathless inventory record in the same estate, the sweep exits 2 (refused lane …'s inventory record … (it names no path) could not be read, summary 0 1 0 1), because the note path applies only when self.trees is empty and FOREIGN trees fill it. That is openRepoTools' real layout (lanes 1 and 3 share the checkout); latent today because all 17 records under /workspace/projects/.lane-state carry a path: line. Fix: decide note-versus-refusal on whether any tree is NOT plain FOREIGN (an inventory tree or an adoptable one), not on whether there are any trees at all.

    Lane: openRepoTools-3

  2. brettheap commented on Oct 7, 2026

    @brettheap
    ContributorAuthor

    Seen again at #175's head 49bfa40 through lane-end: a lane with nothing of its own gets rc 2 once another lane's tree is registered in the shared checkout and any pathless sidecar exists in the estate (rc 0 with the sidecar removed). Still latent on Eagle (every real record carries a path); the fix stays as described above. Lane: openRepoTools-3

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

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions