Skip to content

setup-project.py: step (3) passes an unwritable parent or a missing drive, and step (4) shows a chain the plan verifies as [declared-unverified] #608

Closed

Description

@brettheap

Setup's step (3) should ask for a writable parent and an existing drive, step (4) should pass --pin-source as --link-source, and step (5) should say "refused" for a plan it printed.

From the checklist triage of 2026-10-15; Brett Heap approved its recommendations at 2026-10-15T16:49:38Z. One pull request covers the lines below.

Lands after: #569.

Lines

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

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

L2-25 (P3; setup-project.py, #569 review): step (4) is not given the passthrough's --pin-source as the naming validator's --link-source, so a chain the scaffold verifies shows [declared-unverified] there.

  • naming_declarations (setup-project.py:1936-1957 at c71eadb) passes --pins and --referent-chain only, and check_names runs the validator (:1964-1973). The scaffold reads the same --pin-source for each chain link.
  • review569-c71eadb/tools/logs/probe-step4.log, cases 6 and 7: a link tree that verifies the chain gives [declared-unverified] and a WARNING in step (4), while the plan verifies it. A link tree that breaks the chain gives "unverified" in step (4) and broken in the plan. The domain-descendant classification matched the plan in all 12 cases, which is what setup-project.py: its paste lines, the step (3), (4) and (7) checks, and the upstream-org guard #538's line asks.
  • Direction: pass the passthrough's --pin-source to the validator as a bare --link-source.

— #459, comment

L2-26 (P3; setup-project.py, #569 review): step (3) passes a parent folder the user cannot write and a Windows drive that is not there, so all three repositories are created before step (7) refuses.

  • nearest_entry returns None for a missing drive (setup-project.py:1829-1838 at c71eadb), and refuse_a_file_above lets None pass (:1868). It asks only that what it finds is a folder, not that the user can write there. The setup-project.py: its paste lines, the step (3), (4) and (7) checks, and the upstream-org guard #538 line on this checklist covers a file standing in the way, not these two.
  • Probed: with --into <ro>/work and <ro> at mode 555, step (3) passes and all three repositories are created; step (7) then refuses could not be made a folder (Permission denied) and prints the finish-by-hand lines (review569-c71eadb/tools/probe_step3.py). The missing drive is read from the code and was not run (no Windows here).
  • Direction: in step (3), make and remove a folder at the nearest existing parent before the plan, and refuse a path whose drive does not exist.

— #459, comment

L2-27 (nit; setup-project.py, #569 review): step (4) reports from a --pin that the scaffold then refuses at the plan, because passed_values takes a following word that starts with - as the value.

  • passed_values (setup-project.py:1908-1923 at c71eadb, the values.append(words[index + 1]) at :1921). Its docstring says a value never starts with - in the second spelling, because argparse reads such a word as a flag.
  • Examples: --pin openGlass (no commit), --pin a,b@<sha>, --pin --referent-chain x. Step (4) prints its naming report, and the plan then refuses; nothing is created.
  • Direction: leave a following word that starts with - out of the values, as the docstring says.

— #459, comment

L2-37 (nit; setup-project.py, #573 review): step (5) says "the plan could not be produced (see above)" after a plan that was printed and then refused.

— #459, comment

Activity

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

    @brettheap
    ContributorAuthor

    CLAIMED — lane openRepoShape-2, session 81650e29-c906-4fe8-96c9-55580bfe0c44@Eagle, 2026-10-15T18:24:22Z, for #608

    Logged in lanes/log/openRepoShape-2.md at 47f5feba1c74c3a13573cab932dece696b4e714d.

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

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