|
Prove the sandbox is a FAITHFUL replica, not just a count-matching one
netbox/sandbox-fidelity-check.py (+4 assertions in tests/sandbox-seed, 22/22 PASS) Counts and idempotency CANNOT prove a faithful seed. The region-scope bug proved it: 17 of 90 prefixes silently lost their scope, every count still matched, and re-runs were still perfectly idempotent. It was caught by LUCK on a spot-check that happened to print 'site None'. This is that catch, made deliberate. Method needs no new plumbing: prod-draft-dump.py is READ-ONLY, so point it at the sandbox and diff the two JSON dumps FIELD BY FIELD. RESULT: every shared object is field-level IDENTICAL to upstream, and the delta is EXACTLY the expected D-115 additions (+edge role, +vr1-off1 site, +8 prefixes). Nothing missing, nothing unexpected. The sandbox is a PROVEN baseline -- which is what the later feed-back diff to production depends on. Also de-misdirects docs/dc-dc-netbox-buildout-scope.md, which still told the next person to run '--dc dc2' with DC2_V4_SUPERNET -- both of which the new guards now REJECT by name. Its G5 recommendation (rename the APEX to vr1-dc1/vr1-dc2) is marked SUPERSEDED: D-117 ruled the opposite. ORG_ULA_48 is now listed there as UNASSIGNED and BLOCKING, not as a settled literal. Disclosure: D-117 Option B is PARTIALLY executed -- the import path and the scope doc are done; the $DC shell selector and the runbook DC prose are NOT. Recorded in the ledger so 'D-117 ADOPTED' is not misread as 'fully renamed'. repo-lint 0 fail. run-tests-all: ALL GREEN (55 harnesses). Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_013ZBxzAbmqwLW7jEmMG23Xw |
|---|
|
|
| docs/dc-dc-netbox-buildout-scope.md |
|---|
| docs/session-ledger.md |
|---|
| netbox/sandbox-fidelity-check.py 0 → 100755 |
|---|
| tests/sandbox-seed/run-tests.sh |
|---|