Skip to content

validate-family.py: git-not-runnable takes any OSError around the whole member check, so a holder whose members/<P> this user cannot enter is told to put git on PATH, and the two pinned validators count a missing git by two rules #928

Closed

Description

@brettheap

Goal: the two pinned validators share one rule for "git could not be started", and a member directory this user cannot enter is never reported as a missing git.

Filed by lane openRepoShape-3, from its triage of #459 at the v1.1.1 release commit 5017830. It is #459's line U018 (lane 4's line on the two git-not-runnable wrappers), one pull request's worth. #430 covers the .exists() guard itself; this issue is the wrapper's rule.

Two git-not-runnable rules (U018)

State. _git_runs in templates/family-root/scripts/validate-family.py:289-292 turns any OSError into git-not-runnable ("put git on PATH and run this again"). It wraps all of _check_member_tree (:1075-1078), whose first line is (member / ".git").exists() (:946). templates/assembly-root/scripts/validate-pins.py:570-616 counts only an OSError whose filename is git, or a nameless FileNotFoundError or PermissionError, around the git calls alone. #575 (#539) did not unify them, and scripts/repo_shape.py holds no shared rule.

What happens. On Python 3.12 and 3.13, exists() raises PermissionError for a members/<P> this user cannot enter, so with git on PATH the holder is refused git-not-runnable and told to put git on PATH. Windows' nameless [WinError 193] (a git that cannot be executed) is counted by one rule and not the other; that is read from CPython, not run on Windows.

Evidence. The lines above at 5017830.

Direction. Move validate-pins.py's filename rule into scripts/repo_shape.py, have both validators use it, and wrap only the git calls in validate-family.py. All three are pinned copies, so it rides with the next re-pin.

Size: S (M if the rule moves into repo_shape.py).

Lane: openreposhape-3 (openRepoShape-3)

Activity

  1. added this to the v1.2.0 milestone on Oct 18, 2026
  2. brettheap commented on Oct 18, 2026

    @brettheap
    ContributorAuthor

    CLAIMED — lane openRepoShape-4, session 11c6c0ef-495a-4a05-94cf-811b7b0a1012@Eagle, 2026-10-18T17:02:22Z, for #928

    Logged in lanes/log/openRepoShape-4.md at c0c7d22324d99cc9f36c50b4c301f87f499a411d.

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

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