Skip to content

Ratify add-worker-input-budget on Brett Heap's word '0.4: (a) ratify as they stand' - #1250

Merged
brettheap merged 13 commits into
mainfrom
ratify/add-worker-input-budget
Oct 6, 2026
Merged

brettheap merged 13 commits into
mainfrom
ratify/add-worker-input-budget

Conversation

@brettheap

@brettheap brettheap commented Oct 6, 2026 •

Copy link
Copy Markdown
Contributor

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 object opensoft/openxFactory:openspec/changes/add-worker-input-budget.

  1. 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).

  2. The origin file.

    Ratify add-worker-input-budget on Brett Heap's word '0.4: (a) ratify as they stand' #1250: (i) add 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.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);
  • ADDED: Bounded worker input budget (six 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;
  • origin.id: openxFactory:adhoc:2026-09-22-add-worker-input-budget;
  • a folded reason that quotes the second word;
  • 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:

openspec/changes/add-worker-input-budget/tasks.md:

  • - [ ] 0.4 Ratify or amend the two spec deltas. becomes - [x] 0.4 ….
  • Ten record lines follow it: the word, the question, the RULED line, both requirement names, the 4.1 question staying open, no archive, and the record.

New: openspec/changes/add-worker-input-budget/.openspec.yaml (52 lines): the declaration described above.

README.md (OpenSpec Records > Active changes, the add-worker-input-budget entry only):

  • `Status: draft` becomes `Status: ratified`. A parenthetical gives:
  • 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."

New: openspec/changes/add-worker-input-budget/review/ratification-2026-10-06.md:

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

Not moved:

  • specs/doc-health/spec.md;
  • the Group 4 4.1 note;
  • tests/sequenced_after/corpus-ledger.yaml.

Precedent followed

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:

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: main 51456835, and this branch merged with it (9e67f838). The gates and doc-health then ran again on main e6380965 and on cc0fc853. After that, the full set ran a third time on main e6380965 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 main e6380965, with identical results. The branch then merged main c44c1610, which archived add-factory-mcp-conformance (#1252) and touched no byte of this packet. The gates and doc-health ran once more, on main c44c1610 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 main c44c1610, with identical results. Last, the branch merged main a2dc658d (#1254, no byte of this packet) as 35b17c30, and the gates and doc-health on that merge against main a2dc658d 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 main e6380965 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.

gate main this PR
validate-openspec-cli-pin.py --all --strict exit 0; 1 failed item, add-chain-attestation's accepted exception; 0 UNDISPOSITIONED the same
validate-openspec-cli-pin.py --change add-worker-input-budget exit 0; 1 passed the same
validate-code-surface.py, validate-target-release.py, validate-scope-globs.py exit 0 the same output
validate-sequenced-after.py ., and with --ledger-diff exit 0 the same output; the ledger row does not move
proposal-support.py . verify add-worker-input-budget exit 1, "no origin declaration" exit 0, "proposal support verification ok"
doc-health.py --single-repo . --as-of 2026-10-06 284 finding lines 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;
  • removing the proposal's citation raised one;
  • giving the record Status: record raised one.

The intact files raise none.

🤖 Generated with Claude Code

brettheap and others added 2 commits October 6, 2026 14:36
…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>
Lane: openxfactory-1
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@brettheap
brettheap requested a balanced review from Copilot October 6, 2026 14:40
@brettheap

Copy link
Copy Markdown
Contributor Author

@codex review

@chatgpt-codex-connector

Copy link
Copy Markdown

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.

@sourcery-ai

sourcery-ai Bot commented Oct 6, 2026

Copy link
Copy Markdown

Reviewer's Guide

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.
openspec/changes/add-worker-input-budget/proposal.md
openspec/changes/add-worker-input-budget/tasks.md
openspec/changes/add-worker-input-budget/review/ratification-2026-10-06.md
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!

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

🟡 Changes recommended

The ratified proposal lacks the required origin declaration and approval provenance, leaving strict verification failing.

Review effort: Balanced
Findings: 1 High severity

Open (1)
What changed in this PR

Records ratification of the existing worker-input-budget specification deltas without changing their text.

Changes:

  • Marks the proposal and task 0.4 as ratified.
  • Adds the ratification record and updates the active-change index.
  • Preserves archive and sequencing questions as separate acts.
File Description
README.md Updates the active-change status and ratification summary.
openspec/​changes/​add-worker-input-budget/​proposal.md Changes proposal status and records provenance.
openspec/​changes/​add-worker-input-budget/​tasks.md Completes ratification task 0.4.
openspec/​changes/​add-worker-input-budget/​review/​ratification-2026-10-06.md Adds the detailed ratification record.

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

Comment thread openspec/changes/add-worker-input-budget/proposal.md
brettheap and others added 4 commits October 6, 2026 17:28
…#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>
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>
Lane: openxfactory-1
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@brettheap
brettheap requested a balanced review from Copilot October 6, 2026 17:51
@brettheap

Copy link
Copy Markdown
Contributor Author

@codex review

@chatgpt-codex-connector

Copy link
Copy Markdown

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.

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

The lifecycle transition leaves a staging record stale, and the measurement record inaccurately describes changes after its tested head.

Review effort: Balanced
Findings: 2 Low severity

Open (2)
Resolved since last review (1)

Comment thread openspec/changes/add-worker-input-budget/proposal.md
Comment thread openspec/changes/add-worker-input-budget/review/ratification-2026-10-06.md Outdated
…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>

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

The task record remains internally contradictory, and non-squash landing would violate the origin ruling.

Review effort: Balanced
Findings: None

Resolved since last review (2)
Previously missed (2)

In code that hasn't changed since last review

Medium severity Gate incorrectly permits merge despite split ratification and origin commits

openspec/​changes/​add-worker-input-budget/​review/​ratification-2026-10-06.md:176

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.

Low severity Update 0.4 status wording to past tense after 4.1 landed

openspec/​changes/​add-worker-input-budget/​tasks.md:42

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>
@brettheap
brettheap requested a balanced review from Copilot October 6, 2026 19:05
Lane: openxfactory-1
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

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

The validation history omits the final measured head and is therefore stale.

Review effort: Balanced
Findings: None

Previously missed (1)

In code that hasn't changed since last review

Low severity Update measurement history with latest measured tree

openspec/​changes/​add-worker-input-budget/​review/​ratification-2026-10-06.md:149

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

The persistent measurement record omits two subsequently measured branch heads.

Review effort: Balanced
Findings: 1 Low severity

Open (1)

Comment thread openspec/changes/add-worker-input-budget/review/ratification-2026-10-06.md Outdated
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>
Lane: openxfactory-1
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

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

The lifecycle status, provenance, and dependent records are consistent, with no unresolved code-review findings.

Review effort: Balanced
Findings: None

Resolved since last review (1)

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

Approval depends on externally recorded rulings and squash-only landing semantics that require final human verification.

Review effort: Balanced
Findings: None

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

Correct landing requires squash semantics, and the cited private ruling register could not be independently verified.

Review effort: Balanced
Findings: None

@sonarqubecloud

sonarqubecloud Bot commented Oct 6, 2026

Copy link
Copy Markdown

@brettheap

Copy link
Copy Markdown
Contributor Author

Lane: openxfactory-1

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

@brettheap
brettheap marked this pull request as ready for review October 6, 2026 23:00
@sourcery-ai

sourcery-ai Bot commented Oct 6, 2026

Copy link
Copy Markdown

Sorry @brettheap, you've used your own review budget of 250,000 diff characters for the last 7 days.

You can request another review in 18 hours and 58 minutes by commenting @sourcery-ai review. Upgrade to get a review now.

@brettheap
brettheap merged commit 3cec62f into main Oct 6, 2026
17 checks passed
@brettheap

Copy link
Copy Markdown
Contributor Author

Lane: openxfactory-1

LANDED — lane openxfactory-1, 2026-10-06T23:00:54Z, PR #1250 → 3cec62f (squash commit into opensoft/openxFactory main). Window closed.

brettheap added a commit that referenced this pull request Oct 6, 2026
…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>
brettheap added a commit that referenced this pull request Oct 8, 2026
…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>
@brettheap
brettheap deleted the ratify/add-worker-input-budget branch October 8, 2026 17:37
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