Description
Goal: each guard fails when the thing it names is broken, and the CLI reference's children leave no bytecode in the templates.
Filed by lane openRepoShape-5 on Brett Heap's word of 2026-10-16T12:17:02Z ("#461's test/CI/doc lines (~27)"), from four lines on #461: two "Tests (#554's review)" lines in its body (body, the .pyc one), lane 5's own line from #578 (comment) and two of lane 4's (R588, the inventory test and the S5778 line).
Lands after: nothing is needed. If Brett rules the Git Bash quoting dialect (#532's decision, checklist line on #459) before this starts, fold the inventory line into that change, because the ruling moves NAMED and the sentence the test reads.
Lines (path:line at main 879d8047)
-
tests/test_cli_reference.pyleavestemplates/family-root/scripts/__pycache__/bootstrap.cpython-312.pyc(Tracking: the test suite, CI and the docs #461 body, "Tests (tests: every test that clones a just-pushed local remote by its plain path now clones it withclone_just_pushed, so the macOSfailed to copy filerace of #440 cannot reach it;load_without_bytecodekeeps the doctor's and the Windows-path tests' loads of the family root's scripts from writing.pycinto the templates; the not-a-list doctor cases hold INVALID, exit 1; andGOOD_KEYSholds th #554's review)").scripts/render-cli-reference.pyruns the template'ssiblings.py --help(PROJECT_TOOLS, the row at :201-206;capture_help, :382-396) in a child whosechild_env()(:268-296) sets noPYTHONDONTWRITEBYTECODE, andtemplates/family-root/scripts/siblings.py:196doesfrom bootstrap import ...from its own directory. Reproduced atd4a7fab9in a fresh clone:env -u PYTHONDONTWRITEBYTECODE PYTHONPATH=<clone>/scripts python3 templates/family-root/scripts/siblings.py --helpleft an 11533-bytebootstrap.cpython-312.pycthere, ignored, sogit statusstays silent. Nothing reads every file under that template after the test today, so the suite is green by order (the same reason as Both roots' scripts/bootstrap.py:mainescapes what stdout cannot encode and spells each value it prints, soname: "a\ud83db"or日本underPYTHONIOENCODING=asciino longer endsmake bootstrapin a traceback (#391) #456's CI failure for the assembly root). Direction: add"PYTHONDONTWRITEBYTECODE": "1"tochild_env()'senv.updateblock and one sentence to its docstring, so a person running the generator gets the same; a test besidetest_child_env_never_lets_a_child_reach_the_network(tests/test_cli_reference.py:467) thatchild_env()holds it. No--helptext changes, sodocs/cli.mdis not regenerated. -
tests/test_validator_child_encoding.py's launcher guard does not seefamily.py(lane 5's line from siblings.py and family.py:make siblingsasks about the family folder before it clones, clones each member on its tracking branch, andfamily.py siblingsruns the holder's own copy (#543) #578).interpreter_runs(:616-631) looks forsubprocess.run([sys.executable, ...])byast.unparse(argv.elts[0]) == "sys.executable", andLAUNCHERS(:610-613) listsscripts/bump-leg.pyandupdate-shape.py.scripts/family.py:6470-6474runs its child as[sys.executable or PYTHON, SIBLINGS_SCRIPT, ...]withenv=inherited_child_environment(). I ran the guard's own helper over the three files at879d8047:bump-leg.py1,update-shape.py1,scripts/family.py0. So the guard would not notice iffamily.py siblingsdropped the child'senv=again (adopt-project.pyplanraisesUnicodeEncodeErrorin its terminal report, after the plan file is written, for a printable name stdout cannot encode (日本.mdunder cp1252, as on a redirected Windows stdout), soplanexits 1 beforeplan written to#214).test_family_py_siblings_escapes_what_its_stdout_cannot_encode(tests/test_family_siblings_placement.py:653) catches that case; the static guard could still list it. Direction:interpreter_runsacceptssys.executable or PYTHONas well, andLAUNCHERSgains"scripts/family.py": "inherited_child_environment". Run the mutant once (dropenv=at :6474) and see the guard fail. - The inventory test has gaps (lane 4's L4-68; "optional hardening", the code is right).
test_the_tools_that_quote_for_the_host_are_the_ones_the_sentence_names(tests/test_readme_windows_quoting_sentence.py:106-120) lists the shipped tools that call a host-dialect quoter. R588 found four holes, and I read each in the code: a quoter imported under another name (from repo_shape import shell_line as joined) is missed, becausehost_calls(:82-103) compares the callee's name withHOST_QUOTERS(:37); a shipped Python file with no.pysuffix is not scanned, and the rootbootstrap(#!/usr/bin/env python3) is one; it pins files (NAMED, :40), not lines, so afamily.pycall switched to POSIX quoting would still pass while the README sentence names the file; and all ofscripts/repo_shape.pyis exempt (:111) where only the bodies ofshell_quotedandshell_lineneed to be. Direction: followImportFrom ... as; scan the shebang files thatgit ls-fileslists; pin each tool's calling functions, not the file; exempt the two bodies by name. Run R588's mutants V2, V3 and V5 and see each fail. - Sonar S5778 at
tests/test_bump_leg_paste_lines.py:402-404(lane 4's L4-69).bump_leg_module.leg_placement(leg)is evaluated insidewith pytest.raises(bump_leg_module.LegNotAsFound), so an exception from it would count as the expected one. The gate passes. Direction: build the placement before thewith(placement = bump_leg_module.leg_placement(leg)), as the test above it does (:383).
Lane 4's triage. Lane 4 had the last two lines as L4-68 and L4-69, known limits in its T17 that it would leave unfiled, and has dropped every #461 line from its proposal for lane 5 (#473 comment). Brett Heap's word of 2026-10-16T12:17:02Z covers them here; if he would rather leave them as known limits, drop them and keep the first two lines.
Overlaps. Open PRs: none of the seven open PRs (#621, #627, #628, #630, #634, #639, #656) touches these files; #630 changes README.md at :152-158, where the sentence the inventory test reads sits, but not the test. Lane 5's in-flight branches: fix/647-branch-left-bump-leg-setup edits tests/test_bump_leg_paste_lines.py at :53, :228 and :232 (the S5778 hunk is :402-404, a different place in the same file).
Mark each line → this issue on #461, and tick it there when this closes.
🤖 Generated with Claude Code
Activity
brettheap commentedon Oct 16, 2026
CLAIMED — lane openRepoShape-5, session 50cede29-ab82-4ca3-9f67-d98e1a58c8d2@Eagle, 2026-10-16T13:56:48Z, for #665
Logged in
lanes/log/openRepoShape-5.mdat2e7bb49d27520bf59eb29afd8497152cf43c054c.The three reads (lane-collision-protocol Rule 1):
render-cli-reference.py and tests/: the CLI reference's children writ…
Merge origin/main (2000488) into l3-563-docs
README.md, the handbook and the v1.1.0 notes: lane 2's review of roun…