Skip to content

openDox contract changelog: Status draft → standard, the dox-v1.1 tag now exists - #15

Merged
brettheap merged 1 commit into
mainfrom
release/dox-v1.1-status-standard
Sep 29, 2026
Merged

brettheap merged 1 commit into
mainfrom
release/dox-v1.1-status-standard

Conversation

@brettheap

@brettheap brettheap commented Sep 29, 2026 •

Copy link
Copy Markdown
Contributor

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 the dox-v1.1 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.1 tag exists, by the same act as before — no second open question is needed, the rule already covers it."

The tag exists now. dox-v1.1 is annotated tag object 851a28e966d011518c19b0abd321502288ac12ea over 520052139d10e98c2894abafa315fa924a6fd495. The tagger is Brett 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

 contracts/CHANGELOG.md | 35 ++++++++++++++++++++---------------
 1 file changed, 20 insertions(+), 15 deletions(-)
  1. The header changes from Status: draft to Status: standard.
  2. The paragraph that explained the draft header ("the annotated dox-v1.1 tag does not exist yet … This header promotes back to standard once …") 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.
  3. The Unreleased line changes from "nothing pending beyond dox-v1.1 below" 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

line why it stays
"the header read draft through that window" past tense, about dox-v1.0's closed window
"Status: draft again over dox-v1.1'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.1 entry's "Not cut by this pull request. Cut by the operator when the draft is green" left alone on purpose. It is text inside a released entry, it was true of the cut PR it was written in, and #12 left the dox-v1.0 entry's own "The tag" section unedited in the same way. A release entry does not change after its tag.
"cut the tags when the drafts are green" the verbatim dox-v1.0 ruling quote

What does not change

This PR touches no release entry, manifest, pin, gitlink or workflow, and no tag. dox-v1.0 (608236a1 over dc7aa08f) and dox-v1.1 (851a28e9 over 52005213) stay exactly as published. make validate passes 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.1 release tag.

Enhancements:

  • Promote the openDox contract changelog status to standard now that the annotated dox-v1.1 tag has been published.
  • Record the dox-v1.1 publication details and clarify the changelog’s completed release-window state.

…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>
Copilot AI balanced review requested due to automatic review settings September 29, 2026 18:46
@sourcery-ai

sourcery-ai Bot commented Sep 29, 2026

Copy link
Copy Markdown

Reviewer's Guide

This 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 window

sequenceDiagram
    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
Loading

File-Level Changes

Change Details Files
Promote the changelog status to standard and document the completed dox-v1.1 publication.
  • Change the top-level status from draft to standard.
  • Replace the pre-tag explanation with a resolution record containing the annotated tag object, target commit, tagger, and timestamp.
  • Clarify that the dox-v1.0 status was first reached and that the dox-v1.1 draft window has closed.
contracts/CHANGELOG.md
Update the unreleased section to reflect that no work remains pending after the dox-v1.1 cut.
  • Change the pending-work wording to “nothing pending.”
  • Clarify that the referenced openDox-spec commit is the commit pinned by dox-v1.1.
contracts/CHANGELOG.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

@sonarqubecloud

Copy link
Copy Markdown

Copilot AI left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

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.

@brettheap
brettheap marked this pull request as ready for review September 29, 2026 23:26
@brettheap

Copy link
Copy Markdown
Contributor Author

READY at 0dac467 — Brett: "Land #15 when green" (2026-09-29). Lane: openxfactory-4 (openXfactory-4-openDox_extraction)

@sourcery-ai sourcery-ai Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

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.

@brettheap
brettheap merged commit 6675843 into main Sep 29, 2026
4 checks passed
@brettheap

Copy link
Copy Markdown
Contributor Author

Lane: openxfactory-4 (openXfactory-4-openDox_extraction)

LANDED — lane openxfactory-4, 2026-09-29T23:29:33Z, PR #15 → 6675843 (opensoft/openDox main; plain gate)

Brett: land the phase 1 PRs when green

brettheap added a commit that referenced this pull request Oct 6, 2026
…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>
brettheap added a commit that referenced this pull request Oct 6, 2026
… 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>
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.

2 participants