Skip to content

bootstrap.py (the assembly root's): a leg moved off a branch has an ignored file the pin tracks overwritten and a merge in progress ended, with no word, and a tracking branch ahead of the pin with no commit of its own is left where it is #709

Closed as not planned

Description

@brettheap

make bootstrap should not overwrite an ignored file at a path the pin tracks, or end a merge in progress, without saying so, and it should place a tracking branch that is ahead of the pin with no commit of its own where the pin is (or AGENTS-shape.md should stop saying it does). The riders in the same placement code ride with it.

From lane 4's checklist triage of 2026-10-16 (T1), approved by Brett Heap at 2026-10-16T13:36:07Z ("approve all triage recommendations"). One pull request covers the lines below, together with #710.

Parent: #458. Milestone: v1.1.1 (a follow-up filed after Brett Heap's v1.1.1 word of 2026-10-16T13:35:28Z).

Authored after the v1.1.0 work; lands after the v1.1.0 tag unless the release owner (lane 3) says otherwise.

Lands after: lane 2's #634 (ready; it edits templates/assembly-root/AGENTS-shape.md) and lane 5's #694 (filed, no pull request yet; it edits the same templates/assembly-root/scripts/bootstrap.py, at recorded_gitlink, _try_git and the git run). Whichever of these lands second re-gates against the first.

Effort: M: --no-overwrite-ignore on three checkouts and a merge, one operation-in-progress refusal (which may need a ruling, see below), one re-pin. Platform: all (L4-79 is about case-insensitive disks only).

Files: templates/assembly-root/scripts/bootstrap.py and templates/assembly-root/AGENTS-shape.md, both pinned shape copies. The pull request re-pins them once, and re-pins bootstrap.py once for #709 and #710 together, so each project's v1.1.1 update takes one upstream-changed row per file.

Lane openRepoShape-4 claims it at filing; see its CLAIMED comment.

Why this is filed. Two of the lines lose a person's work, and a real user can meet them:

  • L4-74. An ignored file at a path the pin tracks is overwritten, silently, by every placement that changes files.
  • L4-75. A merge in progress is ended by the move off its branch.

The rest is exotic input: a tracking branch whose tip is its upstream's own tip, a symbolic HEAD outside refs/heads/, and a case-only branch name on a case-insensitive disk.

Line numbers are at c6122e8 (#639); main has moved since.

Lines

Rides along (backlog; tick it here if the same change covers it)

  • L4-76: P9's line (on <branch> at <pin> (branch tip == pin)) does not name the branch HEAD left. T7's does, after bootstrap.py: a leg on another branch whose tracking branch is behind the pin is fast-forwarded and checked out as one at the pin already is, and the family holder's AGENTS-shape.md and bump-leg.py say bootstrap places a leg where that loses no commit (#603) #615's fix round 1. Where: bootstrap.py:414 prints that line and no branch left. (source)
  • L4-77: a tracking branch AHEAD of the pin with no commit of its own (its tip is its upstream's remote-tracking ref) is left with not moving an existing branch whenever HEAD is on the branch, on another branch, or on a branch with no commit yet. move_back_to_pin starts only from HEAD detached at the pin. Moving it back would lose no commit, so templates/assembly-root/AGENTS-shape.md:95-96 ("places each leg ... where that loses nothing") is false of these states. Where: bootstrap.py:502; AGENTS-shape.md:95-96 is unchanged. Either the placement moves it back or the sentence says what it leaves. (source)
  • L4-78: HEAD as a symbolic ref outside refs/heads/: P9 places the leg, while T7 prints which is neither. This is exotic, and byte-identical to main. Where: bootstrap.py:468-469 (P9) and :380 (which is neither). (source)
  • L4-79 (DOUBTFUL): reasoned only, for case-insensitive disks: the current != refs/heads/<branch> compare is case-sensitive. A branch that differs from the tracking branch only in case could take the T7 path, and branch -f would then write the loose ref file both names share. Where: bootstrap.py:469 compares refs/heads/<branch> exactly (read). What branch -f then does on a case-insensitive disk needs a macOS or Windows run, and CI is Linux only since ci: run the test suite on Linux only #597, so the pull request may close it with a note and no change. (source)

What is expected

  • No placement overwrites an ignored file at a path the pin tracks. It refuses by name, or leaves the file and says so.
  • A merge in progress is not ended by a move off its branch. The placement refuses and says what to finish first. This may need a ruling from Brett Heap: whether it is a refusal (exit 2) or a NOTE that goes on. It is a new refusal in a path that moves files today.
  • P9's line names the branch HEAD left, as T7's does.
  • A tracking branch ahead of the pin with no commit of its own is moved back, or AGENTS-shape.md:95-96 is reworded to say which states it leaves. The pull request picks one and says which.
  • Tests for each: an ignored file in info/exclude, an ignored file in the other branch's .gitignore, a merge --no-commit, a branch whose tip is its upstream's.

Not a duplicate: lane 5's #648 and #682 are the FAMILY root's bootstrap.py (L4-80 went to them), and #694 is a missing git. No issue numbered #650 to #700 cites L4-74 to L4-79 (read at 13:17Z).

Each line above is a line of #458's checklist comment (issuecomment-6201724792). Tick it there too when this closes.

Lane: openreposhape-4 (openRepoShape-4)

Activity

  1. added this to the v1.1.1 milestone on Oct 16, 2026
  2. brettheap commented on Oct 16, 2026

    @brettheap
    ContributorAuthor

    CLAIMED — lane openRepoShape-4, session 11c6c0ef-495a-4a05-94cf-811b7b0a1012@Eagle, 2026-10-16T13:58:11Z, for #709

    Logged in lanes/log/openRepoShape-4.md at 167ea3fc96e8cfae6ed2c53cf49869cee6acb2e6.

    The three reads (lane-collision-protocol Rule 1):

    1. existing `CLAIMED —` comments on opensoft/openRepoShape#709:
       none
    2. `gh pr list --repo opensoft/openRepoShape --state all --search "#709"`, kept where the row or its body names `#709`:
       none
    3. `git ls-remote --heads git@github.com:opensoft/openRepoShape` branches naming `709` as a whole token:
       none
    
  3. brettheap commented on Oct 16, 2026

    @brettheap
    ContributorAuthor

    (lane openRepoShape-4, 2026-10-16T14:24:33Z) Closing as a duplicate of #704 (lane openRepoShape-5's, filed 2026-10-16T13:47Z), as lane 5 pointed out on #473 (issuecomment-6217544742).

    Lane: openreposhape-4 (openRepoShape-4)

  4. brettheap commented on Oct 16, 2026

    @brettheap
    ContributorAuthor

    RELEASED — lane openRepoShape-4, session 11c6c0ef-495a-4a05-94cf-811b7b0a1012@Eagle, 2026-10-16T14:25:11Z, for #709 — closed as a duplicate of lane 5's #704 (filed 13:47Z, ruled for v1.1.0 by Brett Heap in lane 5's session); L4-79 stays on #458's checklist

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