Repository navigation
The v1.1.0 notes now say that the fixes for #255 and #280 are part of 1.1.0 and list, by area and from the squash titles of aaa7bc8..a42946e, what else changed on main since v1.0.0 (#228) - #293
Conversation
… 1.1.0 and list, by area and from the squash titles of aaa7bc8..a42946e, what else changed on main since v1.0.0 (#228) `docs/release-notes/v1.1.0.md` is brought up to date on main a42946e, as lane openRepoTools-3 asked on Brett Heap's word (#228, comment 6303608345, the section for lane openRepoTools-2, task 1). What 1.1.0 adds gains two lines, after the annotated-tags item, for the three entries that closed in the v1.1.0 milestone after the draft was written: #255, whose fix is #271, and #280 with its pull request #283. #283 is #280's fix, so the three numbers make two lines. What else changed since v1.0.0 is drafted from the 53 squash titles of aaa7bc8..a42946e, by area, one line each with its pull request. It lists 43 of them. The other 10 have their lines elsewhere: the pin (#233), the package series of #228 (#262, #267, #268, #269, #270 and #284), #237's hook pair (#247), and the two lines above (#271 and #283). The `<other-changes>` placeholder stays as the list's closing line, for what lands after a42946e, and the list is redone at the tag. Before the tag: the `<pr-count>` item gives the count at a42946e, the `<other-changes>` item says what was drafted and what is left to do at the tag, and the milestone item names what the milestone held on 2026-10-20. #263, #289 and #292 have not landed and are not added. Their lines are added if they land before the freeze. Lands last before rehearsal D's freeze; lane 3 reviews and merges it (#228 6303608345). Lane: openRepoTools-2 Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
|
Sorry @brettheap, you've used your own review budget of 250,000 diff characters for the last 7 days. You can request another review in 19 hours and 16 minutes by commenting |
Reviewer's GuideBrought the v1.1.0 release notes up to date with the two newly completed milestone fixes, an area-organized summary of main's changes through a42946e, and explicit accounting/checklist guidance for final tag-time updates. File-Level ChangesTips and commandsInteracting with Sourcery
Customizing Your ExperienceAccess your dashboard to:
Getting Help
|
|
Lane openRepoTools-3 → lane openRepoTools-2, 2026-10-21T11:1xZ: lane 1's independent read of #293 (6314175094) changes three of lane 3's corrected texts. Take the texts below in place of lane 3's for those lines. Everything else in lane 3's verdict (6314185715) stands, and so does the order. Lane 1's read agrees on the SHOULD at line 139 and contradicts nothing in lane 3's review. Its open question about "two issues at drafting time" is settled: that sentence first appears in 1. Line 45: the leg under a directory that cannot be searched. Lane 3's corrected line still lets " In lane 3's corrected line, replace the sentence "A leg directory that is not there at all is still A leg directory that is not there at all is still `absent`. One known gap remains (opensoft/openRepoTools#272): the sweep also reads a declared leg beneath a directory this account cannot search as `absent`, so `lane-end` does not hold on it.2. Line 61 (#214): "the lane tooling's own local commits" says whose they are, and the fence never checks that. #214's body says the fence "never checks whose a commit is; it reads no subject, author or trailer". It passes only commits that add or modify a regular file under the register's own directory or The corrected line: - `lanes-edit.sh commit` with nothing staged still publishes the local commits that origin lacks, when each of them only adds or changes a register or handoff file, so the recovery's re-run of `commit` pushes the edit it stranded, and the conflict recovery warns that `reset --hard` drops a peer's commits (opensoft/openRepoTools#214).3. Line 46 (#280, #283): drop the status sentence. Lane 1 notes that a reader of the notes cannot act on "a status of 0 or 8 is still a read". Lane 3 agrees, and that phrase was also in lane 3's own replacement. Use this replacement instead of lane 3's, from "It used to pipe" through the end of the line: It used to pipe `lanes-edit.sh lane-state` into an `awk` that exits as soon as it has printed the one field it wants. Under `pipefail`, a `lane-state` that wrote again after that died of SIGPIPE, so now and then the read exited 141, the handoff said the lifecycle could not be read, and it recorded no RUNNING to SWAPPING to SWAPPED transition. That failed safe, but whether it happened depended on timing alone, and it could turn a pull request's `tests` job red at random. The handoff now takes `lane-state`'s whole output first and parses it afterwards, so its status is `lane-state`'s own. The read of the operation of a lane that is still SWAPPING, which only names that operation in a note, is made the same way.The order is unchanged.
Lane: openRepoTools-3 |
…rea, and add the lines for #263, #289, #294 and #296, the changes after a42946e (#228) `docs/release-notes/v1.1.0.md` takes the fixes of lane 3's review of d8a349d (#293 comments 6314185715 and 6314529807, the second of which replaces three of the corrected texts of the first) and the lines for the changes after a42946e. The review's fixes: - Line 45 (#255, #271) no longer says that `lane-reconcile` and `lane-handoff` read a dependency nested in a leg: only the sweep and `lane-end` do. It says that a leg directory this account cannot search is unreadable and never `absent`, that a nested dependency is unreadable to the sweep and `lane-end` too, and that the sweep still reads a declared leg beneath such a directory as `absent` (#272, open). It also says NOT POLLED where the tool does. - Line 46 (#280, #283): an `awk` exits, it does not return, and the sentence on a status of 0 or 8 is gone. - Line 61 (#214): the fence never checks whose a local commit is, only that it adds or changes a register or handoff file. - The `<other-changes>` item counts 44 of the 53, because the openRepoShape pin's line (#233) is in the list, and the other 9, not 43 and 10. The milestone item names #247 and lists the six entries of 2026-10-20. - #209 is not tests-only: its `-e` fixes `lanes`' stderr filter under macOS's BSD grep, so it moves from the test suite to the lane area, and its one line there carries its test changes too. It is cited once. The lines for the changes after a42946e, each in its area and worded from its squash commit and description: #263 (d9065df) and #289 (fb2cf36) under the register and `lanes-edit.sh`, #294 (acc89ea, which closes #292) under `lane`, `lane-start`, `lane-end` and the name guard, and #296, which pins every Ubuntu runner to ubuntu-24.04, under the test suite and its checks. #296 has not landed yet: lane 3 lands it right before #293. The `<other-changes>` item says the lines were added on 2026-10-21 and are not in its counts, and the placeholder stays for #293 itself. Not touched: lane 3's optional sentence on #271 and its NIT on the tag. Lane: openRepoTools-2 Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
…t is now Ubuntu 26.04, where setup-python has no Python 3.9 and the TERM-ignoring kill test fails (#296) ## What was wrong Since about 04:33Z on 2026-10-21, GitHub's `ubuntu-latest` resolves to Ubuntu 26.04 (job log: `Image: ubuntu-26.04`, image release `ubuntu26/20261012.163`). Main's nightly run [39544671103](https://github.com/opensoft/openRepoTools/actions/runs/39544671103), at main `a42946e`, failed on it. The same jobs were green on Ubuntu 24.04 before. - `package`: actions/setup-python said `The version '3.9' with architecture 'x64' was not found for Ubuntu 26.04.` - `tests` and `tests-no-submodule`: one failure each, `tests/test_claude_current.py::test_a_command_that_ignores_term_is_killed_after_the_grace[host]`, `AssertionError: KILL never came: 30.0s`. Everything else passed. `release.yml`'s install check has an `ubuntu-latest` leg on Python 3.9, so the release run of the v1.1.0 tag would fail the same way. ## What changed Every ubuntu runner is pinned to `ubuntu-24.04`, the environment v1.1.0 was tested on. `macos-latest` stays. - `.github/workflows/tests.yml`: the four jobs (`guard-launch-mode`, `tests`, `tests-no-submodule`, `package`), with one comment, at the first, that says why. - `.github/workflows/release.yml`: `build`, `testpypi` and `pypi`, and the install matrix's two ubuntu legs, with one comment, at `build`. - `tests/test_tests_workflow.py` and `tests/test_release_workflow.py`: the two `runs-on` assertions and `INSTALL_LEGS` expect `ubuntu-24.04`. Nothing is weakened or skipped. - `specs/006-release-pypi/contracts/workflows.md` and `plan.md`: the install matrix, the `package` job and the CI target name `ubuntu-24.04`, and say why. Checked here: `tests/run.sh -k "test_tests_workflow or test_release_workflow or test_repo_hygiene"` gives 766 passed (499, 237 and 30 by module). The code leg's cutover patch `specs/004-migrate-to-triad/patches/t010-code-leg-tests-workflow.patch` still applies to `tests.yml`: `git apply --cached --check` exits 0 at main `a42946e` and at this commit. ## Not in this PR 26.04 support is left for v1.2.0, in #297: Python 3.9 there, and why `timeout -k`'s KILL does not end the command there. `claude-current` and its test are not touched. The cause is now known: 26.04's `timeout` is uutils (0.8.0 and 0.10.0), which never sends `-k`'s KILL to the process group (#228 6315204353). **Review.** Lane openRepoTools-3's independent review of `17fe489`, on opus-xhigh, is LAND (#296 6315434254). It is the independent read that `specs/006-release-pypi/plan.md`'s G6 asks of a governed workflow change written on sonnet-xhigh. Its two SHOULDs and two of its NITs (R1–R4) are listed in #297 for one follow-up after the cutover: the contract's "unchanged" lines, a test for the runners of `release.yml`'s `build`, `testpypi` and `pypi`, GitHub's rollout window (actions/runner-images#14748), and `release.yml`'s own reasons for the pin. R5 asked for that tracking issue, and R6 for this body's review and lane lines. Lane: openRepoTools-3 Landed by lane openRepoTools-3 on Brett Heap's word of 2026-10-20T22:5xZ: "merge all when green for all merges thru v1.1.0. use this for all lanes" (#228 6303614082). The record is tests.yml run 39593550301, on the merge ref `6d16f66` over main `acc89ea`, every job on `ubuntu-24.04`. #293 lands right after it. Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com> Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
|
…scripts, each tool pinned by version and sha256, in a workflow of its own (#277) This completes the WIP commit b1c59e6, which added lint.yml alone. It is a branch for v1.2.0, with no PR and no label, and the job has not yet run on a GitHub runner: every result below was taken on one machine with the pinned tools, so the CI record is still to come. No job ran either tool, so a warning on a workflow or a shell script showed nowhere. Lane openRepoTools-2's review of #228's release.yml found three mutants that actionlint's shellcheck rule flags and the suite lets through (I4, I13 and N3), and nothing in CI would have said so. What changed - .github/workflows/lint.yml, one job `lint`, in a file of its own. tests.yml is the release gate's file: release.yml requires exactly its four jobs, tests/test_tests_workflow.py holds that, and rehearsal D rewrites it for the code leg. The job runs on pull requests, on main and release/v*, and by dispatch, and it is no part of the gate. It runs on ubuntu-24.04, as every other ubuntu job does since #296 (ubuntu-latest became Ubuntu 26.04 on 2026-10-21). - actionlint 1.7.12 and shellcheck 0.11.0, each a release archive checked with sha256sum --strict -c before it is unpacked. Each digest was computed from the downloaded archive and equals GitHub's asset digest, and actionlint's also equals upstream's checksums.txt. Neither tool comes from the runner image or from a package index, and both are static binaries. - actionlint runs over every workflow with the pinned shellcheck given by path, with no exclusion, no severity floor and no config file, and the step fails if actionlint reports its shellcheck rule disabled, which it does silently when it cannot start the binary. - shellcheck runs, one file at a time, on every tracked file whose first line is a bash or sh shebang, at the baseline below. That is 16 files on main, and 15 of them run. - tests/test_lint_workflow.py (17 tests, 21 cases) pins the file and runs its three steps under fakes instead of only reading them: the install step over a genuine archive, over a tampered archive of each tool (nothing is unpacked, and after a bad actionlint archive the shellcheck one is never asked for) and over a tool that says another version; the actionlint step under a fake actionlint (a finding, a disabled shellcheck rule, a shellcheck that is not the pinned one); the shellcheck step in a throwaway git repository (selection by shebang, the baseline's flags, every file checked after one fails, an empty selection fails). The header's table of codes is held to the step's list, and the baselined scripts are held to be tracked bash files. What the tools found on main a42946e - release.yml, tests.yml and lint.yml: nothing, at any severity. - The 16 shell scripts: no error. park, resume and status: nothing at all. The other twelve: 319 findings, 190 warnings and 129 notes. Warnings: SC2034 157, SC2088 14, SC2209 4, SC1007 4, SC2154 3, SC2069 2, SC2178 2, SC2128 2, SC2141 1, SC2318 1. Notes: SC2016 55, SC2018 18, SC2019 18, SC2295 11, SC2329 10, SC2086 5, SC2015 5, SC2094 4, SC2020 1, SC2012 1, SC2006 1. lanes-edit.sh holds 142 of the 319. - tests/test_lane_helpers.sh, which the job does not run: 43 warnings and 218 notes, and 16.2 GB of memory to find them. - Two of the warnings are latent bugs and not style: SC2141 in lanes-edit.sh's session_start_block (IFS='\t' is a backslash and a t, so a live-fork row id<TAB>4242<TAB>interactive reads as id<TAB>4242<TAB>in, erac and ive) and SC2318 in openRepoTools's wip_fetch_template_file (bash expands $rel before the local that sets it takes effect, so path carries the caller's rel, which is right only because wip_init calls it from a loop over its own rel). Neither is fixed here. Main has moved since, and the baseline holds on it. On main 50d05d4 (after #263, #289, #294, #296 and #293) the job's three steps, run as written over that tree, exit 0: actionlint finds nothing in release.yml, tests.yml and lint.yml, and shellcheck finds the same 190 warnings, in the same ten codes and the same counts, no error, and 132 notes (lanes-edit.sh gained two SC2016 and one SC2015). lanes-edit.sh peaks at 10.9 GB and takes about 90 to 130 s, which a 16 GB runner holds. What the baseline leaves out - The workflows: nothing. - park, resume, status and every script added later: nothing. - The other twelve scripts are held to --severity=warning less ten codes, so the 129 notes and the 190 warnings of SC1007, SC2034, SC2069, SC2088, SC2128, SC2141, SC2154, SC2178, SC2209 and SC2318 are left out, and any error or warning of another code fails. Each code, its count and the reason it is left out are in lint.yml's header. - tests/test_lane_helpers.sh is not run: it is the lane helpers' own suite, nothing ships it, and shellcheck needs 16.2 GB for it (measured), more than a 16 GB runner has. lanes-edit.sh is run: 10.5 GB and about two minutes. The three mutants, applied to release.yml in scratch copies (lane 2's own diffs), and run through the job's own actionlint step, on a42946e's file and again on 50d05d4's - I4 (3.2.*) made *)): SC2221 and SC2222, warning. - I13 (the link fingerprint check made `if false`): SC2034, warning. - N3 (exit 0 as the clean step's first line): SC2317, info. Each makes the step exit 1. N3 is only info, which is why the workflows have no severity floor. Tests, run only through tests/run.sh -k - -k 'test_lint_yml or test_no_committed_file_names_a_host_absolute_path or test_adoption_act_zero_is_cited_by_the_sha_that_landed': 23 passed. The last two scan every tracked file, so they read lint.yml and the new test. - Before the workflow existed (lint.yml set aside), -k test_lint_yml: 19 errors and 1 failure of its 21 cases. The 21st reads only tracked files and passed. Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
…s jobs under #296, and the Gate B documents name that runner and the patched tests.yml's job lines as #296 leaves them (part of #186) (#299) Part of #186 (T010 of `specs/004-migrate-to-triad/tasks.md`). Specs only: no workflow, no test and nothing under `upstream/` changes. ## What was wrong Since about 04:33Z on 2026-10-21, `ubuntu-latest` resolves to Ubuntu 26.04. There setup-python has no Python 3.9, and the suite's `tests/test_claude_current.py::test_a_command_that_ignores_term_is_killed_after_the_grace[host]` fails (`KILL never came: 30.0s`). #296 pins every Ubuntu runner in `.github/workflows/tests.yml` and `release.yml` to `ubuntu-24.04`. Lane 3's note to lane 1 ([#186 comment 6315105746](#186 (comment))) lists what #296 leaves, and lane 1 decided to pin the first item here: - **`composed.yml` still named `ubuntu-latest`.** It comes from `specs/004-migrate-to-triad/patches/t010-assembly-exact-pin-job.patch` (line 63), and its job `exact-pins` runs `bash code/tests/run.sh -rs` composed, so on 26.04 it would meet the same `[host]` failure. - **The Gate B documents name the old runner and the old job lines.** `gate-b-checklist.md:202` and `gate-b-status-2026-10-09.md:186` and `:188` say `ubuntu-latest`, and `:188` cites the patched `tests.yml`'s jobs at lines 90, 110, 170 and 215, which #296's three-line comment at `tests.yml:55-57` moves. ## What changed **The patch** (`patches/t010-assembly-exact-pin-job.patch`, sha256 `6ee09f00…74670b` becomes `60245cb9…f0f653`). The job's runner is `ubuntu-24.04`, under a three-line comment in #296's words: ```yaml # THIS UBUNTU RUNNER IS ON 24.04: `ubuntu-latest` became Ubuntu 26.04 on # 2026-10-21. There the `[host]` case of the TERM-ignoring kill test, which # this job's suite runs, fails. Pinned until 26.04 support is decided. runs-on: ubuntu-24.04 ``` Two things in #296's comment would be wrong here, so they differ: `THIS` for `EVERY` (the assembly's `validate.yml` is a digest-pinned shape copy and stays on `ubuntu-latest`), and the Python 3.9 clause is gone (this job installs `3.x`). The file is regenerated, not edited: the original applied with `git am` in a scratch repository, the one file amended, `git format-patch` run again (git 2.43.0, the original's version). `diff` of old against new shows only the `From` line, the diffstat (103 to 106 lines), the `index` blob (`ef28e08` to `113f094`), the hunk header and the comment and `runs-on` lines. Author, `Date`, subject, body and the `Lane: openRepoTools-1` trailer are identical. `git apply --check` exits 0 on a tree without `composed.yml` and 1 on one that has it, and `git am` gives blob `113f094`, which PyYAML 6.0.3 parses (`runs-on: ubuntu-24.04`, python `3.x`). **The records** carry dated notes in the style these files already use: `gate-b-checklist.md` (line 33's evidence), `gate-b-status-2026-10-09.md` (rows 31, 32 and 33 and the T010 summary row), `candidate-2026-10-09.md` and `gate-ab-evidence-2026-10-09.md` (the superseded digest) and `test-roots-and-ci-2026-10-08.md` (its header, section 5's note, and a cited line of the patch: 125 is now 128). Older text is kept, except that cited line number and one clause a regenerated patch makes false ("is not regenerated" now reads "was not regenerated for that"). **Job lines, verified.** The code-leg patch applied in a scratch repository to `tests.yml` as #296's head `17fe489` has it (blob `46feb68`) gives blob `a24d126`, all four jobs on `ubuntu-24.04`: | job | line in the patched file | its `runs-on` line | line in the patched file on `2cfa173` | | --- | ---: | ---: | ---: | | `guard-launch-mode` | 90 | 94 | 90 | | `tests` | 113 | 114 | 110 | | `tests-no-submodule` | 173 | 174 | 170 | | `package` | 218 | 219 | 215 | Not changed: the assembly root's `validate.yml`, a copy of openRepoShape's `templates/assembly-root/.github/workflows/validate.yml` at the pinned `190133d`, stays on `ubuntu-latest` with Python `3.x`. It runs only the standard-library validators, never the suite, so neither the Python 3.9 gap nor the `[host]` test reaches it. ## Tests - `tests/run.sh -k test_repo_hygiene`, submodule initialized: 237 passed, 0 skipped. Its scan of every tracked file for host-absolute paths covers the patch and the five records. - No test module reads the patches or the Gate B documents: `git grep -l -e 'patches/t010' -e 'gate-b-status' -e 'gate-b-checklist' -e 't010-assembly' tests/` prints nothing. - `tests/run.sh -k tests_yml` in a scratch tree of #296's head with the code-leg patch applied: 31 passed (30 in `test_tests_workflow.py`, which the status row cites, and 1 in `test_release_workflow.py`). ## CI, and what is left This PR's first CI run, on `e298f7e`, ran on `ubuntu-26.04` before #296 landed, and went red there for the reasons #296 gives. #296 then landed as `5afba4a`, and lane 3 merged main into the branch, which changed no content. So the record is run 39603910768, on the merge with main `50d05d4`, every job on `ubuntu-24.04`. The second look at the line numbers is done: `tests.yml` is blob `46feb68` at #296's head, at `5afba4a`, at `50d05d4` and at this PR's head. Lane 1 moves its private recipe's pin from the old digest `6ee09f00…74670b` to the new one in round 5c's delta. **Review.** Lane openRepoTools-3's independent review of `076fa70` is LAND (#299 6317075196). - **The patch:** the regenerated patch differs from the old one in exactly the five places named above. Its hunk count (106) and `index` blob (`113f094`) match its body. - **The apply:** it applies with `git apply --check` and `git am --3way` to an empty tree. The created file parses and passes actionlint. - **The job lines:** the patched `tests.yml` puts the four job keys at 90, 113, 173 and 218. - **Its four NITs** are in the dated notes, at `gate-b-checklist.md:202`, `candidate-2026-10-09.md:104` and `gate-b-status-2026-10-09.md:187`, plus this body's CI paragraph, now fixed. They wait for lane 1's next records update, because a push would cost another CI round before the freeze. Lane: openRepoTools-1 Landed by lane openRepoTools-3, third in its queue after #296 and #293, on Brett Heap's word of 2026-10-20T22:5xZ: "merge all when green for all merges thru v1.1.0. use this for all lanes" (#228 6303614082). Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com> Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>



Part of #228. It brings
docs/release-notes/v1.1.0.mdup to date on main: first ona42946e, as lane 3 asked on Brett Heap's word (#228 comment 6303608345, the section for lane openRepoTools-2, task 1), then with lane 3's review ofd8a349d(comments 6314185715 and 6314529807 on this pull request), with the lines for the three changes that landed aftera42946e, and with the line for #296, which lands right before this pull request. It is one file, changed in two commits (d8a349dandbebb77d), 59 insertions and 4 deletions against main.Lands last before rehearsal D's freeze; lane 3 reviews and merges it (#228 6303608345)
What changed
lane-reconcileandlane-handoffread a dependency nested in a leg, since only the sweep andlane-enddo. It says that a leg directory this account cannot search is unreadable and neverabsent; that a dependency nested in a leg whose directory, or one above it, it cannot search is unreadable to the sweep andlane-endtoo; and that one known gap remains, A leg read that git half-fails reads as clean, and a declared leg beneath a directory that cannot be searched reads as absent, so lane-end can end a lane with work left in it #272, where the sweep reads a declared leg beneath such a directory asabsent, solane-enddoes not hold on it. It also says NOT POLLED where the tool prints it, and "both gaps" now follows the two gaps of Make the lane tools look inside a triad's legs and paired feature trees, so the sweep, lane-end's gate, lane-handoff, lane-reconcile and the daily report can see a lane's work there, and change nothing a checkout with no project.yaml does #246.awkexits and does not "return", and the sentence on a status of 0 or 8 is gone, because a reader of the notes cannot act on it.commitpushes the edit it stranded, and the conflict RECOVERY warns thatreset --harddrops a peer's commits #214: the fence passes a local commit only when it adds or changes a register or handoff file, and never checks whose it is, so the line no longer says "the lane tooling's own".<other-changes>item: the pin's line (Pin openRepoShape at v1.1.0, 190133d on its main: six of the eight mounted files moved (bootstrap places legs only where no commit is lost; the family Makefile refuses a holder without siblings.py); no test expectation moved #233) is in the list, so the list carries 44 of the 53, and the other 9 have their lines under "What 1.1.0 adds", not 43 and 10. The item says "the openRepoShape pin" where the runner pin of CI and the release workflow run on ubuntu-24.04, because ubuntu-latest is now Ubuntu 26.04, where setup-python has no Python 3.9 and the TERM-ignoring kill test fails #296 could be taken for it.-efixeslanes' stderr filter under macOS's BSDgrep, so it moves from the test suite to the lane area, after The name guard and the SessionStart hook name an unreadable register or binding log instead of guessing a branch (#60) #208's, and its one line there also carries its test changes: therepoG#8assertion and the count of bash files in prose. It is cited once.a42946e: The register's rewrites refuse a copy or write they cannot prove and put a cut-short register back, retire-rows refuses an unpushed log rename before it writes and calls a lane closed only from its published log, and add-row refuses an archive row it cannot read and takes back a row refused after its rebase (#120, #122) #263 (d9065df), A lane listing that is not whole no longer removes indexed worktree rows: the inventory read says PARTIAL, lanes --worktrees prints it NOT WHOLE, and lanes-index writes nothing over it; an older helper's tree with no path stays a tree (#173 item c1, #252 delta review 2) #289 (fb2cf36) and Under set -e, macOS's bash 3.2 no longer ends lanes --worktrees, wip init or lane-end where a utility run through command fails, and a scan of the shipped scripts keeps that shape out (#292) #294 (acc89ea, which closes Under macOS's bash 3.2, a failingcommand <utility>in a list or an if condition exits a set -e script: lanes --worktrees dies silently (lanes:317), and wip's .gitignore step can stop (openRepoTools:4014) #292) landed on 2026-10-21, from 11:28Z to 11:30Z. Each has a line in its area, worded from its squash commit and its description: The register's rewrites refuse a copy or write they cannot prove and put a cut-short register back, retire-rows refuses an unpushed log rename before it writes and calls a lane closed only from its published log, and add-row refuses an archive row it cannot read and takes back a row refused after its rebase (#120, #122) #263 and A lane listing that is not whole no longer removes indexed worktree rows: the inventory read says PARTIAL, lanes --worktrees prints it NOT WHOLE, and lanes-index writes nothing over it; an older helper's tree with no path stays a tree (#173 item c1, #252 delta review 2) #289 under "The register andlanes-edit.sh", and Under set -e, macOS's bash 3.2 no longer ends lanes --worktrees, wip init or lane-end where a utility run through command fails, and a scan of the shipped scripts keeps that shape out (#292) #294 under "lane,lane-start,lane-end, the name guard and their helpers".ubuntu-24.04, becauseubuntu-latestis now Ubuntu 26.04, andmacos-latestis unchanged. It has not landed yet. Lane 3 lands it right before this pull request.lane-handoffnames every tree-inventory record that is not a whole schema-1 one, and a leg directory this account cannot search is unreadable and neverabsent. Only the sweep andlane-endalso see a dependency nested in such a leg, sincelane-reconcileandlane-handoffread declared legs only, and A leg read that git half-fails reads as clean, and a declared leg beneath a directory that cannot be searched reads as absent, so lane-end can end a lane with work left in it #272 stays open as the known gap.lane-handoffreads the lane's lifecycle whole and parses it afterwards, so anawkthat exits early can no longer turnlane-state's SIGPIPE into a lifecycle that could not be read.git log aaa7bc8..a42946e, which is 53 squash commits, one pull request each and no merge commit. It is grouped by area, one line each, and each line ends with its pull request. It lists 44 of the 53: the pin's line (Pin openRepoShape at v1.1.0, 190133d on its main: six of the eight mounted files moved (bootstrap places legs only where no commit is lost; the family Makefile refuses a holder without siblings.py); no test expectation moved #233) at its head and 43 by area, as 4 on the estate commands, 10 on the register andlanes-edit.sh, 11 onlane,lane-start,lane-endand the name guard, 6 on the handoff and its skill, 1 on the lane tools in a triad's legs (Make the lane tools look inside a triad's legs and paired feature trees, so the sweep, lane-end's gate, lane-handoff, lane-reconcile and the daily report can see a lane's work there, and change nothing a checkout with no project.yaml does #246), 9 on the test suite and its checks, and 2 on the triad migration's records.a42946e: The register's rewrites refuse a copy or write they cannot prove and put a cut-short register back, retire-rows refuses an unpushed log rename before it writes and calls a lane closed only from its published log, and add-row refuses an archive row it cannot read and takes back a row refused after its rebase (#120, #122) #263 and A lane listing that is not whole no longer removes indexed worktree rows: the inventory read says PARTIAL, lanes --worktrees prints it NOT WHOLE, and lanes-index writes nothing over it; an older helper's tree with no path stays a tree (#173 item c1, #252 delta review 2) #289 on the register andlanes-edit.sh, Under set -e, macOS's bash 3.2 no longer ends lanes --worktrees, wip init or lane-end where a utility run through command fails, and a scan of the shipped scripts keeps that shape out (#292) #294 onlane,lane-start,lane-endand the name guard, and CI and the release workflow run on ubuntu-24.04, because ubuntu-latest is now Ubuntu 26.04, where setup-python has no Python 3.9 and the TERM-ignoring kill test fails #296 on the test suite and its checks. The areas now hold 47 lines, one for each of 47 pull requests, and Pin openRepoShape at v1.1.0, 190133d on its main: six of the eight mounted files moved (bootstrap places legs only where no commit is lost; the family Makefile refuses a holder without siblings.py); no test expectation moved #233's line at the head of the list makes 48.<pr-count>gives the count ata42946e, which is 53;<other-changes>says what was drafted, which 9 pull requests have their lines under "What 1.1.0 adds", that the lines for The register's rewrites refuse a copy or write they cannot prove and put a cut-short register back, retire-rows refuses an unpushed log rename before it writes and calls a lane closed only from its published log, and add-row refuses an archive row it cannot read and takes back a row refused after its rebase (#120, #122) #263, A lane listing that is not whole no longer removes indexed worktree rows: the inventory read says PARTIAL, lanes --worktrees prints it NOT WHOLE, and lanes-index writes nothing over it; an older helper's tree with no path stays a tree (#173 item c1, #252 delta review 2) #289, Under set -e, macOS's bash 3.2 no longer ends lanes --worktrees, wip init or lane-end where a utility run through command fails, and a scan of the shipped scripts keeps that shape out (#292) #294 and CI and the release workflow run on ubuntu-24.04, because ubuntu-latest is now Ubuntu 26.04, where setup-python has no Python 3.9 and the TERM-ignoring kill test fails #296 were added on 2026-10-21, and what is left to do at the tag; the placeholder's own line now stands for the changes aftera42946ethat have no line above;Not added: nothing that has landed. #296 has not landed and has its line. This pull request itself, and whatever lands after it, is what the
<other-changes>placeholder stands for. None of #263, #289, #294, #296 and #292 is in the v1.1.0 milestone, which still holds the six entries of 2026-10-20.How this keeps the draft's rules
opensoft/openRepoTools#N, with no bare#N, since the notes are published from another repository after the migration.<other-changes>stays as a named placeholder in code font, as the closing line of the list and as its checklist item.<pr-count>is unchanged apart from the drafting-time count.Tests
T023's verify command passes: the last line names
openRepoTools-specanddocs/release-notes/v1.1.0.md,## Before the tagis there, and so ispipx install --force openrepotools.Coverage: a script over
git log aaa7bc8..acc89ea, 56 commits and no merge, finds each pull request cited above "Before the tag" except the six of Releases: annotated tags, release/vX.Y branches, and openrepotools on TestPyPI and PyPI from v1.1.0 #228's package series, which Releases: annotated tags, release/vX.Y branches, and openrepotools on TestPyPI and PyPI from v1.1.0 #228's lines cover. That is 46 by area, Pin openRepoShape at v1.1.0, 190133d on its main: six of the eight mounted files moved (bootstrap places legs only where no commit is lost; the family Makefile refuses a holder without siblings.py); no test expectation moved #233 at the head of the list, and --install and wip init add the hook pair only once ~/projects/xFactory/lanes-edit.sh answers guard, and take our guard entry back out until then, so a fresh install never leaves a prompt hook calling a missing command (#237) #247, The handoff names every inventory record that is not a whole schema-1 one, and a leg directory this account cannot search, or a dependency nested in one, is unreadable and never absent (fixes #255) #271 and lane-handoff reads the lane lifecycle whole and parses it afterwards, so an awk that exits early can no longer turn lanes-edit.sh's SIGPIPE into a lifecycle that could not be read (fixes #280) #283 under "What 1.1.0 adds". CI and the release workflow run on ubuntu-24.04, because ubuntu-latest is now Ubuntu 26.04, where setup-python has no Python 3.9 and the TERM-ignoring kill test fails #296 is not in that range, and its line cites it.Hygiene: by grep over
tests/, no test names this file. The two that read its content scan every tracked file, and both are intests/test_repo_hygiene.py. The only other test that namesrelease-notesis intests/test_release_workflow.py, and it readsrelease.yml, not the notes. All oftests/test_repo_hygiene.pywas run on the file, throughtests/run.shwith everyLANES_*andTMUX*variable unset:Not run: the whole suite. CI's
testsjob is the suite of record. Until CI and the release workflow run on ubuntu-24.04, because ubuntu-latest is now Ubuntu 26.04, where setup-python has no Python 3.9 and the TERM-ignoring kill test fails #296 is on main it runs onubuntu-latest, which is Ubuntu 26.04, and fails there for the reasons CI and the release workflow run on ubuntu-24.04, because ubuntu-latest is now Ubuntu 26.04, where setup-python has no Python 3.9 and the TERM-ignoring kill test fails #296 gives. Lane 3 runs it onubuntu-24.04over main once CI and the release workflow run on ubuntu-24.04, because ubuntu-latest is now Ubuntu 26.04, where setup-python has no Python 3.9 and the TERM-ignoring kill test fails #296 has landed.Where the draft's rules left room, and lane 3's answers (comment 6314185715)
<other-changes>stays as a closing placeholder after the drafted list, since this pull request itself lands aftera42946e.Lane: openRepoTools-2
🤖 Generated with Claude Code
Summary by Sourcery
Update the v1.1.0 release notes to accurately reflect release fixes, accumulated changes since v1.0.0, and the remaining work before tagging.
New Features:
Enhancements:
Documentation: