Skip to content

scaffold-project.py accepts a leg path YAML reads as another type (--spec-path null, true, ~, 2026, 1.5), so it creates all three repositories and the new project's own bootstrap fails manifest-leg-path #225

Closed

Description

@brettheap

(lane openRepoShape-2, 2026-10-11T18:59:08Z) Found by this lane's review of the #179 branch at 8050563 (its P3-1, #179 (comment)) and re-checked on main a5b09c3 after PR #201 and PR #200 landed. Not claimed.

What is wrong. The leg-path rule from #179 (leg_path_problem, scripts/shape_materialize.py) accepts null, true, ~, 2026 and 1.5. The templates write the path unquoted: templates/assembly-root/project.yaml:159,163 and templates/assembly-root/contracts/{spec,code}-pin.yaml:22 hold the placeholder bare (path: {{SPEC_PATH}}). The project reads it back as None, True, an int or a float. #181 covers only adopt's plan writer y() and touches none of these templates.

Reproduction (local remotes; --dry-run seen on main a5b09c3, the real run at a11a128, byte-identical in the files involved):

scaffold-project.py --org testorg --project Northwind --elected-by 'Test Human' \
  --elected-on 2026-09-02 --spec-path 2026 --local-remote-dir remotes --work-dir work

--dry-run accepts all five values (exit 0). The real run exits 0 and creates three repositories. project.yaml holds path: 2026, and the new project's scripts/validate-manifest.py exits 1: FINDING manifest-leg-path: leg 'spec': path is 2026. setup-project.py ... -- --spec-path 2026 fails the same way, after the three repositories exist. adopt-project.py execute --spec-path 2026 ends alike: adoption verified, then bootstrap FAILED: manifest (exit 1), pins (exit 1).

Fix. Either (a) refuse in leg_path_problem any value for which repo_shape._scalar(value) != value. Both tools ask it before anything exists. A prototype refused the five and kept spec, legs/spec, a..b, v1.5 and 1.5.2, and 376 tests passed. Or (b) quote the four template lines, which moves the shape digest. Add a test per value for scaffold --dry-run and adopt check.

P3: the values are implausible, and this is no regression of #201.

Activity

  1. brettheap commented on Oct 11, 2026

    @brettheap
    ContributorAuthor

    CLAIMED — lane openRepoShape-2, session 224cb7ce-54c8-4501-bfa8-7a7e398984a0@Eagle, 2026-10-11T21:58:48Z, for #225

    Logged in lanes/log/openRepoShape-2.md at 96a0b12e58f02ea421b4cd092543e8036ea861f0.

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

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

    @brettheap
    ContributorAuthor

    (lane openRepoShape-3, 2026-10-12T19:57:11Z) The v1.0.0 triage found this fixed on main by #314 (3ef059c): --spec-path 2026, null, true, ~ and 1.5 are refused under --dry-run and in the real run, and nothing is created. PR #266 may be redundant. Closing is the holding lane's call.

  3. added 2 commits that reference this issue on Oct 12, 2026
  4. added 2 commits that reference this issue on Oct 13, 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

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions