provider-bundle-check: overlay merge + per-DC VIP bands + placement invariants
The committee's non-negotiable placement "spine" so the vr1-dc1 render is
machine-checked, not eyeballed. The checker was placement-blind (D-052 bindings
+ mysql=3 only), so any render could silently ship decorative HA.

- --overlay FILE: juju-like merge -> validates the EFFECTIVE deploy input
- --dc vr1-dc0|vr1-dc1: per-DC VIP bands (default dc0 = base; un-param run
  byte-identical to before). Closes the dc1-VIP-outside-the-check gap.
- placement invariants (fire only on a role-separated machines block, self-skip
  on the base bundle): no dangling to:; LXD->control, ceph-osd->storage,
  nova-compute->compute; num_units>=2 spread across that many DISTINCT machines
  (anti-affinity); ceph-osd==storage count, nova-compute==compute count.

Harness 15/15 (7 new behavioral cases); gauntlet ALL GREEN (78); repo-lint 0 fail.
Machines-block overlay merge is confirmed at `juju deploy --dry-run` (VERIFY-LIVE).

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01VUjEb7onHpdqFHUnio6iVw
1 parent 72cad5f commit c3970a9a676f8a7352b86c28ab3a905513538d67
@JANeumatrix JANeumatrix authored 22 hours ago
Showing 3 changed files
View
docs/changelog-20260724-stage5-committee-fork1.md
View
scripts/provider-bundle-check.py
View
tests/provider-bundle-check/run-tests.sh