Repository navigation
openDox contract changelog: Status draft → standard, the dox-v1.2 tag now exists (plan 038 T060) - #21
Conversation
… now exists (plan 038 T060) The dox-v1.2 counterpart of #15. The cut PR #20 landed the dox-v1.2 entry with the header at Status: draft, because the tag did not exist yet. It exists now: annotated tag object 58538ff over 6a9f490 (#20's squash merge), tagger Brett Heap, 2026-10-06T17:58:45Z, cut on Brett's word "Cut dox-v1.2 now (Recommended)" (#656 comment 6022291206). One file, contracts/CHANGELOG.md, in #15's three edits: the header reads standard; the draft paragraph records how the window closed (tag object, target commit, tagger, date); the Unreleased line reads "nothing pending" again. No release entry, manifest, pin, gitlink, workflow or tag changes. Lane: openxfactory-4 Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Reviewer's GuideThis bookkeeping-only PR updates contracts/CHANGELOG.md to record the existing dox-v1.2 annotated tag and promote the changelog status from draft to standard. It does not alter release entries, manifests, pins, gitlinks, workflows, or tags; repository validation and pin checks pass. Sequence diagram for promoting the dox-v1.2 changelog statussequenceDiagram
participant CutPR as Cut PR #20
participant Brett as Brett Heap
participant Forge as Git forge
participant Changelog as contracts/CHANGELOG.md
participant Validation as Repository validation
CutPR->>Changelog: Record dox-v1.2 with Status: draft
Brett->>Forge: Cut dox-v1.2 now
Forge-->>Forge: Create annotated tag 58538ff3 over 6a9f4902
Changelog->>Changelog: Record tag, target, tagger, and date
Changelog->>Changelog: Change Status: draft to Status: standard
Changelog->>Changelog: Change Unreleased line to nothing pending
Validation->>Validation: make validate
Validation->>Validation: make pins
Validation-->>Changelog: Validation passes
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 documented tag object, target commit, tagger, and lifecycle transition match the published annotated tag.
Review effort: Balanced
Findings: None
What changed in this PR
Finalizes the dox-v1.2 release record after publication of its annotated tag.
Changes:
- Promotes changelog status from
drafttostandard. - Records the tag provenance and closes the release window.
- Marks the Unreleased section as having nothing pending.
| File | Description |
|---|---|
contracts/CHANGELOG.md |
Finalizes the dox-v1.2 release status and provenance. |
💡 Add a code-review agent skill or configure MCP servers for context-aware, tailored reviews. Learn more in the docs.
|
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 22 hours and 21 minutes by commenting |
|
READY at 9b41eb4 Lane: openxfactory-4 (openXfactory-4-openDox_extraction) Holder, at READY: T060's second PR, the
|
…e identity response shape and the single-writer chains (plan 038) (#1257) Lane: openxfactory-4 (openXfactory-4-openDox_extraction) **T002, second bookkeeping batch, plan 038: T094 and the slice entries T095 to T104, the identity response shape, the single-writer chains, and the ticks.** Bookkeeping, so this PR carries no `Arc:` line. It touches no `openspec/changes/` path, so no Rule 6 window applies. It began stacked on #1251's head; #1251 has landed (`1837ea75`) and `main` is merged in (`543f6ce1`), so the diff against `main` is this batch alone. ## From plan 038's `tasks.md`, T002 - **Task**: T002, "Release-2 base, and the re-measure at the ruling" (landed in #1251; this is its second batch of bookkeeping, the brief of the holder's `T002b`). - **Realizes**: none (bookkeeping; FR-025). **Falsifier**: T002 names none. Its gates are the brief's, quoted under "Review and gates". - **Ruled / Decisions**: none of its own. Every item is a ruling already posted on `#656`, or a landing already merged, encoded as worded and cited by comment id or merge commit. ## The items | # | Where | What changed | Record | |---|---|---|---| | 1 | tasks.md: T094, T095 to T104, T073 | T094 ticked, with its result quoted: 436 composed reds over 51 files, outside 12.5's set (Base 2; 533 at Base 1). The `T095+` placeholder becomes ten entries, T095 to T104, each with its slice name, Files, After and Falsifier from R2-INV-R9's outline and the holder's rulings, `Lane: 3 (openXfactory-3)`. T073's After and Files name them. The map's means, the rulings (R9-R1 (a), R9-R2 (a), W1 to W7) and the OQ defaults are recorded once, above the entries | map `R2-INV-R9.md`; `6021830607`; claim `6021862323`; rulings `6021830531` | | 2 | T095, T101, T104, T097 | T095: the two confirmed departures from OQ-R9-1 (`plane_host_for` untouched, an autouse fixture registers the declared host; `DECLARED_HOST_SUITES` guarded structurally). T101: `tests/declared_exclusion.yaml` for ONE entry (reasons `[doc_health]`, note dropped, the `only` list loses the file, count stays 66). T104: `tests/test_binding_stylesheets.py`, the pin 572 to 574. T097: its served-display respelling is R9-R1 (a) applied | `6022291206`; the T097 line is `6023517122` (the holder confirmed the citation, `6026622117`) | | 3 | plan.md: the single-writer table; tasks.md Files and After lines | W7's chains: `tests/conftest.py` T020, then T021 and T026 in landing order, then T095, T073, T074; `tests/test_host_plane.py` T020, T026, T095; `declared_exclusion.yaml` T101, T073, T074; the four T074 test files T103 then T074; the census T025, T104, T015, T016, T057 (the row splits, so `test_web_boundary.py` keeps its own chain). T015's and T074's After gain T104 and T103 | `6021830531`, `6022291206` | | 4 | tasks.md: T072, T074, T075 falsifiers | The four folds of #1253, in the arc change's own wording: T072 asserts that ONLY CR, LF and CRLF split rows; T074's seam tests assert that an empty-seam read names the seam AND its registrar; T075's host-wiring test shows a leg declaring only SOME of the four seams refused, and a leg declaring the six and none of the four accepted; T074's protected-suite oracle computes 12.5's set as 12.5 does (`git grep -l -e 'open-pr' -e 'open_pr' -e 'FakePullRequests'`), from the pre-arc and the final tree, the floor of 16 on each, and takes the union | openxFactory#1253 to `fc4fa0ff`; Copilot `5427373153` | | 5 | spec.md FR-011; tasks.md T041 | FR-011's JSON shape gains `identity`, emitted and bounded as openDox-spec's finding schema bounds it (no `excerpt`, `text`, `content` or `quote` key, no number, strings of at most 200 characters, `{category, entry}` for a pathless finding, `{collided_id}` for a collision). T041's falsifier gains a response-shape test asserting exactly that bound. The coverage row for FR-011 names T041. The serialized-size cap was already T041's at the base (T041's text says so, and T042 "stores what T041 bounds"), so nothing moved | holder `6018624750` | | 6 | tasks.md ticks | T011, T014, T021, T023, T025, T026 and T060 ticked, T070's tick gains #1253, and T002's own landing is recorded. Each merge commit was verified with `gh pr view <n> -R <repo> --json mergeCommit` (listed below) | the landings | | 7 | tasks.md: T072 | A Files line (`src/opendox/lines.py`, `tests/test_lines.py`); the Ruled line gains `6023517122`: `head_sha` (a), its own public `head_sha` parity-tested against `serve._head_of`, `serve.py` untouched; the line split (a), `doxbench_defaults.py` untouched. Folding either private helper is recorded as unscheduled and optional, and is not scheduled | holder `6023517122` | | 8 | contracts/health-finding.md:91 | The sentence reads: a stored `identity` makes a cross-run collision between STORED findings detectable; an exception-only finding is never stored; whether the engine reports it remains T046's concern. Nothing else on the line changed | holder `6018624750`; Copilot `5433292692` | | 9 | plan.md; tasks.md | Copilot's three items at #1251's head `1eb8e9eb`, accepted by the holder at its landing: (a) the pin and landing-order row for T073 names T005 and T095 to T104 as prerequisites, and `T095+` reads T095 to T104 at the critical path, the lane table and the revision note; (b) the combined `conftest.py` and `test_host_plane.py` row splits, and the cross-lane summary gains T026 (and the other chains of item 3); (c) the same split in T020's, T021's and T026's Files lines | holder replies `4201056969`, `4201057311`, `4201057577`; READY note `6026651962` | ### The ticks, verified | task | pull request | merge commit | merged | |---|---|---|---| | T011 | opensoft/openDox-code#92 | `09b8d44a` | 2026-10-06T19:15:55Z | | T014 | opensoft/openDox-code#93 | `a7a1c4d3` | 2026-10-06T22:23:06Z | | T021 | opensoft/openXdox-code#40 | `f70bc9c3` | 2026-10-06T19:07:10Z | | T023 | opensoft/openXdox-code#42 | `d45a0939` | 2026-10-06T17:45:33Z | | T025 | opensoft/openDox-code#91 | `84f8ed83` | 2026-10-06T17:33:31Z | | T026 | opensoft/openXdox-code#43 | `36bbef79` | 2026-10-06T22:35:40Z | | T060 | opensoft/openDox#20, the tag `dox-v1.2` (tag object `58538ff3`, on `6a9f4902`), opensoft/openDox#21 | `6a9f4902`, `c7f75845` | 17:46:59Z, tag 17:58:45Z, 19:02:39Z | | T070 | openxFactory#1253 (T070b, added to its tick) | `fc4fa0ff` | 2026-10-06T18:56:42Z | | T002 | openxFactory#1251 (its own landing) | `1837ea75` | 2026-10-06T22:31:42Z | - **T021** landed with Copilot r4199337845 an ACCEPTED LIMIT (holder READY note `6023492215`); T021's entry records it. - **T025's** entry says its 34 nodes are "quoted at T029"; that stays T029's, and the entry says so. - **T011's** server node is T014's, as its own Falsifier says. **Skipped, because already present at the base:** T020's and T024's ticks (#1251 item 13) and T004's tick (#1245, `260234b5`), all confirmed with `git show <commit>:<tasks.md> | grep`. **T071 is NOT ticked.** Brett's word, "Ratify it (Recommended)" (`#656` `6023375303`), is recorded on T071's entry, but the change's ratification-record PR has not landed (no such PR is open or merged on `opensoft/openxFactory` at this writing). The box stays open. ## Readings the holder accepted (`6026622117`), disclosed as the brief requires - **W7 omits T026 from the openXdox-code chains.** The single-writer table keeps T026 where its own ruling (`6016648451`) puts it, and lane 3's claim (`6021862323`) says T026's PR lands before T095. So the conftest chain reads T020, then T021 and T026 in landing order, then T095, T073, T074; and `test_host_plane.py` reads T020, T026, T095, as W7 gives it with T026 added. - **R9-R2's last sentence** ("If the re-scoped test runs alone, it leaves the declaration, and the count moves with it, as the declaration's own rules require") is recorded in T100 as worded. `declared_exclusion.yaml` is NOT added to T100's Files: the holder's file list at `6022291206` names it for T101 only. - **Edits outside tasks.md**, ruled in scope as each item names its place: plan.md (items 3, 9), spec.md FR-011 (item 5) and `contracts/health-finding.md:91` (item 8). ## Other notes on where an item needed a reading - **Counting.** The task count reads 90 rows: the placeholder `T095+` is replaced by T095 to T104 (81 - 1 + 10). - **Plan 034's task numbers.** The entries cite plan 034's T103 (#80, in T099's `Host` header) and plan 034's T086 (W2, in the rulings) as "plan 034's", because plan 038 now has its own T103. - **OQ-R9-3.** The map did not measure the respelled gate-console and wheel-model skips; T097 and T103 say so, and the map's 127 passed and 5 skipped is quoted as the measurement. - **Counts of slices** are copied in the map's own form (for example "16 nodes, and +5 on R9-R1 (a)"), not summed. - **T095's chain after T026.** T095's After names T021 and T026, both landed. - **Not mirrored from the arc's 4.1:** T075's falsifier gains the some-of-four refusal and the six-and-none acceptance, which #1253 folded. The arc's two older refusals (part-way through the seams; at the column call) are not in T075, since #1253 did not add them. - **T046 and T057** carry no response-shape falsifier for `identity`: item 5 names T041's. ## Review and gates - **`python3 scripts/validate-openspec-cli-pin.py --all`**, in the clone named `openxFactory`, at `691648c6`: exit 0, `Totals: 113 passed, 1 failed (114 items)`, `0 UNDISPOSITIONED failures`. The one failure is the dispositioned `add-chain-attestation` finding, the same on `main`. - **openxFactory pytest.** The full local run was stopped at about 44% at a coordinator drain, so it is NOT a result and is not claimed. The repository's own gate, `pytest-suite` in CI at `691648c6`, completed `SUCCESS` (2026-10-06T23:32:38Z to 23:58:56Z). - **Doc-health**, `scripts/doc-health.py --single-repo . --as-of 2026-10-07`, branch `691648c6` against `origin/main` `0992369a` in the same clone: the two reports are byte-identical (sha256 `ce17aadd6d96e484170e2ec4784e44972e33c7d1a6c65830ea14a1035f2ae976`; `Findings: 31 critical, 26 error, 69 warning, 20 info. New regressions vs previous report: 0.`). So no new error. - **CI at `691648c6`**: all 14 check runs are `SUCCESS` (rollup `SUCCESS`): `pytest-suite`, `merge-master-approval` (the red inherited from `main` since #1252 was cleared by #1138), `openspec-cli-pin`, `doc-health-py314`, `openxdox-consumer-gate`, `wallet-validation`, `clearing-dispatch-gate`, `signed-execution-chain-gate`, `former-id-arrival-gate`, `release-tag-gate`, `openreposhape-pin`, the two `lane-line` runs and SonarCloud. - **`main`** has moved to `0992369a` since the last merge (`543f6ce1`). GitHub reports this PR `MERGEABLE`, and the ruleset is not strict, so `main` is not merged in again (a merge would restart the 27-minute gate). | Copilot at | verdict | findings | answered | |---|---|---|---| | `691648c6` (final; review `5435686665`) | Changes recommended | 1 (thread `4201443690`): T041's falsifier cannot verify what T046's `health list --json` and T057's HTTP route emit; the review summary adds that the new T095 to T104 collide with plan 034's task numbers cited unqualified at `spec.md:662`, `spec.md:1222` and `clarify-questions.md:437` | accepted limit (#656 `5988818366`): plan-record accuracy, not a bypass, and the T041 placement is the holder's own instruction (item 5). Answered (`4201487553`) and resolved | 1 thread, 0 unresolved. The holder ruled both points YES at `6027706377` and has them encoded in a THIRD batch, not here: the `identity` falsifier split across T041, T046 and T057, and the plan 034 references qualified. This PR therefore carries T041's wording as the brief gave it. ## Files changed - `specs/038-opendox-document-tool-self-maintenance/tasks.md`, `plan.md`, `spec.md` - `specs/038-opendox-document-tool-self-maintenance/contracts/health-finding.md` ## What is NOT done - T071 stays open (its ratification record has not landed). No box of #1144 is ticked, and no task other than those listed is ticked. - No scenario or spec delta beyond FR-011's JSON-shape bullet is touched, and nothing is under `openspec/changes/`. `README.md` is untouched. - The T095 to T104 entries record the slices; none of their work is done here. 🤖 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.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 tagdox-v1.2goes on that commit, and a second PR moves the CHANGELOG entry tostandard, the tag existing." The cut PR #20 (→6a9f4902285029b4fb02753e2b79be0a137302c5) landed thedox-v1.2entry with the header kept atStatus: draft, because the tag did not exist yet. The file itself says the header "promotes back tostandardonce thedox-v1.2tag exists, by the same act as before — no second open question is needed, the rule already covers it."make validateandmake pins, quoted below.#656. Decisions: CF-2 (batch Q item 10's addendum).The tag exists now.
dox-v1.2is annotated tag object58538ff33a953ffd5dfa9b44a7edabd75dada00bover6a9f4902285029b4fb02753e2b79be0a137302c5. The tagger isBrett 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. I read the tag object, its target and its tagger from the forge (git/ref/tags/dox-v1.2andgit/tags/58538ff3…). In this branch's clone,git rev-parse dox-v1.2^{commit}gives6a9f4902…, which is this branch's base.One file, the shape of #15
Status: drafttoStatus: standard.dox-v1.2tag does not exist yet … This header promotes back tostandardonce …") 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 resolveddox-v1.1paragraph openDox contract changelog: Status draft → standard, the dox-v1.1 tag now exists #15 wrote. openDox contract changelog: Status draft → standard, the dox-v1.1 tag now exists #15 also changed "was reached once" to "was first reached" in the paragraph above it. Here the paragraphs already read in order, because dox-v1.2: T040's three health schemas (spec pin, manifest bump, CHANGELOG draft) (plan 038 T060) #20 put thedox-v1.1paragraph in the past tense, so there is no second edit of that kind.dox-v1.2below" to "nothing pending", the form the line had afterdox-v1.1was cut. Both of its claims were re-read today. openDox-specmainis still7db9438b. openDox-codemainis84f8ed83, past the bundle'sdede32b4.git diff dede32b4 84f8ed83 -- contracts src/opendox/contractsis empty, so "independently of any contract byte" still holds.Checked line by line: nothing left asserts the pre-tag state
dox-v1.0anddox-v1.1window paragraphsStatus: draftagain overdox-v1.2's own window … andstandardagain now"openxFactory's own contract changelog still carriesdraft…"dox-v1.2entry's "the lane asks for that word once this cut PR lands" and "Not cut by this pull request"dox-v1.1entry's own "The tag" section unedited in the same way. A release entry does not change after its tag.contracts/manifest.yaml'sdox-v1.2comment ("which the lane asks for once this PR lands")dox-v1.0ruling quoteVerification
At this branch's head
9b41eb4b:What does not change
This PR touches no release entry, manifest, pin, gitlink or workflow, and no tag.
dox-v1.0(608236a1overdc7aa08f),dox-v1.1(851a28e9over52005213) anddox-v1.2(58538ff3over6a9f4902) stay exactly as published. There is noArc:line, because #15 carried none: this is bookkeeping.It opens as a draft.
🤖 Generated with Claude Code
Summary by Sourcery
Finalize the openDox v1.2 contract changelog now that its annotated release tag exists.
Enhancements: