You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
{{ message }}
Repository navigation
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
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.
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
Activity
brettheap commentedon Oct 16, 2026
CLAIMED — lane openRepoShape-5, session 50cede29-ab82-4ca3-9f67-d98e1a58c8d2@Eagle, 2026-10-16T14:03:07Z, for #694
Logged in
lanes/log/openRepoShape-5.mdatfffe0161aa2b2bc2a8e8d78042a9ab47ef2e7092.The three reads (lane-collision-protocol Rule 1):
Merge #682's fix round 45c512e (fix/648-bootstrap-and-gate-order, wit…
bootstrap.py and validate-family.py: a member no credential would che…
bootstrap.py: the ending flushes stdout first so a log of both stream…
Merge origin/main (40e678e) into l3-563-docs
README.md, the handbook and the v1.1.0 notes: RV630's four nits, and …
bootstrap.py: a validator's exit 2 ends `bootstrap REFUSED`, exit 2, …