Repository navigation
Correct the stale 124-of-143 current-corpus count to 129 of 183 (D-13, RULED 5815412869 C1) - #1152
Conversation
D-13 of the owed-acts register, RULED on #656 comment 5815412869 (item 3, C1, option a) and claimed at comment 5815604830. The current-corpus claim "124 of this corpus's 143 [archived rows carry a later moved_on]" goes stale by construction every time another change archives, so the figure is re-derived when the commit is made rather than reused from a banked number. Re-derived two independent ways at main dd2466a: 183 archived directories on disk, 129 of them with a ledger moved_on later than their directory date, 0 predating (the one gated direction). Method 1 uses the repository's own scripts/sequenced_after.py (archive_dates() and the ledger). Method 2 is a from-scratch regex parse of the same two sources and shares no code with method 1. The two agreed before this commit was made. This renumbers the 6 live sites, which are undated and present-tense "current corpus" claims. Three are in scripts/validate-sequenced-after.py: line 42 (the module docstring), line 402 (the validate_corpus comment) and line 739 (the --strict-archive-dates help text). Three are test docstrings in tests/sequenced_after/test_sweep.py: lines 2015 and 2017 (one docstring), line 2049 and line 2108. Every DATED site is left as it was. That covers the two "before it was made a gate" 143s in the validator, the whole MOVEMENT LOG docstring of test_the_LIVE_corpus_and_the_LEDGER_agree_row_by_row() (lines 232-1254, every entry pinned to a historical sha) and scripts/sequenced_after.py's own dated commentary. No site sits on an assert line, and none of the renumbered text is compared by a test: prose only. Verified: scripts/validate-sequenced-after.py . passes, and pytest tests/sequenced_after is green after the rewrite. Lane: openxfactory-4 Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Reviewer's guide (collapsed on small PRs)Reviewer's GuideThis prose-only PR corrects six stale current-corpus descriptions from 124 of 143 to the independently re-derived 129 of 183, without changing executable validation or test behavior. Reviewers should verify that only undated present-tense claims changed and that historical, date-pinned references remain intact. 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
Changes are prose-only, focused, and have no unresolved blocking issues.
Review effort: Lite
Findings: None
What changed in this PR
Updates stale current-corpus counts from 124/143 to 129/183 in validator documentation and test descriptions.
Changes:
- Refreshes validator documentation and CLI help text.
- Updates related test docstrings.
- Preserves dated historical counts and executable behavior.
| File | Description |
|---|---|
scripts/validate-sequenced-after.py |
Updates validator documentation and CLI help text. |
tests/sequenced_after/test_sweep.py |
Updates related test docstrings. |
💡 Add a code-review agent skill or configure MCP servers for context-aware, tailored reviews. Learn more in the docs.
|
|
READY #1152 @071338ac Lane: openxfactory-4 |
|
Lane: openxfactory-4 (openXfactory-4-openDox_extraction) LANDING — lane openxfactory-4, session faabad8b-8c31-4958-abd5-b35bdc9cd282@Eagle, 2026-09-24T15:41:26Z, PR #1152 into opensoft/openxFactory main |
Copilot review 5306959435 at 85d6de4 raised five findings. Each is fixed: - T084 now runs after T073, which is serve.py's single-writer order. The same audit found two more gaps: T016 now runs after T012, the last serve.py edit in Lane A, and T038 after T022 for cli.py. Every single-writer chain in plan.md is now ordered in the After graph. - plan.md's phase-2 graph shows T050 -> T051. T025 and T051 lose the [P] marker, because each depends on an earlier task. - quickstart.md: the prerequisites name R1Q12, and T095 is blocked by it. Step 1 now asserts that no identity broker is installed and no database listens, and step 2 asserts that neither repository holds a model binding. - research.md R0 checks out all seven repositories at the commits its table names. The in-flight table is also brought up to date. C1 landed as #1152, C3's first PR as #1153, C3's second PR is openXdox-code#28, and C4 is #1154. A stale "T004's amendments" is corrected to T007. Lane: openxfactory-4 Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
…d-neutral-product-standalone-operability (#1155) Lane: openxfactory-4 (openXfactory-4-openDox_extraction) ## What this is This PR is the Speckit plan for **release 1, "standalone operation" (phases 1–3)**, of the ratified OpenSpec change `add-neutral-product-standalone-operability` (#1144). It encodes **Brett Heap's answers to the eleven questions that blocked phase 1**. It adds planning only: no code, no pin, and no OpenSpec change. It edits no file of #1144. Besides the feature directory, it changes one line: an entry in the README's Documentation index that links the feature's seven documents. Its authority comes from two comments on #656: - The ratification word, comment `5815412869`: *"ratify #1144, land the follow-ons, (a) on C1–C5"*. - The answers, comment `5817152735` (2026-09-24T15:31:46Z): *"(a) on all eleven, (d) on R1Q6"*. The ratification record landed as #1151 → `cd494e4c`. This branch is cut from it, and it merges `main` in at `1d14fee6`. The feature is `specs/034-opendox-standalone-operation/`: | file | what it holds | |---|---| | `spec.md` | User stories US1 (it runs), US2 (useful alone), US3 (installs) and US4 (the governed host unchanged). FR-001–FR-012, each mapped to a #1144 requirement and its boxes. § Clarifications, with the eleven answers as `Q: … → A: …`. The term-by-term definition of the AT-R1 acceptance test. | | `plan.md` | Technical context. Constitution Check I–VII, where the one recorded deviation is now resolved for phase 1. The five target repositories. Where each box closes. The dependency graph and the single-writer surfaces. The pin and landing order (9.5). The trailer and Rule 6 rules. **§ Ruled answers and § Ruling needed (RN-1).** In-flight overlaps. | | `research.md` | Every measurement, with the command that reproduces it (`W=$(mktemp -d)`; no host paths). Eight non-normative corrections to #1144 (R16). | | `tasks.md` | 87 tasks, T001–T098. Each task carries its repository, the boxes it realizes, its falsifier, and its `Blocked by:`, `Ruled:` and `After:` lines. **T007** records the ruled amendments in #1144, and **T008** raises the `doc_health` direction arc. **T009** and **T069** open phases 2 and 3. **§ Ruled amendments**. Box accounting (69 of 124). **The phase-1 writer slices, in parallel groups G1–G6.** | | `quickstart.md` | The AT-R1 procedure: the HTTP half (T095) and the browser half (T096). | | `clarify-questions.md` | **R1Q1–R1Q23: 11 ANSWERED, 12 OPEN** | | `checklists/requirements.md` | The spec-quality checklist. Its two open items are the constitution's own gates. | ## The answers (`#656` `5817152735`), and where they go | question | answer | carried out by | #1144 amendment (T007) | |---|---|---|---| | R1Q22 | (a) the manifest records arrival only | every carved-file task; T038 corrects `runtime/cli.py:17-19` | an 11.1 addendum (batch A) | | R1Q1 | (a) handler-contribution facet | T010, T011, T045; T084 and T086 in phase 3 | 2.2 and design.md § D4 addenda (A) | | R1Q2 | (a) named composition tests join 11.1's surfaces | T045, T094 (`test_extension_point_parity.py`) | 11.1 and F11.1 widened (A) | | R1Q3 | (a), with (i) and (ii) | T016, T022 | F3.1 line 2 and 3.2 (A); **(ii) is RN-1** | | R1Q4 | (a) openDox's own verbs; the host asserts | T015, T038, T046 | none | | R1Q5 | (a) `RuntimeSubcommand` via `SUBCOMMAND_EXTENSIONS`, with the `opendox-runtime` alias | T038, T042 | a 10.1 addendum (A) | | R1Q6 | (d) a declared exclusion with its count and its reason | T041, T043, T044; T008 (the direction arc) | F9.1 for openXdox-code, and 9.4 (B) | | R1Q7 | (a) a reviewed respelling-only allow-list | T043, T059, T086 | F5.2 and 12.5's falsifier (C) | | R1Q8 | (a) `tests_runtime/` included, with a DB service in the required job | T036 | none (F9.1 unchanged) | | R1Q9 | (a) `list_documents` in phase 1 | T025, T046 | 4.3's "four" (A) | | R1Q20 | (a) bookkeeping carries no trailer | T091, and this PR | an 11.0 addendum (A) | Each T007 batch is its own bookkeeping PR. Each lands under a Rule 6 window, with no `Arc:` trailer, before the checkpoint that runs the amended falsifier. ## RULING NEEDED **RN-1: requirement 3's fourth scenario, against R1Q3 (ii).** The scenario reads *"the registered profile replaces the default for that process"*, unconditionally. As ruled, (ii) refuses a host registration made after a parser or server was built from the default. The recommendation is (a): the scenario's WHEN gains *"before the product's parser or server has been built from the default"*, plus a scenario for the refusal. RN-1 holds no task, because the after-build refusal is today's `AlreadyRegistered` (plan.md § "Ruling needed"). ## Still open (phases 2–3, and process) - R1Q10–R1Q19 and R1Q21. Until they are answered, phases 2 and 3 are PROVISIONAL, and they authorize no implementation. - **R1Q23 is new**, raised by R1Q6 (d). Four of 5.4a's six generator suites need `doc_health`, and F5.2 does not provide it. R1Q23 asks how F5.2 runs. It blocks T059 and T063, not phase 1. - A watch item for the archive: under R1Q6 (d), requirement 9 stays an OPEN EXTRACTION for openXdox-code until the direction arc lands. ## Phase-1 fan-out (tasks.md § "Phase 1 writer slices") Before any slice runs, the holder runs T003 (ARC_BASE) and T005 (the re-measure), then T006 (round 1a's analyze), and claims the slice (T002). The groups then run in order: - **G1**: P1-A (route seam), P1-B (default profile), P1-C (home-corpus seam) and P1-E (openxFactory reaches). - **G2**: P1-D (authoring, default adapter) and P1-H (console script). - **G3**: P1-F (sweep and nine-file repair), then P1-G (whole suite in CI). - **G4**: P1-R (the openDox root pin). - **G5**: P1-I (the openXdox pin and residue), then P1-J (openXdox green alone). - **G6**: P1-K (the consumer pins and host wiring), then P1-L (T017, T018), then the T049 checkpoint. T049 also waits on T007's batches A and B, and on RN-1. A slice is one writer and one claim in one repository. Its tasks land in their `After:` order, one PR each unless a `Lands with:` line joins them. Each slice's repository, files, dependencies, falsifier and model (Opus or Sonnet) are in the table in tasks.md. ## Copilot, round 1 (review `5306611493` at `437ca764`) All five threads were answered and resolved at `85d6de45`: - **T031/T036 cycle.** T031 is now `After: T035`, and it co-lands in T036's PR. - **T040/T047 cycle, and the same in phases 2 and 3.** Each phase's pin advance is split into a root-pin task (T039, T062, T087) and a consumer-pin task (T047, T064, T094). - **SC-006.** It now reads 65 of 69 at release-1 close. - **T003.** It is no longer blocked, because R1Q20 is ruled. - **The checklist.** Its repository item is narrowed to realization tasks. ## Copilot, round 2 (review `5306959435` at `85d6de45`) All five threads were answered and resolved at `d3a33165`: - **T084 after T073.** This is `serve.py`'s single-writer order. The same audit also put T016 after T012 and T038 after T022. All six single-writer chains in plan.md are now ordered in the `After:` graph. - **The phase-2 graph** shows T050 → T051. T025 and T051 lose `[P]`. - **The quickstart's prerequisites** name R1Q12, and so does T095's `Blocked by:` line. - **The quickstart's step 1** now asserts that there is no identity broker and that no database listens. Step 2 asserts that neither repository holds a model binding. - **R0** checks out all seven repositories at the commits its table names. ## Copilot, round 3 (review `5307043972` at `d3a33165`) Both inline threads were answered and resolved at `701a4a1a`, and the three "previously missed" items were answered in a PR comment: - **The constitution's workflow gate.** Phases 2 and 3 are now PROVISIONAL. They authorize no implementation until each is re-planned on its answers and re-analyzed; since round 5 that is done by their round tasks, T009 and T069. Phase 1, the only phase the plan authorizes, has every material ambiguity resolved. - **spec.md's catalog edge case** now separates the behaviour before T085 from the behaviour after it. - **The acceptance graph** is serial: T095 → T096 → T097. - **T017 and T093** run after each phase's openxFactory landing. - **T081** runs after T085, whose validators serve its catalog route. ## Copilot, round 4 (review `5307117274` at `701a4a1a`) Both inline threads were answered and resolved at `0a5acd7c`, and the three "previously missed" items were answered in a PR comment: - **RN-1 against phase 1's close.** RN-1 now holds T049. Requirement 3 is not reported as realized until RN-1 is ruled and T016 matches the ruling. - **T076 after T087.** The README documents the command the root pins. - **T034 after T032, T047 after T007's batch A, and T059 after T007's batch C.** The same audit ordered every arrow in the plan's graph against the `After:` graph. ## Copilot, round 5 (review `5307230690` at `0a5acd7c`) Both inline threads were answered and resolved at `0ad046ba`, and the two "previously missed" items were answered in a PR comment: - **T006 waited on the open-ended T004.** T004 is now round 1a, and it is DONE. T006 is round 1a's analyze, after T003, T004 and T005. Phases 2 and 3 open with their own round tasks, T009 and T069. - **The quickstart's readiness probe.** It first checks that the port is free, and on every poll it checks that the launched PID is alive. - **Constitution row V.** It records `main`'s baseline and the accepted `add-chain-attestation` disposition, and notes that the enforced `openspec-cli-pin` gate exits 0. - **T053's trailer policy.** openDox-spec is a sixth repository of the arc only if T053 applies, and T091 then covers it. - **The same audit:** - co-landings now use a `Lands with:` line; - T026 loses `[P]`; - `serve.py`'s single-writer chain starts at T010. ## Copilot, round 6 (review `5307694574` at `0ad046ba`) Its one thread was answered and resolved at `2a57501c`: - **FR-006** now carries requirement 9's own clause for a check that runs less than the whole suite. openXdox-code declares its `doc_health` exclusion with a count and a reason, and reports it as an open extraction. - **Every other whole-suite claim** carries the same qualifier. - **9.2's close moves to phase 3**, where T086 takes the ratchet to `(0, 0)`. ## Copilot, round 7 (review `5307775377` at `2a57501c`: Findings: None) Its three "previously missed" items were answered in a PR comment and are addressed at `abb2344e`: - **T003** records openDox-spec's ARC_BASE unconditionally. - **T093 is the interim F11.1 procedure.** Each phase runs it as its own task (T018, T065 and T098), and each checkpoint depends on its run. - **Constitution row IV** records the README-index reading that every earlier Speckit feature follows. ## Copilot, round 8 (review `5307865432` at `abb2344e`) Its one thread was answered and resolved at `0a859498`: - **The README document index** (Principle IV). The README's Documentation section now carries an entry for feature 034, beside the openDox carve documents, and it links all seven documents. The entry sits outside the OpenSpec Records block, and Constitution row IV records it. ## Copilot, round 9 (review `5307941798` at `0a859498`: Findings: None) Its two "previously missed" items were answered in a PR comment and are addressed at `1522c4c7`: - **T095 against T036's PostgreSQL service.** AT-R1's HTTP half is now a harness, `acceptance/at_r1_http.py`, run by its own `acceptance` job with no database service. It is not a pytest module, so it changes neither openDox-code's `testpaths` (which T036 sets in phase 1) nor F9.1, and FR-006's "no exclusion" still holds. - **T072's falsifier** no longer names the procfs path, and the quickstart's null-device redirects are gone. The host-path scan now covers the system roots as well. `2e4f3315` then merges `main` in at `1d14fee6`. ## Copilot, round 10 (review `5308148911` at `2e4f3315`) Its two threads were answered and resolved at `34b7b2ca`: - **The harness and T036.** The plan and T095 now say the harness changes neither `testpaths`, which T036 sets in phase 1, nor F9.1. - **T073 after T055.** T073 reached T055 only through phase 2's checkpoint, and it now names T055 directly. The seven other single-writer pairs that relied on a transitive path are direct edges as well, so all 19 consecutive pairs of the six chains are direct. ## Copilot, round 11 (review `5308305662` at `34b7b2ca`: Findings: None) Its one "previously missed" item was answered in a PR comment and is addressed at `bc1bd20b`: - **T095 after T076.** AT-R1 runs the root README's documented command, so T095 now waits for T076, the task that writes that README. So does T089, which leaves no phase-3 task outside phase 3's checkpoint. - **The same check on every phase.** T049 now names T017, as the P1-L row already said. T017's `After:` line no longer lists its phase-2 and phase-3 re-runs. ## Copilot, round 12 (review `5308403738` at `bc1bd20b`: Findings: None) Its one "previously missed" item was answered in a PR comment and is addressed at `a86ced35`: - **T096 had no repository tag and no falsifier.** It now carries `[oxF]`, where its evidence lands, and names the oracle's verdict. The same check over every task found eight more gaps (T074, T077, T083, T090–T093), and each now names its repository and its falsifier. The checklist item names these classes. ## Copilot, round 13 (review `5308511992` at `a86ced35`) Its one thread was answered and resolved at `49eb53ee`: - **macOS could not run F13.1.** The plan's Target Platform now names Linux alone. 13.1 checks the "no TCP port" invariant in the Linux kernel's socket table, and no ratified falsifier covers macOS. Adding macOS would need a Darwin leg for 13.1's check and F13.1, which is an amendment to #1144 and so needs a ruling. - From the same pass: T036 now comes after T038, because both edit openDox-code's `pyproject.toml`, and T046's range skips two undefined ids. ## Copilot, round 14 (review `5308583172` at `49eb53ee`) Its one thread was answered and resolved at `e927069e`: - **T092's note versus "no field changes".** T092 and its falsifier now state F11.1's own rule. With every `edits[].note` removed, the manifest is unchanged, and an existing note may only be extended. - From the same pass: three checklist claims are now exact (FR-011 and FR-012, SC-006 and SC-007, and the edge cases). ## Copilot, round 15 (review `5308662086` at `e927069e`: Findings: None) Its one "previously missed" item was answered in a PR comment and is addressed at `9b86b920`: - **R4 and R10 ran `ci_coverage.py` with the host's `python3`.** They now use the `od` and `ox` venvs, and so do R5's, R6's and R9's runs. From the same pass, T096 now also records T095's `acceptance` job for SC-004, and spec.md's `Status` header reads `Draft`, as the sibling features' headers do. ## Copilot, round 16 (review `5308754464` at `9b86b920`) Its one thread and its one "previously missed" item were answered and are addressed at `4d3c605b`: - **US4's note condition** now admits a note added where an entry had none, as T092 and F11.1 do. - **T053's condition** is now "R1Q11 (a) or R1Q12 (b)" in the plan's graph, its phase-2 lanes and Constitution row VI, as T053 itself says. ## Copilot, round 17 (review `5308830806` at `4d3c605b`) **Findings: None**, and nothing listed as previously missed. All 23 inline threads are resolved. ## The adversarial sweep (at `4d3c605b`), folded in at `1cb01e4c` Round 17 was clean, and every check was green at `4d3c605b`. Each earlier round had still found one or two new cross-document gaps, so a read-only Opus reviewer swept all seven files, #1144 and the measured code. It reported 28 MUST and 23 NICE findings. Every MUST was verified against the text, the packet or the code, and fixed; the exact NICEs were fixed too. The PR comment at `1cb01e4c` lists them. The phase-1 ones were: - T036 gives `validate` the `.[runtime,test]` install as well as its PostgreSQL service. Without it, `tests_runtime/conftest.py` fails every runtime case under `CI`. - T043 waits for C3's PR 2, because `tests/test_snapshot.py` fails on the validator lookup, not on `doc_health`. - openxFactory's `test_serve_column_split.py` is the second named composition test. - A slice's tasks land in `After:` order, and T032 is the join of every lane. - Batch D would carry RN-1's scenario text, only on Brett's ruling. ## Copilot, rounds 18–24 | round | review | head | result | addressed at | |---|---|---|---|---| | 18 | `5309539162` | `9f799f20` | 1 thread: show T026 → T025 in the graph | `902da25b`: the single-writer table lists every phase-1 shared file (`workbench.py`, openDox-code `pyproject.toml`, `tests/test_authoring_seam.py`) | | 19 | `5309640972` | `902da25b` | 1 thread (how T035's six modules move) and 1 previously missed (`Status:` headers) | `224046c5`: each module is rewritten or re-landed by T042, and all seven files carry `Status: draft` | | 20 | `5309742955` | `224046c5` | 1 thread: T049 must accept the openxFactory destination | `53a85ed9` | | 21 | `5310503144` | `53a85ed9` | 1 thread (T006's feature context) and 1 previously missed (row V's base) | `09e81dc3`: `SPECIFY_FEATURE_DIRECTORY` and the prerequisite check; the gate is re-run on `main` at `138a4722` | | 22 | `5310581314` | `09e81dc3` | 1 thread (the T043/T061 contingency cycle) and 2 previously missed (the outline-model route, openXdox-spec) | `02b1aa30`: the contingency is caught by T005 before phase 1; openXdox-spec is a conditional seventh repository | | 23 | `5310647715` | `02b1aa30` | **Findings: None**, nothing previously missed | `243e460f`: a self-check found that T044 must re-pin openXdox's floors when a file joins the exclusion | | 24 | `5310714316` | `243e460f` | **Findings: None**, nothing previously missed | — (the head) | ## Validation (head `243e460f`) | gate | result | |---|---| | `OPENSPEC_TELEMETRY=0 openspec validate --all --strict` | `Totals: 110 passed, 1 failed (111 items)` at the head, and the same on `main` itself at `138a4722`, which the branch merges. The one failure is `add-chain-attestation`'s ratified disposition. | | `python3 scripts/validate-openspec-cli-pin.py --all` | exit 0; `every target validated --strict with 0 UNDISPOSITIONED failures` | | the `After:` graph in tasks.md, checked by DFS | no cycle; the same check reports the three pin-advance cycles at `437ca764` | | plan.md's nine single-writer chains, each consecutive pair checked against the `After:` graph | 0 gaps; all 22 pairs are direct `After:` edges | | the 50 arrows in plan.md's graph and tasks.md's Dependencies, each checked against the `After:` graph | 0 mismatches (6 at `d3a33165`) | | every realization task outside Phase 0 names its repository and its falsifier; no `Lands with:` pair names each other on `After:` | 0 gaps | | every task of each phase before its checkpoint (T049, T063, T089), a `Lands with:` pair counting as one landing | 0 gaps; T048, the holder's F4 re-measure, follows T049 by design | | phase gates: every phase-1 task after T006, every phase-2 task after T009, every phase-3 task after T069 | 0 missing | | root pins T039, T062, T087: every openDox-code task of their phase an ancestor (a `Lands with:` pair counts as one landing) | 0 missing | | checkpoints T049, T063, T089 after their interim F11.1 runs T018, T065, T098 | all three | | question headers against the tasks' `Blocked by:`/`Ruled:` lines | 23 headers, 0 mismatches | | box table | 69 release-1 boxes, each naming defined tasks | | host-absolute path scan (home, scratch and system roots) and closing-keyword scan (files and commit messages) | 0 hits | ## Process - **No Rule 6 window is needed.** This PR touches no `openspec/changes/` directory and not the README's OpenSpec Records block: its one README line is in the Documentation index. T007's batches and T097's ticks will each need a window. - **No `Arc:` trailer.** This PR is bookkeeping, and R1Q20 (a) is now ruled. - **Sibling reads (Rule 1).** - #656: no claim on the release-1 planning object. - `gh pr list -R opensoft/openxFactory --state all --search 034-opendox`: only #1144. - `specs/034-*`: absent on `main`. - **Lane 4's in-flight acts have all landed** (plan.md § "In-flight overlaps"). - C1 landed as #1152 → `9afea8d7`. - C3's PR 1 landed as #1153 → `1d14fee6`, and its PR 2 as openXdox-code#28 → `e28930bf`. C3 overlaps 7.3 (T061) and the openXdox pin (T047). T061's `After:` condition on PR 2 is now met. - C3's openxFactory openXdox pin bump landed as #1157 → `1edbb3dd`, and C4's runbook as #1154 → `138a4722`. T090 follows the runbook. - **Persisted tools.** Everything is in `opensoft/brett-wip`, under `handoffs/xFactory/attachments/lane-opendox/r1plan/tools/`: - the four measurement scripts and the shim, at `011b1586`; - the plan-consistency checks (`qmap.py`, `qcheck.py`, `depcheck.py`, `chaincheck.py`, `chaindirect.py`, `arrowcheck.py`, `phasecover.py` and `sharedfiles.py`), to re-run after every re-plan. 🤖 Generated with [Claude Code](https://claude.com/claude-code) Lane: openxfactory-4 Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>



Lane: openxfactory-4 (openXfactory-4-openDox_extraction)
What this is
This is D-13 of the owed-acts register. RULED at #656 comment 5815412869 (item 3, C1, option (a): "correct the stale '124 of 143' current-corpus count (D-13) to the figure re-derived at authoring time") and claimed at 5815604830.
The present-tense claim "124 of this corpus's 143 [archived rows carry a later
moved_on]" goes stale by construction every time another change archives. So the figure is derived when the commit is made.The figure: 129 of 183, at
maindd2466adIt was derived two independent ways, and the build refuses (exit 3) if they disagree:
moved_onscripts/sequenced_after.py(archive_dates()+ the ledger)corpus-ledger.yamlandopenspec/changes/archive/(no shared code)openspec/changes/archive/holds 183 directories. The register's own figure (128/172), the helper's (129/180 at2e222d98) and a first read today (129/182 at94b6f7f1) have all rotted since.#1149's archive landed in between.The six live sites
All six are undated, present-tense "current corpus" claims. The change is prose only: no site is on an
assertline, and no test compares the renumbered text.scripts/validate-sequenced-after.pyscripts/validate-sequenced-after.pyvalidate_corpuscommentscripts/validate-sequenced-after.py--strict-archive-dateshelp texttests/sequenced_after/test_sweep.pytest_an_UNMOVED_archived_row_is_NOT_RESTAMPED_by_the_new_ruledocstringtests/sequenced_after/test_sweep.pytest_a_LATER_moved_on_is_NOT_a_finding_by_defaultdocstringtests/sequenced_after/test_sweep.pytest_STRICT_ARCHIVE_DATES_asks_for_the_STRONGER_readingdocstringLeft alone, because they are dated:
143s (lines 36 and 396);test_the_LIVE_corpus_and_the_LEDGER_agree_row_by_row()(lines 232–1254, every entry pinned to a historical sha). It is located by function name, not by line range;scripts/sequenced_after.py's own "as measured 2026-09-18" commentary.The build refuses (exit 4) if any site is missing or duplicated, if one sits on an assert line, or if an unexpected undated
124/143appears in either file.If main gains an archive before this lands
mainhas since moved tocd494e4c(#1151, which touched no archive directory and not the ledger). Re-derived there, both methods still agree on 129 of 183. If an archive lands, the total moves by one. The build is re-runnable:d13-build.shre-derives the figure at anymain.Touches
scripts/validate-sequenced-after.py,tests/sequenced_after/test_sweep.py(+7 / −7). Nothing underopenspec/changes/, and not the README OpenSpec Records block, so no Rule 6 landing window. Sibling search at build time: none of the open PRs (#518, #594, #1138) touches either file.Measured (local, same-kind full clones at
…/openxFactory, pinned CI lock, pinned OpenSpec CLI 1.12.0, pinned decision coreb21f0100)maindd2466adscripts/validate-sequenced-after.py .pytest tests/sequenced_after -qverify-openxwallet-pin,validate-clearing-dispatch,verify-openxdox-pin,verify-opendox-pin,validate-release-tag-gate,validate-signed-execution-chain --require-pinned-wallet-vocabulary,wallet-yaml-syntax-gate,validate-openxwallet,validate-factory-identity,validate-openspec-cli-pin --all --no-cache,validate-openreposhape-pin,validate-carve-manifest)validate-former-id-arrival.py --base dd2466ad --head HEADopenxdox-consumer-gatepin suitesopenxdox-consumer-gatetests/ideation-dashboardpytest-suitein CI (tests/ -m "not postgres", the required check)main's test tree, from #1151's run; #1151 touched no test)pytest-suitelocally, per test caseBoth local full runs collected the same 8446 test cases, with none unique to either side. The six cases whose outcome differs are environment-bound, and these seven prose lines do not reach them:
tests/doc-health/test_pin_reachability.py, which skips or fails when a local clone cannot consult the retention ref namespace;tests/snapshot_equivalence/test_snapshot_equivalence.py::test_a_prefix_whose_path_cannot_be_resolved_is_replaced_not_raised_on, which passed on the branch run.Both runs share one failure:
tests/hermes_runtime_contracts/test_validator_cli.py::test_release_mode_field_is_preserved_on_the_real_repository[--require-realization-realization]. It is a subprocess timeout that occurred while five full suites ran at once. CI is free of all of that, and it gives the same triple on both sides.Summary by Sourcery
Bug Fixes:
🤖 Generated with Claude Code