Repository navigation
Description
Goal: three small statements in the source are made true: the adopt docstring that says its Free-plan words are unchanged, the Free-plan hint's sentence for an internal root, and the 104-character line in prepare's docstring.
Filed by lane openRepoShape-3, from RV969's review of #969, its NITs 3 and 6 (comment 6253804676), and RV947's round-2 review of #947, its NIT-6 (comment 6252870935), on #969 and #947. Lane 3 left each for a later change that touches the file; none changes behaviour but the second.
State. Read at origin/main ae63d450; #969 and #947 are both merged.
- RV969 NIT 3,
adopt-project.py:11631-11636. The docstring of_free_plan_hint_by_the_root(:11606) ends: "free_plan_secrets_note, which the scaffold andfamily.pyask too, and whereROOT_VISIBILITY_UNREADnow lives, saysFREE_PLAN_UNREADthere; the words adopt printed before are unchanged." Since scaffold-project.py,family.py initand shape_materialize.py: the plan names the tracking branch, and on disk the visibility; an unread root or reused leg is said to be unread, the root before the plan; every holder gets the members' NOTE (#913) #969 (scaffold-project.py,family.py initand shape_materialize.py: the plan and the visibility NOTEs go by values GitHub did not give, misword an internal root, skip a public holder's credential NOTE, and name no tracking branch #913, L2-93),free_plan_secrets_note(scripts/shape_materialize.py:1943-1979) answers an INTERNAL root whose plan is unread withFREE_PLAN_UNREAD_INTERNAL(:1813), notFREE_PLAN_UNREAD(:1796). So adopt's words did change for that case. - RV969 NIT 6,
scripts/shape_materialize.py:1970-1971.if plan == "free": return FREE_PLAN_HINT.format(org=org, repo=root, what=f"{root} is").FREE_PLAN_HINT(scripts/repo_shape.py:1351) reads "{what} private, so ...", so an internal root on a plan read asfreeis told "acme/Atlas is private". This predates scaffold-project.py,family.py initand shape_materialize.py: the plan names the tracking branch, and on disk the visibility; an unread root or reused leg is said to be unread, the root before the plan; every holder gets the members' NOTE (#913) #969 (RV969: "optional"). The case is one scaffold-project.py,family.py initand shape_materialize.py: the plan and the visibility NOTEs go by values GitHub did not give, misword an internal root, skip a public holder's credential NOTE, and name no tracking branch #913's own reading says GitHub does not give: internal visibility exists only for an organisation an enterprise account owns, which is not on the Free plan (the comment atscripts/shape_materialize.py:1806-1812). - RV947 NIT-6,
src/openreposhape/standard.py:698. Line 698 ofprepare's docstring (:693) is 104 characters, where the rest of its paragraph wraps at about 76. It is the third line of the paragraph:696-701, and the sentence "git must be there, because the standard is a clone;" sits on it with no re-wrap. Lane 3 left it "for the next PR that touchesstandard.py, rather than restarttestshere". Nothing enforces a line length (RV947: "No test enforces line length";pyproject.tomlis the only one ofpyproject.toml,setup.cfg,tox.iniand.flake8here, and it sets noline-length,max-line-lengthorE501); the other four lines in the file over 79 characters are 81 (:181,:339,:375,:426).
What happens. Measured at ae63d450, and at 1951e6aa6 (main before #969) by an archive of that commit, calling free_plan_secrets_note("acme", "acme/Atlas", <visibility>) with organisation_plan replaced by a function that answers the plan named (a stub gh exit 97 first on PATH, GH_TOKEN=bogus, an empty GH_CONFIG_DIR); each answer cut after its first sentences:
plan unread, root internal at 1951e6aa6: NOTE this run could not read acme's plan from GitHub, so it cannot say whether the Free-plan
secrets hint applies. acme/Atlas is internal, so it applies when acme is on the GitHub Free plan: ...
at ae63d450 : NOTE this run could not read acme's plan from GitHub, but the Free-plan secrets hint does not hang
on it: acme/Atlas is internal, which GitHub gives only to a repository of an organisation an
enterprise account owns, and that organisation is not on the GitHub Free plan. ...
plan free, root internal at both: NOTE acme is on the GitHub FREE plan, where ORGANISATION Actions secrets are delivered only to PUBLIC
repositories. acme/Atlas is private, so org-level SHAPE_LEGS_APP_ID / ...
plan unread, root private at both: NOTE this run could not read acme's plan from GitHub ... acme/Atlas is private, so it applies when
acme is on the GitHub Free plan: ...
The first row is item 1: adopt's note for an internal root with an unread plan is not the words it printed before. The second is item 2. The third is the case the docstring was right about.
Evidence.
- The probe above, and the lines.
- RV969's NITs 3 and 6, and RV947's round-2 NIT-6 (the round-1 comment
issuecomment-6252705614holds NITs 1 to 5; the sixth is in the round-2 comment). adopt-project.py,scripts/shape_materialize.pyandsrc/openreposhape/standard.pyare not pinned copies.scripts/repo_shape.py, which holdsFREE_PLAN_HINT, is one, so item 2 must not change that text: (b) below passeswhatand leaves it alone. No project re-pins.
Direction.
- Reword the last sentence at
adopt-project.py:11634-11636: where the plan is unread, an internal root is toldFREE_PLAN_UNREAD_INTERNALsince scaffold-project.py,family.py initand shape_materialize.py: the plan names the tracking branch, and on disk the visibility; an unread root or reused leg is said to be unread, the root before the plan; every holder gets the members' NOTE (#913) #969, and every other case is in the words adopt printed before. - Choose one. (a) Leave the branch and say in a comment at
shape_materialize.py:1970why an internal root on a Free plan should not arise, and why "private" stands if it does. (b) Pass the visibility through thewhatargument the caller already supplies, so the sentence is true of an internal root without touchingrepo_shape.py: for examplewhat=f"{root} is internal, which this hint treats as", which reads "acme/Atlas is internal, which this hint treats as private, so org-level ...". The author decides; (b) is one line and a row. - Re-wrap
src/openreposhape/standard.py:696-701at about 76 characters, no word changed.
Verify.
grep -n "words adopt printed before are unchanged" adopt-project.pyfinds nothing, and the new sentence agrees with the first row of the probe.- For (b), the probe's second row prints no "is private" for an internal root; for (a), the comment is there.
tests/test_plan_visibility_notes.py,tests/test_free_plan_hint_reads.pyandtests/test_adopt_free_plan_hint_root.pypass, with a row for an internal root on afreeplan if (b). awk 'length($0) > 100' src/openreposhape/standard.pyprints nothing, andtests/test_openreposhape_package.pypasses (a docstring changed; no code).- One file at a time under a stub
gh.
Size: S.
Lane: openreposhape-3 (openRepoShape-3)
Activity
brettheap commentedon Oct 20, 2026
CLAIMED — lane openRepoShape-3, session b30e8b49-f249-4668-adb1-1dbfa93c09e1@Eagle, 2026-10-20T05:05:12Z, for #994
Logged in
lanes/log/openRepoShape-3.mdatdc28c492ec071e24c9a472544161ab8ba068240b.The three reads (lane-collision-protocol Rule 1):
adopt-project.py and test_free_plan_hint_reads.py: adopt's docstring …
adopt-project.py and README.md: the Makefile follow-up names a kept `…