Repository navigation
T002b: plan 038's second bookkeeping batch, T094 and T095 to T104, the identity response shape and the single-writer chains (plan 038) - #1257
Conversation
…ng, items 1 to 14 T002 records the base of release 2: every repository's main (research.md R0's command), the box census (125 boxes, 42 open, delta 0 against ce64afc), PACKET_MERGE=94b6f7f1, and lane openXfactory-3's composed re-run (174 red against R2-INV-P4F's 174, no node moved). The README entry links it. Plan 038's tasks.md, plan.md, data-model.md and contracts record the holder rulings and Brett's answers posted on #656 since the ruling, as worded, each cited by comment id: the Files of T022, T023, T026, T029, T073 and T074; R-1 (a)'s six spans and F12.1's --chains; T073's After set, T094, T095+ and its open_until wording; T076's F9.2 disposition; T003's close on the re-check; the finding's identity, stored and emitted; and the ticks of T002, T003, T005, T008, T010, T040 and T070. Bookkeeping only, so no Arc: line. Lane: openxfactory-4 Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
T026's H-2 in-test respellings move from 17 to 20: three more are admitted under CF-4 (the holder's ruling, #656 comment 6020859092). T020 (openXdox-code#39, c6d15b27) and T024 (openXdox-code#38, 8b64fae0) are ticked, each merge commit verified with gh. The engine's cap on a finding's serialized identity names no value: the value is T041's and T042's to set. Lane: openxfactory-4 Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
- T003 is closed on the re-check (#656 comment 6017901451), so T004's After, the header, the dependency list, plan.md and the checklist stop calling its fresh analyze open. - ARC-5 (a) in plan.md now says what batch Q's F9.2 note says: #1144's archive tool refuses unticked lines, so its archive ticks F9.2 with a written disposition naming the arc change as the carrier. - A finding's identity is emitted: FR-011 and T046 say so; T041 tests the engine's cap at its boundary (the cap's value stays T041's and T042's to set). - The task count reads 81 rows, with T095+ as the one placeholder row. Lane: openxfactory-4 Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
The edit of FR-011 in 76b9428 changed a requirement's SHALL shape, which the holder's list for the identity ruling (#656 comment 6018624750) does not include. FR-011 is back as origin/main has it. The contracts (health-finding.md, cli-http-health.md), data-model.md § Finding, T041, T042 and T046 carry the emitted identity; FR-011 mirrors #1144's ratified 14.5 field list, and whether to edit it is the holder's to rule. Lane: openxfactory-4 Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
The holder's answer on #1251: the contract module owns the field bounds, so the cap on a finding's serialized identity is T041's, and T042 stores what T041 bounds. T041's and T042's entries, data-model.md § Finding and contracts/health-finding.md say so. The cap's value is still not written here. Lane: openxfactory-4 Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
Copilot's review of 80c6fee: data-model.md's identity column is NOT NULL, as T040's finding schema requires it, and evidence/r2-base.md no longer calls its figures an input to T004's ruling (T002 follows T004; the checkpoints T033 and T066 are the consumers). Lane: openxfactory-4 Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
…'s fold, T072's Files and the ticks (tasks.md; plan 038) Encodes rulings already posted on #656 and landings already merged, as worded: T094's map R2-INV-R9 (6021830607) and the slice entries T095 to T104 with the holder's rulings (6021830531) and answers (6022291206); the four items of #1253's fold (fc4fa0f) in T072, T074 and T075; T041's identity response-shape falsifier (6018624750); T072's Files and its two scope rulings (6023517122); the ticks of T011, T021, T023, T025 and T060 and T070's second landing; T071's word given, its box left open. Lane: openxfactory-4 Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
…tence and T014, T026 and T002's ticks (plan 038) plan.md: the single-writer table carries the chains of T095 to T104 (6021830531 W7, 6022291206) with tests/conftest.py and tests/test_host_plane.py as separate rows, T073's landing-order row names T005 and T095 to T104, T095+ reads T095 to T104, and the cross-lane summary gains T026 (Copilot's three items at #1251's head, accepted by the holder: 4201056969, 4201057311, 4201057577). spec.md: FR-011's JSON shape gains the emitted, bounded identity (6018624750). contracts/health-finding.md: the cross-run collision sentence is qualified for an exception-only finding (6018624750; Copilot 5433292692). tasks.md: T014 (openDox-code#93), T026 (openXdox-code#43) and T002 (#1251) ticked with their merge commits. Lane: openxfactory-4 Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
Reviewer's GuideThis bookkeeping-only PR updates plan 038’s task records to reflect the completed R9 measurement and its ten repair slices, verified landings, dependency and single-writer chains, folded falsifiers, and open T071 status; it also formalizes the bounded emitted identity field in the health-finding response contract. 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
🟡 Changes recommended
Several falsifiers cannot enforce their stated behavior, and new task IDs make existing cross-plan references incorrect.
Review effort: Balanced
Findings: 1
Open (1)
What changed in this PR
Records plan 038’s second bookkeeping batch and formalizes remaining execution contracts.
Changes:
- Adds T095–T104 repair slices, dependencies, and completion records.
- Updates single-writer chains and arc falsifiers.
- Defines the emitted
identityresponse shape and collision wording.
| File | Description |
|---|---|
tasks.md |
Adds slices, ticks, dependencies, and falsifiers. |
plan.md |
Updates writer chains and landing order. |
spec.md |
Extends FR-011’s JSON response shape. |
contracts/health-finding.md |
Clarifies cross-run collision detection. |
💡 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 2 days and 20 hours by commenting |
|
READY (holder, manual landing) at 691648c Lane: openxfactory-4 (openXfactory-4-openDox_extraction) Holder, at READY: T002 batch 2, plan 038's bookkeeping items 1 to 9 plus the ticks. Landed under plan 038's "lane openxfactory-4 lands every PR" (#656
|
…entity bound by layer, the single-writer rows and the holder's batch-3 flags (plan 038) (#1263) Lane: openxfactory-4 (openXfactory-4-openDox_extraction) ## T002c: plan 038's third bookkeeping batch (plan 038) Bookkeeping: no `Arc:` line, and no `openspec/changes/` path. It encodes rulings already posted on #656 and landings already merged, each cited by comment id or merge commit, with no new decision. It follows #1251 and #1257 in form, and redoes nothing either did. #1257 landed as `c70bdbd9`, so this PR is not stacked; `origin/main` (`c9dfd4f8`) is merged into the branch, never rebased. **Realizes / Falsifier:** none (bookkeeping). The gates are listed under "Gates" below. ### What changed (specs/038-opendox-document-tool-self-maintenance/) **Ticks, each merge commit read through GraphQL (`pullRequest{mergeCommit{oid}}`) before it was written.** The sweep covered every PR merged since 2026-10-06T23:30Z in openDox-code, openXdox-code, openDox, openXdox, openDox-spec and openxFactory, re-run at 2026-10-08T16:16Z: - openXdox-code: T095 #46 → `e2340bb6`, T101 #48 → `8b0401a1`, T098 #51 → `fc1115d6`, T103 #49 → `6f259156`, T096 #53 → `34e1c1f2`, T100 #54 → `2a3d8c09`, T099 #47 → `4aa3070a`, T102 #52 → `e7815ac5`, T097 #50 → `4dab93fc`, T022 #41 → `aefd1091`. - openDox-code: T104 #94 → `d616da3e`, T072 #95 → `99220883` (the arc's first realization). - Follow-ons recorded on the task they follow: T021's openXdox-code#55 → `da736090`, and T096's openXdox-code#56 → `9720925e`. - T095's Landed line also records Copilot r4201411760 as the holder's READY note did (`6027382308`, accepted limit under `5988818366`; the fix rides T073). - Nothing is ticked whose PR has not merged. T029 and T073 (openXdox-code#44, #45) and T012/T013 (openDox-code#90) stay open. **New task T105** (R2-INV-P5, read-only, lane 3; holder `6027341795`, claimed `6027346843`): ticked on lane 3's DONE line (2026-10-07T00:28:59Z), its summary `6028122920`, the map `lane-coord-034/r2/R2-INV-P5.md`, and the holder's ruling `6028138991`. Verdicts: T041, T042 and T043 READY-WITH-NOTES; T045, T047, T048 and T049 blocked by plan order only. Placed under "Wave 1's readiness" before W1, with a row in the Phase 5 slice table. The task count is 91 and plan.md's two stale "79 tasks" cites now read 91 tasks and T001 to T105 (`6028364555` item 5). **The four slice notes** (`6028138991`; no requirement or falsifier changes), as implementation notes on T042, T043, T045 and T047, refined by the holder's batch-3 flags (`6028364555`) and the Copilot-thread ruling (`6064169640`): - T042: the token `RESET_CONFIRMATION` stays byte-identical, its wording may change; Files gain `docs/runtime.md` (R2-INV-P5 § T042: its two table arrays move with `identity.TABLES`, which `test_deploy_shape.py` holds); `RULED_TABLES` is encoded as the map words it. - T042's SQL column is `full_run` (`6064169640`, fix-now, resolving Copilot 4205521074): the words "quote it or" are gone from T042, and `data-model.md` gains one line saying the SQL column is `full_run` because PostgreSQL 16 reserves `full`. **Files and falsifiers:** - T073: Files gain `tests/test_host_plane.py` and the `opendox-snapshot-*` farm exclusion scoped to the `opendox_spec` owner; the falsifier gains the farm case (Copilot r4201411760, accepted at #46's landing, `6027382308`, reply 4201421102). plan.md's conftest and `test_host_plane.py` rows, and the T020, T026 and T095 Files chains, end with T073. - T015 and T016: Files gain `tests/test_capability_honesty.py` and `tests/test_lens_seed_actions.py` (`6027633398`), with the same-kind enumeration collateral pre-authorized in the minimal way and listed in each PR body, and `tests/test_default_profile.py` (`6023619783` item 1, corrected by `6026622117` item 2), with the chain T015 → T016. plan.md gains two single-writer rows. - T041, T046, T057: the `identity` bound is split by layer (`6027706377` item 1, refining `6018624750`). T041 narrows to the module's own serialized finding shape; T046 gains it on `health list --json`; T057 gains it on the HTTP Health response; FR-011's coverage row cites all three. - T022's falsifier gains the root-`.gitignore` source check (`6026275158` item 2); T102's gains the widened no-bypass scan (`6026275158` item 3); `6028364555` item 4. - T012's Ruled line: `6026275158` item 1 and `6026622117` item 1. - T072's Files name openDox-code#95, and T071's entry names its ratification record, openxFactory#1261 (a DRAFT PR that exists now). T015's PR does not exist yet, so its number is not named. **Qualifiers and counts:** "plan 034's" on spec.md (two places) and clarify-questions.md (one place), found by content, nothing else moved (`6027706377` item 2). tasks.md's header and plan.md each carry a revision paragraph. ### Ruled and Decisions Ruled (all on #656): `6027341795`, `6027346843`, `6027382308`, `6027633398`, `6027706377`, `6026275158`, `6026622117`, `6023619783`, `6028122920`, `6028138991`, `6028364555`, `6064169640`. Decisions: none new. ### Readings, disclosed - T042's Files wording follows R2-INV-P5 § T042 (the `docs/runtime.md` arrays move with `identity.TABLES`); the holder's `6028364555` item 2 words the cause as the `full` rename, and cites the same map section. - plan.md's `tests/test_default_profile.py` row says the chain "follows `default_profile.py`'s", as `6023619783` words it; T046 and T057 are not given the file in their own Files lines. - `6023619783` item 2 (T071's record header) is not in this batch's items and is not encoded here. - Lane 3's other R2-INV-P5 observations (moved #1144 line references, floor and census counts, T015's census line) stay informational and are not encoded (`6028364555` item 7). ### Gates - `python3 scripts/validate-openspec-cli-pin.py --all --strict` at the merged head `b236fa6c`: exit 0 (the one accepted exception is `add-chain-attestation`'s disposition, as on main). - doc-health (`scripts/doc-health.py --single-repo .`) at `b236fa6c` against `origin/main` `c9dfd4f8`, same clone: identical reports, 31 critical, 26 error, 69 warning, 19 info, zero differences after SHA normalization. - Local `python -m pytest tests/ -q -m "not postgres" -n 8` at `3e6feb6b`: 9206 passed, 7 skipped, 1 failed. The failure is `tests/hermes_runtime_contracts/test_validator_cli.py::test_release_mode_field_is_preserved_on_the_real_repository[--require-realization-realization]`, a 30 s subprocess timeout that fails identically on `origin/main` in the same clone. Later commits change only spec text and chain records. - CI at the head `b236fa6c`: every check SUCCESS (rollup SUCCESS, read through GraphQL), including `pytest-suite`, `doc-health-py314`, `openspec-cli-pin` and SonarCloud. The head adds only the merge of `origin/main` `c9dfd4f8` (the archive of amend-worker-input-budget-dispatch-wording, #1269) to `c675894d`, whose rollup was SUCCESS too. - Copilot: at `a9fc7e7b` two threads (4205521074 → fixed in `4263d665` on `6064169640`; 4205521173 → fixed in `c3409c03`). At `3e6feb6b` two threads (4221525148, the PR description, updated; 4221525277, the T020, T026 and T095 chains, fixed in `c675894d`). At `c675894d` and at the head `b236fa6c`: "Approval recommended", 0 open findings. All four threads are answered and resolved. ### NOT done No requirement text, no contract file and no `openspec/changes/` path is touched. No box is ticked in #1144. refs #656 🤖 Generated with [Claude Code](https://claude.com/claude-code) Lane: openxfactory-4 Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
…two early-wave words, and the holder's wave-1 and wave-2 rulings (plan 038) (#1279) Lane: openxfactory-4 (openXfactory-4-openDox_extraction) ## T002d: plan 038's fourth bookkeeping batch (plan 038) Bookkeeping: no `Arc:` line, and no `openspec/changes/` path. It encodes rulings already posted on #656 and a landing already merged, each cited by comment id or merge commit, with no new decision. It follows #1263 in form and redoes nothing #1263 did. Claim: #656 `6069520093`. `origin/main` is merged into the branch twice, `40d6e5c1` and then `564f565a`, never rebased. **Realizes / Falsifier:** none (bookkeeping). The gates are listed under "Gates" below. ### What changed (specs/038-opendox-document-tool-self-maintenance/) **A. Ticks.** Each merge commit was read through GraphQL (`pullRequest{mergeCommit{oid}}`) before it was written. The sweep covered every PR merged since #1263's landing (2026-10-08T18:12Z) in openDox-code, openXdox-code, openDox, openXdox, openDox-spec and openxFactory, plus xFactory and codexFactory, and was re-run at 2026-10-08T23:19Z: - **openDox-code:** T012 and T013, #90 → `6827cafc` (2026-10-08T21:08:43Z), in one PR as T012's "Lands with" requires. T012's Landed line records the accepted limits that #90's body states: - the holder's `6067853207`: Copilot 4223441552 with Codex P2 4223462534, Copilot 4223441643, and Codex P1 4223462529. Item 3 widens the fast-forward limit to both paths. - `6069024568` item 1: lane 3's R2-DELTA MINOR at `landing.py:836`. - beside those, `6026622117` item 1 and `6035797819`. - **Nothing else** merged in those repositories realizes a plan-038 task. The openxFactory merges since (#1267, #1270, #1271, #1272, #1275 and #1277) belong to other changes. - **The previous batch,** #1263 → `3a2ab303`, is this batch's "merged since" anchor in the revision paragraph, as #1263 treated #1257. It is not added to T002's Landed line. - **The task count** reads T012 and T013 done. **B. Brett's words on phase 5's early waves,** recorded under tasks.md "What can start": - wave 1 (T041, T042 and T043) is written now and lands after T027 (`6035546708`, *"Write now, land after T027 (Recommended)"*); - wave 2 (T044 and T046) is written early, stacked (`6067802993`, *"Write now, stacked (Recommended)"*), and lands in plan order. Every After line keeps its landing meaning. **C. The holder's wave-1 rulings (`6069024023`).** - **Item 1.** `contracts/health-finding.md` § The id rule names the engine categories, T041's nine plus `dispositions-refused` and `manifest-refused`. It states that a category is also the finding's `kind`, and gains the four mappings: - stdout over the cap is `pack-bound-hit`; - non-JSON or contract-breaking output is `pack-output-refused`; - one finding per (category, entry) per run, with the reasons in `evidence`; - each category's `pack_id`, as `6072086385` item 1 rules it (see "The review questions, ruled" below). It replaces the phrase "one `pack_id` per category", which named no value. T045's text records its refusal extension, extending `6065680005` item 3: it refuses a pack family that declares an engine kind, and a pack finding with an empty path. T041's note records the two added categories and points to the contract's list. - **Item 2, option (D).** `contracts/health-finding.md` (the re-raise bullet) and `data-model.md` § Baseline classes carry the re-raise's two forms, with no schema change: - `{disappeared_id}`, with the original's path; - the pathless form: `path ""`, `{category: <the original's kind>, entry: <its entry, or "">}`, and `disappeared_id` and the baseline run in `evidence`. T046's falsifier gains the pathless-original node (run 2 re-raises once, run 3 raises nothing). T041's note says that `disappearance_identity()` returns either form. - **Item 3.** `data-model.md` § Health run gains the `run_seq` row, and a note that `baseline_class` is NOT NULL, with no fourth value. The note is also on § Finding's own row. T046's text gains the per-corpus advisory transaction lock, and its falsifier gains the node that two overlapping runs serialize. T042's column list and Ruled line name `run_seq` (item 3 accepts it as T042's). **D. The holder's admissions (`6069024568`).** - **Item 2.** T015's Files gain `src/opendox/web/views/account-menu.js` (one word, `"submit"` in `WRITE_ACTIONS`) and `pyproject.toml` (one line, `:312`'s 42 → 43), each with the chain T015 → T016 → any later verb. T016's Files record that it follows T015 in both. plan.md gains a row for `account-menu.js`, and its `pyproject.toml` row gains that line's chain. - **Item 3.** T042's Files gain `tests_runtime/test_api_endpoints.py`, for one edit. **E. The holder's wave-2 rulings (`6069507373`).** - **T044 item 3.** `tasks.md:1163` now reads "the top-level directories named by the six role keys or their declared words", as FR-010 words it at `spec.md:819-821`. - **T046 item 8.** T046's After line gains T016: the `cli.py` and `default_profile.py` chains at `plan.md:456-457`, cited by row name because this PR moves plan.md's lines. Its text says that its `default_profile.py` and `cli.py` contributions, and the admitted `tests/test_default_profile.py` line, join its PR only after T016 lands, by a merge of `main`. That line joins T046's Files. - **T046 item 2.** T041's note gains the module-level, patchable `finding_id()`, the single hash path `make_finding` calls. Its interface is unchanged (lane 3, `6069516931`). - **T046 item 4.** T056's Files gain ONE `engine.py` line binding T046's pack hook. It is written after T046 lands, with nothing else in `engine.py` (lane 3's ACK, `6069516931`). T046's Files mark `engine.py` as "first: T046 → T056", and plan.md gains its row. - **`contracts/health-finding.md:43`.** `baseline_class` is NOT NULL in the store (`0003_`). The row also says that the finding schema's `finding-keys` rule lists it as optional, since no schema change is ruled. - **N-14 and OQ-H-15, one owner each.** - N-14 is T046's: suppression on an injected source of accepted ids, with T054 supplying the parser (T046 item 3). - OQ-H-15 is T044's: in the families, through `excluded=`, with no `doxbench_intake.py` edit (T044 item 8). - T054's text and its Decisions line drop both. - **`plan.md:437-438`.** "rebases" becomes "merges `main`". tasks.md's header and plan.md each carry a revision paragraph. ### The review questions, ruled (`6072086385`), encoded in `8b76a05d` - **Item 1 (Q1, Codex 4225201227): each engine category's `pack_id`, option (b),** as T041's `ENTRY_CATEGORIES` implements it and as dox-v1.2's schema text for `pack_id` reads. - The entry's id, for a finding against a VALID manifest entry's pack: `fetch-failed`, `digest-mismatch`, `declaration-refused`, `pack-crashed`, `pack-timed-out`, `pack-bound-hit` and `pack-output-refused`. - `opendox` for every other category: `no-sandbox`, `manifest-refused`, `dispositions-refused` and `entry-refused`. A refused entry rides only in `identity.entry`. - The rule is stated in `contracts/health-finding.md` § The id rule (replacing "one `pack_id` per category") and in its Rules section's install-level bullet. T041's note and Ruled line cite it. - **Item 2 (Q2, Copilot 4225214488), option (b): no plan change.** #99 already pins NOT NULL, the run order and the uniqueness. T042 adds a catalog assertion (GENERATED ALWAYS, CACHE 1) in its own tests. - **Item 3 (Q3, Copilot 4225214548), option (a).** T045's Falsifier gains one node for each refusal that `6069024023` item 1 extends from `6065680005` item 3: a family that declares an engine kind is refused, and a pack finding with an empty path is refused. T045's Ruled line cites item 3. - **Item 4 (the NUL seam)** is not in this batch, as the holder directs. It is left to the next batch. ### Ruled and Decisions - **Ruled (all on #656):** `6035546708`, `6067802993`, `6067853207`, `6069024023`, `6069024568`, `6069507373`, `6069516931` and `6072086385` (items 1 to 3). - **Cited beside them:** `5988818366`, `6064244857`, `6065680005`, `6026622117` and `6035797819`. - **Decisions:** none new. ### Readings, disclosed - **6035546708's placement.** It was recorded nowhere in the tree. Its own record line asks for "beside the release map (T005 item 12)", which is #1144's `openspec/changes/` path, outside this batch. It is recorded with `6067802993` under "What can start", where tasks.md words N-6 (a) as "start". The holder accepted this placement when the writer resumed. - **`plan.md:437-438`.** A literal swap would read "merges `main` onto the previous slice's landing", so "onto" also became "after". - **The single-writer rows.** `6069024568` item 2 and `6069507373` T046 item 4 set chains, and plan.md's table records them as #1263 did for its chains: - rows for `account-menu.js` and `health/engine.py`; - `pyproject.toml`'s `:312` chain, beside its T048 → T055 → T061 chain. - **The engine categories in the contract.** The ruling adds two categories to T041's nine, so the contract names all eleven. Item 1 accepts the nine as written, and its mappings name `pack-bound-hit` and `pack-output-refused`. - **The `baseline_class` NOT NULL note** is in `data-model.md` § Health run, as the ruling words it, and on § Finding's own row. - **Line drift.** Every cited line matched by content at the base `c8dde131`: - `tasks.md:1163` and `:1238-1240`; - `plan.md:437-438` and `:456-457`; - `data-model.md:260-262`; - `contracts/health-finding.md:43`, `:59-62` and `:64-69`. One exception: `6069024023` item 1 says T041's nine copy `data-model.md:330-334`. In this file, those lines are § Pack declaration, which lists no categories, so nothing is encoded from that cite. ### NOT encoded (the writers' own) - **`6069507373` T046 item 2's edge,** where two pathless originals of one (category, entry) yield ONE re-raise, and T044's other items: these are implementation rulings for those writers, not bookkeeping. - **plan.md:664's R2Q11 summary row,** which the ruling does not name. - **#90's readings 1 to 5 and 7** (inferred, not ruled). - **`6072086385` item 4,** the NUL seam: left to the next batch. - **T071's tick** (#1261 → `a020b34a`, landed at 01:13:36Z, after this PR's last push): left to the next batch, as the holder directs. ### Gates - **Validator.** `python3 scripts/validate-openspec-cli-pin.py --all` and `--all --strict` at `8b76a05d` both exit 0, with `Totals: 113 passed, 1 failed (114 items)`. The one failure is the accepted exception, `add-chain-attestation`'s disposition in the pin, as on main. - **CI at the head `8b76a05d`:** 14 of 14 checks are SUCCESS (rollup SUCCESS, read through GraphQL), including `pytest-suite`, `doc-health-py314`, `openspec-cli-pin`, `lane-line` and SonarCloud. - `pytest-suite` reports `selected=9838 passed=9832 skipped=6 failures=0 errors=0` (9208 tests passed, 6 skipped). - Its freshness verifier and its vector replay both passed. - **Local pytest at `8b76a05d`** (`-m "not postgres" -n 8`, with the three gitlinks initialized as CI does): `2 failed, 9205 passed, 7 skipped`. - Both failures are 30 s subprocess timeouts of `validate-hermes-runtime-contracts.py` in `tests/hermes_runtime_contracts/test_validator_cli.py`, on a shared host at a load average of about 85 on 32 cores. - Serially, the release-mode node also fails on main, as #1263 recorded. - The candidate-mode node passed serially at `897dce40` and on main `b4b9d903`, and timed out under that load at `8b76a05d`. - CI runs both green. - **doc-health** (`scripts/doc-health.py --single-repo .`), at `897dce40` against main `b4b9d903` in the same clone: identical reports, 31 critical, 26 error, 69 warning and 19 info, with 0 differences after SHA normalization. `doc-health-py314` is green at the head. - **Copilot.** - At `897dce40`: "Changes recommended", with two threads (4225214488 and 4225214548), ruled by the holder in `6072086385` items 2 and 3. - At `8b76a05d`: "Approval recommended", with 0 open findings. - **Codex.** - At `897dce40` it reviewed the head ("Reviewed commit: `897dce405c`") and opened one P2 thread (4225201227). The holder ruled it in `6072086385` item 1, and `8b76a05d` encodes the ruling. - At `8b76a05d`, the trigger posted at 01:02:53Z was answered at 01:02:56Z with "You have reached your Codex usage limits". There is no Codex review at the head yet. - **Threads:** all 3 are answered, citing `6072086385`, and resolved. ### NOT done - spec.md, every `openspec/changes/` path and #1144 are untouched. - No box is ticked in #1144, and no task is added. refs #656 🤖 Generated with [Claude Code](https://claude.com/claude-code) Lane: openxfactory-4 Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>




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 noopenspec/changes/path, so no Rule 6 window applies. It began stacked on #1251's head; #1251 has landed (1837ea75) andmainis merged in (543f6ce1), so the diff againstmainis this batch alone.From plan 038's
tasks.md, T002T002b).opensoft/openxFactory#656, or a landing already merged, encoded as worded and cited by comment id or merge commit.The items
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 entriesR2-INV-R9.md;6021830607; claim6021862323; rulings6021830531plane_host_foruntouched, an autouse fixture registers the declared host;DECLARED_HOST_SUITESguarded structurally). T101:tests/declared_exclusion.yamlfor ONE entry (reasons[doc_health], note dropped, theonlylist 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) applied6022291206; the T097 line is6023517122(the holder confirmed the citation,6026622117)tests/conftest.pyT020, then T021 and T026 in landing order, then T095, T073, T074;tests/test_host_plane.pyT020, T026, T095;declared_exclusion.yamlT101, T073, T074; the four T074 test files T103 then T074; the census T025, T104, T015, T016, T057 (the row splits, sotest_web_boundary.pykeeps its own chain). T015's and T074's After gain T104 and T1036021830531,6022291206git 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 unionfc4fa0ff; Copilot5427373153identity, emitted and bounded as openDox-spec's finding schema bounds it (noexcerpt,text,contentorquotekey, 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 moved6018624750gh pr view <n> -R <repo> --json mergeCommit(listed below)src/opendox/lines.py,tests/test_lines.py); the Ruled line gains6023517122:head_sha(a), its own publichead_shaparity-tested againstserve._head_of,serve.pyuntouched; the line split (a),doxbench_defaults.pyuntouched. Folding either private helper is recorded as unscheduled and optional, and is not scheduled6023517122identitymakes 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 changed6018624750; Copilot54332926921eb8e9eb, accepted by the holder at its landing: (a) the pin and landing-order row for T073 names T005 and T095 to T104 as prerequisites, andT095+reads T095 to T104 at the critical path, the lane table and the revision note; (b) the combinedconftest.pyandtest_host_plane.pyrow 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 lines4201056969,4201057311,4201057577; READY note6026651962The ticks, verified
09b8d44aa7a1c4d3f70bc9c3d45a093984f8ed8336bbef79dox-v1.2(tag object58538ff3, on6a9f4902), opensoft/openDox#216a9f4902,c7f75845fc4fa0ff1837ea756023492215); T021's entry records it.Skipped, because already present at the base: T020's and T024's ticks (#1251 item 13) and T004's tick (#1245,
260234b5), all confirmed withgit show <commit>:<tasks.md> | grep.T071 is NOT ticked. Brett's word, "Ratify it (Recommended)" (
#6566023375303), is recorded on T071's entry, but the change's ratification-record PR has not landed (no such PR is open or merged onopensoft/openxFactoryat this writing). The box stays open.Readings the holder accepted (
6026622117), disclosed as the brief requires6016648451) 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; andtest_host_plane.pyreads T020, T026, T095, as W7 gives it with T026 added.declared_exclusion.yamlis NOT added to T100's Files: the holder's file list at6022291206names it for T101 only.contracts/health-finding.md:91(item 8).Other notes on where an item needed a reading
T095+is replaced by T095 to T104 (81 - 1 + 10).Hostheader) and plan 034's T086 (W2, in the rulings) as "plan 034's", because plan 038 now has its own T103.identity: item 5 names T041's.Review and gates
python3 scripts/validate-openspec-cli-pin.py --all, in the clone namedopenxFactory, at691648c6: exit 0,Totals: 113 passed, 1 failed (114 items),0 UNDISPOSITIONED failures. The one failure is the dispositionedadd-chain-attestationfinding, the same onmain.pytest-suitein CI at691648c6, completedSUCCESS(2026-10-06T23:32:38Z to 23:58:56Z).scripts/doc-health.py --single-repo . --as-of 2026-10-07, branch691648c6againstorigin/main0992369ain the same clone: the two reports are byte-identical (sha256ce17aadd6d96e484170e2ec4784e44972e33c7d1a6c65830ea14a1035f2ae976;Findings: 31 critical, 26 error, 69 warning, 20 info. New regressions vs previous report: 0.). So no new error.691648c6: all 14 check runs areSUCCESS(rollupSUCCESS):pytest-suite,merge-master-approval(the red inherited frommainsince Archive add-factory-mcp-conformance: realization #1243 → 92010d3e, packet closed #1252 was cleared by Advance the pinned decision core to fe9a6f5b91886e4f07296dc6a264deb345b1618f #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 twolane-lineruns and SonarCloud.mainhas moved to0992369asince the last merge (543f6ce1). GitHub reports this PRMERGEABLE, and the ruleset is not strict, somainis not merged in again (a merge would restart the 27-minute gate).691648c6(final; review5435686665)4201443690): T041's falsifier cannot verify what T046'shealth list --jsonand T057's HTTP route emit; the review summary adds that the new T095 to T104 collide with plan 034's task numbers cited unqualified atspec.md:662,spec.md:1222andclarify-questions.md:4375988818366): plan-record accuracy, not a bypass, and the T041 placement is the holder's own instruction (item 5). Answered (4201487553) and resolved1 thread, 0 unresolved. The holder ruled both points YES at
6027706377and has them encoded in a THIRD batch, not here: theidentityfalsifier 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.mdspecs/038-opendox-document-tool-self-maintenance/contracts/health-finding.mdWhat is NOT done
openspec/changes/.README.mdis untouched.🤖 Generated with Claude Code
Summary by Sourcery
Record plan 038’s second bookkeeping batch, formalize the health response identity shape, and update repair-slice dependencies and completion records.
Enhancements:
identityfield in the health JSON response contract and associate its response-shape coverage with T041.Chores: