Skip to content

setup-project.py: its paste lines, the step (3), (4) and (7) checks, and the upstream-org guard #538

Closed

Description

@brettheap

Six small defects in setup-project.py's printed text and its step checks, in one change.

From the v1.1.0 triage of the v1.0.0 known limits on #459. One pull request covers the lines below.

Lines

  • setup prints cd <clone> and the step-(7) backstop's paths unquoted; a space in --into splits them. Where: setup-project.py hand_over (:2169), backstop (:2022-2029). Effort S; all, mostly Windows. On main 3121945: say(" cd %s" % clone) and the backstop's die(...) are still unquoted; the reach is ordinary, but the bar puts a NEXT-only harm in P2. (source)
  • Inside setup, the scaffold's "NEXT STEPS: git clone / cd / make bootstrap" prints before setup runs them. Where: scaffold-project.py :1519-1533; setup-project.py scaffold (:1936). Effort S; all. On main 3121945: Nothing silences the block under setup; any ordinary run reaches it, and the only harm is a NEXT line. (source)
  • A FILE at <into>/<Family> passes step (3); three remotes are created, then a FileExistsError traceback. Where: setup-project.py refuse_a_taken_clone_path (:1793), os.makedirs (:1995). Effort S; all. On main 3121945: lexists(<into>/<Family>/<Project>) is False under a file, and os.makedirs(parent) runs only after the scaffold. (source)
  • With -- --dry-run passed through, step (7) says "The three repositories WERE created" when none were. Where: setup-project.py step (7) (:2063-2067). Effort S; all. On main 3121945: setup still never checks its passthrough for --dry-run (the only --dry-run is its own plan call, :1885). (source)
  • setup step (4) asks the naming check without a --pin passed after --: "no referent pin declared". Where: setup-project.py check_names (:1806-1823). Effort S; all. On main 3121945: check_names still runs --explain on the three names only; the run continues correctly. (source)
  • auS1-12: upstream-org guard compares exactly, so --org OpenSoft scaffolds into opensoft's namespace. Where: setup-project.py :1248, :1285. Effort S; all. On main 3121945: UPSTREAM_ORG is compared with == at :1248 and :1285; this reaches only opensoft members, and one casefold fixes it. (source)

Rides along (backlog; tick it here if the same change covers it)

  • The step-(7) backstop under --local-remote-dir prints a recursive clone without protocol.file.allow (source)
  • Under --local-remote-dir, the scaffold's own NEXT STEPS clone lacks -c protocol.file.allow=always (source)

Note: A duplicate line about step (7)'s unquoted paths (#459, comment 6147244779) is closed into the first line here.

Each line above is marked → this issue on its tracking issue. Tick it there too when this closes.

The lines as written on the tracking issues

setup-project.py prints paths unquoted in two of its own paste lines.

— #459, comment

AT-scaffold N6: inside setup, the scaffold's own "NEXT STEPS: git clone / cd / make bootstrap" block (scaffold-project.py:1524-1536) prints before setup does those very steps itself.
— #459, body

A FILE standing where the clone's parent folder should be (<into>/<Family> with --family) passes step (3). All three remotes are then created, and the run dies with a FileExistsError traceback at setup-project.py:1974 instead of a REFUSED: line.
— #459, comment

With -- --dry-run passed through, step (7)'s refusal says "The three repositories WERE created" when none were.
— #459, comment

AT-scaffold N2: setup's step (4) never asks the naming validator about a --pin passed through after -- (check_names, setup-project.py:1523-1545 runs --explain <Project> <Project>-spec <Project>-code and nothing else), so the report says "no referent pin declared" and step (5)'s plan then says domain-descendant.
— #459, body

auS1-12: the upstream-org guard compares exactly: org == "opensoft" (setup-project.py:1280), and the origin check at :1243 does the same. So --org OpenSoft passes with no refusal, and since GitHub resolves an organisation login case-insensitively, a person with create rights scaffolds into opensoft's namespace. AGENTS.md:30-32 and README.md:336-338 say it refuses --org opensoft. The fix is to casefold the comparison.
— #459, comment

The step (7) recovery in --local-remote-dir mode prints a hand recursive clone without -c protocol.file.allow=always, which a clone of local legs needs.
— #459, comment

AT-scaffold N1: under --local-remote-dir the scaffold's own NEXT STEPS clone (scaffold-project.py:1524-1529) fails with transport 'file' not allowed, because setup adds -c protocol.file.allow=always for its own clone (setup-project.py:1692) and the printed line does not. Test path only.
— #459, body

Activity

  1. added this to the v1.1.0 milestone on Oct 14, 2026
  2. brettheap commented on Oct 14, 2026

    @brettheap
    ContributorAuthor

    CLAIMED — lane openRepoShape-2, session 81650e29-c906-4fe8-96c9-55580bfe0c44@Eagle, 2026-10-14T22:31:21Z, for #538

    Logged in lanes/log/openRepoShape-2.md at a5c248c163711a4a37b223d61fbf6852e63a50a8.

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

    1. existing `CLAIMED —` comments on opensoft/openRepoShape#538:
       none
    2. `gh pr list --repo opensoft/openRepoShape --state all --search "#538"`, kept where the row or its body names `#538`:
    552	shape-doctor.py: the `machine` row of a machine that is not ready names the preflight checks that failed, in the `[!!]` lines the preflight printed, so its reason no longer ends on `this machine is not ready yet (see above).` with nothing above it (#549)	l3-549-doctor-machine-row	OPEN
    3. `git ls-remote --heads git@github.com:opensoft/openRepoShape` branches naming `538` as a whole token:
       none
    
  3. added 3 commits that reference this issue on Oct 15, 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