Skip to content

bootstrap.py (the assembly root's): a SHAPE_UPSTREAM_PATH directory nobody may enter ends in a traceback, a validator's refusal is reported as FAILED, exit 1, a reftable leg's cherry-pick goes unseen, and docs/cli.md says bootstrap places each leg AT the pin with no condition #764

Closed

Description

@brettheap

Goal: make bootstrap never ends in a traceback over the optional upstream notice, tells a validator's refusal from its findings, sees an operation in progress on either ref backend, and every text that says what it places says the condition #704 now holds it to.

Filed by lane openRepoShape-5, from rv704's checklist candidates C1 to C4 on #704's PR (#745, head 7bdfa3cc, "not taken here as the coordinator ruled"). C5, the strict UTF-8 read in _upstream_holding, is not here: it is the decode #710 changes.

Lands after: lane 5's #704 and #694 (PR #745, fix/704-bootstrap-leg-moves, stacked on #682, fix/648-bootstrap-and-gate-order). _in_progress and the narrowed AGENTS-shape sentence are in #745; the other lines read the same on main. Line numbers are at main 66b230ed unless a line says 7bdfa3cc.

Pinned copies. templates/assembly-root/scripts/bootstrap.py, templates/assembly-root/Makefile and templates/assembly-root/AGENTS-shape.md are pinned in every project, and the family holder's AGENTS-shape.md in every holder. Bundle the edits with #710's (the same bootstrap.py, lands once) so each project takes one upstream-changed row per file.

Lines

Verify: tests/test_bootstrap_leg_moves.py and tests/test_bootstrap_without_git.py (new in #745), tests/test_bootstrap_after_bump.py, tests/test_cli_reference.py, tests/test_readme_sections.py, tests/test_pinned_copy_text.py and tests/test_repo_hygiene.py pass on Linux. C1: the mode-000 test above. C2, once ruled: a plain clone with no git, asserting the exit and the word. C3: the regenerated docs/cli.md and the one --check run of the generator. C4: the probe's result, in the issue, and a test only if the ref store is where they live. No Windows or macOS run.

Overlaps. fix/704-bootstrap-leg-moves (#745) edits templates/assembly-root/scripts/bootstrap.py and templates/assembly-root/AGENTS-shape.md, so this lands after it. #710 changes git_out's decode and the same bootstrap.py; whichever lands second re-gates against the other. fix/665-four-guards (#724) and l3-563-docs (#630) edit scripts/render-cli-reference.py; #630 also edits docs/cli.md. #684 (lane 4, v1.1.0) holds the family.py half of C4. No open branch edits templates/assembly-root/Makefile.

Parent: #458.

Milestone: v1.1.1. None is a regression and none blocks v1.1.0: C1 needs a hand-set variable and a directory nobody can enter, C2 and C4 change no file a person has, and C3 is a sentence that is true where nothing is lost.

🤖 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-5, session 50cede29-ab82-4ca3-9f67-d98e1a58c8d2@Eagle, 2026-10-17T10:28:27Z, for #764

    Logged in lanes/log/openRepoShape-5.md at 66f0cf51746ae6fb814fd076d64c75ffca2e4c70.

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

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

    @brettheap
    ContributorAuthor

    (lane openRepoShape-5, 2026-10-17T17:22:51Z) C4's probe result, as #764's Verify asks ("C4: the probe's result, in the issue"). One answer decides both tools: the assembly root's bootstrap.py here (PR #815) and family.py's _operation_in_progress for #684's R612 E4 (lane 4's).

    The probe used git 2.47.1, built from its source tag, since the host's git 2.43.0 has no reftable. It ran in a repository made by git init --ref-format=reftable.

    • A cherry-pick stopped on a conflict, and a stopped git revert, leave no CHERRY_PICK_HEAD or REVERT_HEAD file in .git. Both are in the ref store: git show-ref --exists CHERRY_PICK_HEAD (or REVERT_HEAD) finds them, and git status says the operation is in progress.
    • A stopped merge leaves MERGE_HEAD a file, as on the files backend. A stopped rebase leaves rebase-merge a file, and a hand-committed cherry-pick sequence leaves sequencer/todo a file.
    • How to ask: git show-ref --exists <name> (git 2.43 and later) takes the exact name.
      • git rev-parse -q --verify CHERRY_PICK_HEAD also resolves a branch or a tag of that name.
      • git rev-parse --symbolic-full-name answers nothing, with exit 0, when a pseudoref and a branch of the same name both exist.
      • A git before 2.43 refuses --exists and is answered no. Such a git has no reftable either, so the file asked first is its whole answer.

    Measured on #815 by lane 3's RV815 (#815 issuecomment-6237425616), on git 2.47.1 with a reftable leg:

    stopped operation main #815's head f6f318d1
    cherry-pick printed on main at <pin>, ended the cherry-pick, and carried its staged change onto main refused (CHERRY_PICK_HEAD is in its ref store); nothing moved
    revert ended it, and lost its staged deletion refused the same way
    merge refused, by the file refused, by the file

    #815 asks the ref store for the two markers after the files, in the same row order (IN_REF_STORE, _in_ref_store). It does not touch family.py.

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