Repository navigation
openDox contract changelog: Status draft → standard, the dox-v1.1 tag now exists - #15
Conversation
…g now exists Refs opensoft/openxFactory#656 (stays OPEN). The cut PR (#14 -> 5200521) landed the dox-v1.1 entry with the header kept at Status: draft, because the annotated tag did not exist yet, and registered in the file itself that the header "promotes back to standard once the dox-v1.1 tag exists, by the same act as before". The tag now exists: dox-v1.1, annotated tag object 851a28e over 5200521, tagger Brett Heap, 2026-09-29T18:43:27Z, cut under RULED openxFactory#656 comment 5894235642 ("Same as v1.0 (Recommended)"). This is the dox-v1.0 follow-up's shape (#12): the header line, the paragraph that explained the draft header rewritten to record the resolution, and the Unreleased line that named dox-v1.1 as pending. No release entry, manifest, pin, gitlink or tag is touched. Arc: neutral-product-standalone-operability Lane: openxfactory-4 (openXfactory-4-openDox_extraction) Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Reviewer's GuideThis documentation-only change closes the dox-v1.1 draft window by marking the contract changelog standard, recording the exact published annotated tag provenance, and aligning the unreleased wording with the completed release. No release metadata, pins, workflows, tags, or release entries are changed. Sequence diagram for closing the dox-v1.1 draft windowsequenceDiagram
participant LaneAuthors
participant CutPR as CutPR14
participant Operator as BrettHeap
participant Tag as dox_v1_1
participant Changelog as CHANGELOGmd
LaneAuthors->>CutPR: land commit 520052139d10e98c2894abafa315fa924a6fd495
CutPR->>Changelog: record Status draft
Operator->>Tag: create annotated tag 851a28e966d011518c19b0abd321502288ac12ea
Tag->>Tag: target commit 520052139d10e98c2894abafa315fa924a6fd495
Changelog->>Changelog: promote Status to standard
Changelog->>Changelog: record tag provenance
File-Level Changes
Tips and commandsInteracting with Sourcery
Customizing Your ExperienceAccess your dashboard to:
Getting Help
|
|
There was a problem hiding this comment.
Copilot review overview
🟢 Approval recommended
The documentation matches the published annotated tag and repository release convention.
Review effort: Balanced
Findings: None
What changed in this PR
Promotes the contract changelog to standard after publication of the verified dox-v1.1 tag.
Changes:
- Records the tag object, target commit, tagger, and publication time.
- Marks the release window closed and clears the Unreleased status.
| File | Description |
|---|---|
contracts/CHANGELOG.md |
Updates lifecycle status and dox-v1.1 publication record. |
💡 Add a code-review agent skill or configure MCP servers for context-aware, tailored reviews. Learn more in the docs.
There was a problem hiding this comment.
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 16 hours and 21 minutes by commenting @sourcery-ai review. Upgrade to get a review now.
…ELOG draft) (plan 038 T060) (#20) Lane: openxfactory-4 (openXfactory-4-openDox_extraction) Arc: neutral-product-standalone-operability **The `dox-v1.2` cut PR.** This is plan 038's **T060** (`opensoft/openxFactory`, `specs/038-opendox-document-tool-self-maintenance/tasks.md`): *"The openDox root's spec pin and the `dox-v1.2` minor, on Brett's cut word (R2Q22 (a))."* Its spec-leg half landed as `opensoft/openDox-spec#17` (T040, squash-merged `7db9438b`). This PR is the root half. It follows the shape of release 1's `dox-v1.1` cut PR, #14 (`5200521`). - **Realizes**: 9.5 (part). - **Falsifier**: the root's `make validate` and `make pins`, quoted; openDox-spec's own `validate`. - **Ruled**: R2Q22; Brett's cut word, recorded on `#656`. **Decisions**: CF-2 (batch Q item 10's addendum). The authority: - **R2Q22 (a).** Brett Heap, 2026-10-05, `opensoft/openxFactory#656` comment `6003486656`: *"Accept all 25 recommended (Recommended)"*. openDox-spec owns three schemas, and the openDox root cuts one more `dox-v1.y` minor. - **Batch Q's 9.5 addendum** (`opensoft/openxFactory#1248` → `91e961a0`): *"The cut is made on Brett Heap's cut word, as `dox-v1.1`'s was (RULED `5894235642`)."* - **The plan ruling** (`6013547504`) names the `dox-v1.2` cut as still Brett's word, at the act. **This PR does not create or push a tag.** ## What moved, in the one lockstep commit | file | change | |---|---| | `spec` (gitlink) | `f7ee3c76` → `7db9438b4cc4446ab4e6ab5b552c220312deccc9` | | `contracts/spec-pin.yaml` | `commit:` → the same commit; `digests.tree_sha256` `e81f8530…` → `d9f976c5b279b24b80387dad1deb0e8438d95f11ce183540bca93f86a5cd7363`. No `.github/workflows/*.yml` names the spec leg, so there is no third fact to move. | | `contracts/manifest.yaml` | `contract_bundle_version` `dox-v1.1` → `dox-v1.2`. The four existing rows' `commit:` fields advance with the leg; no `sha256` changes. Three rows are added in `opendox-snapshot`'s form: `opendox-health-finding`, `opendox-health-packs` and `opendox-health-dispositions`, each with `type: release-schema`, `contract_schema_version: 1` and `release_member: false`. | | `contracts/CHANGELOG.md` | A new `## dox-v1.2` section. The `Status:` header reads `draft` again, and the Unreleased line names the new pins. | These are the same four paths #14 changed. `contracts/code-pin.yaml` and the `code` gitlink stay at `dede32b4`. ## Verification From a fresh `--recurse-submodules` clone, at this branch's head `bb4249d5`: ``` $ make validate python3 scripts/validate-repository-naming.py --project project.yaml openDox neutral-product/assembly also_matches project-leg/assembly openDox-spec project-leg/spec openDox-code project-leg/code python3 scripts/validate-manifest.py manifest ok: openDox (opendox), 3 legs python3 scripts/validate-pins.py ok spec: gitlink == contracts/spec-pin.yaml commit 7db9438b4cc4 ok spec: tree digest recomputes (d9f976c5b279…) ok code: gitlink == contracts/code-pin.yaml commit dede32b4b6f3 ok code: tree digest recomputes (c2672463b4d8…) ok contracts/shape-pin.yaml: 10 copied shape file(s) match their digests pins ok make validate rc=0 $ make pins python3 scripts/validate-pins.py ok spec: gitlink == contracts/spec-pin.yaml commit 7db9438b4cc4 ok spec: tree digest recomputes (d9f976c5b279…) ok code: gitlink == contracts/code-pin.yaml commit dede32b4b6f3 ok code: tree digest recomputes (c2672463b4d8…) ok contracts/shape-pin.yaml: 10 copied shape file(s) match their digests pins ok make pins rc=0 ``` **Red first.** With only the `spec` gitlink staged, before the pin file moved, `make pins` refused with exit 2: ``` FINDING pin-gitlink-mismatch: spec: gitlink 7db9438b4cc4446ab4e6ab5b552c220312deccc9 != contracts/spec-pin.yaml commit f7ee3c763b3af4581daf1cd54406e5111e9358e6 ``` A mutant of the new digest (`tree_sha256` `d9f976c5…` → `d9f976c6…`) was also refused, with `pin-digest-mismatch` and exit 1. With the digest restored, the run exited 0. **Every digest was recomputed here, not copied.** - **The spec leg's `tree_sha256`.** Computed twice at `7db9438b`: with `repo_shape.tree_digest`, and by hand (`git ls-tree -r -z`, sorted, sha256). Both give `d9f976c5…5cd7363`. openDox-spec#17 squash-merged to the same tree (`f143e7dc`) as its branch head `58383189`, where its `validate` ran green. - **Each row's `sha256`.** Computed over `git show 7db9438b:<path>`, and all seven match the manifest. The four existing digests are unchanged. The seven rows are exactly the seven files under `contracts/schemas/` at the pin, and the CHANGELOG's `dox-v1.2` table equals the manifest's rows. - **`release_member: false` is a measurement.** None of the three new ids is among the 51 `contract_id` rows of openxFactory's `contracts/hermes-runtime/contract-index.yaml`, read at openxFactory `main` `51456835`. **openDox-spec's own `validate`.** I ran its CI steps locally at `7db9438b`, with pytest `>=8,<9` and OpenSpec CLI 1.2.0: ``` 602 passed, 5 skipped in 2.13s PYTEST_RC=0 Totals: 4 passed, 0 failed (4 items) OPENSPEC_RC=0 ``` The 5 skipped tests need the optional imports `yaml` and `jsonschema`. The leg's CI install line installs pytest only, so CI skips the same five. ## Why the CHANGELOG's `Status:` header moves to `draft` The rule is the same as in #14. A bundle is four coordinated values: `contract_bundle_version`, the entries, the annotated tag and the changelog entry. This PR moves three of them. The `dox-v1.2` tag does not exist yet, so the header reads `draft` until it does. `dox-v1.1`'s window paragraph moves into the past tense, as #14 did for `dox-v1.0`'s. `dox-v1.0` and `dox-v1.1` keep their own tags, entries and digests. One cell is worded differently from #14 because the code leg has changed since then: the code leg's "contract bytes" cell. At `dede32b4`, openDox-code has no top-level `contracts/`. Its `src/opendox/contracts/` does hold plan 034 T057's packaged copies of four spec schemas, recorded at `f7ee3c76`, and the cell says so. Those copies move to this pin later, in T041, T047 and T054. ## What is NOT done - **No tag.** After this PR lands, the holder asks Brett for the cut word. On his word, the annotated tag `dox-v1.2` goes on the landed commit, and a second PR moves the CHANGELOG header to `standard`, as #15 did for `dox-v1.1`. - Nothing under `code/` moves, and neither does `contracts/code-pin.yaml`. No workflow changes. - openDox-code's copy record is not touched. That is T041. 🤖 Generated with [Claude Code](https://claude.com/claude-code) Arc: neutral-product-standalone-operability Lane: openxfactory-4 (openXfactory-4-openDox_extraction) Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
… now exists (plan 038 T060) (#21) Lane: openxfactory-4 (openXfactory-4-openDox_extraction) Refs opensoft/openxFactory#656 (stays OPEN). The dox-v1.2 counterpart of #15. This is the second PR of plan 038's **T060** (`opensoft/openxFactory`, `specs/038-opendox-document-tool-self-maintenance/tasks.md`): *"on it, the annotated tag `dox-v1.2` goes on that commit, and a second PR moves the CHANGELOG entry to `standard`, the tag existing."* The cut PR #20 (→ `6a9f4902285029b4fb02753e2b79be0a137302c5`) landed the `dox-v1.2` entry with the header kept at `Status: draft`, because the tag did not exist yet. The file itself says the header *"promotes back to `standard` once the `dox-v1.2` tag exists, by the same act as before — no second open question is needed, the rule already covers it."* - **Realizes**: 9.5 (part). - **Falsifier**: the root's `make validate` and `make pins`, quoted below. - **Ruled**: R2Q22; Brett's cut word, recorded on `#656`. **Decisions**: CF-2 (batch Q item 10's addendum). **The tag exists now.** `dox-v1.2` is annotated tag object **`58538ff33a953ffd5dfa9b44a7edabd75dada00b`** over **`6a9f4902285029b4fb02753e2b79be0a137302c5`**. The tagger is `Brett Heap <1513478+brettheap@users.noreply.github.com>`, 2026-10-06T17:58:45Z. It was cut on Brett's word, *"Cut dox-v1.2 now (Recommended)"*, recorded at [#656 comment 6022291206](opensoft/openxFactory#656 (comment)). I read the tag object, its target and its tagger from the forge (`git/ref/tags/dox-v1.2` and `git/tags/58538ff3…`). In this branch's clone, `git rev-parse dox-v1.2^{commit}` gives `6a9f4902…`, which is this branch's base. ## One file, the shape of #15 ``` contracts/CHANGELOG.md | 40 +++++++++++++++++++++++----------------- 1 file changed, 23 insertions(+), 17 deletions(-) ``` 1. The header changes from `Status: draft` to **`Status: standard`**. 2. The paragraph that explained the draft header (*"the annotated `dox-v1.2` tag does not exist yet … This header promotes back to `standard` once …"*) now records how that was resolved: the cut word, the tag object, the target commit, the tagger and the date. It uses the wording of the resolved `dox-v1.1` paragraph #15 wrote. #15 also changed "was reached once" to "was first reached" in the paragraph above it. Here the paragraphs already read in order, because #20 put the `dox-v1.1` paragraph in the past tense, so there is no second edit of that kind. 3. The Unreleased line changes from "nothing pending beyond `dox-v1.2` below" to "nothing pending", the form the line had after `dox-v1.1` was cut. Both of its claims were re-read today. openDox-spec `main` is still `7db9438b`. openDox-code `main` is `84f8ed83`, past the bundle's `dede32b4`. `git diff dede32b4 84f8ed83 -- contracts src/opendox/contracts` is empty, so "independently of any contract byte" still holds. ## Checked line by line: nothing left asserts the pre-tag state | line | why it stays | |---|---| | the `dox-v1.0` and `dox-v1.1` window paragraphs | past tense, about closed windows | | *"`Status: draft` again over `dox-v1.2`'s own window … and `standard` again now"* | the resolution record | | *"`openxFactory`'s own contract changelog still carries `draft` …"* | a different repository, and a measured fact | | the `dox-v1.2` entry's *"the lane asks for that word once this cut PR lands"* and *"Not cut by this pull request"* | **left alone on purpose.** It is text inside a released entry, and it was true of the cut PR it was written in. #15 left the `dox-v1.1` entry's own "The tag" section unedited in the same way. A release entry does not change after its tag. | | `contracts/manifest.yaml`'s `dox-v1.2` comment (*"which the lane asks for once this PR lands"*) | **left alone, as #15 left the manifest.** The manifest is one of the tagged bundle's four coordinated values, and #15 touched no manifest. | | *"cut the tags when the drafts are green"* | the verbatim `dox-v1.0` ruling quote | ## Verification At this branch's head `9b41eb4b`: ``` $ make validate python3 scripts/validate-repository-naming.py --project project.yaml openDox neutral-product/assembly also_matches project-leg/assembly openDox-spec project-leg/spec openDox-code project-leg/code python3 scripts/validate-manifest.py manifest ok: openDox (opendox), 3 legs python3 scripts/validate-pins.py ok spec: gitlink == contracts/spec-pin.yaml commit 7db9438b4cc4 ok spec: tree digest recomputes (d9f976c5b279…) ok code: gitlink == contracts/code-pin.yaml commit dede32b4b6f3 ok code: tree digest recomputes (c2672463b4d8…) ok contracts/shape-pin.yaml: 10 copied shape file(s) match their digests pins ok make validate rc=0 $ make pins python3 scripts/validate-pins.py ok spec: gitlink == contracts/spec-pin.yaml commit 7db9438b4cc4 ok spec: tree digest recomputes (d9f976c5b279…) ok code: gitlink == contracts/code-pin.yaml commit dede32b4b6f3 ok code: tree digest recomputes (c2672463b4d8…) ok contracts/shape-pin.yaml: 10 copied shape file(s) match their digests pins ok make pins rc=0 ``` ## What does not change This PR touches no release entry, manifest, pin, gitlink or workflow, and **no tag**. `dox-v1.0` (`608236a1` over `dc7aa08f`), `dox-v1.1` (`851a28e9` over `52005213`) and `dox-v1.2` (`58538ff3` over `6a9f4902`) stay exactly as published. There is no `Arc:` line, because #15 carried none: this is bookkeeping. It opens as a **draft**. 🤖 Generated with [Claude Code](https://claude.com/claude-code) Lane: openxfactory-4 (openXfactory-4-openDox_extraction) Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>



Lane: openxfactory-4 (openXfactory-4-openDox_extraction)
Refs opensoft/openxFactory#656 (stays OPEN).
The dox-v1.1 counterpart of #12. The cut PR #14 (→
520052139d10e98c2894abafa315fa924a6fd495) landed thedox-v1.1entry with the header kept atStatus: draft, because the tag did not exist yet. The file itself says the header "promotes back tostandardonce thedox-v1.1tag exists, by the same act as before — no second open question is needed, the rule already covers it."The tag exists now.
dox-v1.1is annotated tag object851a28e966d011518c19b0abd321502288ac12eaover520052139d10e98c2894abafa315fa924a6fd495. The tagger isBrett Heap <1513478+brettheap@users.noreply.github.com>, 2026-09-29T18:43:27Z. It was cut under RULED #656 comment 5894235642, "Same as v1.0 (Recommended)". Before the cut it was checked in a freshly cloned tree, and after the push it was checked again in a third clone that never tagged anything.One file, the shape of #12
Status: drafttoStatus: standard.dox-v1.1tag does not exist yet … This header promotes back tostandardonce …") now records how that was resolved: the tag object, the target commit, the tagger and the date. The dox-v1.0 paragraph above it changes "was reached once" to "was first reached", so the two paragraphs read in order.dox-v1.1below" to "nothing pending", which is the form the line had after dox-v1.0 was cut.Checked line by line: nothing left asserts the pre-tag state
draftthrough that window"Status: draftagain overdox-v1.1's own window … andstandardagain now"openxFactory's own contract changelog still carriesdraft…"dox-v1.1entry's "Not cut by this pull request. Cut by the operator when the draft is green"What does not change
This PR touches no release entry, manifest, pin, gitlink or workflow, and no tag.
dox-v1.0(608236a1overdc7aa08f) anddox-v1.1(851a28e9over52005213) stay exactly as published.make validatepasses locally at this head (exit 0).It opens as a draft.
🤖 Generated with Claude Code
Summary by Sourcery
Mark the openDox contract changelog as standard following publication of the
dox-v1.1release tag.Enhancements:
standardnow that the annotateddox-v1.1tag has been published.dox-v1.1publication details and clarify the changelog’s completed release-window state.