diff --git a/README.md b/README.md index af4990292..66d2d7042 100644 --- a/README.md +++ b/README.md @@ -83,7 +83,7 @@ Core domain-neutral docs: - [The openDox cutover runbook](docs/opendox-cutover-runbook.md) (RULED OQ-J: the operator's document for the `split-opendox-two-layer-product` CARVE arc — preconditions, the named carve commit and RULED OQ-I's three provenance records, the RULED OQ-H `filter-repo` method with its two-commit leg shape, the RULED OQ-L openXdox submodule pin, a rollback written before each phase, the re-cut procedure, § 5.7's and § 5.8's two RULED corrections to a placement (a re-destination and a retirement), and the acts reserved to Brett Heap; the destination-side proof is `scripts/verify-carve-arrival.py`, driven by `tests/carve_arrival/`; § 2's table carries the amended totals — 2743 declared edit lines over 177 rows, and 20 replica rows of which one declares two lines, and its per-destination table below them is re-derived and asserted cell by cell) - [The carve conformance corpus](scripts/carve_conformance.py) (`split-opendox-two-layer-product` § 3.7 FLOOR PART 3, RULED OQ-1: the neutral conformance corpus — RULED OQ-3's documents at `tests/corpus-adapter/fixtures/`, which do not move because eleven manifest rows name those paths as `replicated_at_destination` — as a closed set of 17 checks over ANY corpus reader, 10 positives and 7 negative confirmations, standard library plus `corpus_adapter` only and no home vocabulary in its source text so that a destination holding nothing else of openxFactory's can run it; the operator's way in is `scripts/verify-carve-conformance.py` (`--destination --dest-root --adapter :`, exit 0 or 2, six refusal codes, a `--json` seat; RULED Q-F1 (a) 2026-09-17 also lets a destination whose corpus is git HISTORY hand in a TRANSPOSITION of the same documents with `--corpus`, which the runner proves faithful key by key and byte by byte — the identities it lists and reads under are held to the resolution it asked for, the bytes to the shipped table — refusing `conformance-corpus-unfaithful` before any check runs and naming the transposition, its revision and that table's digest in the verdict; where the reader cannot resolve or list the location at all there is nothing to compare, so the 17 checks report that instead and a run whose 17 all passed over a transposition never proven faithful refuses at the end rather than printing OK), driven by `tests/carve_conformance/` and documented at runbook § 2.2, which also carries the per-destination verdicts measured 2026-09-10 — openxFactory's own adapter passes 17 of 17 — and § 3.7 IS ticked, on `OK — 17 of 17` at a landed head in every named destination: openxFactory `eb1880cb`, openXdox-code `3ee8cd31`, openDox-code `93ccc3dd` (`tasks.md` amendment #8, PR #1124 → `3e3b4587`)) - [The snapshot-equivalence runner](scripts/verify-snapshot-equivalence.py) (`split-opendox-two-layer-product` § 5.5 FLOOR PART 4, design § D6 (4), RULED OQ-1: renders ONE corpus through the PRE-split tree at the published annotated tag `opendox-carve-0` (`b075fd91dc8f`, FLOOR PART 1's own `carve_commit`, frozen by RULED (a), `#656` comment `5625573095`) in an isolated child interpreter, and through the POST-split stack — `openxdox.generator` + `openxdox.snapshot` at the pinned openXdox-code, reached through `scripts/carved_reach.py` (RULED Q7, `#656` comment `5626248666`) with the § 4.4 domain profile registered — in this process, and compares the two snapshots BYTE FOR BYTE at a pinned `source_revision`, because unpinned the two sides diverge on the anchor alone and the comparison means nothing; `--corpus` is repeatable and each one is a corpus state, of which the suite runs four in a single invocation and two MUST move the digest; seven named refusal codes and one blanket, exit 0 or 2 and never 1, a `--json` seat, and every pin verified before any digest exists — six mounts, each nested gitlink read out of the exact commit the level above it verified, the imported trees swept clean, and the SUPERPROJECT's own unpinned revision and dirt carried in the evidence; driven by `tests/snapshot_equivalence/` inside the required `pytest-suite` check and documented at runbook § 2.3, which carries the measured verdict — 14,849 bytes, `sha256 764b077b…0735` over the shipped corpus) -- [openDox standalone operation, release 1: Speckit feature 034](specs/034-opendox-standalone-operation/spec.md) (the implementation plan for release 1, phases 1–3, of the ratified `add-neutral-product-standalone-operability` (#1144). All three phases are planned on Brett Heap's answers, `#656` comments `5817152735`, `5850003126` and `5851950767`: [plan](specs/034-opendox-standalone-operation/plan.md) · [tasks, with each phase's writer slices](specs/034-opendox-standalone-operation/tasks.md) · [research](specs/034-opendox-standalone-operation/research.md) · [clarify questions](specs/034-opendox-standalone-operation/clarify-questions.md) · [AT-R1 quickstart](specs/034-opendox-standalone-operation/quickstart.md) · [quality checklist](specs/034-opendox-standalone-operation/checklists/requirements.md) · evidence: [ARC_BASE](specs/034-opendox-standalone-operation/evidence/arc-base.md), [re-measure](specs/034-opendox-standalone-operation/evidence/remeasure-2026-09-25.md), [analyze round 1a](specs/034-opendox-standalone-operation/evidence/analyze-round-1a.md), [analyze round 2](specs/034-opendox-standalone-operation/evidence/analyze-round-2.md), [analyze round 3](specs/034-opendox-standalone-operation/evidence/analyze-round-3.md), [F11.1 phase 1 (T017, T018)](specs/034-opendox-standalone-operation/evidence/f11.1-phase1.txt), [phase 1 checkpoint (T049)](specs/034-opendox-standalone-operation/evidence/checkpoint-phase1.md), [F11.1 phase 2 (T065)](specs/034-opendox-standalone-operation/evidence/f11.1-phase2.txt), [phase 2 checkpoint (T063)](specs/034-opendox-standalone-operation/evidence/checkpoint-phase2.md), [F10.1 run (T077)](specs/034-opendox-standalone-operation/evidence/f10.1-run.md), [F13.1 run (T074)](specs/034-opendox-standalone-operation/evidence/f13.1-run.md), [16.6 and F16.1 run (T083)](specs/034-opendox-standalone-operation/evidence/f16.1-run.md)) +- [openDox standalone operation, release 1: Speckit feature 034](specs/034-opendox-standalone-operation/spec.md) (the implementation plan for release 1, phases 1–3, of the ratified `add-neutral-product-standalone-operability` (#1144). All three phases are planned on Brett Heap's answers, `#656` comments `5817152735`, `5850003126` and `5851950767`: [plan](specs/034-opendox-standalone-operation/plan.md) · [tasks, with each phase's writer slices](specs/034-opendox-standalone-operation/tasks.md) · [research](specs/034-opendox-standalone-operation/research.md) · [clarify questions](specs/034-opendox-standalone-operation/clarify-questions.md) · [AT-R1 quickstart](specs/034-opendox-standalone-operation/quickstart.md) · [quality checklist](specs/034-opendox-standalone-operation/checklists/requirements.md) · evidence: [ARC_BASE](specs/034-opendox-standalone-operation/evidence/arc-base.md), [re-measure](specs/034-opendox-standalone-operation/evidence/remeasure-2026-09-25.md), [analyze round 1a](specs/034-opendox-standalone-operation/evidence/analyze-round-1a.md), [analyze round 2](specs/034-opendox-standalone-operation/evidence/analyze-round-2.md), [analyze round 3](specs/034-opendox-standalone-operation/evidence/analyze-round-3.md), [F11.1 phase 1 (T017, T018)](specs/034-opendox-standalone-operation/evidence/f11.1-phase1.txt), [phase 1 checkpoint (T049)](specs/034-opendox-standalone-operation/evidence/checkpoint-phase1.md), [F11.1 phase 2 (T065)](specs/034-opendox-standalone-operation/evidence/f11.1-phase2.txt), [phase 2 checkpoint (T063)](specs/034-opendox-standalone-operation/evidence/checkpoint-phase2.md), [F10.1 run (T077)](specs/034-opendox-standalone-operation/evidence/f10.1-run.md), [F13.1 run (T074)](specs/034-opendox-standalone-operation/evidence/f13.1-run.md), [16.6 and F16.1 run (T083)](specs/034-opendox-standalone-operation/evidence/f16.1-run.md), [F11.1 phase 3 (T098)](specs/034-opendox-standalone-operation/evidence/f11.1-phase3.txt)) - [Party Ladder](docs/party-ladder.md) (author/operator → tenant → subject → third parties; frozen-word reading rules) - [xFactory Domain Factory Model](docs/xfactory-domain-factory-model.md) - [Governed Derived Model](docs/governed-derived-model.md) diff --git a/specs/034-opendox-standalone-operation/evidence/f11.1-phase3.txt b/specs/034-opendox-standalone-operation/evidence/f11.1-phase3.txt new file mode 100644 index 000000000..750c8a942 --- /dev/null +++ b/specs/034-opendox-standalone-operation/evidence/f11.1-phase3.txt @@ -0,0 +1,187 @@ +T098 -- Phase 3's interim F11.1 (by T093's procedure) +Feature: 034-opendox-standalone-operation. Lane: openxfactory-4 +(openXfactory-4-openDox_extraction); authored by lane openXfactory-3, +delegated by lane openxfactory-4 (#656 comment 5984809456). Taken: 2026-10-05. + +PACKET_MERGE=94b6f7f13b45c351b9142345738965c974b7dd37 + (#1144's own landing on openxFactory main; evidence/arc-base.md) +ARC_TIP=36908480b40b32509c308087d9d54e6c9d81759d + (opensoft/openxFactory#1236, T094, phase 3's openxFactory arc landing -- + squash-merged at 2026-10-05T14:06:42Z onto + 70602a0aadf4c188ab87c22e0d53e3228c869ecd (#1235); first-parent line + confirmed; its commit message carries the trailer + "Arc: neutral-product-standalone-operability") + +Guard: 11.1's FALSIFIED BY block in +openspec/changes/add-neutral-product-standalone-operability/tasks.md, lines +1654-1733 at 36908480 (`set -euo pipefail` through the closing `PY`, +dedented), extracted byte for byte from the committed file and executed as +extracted (sha256 of the extracted script 60beede1244b6052...). It is the +guard as T018 left it and T065 ran it: T007 batch A's COMPOSITION_TESTS +(R1Q2 (a)) and the closed ADMITTED_ARC_EDITS list (RULED #656 comment +5890601202). No path was added to either list for phase 3. + +The guard walks the arc's LANDINGS on main, first-parent, by trailer: + +== arc-commits.txt == +36908480b40b32509c308087d9d54e6c9d81759d +fcb45380a4d9d4933038157411944c4fefa59d13 +f56c87c6b8d7374d93facd7dfbbf02bd89a86a8b +== arc-changes.tsv == +36908480b40b32509c308087d9d54e6c9d81759d M contracts/opendox-pin.yaml +36908480b40b32509c308087d9d54e6c9d81759d M contracts/openxdox-pin.yaml +36908480b40b32509c308087d9d54e6c9d81759d M docs/opendox-carve-admissions.yaml +36908480b40b32509c308087d9d54e6c9d81759d M openDox +36908480b40b32509c308087d9d54e6c9d81759d M openXdox +36908480b40b32509c308087d9d54e6c9d81759d M scripts/ideation_dashboard/dashboard_refresh_lane.py +36908480b40b32509c308087d9d54e6c9d81759d M scripts/opendox_host.py +36908480b40b32509c308087d9d54e6c9d81759d M scripts/profile_openxfactory.py +36908480b40b32509c308087d9d54e6c9d81759d M tests/carve_arrival/test_verify_carve_arrival.py +36908480b40b32509c308087d9d54e6c9d81759d A tests/domain_profile/test_host_registers_binding_trust.py +36908480b40b32509c308087d9d54e6c9d81759d A tests/domain_profile/test_lane_route_asks_the_hosted_ref_predicate.py +36908480b40b32509c308087d9d54e6c9d81759d M tests/domain_profile/test_openxfactory_host_wiring.py +36908480b40b32509c308087d9d54e6c9d81759d M tests/ideation-dashboard/test_dashboard_source_seal.py +36908480b40b32509c308087d9d54e6c9d81759d M tests/ideation-dashboard/test_doxbench_status_exemption.py +36908480b40b32509c308087d9d54e6c9d81759d M tests/ideation-dashboard/test_extension_point_parity.py +36908480b40b32509c308087d9d54e6c9d81759d M tests/ideation-dashboard/test_serve_column_split.py +36908480b40b32509c308087d9d54e6c9d81759d M tests/openxdox_pin/test_openxdox_pin_verifier.py +fcb45380a4d9d4933038157411944c4fefa59d13 M contracts/opendox-pin.yaml +fcb45380a4d9d4933038157411944c4fefa59d13 M contracts/openxdox-pin.yaml +fcb45380a4d9d4933038157411944c4fefa59d13 M docs/opendox-carve-admissions.yaml +fcb45380a4d9d4933038157411944c4fefa59d13 M openDox +fcb45380a4d9d4933038157411944c4fefa59d13 M openXdox +fcb45380a4d9d4933038157411944c4fefa59d13 M scripts/ideation_dashboard/dashboard_refresh_lane.py +fcb45380a4d9d4933038157411944c4fefa59d13 M scripts/opendox_host.py +fcb45380a4d9d4933038157411944c4fefa59d13 M tests/carve_arrival/test_verify_carve_arrival.py +fcb45380a4d9d4933038157411944c4fefa59d13 A tests/domain_profile/test_host_registers_openxdox_projection.py +fcb45380a4d9d4933038157411944c4fefa59d13 M tests/ideation-dashboard/test_dashboard_source_seal.py +fcb45380a4d9d4933038157411944c4fefa59d13 M tests/openxdox_pin/test_openxdox_pin_verifier.py +f56c87c6b8d7374d93facd7dfbbf02bd89a86a8b M contracts/opendox-pin.yaml +f56c87c6b8d7374d93facd7dfbbf02bd89a86a8b M contracts/openxdox-pin.yaml +f56c87c6b8d7374d93facd7dfbbf02bd89a86a8b M docs/opendox-carve-admissions.yaml +f56c87c6b8d7374d93facd7dfbbf02bd89a86a8b M openDox +f56c87c6b8d7374d93facd7dfbbf02bd89a86a8b M openXdox +f56c87c6b8d7374d93facd7dfbbf02bd89a86a8b M scripts/ideation_dashboard/dashboard_refresh_lane.py +f56c87c6b8d7374d93facd7dfbbf02bd89a86a8b M scripts/opendox_host.py +f56c87c6b8d7374d93facd7dfbbf02bd89a86a8b M scripts/profile_openxfactory.py +f56c87c6b8d7374d93facd7dfbbf02bd89a86a8b M scripts/route_extension.py +f56c87c6b8d7374d93facd7dfbbf02bd89a86a8b M scripts/sync-notebooklm-books.py +f56c87c6b8d7374d93facd7dfbbf02bd89a86a8b M tests/carve_arrival/test_verify_carve_arrival.py +f56c87c6b8d7374d93facd7dfbbf02bd89a86a8b A tests/domain_profile/test_doxbench_chat_ceiling.py +f56c87c6b8d7374d93facd7dfbbf02bd89a86a8b A tests/domain_profile/test_memory_gateway_roster.py +f56c87c6b8d7374d93facd7dfbbf02bd89a86a8b A tests/domain_profile/test_openxfactory_host_wiring.py +f56c87c6b8d7374d93facd7dfbbf02bd89a86a8b A tests/domain_profile/test_outline_template_agreement.py +f56c87c6b8d7374d93facd7dfbbf02bd89a86a8b A tests/domain_profile/test_session_resync_registers_host.py +f56c87c6b8d7374d93facd7dfbbf02bd89a86a8b A tests/domain_profile/test_session_worktree_book_scan.py +f56c87c6b8d7374d93facd7dfbbf02bd89a86a8b A tests/domain_profile/test_workbench_manifest_validation.py +f56c87c6b8d7374d93facd7dfbbf02bd89a86a8b A tests/domain_profile/test_workbench_scoped_doc_health.py +f56c87c6b8d7374d93facd7dfbbf02bd89a86a8b M tests/ideation-dashboard/test_authoring_classify_derivation.py +f56c87c6b8d7374d93facd7dfbbf02bd89a86a8b M tests/ideation-dashboard/test_dashboard_source_seal.py +f56c87c6b8d7374d93facd7dfbbf02bd89a86a8b M tests/ideation-dashboard/test_doxbench_status_exemption.py +f56c87c6b8d7374d93facd7dfbbf02bd89a86a8b M tests/ideation-dashboard/test_extension_point_parity.py +f56c87c6b8d7374d93facd7dfbbf02bd89a86a8b M tests/ideation-dashboard/test_serve_column_split.py +f56c87c6b8d7374d93facd7dfbbf02bd89a86a8b M tests/openxdox_pin/test_openxdox_pin_verifier.py + +Every path the T094 landing (36908480) touches sits on a declared surface +(the guard's own sets, read out of the extracted script): + PIN_PAIRS M contracts/opendox-pin.yaml + M contracts/openxdox-pin.yaml + M openDox + M openXdox + HOST M scripts/opendox_host.py + M scripts/profile_openxfactory.py + HOST_TESTS A tests/domain_profile/test_host_registers_binding_trust.py + A tests/domain_profile/test_lane_route_asks_the_hosted_ref_predicate.py + M tests/domain_profile/test_openxfactory_host_wiring.py + COMPOSITION_TESTS M tests/ideation-dashboard/test_doxbench_status_exemption.py + M tests/ideation-dashboard/test_extension_point_parity.py + M tests/ideation-dashboard/test_serve_column_split.py + ADMITTED_ARC_EDITS M docs/opendox-carve-admissions.yaml + M scripts/ideation_dashboard/dashboard_refresh_lane.py + M tests/carve_arrival/test_verify_carve_arrival.py + M tests/ideation-dashboard/test_dashboard_source_seal.py + M tests/openxdox_pin/test_openxdox_pin_verifier.py +docs/opendox-carve-manifest.yaml is not touched by any of the 3 landings, so +no note was annotated. + +Non-arc landings between fcb45380 and 36908480 are not walked, by design: +the walk finds only these 3, so every other first-parent commit in the range +carries no trailer (18 of them). + +VERBATIM OUTPUT (exit code 0; stderr was empty): + + requirement 1 holds: 0 note(s) annotated, every other path a declared surface (11.1) + +--- + +WALK TO MAIN'S HEAD (2026-10-05). The same extracted script with ARC_TIP set to +main's head, 36908480b40b32509c308087d9d54e6c9d81759d, finds the same 3 +landings, so nothing after 36908480 on main's first-parent line carries the +trailer, and prints the same line (exit code 0). + +--- + +NEGATIVE CONTROL (2026-10-05, never pushed) + +To confirm the guard is still CLOSED at this ARC_TIP, a scratch detached +worktree at 36908480 (`git worktree add --detach`, removed with +`git worktree remove --force` right after) got one planted commit, +12d724df557a36c1a496b36e271db8c66823d992, parent +36908480b40b32509c308087d9d54e6c9d81759d, carrying the trailer +`Arc: neutral-product-standalone-operability` and adding exactly one file, +docs/a-path-on-no-f11.1-surface.md, which sits on no declared surface and is +not the manifest. Same extracted script, same PACKET_MERGE, ARC_TIP set to +the planted commit: + +VERBATIM OUTPUT (exit code 1): + + FAIL: the arc changed what requirement 1 keeps: + 12d724df557a: touched docs/a-path-on-no-f11.1-surface.md + +The guard refused the planted path and named it. The planted commit and its +worktree exist on no branch, local or remote. + +--- + +T017 -- 3.3, read-only, at this landing: the profile_openxfactory.py +deleted_at_carve row (T017: "Phases 2 and 3 repeat the check through +T065 and T098") + +The row's identifying line was added once, by the manifest's own introducing +commit, and never added or removed since: +17167481e9d69dec9347f1d26699b6218a697f53. +The row compared at that commit and at ARC_TIP, raw text and parsed: + + row text at 17167481e9d6 (4 lines) == at 36908480b40b: True + row parsed equal: True; disposition not_moved, reason deleted_at_carve, edits None + +The row at ARC_TIP: + + - source_path: scripts/ideation_dashboard/profile_openxfactory.py + disposition: not_moved + reason: deleted_at_carve + evidence: "The module's own docstring (:6-8) names it \"the one file the § 3 carve deletes rather than moves\"; after the carve openXdox declares its own profile." + +--- + +THE SAME RESULT BEFORE THE LANDING. Rehearsed 2026-10-04 (lane +openXfactory-3, delegated) at phase 2's tip, ARC_TIP fcb45380, with the same +extraction (sha256 60beede1244b6052...): +`requirement 1 holds: 0 note(s) annotated, every other path a declared surface (11.1)`; +the walk to main's head c8d80020 found the same two landings; a planted path +on no surface (d14d04b4, never pushed) was refused by name; and 3.3's row +was byte-identical. Lane openxfactory-4's dry run of 2026-10-03 had run the +guard over a simulated T094 (its draft diff squashed onto main with the +trailer), and it held. Prestaged 2026-10-05 against T094's open PR, #1236, +at its head 16136990: the guard walked T094's seven branch commits, each +carrying the trailer, then T064 and T047, and printed the same line. The +branch's merge of main, 9cd1bf23, carries no trailer, so it is no landing to +the guard, and the first-parent walk never enters its second parent, main's +ca1c1486. Over a local squash of that head onto main ca1c1486 (never +pushed), the walk was exactly three landings, the squash, T064 and T047, +with the same line, a planted path refused by name, and 3.3's row +byte-identical. + +VERDICT: F11.1 holds at ARC_TIP 36908480b40b32509c308087d9d54e6c9d81759d, +phase 3's interim run. T098 is ticked in tasks.md on the strength of this +record. diff --git a/specs/034-opendox-standalone-operation/plan.md b/specs/034-opendox-standalone-operation/plan.md index e43627e59..82a379c83 100644 --- a/specs/034-opendox-standalone-operation/plan.md +++ b/specs/034-opendox-standalone-operation/plan.md @@ -152,16 +152,17 @@ specs/034-opendox-standalone-operation/ ├── checkpoint-phase2.md # T063: phase 2's checkpoint, quoted ├── f10.1-run.md # T077: F10.1, run as batch H amends it, quoted ├── f13.1-run.md # T074: F13.1, run as batch H amends it, quoted - └── f16.1-run.md # T083: 16.6, then F16.1 as batch M amends it, quoted + ├── f16.1-run.md # T083: 16.6, then F16.1 as batch M amends it, quoted + └── f11.1-phase3.txt # T098: phase 3's interim F11.1 ``` T018 added phase 1's interim F11.1 run, and T049 its checkpoint. T065 added phase 2's interim F11.1 run, and T063 its checkpoint. T077 added its F10.1 run, quoted in the checkpoints' form on the holder's ruling of 2026-10-03, and T074 its F13.1 run in the same form. T083 added its 16.6 and F16.1 run, -in the same form. +in the same form. T098 added phase 3's interim F11.1 run. Later tasks add their own records to `evidence/`: -T098 adds the interim F11.1 run for phase 3, and T096 AT-R1. T009, T019 and T069 share one analyze record, +T096 adds AT-R1. T009, T019 and T069 share one analyze record, `analyze-round-2.md`. Each is linked from this feature's README entry. ### Source code: the six repositories release 1 lands in diff --git a/specs/034-opendox-standalone-operation/tasks.md b/specs/034-opendox-standalone-operation/tasks.md index d18b5175e..7c1104a22 100644 --- a/specs/034-opendox-standalone-operation/tasks.md +++ b/specs/034-opendox-standalone-operation/tasks.md @@ -4058,7 +4058,7 @@ written (`5962754358`). `consumer_reach.py` is gone. `test_openxfactory_host_wiring.py`'s "second copy of the column" check and its contributed tuple, which now has three entries; the lane route's `hosted_ref_refused(` check (Q8 (a)); and the trust policy at T100's seam. -- [ ] T094 [US4] [oX] [oxF] **Phase 3's consumer pins and host wiring** (T090 +- [x] T094 [US4] [oX] [oxF] **Phase 3's consumer pins and host wiring** (T090 steps 5–6). openxFactory's PR carries whatever host wiring the retired columns need. That includes the parity test's MRO assertion and `test_serve_column_split.py`'s gate and projection rows, updated again once @@ -4138,13 +4138,53 @@ written (`5962754358`). `consumer_reach.py` is gone. - **After**: T086, T087, T064 (the pin pairs' single-writer order), and the ahead PR (E1 (a), a non-arc PR with no task of its own: the golden, the usage line and the rebound-Host case). -- [ ] T098 [US4] [oxF] **Phase 3's interim F11.1**, by T093's procedure, with + - **Landed**: openXdox#22 → `9564d5d9` (the openXdox root: code + `56e1c238`, openDox pin `e1e3a3c3`), then openxFactory#1236 → + `36908480`, an arc landing whose squash carries the `Arc:` trailer. The + ahead PR (E1 (a)) landed first, as openxFactory#1234 → `ca1c1486`. + - Both pin pairs move in ONE commit (openxFactory#1236's `caa8d377`), as + for T047 and T064, departing from T090 step 6 on the holder's ruling of + 2026-10-05: openXdox#22 moves the openDox pin that + `verify-opendox-pin.py` check 5 reads through the openXdox gitlink, and + the verifier refuses either pair alone (`opendox-pin-lockstep-mismatch`). + openDox is `e1e3a3c3` (`55a110f4…`, 28 records), and openXdox is + `9564d5d9` (`11585ead…`, 29 records, recomputed three ways). + - `scripts/opendox_host.register_openxfactory()` calls + `openxdox.column_contributions.register()` (T086) after the projection + line, and refuses by name when it registers nothing. + `GovernedBindingTrust` (RULED `5970369724`) is a sixth `seams()` entry, + before the home seam, with its take-back row; its `record()` writes + nothing. `tests/domain_profile/test_host_registers_binding_trust.py` + covers it. + - The composition tests move with the retired columns: the parity test's + MRO takes T084's layout, `test_serve_column_split.py`'s snapshot arm + is the core's own after T086's trim, and every column method is the + column's own. + - 29 carve admissions are added (25 at `opendox_code`, 4 at + `openxdox_code`) and pinned in `tests/carve_arrival`. The stale + `src/opendox/consumer_reach.py` admission, whose file openDox-code#77 + (T084) deleted, is removed and asserted absent. + - It annotates no manifest note: T092's phase-3 notes ride in T089's + checkpoint PR (the holder's decision of 2026-10-05). F11.1 holds over + it (T098, `evidence/f11.1-phase3.txt`). + - The holder's READY is `5996119122`, with Copilot's `r4184739661` an + accepted limit. CI at the PR's final head, `7e31eca1`, passes every + check, and `pytest-suite` reads `selected=9376 passed=9370 skipped=6 + failures=0 errors=0`. +- [x] T098 [US4] [oxF] **Phase 3's interim F11.1**, by T093's procedure, with `ARC_TIP` at T094's landing. Record the output in `evidence/f11.1-phase3.txt`, with no `Arc:` trailer, and link it from this feature's README entry. - **Falsifier**: F11.1, as widened by T007 batch A, prints `requirement 1 holds`. - **After**: T094. + - **Landed**: [`evidence/f11.1-phase3.txt`](evidence/f11.1-phase3.txt), + with `PACKET_MERGE=94b6f7f1` and `ARC_TIP=36908480` (#1236). It prints + `requirement 1 holds: 0 note(s) annotated, every other path a declared + surface (11.1)` (exit 0) over the arc's three landings, `f56c87c6` (T047), + `fcb45380` (T064) and `36908480` (T094). A planted path on no surface is + refused, and 3.3's `deleted_at_carve` row is byte-identical (T017). The + admitted list did not grow. - [ ] T089 **Phase 3 checkpoint.** Run and quote F4.1, F10.1 and F13.1 (both as batch H amends them), F16.1 as batches M and P amend it (with T100's named test, and the T100 follow-on's cases in it), and F5.2 whole (as T007's batches C, F, G and K amend it, after