Skip to content

family.py, scaffold-project.py and bump-leg.py: init's plan rows and seven refusals name a holder, a folder, a lock, a remote path or a root as it is, so an ESC, a line break or U+202E in a path reaches the terminal as #692's refusals no longer let it #766

Closed

Description

@brettheap

Goal: every path a plan row or a refusal of these three tools names is spelled as shown_path spells it (as it is, and as Python's repr spells it where a character in it is not printable), so a path a person supplied, or git keeps, cannot forge a line or send an escape sequence.

Filed by lane openRepoShape-5, from rv666-692's review of #692's PR (#731, head ab55c29f; its two checklist candidates, "Left out, and why") and from rv672's candidate 3 on #672's PR (#746: {root} printed raw).

Lands after: lane 5's #692 (PR #731, fix/692-raw-folder-paths), which spells a path in folder_cannot_be_made, refuse_unmakeable_folder, make_folder, scaffold-target-exists, family-target-exists and family-operation-in-progress, and #672 (PR #746, fix/672-bump-leg-branch-and-push-line), which spells each dirty file's name. #731 uses shown_source, which since #634 returns repo_shape.shown_path(source); this issue calls shown_path directly. Line numbers are at main 66b230ed.

Lines

Verify: tests/test_dry_run_parity.py (the SCAFFOLD_CASES and FAMILY_CASES rows #731 adds), tests/test_family_refuse_up_front.py, tests/test_family_init_landing.py, tests/test_family_dry_run.py and tests/test_bump_leg_branch_and_push_line.py pass on Linux. One new row per line: a path with an ESC, and one with a line break and then WARNING forged-line: pwned, in each of the plan and the seven refusals (a --work-dir or --into for the family rows, a root for bump-leg), asserting exit status, no ESC and no second line starting WARNING, and that a printable path is named byte for byte so no existing row changes. POSIX only for the names the disk must hold (skipped where it refuses them).

Overlaps. fix/692-raw-folder-paths (#731) edits scripts/family.py, scaffold-project.py and scripts/shape_materialize.py; fix/672-bump-leg-branch-and-push-line (#746) edits scripts/bump-leg.py; six other open branches edit scripts/family.py (#646, #684, #686, #688, #689, #693), and fix/693-local-remote-dir also scaffold-project.py; lane 4's #688 (init values: --created-by and GIT_AUTHOR_NAME printed in the plan) edits the same plan block, so read its head before starting. None of these files is a pinned copy.

Parent: #459 (family.py, scaffold-project.py) and #458 (bump-leg.py).

Milestone: v1.1.1. Each needs a directory named with a control character, which the person made; nothing is lost, and none is a regression.

🤖 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-17T10:31:57Z, for #766

    Logged in lanes/log/openRepoShape-2.md at 95a3c3283eb5b23f1cf3b4ca9c7c1df99e16981b.

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

    1. existing `CLAIMED —` comments on opensoft/openRepoShape#766:
       none
    2. `gh pr list --repo opensoft/openRepoShape --state all --search "#766"`, kept where the row or its body names `#766`:
       none
    3. `git ls-remote --heads git@github.com:opensoft/openRepoShape` branches naming `766` as a whole token:
       none
    
  3. added 4 commits that reference this issue on Oct 17, 2026
  4. added 2 commits that reference this issue on Oct 18, 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

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions