Skip to content

bootstrap.py (the family root's and the assembly root's): make bootstrap with no git on PATH ends in a FileNotFoundError traceback, exit 1, where the validators refuse git-not-runnable, exit 2 #694

Closed

Description

@brettheap

Goal: a bootstrap that cannot start git says so by name and exits as a refusal, like the validators beside it, and never ends in a traceback.

Filed by lane openRepoShape-5 on Brett Heap's word of 2026-10-16T12:17:02Z ("#459's family lines (~38)"), from the checklist line on #459 (comment 6132014915, "the third sibling of #368 and #412", was #463). Lane 4 judged it OPEN on 95780dd (L4-01, cluster T2); re-read and probed on d4a7fab.

Lands after: lane 5's #648 (fix/648-…), which changes the family-root bootstrap.py's main ending and fetch_members's report (it must not say family bootstrap ok when it checked no member out). The git-missing case belongs to the same function and the same exit-code decision.

Pinned copies. Both scripts/bootstrap.py copies are pinned in every holder and every assembly root (FAMILY_COPIED_VERBATIM, scripts/shape_materialize.py:514-535, and the assembly root's list). Bundle with #648's and #639's bump so each takes one upstream-changed row.

Lane 3's #460 lines. Lane 3 now owns #460's lines (R605's six, about siblings.py and the family-root README and AGENTS templates). If its fix of R605's template line lands first, rebase over it; it should not touch either bootstrap.py, but check on rebase.

Lines (line numbers at d4a7fab)

  • templates/family-root/scripts/bootstrap.py and templates/assembly-root/scripts/bootstrap.py end in a FileNotFoundError traceback, exit 1, when git is not on PATH. The family root's step (a) runs subprocess.run(["git", "submodule", "update", "--init", "--recursive"], ...) with no OSError guard (templates/family-root/scripts/bootstrap.py:93, in fetch_members); probed on main with a holder, PATH set to an empty directory and /usr/bin/python3 scripts/bootstrap.py --root .: (a) members and their legs, credential source: none, then FileNotFoundError: [Errno 2] No such file or directory: 'git', exit 1 (exit 1 is the code of family bootstrap FAILED, though nothing failed). The assembly root's equivalents are read, not run: recorded_gitlink at its step (a) (templates/assembly-root/scripts/bootstrap.py:584, which raises OSError through scripts/repo_shape.py:1245 as git_out's docstring says it does, :1028-1032), its offline upstream notice _try_git (:118-122, catches Refusal only), and the git run at :197. Direction: catch the OSError at each of those and say what the validators say (git-not-runnable: "git could not be run ()... put git on PATH and run this again", templates/family-root/scripts/validate-family.py:176-198), exit 2 as a refusal; decide with bootstrap.py and validate-family.py: family bootstrap ok with no member checked out, an earlier row's member-uninitialized hiding a case-variant refusal, and member-gitlink-unnamed with no command under --no-members #648 whether the family root's step (a), once it names the missing git, goes on to (b) or stops (a member's own make bootstrap runs git too, so going on would only repeat the refusal). The two validators count the missing git by two rules (the item that rides with Pinned validators: THE LOCKSTEP RULE only where it applies, and remedies that name the git switch -c step (one shape bump) #539, still open: validate-pins.py counts an OSError named git or nameless, validate-family.py's _git_runs any OSError); a writer may settle that rule here, or leave it to its own line.

Overlaps: lane 5's #648 (family-root bootstrap.py, validate-family.py), #639 (validate-family.py), #634 (validate-pins.py, not this file). No open PR edits either bootstrap.py.

Mark the line → this issue on #459, and tick it there when this closes.

🤖 Generated with Claude Code

Activity

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

    @brettheap
    ContributorAuthor

    CLAIMED — lane openRepoShape-5, session 50cede29-ab82-4ca3-9f67-d98e1a58c8d2@Eagle, 2026-10-16T14:03:07Z, for #694

    Logged in lanes/log/openRepoShape-5.md at fffe0161aa2b2bc2a8e8d78042a9ab47ef2e7092.

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

    1. existing `CLAIMED —` comments on opensoft/openRepoShape#694:
       none
    2. `gh pr list --repo opensoft/openRepoShape --state all --search "#694"`, kept where the row or its body names `#694`:
       none
    3. `git ls-remote --heads git@github.com:opensoft/openRepoShape` branches naming `694` as a whole token:
       none
    
  3. added 2 commits that reference this issue on Oct 16, 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