Skip to content

T096: AT-R1 at openDox-code 389e5a4a (RELEASE1_TIP), both halves, with T095's acceptance job; tick T096 (plan 034) - #1241

Merged
brettheap merged 6 commits into
mainfrom
bookkeeping/034-t096-at-r1
Oct 5, 2026
Merged

brettheap merged 6 commits into
mainfrom
bookkeeping/034-t096-at-r1

Conversation

@brettheap

@brettheap brettheap commented Oct 5, 2026 •

Copy link
Copy Markdown
Contributor

Lane: openxfactory-4 (openXfactory-4-openDox_extraction)
Authored by lane openXfactory-3, delegated by lane openxfactory-4 (#656 5987202449)

Plan 034 T096: AT-R1's browser half on the host, at RELEASE1_TIP, with the HTTP half beside it and T095's acceptance job.

  • X, RELEASE1_TIP, is openDox-code 389e5a4a22e1778653dac9f17172de2c18f9f808, T095's landing (openDox-code#75).
  • P, T087's pin, is dede32b4b6f3d0f147d599776f83628c5af8ff3d.
  • T096's falsifier is "the oracle's verdict, which must pass: zero pageerror, and nothing undeclared". Its record is "this run's oracle verdict, and the URL and verdict of T095's acceptance job at the same openDox-code commit", with X's full sha and P beside it.

Housekeeping:

No Rule 6 window. This PR touches nothing under openspec/changes/.

Verdict

# the run where result, quoted
1 AT-R1's browser half, (a) plain-documents and (b) three notes with no front matter openDox-code X 389e5a4a, a fresh clone, quickstart.md § 1's install under the commit's lock, Playwright 1.61.0 with Chromium 149.0.7827.55 PASS, AT-R1 browser half at 389e5a4a…: PASS ((a) PASS; (b) PASS)
2 AT-R1's HTTP half, T095's harness on the host the same commit, its own fresh clone and venv PASS, 314 assertions held
3 T095's acceptance job: a workflow_dispatch of validate.yml on main while main was X (5987619278, Q1) run 37333323932, head_sha 389e5a4a22e1778653dac9f17172de2c18f9f808 (= X), job 111841708700 success, "AT-R1 HTTP half: PASS (314 assertions held)"
4 T099's P-against-X step git diff --quiet dede32b4 389e5a4a -- src/ pyproject.toml migrations/ README.md LICENSE exit 0, so X's runs stand for P: nothing ran at P, and no temporary branch was made. Lane openxfactory-4's own run of the step (15:29:25Z) also exited 0.

The dispatch's gate read main as X at 15:30:06Z (gh api repos/opensoft/openDox-code/commits/main), and the dispatch followed at 15:30:07Z. The acceptance job fetched +389e5a4a…:refs/remotes/origin/main and checked out main. The run's other job, validate (the whole suite), is not part of T096's record.

T096's list, item by item (both repositories unless named):

  • The wheel renders a tile for every station the snapshot fills: (a) 8 / 2 / 1 / 1 / 1 / 1; (b) 3 / 2, plus 2 derived "Candidate:" tiles.
  • The lens renders the radar with the documents as dots, 8 of 8 and 3 of 3, with no "nothing on the radar", and offers neither seed action (R1Q19 (a)).
  • The workbench opens from a grouping tile's workbench verb. Before any turn, its chat rail shows "No model configured. To configure one, declare a model binding with "opendox model-binding add" …".
  • A turn is refused model_capability_unavailable (HTTP 403), and the rail withholds Send, naming why.
  • The editors: both open and accept edits. Create is refused by name: no create control is offered, and the plane note names creating a document and Save. Save is refused by name with GATELESS_SAVE_REFUSAL, and nothing is written.
  • The oracle: zero pageerror, nothing undeclared, and no 5xx. Each of the three declarations is satisfied exactly: /views/intent-feed.js, /snapshot-index.json and /project-register.json, "4 observed / 4 declared across 3 declaration(s)".

What this PR records, in plan 034 only

  • evidence/at-r1/ (new):

    • oracle-verdict.md, the record;
    • run-at-r1.sh and at_r1_browser.py, the runbook and the driver, each as run but for its review fixes (three in the runbook, one in the driver). The record names the as-run sha256 of each, which this PR's first commit holds, beside the current one;
    • x/, the run at X. It holds the verdict lines, the commit and the install, acceptance-job.txt, the HTTP half's log and the resolved dependency set. For each repository it also holds the driver's log (the oracle's printed verdict), every check with its evidence, and the screenshots of steps 1–4;
    • SHA256SUMS, covering every file of the run.

    Every host path in the run's files is replaced by a placeholder, so no committed file names a host path (Principle IV). Byte-identical screenshots are stored once, and screenshots.txt maps every screenshot name to its stored file. No file holds the console token's value: each pass scans its own record for it.

  • tasks.md: T096 is ticked, with a **Landed** bullet. 86 of 96 boxes are ticked on main, and 87 here.

  • plan.md: the evidence tree lists at-r1/, and the paragraph under it names T096.

  • README.md: the feature entry's evidence list links the record, after T089's.

Ruled before this PR (the holder, 5987619278)

  1. Q1, T095's job "at X". It is a workflow_dispatch of validate.yml on main while main was X. The run's URL, its head_sha (equal to X) and the acceptance verdict are recorded. Multi-parent project membership: a repo may live in many projects (dashboard-project-scoping D8) #75's last PR run does not stand in.
  2. Q2, "a refusal declared to the oracle". The record carries a non-normative note: the create and Save refusals are refused by name, with no browser signal. Save's click sends no request, and create offers no control, so nothing is undeclared. spec.md and the plan are not reworded, and T097 lists the note with research R16's corrections.
  3. Q3. T089 lands first, and this PR is based on main after it.

Two observations, unchanged since t096-dry, move no verdict. In (b), the wheel adds 2 derived "Candidate:" tiles while the candidate station is unfilled. Save's refusal note reads "Outline: Save refused" even when another buffer is active.

Review round 1 (Copilot at f632d70c): one finding, accepted and fixed in 95271efd

  • r4185918186 (High): run-at-r1.sh documented "a full or short sha, or a ref", but required the checked-out sha to start with the argument, so run-at-r1.sh main was refused after a good checkout.
    • The fix: the argument is resolved with git rev-parse --verify "<arg>^{commit}", the checkout must land on that commit, and only an abbreviated sha keeps the prefix check.
    • The test, from a fresh clone: main, 389e5a4a and the full sha all check out, and nosuchref is refused by name. The as-run file reproduces the finding.
    • T096's run passed X's full sha, so no recorded step changes. Answered and resolved.

Review round 2 (Copilot at 95271efd): Findings None; two previously-missed items

  • The runbook named a host-absolute path: the GNU grep it called, against the constitution's Principle IV, which says "use repo-relative paths or runtime resolution". A comment also spelled the process table's path. Fixed in 1df862ac.
    • GNU grep is now the first grep on the PATH that reports itself as GNU grep.
    • The comment now says what it means without the path.
    • The browser half, run again at X with that file, gives the same check results.
    • The absolute paths that remain are the env shebang, the null device, and two libpq socket locations in the harness's own log, quoted verbatim as its assertion ids. None of them is a path of this host.
  • T095's box is still open while T096 is ticked. T095 is lane openxfactory-4's task, and its tick is that lane's bookkeeping, as phase 3 ticks: T076, T086, T087, T101 and T104 (plan 034) #1235 ticked T076, T086, T087, T101 and T104. This PR is delegated for T096 only and leaves T095's box alone.

Review round 3 (Copilot at 1df862ac): one finding, accepted and fixed in 6f0f5381

  • r4186065384: where the commit supplies its own harness, the runbook recorded the checkout's status after the harness but never refused a modified one.
    • It now stops when that status is not empty.
    • The run's x/tree-after-harness.txt is empty, and the HTTP half, run again at X, passes with 314 assertions held.
    • Answered and resolved.

Review round 4 (Copilot at 6f0f5381): Findings None; one previously-missed item, fixed in 318d99c2

  • The editors check computed whether the Outline buffer was typed into, but never required it. It now requires the Outline editor as well as a document editor.
  • The run's recorded results meet the stricter check (outline_typed is true in both repositories), and the browser half, run again at X with that driver, passes 18 of 18 checks in both.

Review round 5 (Copilot at 5c663a7e): two findings, answered and resolved with no push

Neither finding touches the record's correctness, so this head stays as it is.

  • r4186202361 (Medium): git diff --quiet exits above 1 on an error, and the runbook records that status rather than refusing it.
    • In T096's run, both commits were present and the step exited 0 (x/commit.txt).
    • The wrapper that made the run checks both commits before the diff. It treats any non-zero status, an error included, as "build inputs differ", which re-runs both halves at P.
    • Answered (4186321172) and resolved.
  • r4186202500 (Low): the runbook leaves its scratch directory.
    • OUT defaults to a directory inside it, so removing it would remove the record.
    • The teardown the record asserts is R1Q16 (iv)'s, not the scratch directory's removal.
    • Answered (4186321635) and resolved.
  • The review's overview also says this PR "commits unsanitized host paths", with no finding behind it. A scan of every added text line at this head finds no host path. The only system-rooted paths are the four that round 2 names: the env shebang, the null device, and the two libpq socket locations.

Validation, at this head (5c663a7e) against main f2acc88c

  • python3 scripts/validate-openspec-cli-pin.py --all --strict (pinned CLI 1.12.0): rc 0, Totals: 110 passed, 1 failed (111 items), 0 UNDISPOSITIONED failures. The one failure is the accepted add-chain-attestation exception, as on main.
  • doc-health --single-repo . --as-of 2026-10-05, in one clone named openxFactory, at main f2acc88c and at this branch, and at each earlier head against main a43845e6: delta zero. Both read 31 critical, 22 error, 69 warning, 20 info, and the report bodies are byte-identical.
  • Tests that read plan 034's files: none. git grep -nE 'specs/034|opendox-standalone-operation' -- tests scripts .github finds nothing, and this PR touches no code.
  • Shas: every sha the diff cites resolves, 18 of 18: 16 in openDox-code, and 2 (504324de, e1e3a3c3) in opensoft/openDox.
  • Scans: a scan of the commit message and this body finds no closing keyword and no Arc: line, and a scan of the diff finds no host path and no token value.
  • The required checks at this head, read from its check-runs: all eight succeed.
  • SonarCloud (not a required check): its quality gate fails on new code, at Reliability D and Security C. Its 41 issues are on the runbook and the driver:
    • 36 are shell style ("use [[").
    • 3 are "path traversal via CLI arguments", on the driver's own file arguments, which the runbook supplies.
    • 1 is an assert inside a try whose handler exits 2 with no verdict. The runbook records that as "the driver reached no verdict", so a failed assertion can never pass.
    • 1 is STEP[0], a step label, written twice in a row.
    • None changes a recorded result, so the two files stay as run but for their review fixes.

🤖 Generated with Claude Code

…n 034)

evidence/at-r1/ records AT-R1's browser half, driven with Playwright
through the file:// URL the start printed and judged by openDox-code's
tests/smoke_signals.py at X. Beside it are the HTTP half, run at the same
commit with T095's harness, and T095's acceptance job: a workflow_dispatch
of validate.yml on main while main was X (run 37333323932, head_sha X, job
111841708700: success), on the holder's ruling 5987619278. X is T095's
landing commit 389e5a4a22e1778653dac9f17172de2c18f9f808; P, T087's pin, is
dede32b4b6f3d0f147d599776f83628c5af8ff3d. T099's P-against-X step exits 0,
so X's runs stand for P.

The browser half: PASS in both repositories, zero pageerror, nothing
undeclared, no 5xx. The HTTP half: PASS, 314 assertions held, on the host
and in the acceptance job alike.

tasks.md ticks T096 with its Landed bullet; plan.md's evidence tree and the
feature's README entry list the record. Bookkeeping: no Arc trailer
(R1Q20 (a)).

Lane: openxfactory-3

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Copilot AI balanced review requested due to automatic review settings October 5, 2026 15:43
@sourcery-ai

sourcery-ai Bot commented Oct 5, 2026

Copy link
Copy Markdown

Reviewer's Guide

This bookkeeping PR records T096's AT-R1 validation at openDox-code RELEASE1_TIP, combining a reproducible Playwright browser run, the 314-assertion HTTP run, T095's matching acceptance job, and P-against-X provenance, then links the evidence and marks the task landed in the feature documentation.

Sequence diagram for T096 release validation

sequenceDiagram
    participant Runbook as AT-R1 runbook
    participant Browser as Playwright browser
    participant HTTP as HTTP harness
    participant GitHub as GitHub acceptance job
    participant Oracle as Oracle
    Runbook->>Browser: run_at_r1
    Browser-->>Oracle: browser verdict
    Runbook->>HTTP: run HTTP half
    HTTP-->>Oracle: 314 assertions held
    Runbook->>GitHub: workflow_dispatch
    GitHub-->>Oracle: acceptance success
    Runbook->>Oracle: record P-against-X diff
    Oracle-->>Runbook: PASS, zero pageerror, nothing undeclared
Loading

File-Level Changes

Change Details Files
Adds a complete, reproducible AT-R1 release evidence record covering browser and HTTP validation at the pinned openDox-code commit.
  • Add the browser driver and shell runbook, including Playwright workflows for two repository fixtures, UI behavior checks, token handling, cleanup, and oracle evaluation.
  • Record the X commit, P comparison, HTTP harness output, acceptance-job provenance, dependency freeze, per-step results, screenshots, logs, and checksums.
  • Document PASS results for rendering, lens/workbench behavior, model refusal, editor usability, create/Save refusals, zero page errors, declared requests, and no 5xx responses.
specs/034-opendox-standalone-operation/evidence/at-r1/at_r1_browser.py
specs/034-opendox-standalone-operation/evidence/at-r1/run-at-r1.sh
specs/034-opendox-standalone-operation/evidence/at-r1/oracle-verdict.md
specs/034-opendox-standalone-operation/evidence/at-r1/SHA256SUMS
specs/034-opendox-standalone-operation/evidence/at-r1/x/
Updates feature documentation and task tracking to link and describe the landed T096 evidence.
  • Add the at-r1 evidence directory to plan.md's inventory and explain its recorded verdict.
  • Tick T096 in tasks.md with a Landed entry covering browser, HTTP, acceptance-job, and P-against-X results.
  • Link the T096 oracle record from the feature entry in README.md.
README.md
specs/034-opendox-standalone-operation/plan.md
specs/034-opendox-standalone-operation/tasks.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 runbook advertises ref inputs but rejects them after checkout.

Review effort: Balanced
Findings: 1 High severity

Open (1)
What changed in this PR

Records T096’s AT-R1 browser and HTTP acceptance evidence at RELEASE1_TIP, then updates feature bookkeeping and indexes.

Changes:

  • Adds reproducible AT-R1 runbook, browser driver, logs, screenshots, and checksums.
  • Records successful browser, HTTP, and GitHub Actions acceptance verdicts.
  • Marks T096 complete and links its evidence.
File Description
README.md Links T096 evidence.
specs/​034-opendox-standalone-operation/​plan.md Adds AT-R1 evidence inventory.
specs/​034-opendox-standalone-operation/​tasks.md Marks T096 landed.
evidence/​at-r1/​SHA256SUMS Checksums all run artifacts.
evidence/​at-r1/​at_r1_browser.py Implements browser acceptance driver.
evidence/​at-r1/​oracle-verdict.md Documents the acceptance verdict.
evidence/​at-r1/​run-at-r1.sh Automates both acceptance halves.
evidence/​at-r1/​x/​a/​a-1-load.png Repository A load evidence.
evidence/​at-r1/​x/​a/​a-2-wheel.png Repository A wheel evidence.
evidence/​at-r1/​x/​a/​a-3a-lens-on-open.png Repository A initial lens evidence.
evidence/​at-r1/​x/​a/​a-3b-lens-all-checked.png Repository A populated lens evidence.
evidence/​at-r1/​x/​a/​a-4a-wheel-grouping-verbs.png Repository A grouping actions.
evidence/​at-r1/​x/​a/​a-4b-workbench-open.png Repository A workbench evidence.
evidence/​at-r1/​x/​a/​a-4d-chat-after-turn.png Repository A chat refusal evidence.
evidence/​at-r1/​x/​a/​a-4e-editors-typed.png Repository A editor evidence.
evidence/​at-r1/​x/​a/​a-4g-save-refused.png Repository A save refusal.
evidence/​at-r1/​x/​a/​a-lens-controls.json Repository A lens controls.
evidence/​at-r1/​x/​a/​a-result.json Repository A detailed results.
evidence/​at-r1/​x/​a/​a-wheel-tiles.json Repository A wheel inventory.
evidence/​at-r1/​x/​a/​a-workbench-controls.json Repository A workbench controls.
evidence/​at-r1/​x/​a/​a-workbench-text.txt Repository A workbench text.
evidence/​at-r1/​x/​a/​b3-hint.txt Repository A hint result.
evidence/​at-r1/​x/​a/​browser.rc Repository A browser exit code.
evidence/​at-r1/​x/​a/​catalog.json Repository A model catalog.
evidence/​at-r1/​x/​a/​console-url.txt Repository A sanitized console URL.
evidence/​at-r1/​x/​a/​driver.log Repository A browser log.
evidence/​at-r1/​x/​a/​failed.txt Repository A failed-check record.
evidence/​at-r1/​x/​a/​http-checks.txt Repository A HTTP summary.
evidence/​at-r1/​x/​a/​leftover.txt Repository A process cleanup result.
evidence/​at-r1/​x/​a/​screenshots.txt Repository A screenshot mapping.
evidence/​at-r1/​x/​a/​server.stderr Repository A server errors.
evidence/​at-r1/​x/​a/​server.stdout Repository A server output.
evidence/​at-r1/​x/​a/​token-scan.txt Repository A token-leak result.
evidence/​at-r1/​x/​b/​b-1-load.png Repository B load evidence.
evidence/​at-r1/​x/​b/​b-2-wheel.png Repository B wheel evidence.
evidence/​at-r1/​x/​b/​b-3a-lens-on-open.png Repository B initial lens evidence.
evidence/​at-r1/​x/​b/​b-3b-lens-all-checked.png Repository B populated lens evidence.
evidence/​at-r1/​x/​b/​b-4a-wheel-grouping-verbs.png Repository B grouping actions.
evidence/​at-r1/​x/​b/​b-4b-workbench-open.png Repository B workbench evidence.
evidence/​at-r1/​x/​b/​b-4d-chat-after-turn.png Repository B chat refusal evidence.
evidence/​at-r1/​x/​b/​b-4e-editors-typed.png Repository B editor evidence.
evidence/​at-r1/​x/​b/​b-4g-save-refused.png Repository B save refusal.
evidence/​at-r1/​x/​b/​b-lens-controls.json Repository B lens controls.
evidence/​at-r1/​x/​b/​b-result.json Repository B detailed results.
evidence/​at-r1/​x/​b/​b-wheel-tiles.json Repository B wheel inventory.
evidence/​at-r1/​x/​b/​b-workbench-controls.json Repository B workbench controls.
evidence/​at-r1/​x/​b/​b-workbench-text.txt Repository B workbench text.
evidence/​at-r1/​x/​b/​b3-hint.txt Repository B hint result.
evidence/​at-r1/​x/​b/​browser.rc Repository B browser exit code.
evidence/​at-r1/​x/​b/​catalog.json Repository B model catalog.
evidence/​at-r1/​x/​b/​console-url.txt Repository B sanitized console URL.
evidence/​at-r1/​x/​b/​driver.log Repository B browser log.
evidence/​at-r1/​x/​b/​failed.txt Repository B failed-check record.
evidence/​at-r1/​x/​b/​http-checks.txt Repository B HTTP summary.
evidence/​at-r1/​x/​b/​leftover.txt Repository B process cleanup result.
evidence/​at-r1/​x/​b/​screenshots.txt Repository B screenshot mapping.
evidence/​at-r1/​x/​b/​server.stderr Repository B server errors.
evidence/​at-r1/​x/​b/​server.stdout Repository B server output.
evidence/​at-r1/​x/​b/​token-scan.txt Repository B token-leak result.
evidence/​at-r1/​x/​acceptance-job.txt Records GitHub Actions acceptance job.
evidence/​at-r1/​x/​commit.txt Records commits and environment.
evidence/​at-r1/​x/​http-half.log Full HTTP acceptance log.
evidence/​at-r1/​x/​http-half.rc HTTP-half exit code.
evidence/​at-r1/​x/​tree-after-harness.txt Checkout cleanliness result.
evidence/​at-r1/​x/​venv-freeze.txt Installed dependency set.
evidence/​at-r1/​x/​verdict.txt Consolidated acceptance verdict.

💡 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/evidence/at-r1/run-at-r1.sh Outdated
Copilot AI balanced review requested due to automatic review settings October 5, 2026 15:49
…the checkout (plan 034)

Copilot r4185918186: run-at-r1.sh documented "a full or short sha, or a
ref" but then required the checked-out sha to start with the argument, so
a ref such as main was refused after a good checkout. The argument is now
resolved with rev-parse --verify "<arg>^{commit}", the checkout must land
on that commit, and only an abbreviated sha is still held to be a prefix.
T096's run passed X's full sha, which both forms accept; the record names
the as-run bytes (sha256 702e2a4b, this PR's first commit) beside the new
ones, and SHA256SUMS covers the file as it now stands.

Lane: openxfactory-3

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 record retains prohibited host-absolute paths and leaves the completed T095 predecessor unchecked.

Review effort: Balanced
Findings: None

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

In code that hasn't changed since last review

Medium severity Hard-coded /usr/bin/grep violates host-path portability rules

specs/​034-opendox-standalone-operation/​evidence/​at-r1/​run-at-r1.sh:59

Hard-coding /usr/bin/grep violates the repository's no-host-absolute-path rule (.specify/memory/constitution.md:72-73) and makes the runbook host-layout dependent. Resolve the intended GNU executable at runtime instead, then update the recorded runbook digest and checksums.

This issue also appears on line 334 of the same file.

Medium severity T096 completed while predecessor T095 remains unchecked

specs/​034-opendox-standalone-operation/​tasks.md:4358

T096 is marked complete while its explicit predecessor T095 remains unchecked at line 4312, even though this PR records openDox-code#75 as landed and its acceptance job as successful. This leaves the task ledger internally inconsistent and will permanently undercount completed work unless T095 is also ticked with its landing evidence.

Copilot AI balanced review requested due to automatic review settings October 5, 2026 15:57
… no host path (plan 034)

Copilot's second review, in its previously-missed list: run-at-r1.sh named
one host-absolute path, the GNU grep it called, against the constitution's
Principle IV ("use repo-relative paths or runtime resolution"), and one
comment spelled the process table's path. GNU grep is now the first grep on
the PATH that reports itself as GNU grep, with the PATH's own grep as the
fallback, and the comment says what it means without the path. On the run's
host that is the same program, and the browser half run again at X with the
file as it now stands gives the same check results in both repositories.
The record names the change and the file's new sha256, and SHA256SUMS
covers it.

Lane: openxfactory-3

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

🟡 Changes recommended

The evidence retains prohibited host-absolute paths, and the runbook can continue against a checkout modified by its HTTP harness.

Review effort: Balanced
Findings: 1 High severity

Open (1)

Comment thread specs/034-opendox-standalone-operation/evidence/at-r1/run-at-r1.sh
Copilot AI balanced review requested due to automatic review settings October 5, 2026 16:04
…lean (plan 034)

Copilot r4186065384: where the commit under test supplies its own harness,
run-at-r1.sh recorded the checkout's status after the harness but never
refused a modified one, so the browser half could install a tree other
than the commit's. It now stops (exit 2) when that status is not empty, as
the copied-harness branch already did after its restore. The run's
x/tree-after-harness.txt is empty, and the HTTP half run again at X with
this file passes (314 assertions held). The record names the change and
the file's new sha256, and SHA256SUMS covers it.

Lane: openxfactory-3

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 browser falsifier can pass when the required Outline editor is entirely absent.

Review effort: Balanced
Findings: None

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

In code that hasn't changed since last review

Medium severity Require the Outline editor in the acceptance predicate

specs/​034-opendox-standalone-operation/​evidence/​at-r1/​at_r1_browser.py:492

This check can pass when the Outline editor is missing entirely: not_typed only covers labels that were offered, while len(documents) >= 1 validates only a document buffer; the computed outline result is never used. Require outline in the predicate so the AT-R1 falsifier cannot accept a one-editor regression.

…lan 034)

Copilot's fourth review, in its previously-missed list: at_r1_browser.py's
editors check computed whether the Outline buffer was typed into but never
required it, so a run with the Outline editor absent would pass on one
document editor. The check now requires the Outline editor as well as a
document editor. The run's recorded results meet it (outline_typed is true
in both repositories), and the browser half run again at X with this
driver passes 18 of 18 checks in both. The record names the change and the
file's new sha256, and SHA256SUMS covers it.

Lane: openxfactory-3

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Copilot AI balanced review requested due to automatic review settings October 5, 2026 16:12
main moved by Q-GRC-4 bookkeeping 2 (#1240), which touches no file of this PR.

Lane: openxfactory-3

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

🟡 Changes recommended

The runbook can accept an invalid comparison, leaves its scratch tree behind, and commits unsanitized host paths.

Review effort: Balanced
Findings: 1 Medium severity · 1 Low severity

Open (2)

Comment thread specs/034-opendox-standalone-operation/evidence/at-r1/run-at-r1.sh
Comment thread specs/034-opendox-standalone-operation/evidence/at-r1/run-at-r1.sh
@sonarqubecloud

sonarqubecloud Bot commented Oct 5, 2026

Copy link
Copy Markdown

Quality Gate Failed Quality Gate failed

Failed conditions
D Reliability Rating on New Code (required ≥ A)
C Security Rating on New Code (required ≥ A)

See analysis details on SonarQube Cloud

Catch issues before they fail your Quality Gate with our IDE extension SonarQube for IDE

@brettheap
brettheap marked this pull request as ready for review October 5, 2026 16:39
@sourcery-ai

sourcery-ai Bot commented Oct 5, 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 4 days and 4 hours by commenting @sourcery-ai review. Upgrade to get a review now.

@brettheap

Copy link
Copy Markdown
Contributor Author

READY (holder's manual landing, Copilot label and SonarCloud gate judged) at 5c663a7 — Lane: openxfactory-4 (openXfactory-4-openDox_extraction)

Holder: lane openXfactory-3's D6, T096: AT-R1's browser half on the host, at X = openDox-code 389e5a4a (RELEASE1_TIP). It is evidence and bookkeeping, with no Arc: trailer (R1Q20 (a)), and it ticks T096.

  • The verdict at X: PASS (5998374840).
    • HTTP half: 314 assertions held.
    • Browser half: (a) PASS and (b) PASS, at every T096 point, with 0 pageerror, nothing undeclared and 0 5xx.
    • The acceptance dispatch on main with head_sha == X (run 37333323932, job 111841708700) succeeded.
    • P against X: git diff --quiet dede32b4 389e5a4a -- src/ pyproject.toml migrations/ README.md LICENSE gave exit status 0, so no re-run at P was needed. The holder's T099 cut check reproduced it independently (record check-dede32b4-389e5a4a-20261005T152901Z).
    • No token: each pass's token-scan.txt reads "no file of this pass's record holds the token's value", and the console URL is a private file:// path.
  • Copilot's review at the head says "Changes recommended". Its 2 findings concern the runbook script, and the holder rules both ACCEPTED LIMITS under the convergence rule (5988818366). Both threads are answered and resolved.
    • r4186202361, abort when the comparison cannot resolve: in this run both commits resolved, and the diff exited 0.
    • r4186202500, the scratch directory is left in place: it holds the record (OUT = $W/out).
  • SonarCloud's quality gate fails, which the holder rules non-blocking. Every finding is in the recorded evidence scripts, at_r1_browser.py and run-at-r1.sh. They stay byte-identical to what ran (SHA256SUMS). None weakens the verdict:
    • S5779: the assert inside the try is caught and exits "ERROR before the drive", never a PASS;
    • S4143: a dead store to STEP[0], the step label;
    • S8707: operator-supplied CLI paths to a local driver, not shipped code;
    • the rest are style findings.
  • The other gates. pytest-suite and every other check pass; 0 unresolved threads; no closing keyword.
  • What follows. T097 (T097, release 1's bookkeeping (plan 034) #1233), release 1's bookkeeping, lands last under a Rule 6 window. Its final round carries the T096 R16 note.

@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-10-05T16:42:36Z, PR #1241 into opensoft/openxFactory main

@brettheap
brettheap merged commit 8a37a08 into main Oct 5, 2026
17 of 18 checks passed
@brettheap

Copy link
Copy Markdown
Contributor Author

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

LANDED — lane openxfactory-4, 2026-10-05T16:42:59Z, PR #1241 → 8a37a08 (opensoft/openxFactory main; squash)

@brettheap

Copy link
Copy Markdown
Contributor Author

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

Correction to the holder's READY (5998878651), found by lane openXfactory-3's D1 audit. The READY said that the evidence scripts "stay byte-identical to what ran (SHA256SUMS)". That is wrong.

  • main (8a37a087) holds the REVIEWED run-at-r1.sh (8ba962fd…) and at_r1_browser.py (e5ce78d6…). evidence/at-r1/SHA256SUMS on main fixes those files as they stand there.
  • The bytes that RAN are 702e2a4b… and 763b5919…. The record names them by their sha256, and they live at f632d70c, which is reachable after the squash only through refs/pull/1241/head (5c663a7e).

The rulings in the READY stand:

  • SonarCloud's findings stay non-blocking. They are in the reviewed scripts on main, and the verdict came from the run's own bytes.
  • Copilot's two runbook findings stay accepted limits.

T097 (#1233) records the reachability as an R16 note (5999158107, ruled on #656).

brettheap added a commit that referenced this pull request Oct 5, 2026
…007 and T097 (plan 034)

The last landings of release 1: T095 (openDox-code#75 -> 389e5a4a, X),
T096 (#1241 -> 8a37a08) and T099, the publish at the cut and the root
README PR (openDox#19 -> d77f8cbf).

#1144's tasks.md: 10.3 is ticked with its note. T076 (openDox#17)
documents the install and the start, T101 (openDox-code#78 and
openDox-code#79) adds the release workflow and the version bump, and
T099 publishes that commit. The annotated tag v0.1.0 names dede32b4.
openDox-code's release run 37339111713 succeeds in all four jobs, among
them "publish to PyPI" with its step "PyPI serves the files the build
job verified". PyPI serves the wheel and the sdist of opendox 0.1.0. The
file is a fresh re-apply onto main's (8a37a08, the same as f2acc88's
for this file). box_census.py reads 105 [ ], 11 [x] and 9 [~] at main,
and 42, 74 and 9 after: all 63 release-1 boxes that a realization task
closes.

Plan 034's tasks.md, on the holder's rulings (the delegation of
2026-10-05T16:37:31Z, and 5999175092, (a), (a) and (a)), each with a
Landed or Done bullet in #1226's form:
- T095: the harness, its dispatched acceptance run 37333323932 at X;
- T099: P against X, the tag, the release run, PyPI's two files and
  openDox#19;
- T002: the 45 claims cited, and the five slices without one named, in
  T091's form; nothing is back-filled;
- T007: batches A to P landed, and its status sentence says so;
- T097: the census, R16's corrections, and two non-normative notes, the
  T096 refusals ("refused by name, with no browser signal") and the
  reachability of #1241's first commit, f632d70.
92 of plan 034's 96 tasks are ticked; T090 to T093 tick at the arc's
close.

Lane: openxfactory-3

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
brettheap added a commit that referenced this pull request Oct 5, 2026
Lane: openxfactory-4 (openXfactory-4-openDox_extraction)
Authored by lane openXfactory-3, delegated by lane openxfactory-4 (#656 5984809190)

**Plan 034 T097, release 1's bookkeeping.** This PR ticks all 63 release-1 boxes of #1144's `tasks.md` (`add-neutral-product-standalone-operability`) that a realization task closes, each with its evidence note, and records research R16's non-normative corrections. Its After set has landed: batch P (#1230), T096 (#1241 → `8a37a087`) and T099 (the publish at the cut, and openDox#19 → `d77f8cbf`). On the holder's rulings it also ticks plan 034's T095, T099, T002, T007 and T097, each with its bullet, so plan 034 closes at 92 of its 96 tasks. T090 to T093 tick at the arc's close.

- Bookkeeping, so it carries no `Arc:` trailer (R1Q20 (a), `5817152735`; T091) and no closing keyword. It touches `openspec/changes/`, so lane openxfactory-4 lands it under a Rule 6 `LANDING`/`LANDED` window.
- **Based on `main` `8a37a087`** (#1241, T096), merged in by `0cde3961`. The PR was first based on `c8d80020` (#1232). The merges since are listed below. Its commits:
  - `76d8ff37`: the ticks, the notes and R16;
  - `b7f49673` and `e2efb3a1`: from Copilot's review (below), which edit note text only;
  - `bd32ea9c`: the merge of `main` after batch P landed;
  - `cf2c6bdc`: 16.3a's tick, on the T100 follow-on's landing (openDox-code#86 → `651c35fe`);
  - `5870cd00`: 4.3's and 9.2's ticks, on T086's landing (openXdox-code#37 → `56e1c238`);
  - `23665543`: 5.5's note reworded (Copilot at `5870cd00`), note text only;
  - `96c74eab`: the merge of `main` after T094 and T098 landed;
  - `935164af`: 3.3's tick, on T098's landing (openxFactory#1237 → `20ce593e`);
  - `e93ab9fb`: 5.4a's note reworded (Copilot at `935164af`), note text only;
  - `f6c6dc3c`: the merge of `main` after T089 landed;
  - `e873b25f`: F4.1's, F5.2's and F16.1's ticks, on T089's landing (openxFactory#1238 → `fab575ad`);
  - `9759313b`: the merge of `main` `f2acc88c`;
  - `10b6ba05`: the phase-1 and phase-2 checkpoint citations by path (below), note text only;
  - `0cde3961`: the merge of `main` after T096 landed;
  - `f94be2fd`: 10.3's tick, on T099's publish, and plan 034's ticks (below);
  - `9713f991`: plan 034's opening status, which still said batch P was to land (Copilot at `f94be2fd`, below), plan text only.

  If `main` moves before the landing, I merge it in. No rebase and no force-push.

## Measured, not copied

Lane 4's table (2026-10-03T20:05Z, at `de2ab703`: 52 CLOSED-LANDED, 11 PENDING, 5 LEFT-OPEN, 2 ALREADY-TICKED) was regenerated by its own generator, patched, at `c8d80020`, at `ba6bb870`, and again after each closing landing:

- every landing PR, now 115 across the six repositories, re-read with `gh pr view <n> -R opensoft/<repo> --json state,mergeCommit,mergedAt`, last at 2026-10-05T16:50Z. Since the first reading these have landed: #1230 (batch P, `ba6bb870`), openDox-code#84 (T104, which realizes no box, `32943cbf`), openDox-code#86 (the T100 follow-on, `651c35fe`), openDox-code#78 and openDox-code#79 (T101, `d59f3f26` and `dede32b4`), openDox#17 (T076, `504324de`), openDox#18 (T087, `e1e3a3c3`), openXdox-code#37 (T086, `56e1c238`), openXdox#22 (T094's openXdox root step, `9564d5d9`), #1234 (T094's ahead PR, `ca1c1486`), #1235 (phase 3's plan ticks, `70602a0a`), #1236 (T094, `36908480`), #1237 (T094/T098, `20ce593e`), #1238 (T089, `fab575ad`), openDox-code#75 (T095, which realizes no box, `389e5a4a`) and openDox#19 (T099's root README, `d77f8cbf`);
- every task's landing re-read from plan 034's own `Landed:` bullet (78 of 96 tasks ticked at `c8d80020` and `ba6bb870`, 85 at `20ce593e`, 86 at `a43845e6`, 87 at `8a37a087`), and each run record traced to the openxFactory PR that added it: `checkpoint-phase1.md` (#1204 → `9d2e5bc3`), `checkpoint-phase2.md` (#1218 → `a883bbf6`), `f10.1-run.md` (#1223 → `f261fefa`), `f13.1-run.md` (#1224 → `de2ab703`), `f16.1-run.md` (#1231 → `0e01ca85`), `f11.1-phase3.txt` (#1237 → `20ce593e`), `checkpoint-phase3.md` (#1238 → `fab575ad`) and `at-r1/oracle-verdict.md` (#1241 → `8a37a087`). The T100 follow-on, which is no task, is read from the forge;
- batch P's text read at #1230's heads `84113a44` and `d08249a2`, and as it landed (`ba6bb870`, the squash of its head `051f9945`).

**Result: 63 CLOSED-LANDED, 0 PENDING, 5 LEFT-OPEN and 2 ALREADY-TICKED, of 70.** Since lane 4's table:

- T082 (openDox-code#76 → `ca9e1bd5`), T100 (openDox-code#82 → `38d3350e`), T102 (openDox-code#81 → `0116293a`) and T083 (openxFactory#1231 → `0e01ca85`) have landed. That closes 16.4, 16.5 and 16.6.
- The T100 follow-on (openDox-code#86 → `651c35fe`) has landed. That closes 16.3a.
- T086 (openXdox-code#37 → `56e1c238`) has landed. That closes 4.3 and 9.2.
- T098 (openxFactory#1237 → `20ce593e`), phase 3's interim F11.1, has landed. That closes 3.3 (below).
- T089 (openxFactory#1238 → `fab575ad`), phase 3's checkpoint, has landed. That closes F4.1, F5.2 and F16.1 (below).
- T076 (openDox#17 → `504324de`) and T101 (openDox-code#78 → `d59f3f26`, openDox-code#79 → `dede32b4`) have landed.
- T095 (openDox-code#75 → `389e5a4a`) and T096 (#1241 → `8a37a087`), AT-R1's two halves, have landed. They close no box of #1144.
- T099 has published `opendox` 0.1.0, and its root README PR has landed (openDox#19 → `d77f8cbf`). That closes 10.3 (below), the last box.

Batch P closes and rewords no box. In #1144's `tasks.md` it only inserts addenda at the ends of 12.4a, 16.3a and F16.1: no box line moves and no box changes state. Since `ba6bb870`, no landing has touched #1144's `tasks.md`. In plan 034's `tasks.md`, T097's own text is unchanged.

## The census

`python3 box_census.py openspec/changes/add-neutral-product-standalone-operability/tasks.md`, with the tool written from research.md § Appendix (byte-identical to the Appendix's heredoc).

Before, at `main` `8a37a087` (identical to `c8d80020`'s, `ba6bb870`'s, `20ce593e`'s and `a43845e6`'s):

```
2 8 2.1[ ] 2.1a[ ] 2.2[ ] 2.3[ ] 2.4[ ] 2.5[ ] 2.6[ ] F2.1[ ]
3 5 3.0[x] 3.1[ ] 3.2[ ] 3.3[ ] F3.1[ ]
4 5 4.1[ ] 4.1a[ ] 4.2[ ] 4.3[ ] F4.1[ ]
5 12 5.0[ ] 5.1[ ] 5.2[ ] 5.3[ ] 5.3a[ ] F5.1[ ] 5.4[ ] 5.4a[ ] F5.2[ ] 5.5[ ] 5.6[x] F5.3[ ]
7 8 7.0[ ] 7.1[ ] 7.1b[ ] 7.1a[ ] 7.2[ ] 7.3[ ] F7.1[ ] F7.2[ ]
9 8 9.1[ ] 9.2[ ] 9.2a[ ] 9.3[ ] 9.4[ ] 9.5[ ] F9.1[ ] F9.2[ ]
10 5 10.1[ ] 10.2[ ] 10.2a[ ] 10.3[ ] F10.1[ ]
11 3 11.0[ ] 11.1[ ] F11.1[ ]
13 8 13.1[ ] 13.2[ ] 13.3[ ] 13.4[ ] 13.4a[ ] 13.5[ ] 13.6[ ] F13.1[ ]
16 8 16.1[ ] 16.2[ ] 16.3[ ] 16.3a[ ] 16.4[ ] 16.5[ ] 16.6[ ] F16.1[ ]
total 125 Counter({' ': 105, 'x': 11, '~': 9})
```

After, at this head `9713f991` (`9713f991` changes only plan 034, so the census is `f94be2fd`'s):

```
2 8 2.1[x] 2.1a[x] 2.2[x] 2.3[x] 2.4[x] 2.5[x] 2.6[x] F2.1[x]
3 5 3.0[x] 3.1[x] 3.2[x] 3.3[x] F3.1[x]
4 5 4.1[x] 4.1a[x] 4.2[x] 4.3[x] F4.1[x]
5 12 5.0[x] 5.1[x] 5.2[x] 5.3[x] 5.3a[x] F5.1[x] 5.4[x] 5.4a[x] F5.2[x] 5.5[x] 5.6[x] F5.3[x]
7 8 7.0[x] 7.1[x] 7.1b[x] 7.1a[x] 7.2[x] 7.3[x] F7.1[x] F7.2[x]
9 8 9.1[x] 9.2[x] 9.2a[x] 9.3[x] 9.4[x] 9.5[ ] F9.1[x] F9.2[ ]
10 5 10.1[x] 10.2[x] 10.2a[x] 10.3[x] F10.1[x]
11 3 11.0[ ] 11.1[ ] F11.1[ ]
13 8 13.1[x] 13.2[x] 13.3[x] 13.4[x] 13.4a[x] 13.5[x] 13.6[x] F13.1[x]
16 8 16.1[x] 16.2[x] 16.3[x] 16.3a[x] 16.4[x] 16.5[x] 16.6[x] F16.1[x]
total 125 Counter({'x': 74, ' ': 42, '~': 9})
```

The release-1 groups are shown. Groups 1, 6, 8, 12, 14, 15 and the follow-ons read the same before and after. Earlier heads read `'x': 66, ' ': 50` (`76d8ff37` to `bd32ea9c`), `'x': 67, ' ': 49` (`cf2c6bdc`), `'x': 69, ' ': 47` (`5870cd00` and `23665543`), `'x': 70, ' ': 46` (`935164af` to `f6c6dc3c`) and `'x': 73, ' ': 43` (`e873b25f` to `0cde3961`).

## The change: #1144's `tasks.md`, and plan 034's ticks

- **63 boxes ticked**, each with its evidence note as the item's last paragraph, after any addenda. The note is in 1.8's and 3.0's form: a bold dated lead, `**Landed <date>**`, where the date is the last landing of the box's realizing tasks; the tasks; the landings as `repo#n → sha8`; and the falsifier's result, with where it was quoted. For example, 2.4:

  > **Landed 2026-09-27** (T030, in T011's PR): openDox-code#46 → `0e88454a`. `tests/test_imports_standalone.py::test_every_module_imports_with_no_sibling` first asserts the four siblings absent, then imports every module, failing with the first that still needs one (`evidence/checkpoint-phase1.md` § 1).

- **No ratified line moves.** Against `main` `8a37a087`, #1144's diff is the 63 checkbox lines, `[ ]` → `[x]`, and 64 inserted paragraphs (482 lines): 63 notes, and 1 R16 note on an open box (9.5). This was proven at `f94be2fd` by setting every checkbox to `[ ]` in both files and diffing: the result is 64 insertions and nothing else, and the lines the two files share differ only by the 63 flips. The only other file the PR changes is plan 034's `tasks.md` (below). The file is byte-identical to a fresh re-apply of the regenerated decisions onto `main`'s file.
- **Research R16** (research.md § R16), each figure re-checked against research R2, R4, R5, R10 and R13 and plan 034's records:

| R16 item | box | where it is recorded |
|---|---|---|
| 1 | 2.5 | in 2.5's note: 22 modules, not 26, were reached by no CI step |
| 2 | 9.4 | in 9.4's note: openXdox-code's floors read `564/558/6` at `626f2c8d`, not `539/533/6` |
| 3 | 4.3 | in 4.3's note, since 4.3 closed on T086 (an open-box note until then): `run_scoped_doc_health` makes three of the four reaches, and the fourth is `session_documents` |
| 4 | 3.2 | in 3.2's note: the proxy's refusal was written for NOTHING REGISTERED |
| 5 | 10.1 | in 10.1's note: Q-R4 is recorded at `runtime/cli.py:39-42`, not `:40-46` |
| 6 | 9.5 | a note on the open box (open for the arc's close, T090): the openDox pin was 11 commits behind, not 9, and T086 has since moved it to `dede32b4` |
| 7 | Group 2's heading | in 2.1's note, the box the heading introduces: 1,305 and 1,239 at `1e4a57fb` |
| 8 | 3.0 | no new line: 3.0's own note already records it (*"Read at ratification, 2026-09-24"*) |

## 10.3, closed on T099

10.3's box says the openDox root documents the entry point and does not host it, and batch H's addendum makes the documented command `pip install "opendox[local]"`, then `opendox generate-and-open --local …`. Plan 034 maps it to T076, T101 and T099:
- **T076** (openDox#17 → `504324de`) documents the install and the start, and adds no `make` target.
- **T101** adds the release workflow and the version bump (openDox-code#78 → `d59f3f26`, openDox-code#79 → `dede32b4`).
- **T099** publishes that commit at the cut, on Brett Heap's word (`5997633384`). Read from the forge and from PyPI:
  - the annotated tag `v0.1.0` (`9153c254`) names `dede32b4`, which the openDox root's `contracts/code-pin.yaml` names;
  - openDox-code's `release` run 37339111713, dispatched on that tag, completed `success` in all four jobs: `build and verify`, `publish to TestPyPI (the dry run)`, `install opendox[local] from TestPyPI` and `publish to PyPI`, whose steps include `PyPI serves the files the build job verified`;
  - `https://pypi.org/pypi/opendox/0.1.0/json` lists exactly two files, neither yanked: `opendox-0.1.0-py3-none-any.whl` (sha256 `8ecea00db6f9…`) and `opendox-0.1.0.tar.gz` (sha256 `56869b6208a8…`);
  - openDox#19 → `d77f8cbf` replaces the README's stand-in paragraph. At that commit, the README's first line resolves from PyPI, and no paragraph says that no release is published.

## Plan 034: T095, T099, T002, T007 and T097

Lane openxfactory-4's delegation of 2026-10-05T16:37:31Z asks #1233 to tick these, each with a `Landed` or `Done` bullet in #1226's form, so that release 1 closes at 92 of 96. Its ruling `5999175092` settles three points: (a), (a) and (a). Every sha in the bullets was read from GitHub.
- **T095**: openDox-code#75 → `389e5a4a`, which is X. Its `acceptance` job at X is the dispatched run 37333323932: `head_sha` X, job 111841708700, `success`, and its log reads `AT-R1 HTTP half: PASS (314 assertions held)`.
- **T099**: P against X. The compare shows four files between them, none a build input, so the ruled check exits 0. Then the tag, the release run, PyPI's two files and openDox#19, as above.
- **T002** (ruling (a)): 45 of the 50 slices in the three phases' writer tables were claimed on #656, and the bullet cites each claim. The five that were not are named in T091's form: P1-C, whose claim `5850230046` was posted as a literal file path and never edited, and P1-L, P2-H, P2-L and P2-M. Nothing is back-filled.
- **T007** (ruling (a)): batches A to P have landed (P #1230 → `ba6bb870`), and its status sentence now says so.
- **T097**: the census and research R16's corrections, with two non-normative notes beside them:
  - D6's T096 refusals, *"refused by name, with no browser signal"*;
  - the reachability of #1241's first commit, `f632d70c`, which `oracle-verdict.md` names as holding the bytes that ran (ruling (a)'s wording). It is not on `main`: `refs/pull/1241/head` (`5c663a7e`) reaches it, and so does #1241's branch, which still stands. `main`'s `SHA256SUMS` fixes the reviewed scripts, and the record names the ran bytes by their sha256.

## The checkpoint citations, by path

Lane openxfactory-4 ruled at 2026-10-05T16:25:25Z that the notes' `CP1 § n` and `CP2 § n` citations name their records, as the phase-3 notes name `evidence/checkpoint-phase3.md`. `CP1` and `CP2` are the shorthand of lane 4's table, and #1144 never defines them. The change is non-normative and inside T097's R16 scope. `10b6ba05` makes it. The 26 citations, in 25 notes, now read `evidence/checkpoint-phase1.md` (T049, #1204) and `evidence/checkpoint-phase2.md` (T063, #1218). A word diff against `e873b25f` finds those 26 tokens and nothing else; only the 25 paragraphs' line breaks move.

## F4.1, F5.2 and F16.1, closed on T089

T089, phase 3's checkpoint, landed on 2026-10-05T15:26:43Z as #1238 → `fab575ad`. Its record, `specs/034-opendox-standalone-operation/evidence/checkpoint-phase3.md`, extracts each block from #1144 by anchor at `36908480` and runs it from a fresh worktree at the commits phase 3 pinned: openDox-code `dede32b4`, the `code` of the openDox root `e1e3a3c3` (T087), and openXdox-code `56e1c238` (T086). It says of F4.1 and F5.2 *"T097 ticks both in #1144; this record ticks nothing there"*, and plan 034's T089 `Run` bullet says the same. Each box closes on that run, by plan 034's Box accounting:

- **F4.1** (`F4.1 → T089`): as extracted (sha256 `8900b985e72f`) and run unchanged, it exits 0 with `1 passed`, `1 passed`, then `no deferred reach names the consumer or the publisher` (§ 1).
- **F5.2** (`F5.2 → T086, T089`; RULED `5962785556`, item 1, moves its close to phase 3): whole, as batches C, F, G and K amend it (`OPENXFACTORY` at `36908480`, last step `--chains`), it exits 0. The seven suites pass whole (45, 23, 18, 6, 40, 9 and 12 passed), `test -s` holds, and the last step prints five `admitted:` lines, then `ok: 5 protected edit(s), each entered and holding` (§ 5). One of the five admits T086's edits to `tests/test_session_snapshot.py`, by entries 16, 17 and 19 of `tests/protected_suite_respellings.yaml` at `56e1c238`: the three pre-arc reds that T063 quoted, each entry naming the test it repairs.
- **F16.1** (`F16.1 → T083 (at 38d3350e), T089 (batch P's cases, at T087's pin)`): with batch M's line, it exits 0 with `24 passed`, the dialect line, `no model configured: the catalog offers nothing`, `83 passed` and `532 passed` (§ 4). `dede32b4` carries the T100 follow-on (openDox-code#86 → `651c35fe` is its ancestor, and the only commit between T100's landing and `dede32b4` that touches `tests/test_model_binding_trust.py`). That file is the same at both: 160 tests, among them batch P's six `test_F16_1_batch_p_*` cases and A8's `test_A8_a_state_directory_that_is_a_link_trusts_nothing`, none of which exists at `38d3350e`. T083's run there is quoted beside it, as before.

## 3.3, closed on T098

3.3 asks that the carve manifest's `deleted_at_carve` row for `scripts/ideation_dashboard/profile_openxfactory.py` stay BYTE-IDENTICAL. T017, which realizes it, reads the row through the three interim F11.1 runs, *"and T097 ticks 3.3 on all three"*. Each was re-checked on `main` `20ce593e`:

- **Phase 1**, T018 (#1202 → `e81eed62`, `evidence/f11.1-phase1.txt`): the amended run at T047's landing prints `requirement 1 holds: 0 note(s) annotated, every other path a declared surface (11.1)`, and the record's T017 section reads the row.
- **Phase 2**, T065 (#1217 → `1f670bc3`, `evidence/f11.1-phase2.txt`): the same line, at T064's landing.
- **Phase 3**, T098 (#1237 → `20ce593e`, `evidence/f11.1-phase3.txt`), at ARC_TIP `36908480` (T094, #1236). It prints the same line (exit 0) over the arc's three landings, and it refuses a planted path. `docs/opendox-carve-manifest.yaml` is touched by none of the three. Its T017 section finds the row equal at the manifest's introducing commit `17167481` and at that tip, both raw and parsed: `not_moved`, `deleted_at_carve`, no `edits`.
- **Re-read for this tick at `main` `20ce593e`:** the row is still equal to `17167481`'s, both raw (4 lines) and parsed. `scripts/opendox_host.py` is still openxFactory's host: T094 modified it and deleted nothing, which F11.1 would have refused.

## 4.3 and 9.2, closed on T086

T086 landed on 2026-10-05T12:23:03Z as openXdox-code#37 → `56e1c238`. It is a squash whose tree (`78ef1ed1`) is that of its head `57bebd8b`. Its pin is openDox-code `dede32b4`, the commit T087 pins (openDox#18 → `e1e3a3c3`).

- **4.3** closes *"with the last of"* the nineteen reaches into openXdox, and *"openXdox-code's ratchet (`OPENDOX_BACK_IMPORTS`) is tightened to `(0, 0)` in the same landing"*. At `56e1c238`:
  - `tests/test_dependency_direction.py` holds `OPENDOX_BACK_IMPORTS = {}`, and `test_the_pinned_opendox_does_not_import_openxdox_back` asserts `(0, 0)`.
  - openXdox-code#37's body reads that file `17 passed` at the pin, with the census empty.
  - `consumer_reach.py`, absent at `dede32b4`, was retired by T084 (openDox-code#77 → `e49b17c3`).
- **9.2** closes in phase 3 (batch F's addendum), with batch B's note. At `56e1c238`:
  - `tests/declared_exclusion.yaml` holds 66 entries carrying 68 reasons: 60 `doc_health`, 3 `status-exemption-rail` and 5 `openxfactory-contracts`.
  - CI's `validate` at the PR's head (openXdox-code run 37307785866) printed `open extraction: the declared exclusion` and `triple: selected=1099 passed=1095 skipped=4 failures=0 errors=0`.
  - Requirement 9 stays open until T008.

## 16.3a, closed on the T100 follow-on

16.3a is *"Carried out by T100"*, and batch P's addendum adds *"Carried out by a T100 follow-on openDox-code PR (claim `5982447319`), which is no task of plan 034 and lands before T087"*:

- T100 landed as openDox-code#82 → `38d3350e`.
- The follow-on landed as openDox-code#86 → `651c35fe` (09:49:55Z). It is a squash whose tree is that of its head `aecac805`, and it landed before T087 (openDox#18, 11:58:27Z) and T101.
- It carries out Brett Heap's `5982436447`, item 2, and `5983805990`, with the holder's `5984069416`, `5985046107` (C1 to C5) and `5985553609`, and the holder's A8.
- Its body records the falsifier: F16.1's block as batch P amends it, run by T089's runner at `aecac805`, exits 0 with `532 passed` in `tests/test_model_binding_trust.py`. The six `test_F16_1_batch_p_*` tests are present at `651c35fe`.
- The open trust-time existence check, and the follow-ons of openDox-code#86's eighth Copilot review, move no box of release 1. 16.3a's own text says so for the first, and the holder's `5992038800` for the second.

## Left open, by T097's own text

- 9.5, 11.0, 11.1 and F11.1, for the arc's close (T090 to T093), and F9.2, until T008. Nothing else is held.

## T097 is ticked

T097's task is *"Tick #1144's release-1 boxes, each with its evidence note: the 63 in the table below."* All 63 are ticked, so `f94be2fd` ticks T097 in the same commit as 10.3, the last box, as lane 4's brief requires.

## The merges of `main`

- **`bd32ea9c`** merged batch P (`ba6bb870`). It gave the one conflict this PR expected, at 16.4's checkbox line, which follows batch P's insertion at the end of 16.3a. The resolution took `main`'s text for every hunk batch P changed and re-applied the ticks and notes with the same tool, byte-identical to a fresh re-apply onto `main`'s file.
- **`96c74eab`** merged `main` `20ce593e` (#1234 to #1237). It was clean, because none of the four touches #1144's `tasks.md`.
- **`f6c6dc3c`** merged `main` `a43845e6` (#1238 and #1239). It was clean too, because neither touches #1144's `tasks.md`.
- **`9759313b`** merged `main` `f2acc88c` (#1240), and **`0cde3961`** merged `main` `8a37a087` (#1241). Both were clean, for the same reason.
- Every tick since is a fresh re-apply onto `main`'s file.

## Gates, at `main` `8a37a087` and at this head `9713f991`, in one full clone named `openxFactory`

| gate | `main` `8a37a087` | this head `9713f991` |
|---|---|---|
| `python3 scripts/validate-openspec-cli-pin.py --all --no-cache` (CI's form; pinned 1.12.0) | rc 0, `110 passed, 1 failed (111 items)`, `0 UNDISPOSITIONED failures`, 1 accepted exception (`add-chain-attestation`) | identical output, but for the pinned CLI's temporary directory |
| `… --change add-neutral-product-standalone-operability` | — | rc 0, `1 passed, 0 failed`, `validated --strict clean` |
| `scripts/doc-health.py --single-repo . --as-of 2026-10-05` | `31 critical, 22 error, 69 warning, 20 info`, 0 new regressions | byte-identical report |
| `proposal-support.py . verify add-neutral-product-standalone-operability` | ok | identical |
| `validate-sequenced-after.py . --ledger-diff` | 229 rows, consistent | identical |
| `validate-code-surface.py`, `validate-target-release.py`, `validate-pin-registrations.py`, `validate-document-catalog.py` | rc 0 each (the catalog: 0 errors, 0 warnings) | identical |
| `pytest -m "not postgres"` over `tests/doc-health`, `sequenced_after`, `proposal-support`, `former_id_arrival`, `citation_remainder`, `signed_execution_chain`, `openspec_cli_pin`, `target_release`, `code_surface`, `packet_reference`, `scope_globs` | the 8 below fail identically | running (the last full run, at `10b6ba05`: `8 failed, 3427 passed, 1 skipped`) |

The 8 failures are environmental, the same 8 at every head. Each needs the `openDox` and `openXdox` legs initialized, as CI's `pytest-suite` does, or a reachable pinned validator: `test_ideation_readiness.py` (3), `test_readiness_dispatch.py` (1), `test_sentinel_vocabulary.py` (2), `test_status_reader_real_lines.py` (1) and `test_chain_reader.py` (1). Re-run alone at `main` `8a37a087`, they read `8 failed` with the same messages. The venv was built by CI's own `pip install --require-hashes -r requirements/hermes-runtime-contracts.lock`, with `LANG=C.UTF-8` and every `GIT_*`/`XF_*` variable unset. The earlier rounds read the same: `main` `c8d80020` against `76d8ff37`, `b7f49673` and `e2efb3a1`, `main` `ba6bb870` against `bd32ea9c`, `cf2c6bdc`, `5870cd00` and `23665543`, `main` `20ce593e` against `935164af`, `main` `a43845e6` against `e873b25f`, and `main` `f2acc88c` against `10b6ba05`. At `f94be2fd` the local run was stopped at 31% on a session swap, and CI's `pytest-suite` passed there. No test, script or workflow reads plan 034's files (`git grep` over `tests`, `scripts` and `.github` finds none).

Also checked, on the inserted text at `9713f991`:

- every `repo#n → sha8` in #1144's notes (71 distinct pairs, 122 mentions) and in plan 034's bullets is that PR's merge commit, per the forge;
- every other sha (`17167481`, `1e4a57fb`, `36908480`, `5c137a90`, `626f2c8d`, `aecac805`, `dede32b4`, `f8a1ece`; in the plan, `5c663a7e`, `9153c254` and `f632d70c`) resolves in its repository, and the file digests match PyPI's JSON and the `SHA256SUMS` files;
- each of the 63 `Landed` dates equals the last landing of the box's realizing tasks (F5.1's and F7.1's notes also name T063's later re-run, and 5.4a's names the host line, #1215);
- no closing keyword, no `Arc:` line, no host path, and no unqualified reference to another repository, in the diff, the commit messages or this body;
- no inserted line is wider than 80 characters, and in #1144 none starts a list, a heading or a table.

## CI and review

- **CI at this head `9713f991`:** running.
- **CI at `f94be2fd`:** every check-run completed `success`, the 8 required among them (`pytest-suite` 17:13:56Z to 17:31:21Z).
- **CI at `10b6ba05`:** every check-run completed `success` (`pytest-suite` until 17:04:09Z).
- **CI at `e873b25f`:** every check-run completed `success`, the 8 required among them (`pytest-suite` 15:57:01Z to 16:22:01Z). `lane-line` re-ran on each edit of this description and passed.
- **CI at `935164af`, `23665543`, `cf2c6bdc`, `bd32ea9c` and `e2efb3a1`:** every check-run completed `success`, the 8 required among them (`signed-execution-chain-gate`, `lane-line`, `former-id-arrival-gate`, `openspec-cli-pin`, `wallet-validation`, `pytest-suite`, `release-tag-gate`, `openxdox-consumer-gate`). At `5870cd00`, `23665543`'s run superseded its `pytest-suite`.
- **Copilot at `76d8ff37`:** one finding, r4179674026: F7.2's note named no landing commit for T058 or T063. `b7f49673` names them (openDox-code#68 → `047bb4fa`, openxFactory#1218 → `a883bbf6`), and 7.1's changelog landing too (openDox#15 → `66758438`). The thread is answered and resolved.
- **Copilot at `b7f49673`:** no new finding, and one "previously missed" note: that 5.4a's note wrongly said T059's run deselected the three pre-arc cases. The note was right, and comment `5985467371` gives the records. The cited lines are T059's Falsifier line, written before it landed; T059's `Landed` record and openXdox-code#35's body (rulings 4 and 6, and its F5.2 run) record the deselections. `e2efb3a1` makes the note exact and cites them.
- **Copilot at `5870cd00`:** *"Findings: None"*, and one "previously missed" low note: 5.5's note read as though `consumer_reach` *"names the task lists"*. `23665543` says what it meant, that the seven `consumer_reach` names T055 lists are retired.
- **Copilot at `e2efb3a1`, `bd32ea9c`, `cf2c6bdc` and `23665543`:** *"Findings: None"*. Where its status line read *"Changes recommended"*, it named only what this DRAFT waits for.
- **Copilot at `935164af`:** one finding, r4185667778: 5.4a's note read *"the seven red at both pins"*. `e93ab9fb` reads "the seven reds", and the thread is answered and resolved.
- **Copilot at `e873b25f`:** one finding, r4186043242: this description was stale after T089's ticks. It is refreshed here, and the thread is answered and resolved. A second request at that head registered no new review.
- **Copilot at `10b6ba05`:** *"Findings: None"*.
- **Copilot at `f94be2fd`:** two findings, review `5418196219`. r4186761333: plan 034's opening status still said batch P was to land, against this PR's T007 tick. `9713f991` says that all sixteen batches have landed, A (#1171) to P (#1230), and that T007 is closed. r4186761413: this description was stale at `e873b25f`. It was refreshed at 17:16:28Z, while that review ran, and is refreshed again here for `9713f991`. Both threads are answered and resolved.
- **Copilot at `9713f991`:** review `5418607294`, on the push. Its one open item was r4186761413, this description, refreshed here for `9713f991`. Its two "previously missed" low notes, at plan 034's lines 129 ("whose message lacks") and 4496 ("the drive"), need no change, because each phrase is the wording of the record it cites, T091's and `oracle-verdict.md`'s. A comment on this PR gives the records.
- Sourcery posted a reviewer's guide, and no comment on the diff. At 17:16:25Z it reported its review budget used, and its check-run reads `skipped` at `f94be2fd` and at `9713f991`.

🤖 Generated with [Claude Code](https://claude.com/claude-code)


Lane: openxfactory-4
Co-Authored-By: Claude Opus 5.5 (1M context) <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