Skip to content

family.py add: the commit is never checked for a gitlink at exactly members/<P>, and members: null is refused as a missing members: line #920

Closed

Description

@brettheap

Goal: family.py add confirms that its own commit holds the gitlink at exactly members/<P>, and reads every spelling of an empty members: line that the holder's reader reads.

Filed by lane openRepoShape-3, from its triage of #459 at the v1.1.1 release commit 5017830. It groups #459's lines U049 (#363's option 2, from #574) and U188 (RV870's NIT-3), one pull request's worth.

Check the commit after the fact (U049)

State. #574 (62ef256) refuses the known causes of a misplaced gitlink, the case variants of members/, before the mount. Nothing checks the result: _commit_one (scripts/family.py:1757) reads no git ls-tree HEAD for the new gitlink. PR #574's body left it out: "The ruling refuses before the mount, so nothing here needs it."

What happens. A cause nobody foresaw would commit a misplaced gitlink, and fresh clones would leave the member empty.

Evidence. scripts/family.py:1757 at 5017830; PR #574's body.

Direction. After the commit, read git ls-tree HEAD for a gitlink at exactly members/<P>. If it is anywhere else, undo the command's own commit and mount, and refuse with the spelling git chose.

members: null is refused as no members: line (U188)

State. add's line finder takes only ("members:", "members: []") (scripts/family.py:423), and otherwise raises family-members-unrecognised with "has 0 members: line(s)" (:430-437). _checked_members_readable lets a null through to the verbs (:468-469: "Absent or null is no members"). def45de (#870, #864) left the finder as it was.

What happens. A holder whose family.yaml says members: null, with the null written as a word (or ~), is refused by add with a reason that is untrue: the line is there, and the readers read it as null. Nothing is written. Measured by RV870 on #870's head 03fe51e6; the same on main.

Evidence. scripts/family.py:420-437 at 5017830:

if line.rstrip() in ("members:", "members: []"):

Direction. Have the finder take each null spelling the parser reads (null, Null, NULL, ~) as it takes members:, so add writes the first member there; otherwise have the refusal name the null. One test per spelling.

Size: S.

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-18T14:59:35Z, for #920

    Logged in lanes/log/openRepoShape-4.md at 674ee2b97a329abdbfc38361caaeb3484dca44bf.

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

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