C2 sub-task (ii), per DOCFIX-195: load the D-120 compose-/24 band ranges + the two static service IPs into office1-netbox (the VR1 IPAM apex) and VERIFY them. The logged tooling gap: the sandbox loop (prod-draft-dump.py + sandbox-fidelity-check.py) did not cover ip-ranges/ip-addresses at all, so those objects were invisible to the fidelity check. This closes that gap and then does the load, verified.
Tooling (the "A" extension):
netbox/prod-draft-dump.py -- ENDPOINTS += ipam/ip-ranges and ipam/ip-addresses. Ranges get a synthetic range key (start-end) since the checker keys on one field. Verified live: the endpoints dump (0/0 before the load).netbox/sandbox-fidelity-check.py -- KEY += the two endpoints; EXPECTED_NEW += the 3 D-120 ranges (keyed start-end) + the 2 service IPs (keyed address). They are pure delta (the frozen v1 draft carries none), so both-bounds already gives endpoint/address correctness -- a wrong endpoint is a different key (UNEXPECTED-EXTRA + EXPECTED-BUT-ABSENT). Success banner now reads D-115/D-117/D-118/D-120.tests/sandbox-fidelity-check/run-tests.sh -- +T11 (a dropped D-120 range -> EXPECTED-BUT-ABSENT) +T12 (a stray ip-address -> UNEXPECTED-EXTRA). 12 -> 14.Importer:
netbox/d120-compose-bands.py -- stdlib, UA-aware, SANDBOX_HOSTS-guarded, DRY-BY-DEFAULT (--commit to write, --yes-write-upstream for a non-sandbox target), with a WHOLE-PLAN PREFLIGHT (parent 10.10.1.0/24 must exist; every endpoint in-parent; start<=end) so a bad plan cannot half-write. Creates the 3 ranges + 2 IPs, idempotent. Harness tests/d120-compose-bands/ (16/16) pins the band values + the guards.The load (executed 2026-07-15, operator-approved): Dry-run previewed 5 creates / 0 present; --commit against office1-netbox created:
10.10.1.2-.49 (static), .100-.200 (dynamic), .201-.254 (node)10.10.1.10 (office1-netbox), 10.10.1.11 (office1-tailscale) Re-dump -> ip-ranges 3, ip-addresses 2. Fidelity check -> exit 0: "upstream draft + EXACTLY the planned delta (D-115/D-117/D-118/D-120)."git rm netbox/d120-compose-bands.py tests/d120-compose-bands/run-tests.sh docs/changelog-20260715-d120-load-and-iprange-tooling.mdgit checkout HEAD -- netbox/prod-draft-dump.py netbox/sandbox-fidelity-check.py tests/sandbox-fidelity-check/run-tests.sh docs/session-ledger.md docs/dc-dc-deployment-workflow.md