dc-plane-ipam: add retire-v6-ula (D-139 step 6 MAAS half), refuse-on-non-empty
The MAAS half of step 6 was executed BY HAND for dc0 on 2026-08-02 -- four maas subnet
delete calls -- which is the 'no repo tool, mutations live only in a transcript' gap D-132
q1 already forced this repo to close once for the region carve. Without this the dc1
rebuild cannot reproduce the dc0 end state.

The guard is the point and it is not theoretical: on dc0 fd50:840e:74e2:220::/64 looked
like the other four but held two STICKY allocations -- ::5 user juju-vr1-dc0 (the deploy
client) and ::6 user MAAS (the region the delete is issued to), neither with a GUA
counterpart. So a holder or an interface link is a REFUSAL, and the refusal NAMES the
holder: '2 allocations' does not tell you it is the controller.

Both checks are required -- zero allocated IPs does not mean nothing references a subnet.
Deletes one at a time, never looped (hard rule 3), and READS BACK that each row is gone,
because a delete returning success is not evidence the row went away.

Harness update follows in the next commit.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01HvCyrwvYTTcDYnRErfMsNf
1 parent 025e798 commit ff7a0bcf6f02ac86c147137faf7f6161f4027ed0
@JANeumatrix JANeumatrix authored 1 day ago
Showing 1 changed file
View
scripts/dc-plane-ipam.sh