Repository navigation
dox-v1.2: T040's three health schemas (spec pin, manifest bump, CHANGELOG draft) (plan 038 T060) - #20
Conversation
…ELOG draft) (plan 038 T060) Plan 038's T060, the openDox root half of R2Q22 (a): one lockstep commit, in the shape of dox-v1.1's cut PR (#14, 5200521). - spec gitlink and contracts/spec-pin.yaml (commit + digests.tree_sha256) move to openDox-spec 7db9438b, the squash merge of openDox-spec#17 (T040's three health schemas). No workflow names the spec leg. - contracts/manifest.yaml: contract_bundle_version dox-v1.1 -> dox-v1.2; the four existing rows' commit: advances with the leg (no sha256 moves); three rows added, opendox-health-finding, opendox-health-packs and opendox-health-dispositions, release_member false by measurement. - contracts/CHANGELOG.md: a dox-v1.2 section, and the Status: header reads draft until the dox-v1.2 tag exists. No tag is created. The tag is cut on Brett Heap's cut word, asked for once this lands; a second PR then moves the header to standard. Lane: openxfactory-4 Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Reviewer's GuideThis lockstep cut updates the root's spec submodule and pin digest to openDox-spec#17, bumps the contract bundle to dox-v1.2 with three measured health-schema entries, and records the release as a draft pending Brett's cut word and a later annotated tag; code pins and workflows remain unchanged. Entity relationship diagram for dox-v1.2 health schemaserDiagram
CONTRACT_BUNDLE ||--o{ RELEASE_SCHEMA : contains
SPEC_LEG ||--o{ RELEASE_SCHEMA : provides
CONTRACT_BUNDLE {
string version "dox-v1_2"
}
SPEC_LEG {
string commit "7db9438b"
string tree_sha256 "d9f976c5"
}
RELEASE_SCHEMA {
string id
string type "release_schema"
int contract_schema_version "1"
boolean release_member "false"
}
Flow diagram for the dox-v1.2 release transitionflowchart TD
A[Update spec gitlink to openDox-spec#17]
B[Update spec pin commit and tree digest]
C[Set contract_bundle_version to dox-v1.2]
D[Add three health-schema manifest entries]
E[Run make validate and make pins]
F[CHANGELOG remains draft]
G[Brett gives cut word]
H[Operator creates annotated dox-v1.2 tag]
I[Promote CHANGELOG status to standard]
A --> B --> C --> D --> E --> F --> G --> H --> I
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 coordinated pin, manifest, and changelog changes are consistent and validated.
Review effort: Balanced
Findings: None
What changed in this PR
Prepares the draft dox-v1.2 bundle by advancing the spec leg and registering its three health schemas.
Changes:
- Moves the spec gitlink and verified pin in lockstep.
- Adds three health-schema manifest entries.
- Documents the draft release pending its tag.
| File | Description |
|---|---|
spec |
Advances the spec submodule revision. |
contracts/spec-pin.yaml |
Updates the pinned commit and tree digest. |
contracts/manifest.yaml |
Defines dox-v1.2 and its schemas. |
contracts/CHANGELOG.md |
Records the draft bundle 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 23 hours and 37 minutes by commenting |
|
READY at bb4249d Lane: openxfactory-4 (openXfactory-4-openDox_extraction) Holder, at READY (T060: the openDox root spec pin for
|
… 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>
…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)
Arc: neutral-product-standalone-operability
The
dox-v1.2cut 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 thedox-v1.2minor, on Brett's cut word (R2Q22 (a))." Its spec-leg half landed asopensoft/openDox-spec#17(T040, squash-merged7db9438b). This PR is the root half. It follows the shape of release 1'sdox-v1.1cut PR, #14 (5200521).make validateandmake pins, quoted; openDox-spec's ownvalidate.#656. Decisions: CF-2 (batch Q item 10's addendum).The authority:
opensoft/openxFactory#656comment6003486656: "Accept all 25 recommended (Recommended)". openDox-spec owns three schemas, and the openDox root cuts one moredox-v1.yminor.opensoft/openxFactory#1248→91e961a0): "The cut is made on Brett Heap's cut word, asdox-v1.1's was (RULED5894235642)."6013547504) names thedox-v1.2cut as still Brett's word, at the act.This PR does not create or push a tag.
What moved, in the one lockstep commit
spec(gitlink)f7ee3c76→7db9438b4cc4446ab4e6ab5b552c220312deccc9contracts/spec-pin.yamlcommit:→ the same commit;digests.tree_sha256e81f8530…→d9f976c5b279b24b80387dad1deb0e8438d95f11ce183540bca93f86a5cd7363. No.github/workflows/*.ymlnames the spec leg, so there is no third fact to move.contracts/manifest.yamlcontract_bundle_versiondox-v1.1→dox-v1.2. The four existing rows'commit:fields advance with the leg; nosha256changes. Three rows are added inopendox-snapshot's form:opendox-health-finding,opendox-health-packsandopendox-health-dispositions, each withtype: release-schema,contract_schema_version: 1andrelease_member: false.contracts/CHANGELOG.md## dox-v1.2section. TheStatus:header readsdraftagain, and the Unreleased line names the new pins.These are the same four paths #14 changed.
contracts/code-pin.yamland thecodegitlink stay atdede32b4.Verification
From a fresh
--recurse-submodulesclone, at this branch's headbb4249d5:Red first. With only the
specgitlink staged, before the pin file moved,make pinsrefused with exit 2:A mutant of the new digest (
tree_sha256d9f976c5…→d9f976c6…) was also refused, withpin-digest-mismatchand exit 1. With the digest restored, the run exited 0.Every digest was recomputed here, not copied.
tree_sha256. Computed twice at7db9438b: withrepo_shape.tree_digest, and by hand (git ls-tree -r -z, sorted, sha256). Both gived9f976c5…5cd7363. openDox-spec#17 squash-merged to the same tree (f143e7dc) as its branch head58383189, where itsvalidateran green.sha256. Computed overgit show 7db9438b:<path>, and all seven match the manifest. The four existing digests are unchanged. The seven rows are exactly the seven files undercontracts/schemas/at the pin, and the CHANGELOG'sdox-v1.2table equals the manifest's rows.release_member: falseis a measurement. None of the three new ids is among the 51contract_idrows of openxFactory'scontracts/hermes-runtime/contract-index.yaml, read at openxFactorymain51456835.openDox-spec's own
validate. I ran its CI steps locally at7db9438b, with pytest>=8,<9and OpenSpec CLI 1.2.0:The 5 skipped tests need the optional imports
yamlandjsonschema. The leg's CI install line installs pytest only, so CI skips the same five.Why the CHANGELOG's
Status:header moves todraftThe 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. Thedox-v1.2tag does not exist yet, so the header readsdraftuntil it does.dox-v1.1's window paragraph moves into the past tense, as #14 did fordox-v1.0's.dox-v1.0anddox-v1.1keep 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-levelcontracts/. Itssrc/opendox/contracts/does hold plan 034 T057's packaged copies of four spec schemas, recorded atf7ee3c76, and the cell says so. Those copies move to this pin later, in T041, T047 and T054.What is NOT done
dox-v1.2goes on the landed commit, and a second PR moves the CHANGELOG header tostandard, as openDox contract changelog: Status draft → standard, the dox-v1.1 tag now exists #15 did fordox-v1.1.code/moves, and neither doescontracts/code-pin.yaml. No workflow changes.🤖 Generated with Claude Code
Summary by Sourcery
Prepare the openDox root for the dox-v1.2 contract bundle by pinning the updated spec revision and registering its three health schemas without creating the release tag.
New Features:
Enhancements:
Documentation: