Skip to content

The code leg gets its own front door, its standalone checkout context in tests.yml, the assembly root's two length caps and a lane-start row-stamp test that no longer depends on the length of TMPDIR (part of opensoft/openRepoTools#186) - #1

Merged
brettheap merged 4 commits into
mainfrom
004-migrate-to-triad-code-follow-ups
Oct 26, 2026

Conversation

@brettheap

@brettheap brettheap commented Oct 26, 2026 •

Copy link
Copy Markdown
Contributor

These are the code leg's follow-ups of the cutover of opensoft/openRepoTools#186, which adopts opensoft/openRepoTools in place as the assembly of the spec leg, opensoft/openRepoTools-spec, and this code leg, opensoft/openRepoTools-code. This pull request lives in a different repository from the cutover's issue, so every issue is named here in full: a bare issue number would link to this repository's own numbers.

It carries four commits, in this order, on top of this repository's main as adopt-project.py execute pushed it at the cutover. The row numbers are those of the cutover runbook's list of follow-ups. Each commit is made from the reviewed file named with it, and the sha256 given is that file's:

  • Row 1, code-0001: the code leg's own front door. It adds AGENTS.md, CLAUDE.md and README.md (openRepoShape's code-root templates, rendered with this project's names, with one short section each in AGENTS.md and README.md for this leg), the .gitattributes LF rule, the code-root .gitignore and the Apache-2.0 LICENSE, all of which the leg lost when the root kept them. Six files, 331 lines added. File code-0001.patch, sha256 74b98ff97b0b9b6b31ff59ad06329461b6c1566f2fdf7c330e9e7118f2ae1ec1.
  • Row 2, the regenerated tests.yml patch (T010): it names the leg's standalone checkout context in .github/workflows/tests.yml, with header paragraphs, the workflow env: that names the code root and the standalone mode, and a note on tests-no-submodule that says where the leg's skips are read. It changes no job, no trigger and no run: line. One file, 41 lines added and 1 removed. File t010-code-leg-tests-workflow.patch, sha256 1406ead36f1edab24254257d430d084306c618c3f1694faf647152d00cef6d56.
  • Row 3, T009's caps: it sets the assembly root's two length caps, AGENTS.md at 354 lines and README.md at 529, in tests/test_repo_hygiene.py, and moves the fixtures and messages of tests/test_test_roots.py with them. The standalone caps, 330 and 505, do not move. Two files. File t009-assembly-caps.patch, sha256 2dd4aac276f54bebc164e12cf34c0aa64c6348b32414501f291e49f4d9b2bbe5.
  • Row 3a, the tenth follow-up, for tests/test_lane_helpers.sh: the repoA-1 and repoCase-1 row-stamp cases fail once run.sh's TMPDIR reaches 70 characters, which T010's exact-pins job can hit (the cases #215 left; part of #186) openRepoTools#304: three lane-start row-stamp cases of the shell suite (repoA-1, repoCase-1 and repoMIX-1) no longer depend on the length of the TMPDIR that tests/run.sh makes. It is test-only and changes tests/test_lane_helpers.sh alone, 62 lines added and 13 removed. File opt1-v2.diff, sha256 64ea7093bbd799695c4ba89841206b9bf9fd334b583358113ca10cf04f9439d2, and its commit message opt1-v2.msg, sha256 62793c91f4f7bec7089933924c290b74a7a37755c7413841332c0526abbce2b2.

The files of rows 1 to 3 are kept in specs/004-migrate-to-triad/patches/ in opensoft/openRepoTools (row 1's under t006/) at the cutover's source commit 33ce26dffc5286e68f1d29ab5c6458edef0330c0, and are copied here under the short names above. Row 3a's diff is not in that repository, and Gate C's sentence names its digest.

Brett Heap approved these follow-ups at Gate C of opensoft/openRepoTools#186, as one pull request per leg, each merged by merge commit once it is green. Merge this one by merge commit, not by squash or rebase, so that every reviewed commit keeps its id, author and committer, and code-0001 stays its own commit.

🤖 Generated with Claude Code

Summary by Sourcery

Establish the code leg as a self-contained repository with standalone CI context, updated assembly documentation limits, and stable lane-start coverage.

New Features:

  • Add standalone repository guidance and project metadata for the code leg.
  • Make the code leg's CI explicitly identify its standalone checkout context.

Bug Fixes:

  • Make lane-start tests independent of TMPDIR length when validating row stamps and checkout paths.

Enhancements:

  • Update assembly-root documentation length caps and their validation fixtures.

CI:

  • Document the code leg's standalone workflow environment without changing its jobs or triggers.

Documentation:

  • Add the code leg's README, contributor guidance, license, and repository configuration files.

Tests:

  • Adjust shell and Python tests for the updated assembly limits and robust lane-start fixtures.

brettheap and others added 4 commits October 26, 2026 18:41
…DE.md and README.md, and the LF rule, ignore list and licence it lost when the root kept them.

Rehearsal patch for opensoft/openRepoTools#186, task T006 of
specs/004-migrate-to-triad/tasks.md, against run C's code leg 73b04d6. The
split left this leg with no AGENTS.md, CLAUDE.md, README.md, LICENSE,
.gitattributes or .gitignore, because all six stayed in the assembly root,
and a superproject's attributes and ignore rules never reach into a
submodule's worktree.

- AGENTS.md, CLAUDE.md and README.md are openRepoShape 7f84ca4's
  templates/code-root/ files, rendered by its own copy_tree with this
  project's names, so the leg-clone detector in scripts/shape_advisory.py
  recognises them. Each AGENTS.md and README.md then adds one short section:
  where the suite runs, the pinned standard, where the manuals and the
  specifications now live, and where a feature's code and a bounded
  amendment are written.
- .gitattributes is the monorepo's own file, byte for byte (blob 3560973).
  Its reason, the installer's byte-for-byte comparisons, is this leg's.
  `git add --renormalize .` changes nothing here.
- .gitignore is the shape's templates/code-root/.gitignore, a superset of
  the three lines the monorepo ignored.
- LICENSE is the root's Apache-2.0 text, byte for byte (blob 261eeb9).

No executable, test or workflow is touched.

Lane: openRepoTools-1
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
… (T010, #186).

Made against the tests.yml that #228's PR 2 leaves (blob 2cfa173), the file
the code leg takes at the cutover. It adds the header paragraphs, the workflow
`env:` that names the code root and the standalone mode, and the note on
`tests-no-submodule` that says where the leg's skips are read. It changes no
job, no trigger and no `run:` line: tests/test_tests_workflow.py pins the first
three jobs' `run:` lines and the four job ids the release gate reads.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
…n counts, AGENTS.md 354 and README.md 529, each set in a dated entry, and tests/test_test_roots.py holds them.

Code-leg patch for opensoft/openRepoTools#186, task T009 of
specs/004-migrate-to-triad/tasks.md, against the test files #228's series
leaves: 006-release-pypi-t025 b3aab89 with 006-release-pypi-pr3fix c6cea2a
merged in. It pairs with the re-cut assembly-0001 of the same day, and it
goes on the code leg after T006's code-0001 and the T010 code-leg patch.

- tests/test_repo_hygiene.py: `cap = 330 if ROOTS.assembly is None else
  347` becomes `else 354`, and `cap = 505 if ROOTS.assembly is None else
  510` becomes `else 529`. Each is this repository's own count plus the
  twenty-four lines the re-cut adds, measured on the re-cut applied by `git
  am --3way` to a root built from the split's root files. A dated entry in
  each docstring says so, under the 2026-10-18 entries that said the re-cut
  would set them again.
- tests/test_test_roots.py: the at-cap and one-over fixtures and the two
  failure messages move with them, 354/355 and 529/530, and the docstring
  names the new caps.

The standalone caps, 330 and 505, do not move.

Lane: openRepoTools-1
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…length of run.sh's TMPDIR: repoCase-1 and repoMIX-1 use a short projects root and repoA-1 reads its directory from the lane's log (opensoft/openRepoTools#304)

Code-leg follow-up for opensoft/openRepoTools#304, part of
opensoft/openRepoTools#186, applied at T014 of
specs/004-migrate-to-triad/tasks.md. Test-only: it changes
tests/test_lane_helpers.sh and nothing else.

What was wrong. Three cases expected a checkout's directory in the tail
of the row stamp that lane-start writes, and repoA-1 expected the window
clause after it. The checkouts sat under the suite's HOME, which is made
under run.sh's TMPDIR, and run.sh makes that TMPDIR its state root plus
40 characters plus the pid's digits. So the stamp grew with the state
root and the pid, while lane-start's cut_to_line keeps 230 characters of
the line and gives up the window, then the directory, first. Each case
failed from the TMPDIR length shown, under C.UTF-8 (2 fewer under the C
locale, which counts bytes), because the text it expected, quoted here,
was cut:

  repoA-1     "; dir $HOME/projects/repoA; window "  from 70
  repoCase-1  "dir $HOME/projects/repoCase;"         from 71
  repoMIX-1   "dir $HOME/projects/repoMix"           from 73

What changes. Each case now reads a place the cut does not reach, as
opensoft/openRepoTools#215's repoA11t-1 does, and lane-start itself is
untouched.

- repoA-1, in the lane-start section, stops its row check at the launch
  clause and clause (c)'s dir key, "window renamed, no launch; dir ",
  which no root length reaches. A new check reads the whole directory
  from the same run's RESUMED line in the lane's log, which the cut
  never touches.
- repoCase-1 and repoMIX-1, in the Amendment 15 section, have their
  checkouts under a projects root, A15_PROOT, that mktemp makes in the
  suite's TMPDIR where that is at most 40 characters and in /tmp where
  it is not, so the root is never over 55 characters and neither stamp
  over about 210. The two lane-start runs get it as PROJECTS_ROOT, so
  the repo argument still finds the checkout by its real directory name.
  A new check holds the root to 55 characters, cleanup removes it, and
  the row checks now read the RESUMED stamp's window as well as its dir.

So a RESUMED stamp's dir and window are read at every root length. A
STARTED stamp's tail, with both values, is still read on repoA11t-1,
whose checkout has a short path of its own. As with that checkout, only
a SIGKILLed run under a long TMPDIR leaves the new root behind in /tmp.

Why this slot. As the cutover's tenth follow-up it goes on the code leg
after T006's code-0001, which gives the leg its own front door and has
to be the leg's first commit after the split, and before the two commits
that bump the assembly root's pins of the spec and code legs. The code
commit the root pins then already carries it, and the assembly's
exact-pins job, which runs this suite through run.sh, has it from its
first run. None of the other follow-ups touches this file, so this one
is a patch of its own and their pinned digests do not change.

Lane: openRepoTools-3
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@sourcery-ai

sourcery-ai Bot commented Oct 26, 2026

Copy link
Copy Markdown

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 1 day and 3 hours by commenting @sourcery-ai review. Upgrade to get a review now.

@sourcery-ai

sourcery-ai Bot commented Oct 26, 2026

Copy link
Copy Markdown

Reviewer's Guide

This PR completes the code leg’s post-cutover setup by adding its standalone repository front door, documenting and configuring its independent CI checkout context, updating assembly-only documentation caps, and hardening lane-start shell tests against variable TMPDIR lengths.

File-Level Changes

Change Details Files
Add the code leg’s repository-level front door and standalone project metadata.
  • Add rendered AGENTS.md, CLAUDE.md, README.md, .gitattributes, .gitignore, and Apache-2.0 LICENSE.
  • Document the code leg’s relationship to the assembly and spec legs, standalone workflows, installation, testing, and contribution boundaries.
AGENTS.md
CLAUDE.md
README.md
.gitattributes
.gitignore
LICENSE
Make the GitHub test workflow explicitly describe and configure standalone code-leg execution.
  • Add workflow-level environment variables identifying the code checkout root and non-composed mode.
  • Document standalone submodule behavior, skipped cross-root checks, and the unchanged jobs, triggers, and release contract.
  • Expose skip reasons in tests-no-submodule while retaining its existing test behavior.
.github/workflows/tests.yml
Update assembly-root documentation length limits and their test fixtures.
  • Raise assembly-root caps to 354 lines for AGENTS.md and 529 lines for README.md while leaving standalone caps unchanged.
  • Adjust boundary and over-limit fixtures and expected diagnostics to match the new caps.
tests/test_repo_hygiene.py
tests/test_test_roots.py
Make lane-start row-stamp tests independent of TMPDIR length.
  • Create Amendment 15 checkout fixtures under a bounded temporary projects root with a fallback path.
  • Pass PROJECTS_ROOT explicitly for mixed-case and resumed-lane scenarios and assert full directory/window tail data.
  • Track and clean up the additional temporary checkout root.
tests/test_lane_helpers.sh

Tips and commands

Interacting with Sourcery

  • Trigger a new review: Comment @sourcery-ai review on the pull request.
  • Continue discussions: Reply directly to Sourcery's review comments.
  • Generate a GitHub issue from a review comment: Ask Sourcery to create an
    issue from a review comment by replying to it. You can also reply to a
    review comment with @sourcery-ai issue to create an issue from it.
  • Generate a pull request title: Write @sourcery-ai anywhere in the pull
    request title to generate a title at any time. You can also comment
    @sourcery-ai title on the pull request to (re-)generate the title at any time.
  • Generate a pull request summary: Write @sourcery-ai summary anywhere in
    the pull request body to generate a PR summary at any time exactly where you
    want it. You can also comment @sourcery-ai summary on the pull request to
    (re-)generate the summary at any time.
  • Generate reviewer's guide: Comment @sourcery-ai guide on the pull
    request to (re-)generate the reviewer's guide at any time.
  • Resolve all Sourcery comments: Comment @sourcery-ai resolve on the
    pull request to resolve all Sourcery comments. Useful if you've already
    addressed all the comments and don't want to see them anymore.
  • Dismiss all Sourcery reviews: Comment @sourcery-ai dismiss on the pull
    request to dismiss all existing Sourcery reviews. Especially useful if you
    want to start fresh with a new review - don't forget to comment
    @sourcery-ai review to trigger a new review!

Customizing Your Experience

Access your dashboard to:

  • Enable or disable review features such as the Sourcery-generated pull request
    summary, the reviewer's guide, and others.
  • Change the review language.
  • Add, remove or edit custom review instructions.
  • Adjust other review settings.

Getting Help

@sonarqubecloud

Copy link
Copy Markdown

@brettheap
brettheap merged commit 2a057a6 into main Oct 26, 2026
6 checks passed
brettheap added a commit to opensoft/openRepoTools-spec that referenced this pull request Oct 28, 2026
…RepoTools commit through the assembly root's front door since the triad migration, and cite opensoft/openRepoTools#304 as what the code leg's row-stamp cases are for

Two NITs from lane openRepoTools-4's diff-only check of
#4 (READY, opensoft/openRepoTools#186 comment
6479419189):

- N2. The commit the one-line install's --version now prints is a commit
  of opensoft/openRepoTools, which the assembly root's front door resolved
  main to (root openRepoTools:388-392 at 2a99dd4), not the release commit;
  and the change came with the triad migration, not with
  opensoft/openRepoTools#228, under whose item the sentence sits. The
  --version item now says so in lane 4's wording, crediting
  opensoft/openRepoTools#186, and the one-line install's item under
  "Install and upgrade" follows it.
- N3. In the line on opensoft/openRepoTools-code#1, the parenthetical
  "(opensoft/openRepoTools#304)" stood just before the line's own pull
  request and could be read as its source; it now reads "for
  opensoft/openRepoTools#304".

Nothing else changes.

Part of opensoft/openRepoTools#228 and opensoft/openRepoTools#186.

Lane: openRepoTools-2
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant