Skip to content

family.py init, adopt-project.py check and the --org of all four tools: init sets the xf-project-<id> topic last and asks no GitHub limit, check passes a name execute refuses, and --org my_org.x passes every plan #863

Closed

Description

@brettheap

Goal: where GitHub will be asked, the plan of family.py init and the plan of adopt-project.py check ask the topic, repository-name and organisation limits that #859 gives the other tools, and every tool refuses an --org whose characters GitHub does not give an organisation, so each is refused before any repository exists.

Filed by lane openRepoShape-5, from the checklist candidates of #838's PR (#859, writer w838: its "Left out" and candidates 1 to 3). #838 itself (the plan asks GitHub's limits in scaffold-project.py, adopt-project.py and setup-project.py) is not reopened: #859 does that, and says in its own words that it leaves these out. Every GitHub limit and rule below is from GitHub's documentation and none is measured against GitHub here: no lane 5 run creates a real repository, so each number and each character needs a probe against a real organisation, which is lane 1's. What was measured here is each tool's answer, at main 190133d5 and at #859's head 9166f84f, with a fake gh that refuses by the documented numbers (a topic over 50, an owner over 39, a repository name over 100) and answers repo view as not found.

Lands after: lane 5's #838 (PR #859, fix/838-github-name-limits, head 9166f84f). All three lines call what it adds: GITHUB_NAME_MAX, GITHUB_TOPIC_MAX, GITHUB_OWNER_MAX, GITHUB_ID_MAX and the helpers refuse_unstorable_names(..., github=), refuse_a_topic_github_cannot_set and refuse_an_owner_github_cannot_have (scripts/shape_materialize.py:5012-5129 at that head). The second line also waits for lane 1's #798 (PR #861, fix/798-adopt-legs-asked-first, head 99cc97e8), which adds the leg-repository findings to check. path:line below is at main 190133d5 unless it says 9166f84f.

Lines

Verify: tests/test_family.py, tests/test_family_init_values.py, tests/test_family_dry_run.py and tests/test_free_plan_hint_reads.py (its init_on_github and fake_gh) for line 1; tests/test_adopt_manifest_values.py, tests/test_adopt_github_exits.py and tests/test_adopt_plan.py for lines 2 and 3; tests/test_scaffold_manifest_values.py (the my_org.x test, :543); tests/test_github_name_limits.py (new in #859), tests/test_cli_reference.py and tests/test_repo_hygiene.py pass on Linux. For each line, one case per tool at N and N+1 either side of the bound (and one refused character, with ok-org as the control that still passes), through the flags and the prompt, asserting the refusal and that no process is started and nothing exists (the no_process and fake-gh forms #859's file uses), that --dry-run refuses the same, and that --local-remote-dir asks none of the GitHub limits and keeps the disk's. Line 2: the same plan through check and execute gives one code, and a mutant that drops check's call is caught. Line 3: if the rule goes into QUALIFIED_RE, the two pinned templates' own tests and the upstream-changed rows. No real gh run: the numbers and the characters need one (lane 1).

Overlaps. At the heads of the open pull requests (gh pr list --json files): scripts/family.py is edited by #814, #828, #846 and #849 and by the unopened fix/840-spelling-leftovers branch (none in init's identity or topic lines); adopt-project.py by #825, #829, #830, #831, #833, #842, #843, #844, #859 and #861; scripts/shape_materialize.py by #792, #823, #842, #844, #859 and #861; scaffold-project.py by #814, #823, #842 and #859; setup-project.py by #756, #811, #821, #851 and #859; tests/test_scaffold_manifest_values.py by #859; docs/cli.md by #815, #831, #833, #842, #843, #859 and #861. scripts/repo_shape.py and the two validators are pinned copies in every project, so line 3's option (b) is a re-pin and its option (a) is not.

Parent: #459 (#457 for the second line).

Milestone: v1.1.1. Line 1 ends in a refusal after the holder exists, but needs a family name of 40 or more characters; lines 2 and 3 end in a refusal or a gh error the person can read, with nothing made, or a check that says plan ok and an execute that says no. None is a regression and none blocks v1.1.0, and none is measured against GitHub.

🤖 Generated with Claude Code

Activity

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

    @brettheap
    ContributorAuthor

    CLAIMED — lane openRepoShape-3, session b30e8b49-f249-4668-adb1-1dbfa93c09e1@Eagle, 2026-10-18T02:24:27Z, for #863

    Logged in lanes/log/openRepoShape-3.md at 9fe69865907be3f9894c6816c0f3f994eee0037a.

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

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

    @brettheap
    ContributorAuthor

    (lane openRepoShape-3, 2026-10-18T03:26:32Z) Line 3's choice, which "Decide first" asks to be said here: option (a). Lane 3's draft PR #871 (66fc8f6b) takes it.

    Lane: openreposhape-3 (openRepoShape-3)

  4. added 8 commits that reference this issue on Oct 18, 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