Operator ruling (2026-07-15): office1-netbox (10.10.1.10) HOLDS THE IPAM APEX ROLE during VR1 -- it is the authoritative NetBox every consuming system (OpenTofu, MAAS, overlays, the Juju bundle) derives its values from. It is a working draft (edited as the buildout proceeds), but it is the apex. netbox.baldurkeep.com does not get a write at all during VR1; it is the eventual production apex, frozen as a READ-ONLY v1 reference draft and not consulted by VR1 systems. Merging office1-netbox back into netbox.baldurkeep.com is a deferred maybe at the very end -- NOT a Stage 2 gate.
Confirmed while scoping: no live system config points at any NetBox URL (opentofu/, scripts/, lib-*.sh carry none) -- "consuming systems use office1-netbox as apex" is a value-DERIVATION workflow (we read NetBox by hand to populate lib-net.sh/tfvars/bundle), not a live API wiring, so no config repoint is needed; this is a documentation change only.
The repo encoded the OPPOSITE model: it called netbox.baldurkeep.com the "apex/source of truth" and office1-netbox a throwaway "sandbox", and defined close-out C2 (the last open Stage 2 gate, and the branch->main merge trigger) as an operator-gated write that feeds the carve UPSTREAM. Under the ruling that write does not happen in Stage 2, so C2-as-written was wrong.
Finding surfaced while drafting (new, previously unlogged): D-120 Step 6 registers 10.10.1.0/24's child ranges (ipam/ip-ranges) and the two service IPs (ipam/ip-addresses). Those object classes are NOT covered by the sandbox loop -- prod-draft-dump.py's ENDPOINTS and sandbox-fidelity-check.py's KEY/EXPECTED_NEW both stop at rirs/roles/regions/sites/aggregates/prefixes. So the hardened fidelity check cannot verify the D-120 load; that verification needs a tool extension (+ harness) or a recorded manual read-back. C2 now records this as a tooling gap and an open C2-execution sub-question.
This is a DOCFIX, not a D-NNN: it defers the apex WRITE and does not revoke D-010 (netbox.baldurkeep.com remains the eventual source of truth). Doc-only; no script or live-cloud change.
docs/dc-dc-deployment-workflow.md -- Stage 2 State-paragraph NetBox bullet + the C2 row. C2 redefined: office1-netbox holds the COMPLETE validated dataset (carve + roles + both DCs + the D-120 child ranges + service IPs), verified by (i) a hardened-fidelity-check re-run on the shared objects and (ii) a load+verify of the D-120 objects; the tooling gap is logged; apex write-back deferred. C2 stays OPEN.docs/dc-dc-netbox-buildout-scope.md -- section 8.1 (inverted the upstream/office1 roles: office1 is the record, the apex is a read-only v1 draft, merge-back deferred) and section 8.6 (retitled and rewritten from "Feeding the delta upstream" to "office1-netbox holds the validated dataset; apex write-back DEFERRED", with the D-120 tooling gap and the deferred-merge-back procedure).docs/session-ledger.md -- five spots corrected (D-120 Step 6 item; OPEN-WORK item 2; the NetBox WRITE-PATH BUGS preamble; the fidelity-recheck sequence note; the PINNED merge-point bullet) plus a NEW PINNED bullet recording the deferred apex write-back. All edits are in narrative sections; the machine-derived block was not touched.docs/design-decisions.md -- a dated Note under D-010 recording the VR1-phase apex role (office1-netbox is the working-draft apex; apex write-back deferred; defers the write, does not revoke D-010), AND a pointer on D-103's "NetBox remains the IPAM apex; MAAS and overlays consume NetBox values" bullet naming office1-netbox as that apex during VR1.netbox/README.md -- a banner so the NETBOX_URL=https://netbox.baldurkeep.com examples are not mistaken for the VR1 write target (that is office1-netbox; the apex URL is for the deferred merge-back only, gated by --yes-write-upstream).ip-ranges/ip-addresses; the D-120 load cannot be machine-verified until they are extended (each with its harness) or a manual read-back is recorded. This is the real remaining C2-execution work.office1-netbox is now load-bearing VR1 IPAM state on a lab VM; its backup/durability matters once it is the record (log-only; not part of this DOCFIX).Each item is an isolated text edit; revert individually:
git checkout HEAD -- docs/dc-dc-deployment-workflow.mdgit checkout HEAD -- docs/dc-dc-netbox-buildout-scope.mdgit checkout HEAD -- docs/session-ledger.mdgit checkout HEAD -- docs/design-decisions.mdgit checkout HEAD -- netbox/README.mdgit rm docs/changelog-20260715-docfix195-c2-netbox-of-record.mdReverting restores the prior "feed the carve upstream = C2" framing across all five docs. No code paths, scripts, harnesses, or live NetBox state are affected by this change or its revert.