You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
{{ message }}
Repository navigation
T002c: plan 038's third bookkeeping batch, ticks T095 to T105, the identity bound by layer, the single-writer rows and the holder's batch-3 flags (plan 038) - #1263
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:
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 docs: add the D10 hosted-refresh marker (Step C observable) #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.
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.
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.
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/mainc9dfd4f8, 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.
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.
…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>
…837ea7)
tasks.md conflicts resolved to this branch's side: main's plan 038 tree equals the
head this branch started from (1eb8e9e), so only this branch's edits differ.
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>
…entity bound by layer, the single-writer rows and the holder's batch-3 flags (plan 038)
Rulings and landings already posted on #656 or merged, encoded as worded:
the ticks of T072, T095, T096, T098, T099, T100, T101, T103, T104 and T105 and
T021's follow-on; T073's, T015's and T016's Files; the identity response bound
split across T041, T046 and T057; the plan-034 qualifiers; T012's, T022's and
T102's rulings; T042's notes and Files; plan.md's count.
Lane: openxfactory-4
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
This bookkeeping-only PR synchronizes plan 038 with verified merged work and holder rulings: it ticks completed tasks, adds the completed T105 readiness re-measure, and records implementation notes, falsifier refinements, single-writer chains, identity-layer bounds, and updated task metadata without changing requirements or introducing decisions.
File-Level Changes
Change
Details
Files
Records the third bookkeeping batch by marking landed tasks and adding a read-only wave-1 readiness task.
Ticks T095, T096, T098–T101, T103, T104 and T072 with their verified merge commits.
Adds and completes T105, including its readiness results, slice notes, and phase/task-count updates.
Documents revision history and landing evidence without introducing new requirements or decisions.
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!
…T096's follow-on and T071's PR (plan 038)
The holder's ruling 6064169640 resolves Copilot thread 4205521074: T042's text
names full_run and drops 'quote it or'; data-model.md gains one line. The merged
PRs swept since 2026-10-07T01:00Z are ticked, each merge commit read through
GraphQL, and T071's pull request, openxFactory#1261, is named.
Lane: openxfactory-4
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
This revision summary records tests/test_default_profile.py only for T015, but the updated T016 Files section and the plan's single-writer row also assign that file to T016. Name both tasks here so the batch summary matches the bookkeeping it introduces.
The holder's gate at b236fa6c (T002c, plan 038's third bookkeeping batch): every check SUCCESS, no closing references or keywords, 0 unresolved threads, Copilot "Approval recommended" at this head, no openspec/changes/ path. Bookkeeping, so no Arc: line. The writer's flag on #6566023619783 item 2 (T071's record header) is right not to be encoded here: it belongs to T071's own PR, #1261. Landing under plan 038's ruled word (#6566013547504): lane openxfactory-4 lands every PR.
…ommits before it
Lane: openxfactory-4
main moved through #1263, #1270, #1271 and #1267 (renew-resolved-council-
protocol), which touch README.md, docs/, openspec/ and the sweep ledger and not
this change's directory. Section 4 names the new base and the commits since
fc4fa0f; section 6 carries the re-measured numbers (pinned gate 114 passed of
115 items, ledger 235 rows, corpus directories 312 subtests). The doc-health
report is again byte-identical to main alone.
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
…23375303) (#1261)
Lane: openxfactory-4 (openXfactory-4-openDox_extraction)
Refs #656 (stays OPEN).
**THE RATIFICATION RECORD for `realize-doc-health-direction-arc`** (plan 038's T071), the doc_health direction arc's own change. It landed as a draft through #1247 → `51456835` and #1253 → `fc4fa0ff`. No requirement, decision or task text moves: the change has no spec delta (`skip_specs: true`). It lands through the holder's lander in a Rule 6 window; this actor merges nothing.
## The word
RULED by Brett Heap, 2026-10-06 at about 18:59Z, by interactive multi-choice, verbatim *"Ratify it (Recommended)"*, recorded at #656 comment [`6023375303`](#656 (comment)) (created 2026-10-06T19:00:45Z).
The option text he saw read *"I post your word on #656 and land the ratification record (Status: ratified, Ratified by) under a Rule 6 window. T072 can start right away; T074 and T075 then follow in order."*
## The form followed
`cd494e4c` / #1151, "Ratify add-neutral-product-standalone-operability on Brett Heap's word (#656 5815412869)", file for file and field for field. The holder's ruling at #656 [`6023619783`](#656 (comment)) confirms the one choice that differs from the change's as-filed text (below).
## What is ratified, and what the word authorizes
- **Ratified:** the change as landed on `main` at `fc4fa0ff` (#1253, merged 2026-10-06T18:56:42Z). Its change-directory tree, `02d362f6ebcaf49e18aa107f7ce2b3a409ca2275`, is identical at #1253's final head `e4f3f1db` and on current `main`, and the last commit on `main` that touches it is `fc4fa0ff`. Copilot's review at `e4f3f1db` read "Approval recommended", Findings: None.
- **D1–D7 stand as recommended.** `tasks.md` 1.2 provides that the word rules `design.md` § 11's D1–D7 as recommended unless it says otherwise, and the word does not. The record says that this applies 1.2's own rule and does not claim Brett Heap was shown the seven one by one.
- **Authorized:** per the ruling record, the realization in plan 038's order: T072 (opportunistic, ARC-6), then T074 and T075. None of it happens by the word itself.
- **Nothing archives or promotes.** The change stays ACTIVE until its realization is merged and green, and it gates neither release 2's close nor #1144's archive (ARC-Q3 (a)).
## What this PR changes
Six files. None of the changes is requirement or scenario text.
**`openspec/changes/realize-doc-health-direction-arc/proposal.md`**
- `Status: ratified`, with a `Ratified:` citation.
- A qualifier above the filing's "DRAFT. FILING IS NOT RATIFYING" paragraph, which is kept verbatim as the filing's record.
- A `## Ratification record` section.
- A read-at-ratification note after the D1–D7 list.
**`design.md` and `tasks.md`**
- `Status: ratified`, with a `Ratified by:` citation. This is the citation split #1144's record carried.
- `design.md` § 11: the same read-at-ratification note.
- `tasks.md` 1.1 (the filing, citing #1247 → `51456835` and #1253 → `fc4fa0ff`) and 1.2 (this act) are ticked. Boxes go from 0 `[x]` / 23 `[ ]` to **2 `[x]` / 21 `[ ]`**.
- 1.2 keeps its as-filed wording and gains a marked italic note on the one divergence (below), as #1151 did for its own 1.8.
**`.openspec.yaml`**
- `approved_by` / `approved_on` are ADDED after `proposed_on`. `kind`, `id`, `path`, `reason`, `proposed_by` and `proposed_on` do not move.
**New record:** `review/ratification-2026-10-06.md` (`Status: ratified`, `Kind: report`, one `Ratified:` citation).
**`README.md`:** the *Active changes* entry's status, now linking the record.
The sequenced-after ledger row does not move.
**The one divergence from the text as filed.** `tasks.md` 1.2 says the record carries `Status: record`. It carries `Status: ratified` with a `Ratified:` citation, as #1144's record did. `document-lifecycle` sanctions both spellings, the option put to Brett read "(Status: ratified, Ratified by)", and a `Status: record` file trips `record-immutability` (CRITICAL) on any later edit, such as a Copilot fix commit on this PR. Confirmed by the holder at #656 `6023619783`.
## Gate state at `f9f71063`
The tree is `main` at `40d6e5c1` plus this PR's twelve commits (the change itself, five merges of `main` and six re-measurements of the record), with the submodules initialised. After the first head, `main` moved five times: the archive of `add-worker-input-budget` (#1258), then #1266 and #1264, then the archive of `amend-worker-input-budget-dispatch-wording` (#1269), then #1263, #1270, #1271 and #1267 (renew-resolved-council-protocol), then #1272, #1275 (the archive of `correct-naming-families-count`) and #1277 (a bot review-lane repin). They touch `README.md`, `docs/`, the sweep ledger, other changes, the review-lane contracts and workflows and the doc-health and project-repo-schema specs, and not the change directory (its tree is still `02d362f6ebcaf49e18aa107f7ce2b3a409ca2275` on `main`, last commit `fc4fa0ff`). So `main` was merged in, never rebased, and everything below was re-measured. `main` has since moved again, to `b4b9d903` (a new change, `refresh-install-repository-enumerations-opsxfactory-gateway`: its own directory, a README entry and a ledger row). It is not merged here, per the holder's one-merge instruction, and a trial merge with it is clean.
```
OPENSPEC_TELEMETRY=0 openspec validate realize-doc-health-direction-arc --strict → valid (the pinned 1.12.0)
validate-openspec-cli-pin.py --all --strict → exit 0, 0 UNDISPOSITIONED failures
113 passed, 1 failed (114 items); the 1 = the accepted exception, as on main alone
validate-code-surface.py . / validate-target-release.py . → passed
validate-sequenced-after.py . / --ledger-diff → pass; ledger consistent (235 rows), this row unmoved
proposal-support.py . verify realize-doc-health-direction-arc → ok
doc-health.py --single-repo . → 31 critical, 26 error, 69 warning, 19 info
report byte-identical to main alone (same clone kind); 0 findings name this change
doc-health families (1.2's falsifier) → proposal-origin 0 findings, status-validity 0 findings
(negative control: dropping proposal.md's Ratified: line takes ratified-provenance 27 → 28 critical, naming proposal.md)
pytest -m "not postgres" -k "ledger or records or sequenced or openspec" → 615 passed, 3 skipped
pytest sequenced_after code_surface target_release proposal-support scope_globs packet_reference → 866 passed, 311 subtests passed
pytest tests/doc-health → 2157 passed
```
An earlier `tests/doc-health` run showed 8 failures in `test_neutrality_dispatch.py`. They were this actor's own environment, not the tree: an exported `REPO` variable collided with the fake scout worker's `REPO`. With it unset the file gives 25 passed, and the whole directory is green above.
## Copilot
- **First head `0039a47e`:** review `5436306140`, "Approval recommended", Findings: None, 0 threads.
- **Head `739da6e0`** (after the first merge of `main`): review `5440756736`, "Approval recommended", Findings: None, 0 threads.
- **Head `69479c77`** (after the second merge of `main`): review `5459920482`, "Approval recommended", 0 threads.
- **Head `83e3511e`** (after the third merge of `main`): review `5460937374`, "Approval recommended", 0 open findings, 0 threads.
- **Head `b186eb62`** (after the fourth merge of `main`): review `5462168108`, "Needs a closer look", **0 open findings**, 0 threads. Its stated reason is that final approval depends on human validation of the governance authority and the historical provenance assertions. The holder ruled at #656 [`6069024568`](#656 (comment)), item 5, that this is NOT a block, because that authority is Brett Heap's ratify word `6023375303`.
- **Checks at `b186eb62`:** the rollup was SUCCESS with 15 status checks, all SUCCESS, including `merge-master-approval`, `pytest-suite` and SonarCloud Code Analysis. 0 threads unresolved.
- **Head `f89fc853`** (after the fifth merge of `main`): review `5464071466`, "Needs a closer look", **0 open findings**, 0 threads. Its stated reason is that the exact-head checks and the Codex review were then pending, and that final approval also depends on governance provenance, which the holder's ruling at #656 `6069024568`, item 5, covers.
- **Final head `f9f71063`** (a record-only correction of the corpus subtest figure, 312 to 311, which the completed run measured): Copilot requested through the reviewer API after the push. Its result, the checks and the thread count are recorded here once the exact final head has been reviewed.
## Codex
- At `b186eb62`, `@codex review` was posted twice (comments `6067925769` and `6069046343`), and the `chatgpt-codex-connector[bot]` answered both with the usage-limit message (comments `6067927988` and `6069048581`). No Codex review existed at that head.
- At `f89fc853`, `@codex review` (comment `6071059884`) was answered with a review: **Reviewed commit `f89fc853cb`**, "Didn't find any major issues" (comment `6071083487`; summary comment `6071062721`, Code Review completed at 2026-10-08T23:29:24Z).
- At the final head `f9f71063`, `@codex review` was posted once after the push (comment `6071252263`). The bot's reply is recorded here once it arrives. READY needs a Codex "Reviewed commit" at the exact head, or Brett Heap's explicit waiver (#656 `6069024568`, item 4).
## What is NOT done
- No code, pin, gitlink, contract bundle or release tag moves. T072, T074 and T075 are the realization, and none of them starts by this PR.
- Plan 038's `specs/038-…/tasks.md` is not edited here. T071's tick there goes in the holder's own bookkeeping batch.
- Nothing archives or promotes.
**Rule 6:** this PR touches `openspec/changes/` and the README OpenSpec Records block, so it lands in a declared window by the holder, and not by this actor.
🤖 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>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Lane: openxfactory-4 (openXfactory-4-openDox_extraction)
T002c: plan 038's third bookkeeping batch (plan 038)
Bookkeeping: no
Arc:line, and noopenspec/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 asc70bdbd9, 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:e2340bb6, T101 docs: D10 combined acceptance evidence (A–E complete, signed off) #48 →8b0401a1, T098 test step 9 #51 →fc1115d6, T103 docs: check the five predecessor live-pass boxes and doxBench 1.3 (D10 governance) #49 →6f259156, T096 release: contract-v1.28 — the chat-turn request's active_document_path is nullable (G-1) #53 →34e1c1f2, T100 openspec: rebase the doxBench change onto the promoted capability, and record T105/T106 #54 →2a3d8c09, T099 Session draft/consent-instrument-contract: consent-instrument-contract #47 →4aa3070a, T102 Release contract-v1.29 wheel, intent, and worker contracts #52 →e7815ac5, T097 Archive the doxBench predecessor chain (editor-chat task 1.5) #50 →4dab93fc, T022 Record doxBench live refresh dogfood #41 →aefd1091.d616da3e, T072 add-register-edit-lane: fulfilment lane + apply button + watcher #95 →99220883(the arc's first realization).da736090, and T096's openXdox-code#56 →9720925e.6027382308, accepted limit under5988818366; the fix rides T073).New task T105 (R2-INV-P5, read-only, lane 3; holder
6027341795, claimed6027346843): ticked on lane 3's DONE line (2026-10-07T00:28:59Z), its summary6028122920, the maplane-coord-034/r2/R2-INV-P5.md, and the holder's ruling6028138991. 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 (6028364555item 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):RESET_CONFIRMATIONstays byte-identical, its wording may change; Files gaindocs/runtime.md(R2-INV-P5 § T042: its two table arrays move withidentity.TABLES, whichtest_deploy_shape.pyholds);RULED_TABLESis encoded as the map words it.full_run(6064169640, fix-now, resolving Copilot 4205521074): the words "quote it or" are gone from T042, anddata-model.mdgains one line saying the SQL column isfull_runbecause PostgreSQL 16 reservesfull.Files and falsifiers:
tests/test_host_plane.pyand theopendox-snapshot-*farm exclusion scoped to theopendox_specowner; the falsifier gains the farm case (Copilot r4201411760, accepted at docs: add the D10 hosted-refresh marker (Step C observable) #46's landing,6027382308, reply 4201421102). plan.md's conftest andtest_host_plane.pyrows, and the T020, T026 and T095 Files chains, end with T073.tests/test_capability_honesty.pyandtests/test_lens_seed_actions.py(6027633398), with the same-kind enumeration collateral pre-authorized in the minimal way and listed in each PR body, andtests/test_default_profile.py(6023619783item 1, corrected by6026622117item 2), with the chain T015 → T016. plan.md gains two single-writer rows.identitybound is split by layer (6027706377item 1, refining6018624750). T041 narrows to the module's own serialized finding shape; T046 gains it onhealth list --json; T057 gains it on the HTTP Health response; FR-011's coverage row cites all three..gitignoresource check (6026275158item 2); T102's gains the widened no-bypass scan (6026275158item 3);6028364555item 4.6026275158item 1 and6026622117item 1.Qualifiers and counts: "plan 034's" on spec.md (two places) and clarify-questions.md (one place), found by content, nothing else moved (
6027706377item 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
docs/runtime.mdarrays move withidentity.TABLES); the holder's6028364555item 2 words the cause as thefullrename, and cites the same map section.tests/test_default_profile.pyrow says the chain "followsdefault_profile.py's", as6023619783words it; T046 and T057 are not given the file in their own Files lines.6023619783item 2 (T071's record header) is not in this batch's items and is not encoded here.6028364555item 7).Gates
python3 scripts/validate-openspec-cli-pin.py --all --strictat the merged headb236fa6c: exit 0 (the one accepted exception isadd-chain-attestation's disposition, as on main).scripts/doc-health.py --single-repo .) atb236fa6cagainstorigin/mainc9dfd4f8, same clone: identical reports, 31 critical, 26 error, 69 warning, 19 info, zero differences after SHA normalization.python -m pytest tests/ -q -m "not postgres" -n 8at3e6feb6b: 9206 passed, 7 skipped, 1 failed. The failure istests/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 onorigin/mainin the same clone. Later commits change only spec text and chain records.b236fa6c: every check SUCCESS (rollup SUCCESS, read through GraphQL), includingpytest-suite,doc-health-py314,openspec-cli-pinand SonarCloud. The head adds only the merge oforigin/mainc9dfd4f8(the archive of amend-worker-input-budget-dispatch-wording, Archive amend-worker-input-budget-dispatch-wording: promote the reworded rationale sentence onto doc-health #1269) toc675894d, whose rollup was SUCCESS too.a9fc7e7btwo threads (4205521074 → fixed in4263d665on6064169640; 4205521173 → fixed inc3409c03). At3e6feb6btwo threads (4221525148, the PR description, updated; 4221525277, the T020, T026 and T095 chains, fixed inc675894d). Atc675894dand at the headb236fa6c: "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