You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
{{ message }}
Repository navigation
update-shape.py apply --accept-local scripts/repo_shape.py can keep an old helper that a newly copied file imports from, and make bootstrap then fails with ImportError #536
update-shape.py does not check the names a copied file imports against a helper the user kept.
From the v1.1.0 triage of the v1.0.0 known limits on #458. One pull request covers the lines below.
Lines
apply --accept-local scripts/repo_shape.py can keep an old helper that a copied file then imports from. Where: update-shape.py cmd_apply; templates/assembly-root/scripts/bootstrap.py:66-69. Effort M; all. On main 3121945: bootstrap.py on main still imports spelled and escape_unencodable_stdout from repo_shape, and update-shape.py has no check of imported names against a kept copy (no ImportError/import scan anywhere). (source)
Note: The duplicate line that reproduced this with bootstrap.py (#458, comment 6132943782) is closed into this issue; its text is quoted below.
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
update-shape.py apply --accept-local scripts/repo_shape.py can keep an older shared helper that a file it copies in the same run needs.
The case: a holder or project whose scripts/repo_shape.py is both (a local edit plus an upstream change) takes --accept-local for it. apply then copies the other upstream-changed files, which may import a name that only the new repo_shape.py has.
The result is an ImportError the first time the copied script runs (make siblings, make bootstrap), while check reports unchanged and the validators pass.
Possible fix: when a copied file imports from scripts/repo_shape.py, apply checks that every name it imports exists in the kept copy, and refuses by name if not (or check reports it).
#456 moves spelled() and escape_unencodable_stdout() into scripts/repo_shape.py, and both roots' bootstrap.py import them. A project that keeps a locally edited scripts/repo_shape.py (check reads it both) with apply --accept-local scripts/repo_shape.py, while taking the new bootstrap.py, gets an ImportError from scripts/bootstrap.py, --help and make bootstrap. Meanwhile apply's validators pass, check then reads everything unchanged, and the project's CI never runs bootstrap. Reproduced with a real scaffolded project. Following check's merge-by-hand avoids it. Direction: apply refuses a kept --accept-local copy that lacks a name another copied shape file imports from it.
— #458, comment
CLAIMED — lane openRepoShape-4, session 11c6c0ef-495a-4a05-94cf-811b7b0a1012@Eagle, 2026-10-14T16:47:36Z, for #536
Logged in lanes/log/openRepoShape-4.md at 0bbd376f1e0c8fe93e1eaa9668a0c6bc3d06e36e.
The three reads (lane-collision-protocol Rule 1):
1. existing `CLAIMED —` comments on opensoft/openRepoShape#536:
none
2. `gh pr list --repo opensoft/openRepoShape --state all --search "#536"`, kept where the row or its body names `#536`:
none
3. `git ls-remote --heads git@github.com:opensoft/openRepoShape` branches naming `536` as a whole token:
none
Activity
brettheap commentedon Oct 14, 2026
CLAIMED — lane openRepoShape-4, session 11c6c0ef-495a-4a05-94cf-811b7b0a1012@Eagle, 2026-10-14T16:47:36Z, for #536
Logged in
lanes/log/openRepoShape-4.mdat0bbd376f1e0c8fe93e1eaa9668a0c6bc3d06e36e.The three reads (lane-collision-protocol Rule 1):
update-shape.py: the `--accept-local` kept-helper refusal says the va…
update-shape.py: `apply` refuses to keep an `--accept-local` copy of …
adopt-project.py and shape-doctor.py: both read `origin` with one fun…
update-shape.py: `apply` refuses to keep an `--accept-local` copy tha…
siblings.py and the family-root README: `make siblings`, `park` and `…
setup-project.py and the assembly root's bootstrap.py: every Python c…
update-shape.py: the `git show <target>:<source>` the remedies print …
update-shape.py: an `except ImportError:` handler that raises answers…
the family root's siblings.py takes `member_make_env` from its bootst…
the family root's bootstrap.py and siblings.py: the jobserver functio…
the family root's bootstrap.py and siblings.py: under GNU make 4.4's …
the family root's siblings.py: with a token in use, the clone and the…
update-shape.py: `update-accept-local-missing-name` asks a copy an ea…
test_refusal_paths_shown_more.py and test_pinned_copy_text.py: the ol…