Skip to content

prefer-triad-project-shape 5.3: advance the openRepoShape pin to 1a9fc537, the commit that realizes 5.2 - #1260

Merged
brettheap merged 2 commits into
mainfrom
realize/prefer-triad-openreposhape-pin
Oct 7, 2026
Merged

brettheap merged 2 commits into
mainfrom
realize/prefer-triad-openreposhape-pin

Conversation

@brettheap

@brettheap brettheap commented Oct 7, 2026 •

Copy link
Copy Markdown
Contributor

Lane: codeXfactory-5

Governing change: openspec/changes/prefer-triad-project-shape (ratified, #1249), task 5.3, "openxFactory, the pin".

Held for Brett Heap's merge word; do not merge. It touches openspec/changes/, so it lands under a Rule 6 landing window.

Copilot review not requested (Brett Heap, 2026-10-06)

What and why

Task 5.3 advances contracts/openreposhape-pin.yaml onto the openRepoShape commit that realizes 5.2. That commit is 1a9fc537bcce37301c85fc108fabd8a599b02000: opensoft/openRepoShape#164, squash-merged 2026-10-06T22:52:05Z. It carries the Triad advisory, the optional single-repository.yaml and the posture text. The pin moves from e9c4827b (#700). It cannot skip a commit, so the advance also carries the 56 openRepoShape commits before #164. All 57 PR numbers are named in the pin's commit note, and that list was cross-checked against git log e9c4827b..1a9fc537.

The method follows #650 and #700. Every sha256 was recomputed from the real bytes, using the git blob at 1a9fc537 cross-checked against the working-tree bytes the verifier reads. None was transcribed.

at e9c4827b at 1a9fc537
digested (files:) 31 37
path-only (pinned_by_commit_only:) 45 67
surface 76 104

Upstream span (git diff --name-status e9c4827b 1a9fc537): 28 files added and 41 modified. Nothing was deleted or renamed. Every member declared at e9c4827b is still present and still in its list. 21 of the 31 earlier digests moved and 10 did not.

Classification of the 28 new files, by the pin header's own rule

The rule: the standard's normative surface is digested. That covers policy and schema data, contract and manifest templates, the tools that create or update a root, shipped validators, shipped root scripts and their libraries, the AGENTS-shape.md pair, AGENTS.md, README.md and LICENSE. Everything else is path-only: tests, CI, ignore and attributes files, CLAUDE.md stubs, template READMEs and Makefiles, rendered per-root AGENTS.md/CLAUDE.md, skeletons, and derived readings.

Digested (6)

Path-only (22)

  • 7 tests: tests/test_cli_reference.py, test_commit_trailers.py, test_park_resume_targets.py, test_setup_project_py.py, test_shape_doctor.py, test_windows_paths.py and test_shape_advisory.py.
  • .gitattributes at the root and in the assembly-root and family-root templates. This follows the .gitignore / Makefile / validate.yml precedent: those three are also copied and pinned upstream, yet have been path-only here since 122d729b.
  • The 9 files of templates/workspace-root/. It is a skeleton the shape neither materializes nor pins, and it is rendered per person.
  • docs/cli.md, scripts/render-cli-reference.py and docs/handbook.html. These are derived readings of the digested surface: the first is generated from the tools' --help, and the last is the designed reading of the README.

Obligations met beyond the pin file

Ticks recorded (second commit on this PR, tasks.md only)

Each tick is modelled on 5.1's. Each holds on main only through this PR's merge.

Validator results

Run in a scratch checkout named openxFactory, with the submodules CI initializes, against main 0992369a.

check result
validate-openreposhape-pin.py --checkout <openRepoShape@1a9fc537> OK: 37 digests recomputed, 67 members present, 104 files declared, none undeclared
gate simulation (fresh git fetch --depth 1 of 1a9fc537 from GitHub, then the gate's own two steps) same OK; the gate reads 1a9fc537… out of the pin
pinned OpenSpec CLI --change prefer-triad-project-shape --strict 1 passed, 0 failed
pinned OpenSpec CLI --all --strict 113 passed, 1 failed (114), exit 0. Identical on clean main; the one is the accepted add-chain-attestation exception
validate-code-surface.py, validate-target-release.py, validate-sequenced-after.py (+ --ledger-diff: 232 rows), proposal-support.py verify prefer-triad-project-shape all pass
validate-release-tag-gate.py no release surface change
doc-health --single-repo vs clean main zero finding delta (31 critical / 26 error / 68 warning / 19 info on both); +176 ratified words, the amendment note
pytest: tests/openreposhape_pin, every test file naming the pin, and tests/sequenced_after tests/code_surface tests/target_release tests/scope_globs tests/proposal-support 1172 passed
secret scan of the diff (pattern scan; no gitleaks on this host) 0 hits; the 27 new 64-hex strings are all sha256s of files at 1a9fc537

Out of scope, noted

docs/project-repo-schema.md § "Naming, and the four families" is stale. The pinned naming policy had five families at e9c4827b and has six now; the sixth is workspace (<user>-wip, openRepoShape #86). The section says the families are "governed as DATA in the pinned standard's contracts/repository-naming.yaml, not by this prose", so no requirement moves with the pin. The heading is left for a separate follow-up.

🤖 Generated with Claude Code

Summary by Sourcery

Advance the openRepoShape contract pin to the Triad project-shape implementation and synchronize its manifest, documentation, task tracking, and verification tests.

Enhancements:

  • Advance the openRepoShape pin to the commit implementing the preferred Triad project shape and optional single-repository support.
  • Expand the pinned normative and path-only surface to cover the upstream standard's latest files and update all associated SHA-256 digests.
  • Record the completed project-shape tasks and refresh the schema currency note.

Documentation:

  • Add a dated note documenting the updated openRepoShape pin and covered surface.

Tests:

  • Update pin verifier expectations for the new commit, file counts, surface size, and abbreviated-commit validation.

…c537, the commit that realizes 5.2

Realizes task 5.3, "openxFactory, the pin", of the ratified change
openspec/changes/prefer-triad-project-shape: contracts/openreposhape-pin.yaml
advances from e9c4827b (#700) to 1a9fc537bcce37301c85fc108fabd8a599b02000,
opensoft/openRepoShape #164 squash-merged 2026-10-06T22:52:05Z, the commit that
realizes 5.2 (the Triad advisory, the optional single-repository.yaml and the
posture text). The pin cannot skip a commit, so the advance also carries the
fifty-six openRepoShape commits before #164; all 57 PR numbers are named in
the pin's commit note.

Method = the #650/#700 precedent. Every sha256 recomputed from the real bytes
(git blob at the commit, cross-checked against the working-tree bytes the
verifier reads); none transcribed. 31 -> 37 digested, 45 -> 67 path-only,
76 -> 104 surface. 28 files are new since e9c4827b, none deleted or renamed;
every member declared at e9c4827b is still present and still in its list; 21
of the 31 old digests moved, 10 did not.

Each new file classified by the pin header's own rule. SIX digested:
setup-project.py (the flow setup.sh now shims), shape-doctor.py (the shipped
validator that prints the verdict), templates/family-root/scripts/siblings.py
(shipped into every family holder beside the digested bootstrap.py and
validate-family.py), and #164's contracts/single-repository-record.yaml (the
staying-single record's schema), templates/single-repository/
single-repository.yaml (its template, like assembly-root/project.yaml) and
scripts/shape_advisory.py (the library scaffold, adopt and the doctor say the
advisory out of). TWENTY-TWO path-only: seven tests; the root's and the
assembly-root and family-root templates' .gitattributes (the .gitignore /
Makefile / validate.yml precedent: copied and pinned upstream, path-only here
since 122d729b); the nine templates/workspace-root files (a skeleton the shape
neither materializes nor pins); and docs/cli.md, scripts/render-cli-reference.py
and docs/handbook.html (derived readings of the digested surface).

The header prose moves with the lists (counts, the WHICH paragraph, the
new-file paragraph, the commit note), the tests' hard-coded COMMIT, counts and
abbreviated oid move with it, and docs/project-repo-schema.md gains a dated
"> Amended 2026-10-06" currency note on the #650/#700 pattern; no doctrine
requirement moves.

    $ python3 scripts/validate-openreposhape-pin.py --checkout <openRepoShape@1a9fc537>
    OK openreposhape-pin verified: opensoft/openRepoShape@1a9fc53
    from checkout ..., 37 digest(s) recomputed, 67 member(s) present,
    104 file(s) declared with none undeclared

Unreleased: the pin is not a contracts/manifest.yaml entry and not a
release-inventory member (measured-and-not-registered, #775/#1026), so no
manifest row, CHANGELOG entry or cut is owed; the next cut records it.

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

sourcery-ai Bot commented Oct 7, 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 17 hours and 53 minutes by commenting @sourcery-ai review. Upgrade to get a review now.

@sourcery-ai

sourcery-ai Bot commented Oct 7, 2026

Copy link
Copy Markdown

Reviewer's Guide

This PR advances the openRepoShape contract pin from e9c4827b to 1a9fc537, the squash merge realizing prefer-triad-project-shape task 5.2, and makes the pin complete for the upstream 104-file surface by recalculating normative digests and classifying path-only files. It synchronizes verifier tests, adds a documentation currency amendment, and records related task progress.

File-Level Changes

Change Details Files
Advance the openRepoShape pin to the commit implementing task 5.2 and expand the complete pinned surface declaration.
  • Replace the pinned commit with 1a9fc537 and update the historical commit narrative.
  • Recompute and update 37 normative file digests, adding six newly digested files.
  • Add 22 newly discovered files to the path-only list, preserving completeness and classification rules.
  • Update pin metadata and explanatory counts for the 104-file surface.
contracts/openreposhape-pin.yaml
Synchronize pin-focused tests with the new upstream revision and surface counts.
  • Update the expected commit and abbreviated-OID fixture.
  • Raise expected digested, path-only, and total surface counts to 37, 67, and 104.
tests/openreposhape_pin/test_pin_verifier.py
Amend documentation to reflect the current pinned standard without changing doctrine.
  • Add a dated currency note describing the new commit, expanded surface, and newly included capabilities.
docs/project-repo-schema.md
Record the implementation and validation progress for the governed change.
  • Add task ticks for 5.2 through 5.5 while leaving 5.6 and 5.7 unchanged.
tasks.md

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

…ged evidence

Records the realization lane's own merged acts in tasks.md, on 5.1's pattern
(PR #1254). Edits only the 5.2-5.5 lines; 5.6 stays unticked, and 5.7 is left
exactly as #1255 merged it.

- 5.2: opensoft/openRepoShape#164 -> 1a9fc537 (squash, 2026-10-06T22:52:05Z);
  tests, tests-macos, tests-windows and SonarCloud green; full suite 1159 ->
  1200 passed, 33 skipped.
- 5.3: this PR (#1260) -> 9af2207, the pin advance; openreposhape-pin-gate
  green on it (run 37550154276).
- 5.4: opensoft/workBenches#139 -> 9fbe609c and #140 -> d86ba59b; post-merge
  main CI green; bootstrap suite 1042 PASS; workBenches#138 closed completed.
- 5.5: the private brettheap/new-workstation, cited by merged sha and file
  name only: #52 -> e081c5ab, #53 -> cb411460; no CI there; the live
  ~/.agents files are byte-identical to cb411460.

Each tick holds on main only through this pull request's merge, which waits on
Brett Heap's merge word and its required checks.

Lane: codeXfactory-5
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@sonarqubecloud

sonarqubecloud Bot commented Oct 7, 2026

Copy link
Copy Markdown

@brettheap

Copy link
Copy Markdown
Contributor Author

LANDING — lane codeXfactory-5, session ed23f049-7e99-4601-8a6d-760b6aeb5f26@Eagle, 2026-10-07T00:41:13Z, PR #1260 into opensoft/openxFactory main. On Brett Heap's word: "merge the 5.3 pin PR when green".

Lane: codeXfactory-5

@brettheap
brettheap merged commit f335c07 into main Oct 7, 2026
15 checks passed
@brettheap

Copy link
Copy Markdown
Contributor Author

LANDED — lane codeXfactory-5, session ed23f049-7e99-4601-8a6d-760b6aeb5f26@Eagle, 2026-10-07T00:41:26Z, PR #1260 into opensoft/openxFactory main → squash f335c07716c636a994b76389f218a8d0151a3364

Merged on Brett Heap's word "merge the 5.3 pin PR when green", with every required check green at 60eedde5. Tasks 5.2, 5.3, 5.4 and 5.5 of prefer-triad-project-shape are ticked on main. 5.6 stays open with lane openRepoProject-1 (opensoft/openRepoProject#3, #5). The Rule 6 window is closed.

Lane: codeXfactory-5

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