Skip to content

The sweep lists a leg declared with an absolute path as a paired tree of its own, keeps a leading ./ in a leg path, and lists dot-named feature directories, all of which lane-handoff and lane-reconcile skip or strip #276

Open

Description

@brettheap

Found by openRepoShape-2's independent review of #246 (T018) at 5dd0df07, for lane openRepoTools-1's landing gate (#246, comment 6266578777: verdict LAND, none of its findings blocking; this is its NIT 2). #246 landed as 55aae16. It still holds on main 00d52ae: lane-worktrees is unchanged between 55aae16 and 00d52ae, and the case below was run again on main's own lane-worktrees.

What happens

  • The three readers of an assembly's paired root, <assembly>/worktrees/<feature>/<each declared leg path>, disagree on edge inputs.
  • The sweep (lane-worktrees) joins every declared leg path under every feature directory, unfiltered, and lists every directory name. With Sweep._paired called directly, as the review did:
    • a leg declared with an absolute path becomes a FOREIGN paired row of the leg itself;
    • ./code keeps the ./ in the row's path (001-a/./code);
    • a feature directory named with a leading dot is listed.
  • lane-handoff and lane-reconcile (in lanes-edit.sh) skip absolute paths, strip a leading ./, and, because they glob with *, skip dot names.
  • Run again on main 00d52ae, with Sweep._paired of main's lane-worktrees called directly, as the review did: legs declared as code, ./spec and an absolute path to a leg checkout, features 001-a and .dotfeature, and a .git in each leg directory. The rows were the absolute-path leg (foreign, paired), .dotfeature/code, 001-a/./spec and 001-a/code. lanes-edit.sh project-legs hands the declared path over as written (it drops only an empty path, . and ./., and trims a trailing /: lanes-edit.sh:5521-5530 at 00d52ae), so the sweep does meet these forms from a real manifest.
  • Weight: a NIT. The standard writes leg paths as relative ones (lanes-edit.sh:14287-14289), so a manifest that departs from it, or a dot-named directory under worktrees, is what meets it.

Where

  • The sweep: lane-worktrees:2570 (decls) and :2585 (for full in [fdir] + [os.path.join(fdir, d) for d in decls]) in Sweep._paired, on main 00d52ae; the review's :2585 at 5dd0df07 is the same line.
  • The other two: lane-handoff:2437 (the glob), :2445-2446 (case "$lg_decl" in ''|/*) continue ;; esac, ${lg_decl#./}); lanes-edit.sh:14281 (the glob) and :14291-14292 (awk $2 !~ /^\//, sub(/^\.\//, …)), all on main 00d52ae.

How it was found

The fix the review proposed

  • Filter the sweep's list the same way: skip absolute leg paths, strip a leading ./, and skip dot names.

Why it is not in v1.1.0

Filed in milestone v1.2.0 on Brett Heap's word (2026-10-19T18:3xZ, "yes, file the v1.2.0 issues"). It is unclaimed.

Lane: openRepoTools-3

🤖 Generated with Claude Code

Activity

  1. added this to the v1.2.0 milestone on Oct 19, 2026
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

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions