From b795ef74ab96001f688c201ed469191e3f93bf9a Mon Sep 17 00:00:00 2001 From: Brett Heap Date: Sun, 18 Oct 2026 14:16:29 +0000 Subject: [PATCH 1/3] docs/release-notes/v1.1.1.md: the points RV883 round 5 held for after the release commit, each checked against main (#883 follow-up) A follow-up to #883, the v1.1.1 release commit 5017830, as lane 3 placed it: RV883 round 5 found #883 READY at 02095a5 (#883 issuecomment-6250558821) and held two SHOULDs and five NITs for after the tag (issuecomment-6250568065; #473 issuecomment-6250902576). Each was checked against the code at main 2d372bb, and at v1.1.0's 190133d where it speaks of v1.1.0: - #778's leg-clone sentence: v1.1.0's `check_the_way_in` called `way_in_project` before `leg_clone`, so a leg clone ended in the same traceback, or, over a tab line, in `FINDING the way in refused`; it was never offered `the other way in`. Said so, and "is", not "stays", exit 2. - #802: v1.1.0's `_blocks_inside` already read a `try`'s `else` and `finally` outside its guard; #802 added test rows. The clause is gone. - "What 1.1.1 fixes" names "or cannot be used" and `the other way in`. - #815's leftover tracebacks: measured on Python 3.12 (its runs used 3.12.3); 3.13 is read, not run. - #871: `_` is let by for any owner, an organisation's name included. - #869: the disk is asked only for a name that is not UTF-8. #778 landed as 2d372bb, which is its reviewed head 8259ea1 file for file, so its lines stand: the header comment, "Not landed at drafting time" and the open list's header now say main 2d372bb, and the shape-copy range runs to it. The open list is #879 alone. No other file changes. Lane: openreposhape-1 (openRepoShape-1) Co-Authored-By: Claude Opus 5.5 --- docs/release-notes/v1.1.1.md | 72 +++++++++++++++++++----------------- 1 file changed, 38 insertions(+), 34 deletions(-) diff --git a/docs/release-notes/v1.1.1.md b/docs/release-notes/v1.1.1.md index b42a7ada..467e1d2b 100644 --- a/docs/release-notes/v1.1.1.md +++ b/docs/release-notes/v1.1.1.md @@ -4,9 +4,11 @@ ask on #473 (issuecomment-6247035406); round 2 answers RV883 (#883 issuecomment-6247451611), round 2b its full NIT list (lane 3, 2026-10-18T09:29:28Z) and its round 2 (#883 issuecomment-6248362246), and -round 3 its round 3 (#883 issuecomment-6248627219), and rounds 4 to 6 -refresh it after RV883 found it READY (#883 issuecomment-6248756609), at -main `e7039b7`, with #778 written from its reviewed head `8259ea1`. +round 3 its round 3 (#883 issuecomment-6248627219), rounds 4 to 6 +refresh it after RV883 found it READY (#883 issuecomment-6248756609), and +round 7 takes the points RV883 round 5 held (#883 +issuecomment-6250558821), at main `2d372bb`, #778's squash, which is its +reviewed head `8259ea1` file for file. Every `**[placeholder]**` below, and every section headed "remove at tag time", is filled in or cut before the tag. --> @@ -106,9 +108,9 @@ cut from `release/v1.1` (#850). `scripts/repo_shape.py`, the `legs` and `members` rows' NEXT puts the file back, and the `agent-files` row's WHY puts it back before it names a gate, where each named a gate that dies on the import (#750, #776). Outside a - shape root, a naming policy that does not load in the doctor's own - checkout is an `n/a` row on `the way in`, not a finding or a traceback - (#707). + shape root, a naming policy in the doctor's own checkout that does not + load, or cannot be used, is an `n/a` row on `the way in` and, in a + repository, `the other way in`, not a finding or a traceback (#707). - **Family holders.** More of `family.py add`'s and `validate-family.py`'s remedies type as printed in the states they name, for a member under another spelling (#761, #762, #839, #840) and for a gitlink outside @@ -426,8 +428,8 @@ commit v1.1.1 is tagged on. the run's target where it printed ``. The missing-name refusal says the validators pass only where none of them meets the line. The readers skip an `if TYPE_CHECKING:`, `if False:`, `if 0:` or `if None:` - body and a statement after an unconditional `raise`, as Python does, and - read an import in a `try`'s `else` or `finally` as taken (#802, #675). + body and a statement after an unconditional `raise`, as Python does + (#802, #675). - **The branch HEAD is on, as git's bytes.** `update-shape.py`, `family.py` and `bump-leg.py` read the branch HEAD is on as the bytes git wrote, so a branch ending in U+00A0, U+2028 or U+0085 is no longer read as its @@ -752,11 +754,11 @@ commit v1.1.1 is tagged on. prints no NEXT. A tab line gave `FINDING the way in refused`, and a pattern that does not compile ended the doctor in a traceback, exit 1. A policy that loads and then raises when asked "cannot be used". A leg - clone keeps its leg row and its Triad row over such a pattern, where - `scripts/shape_advisory.py` read it as no leg and the doctor offered it - `the other way in` and the scaffold. The verdict stays NOT A SHAPE ROOT, - exit 2. The doctor's EXIT CODES list says what INVALID and - `manifest-kinds` name (#778, #707). + clone keeps its leg row and its Triad row over each such fault, where + the doctor ended in the same traceback, or, over a tab line, in + `FINDING the way in refused`. The verdict is NOT A SHAPE ROOT, exit 2. + The doctor's EXIT CODES list says what INVALID and `manifest-kinds` name + (#778, #707). ### Install, CI and the docs @@ -835,10 +837,11 @@ commit v1.1.1 is tagged on. only, and the U+202E directory of `test_adopt_template_values.py` has no guard, so a full disk or a read-only `tmp_path` fails those tests, where they read as SKIPPED (#845, #834). Six skips on a failed git call ask the - system first, whether the file-name encoding can spell the name and the - disk hold it, so a failed git call fails the test; the U+202E tests, and - six template-value tests, skip where a C locale's encoding cannot spell - their text, where they raised `UnicodeEncodeError` (#869, #853, #854). + system first, whether the file-name encoding can spell the name and, for + a name that is not UTF-8, whether the disk can hold it, so a failed git + call fails the test; the U+202E tests, and six template-value tests, + skip where a C locale's encoding cannot spell their text, where they + raised `UnicodeEncodeError` (#869, #853, #854). The `pins` row's merged-away check is tested where `check` refuses the standard, and beside a `both`, an `upstream-removed` and an `unmapped` row (#770, #755). None of these changes a shipped file. @@ -955,10 +958,11 @@ New in v1.1.1, from the pull requests that landed it: is a line on #458 (#802, #675). - On Python 3.12 and 3.13, a project's `make bootstrap` still ends in a `PermissionError` traceback over a leg directory nobody may enter (step - (a)) or a `governance/` nobody may enter (step (c)), as #815's body - measured. Beneath a `bootstrap REFUSED` line, `setup-project.py`'s step - (7) still says `bootstrap failed (see above)`, and `siblings.py` that the - member's own bootstrap exited 2 (#815, #764). + (a)) or a `governance/` nobody may enter (step (c)): #815's body + measured it on Python 3.12, and 3.13 is read, not run. Beneath a + `bootstrap REFUSED` line, `setup-project.py`'s step (7) still says + `bootstrap failed (see above)`, and `siblings.py` that the member's own + bootstrap exited 2 (#815, #764). - `update-shape.py apply --branch `, run from a branch whose name is not UTF-8, is refused, exit 2, before anything is written, where v1.1.0 committed and pushed the new branch, or said `nothing to do`; `apply` @@ -1054,10 +1058,11 @@ New in v1.1.1, from the pull requests that landed it: topic's 50 are from GitHub's documentation, and an organisation's 39 is its documented limit on a user's name, since it documents none for an organisation (#859, #838). The characters an `--org` may hold are from - its documentation too, and `_` is let by, for GitHub Enterprise Managed - Users (#871, #863). A leg the plan was edited to name, over a limit, is - told "Use a shorter --project", which does not shorten it (#859, - #838). + its documentation too, and `_` is let by, since a GitHub Enterprise + Managed User's login holds one, so an organisation's name holding `_` is + let by too, though GitHub gives no organisation one (#871, #863). A leg + the plan was edited to name, over a limit, is told + "Use a shorter --project", which does not shorten it (#859, #838). - In `setup-project.py`, `--project 'Atlas '`, given as an argument, still reaches step (4) with a space nobody can see, and under `--local-remote-dir` a name of 247 to 255 characters prints step (4) @@ -1231,11 +1236,10 @@ by moving a tag. - **``** stands for the release commit wherever it appears above. -- **Not landed at drafting time:** #778 (#707), which lands next, and - whose line above is written from its reviewed head `8259ea1`; and this - pull request, which lands last, as the release commit. -- **[placeholder: re-read at tag time.] Open `v1.1.1` milestone issues once - #778 has landed (1 open; 71 of 72 closed: the 69 that the 11:31Z read +- **Not landed at drafting time:** this pull request, which lands last, as + the release commit. +- **[placeholder: re-read at tag time.] Open `v1.1.1` milestone issues at + main `2d372bb` (1 open; 71 of 72 closed: the 69 that the 11:31Z read found, #709 among them, #884, which #886 closes, and #707, which #778 closes):** - #879, the family root's `validate-family.py` and `bootstrap.py`: with @@ -1257,13 +1261,13 @@ by moving a tag. `update-shape.py check`, and every other copy `unchanged`. `apply` re-pinned each with its own validators green, the project once its legs were checked out, and the doctor then said `COMPLIANT` of both. From - `c5359df` to `e7039b7`, `templates/` and `scripts/repo_shape.py` changed + `c5359df` to `2d372bb`, `templates/` and `scripts/repo_shape.py` changed only in the family root's `scripts/bootstrap.py` and `scripts/validate-family.py` and the assembly root's `scripts/validate-pins.py` and `scripts/bootstrap.py`, each on those - lists, and #778's head changes neither. A pull request that lands before - the tag and changes another pinned copy adds it to that list: run - `check` again at the release commit. + lists. A pull request that lands before the tag and changes another + pinned copy adds it to that list: run `check` again at the release + commit. ## Full list From ca49f125c86f2ebf8e13d9bd642bf1832c45b29a Mon Sep 17 00:00:00 2001 From: Brett Heap Date: Sun, 18 Oct 2026 15:11:31 +0000 Subject: [PATCH 2/3] docs/release-notes/v1.1.1.md: #778's leg-clone sentence says which leg keeps its rows, #802's readers what v1.1.0 already skipped, and the draft lines name #883 and #879's move (#883 follow-up) Lane 1's independent reviewer r893 found #893 NOT READY at b795ef74, with one MUST and two NITs. Each was checked against v1.1.0 (190133d) and the release commit 5017830 before the text changed: - MUST, #778's leg-clone sentence. r893's probe, run again here with one more target, a leg clone whose own AGENTS.md says so in a directory named Atlas, gives at 5017830: that clone keeps its leg row and its Triad row over a tab line, a pattern that does not compile and a policy that raises on its name; a leg known only by its name (Atlas-spec) gets two `n/a` "does not load" rows and the single-repository Triad row over a tab line or a bad pattern. At v1.1.0 the AGENTS.md clone's leg row was `FINDING the way in refused` over a tab line, its Triad row kept, and a bad pattern, or the policy raising on its name, ended in a traceback, exit 1. The sentence now says that. - NIT, #802's readers. At v1.1.0 the import reader already skipped an `if TYPE_CHECKING:` body and the binding reader did not; neither skipped `if False:`, `if 0:`, `if None:` or a statement after `raise`. At 5017830 both skip all of them. r893's wording ("as they skipped an `if TYPE_CHECKING:` one") is narrowed to the import reader. - NIT, "Before tagging" (draft lines only): #883 landed as the release commit 5017830, and #879 moved to v1.2.0 at 2026-10-18T14:10:11Z, after 2d372bb landed at 13:19:52Z. No other file changes. Lane: openreposhape-1 (openRepoShape-1) Co-Authored-By: Claude Opus 5.5 --- docs/release-notes/v1.1.1.md | 26 ++++++++++++++++---------- 1 file changed, 16 insertions(+), 10 deletions(-) diff --git a/docs/release-notes/v1.1.1.md b/docs/release-notes/v1.1.1.md index 467e1d2b..aad61146 100644 --- a/docs/release-notes/v1.1.1.md +++ b/docs/release-notes/v1.1.1.md @@ -427,8 +427,9 @@ commit v1.1.1 is tagged on. path with a blank or a `'` pastes, and `update-add-would-overwrite` names the run's target where it printed ``. The missing-name refusal says the validators pass only where none of them meets the line. The - readers skip an `if TYPE_CHECKING:`, `if False:`, `if 0:` or `if None:` - body and a statement after an unconditional `raise`, as Python does + readers skip an `if False:`, `if 0:` or `if None:` body and a statement + after an unconditional `raise`, as Python does, and the binding reader + an `if TYPE_CHECKING:` body, which the import reader already skipped (#802, #675). - **The branch HEAD is on, as git's bytes.** `update-shape.py`, `family.py` and `bump-leg.py` read the branch HEAD is on as the bytes git wrote, so a @@ -754,11 +755,15 @@ commit v1.1.1 is tagged on. prints no NEXT. A tab line gave `FINDING the way in refused`, and a pattern that does not compile ended the doctor in a traceback, exit 1. A policy that loads and then raises when asked "cannot be used". A leg - clone keeps its leg row and its Triad row over each such fault, where - the doctor ended in the same traceback, or, over a tab line, in - `FINDING the way in refused`. The verdict is NOT A SHAPE ROOT, exit 2. - The doctor's EXIT CODES list says what INVALID and `manifest-kinds` name - (#778, #707). + clone whose own `AGENTS.md` says so keeps its leg row and its Triad row + over each such fault. Over a tab line its leg row was + `FINDING the way in refused`, and over a pattern that does not compile, + or a policy that raised on its name, the doctor ended in a traceback, + exit 1. A leg known only by its name is read through that policy, so + over a tab line or a pattern that does not compile it gets a + repository's two `n/a` rows and a Triad row that calls it a single + repository. The verdict is NOT A SHAPE ROOT, exit 2. The doctor's EXIT + CODES list says what INVALID and `manifest-kinds` name (#778, #707). ### Install, CI and the docs @@ -1236,8 +1241,8 @@ by moving a tag. - **``** stands for the release commit wherever it appears above. -- **Not landed at drafting time:** this pull request, which lands last, as - the release commit. +- **Not landed at drafting time:** #883, which landed as the release + commit `5017830`. - **[placeholder: re-read at tag time.] Open `v1.1.1` milestone issues at main `2d372bb` (1 open; 71 of 72 closed: the 69 that the 11:31Z read found, #709 among them, #884, which #886 closes, and #707, which #778 @@ -1245,7 +1250,8 @@ by moving a tag. - #879, the family root's `validate-family.py` and `bootstrap.py`: with the work tree's `.gitmodules` gone, three remedies undo each other or refuse; a `git mv`'d checkout is never named; bootstrap says `ok` beside - git's exit 128. + git's exit 128. It moved to the v1.2.0 milestone at + 2026-10-18T14:10:11Z, after `2d372bb` landed at 13:19:52Z. Each that lands before the tag gets its line above, with its pull request, and a known limit above that names it goes; each that does not From 6cdb5551701a499ab586f2609ef1954d9eebb7bb Mon Sep 17 00:00:00 2001 From: Brett Heap Date: Sun, 18 Oct 2026 17:32:52 +0000 Subject: [PATCH 3/3] docs/release-notes/v1.1.1.md: a known limit names #940, the refusal under the `C` locale of a URL, path or ref with a letter past ASCII as a control character, a regression from v1.1.0 through #872 (#866) that a UTF-8 locale gets past (#883 follow-up) At lane 3 ask on #473: #893 is the v1.1.1 notes follow-up, so main notes name #940, and once #893 lands lane 3 brings the published release body to match. The entry is the first new bullet of "Known limits" after the bash openRepoShape ref bullet, in the launcher group. Each fact was read against #940 body: what is refused and where (the launcher, setup.sh two guards, and install.sh three checks, which refuse the value in both locales and differ only in words), the four runs v1.1.0 ran, who meets it, the way around it, and the milestone. Left out: lane 3 ruling of no v1.1.x back-port unless Brett Heap asks for a v1.1.2, which the body of #940 does not hold. No other file changes. Lane: openreposhape-1 (openRepoShape-1) Co-Authored-By: Claude Sonnet 5.5 --- docs/release-notes/v1.1.1.md | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/docs/release-notes/v1.1.1.md b/docs/release-notes/v1.1.1.md index aad61146..c74fade0 100644 --- a/docs/release-notes/v1.1.1.md +++ b/docs/release-notes/v1.1.1.md @@ -900,6 +900,19 @@ New in v1.1.1, from the pull requests that landed it: `--doctor`. With `OPENREPOSHAPE_REF=a.lock/b` set for one run, a scaffold still asks GitHub for `setup.sh` at that ref, and `--version` exits 0 (#875, #874). +- Under the `C` or POSIX locale, a `$OPENREPOSHAPE_REPO` URL or path, or a + ref, with a letter past ASCII, such as `/srv/café/openRepoShape.git`, is + refused as "a control character", exit 2, by the bash `openRepoShape` and + by `setup.sh`'s two guards; `install.sh`'s three checks, which refuse + such a value in both locales, give the same words under `C`. It is a + regression from v1.1.0: #872 moved the `[![:print:]]` check up front, and + under `C` it matches each byte past ASCII, so `--version`, `--install` + from a file, `--doctor ` beside a checkout and `--preflight` through + a `setup.sh` in a checkout now refuse a repository that v1.1.0 ran. Only + a mirror at such a URL or path, in a shell at `C` or POSIX (cron, a CI + step, a minimal container), meets it; an owner/name never does. It + refuses and does nothing else, and a UTF-8 locale such as `C.UTF-8` takes + the URL or path. It is tracked as #940, for v1.2.0 (#872, #866). - A tracked name that the doctor sets aside before it walks a leg, one holding a control character or a byte that is not UTF-8, still counts in `plan`'s and `execute`'s extension-majority fold. So `engine/` holding