You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
{{ message }}
Repository navigation
Ratify add-worker-input-budget on Brett Heap's word '0.4: (a) ratify as they stand' - #1250
Brett Heap gave both words on 2026-10-06, in session to lane openxfactory-1. Both are RULED lines on the estate's lane register, with object opensoft/openxFactory:openspec/changes/add-worker-input-budget.
The ratification.
0.4: (a) ratify as they stand
It answers tasks.md 0.4, "Ratify or amend the two spec deltas". The question was put to him as "task 0.4: (a) ratify the two doc-health deltas as they stand, or (b) amend first", and he chose (a). RULED at 2026-10-06T13:55:03Z (opensoft/brett-wip commit 06709554, lanes/log/openxfactory-1.md).
It answers the RULING NEEDED this PR raised on Copilot's finding r4196698454. Option (i) was put to him as adding .openspec.yaml in the ratifying commit, with values following the 2026-08-25 origin sweep b7513733. RULED at 2026-10-06T17:24:57Z (opensoft/brett-wip commit f739ab74).
This lane has held the change's claim since 2026-09-24T16:33:03Z.
What is ratified
add-worker-input-budget's two doc-health spec deltas, as they stand and with no amendment:
MODIFIED: Sweep sequencing and snapshot consistency (three scenarios);
The ratified text is specs/doc-health/spec.md blob 9a817d65. That blob is the same at #1137's merge commit 9da52e31 and on main. No requirement or scenario text moves in this PR.
The origin declaration, on the second word
Why it is needed.document-lifecycle § Proposal origin declaration says:
A proposal whose own Status: declares ratified, or any standing beyond it, SHALL carry approval provenance in its origin.
This packet had no .openspec.yaml, and it was the only active change without one.
What it declares. The new openspec/changes/add-worker-input-budget/.openspec.yaml is hand-written in the form of sweep b7513733. Every value is derived from the packet's own record and is folded or plain, so the file parses:
schema: spec-driven;
created: 2026-09-22, from the packet's true first commit, ee2185d6 (2026-09-22T01:26:47Z);
origin.kind: ad_hoc. No Staging ID: header and no staging topic's exit names this change, checked in both directions;
the drafting pair: lane openxfactory-1, on "brief a writer to add the input-size guard", proposed_on: 2026-09-22;
the approval pair: Brett Heap, "0.4: (a) ratify as they stand", approved_on: 2026-10-06.
What it changes.
proposal-support.py verify add-worker-input-budget now passes, where main refuses it with "no origin declaration".
proposal-origin's WARNING for the missing origin is gone.
No other finding moves.
What this PR does not do
Group 4's 4.1 sequencing question stays open. The "Sequencing tension, named rather than hidden" note in tasks.md asks Brett Heap a question. Was "land the input-size guard when green" the approved exception, or should 0.4 have gated 4.1? Neither word answers that question, and the note does not move.
No archive. The archive is a separate act.
No other substance moves. That covers proposal substance, code_surface:, target_release:, realization and the sequenced-after ledger row.
It lands by SQUASH. The lane's coordinator lands it in a Rule 6 window. The archive PR is a separate landing, as a merge commit.
Every changed line, file by file
openspec/changes/add-worker-input-budget/proposal.md (the front-matter header):
Status: draft becomes Status: ratified.
One line is added after it: Ratified: 2026-10-06 by Brett Heap (openxFactory repository owner) — …. The line carries:
the 0.4 word, verbatim, and the question as it was put;
The closing sentence changes. It read: "Status: draft is unchanged: …". It now reads: "Resolving the questions ratified neither spec delta; the 2026-10-06 word did (task 0.4). RATIFICATION ONLY — the archive is a separate later act on Brett Heap's word, and the Group 4 sequencing question on 4.1 stays open."
The header: Status: ratified, Kind: report, Decision date:, Ratifier:, one Ratified: citation and the ratified baseline.
The sections:
Decision;
1, the word;
2, what the word does not decide;
3, what this pull request changes, including the origin file and the second word, verbatim;
4, a disclosure;
5, the measurements, and the statement that this PR lands by squash.
ideation/staging/doc-health-sweep-carry-over/doc-health-sweep-carry-over.md (Copilot r4198710846, the first Conflicts bullet only):
The status clause "add-worker-input-budget is Status: draft, its two deltas unratified (its task 0.4)" now says the packet is Status: ratified (task 0.4, Brett Heap's word of 2026-10-06) but still ACTIVE, not archived.
A parenthesis records what the clause read before. The sequencing constraint, proposing this topic's change after that packet archives, is unchanged.
Sweep b7513733: the .openspec.yaml form, on the second word:
created from the true first commit;
an ad_hoc id carrying the created date;
a folded reason derived from the record and checked in both directions;
the approval quoted from the packet's own citation.
Not copied:Status: and Ratified by: on tasks.md and design.md. The packet has no design.md. Its tasks.md carries no Status: header to move, and document-lifecycle does not rule tasks.md.
Landing: squash
This PR lands by SQUASH, and only a squash landing conforms to the second word. Option (i) was put as adding the origin file in the ratifying commit. On this branch the ratification is a93865f0 and the origin file is the later commit b3b7db42, so only a squash puts the two into one commit on main. The record's § 5 says the same.
The archive gate's origin-retention walk takes the FIRST commit whose proposal.md declares Status: ratified as the ratifying commit. A probe on throwaway copies measured two landings:
Merge, not conforming: the walk takes a93865f0, which has no origin, as the ratifying commit, and reads "ORIGIN RETENTION NOT COMPARABLE". The gate does not refuse that, but it leaves no retention baseline.
Rebase, not conforming and not run: it would also land a93865f0 as a commit of its own, ahead of the origin file.
Observation (no change made)
proposal.md § Impact says "two requirements MODIFIED, one ADDED". The delta has carried one MODIFIED and one ADDED requirement since its first commit, ee2185d6. The record's § 4 discloses this. It is not corrected here, because it is proposal text.
How it was verified
All runs used full clones named openxFactory. The full set ran at the same time in two same-kind clones: main51456835, and this branch merged with it (9e67f838). The gates and doc-health then ran again on maine6380965 and on cc0fc853. After that, the full set ran a third time on maine6380965 and on 60c38a56. All three runs gave the same results. The record's § 5 names each measured tree by sha (Copilot r4198710942).
Copilot's review 5433270341 at 60c38a56 raised no inline finding. Its "previously missed" note on record § 5 is answered in 7229fde4, which rewrites only the record's landing paragraph to say this PR lands by squash. The gates and doc-health ran again on that tree against maine6380965, with identical results. The branch then merged mainc44c1610, which archived add-factory-mcp-conformance (#1252) and touched no byte of this packet. The gates and doc-health ran once more, on mainc44c1610 and on that merge, 8dbb011e. The results were again identical: verify exits 1 on main and 0 on the branch, and doc-health reports 284 against 282 finding lines, the difference being only the proposal-origin WARNING. Copilot's review 5433389325 at 8dbb011e (thread r4199425241) asked that record § 5 list every tree measured. 6f4e98d1 rewrites that list as six runs, each named by sha. The gates and doc-health ran on it against mainc44c1610, with identical results. Last, the branch merged maina2dc658d (#1254, no byte of this packet) as 35b17c30, and the gates and doc-health on that merge against maina2dc658d were again identical. Its other note asks to put the Group 4 sentence "is still open even as this line is written" in the past tense. That note is left as it stands, because both briefs keep the Group 4 note untouched and the sentence is anchored to when it was written.
Because the carry-over topic changed, tests/ideation_routing and tests/document_catalog also ran on maine6380965 and on 60c38a56: 86 passed on each. tests/ideation-dashboard cannot be collected in a clone without the openDox and openXdox legs; CI runs it.
282: the same set without the proposal-origin WARNING's two lines. No new finding. The modified-block-currency INFO, which records the delta's deliberate rewording of canon's "is exactly" bullet, stays
pytest over tests/doc-health, sequenced_after, review_lane_pin, proposal-support, code_surface, target_release, packet_reference, citation_remainder, scope_globs, former_id_arrival and openspec_cli_pin
3581 passed, 7 failed and 3 skipped
the same, with the same 7 tests failing. All 7 come from the clone, whose openDox and openXdox legs were not initialized. CI runs the full suite
The citation checks were proven to read both files, on a throwaway copy:
damaging either Ratified: line raised a CRITICAL ratified-provenance finding naming the damaged file;
…as they stand'
Brett Heap, in session to lane openxfactory-1 on 2026-10-06, verbatim
"0.4: (a) ratify as they stand". This is option (a) of the question put to
him as "task 0.4: (a) ratify the two doc-health deltas as they stand, or
(b) amend first". The word is RULED on the estate's lane register at
2026-10-06T13:55:03Z (opensoft/brett-wip commit 06709554,
lanes/log/openxfactory-1.md).
Ratified as they stand, with no amendment: the MODIFIED requirement "Sweep
sequencing and snapshot consistency" and the ADDED requirement "Bounded
worker input budget". The text is the one #1137 landed at 9da52e3 (delta
blob 9a817d6), unmoved since then.
The commit moves only status, record and tick lines:
- proposal.md: Status draft becomes ratified, with one Ratified: line.
- tasks.md: 0.4 is ticked with its record.
- README.md: the Active changes entry's status and closing sentence.
- New: review/ratification-2026-10-06.md.
The spec delta, .openspec.yaml (this packet has none) and the
sequenced-after ledger row do not move.
The Group 4 sequencing question on 4.1 stays open, and its note does not
move. Nothing is archived.
Lane: openxfactory-1
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
You have reached your Codex usage limits for code reviews. You can see your limits in the Codex usage dashboard.
To continue using code reviews, you can upgrade your account or add credits to your account and enable them for code reviews in your settings.
This draft PR records Brett Heap’s 2026-10-06 ruling as ratification of the two existing doc-health spec deltas, updating lifecycle metadata, task tracking, README status, and adding an auditable ratification report; it intentionally changes no requirement text, archive state, realization data, or sequencing ledger.
Flow diagram for doc-health change ratification
flowchart LR
A["Brett Heap gives word: ratify as they stand"] --> B["RULED lane-register entry"]
B --> C["Ratification record"]
C --> D["proposal.md status: ratified"]
C --> E["tasks.md 0.4 checked"]
C --> F["README active-change status updated"]
C --> G["Two existing spec deltas remain unchanged"]
G --> H["Archive and Group 4 sequencing remain open"]
Loading
File-Level Changes
Change
Details
Files
Record Brett Heap’s in-session ruling as ratification of both existing doc-health spec deltas without changing their normative text.
Change the proposal status to ratified and add a traceable citation to the word, lane-register ruling, baseline, and record.
Mark task 0.4 complete with the ruling and explicitly preserve the open Group 4 sequencing question and separate archive step.
Add a ratification report documenting the decision, scope, exclusions, disclosure about the proposal’s requirement count, and verification results.
Update the repository’s active-change index to reflect the ratified lifecycle state while retaining the existing filing context.
Change the active-change status from draft to ratified and link the ratification record.
Replace the prior unresolved-status wording with a ratification-only clarification that excludes archiving and leaves Group 4 sequencing open.
README.md
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!
…#1250: (i) add the origin file'
Brett Heap, in session to lane openxfactory-1 on 2026-10-06, verbatim
"#1250: (i) add the origin file". It is RULED on the estate's lane
register at 2026-10-06T17:24:57Z (opensoft/brett-wip commit f739ab74,
lanes/log/openxfactory-1.md).
It answers Copilot's finding r4196698454 on this pull request.
document-lifecycle, Proposal origin declaration: a proposal whose Status
declares ratified SHALL carry approval provenance in its origin. This
packet had no .openspec.yaml, and it was the only active change without
one.
The new openspec/changes/add-worker-input-budget/.openspec.yaml is
hand-written in the form of the 2026-08-25 origin sweep b751373:
- schema: spec-driven.
- created 2026-09-22, derived from the packet's first commit ee2185d.
- kind ad_hoc, id openxFactory:adhoc:2026-09-22-add-worker-input-budget.
- A folded reason, derived from the packet's own record and quoting this
ruling.
- The drafting pair: lane openxfactory-1, on the word "brief a writer to
add the input-size guard", 2026-09-22.
- The approval pair: the 0.4 word, "0.4: (a) ratify as they stand",
2026-10-06.
Every value is folded or plain, so the file parses.
proposal-support.py verify now passes for this change; main refuses it
with "no origin declaration".
The ratification record's section 3 and the README entry now say the
origin file was added on this ruling. The spec delta, the Group 4 4.1
note and the sequenced-after ledger row do not move.
Lane: openxfactory-1
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…get's ratification record
Section 5 now carries the paired runs at main 5145683 and at this pull
request's merged head 9e67f83:
- proposal-support.py verify: exit 1 ("no origin declaration") on main,
exit 0 at the head.
- doc-health: 284 finding lines on main, 282 at the head. The head drops
only the proposal-origin WARNING's two lines; there is no new finding.
- Every other gate: identical output, including the same 7
environment-only pytest failures.
It also records the archive gate's origin-retention walk, probed on
throwaway copies. A squash landing reads ORIGIN RETAINED, with the squash
commit as the ratifying commit. A merge landing reads NOT COMPARABLE, with
a93865f as the ratifying commit.
The record's text is the only change.
Lane: openxfactory-1
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
You have reached your Codex usage limits for code reviews. You can see your limits in the Codex usage dashboard.
To continue using code reviews, you can upgrade your account or add credits to your account and enable them for code reviews in your settings.
…us clause, and the record's measured trees
Two edits.
- ideation/staging/doc-health-sweep-carry-over/doc-health-sweep-carry-over.md,
Conflicts: the first bullet said add-worker-input-budget was Status: draft,
with its deltas unratified and task 0.4 open. Copilot r4198710846 noted
that ratification makes this stale. The bullet now says the packet is
ratified (task 0.4, Brett Heap's word of 2026-10-06) but still active,
and records what the clause read before. The sequencing constraint is
unchanged: this topic's change is proposed after that packet archives.
- The ratification record's section 5 (Copilot r4198710942) now names each
measured tree by sha. It drops the claim that only that section's text
changed after 9e67f83. The runs are:
- the full set at main 5145683 against 9e67f83;
- the gates and doc-health at main e638096 against cc0fc85, a merge
that brought in prefer-triad-project-shape (#1249) and no byte of this
packet;
- the full set again at main e638096 against cc0fc85 plus this commit.
Every result matched: verify exit 1 on main and exit 0 on the branch;
doc-health 284 against 282 finding lines, the difference being only the
proposal-origin WARNING; the same 7 environment-only pytest failures.
Lane: openxfactory-1
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
The gate’s successful NOT COMPARABLE result does not satisfy the second ruling. The PR history puts ratification in a93865f0 and adds the origin only in b3b7db42, while option (i) was explicitly defined as adding it “in the ratifying commit”; merge or rebase would preserve that split and leave no retention baseline. Mark squash as required and merge/rebase as non-conforming instead of presenting merge as a lawful landing.
Update 0.4 status wording to past tense after 4.1 landed
Checking 0.4 makes this file internally contradictory: lines 96–98 still say that 0.4 “is still open even as this line is written.” Keep the sequencing question open, but rewrite that sentence in the past tense so it records that 0.4 was open when 4.1 landed rather than claiming the task remains open now.
Copilot's review 5433270341 at 60c38a5 noted that record section 5 treated
a merge landing as lawful. Option (i) was put as adding the origin file in
the ratifying commit. On this branch, ratification (a93865f) and the origin
file (b3b7db4) are separate commits, so only a squash puts them into one
commit on main.
The landing paragraph now says this pull request lands by squash, which is
the conforming landing (ORIGIN RETAINED). Merge and rebase are named as
not conforming. The archive pull request is a separate landing, as a merge
commit.
The record's text is the only change. The gates and doc-health re-ran
against main e638096 with identical results.
Lane: openxfactory-1
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This measurement history is stale again at the current head. The list stops at 60c38a56 and claims only three post-origin measured trees, but 7229fde4 subsequently changed this same record; that commit reports another gates/doc-health run against e6380965. Add that fourth measured tree so the persistent record identifies the head its results cover.
Copilot's review 5433389325 at 8dbb011 (thread r4199425241) noted that
section 5 stopped at 60c38a5. It omitted 7229fde, which reworded the
landing paragraph to say squash, and 8dbb011, which merged main c44c161.
The list now names six runs after the origin file, each by sha:
- the full set at 5145683/9e67f838;
- the gates and doc-health at e638096/cc0fc853;
- the full set at e638096/60c38a56;
- the gates and doc-health at e638096/7229fde4;
- the gates and doc-health at c44c161/8dbb011e;
- the gates and doc-health at c44c161 against 8dbb011 plus this commit.
Every result matched. A later merge of main that touches no byte of the
packet is left to the pull request's own checks.
The record's text is the only change.
Lane: openxfactory-1
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
LANDING — lane openxfactory-1, session eb835de4-d46e-4bb7-86f3-82780be6f51e@Eagle, 2026-10-06T23:00:24Z, PR #1250 into opensoft/openxFactory main (Rule 6 window; rule6 scan CLEAR; gate PASS at head d86ce0a on main 1837ea7). On Brett Heap's word verbatim: "land the ratification PR when green".
…l request in the README
--moved-by needs a real pull-request number, and this branch had none
until #1258 was opened, so the row is seeded here rather than in the
archive act. This follows the order 5216c70 and 14920ec used.
Seeded by the machine, not by hand:
python3 scripts/validate-sequenced-after.py . --seed-ledger --moved-by '#1258'
-> wrote tests/sequenced_after/corpus-ledger.yaml (232 rows, 1 moved by #1258).
python3 scripts/validate-sequenced-after.py . --ledger-diff
-> per-change sweep ledger consistent with the corpus (232 rows).
The diff is one line: add-worker-input-budget's row goes from state active
to archived, moved_by "#1137" -> "#1258", and
moved_on 2026-09-22 -> 2026-10-06. A flipping row takes its archive
directory's date. No other row moved.
README: the archived bullet's ARCHIVE-PR-NUMBER-PENDING marker (two
occurrences, one line) now names PR #1258.
Refs #1250
Lane: openxfactory-1
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…t Heap's word 'ratify 1262 when ready' (#1264)
Lane: openxfactory-1
Drafts and RATIFIES the OpenSpec change `amend-worker-input-budget-dispatch-wording`, the amendment #1262 asks for. Refs #1262.
**Ratified in place, as drafted, on Brett Heap's word *"ratify 1262 when ready"*.** No requirement or scenario text moved at ratification: the spec delta is blob `eead8960` at every commit of this PR. The archive is a separate act on its own word.
## The words
Brett Heap, verbatim, in session on 2026-10-07. Each is a RULED line on the lane register (`opensoft/brett-wip`, `lanes/log/openxfactory-1.md`) except the second, which the issue itself records.
1. *"(a) land as ratified, amend later"*. His ruling on Copilot's comment [`4202036546`](#1258 (comment)) at #1258. RULED at 2026-10-07T09:42:21Z (commit `98b8b3d4`).
2. *"log the issue to change this"*. The lane filed #1262.
3. *"draft the amendment change for 1262"*. This PR.
4. *"ratify 1262 when ready"*. RULED at 2026-10-07T09:58:32Z (commit `f6964352`). Its condition held at `5b3edf14`: every required check green, `pytest-suite` included, and Copilot's review `5441182701` recommending approval with one low-severity citation fix, taken in `5d236d7d`. The ratification is commit `3a7ba60c`.
5. *"yes, land it when green"*. RULED at 2026-10-07T10:04:03Z (commit `43e9a5c2`). This PR lands by SQUASH, by the lane's coordinator, inside a Rule 6 window. The squash commit is then the ratifying commit on `main`, and it carries the origin's approval pair. Closing #1262 still needs its own word, and the archive is a separate later pull request.
## What changes
One `## MODIFIED` requirement in `doc-health`, *Bounded worker input budget*. Only the last sentence of its second paragraph is replaced.
As promoted (canon on `main` `16779816`, lines 4083-4087):
> Where the WORKER assembles the prompt from a dispatchable unit the orchestrator prepared, the orchestrator SHALL measure each unit's assembled size, record it, and SHALL NOT dispatch a unit it has measured over the budget — dispatching one and letting the worker refuse is conformant but useless, because the same unit is selected again next run.
As amended (#1262's text, verbatim):
> Where the WORKER assembles the prompt from a dispatchable unit the orchestrator prepared, the orchestrator SHALL measure each unit's assembled size, record it, and SHALL NOT dispatch a unit it has measured over the budget. The worker's refusal of an over-budget input (scenario "A worker receives an input over the budget") is a backstop that keeps such an input from reaching the model. It does not make an over-budget dispatch conformant, and relying on it wastes the run, because the same unit is selected again next run.
`diff` of canon's block (`openspec/specs/doc-health/spec.md`:4070 to the end, 52 lines) against the delta's block gives one hunk:
```diff
17,18c17,21
< measured over the budget — dispatching one and letting the worker refuse is
< conformant but useless, because the same unit is selected again next run.
---
> measured over the budget. The worker's refusal of an over-budget input
> (scenario "A worker receives an input over the budget") is a backstop that
> keeps such an input from reaching the model. It does not make an
> over-budget dispatch conformant, and relying on it wastes the run, because
> the same unit is selected again next run.
```
The title, the first and third paragraphs and all six scenarios (16 bullets) are byte-identical to canon. The archived delta under `openspec/changes/archive/2026-10-06-add-worker-input-budget/` is history and is not edited.
## Task 1.1: the realization never dispatches over budget (CONFIRMED)
#1262's acceptance 1, checked read-only:
- `scripts/doc_health/catalog_dispatch.py` at #1137's merge `9da52e31`:
- :513-515 measures each shard's assembled input in bytes;
- :516-517 adds the shard to the dispatch list only when it is `<= input_budget_bytes`;
- :527-528 writes `shards.json` from that list alone;
- :535-543 records the rest as `shards_over_budget`.
- On `main` `16779816`, the gate is at :521-522 and the write at :532-533.
- The worker reads only that list. `opensoft/xFactory` `.github/workflows/doc-health-cataloger-worker.yml`:171-175 takes `ids[0]` of `shards.json` and exits 0 when the list is empty. The file is identical at `b2479b6e` (xFactory#481) and at `main`.
- `tests/doc-health/test_semantic_input_budget.py`:503, `test_a_shard_measured_over_the_budget_is_never_dispatched`, asserts that the over-budget shard is not dispatched.
So the amended sentence describes behaviour that already holds, and `code_surface: none` is measured, not assumed.
## The ratification (commit `3a7ba60c`)
Following #1250's pattern (`3cec62fd`), in one commit, so the ratifying commit also carries the approval pair:
- `proposal.md`: `Status: draft` becomes `Status: ratified`, with one `Ratified:` line citing the word, the RULED line and the record;
- `tasks.md`: `Status: ratified` with a `Ratified by:` line; boxes 0.1 and 0.2 ticked with the word;
- `.openspec.yaml`: `approved_by` (Brett Heap, the word verbatim) and `approved_on: 2026-10-07` ADDED after the drafting pair. Every existing field is unchanged, checked by parsing both versions;
- `review/ratification-2026-10-07.md`: the record (`Status: ratified`, `Kind: report`, `Decision date:`, `Ratifier:`, one `Ratified:` citation and the ratified baseline);
- `README.md`: the *Active changes* entry in its ratified form, ending **RATIFICATION ONLY**.
Not moved: `specs/doc-health/spec.md`, the ledger row and the self-gate row.
## Files
- `openspec/changes/amend-worker-input-budget-dispatch-wording/`:
- `.openspec.yaml`: an `ad_hoc` origin written by `proposal-support.py declare-adhoc` with the drafting pair, the approval pair added at ratification, and a `related:` list;
- `proposal.md`, `tasks.md`, `review/ratification-2026-10-07.md`;
- `specs/doc-health/spec.md`, the one delta.
- `README.md`: the *Active changes* entry.
- `tests/doc-health/test_modified_block_currency_self_gate.py`: one `_LEDGER_SUBJECTS` row, with its docstring count and chronology. The carriage arm reports this block once, at INFO (1 of 25 units uncarried, which is the amended sentence). A `**Removed from canon by**` marker was not used, because the marker would be promoted into canon and carry the old sentence with it, which #1262's acceptance 3 forbids.
- `tests/sequenced_after/corpus-ledger.yaml`: the seeded row (`--moved-by '#1264'`).
Registered and not taken (`tasks.md` § 5): a code comment at `scripts/doc_health/catalog_dispatch.py`:527-528 and a test docstring at `tests/doc-health/test_semantic_input_budget.py`:506-508 still echo the old clause. Editing them would give a wording packet a code surface.
## Review
Copilot reviewed each head this PR asked it to:
- `5441182701` at `5b3edf14`: approval recommended, with one low-severity citation fix (`r4205972528`), taken in `5d236d7d`.
- `5441515765` at `3a7ba60c`, the ratifying commit: three non-normative record fixes (`r4206239376`, `r4206239452`, `r4206239504`), taken in `e9c63a18`. None touched requirement or scenario text; the spec delta is still blob `eead8960` and `.openspec.yaml` is unchanged.
- `5441560962` at `e9c63a18`: approval recommended, no findings.
- `5441620162` at `a2761b1f`, this head (after the merge of `main` below): approval recommended, no findings.
Every review thread is answered and resolved: 4 threads, 0 unresolved.
`main` then moved to `a38585e9` (#1266, `correct-naming-families-count`), and this branch took it by merge commit `a2761b1f`, never a rebase. The only conflict was the head of the README *Active changes* list, where both entries are kept, this packet's first, with no byte of either entry changed.
## Gates
Same-kind full clones named `openxFactory`.
**At this head, `a2761b1f`, against `main` `a38585e9`:**
| gate | `main` `a38585e9` | this head |
| --- | --- | --- |
| `validate-openspec-cli-pin.py --all --strict` | exit 0; 113 passed, 1 failed (the accepted `add-chain-attestation` exception), 0 undispositioned | exit 0; 114 passed, the same 1 accepted exception |
| `validate-openspec-cli-pin.py --change amend-worker-input-budget-dispatch-wording` | n/a (exit 2, no such change) | exit 0; 1 passed |
| `proposal-support.py . verify amend-worker-input-budget-dispatch-wording` | exit 0 | exit 0 |
| `validate-code-surface.py`, `validate-target-release.py`, `validate-scope-globs.py` | exit 0 | exit 0 |
| `validate-sequenced-after.py .` | exit 0 (47 active, 19 declaring) | exit 0 (48 active, 20 declaring) |
| `validate-sequenced-after.py . --ledger-diff` | exit 0 (233 rows) | exit 0 (234 rows) |
| `validate-former-id-arrival.py`, `validate-release-tag-gate.py` | exit 0 | exit 0 |
| `doc-health.py --single-repo .` | 31 critical, 22 error, 69 warning, 19 info | 31 critical, 22 error, 69 warning, **20 info**. The one added finding is this block's carriage-ledger INFO, named by the self-gate row. No other line moves: no `ratified-provenance` or `proposal-origin` finding names the ratified packet |
| pytest: `tests/sequenced_after`, `tests/proposal-support`, the self-gate module and `test_semantic_input_budget.py` | | 537 passed |
**Earlier, against `main` `16779816`,** the same validator and doc-health rows held at `24b7862b` (draft), `5b3edf14` (ledger seeded), `3a7ba60c` (ratified) and `e9c63a18`. At `24b7862b` the pytest subset (`tests/doc-health`, `sequenced_after` and nine more gate modules) and the whole suite (`--continue-on-collection-errors`) failed exactly the same ids as `main` (7 and 237, from the clone's uninitialized `openDox` and `openXdox` legs) plus the 4 `sequenced_after` ledger tests that fail until the row is seeded; at `5b3edf14`, with the row seeded, those modules passed (337 tests). CI's `pytest-suite` runs the whole suite with the legs. It was green at `5b3edf14`, and `gh pr checks` reports it at this head.
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Lane: openxfactory-1
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Lane: openxfactory-1
The two words
Brett Heap gave both words on 2026-10-06, in session to lane
openxfactory-1. Both are RULED lines on the estate's lane register, with objectopensoft/openxFactory:openspec/changes/add-worker-input-budget.The ratification.
It answers
tasks.md0.4, "Ratify or amend the two spec deltas". The question was put to him as "task 0.4: (a) ratify the two doc-health deltas as they stand, or (b) amend first", and he chose (a). RULED at 2026-10-06T13:55:03Z (opensoft/brett-wipcommit06709554,lanes/log/openxfactory-1.md).The origin file.
It answers the RULING NEEDED this PR raised on Copilot's finding
r4196698454. Option (i) was put to him as adding.openspec.yamlin the ratifying commit, with values following the 2026-08-25 origin sweepb7513733. RULED at 2026-10-06T17:24:57Z (opensoft/brett-wipcommitf739ab74).This lane has held the change's claim since 2026-09-24T16:33:03Z.
What is ratified
add-worker-input-budget's twodoc-healthspec deltas, as they stand and with no amendment:The ratified text is
specs/doc-health/spec.mdblob9a817d65. That blob is the same at #1137's merge commit9da52e31and onmain. No requirement or scenario text moves in this PR.The origin declaration, on the second word
Why it is needed.
document-lifecycle§ Proposal origin declaration says:This packet had no
.openspec.yaml, and it was the only active change without one.What it declares. The new
openspec/changes/add-worker-input-budget/.openspec.yamlis hand-written in the form of sweepb7513733. Every value is derived from the packet's own record and is folded or plain, so the file parses:schema: spec-driven;created: 2026-09-22, from the packet's true first commit,ee2185d6(2026-09-22T01:26:47Z);origin.kind: ad_hoc. NoStaging ID:header and no staging topic's exit names this change, checked in both directions;origin.id: openxFactory:adhoc:2026-09-22-add-worker-input-budget;reasonthat quotes the second word;openxfactory-1, on "brief a writer to add the input-size guard",proposed_on: 2026-09-22;approved_on: 2026-10-06.What it changes.
proposal-support.py verify add-worker-input-budgetnow passes, wheremainrefuses it with "no origin declaration".proposal-origin's WARNING for the missing origin is gone.What this PR does not do
tasks.mdasks Brett Heap a question. Was "land the input-size guard when green" the approved exception, or should 0.4 have gated 4.1? Neither word answers that question, and the note does not move.code_surface:,target_release:, realization and the sequenced-after ledger row.Every changed line, file by file
openspec/changes/add-worker-input-budget/proposal.md(the front-matter header):Status: draftbecomesStatus: ratified.Ratified: 2026-10-06 by Brett Heap (openxFactory repository owner) — …. The line carries:9da52e31baseline;openspec/changes/add-worker-input-budget/tasks.md:- [ ] 0.4 Ratify or amend the two spec deltas.becomes- [x] 0.4 ….New:
openspec/changes/add-worker-input-budget/.openspec.yaml(52 lines): the declaration described above.README.md(OpenSpec Records > Active changes, theadd-worker-input-budgetentry only):`Status: draft`becomes`Status: ratified`. A parenthetical gives:.openspec.yamladded on his second word, verbatim "Ratify add-worker-input-budget on Brett Heap's word '0.4: (a) ratify as they stand' #1250: (i) add the origin file", RULED 2026-10-06T17:24:57Z".Status: draftis unchanged: …". It now reads: "Resolving the questions ratified neither spec delta; the 2026-10-06 word did (task 0.4). RATIFICATION ONLY — the archive is a separate later act on Brett Heap's word, and the Group 4 sequencing question on 4.1 stays open."New:
openspec/changes/add-worker-input-budget/review/ratification-2026-10-06.md:Status: ratified,Kind: report,Decision date:,Ratifier:, oneRatified:citation and the ratified baseline.ideation/staging/doc-health-sweep-carry-over/doc-health-sweep-carry-over.md(Copilotr4198710846, the first Conflicts bullet only):add-worker-input-budgetisStatus: draft, its two deltas unratified (its task 0.4)" now says the packet isStatus: ratified(task 0.4, Brett Heap's word of 2026-10-06) but still ACTIVE, not archived.Not moved:
specs/doc-health/spec.md;tests/sequenced_after/corpus-ledger.yaml.Precedent followed
c521504c):Status: draftbecomesStatus: ratified, with one citation line in the lifecycle header;Status: ratifiedand the word and the record link;review/ratification-<date>.mdrecord carriesStatus: ratifiedand ONE citation.cd494e4c): the closest case, an in-place ratification of a draft already onmain. Copied: the one-lineRatified:form inside the front-matter, and the record's sections.Decision date:andRatifier:accompany the citation.Ratified:spelling for an in-session ruling. Both citations clear the three-way floor, and each document carries exactly one citation in its 15-line window.b7513733: the.openspec.yamlform, on the second word:createdfrom the true first commit;ad_hocid carrying the created date;reasonderived from the record and checked in both directions;Status:andRatified by:ontasks.mdanddesign.md. The packet has nodesign.md. Itstasks.mdcarries noStatus:header to move, anddocument-lifecycledoes not ruletasks.md.Landing: squash
This PR lands by SQUASH, and only a squash landing conforms to the second word. Option (i) was put as adding the origin file in the ratifying commit. On this branch the ratification is
a93865f0and the origin file is the later commitb3b7db42, so only a squash puts the two into one commit onmain. The record's § 5 says the same.The archive gate's origin-retention walk takes the FIRST commit whose
proposal.mddeclaresStatus: ratifiedas the ratifying commit. A probe on throwaway copies measured two landings:a93865f0, which has no origin, as the ratifying commit, and reads "ORIGIN RETENTION NOT COMPARABLE". The gate does not refuse that, but it leaves no retention baseline.a93865f0as a commit of its own, ahead of the origin file.Observation (no change made)
proposal.md§ Impact says "two requirements MODIFIED, one ADDED". The delta has carried one MODIFIED and one ADDED requirement since its first commit,ee2185d6. The record's § 4 discloses this. It is not corrected here, because it is proposal text.How it was verified
All runs used full clones named
openxFactory. The full set ran at the same time in two same-kind clones:main51456835, and this branch merged with it (9e67f838). The gates and doc-health then ran again onmaine6380965and oncc0fc853. After that, the full set ran a third time onmaine6380965and on60c38a56. All three runs gave the same results. The record's § 5 names each measured tree by sha (Copilotr4198710942).Copilot's review
5433270341at60c38a56raised no inline finding. Its "previously missed" note on record § 5 is answered in7229fde4, which rewrites only the record's landing paragraph to say this PR lands by squash. The gates and doc-health ran again on that tree againstmaine6380965, with identical results. The branch then mergedmainc44c1610, which archivedadd-factory-mcp-conformance(#1252) and touched no byte of this packet. The gates and doc-health ran once more, onmainc44c1610and on that merge,8dbb011e. The results were again identical:verifyexits 1 onmainand 0 on the branch, and doc-health reports 284 against 282 finding lines, the difference being only theproposal-originWARNING. Copilot's review5433389325at8dbb011e(threadr4199425241) asked that record § 5 list every tree measured.6f4e98d1rewrites that list as six runs, each named by sha. The gates and doc-health ran on it againstmainc44c1610, with identical results. Last, the branch mergedmaina2dc658d(#1254, no byte of this packet) as35b17c30, and the gates and doc-health on that merge againstmaina2dc658dwere again identical. Its other note asks to put the Group 4 sentence "is still open even as this line is written" in the past tense. That note is left as it stands, because both briefs keep the Group 4 note untouched and the sentence is anchored to when it was written.Because the carry-over topic changed,
tests/ideation_routingandtests/document_catalogalso ran onmaine6380965and on60c38a56: 86 passed on each.tests/ideation-dashboardcannot be collected in a clone without the openDox and openXdox legs; CI runs it.mainvalidate-openspec-cli-pin.py --all --strictadd-chain-attestation's accepted exception; 0 UNDISPOSITIONEDvalidate-openspec-cli-pin.py --change add-worker-input-budgetvalidate-code-surface.py,validate-target-release.py,validate-scope-globs.pyvalidate-sequenced-after.py ., and with--ledger-diffproposal-support.py . verify add-worker-input-budgetdoc-health.py --single-repo . --as-of 2026-10-06proposal-originWARNING's two lines. No new finding. Themodified-block-currencyINFO, which records the delta's deliberate rewording of canon's "is exactly" bullet, stayspytestovertests/doc-health,sequenced_after,review_lane_pin,proposal-support,code_surface,target_release,packet_reference,citation_remainder,scope_globs,former_id_arrivalandopenspec_cli_pinopenDoxandopenXdoxlegs were not initialized. CI runs the full suiteThe citation checks were proven to read both files, on a throwaway copy:
Ratified:line raised a CRITICALratified-provenancefinding naming the damaged file;Status: recordraised one.The intact files raise none.
🤖 Generated with Claude Code