Skip to content

Gate phase 1 of plan 034: ARC_BASE, the re-measure and analyze round 1a (T003, T005, T006) - #1167

Merged
brettheap merged 5 commits into
mainfrom
034-opendox-phase1-gate
Sep 26, 2026
Merged

brettheap merged 5 commits into
mainfrom
034-opendox-phase1-gate

Conversation

@brettheap

@brettheap brettheap commented Sep 25, 2026 •

Copy link
Copy Markdown
Contributor

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

What this is

Phase 1's gate for plan 034 (#1155 → c415c3d1): T003, T005 and T006, as
one bookkeeping PR. Their evidence is under
specs/034-opendox-standalone-operation/evidence/, and the re-plans they
cause are in the feature's own files.

  • It adds no code, moves no pin, and touches no openspec/ path: git diff --stat c415c3d1 -- openspec/ is empty. No file of File add-neutral-product-standalone-operability: open the BUILD arc, recording ten rulings #1144 changes.
  • Besides the feature directory, it changes one line: the feature's entry in
    the README's Documentation index, which now links the three evidence notes.
    That entry sits outside the OpenSpec Records block, so the PR needs no Rule 6
    window.
  • It is bookkeeping, so none of its five commits carries an Arc: trailer
    (R1Q20 (a), 5817152735).

The holder lands it, on Brett Heap's word as the holder relays it: "land
#1155 when green and fan out phase 1"
.

T003: ARC_BASE (evidence/arc-base.md)

No repository holds an arc landing yet, so each base is that repository's
main at 13:34:54Z. All seven were read again at 14:02:10Z, with the same
answers.

repository ARC_BASE
openDox-code 1e4a57fb3c550339e25bb2fcc8da8e3a7817650f
openXdox-code e28930bf052febff0c7bdd0463a72ce3c4f5e8fe
openDox 36ded1cd97ca8f23b0eb9ea03d1d9def79a40d3c
openXdox 069fe471f2ef5d23ea4461c0e0abd9f2768b6a31
openxFactory c415c3d16663a8b17da5ae4f5e599f0971bf552f
openDox-spec 8fe8c4c71c4da8d363394441ad9e2c9547e540a3
openXdox-spec f088b09732e236279898b53ab9fb0f5ebc89509a

The trailer count is 0 in every repository, on the first-parent line and over
all history. PACKET_MERGE is 94b6f7f13b45c351b9142345738965c974b7dd37
(#1144), which lies on openxFactory main's first-parent line.

T005: the re-measure (evidence/remeasure-2026-09-25.md)

Research R1–R15 were re-run at the then-current mains, and openXdox-code's
WHOLE suite was run for the first time. openDox-code, the openDox root and both
spec legs are unchanged, and so is every figure the openDox-code slices use.
R10, R11, R12 and R13 moved.

  • tests/test_snapshot.py after C3. One of research R11's three failures
    cleared. The other two still fail, because C3's validator reaches its
    schemas only through CONTRACTS_DIR. So T061's contingency applies, and 7.3
    moves into phase 1.
  • 5.4a's glob now selects seven suites. C3's
    test_snapshot_validator_home.py is one of them, which R1Q14's answer has to
    take into account.
  • The whole suite (Group 2 simulated, rfc3339-validator installed) has
    292 red results. A classifier puts each in one of eleven classes. Six are
    carve residue, which T040 clears (four of them new to it). Two reach
    openxFactory without doc_health, and they became R1Q24.
  • T019 is a new holder round that applies those answers before T061 or
    T043 starts.

T006: analyze round 1a (evidence/analyze-round-1a.md)

The prerequisite check ran in a fresh clone. Without SPECIFY_FEATURE_DIRECTORY
it refuses (exit 1). With it, it prints this feature's FEATURE_DIR (exit 0).
/speckit-analyze ran twice: once by the author, and once by an independent
read-only verifier over a copy of the same commit. A second verifier then
re-ran it over 5192201c, the commit that carried the first dispositions, and
checked that each was carried.

CRITICAL: 0, in both passes.

  • The first pass found 7 HIGH, 20 MEDIUM and 8 LOW findings. The second
    commit carries their fixes.
  • The second pass found 2 HIGH, 1 MEDIUM and 12 LOW (V1–V15). Copilot's first
    review found 1 MEDIUM (CP1), and the author 1 LOW (U5). The third commit
    carries their fixes, and the fourth corrects V2's third caller against a
    measurement (below).
  • Copilot's review of 88a43004 found 2 MEDIUM. The fifth commit carries
    their fixes.
    • CP2: the plan checks read T007 (batches C and F) as all of T007, so a
      batch-level cycle could hide in prose. T007's After is now given by
      batch, and the checks read each batch as its own node.
    • CP3: the spec's acceptance lines now carry R1Q25's possible exclusion of
      tests/test_snapshot.py, without answering it.

Each finding is dispositioned in the note. The ones that change the phase-1
fan-out:

  • Four falsifiers could not pass at their own task's landing: T015's
    F3.1, T020's F4.1 block and named test, T035's F9.1, and T041's F9.1. Each
    moves to the task that makes it reachable, and each of the four gets a
    falsifier it can pass.
  • Until T011 lands, opendox.serve and opendox.cli do not import in a
    lone checkout, and any run with the root conftest in play fails.
    • Tests that can land earlier import neither module, and their PRs quote a
      --noconftest run.
    • T010's test drives the facet in src/route_extension.py, and T011 adds a
      build_server case.
    • No slice edits openDox-code's validate.yml before T036.
  • T015 carries RuntimeSubcommand from its first landing, so main never
    builds an empty default between T016 and T038.
  • T025 lists the scope the host registers. At c415c3d1, the host's
    adapter lists 794 documents under all, and exactly the session notebook's
    398 under documents. Listing all would have changed the hosted set.
  • T011's PR moves opendox.cli and opendox.serve into
    tests/test_consumer_reach.py's NEUTRAL_MODULES
    (V1). openDox-code's
    required validate job runs that file by name, and the file fails as soon
    as the two modules import. T034 re-derives the rest of it.
  • T021 waits on T011 (V7), because its named test runs with the root
    conftest in play.

The ones that change phase 1's openXdox-code tail and its close:

  • R1Q25 (new). 7.3's move into phase 1 departs from File add-neutral-product-standalone-operability: open the BUILD arc, recording ten rulings #1144's RULED release
    map, which puts Group 7 in phase 2. So R1Q25 puts the move to Brett.
    • It recommends (b): 7.3 stays in phase 2 (V2). Narrowing the consumer's
      validator to its three schemas reaches phase-1 callers that validate
      other kinds through it. Two do today: openxFactory's
      doxbench_contracts.delegated_semantic_validation, and the conftest
      helper test_lens.py uses. The third, openDox-code's workbench.py:442,
      gets no validator today, because find_validator answers None from a
      start outside the product (measured at openXdox-code e28930bf). It
      would get the narrowed one once T061's lookup resolves the installed
      distribution. openDox's own validator arrives in phase 2.
    • R1Q25 blocks T043 as well as T019 and T061 (U5), since under (b) T043's
      exclusion declares tests/test_snapshot.py.
    • Under (b), T019 restores T061 to phase 2 and F7.1 to T063 (CP1).
  • R1Q12 no longer holds T061. T061 packages the three schemas where they
    stand. R1Q24 now holds T061, because F7.1's second named test goes into a
    contract-family file.
  • openxFactory's nightly and refresh lanes read the lookup T061 changes.
    None of their files is an 11.1 surface. R1Q14's text and T019 now weigh
    that.
  • T007 gains two batches. Batch E adds composition tests before T047, and
    batch F carries T019's amendments before T061 and T043. Batch B amends 9.2
    too.

Files

file change
evidence/arc-base.md new (T003)
evidence/remeasure-2026-09-25.md new (T005), with the classifier in full
evidence/analyze-round-1a.md new (T006), with both passes
tasks.md T003, T005 and T006 ticked; T019; T061 in phase 1; the dispositions
plan.md, spec.md, clarify-questions.md, research.md, checklists/requirements.md the re-plan and the dispositions; R1Q24 and R1Q25
README.md the feature's index entry links the evidence

Checks run on the head

  • OPENSPEC_TELEMETRY=0 openspec validate --all --strict: 111 passed, 1 failed (112 items). The failure is add-chain-attestation, an accepted
    disposition, and scripts/validate-openspec-cli-pin.py --all prints
    0 UNDISPOSITIONED failures.
  • scripts/validate-document-catalog.py and
    scripts/validate-pin-registrations.py pass.
  • The plan-consistency tools pass:
    • 0 question-header mismatches;
    • no cycle in the After: graph, and none with the Lands-with groups
      merged (88 tasks; 94 nodes, since T007's six batches are nodes of their
      own; 186 edges);
    • 0 arrow mismatches of 54, now including the two that break across a
      line;
    • every task comes before its phase's checkpoint;
    • 0 single-writer chain gaps (25 pairs DIRECT, 2 transitive).
  • The added lines hold no host-absolute path and no closing keyword.
  • main has gained only Realize admit-code-leg-under-pinned-root § 3: the widened gitlink carrier, its pinned-commit re-check, and the four legs #1163 since c415c3d1. It touches none of this PR's
    paths, and the branch merges cleanly.

Persisted tools

T005's classifier, classify_whole_suite.py, and the updated plan-consistency
checks (qmap.py to R1Q25, and the widened chains in chaincheck.py and
chaindirect.py) are persisted to the lane's workspace repository,
opensoft/brett-wip, in its lane-4 tool directory. They landed at c3c69e9c.
2ed71007 widened qmap.py to R1Q25, and 805c6688 added
tests/test_consumer_reach.py's chain (T011 → T034) for the second pass.
8874a361 gave the six checks one batch-aware parser, aftergraph.py (CP2).

🤖 Generated with Claude Code

brettheap and others added 2 commits September 25, 2026 14:24
…T003, T005)

T003 records ARC_BASE for all seven repositories. No repository holds an
arc landing yet, so each base is its main at the time. It also confirms
PACKET_MERGE 94b6f7f on openxFactory main's first-parent line.

T005 re-runs research R1-R15 at the current mains, and runs openXdox-code's
whole suite for the first time. openDox-code and the openDox root are
unchanged, and so is every figure the openDox-code slices use. Three
findings re-plan phase 1's openXdox-code tail.

- tests/test_snapshot.py still fails two of the three cases after C3's
  PR 2. The schemas are reached only through CONTRACTS_DIR. So T061's
  contingency applies, and 7.3 moves into phase 1. T061 now names R1Q12
  as well as R1Q14, because R1Q12 (b) re-homes two of the schemas that
  T061 packages.
- 5.4a's glob now selects seven suites. C3's test lives in one of them,
  which R1Q14's answer has to take into account.
- The whole suite shows six causes that no task named. T040 takes the
  four that are carve residue. The two that reach openxFactory without
  doc_health become R1Q24.

T019 is the round that applies R1Q14, R1Q24 and R1Q12's part before T061
or T043 starts. Every other phase-1 task stays planned on answers.

This is bookkeeping, so it carries no Arc: trailer (R1Q20 (a)).

Lane: openxfactory-4 (openXfactory-4-openDox_extraction)
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
T006 runs /speckit-analyze over spec, plan and tasks after T005's
re-plan, from a fresh clone with the feature context set. An
independent read-only verifier ran it a second time. No finding is
CRITICAL. The 7 HIGH, 20 MEDIUM and 8 LOW findings are dispositioned in
evidence/analyze-round-1a.md, and this commit carries the fixes.

- Four falsifiers could not pass at their own task's landing (T015,
  T020, T035, T041). Each moves to the task that makes it reachable,
  and each of the four gets a falsifier it can pass.
- Until T011 lands, opendox.serve and opendox.cli do not import in a
  lone checkout. Tests that can land earlier import neither, and no
  slice edits openDox-code's validate.yml before T036.
- T015 carries RuntimeSubcommand from its first landing, so no build
  meets an empty default.
- T025 lists the scope the host registers. At c415c3d the host's
  adapter lists 794 documents under all, and exactly the session
  notebook's 398 under documents.
- 7.3's move into phase 1 departs from #1144's RULED release map, so
  R1Q25 puts it to Brett. R1Q12 no longer holds T061, and R1Q24 now
  does. openxFactory's readers of the validator lookup are named for
  T019.
- T007 gains batch E (composition tests, before T047) and batch F
  (T019's amendments, before T061 and T043). Batch B amends 9.2 as well.

This is bookkeeping, so it carries no Arc: trailer (R1Q20 (a)).

Lane: openxfactory-4 (openXfactory-4-openDox_extraction)
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Copilot AI lite review requested due to automatic review settings September 25, 2026 15:19

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

🟡 Changes recommended

Moderate issues remain around R1Q24/T085 planning, mandated worktree execution, and the conditional T061/T064 dependency.

Get a fresh assessment by requesting another Copilot review.

Review effort: Lite
Findings: 1 Medium severity

Open (1)
What changed in this PR

This bookkeeping PR records Phase 1 evidence for plan 034 and updates planning dependencies based on remeasurement and analysis.

Changes:

  • Adds ARC_BASE, remeasurement, and analysis evidence.
  • Replans tasks and phase dependencies around R1Q24–R1Q25.
  • Updates the README evidence index.
File Summary
specs/​034-opendox-standalone-operation/​tasks.md Updates task status, dependencies, and phase sequencing.
specs/​034-opendox-standalone-operation/​spec.md Records revised questions, outcomes, and criteria.
specs/​034-opendox-standalone-operation/​research.md Links updated measurement evidence.
specs/​034-opendox-standalone-operation/​plan.md Revises phases, constraints, and dependencies.
specs/​034-opendox-standalone-operation/​evidence/​remeasure-2026-09-25.md Records refreshed measurements and classifications.
specs/​034-opendox-standalone-operation/​evidence/​arc-base.md Records repository ARC_BASE commits.
specs/​034-opendox-standalone-operation/​evidence/​analyze-round-1a.md Records analysis findings and dispositions.
specs/​034-opendox-standalone-operation/​clarify-questions.md Adds R1Q24 and R1Q25.
specs/​034-opendox-standalone-operation/​checklists/​requirements.md Updates clarification and analysis gates.
README.md Links the feature evidence records.

💡 Add a code-review agent skill or configure MCP servers for context-aware, tailored reviews. Learn more in the docs.

Comment thread specs/034-opendox-standalone-operation/tasks.md Outdated
A second independent verifier re-ran /speckit-analyze, read-only, over
5192201, and checked that each first-pass disposition was carried. It
found no CRITICAL: 2 HIGH, 1 MEDIUM and 12 LOW (V1-V15). Copilot's
first review added one MEDIUM (CP1), and the author one LOW (U5). All
are dispositioned in evidence/analyze-round-1a.md, section "Second
pass", and this commit carries the fixes.

- V1: T011 could not pass openDox-code's required validate job, whose
  test_consumer_reach.py fails as soon as opendox.cli and opendox.serve
  import. T011's PR moves both into NEUTRAL_MODULES, and T034 does the
  rest of the file.
- V2: narrowing the consumer's validator to its three schemas reaches
  three phase-1 callers that validate other kinds through it. T061 and
  T019 name them, and R1Q25 now recommends (b), keeping 7.3 in phase 2
  beside openDox's own validator.
- CP1: T064's note is conditional on R1Q25. Under (b), T019 restores
  T061 to phase 2 and F7.1 to T063.
- U5: T043 is blocked by R1Q25 too, since (b) decides its exclusion.
- V3-V15: how the tools read "T007 (batch X)"; stale batch lists;
  T045's run at both new pins; P1-K lists only tests; T021 after T011;
  the note's edge count and unmapped list; the lane map; "no Arc:
  trailer" wherever the plan meant it; R1Q25 (b) amends F9.1 through
  batch F; R1Q25 caveats; T015's no-extra check moves to T038; "raised
  or brought in".

This is bookkeeping, so it carries no Arc: trailer (R1Q20 (a)).

Lane: openxfactory-4 (openXfactory-4-openDox_extraction)
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Copilot AI review requested due to automatic review settings September 25, 2026 16:00

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

🟡 Changes recommended

Unresolved dependency-cycle and conditional-edge issues remain, along with evidence inconsistencies.

Get a fresh assessment by requesting another Copilot review.

Review effort: Lite
Findings: 1 Medium severity

Open (1)
Resolved since last review (1)

Comment thread specs/034-opendox-standalone-operation/tasks.md
The second pass named three phase-1 callers that validate other kinds
through the consumer's validator. Measured at openXdox-code e28930bf:
snapshot.find_validator answers None from a start outside the
product, so openDox-code's workbench.py:442 gets no validator today.
It would get the narrowed one once T061's lookup resolves the
installed distribution. doxbench_contracts and the conftest helper
run the script today.

T061, R1Q25's second fact, plan.md and the analyze note now say so.
R1Q25's recommendation stays (b).

This is bookkeeping, so it carries no Arc: trailer (R1Q20 (a)).

Lane: openxfactory-4 (openXfactory-4-openDox_extraction)
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Copilot AI review requested due to automatic review settings September 25, 2026 16:07

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

🔵 Needs a closer look

Synchronize the plan and specification with the documented conditional dependencies and snapshot-test exclusion.

Review effort: Lite
Findings: 1 Medium severity

Open (1)
Previously missed (1)

In code that hasn't changed since last review

Medium severity Include R1Q25's possible snapshot exclusion in acceptance

specs/​034-opendox-standalone-operation/​spec.md:181

The phase-1 acceptance scenario still describes openXdox-code as running only less the doc_health exclusion plus R1Q24's decision, but R1Q25 option (b) explicitly adds tests/test_snapshot.py to the exclusion. This makes the stated acceptance condition incomplete for one of the currently supported rulings; include R1Q25 and its possible exclusion in this scenario.

Copilot's review of 88a4300 found two more items.

- CP2: T061 waits on T007 (batches C and F), but the plan checks read
  that as all of T007, batch E included. Batch E needs P1-K's run at
  the new pins, which follows T061, so the checks could hide a
  batch-level cycle in prose. T007's After is now given by batch,
  batch E's run inputs T039 and T044 are edges, and the checks read
  each batch as its own node (aftergraph.py, persisted as brett-wip
  8874a361). The batch reading has no cycle, with or without the
  Lands-with groups merged. Folding the batches back into one T007
  node gives two cycles, the finding.
- CP3: US1's fourth scenario, and the spec lines like it, now say that
  R1Q25 decides whether tests/test_snapshot.py runs in phase 1 or
  joins the exclusion with its own reason. They do not answer it.

This is bookkeeping, so it carries no Arc: trailer (R1Q20 (a)).

Lane: openxfactory-4 (openXfactory-4-openDox_extraction)
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Copilot AI review requested due to automatic review settings September 26, 2026 21:15
@brettheap

Copy link
Copy Markdown
Contributor Author

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

Answer to Copilot's "previously missed" item at 88a43004 ("Include R1Q25's possible snapshot exclusion in acceptance", spec.md:181). It is fixed in 42f34ab7.

US1's fourth acceptance scenario now says that R1Q25 decides whether tests/test_snapshot.py runs in phase 1, with 7.3, or joins the declared exclusion with a reason of its own until 7.3 lands (its option (b)). The same condition now also appears in five other places:

  • the story's summary;
  • the edge cases;
  • FR-006's openXdox-code bullet;
  • the declared-exclusion entity;
  • SC-001.

None of them answers R1Q25. R1Q24 and R1Q25 stay open for Brett Heap. The fix is recorded as CP3 in evidence/analyze-round-1a.md.

@brettheap
brettheap marked this pull request as ready for review September 26, 2026 21:16

@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.

Sorry @brettheap, your pull request is larger than the review limit of 150,000 diff characters

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

🔵 Needs a closer look

Moderate findings remain regarding planning constraints, exclusions, dependency gates, and evidence consistency.

Review effort: Lite
Findings: None

Resolved since last review (1)

@sonarqubecloud

Copy link
Copy Markdown

@brettheap

Copy link
Copy Markdown
Contributor Author

READY #1167 @42f34ab7 2026-09-26T21:35:47Z

  • Head 42f34ab7cde63b26a93f88d35957e167a3782bea, base main. The branch starts from c415c3d1. Today's main, 1c6662e7, merges cleanly (git merge-tree). Its one newer commit, Realize admit-code-leg-under-pinned-root § 3: the widened gitlink carrier, its pinned-commit re-check, and the four legs #1163, touches only openspec/changes/admit-code-leg-under-pinned-root/tasks.md, none of this PR's files. The PR is MERGEABLE and no longer a draft.
  • Checks at the head: every check run is green. pytest-suite passed (21:15:20Z to 21:34:40Z), as did openxdox-consumer-gate, openspec-cli-pin, merge-master-approval, both lane-line runs, SonarCloud, clearing-dispatch-gate, former-id-arrival-gate, openreposhape-pin, release-tag-gate, signed-execution-chain-gate and wallet-validation. Sourcery skipped its review, because the diff is over its 150,000-character limit.
  • Copilot at the exact head: review 5327487765 at 42f34ab7 (2026-09-26T21:19:23Z).
    • It reports Findings: None and "Resolved since last review (1)", and lists nothing as previously missed.
    • Its headline is "Needs a closer look", not "Changes recommended", and it names no finding.
  • Threads: both threads have a reply and are resolved. Copilot's one "previously missed" item (spec.md:181) is answered in comment 5849949415.
  • Analyze (T006): no CRITICAL finding in either pass (evidence/analyze-round-1a.md), and every finding is dispositioned.
  • Process:
    • No Rule 6 window is needed. The PR touches no openspec/ path, and its one README line is in the Documentation index.
    • None of its five commits carries an Arc: trailer (R1Q20 (a)). No commit message, and not the PR body, carries a closing keyword.
    • File add-neutral-product-standalone-operability: open the BUILD arc, recording ten rulings #1144 is not edited. R1Q24 and R1Q25 stay open in this PR, as scoped. Brett Heap's answers of 5850003126 go into the follow-on bookkeeping PR, not into this one.
  • Landing: the holder lands it, on Brett Heap's word as the holder relays it: "land Plan 034: the Speckit plan for release 1 (standalone operation) of add-neutral-product-standalone-operability #1155 when green and fan out phase 1". This actor merges nothing.

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

@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-26T21:37:12Z, PR #1167 into opensoft/openxFactory main

@brettheap
brettheap merged commit a65230f into main Sep 26, 2026
15 checks passed
@brettheap

Copy link
Copy Markdown
Contributor Author

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

LANDED — lane openxfactory-4, 2026-09-26T21:37:25Z, PR #1167 → a65230f (opensoft/openxFactory main; squash)

brettheap added a commit that referenced this pull request Sep 26, 2026
… the default only before a build, refuse after (T007 batch D) (#1170)

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

Refs #656 (CLAIMED `5850209491`)

## What

T007 **batch D** of plan 034 (`specs/034-opendox-standalone-operation/tasks.md` T007): the RN-1 amendment to the ratified `add-neutral-product-standalone-operability` (#1144, ratified in `#656` comment `5815412869`). It is made on Brett Heap's ruling RN-1 (a), `#656` comment [`5850003126`](#656 (comment)), verbatim *"go with recommendations on all the open questions"*. RN-1 as it was put is `specs/034-opendox-standalone-operation/plan.md` § "Ruling needed".

**One file moves**, the change's spec delta: `openspec/changes/add-neutral-product-standalone-operability/specs/neutral-product-standalone-operability/spec.md`, requirement 3 only.

**Before** (as ratified at `19237b91`):
> #### Scenario: A host registers its own profile
> - **WHEN** a host, consumer layer or domain descendant registers a profile
> - **THEN** the registered profile replaces the default for that process, so the default is a fallback and never a privileged path

**After:**
> #### Scenario: A host registers its own profile
> - **WHEN** a host, consumer layer or domain descendant registers a profile before the product's parser or server has been built from the default in that process
> - **THEN** the registered profile replaces the default for that process, so the default is a fallback and never a privileged path
>
> #### Scenario: A host registers a profile after a build from the default
> - **WHEN** a host, consumer layer or domain descendant registers a profile after the product's parser or server has been built from the default in that process
> - **THEN** the registration is refused rather than swapped in silently, because what was already built would keep the default while later readers took the new profile, and one process would then answer from two profiles

The WHEN's added words are RN-1 (a)'s wording, unchanged. The added scenario states R1Q3 (ii)'s refusal (`#656` comment `5817152735`).

**The record.** A dated `**AMENDED 2026-09-26 ON BRETT HEAP'S RULING RN-1 (a), AFTER RATIFICATION, BY ITS OWN RATIFIER.**` note sits in requirement 3's body, above its scenarios. It cites `5850003126`, names both amended lines, and says what did not move. This follows the precedent form for an amendment inside a spec delta: `add-requirement-ref-resolution-integrity`'s `**AMENDED 2026-09-01 ON BRETT HEAP'S RULING …**` notes, and the `**AMENDED 2026-08-25 ON BRETT'S RULING …**` note now in `openspec/specs/doc-health/spec.md`. No scenario bullet carries a citation inline. The corpus has no precedent for that, and a citation inside a WHEN would read as part of its condition.

## What does not move

- Requirement 3's first paragraph, including its SHALL sentences, stays as ratified. So do its first three scenarios and the fourth scenario's title and THEN.
- No other requirement or scenario moves, and no other file. Requirement 3 now has five scenarios, and the capability has 76. It was ratified with 75.
- By the holder's direction, this batch keeps to the spec delta. The T007 batch A and C writer holds `tasks.md` and `design.md` (claim file linked from `#656` comment `5850185859`). So the packet's other prose is not edited here. That includes the scenario counts in `proposal.md` § What Changes and § Capabilities, `design.md` § D3, and the README entry, as well as `design.md` § D5's quote of the fourth scenario and `tasks.md` 3.2's wording.

## Gates

All of these ran from this clone's root, at head `92c82564`, which is `a65230f6` (#1167) plus this commit. The baseline is a same-kind clone of `main` at `a65230f6`, with its submodules materialized in both clones:

| gate | `main` `a65230f6` | this branch |
|---|---|---|
| `OPENSPEC_TELEMETRY=0 openspec validate add-neutral-product-standalone-operability --strict` (1.13.1 on PATH) | `Change '…' is valid` | `Change 'add-neutral-product-standalone-operability' is valid`, rc 0 |
| `OPENSPEC_TELEMETRY=0 openspec validate --all --strict` | `111 passed, 1 failed (112 items)` | `111 passed, 1 failed (112 items)`, the same single failure, `add-chain-attestation` |
| `python3 scripts/validate-openspec-cli-pin.py --all` (pinned `@fission-ai/openspec@1.12.0`, content address verified) | rc 0, `0 UNDISPOSITIONED failures` | rc 0, `111 passed, 1 failed (112 items)`, `0 UNDISPOSITIONED failures`, 1 accepted exception (`add-chain-attestation`, Brett Heap 2026-09-05 "take exit 2") |
| `python3 scripts/validate-openspec-cli-pin.py --change add-neutral-product-standalone-operability` | — | rc 0, `1 passed, 0 failed (1 items)`, clean |
| `python3 scripts/doc-health.py --single-repo . --as-of 2026-09-26` | 31 critical, 26 error, 55 warning, 20 info | 31 critical, 26 error, 55 warning, 20 info. The 132 `- severity=` finding lines are IDENTICAL in both directions, and none names this change |
| `python3 scripts/proposal-support.py . verify add-neutral-product-standalone-operability` | — | `proposal support verification ok` |
| `python3 scripts/validate-sequenced-after.py . --ledger-diff` | — | `per-change sweep ledger consistent with the corpus (229 rows)`. This change's row does not move |
| `python3 scripts/validate-code-surface.py .` / `validate-target-release.py .` | — | passed / passed |
| `pytest -q tests/doc-health/test_modified_block_currency_self_gate.py tests/sequenced_after` | — | 306 passed |
| `pytest -q tests/proposal-support tests/packet_reference tests/code_surface tests/target_release` | — | 481 passed, 304 subtests passed |

`main` has since moved to `b5ec3899` (#1165), which touches only `admit-code-leg-under-pinned-root`'s `proposal.md` and spec delta, and no file of this change. CI runs on the merge ref.

The parser reads requirement 3's first line as `A neutral product whose entry points require a registered domain profile SHALL`, and it reads 5 scenarios in requirement 3 and 76 in the capability (`openspec show … --json --deltas-only`).

## Landing

This is bookkeeping, so it carries no `Arc:` trailer (R1Q20 (a)) and no closing keyword. It touches `openspec/changes/`, so it lands under a Rule 6 `LANDING` / `LANDED` window, through the holder's lander. It opens as a DRAFT.

🤖 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