|
VIP/band reconciliation measured; two ruled decisions found to have an unruled gap
Step 4 prep for the render pipeline. Read-only enumeration of the four disagreeing VIP surfaces, with every consequential claim re-verified directly before recording. Nothing adopted. NEW GAP: R11 ruled three gate changes (band .60->.99, VIP_COUNT_EXPECT 11->13, FAIL on hacluster-without-vip) but NOT the arity change R2's dual-stack forces. provider-bundle-check.py:137 requires exactly 3 addresses; a dual-family vip is 6, so under R2 the checker fails every application. :149's octet extraction also returns the whole address string on a v6 literal, and a v6 address tests False against an IPv4Network without raising -- so a naive arity fix just relocates the failure. Two RULED decisions whose combined end state the gate cannot express. TRAP: EXPECT_PUBLIC_VIP must STAY 11 while VIP_COUNT_EXPECT goes to 13. Measured against bundle.yaml -- neither vault nor designate carries a `public` binding, so neither joins that count. Reading "11 -> 13" and bumping both breaks the gate. The L3-9 overlay collision is worse than recorded and the dangerous merge order is the GREEN one: vips-last exits 0 while dropping every IPv6 leg, and prefer-ipv6: true survives as a separate key -- charms would bind :::port with no v6 VIP for pacemaker. Measured through the checker's merge MIRROR, not juju (absent here); flagged for --dry-run confirmation rather than asserted. CORRECTED one of the agent's own conclusions: dc1 "inheriting dc0's band bounds" is not a defect. The octet band is DC-invariant by design, so lib-net.sh:157 correctly unsets the prefixes and keeps the bounds. Acting on the uncorrected framing would have invented per-DC bounds that do not exist. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01HvCyrwvYTTcDYnRErfMsNf |
|---|
|
|
| docs/CURRENT-STATE.md |
|---|
| docs/audit/vip-reconciliation-20260727.md 0 → 100644 |
|---|