Skip to content

Correct the stale 124-of-143 current-corpus count to 129 of 183 (D-13, RULED 5815412869 C1) - #1152

Merged
brettheap merged 1 commit into
mainfrom
fix/sequenced-after-stale-count
Sep 24, 2026
Merged

brettheap merged 1 commit into
mainfrom
fix/sequenced-after-stale-count

Conversation

@brettheap

@brettheap brettheap commented Sep 24, 2026 •

Copy link
Copy Markdown
Contributor

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 main dd2466ad

It was derived two independent ways, and the build refuses (exit 3) if they disagree:

method archived later moved_on equal predating
the repository's own scripts/sequenced_after.py (archive_dates() + the ledger) 183 129 54 0
a from-scratch regex parse of corpus-ledger.yaml and openspec/changes/archive/ (no shared code) 183 129 54 0

openspec/changes/archive/ holds 183 directories. The register's own figure (128/172), the helper's (129/180 at 2e222d98) and a first read today (129/182 at 94b6f7f1) 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 assert line, and no test compares the renumbered text.

file line where
scripts/validate-sequenced-after.py 42 module docstring
scripts/validate-sequenced-after.py 402 the validate_corpus comment
scripts/validate-sequenced-after.py 739 --strict-archive-dates help text
tests/sequenced_after/test_sweep.py 2015, 2017 test_an_UNMOVED_archived_row_is_NOT_RESTAMPED_by_the_new_rule docstring
tests/sequenced_after/test_sweep.py 2049 test_a_LATER_moved_on_is_NOT_a_finding_by_default docstring
tests/sequenced_after/test_sweep.py 2108 test_STRICT_ARCHIVE_DATES_asks_for_the_STRONGER_reading docstring

Left alone, because they are dated:

  • the validator's two "before it was made a gate" 143s (lines 36 and 396);
  • 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). 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/143 appears in either file.

If main gains an archive before this lands

main has since moved to cd494e4c (#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.sh re-derives the figure at any main.

Touches

scripts/validate-sequenced-after.py, tests/sequenced_after/test_sweep.py (+7 / −7). Nothing under openspec/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 core b21f0100)

gate main dd2466ad this branch
scripts/validate-sequenced-after.py . passes passes
pytest tests/sequenced_after -q 286 passed 286 passed
the PR gates' scripts (verify-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) all rc=0 all rc=0
validate-former-id-arrival.py --base dd2466ad --head HEAD — passed
openxdox-consumer-gate pin suites 105 / 105 / 0, HOLDS 105 / 105 / 0, HOLDS
openxdox-consumer-gate tests/ideation-dashboard 1137 / 1137 / 0, HOLDS 1137 / 1137 / 0, HOLDS
pytest-suite in CI (tests/ -m "not postgres", the required check) 8857 / 8851 / 6, freshness and vector replay passed (main's test tree, from #1151's run; #1151 touched no test) 8857 / 8851 / 6, freshness and vector replay passed (job 107683353404)
pytest-suite locally, per test case 8435 passed, 8 skipped, 3 failed 8435 passed, 10 skipped, 1 failed

Both 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:

  • five are in tests/doc-health/test_pin_reachability.py, which skips or fails when a local clone cannot consult the retention ref namespace;
  • one is 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:

  • Update all live current-corpus references from the stale 124-of-143 figure to the re-derived 129-of-183 figure.

🤖 Generated with Claude Code

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>
Copilot AI lite review requested due to automatic review settings September 24, 2026 14:40
@sourcery-ai

sourcery-ai Bot commented Sep 24, 2026 •

Copy link
Copy Markdown
Reviewer's guide (collapsed on small PRs)

Reviewer's Guide

This 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

Change Details Files
Refresh stale current-corpus statistics in validator documentation and test descriptions.
  • Replace 124-of-143 references with the re-derived 129-of-183 figure in three validator prose sites.
  • Update four corresponding test docstrings while preserving test logic and assertions.
scripts/validate-sequenced-after.py
tests/sequenced_after/test_sweep.py
Keep the corpus-count correction limited to undated present-tense prose.
  • Leave historically dated 143 references and movement-log records unchanged.
  • Make no changes to validation behavior, test execution, OpenSpec records, or README content.
scripts/validate-sequenced-after.py
tests/sequenced_after/test_sweep.py

Tips and commands

Interacting with Sourcery

  • 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!

Customizing Your Experience

Access your dashboard to:

  • Enable or disable review features such as the Sourcery-generated pull request
    summary, the reviewer's guide, and others.
  • Change the review language.
  • Add, remove or edit custom review instructions.
  • Adjust other review settings.

Getting Help

Copilot AI left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

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.

@sonarqubecloud

Copy link
Copy Markdown

@brettheap
brettheap marked this pull request as ready for review September 24, 2026 15:05

@sourcery-ai sourcery-ai Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Hey - I've reviewed your changes and they look great!

Sourcery assessment

Approved.


Sourcery is free for open source - if you like our reviews please consider sharing them ✨

@brettheap

Copy link
Copy Markdown
Contributor Author

READY #1152 @071338ac

Lane: openxfactory-4

@brettheap

Copy link
Copy Markdown
Contributor Author

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

@brettheap
brettheap merged commit 9afea8d into main Sep 24, 2026
17 checks passed
@brettheap

Copy link
Copy Markdown
Contributor Author

Lane: openxfactory-4 (openXfactory-4-openDox_extraction)

LANDED — lane openxfactory-4, 2026-09-24T15:41:41Z, PR #1152 → 9afea8d (opensoft/openxFactory main; squash)

brettheap added a commit that referenced this pull request Sep 24, 2026
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>
brettheap added a commit that referenced this pull request Sep 25, 2026
…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>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants