Skip to content

setup-project.py's run and the assembly root's bootstrap.py _run start Python children with no environment, so a cp1252 stdout gets two encodings from setup and a name it cannot hold ends make bootstrap in validate-manifest.py #836

Closed

Description

@brettheap

Goal: every Python child that setup-project.py and the assembly root's bootstrap.py start writes in the encoding the parent's own stdout has, so a stdout that cannot hold a character ends in neither a stream of two encodings nor a traceback in a validator.

Filed by lane openRepoShape-5, from the checklist candidates of #759's PR (#808, writer w759: candidates 1 to 3, and the finding its body measures), and from lane 2's review of that PR (rv808, SHOULD 1: "there are six Python children, not five"). #759 itself (the guards) is not reopened: it holds the setup-project.py row as a strict xfail (NOT_YET) and changes no tool. The first two lines below were measured by w759 and are not re-run here; the third is read from source.

Lands after: lane 5's #759 (PR #808, fix/759-quoting-launcher-guards, head 84ce67c9), which adds the LAUNCHERS rows and NOT_YET (tests/test_validator_child_encoding.py:616 and :628 at that head). The assembly bootstrap.py is also edited by #764 (PR #815) and #710 (PR #824); whichever lands second re-gates against the others. path:line is at main 6626a3c5.

Lines

Verify: tests/test_validator_child_encoding.py, tests/test_setup_project_py.py, tests/test_setup_sh.py, tests/test_bootstrap_without_git.py, tests/test_bootstrap_after_bump.py and tests/test_repo_hygiene.py pass on Linux. For the first line, #808's probe as a test: setup-project.py --yes --local-remote-dir under PYTHONIOENCODING=cp1252:strict and cp1252:surrogateescape, a gh stub first on PATH, asserting exit 0 and that every stdout line decodes as the encoding the parent wrote (none is "not valid UTF-8" where the parent says UTF-8), and the NOT_YET row removed. For the second, a scaffolded project whose name: the code page cannot hold, run under cp1252:strict: exit 0 and manifest ok, with the validator's name printed through the escape. One mutant per env= put back to nothing, each caught. No Windows run (CI is Linux only, #597): the code page is emulated with PYTHONIOENCODING, as #254's and #808's tests do.

Overlaps. #808 edits tests/test_validator_child_encoding.py. #756, #811 and #821 edit setup-project.py (#811 the name checks near :350-470, #821 the Git Bash dialect), far from run and the children. #815 and #824 edit the assembly bootstrap.py; #772, #775, #788 and #794 (lane 3's siblings.py and doctor branches) edit templates/family-root/scripts/siblings.py. #817, #821, #823 and #827 edit scripts/repo_shape.py, which a moved helper would also edit. The assembly bootstrap.py and repo_shape.py are pinned copies in every project.

Parent: #459.

Milestone: v1.1.1. Each case needs a stdout whose code page cannot hold a character the run prints (Windows' ANSI page on a redirected stdout): the stream is mixed, or make bootstrap refuses a project that is fine. Nothing is lost, #254's fix covers bump-leg.py and update-shape.py apply, and v1.0.0 shipped with it as v1.1.0 will.

🤖 Generated with Claude Code

Activity

  1. added this to the v1.1.1 milestone on Oct 17, 2026
  2. brettheap commented on Oct 17, 2026

    @brettheap
    ContributorAuthor

    CLAIMED — lane openRepoShape-2, session 81650e29-c906-4fe8-96c9-55580bfe0c44@Eagle, 2026-10-17T17:12:27Z, for #836

    Logged in lanes/log/openRepoShape-2.md at 26916efbf103209c95be8c0aacdaeb74e86ceb8c.

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

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