Author: W3 worker, follow-on to the container-elim pass (D-144, RULED 2026-08-10). Scope: posture reconciliation against the standing IPv6 rulings, the CLASSIFICATION MATRIX across every family-bearing surface touched or adjacent to the collapse, the Roosevelt-delta, and the honest (a)-genuine-unlocks-vs-(b)-independent-work framing. READ-ONLY; nothing built, nothing executed, no D-number minted or amended here (GA-R5 -- findings are LOGGED, never ruled).
Inputs read in full this session: docs/audit/container-elim-pass/FINAL-PLAN.md; docs/design-decisions.md D-101 (:2243-2412), D-124 + its four amendments (:4978-5170), D-134 + all amendments incl. the 2026-08-10 .8 client-VM one (:5885-6250), D-138 (:7091-7159), D-139 both rulings (:7280-7409), D-141 (:8003-8055), D-143 (:8110-8208), D-144 including its DEC package (:8210-8330); docs/audit/container-elim-pass/pass5-w1-mgmt-v6.md (full) and docs/audit/container-elim-pass/pass5-w2-metal-data-v6.md (full) -- both landed mid-session; their precise, line-cited rows are IMPORTED into this matrix rather than re-derived, per the tasking's "pull from W1/W2 once written" instruction. Every row below sourced from W1/W2/FINAL-PLAN/design-decisions.md is cited to its origin; none are re-derived independently unless marked [W3].
The standing principle (D-101, operator verbatim, :2274-2280): "We are building as close to full IPv6 as possible on every layer possible... using IPv4 where necessary only because it is necessary." Restated as the rule (:2282): IPv6 unless IPv4 is NECESSARY. Every v4 leg is a justified exception, never a neutral default choice (:2282-2290). D-139 Ruling A (:7280-7338, RULED 2026-07-31) is D-101's own APPLICATION, not a revision: it names, per plane, exactly what forces v4 -- metal-admin (PXE, the MAAS region API dial, the node-DNS forwarder, the v4-only D-134 utility band, a rack with no global v6) and provider-public (tenant FIPs against a still-v4 internet, external API VIPs, the edge default route) stay dual-stack; the other five planes (metal-internal, data-tenant, storage, replication, lb-mgmt) are IPv6-only. D-141 (:8003-8055) narrows the posture ONE further notch for a specific, named case: container-hosted API-charm VIPs are dual-stack-AUTHORED but v4-active/v6-reserved, gated on juju LP #1723240 + per-charm fixes -- this is not a cloud-wide v4 lean, it is the one place D-101's default is provably blocked today (memory pointer confirmed against the primary source this session).
Reconciliation test applied to every surface below: does a proposed v6 change (a) apply an ALREADY-ruled family (mechanical, no new decision), (b) touch a NAMED v4-necessity (D-141's LP #1723240 case; PXE), or (c) fall into a gap no ruling has adjudicated? Class (c) is the one this pass must not silently resolve -- GA-R5 forbids picking for the operator, so gaps are logged as candidate DEC material, not flipped.
Ruled-vs-built distinction, imported from W2 (important -- do not conflate the two): for the four now-IPv6-only planes, the v4 subnets are ruled REMOVED but still live in MAAS today -- D-139's own execution list states plainly "none of it is done" (design-decisions.md:7437), and v4 is removed LAST, "after each is proven" (:7443, per pass5-w2-metal-data-v6.md Section 2). A row marked ALREADY-v6 below means the FAMILY RULING is settled, not that the v4 side is already gone from the build.
D-143 axis discipline (:8153-8158, :8321-8323): the re-IP is explicitly "a v4-only re-IP" -- "The IPv6 family matrix, the 'IPv6 wherever possible' principle... and the dual-stack ruling are UNTOUCHED." No v6 literal changes value because of D-143; only v4 second/third octets shift 12->13 (D-134's octet-preserving map, :8169-8173). Every row below that touches a v6 family is therefore [D-139- independent] with respect to the [D-143] axis, on top of whatever it is with respect to [CE].
Classes used (the tasking specified four -- ALREADY-v6, FLIP-TO-v6-NOW-POSSIBLE, DUAL-STACK-REQUIRED, FORCED-v4 -- this pass's evidence required five more to avoid mis-stating an unruled or in-flight surface as one of the four):
| Class | Meaning |
|---|---|
| ALREADY-v6 | Family ruled and, where checkable, already the standing state; applying it to a new object (e.g. the client VM) is mechanical, not a new decision. May still have v4 physically present in the live build (see ruled-vs-built note above). |
| DUAL-STACK-REQUIRED | Ruled dual-stack; both families are load-bearing by explicit ruling, not a default. |
| FLIP-TO-v6-NOW-POSSIBLE | The collapse structurally removes the v4 force; v6 becomes technically reachable, but the concrete mechanism/measurement is still OWED. |
| v6-CAPABLE-BY-DESIGN (new, collapse-created) | A NEW control/surface the collapse itself creates, built on a family-agnostic mechanism (verified by precedent), so it costs nothing extra for v6 day one. |
| FORCED-v4 | A cited, ruled necessity for the specific sub-function. Distinguish the RULING ("v4-first") from an unmeasured universal capability claim -- see row 15. |
| UNRULED-GAP | No D-number adjudicates the family; v4 today by convention/history, not by ruling. Logged, not flipped. |
| DUAL-AUTHORED-STATUS-GATED | D-141's specific pattern: v4 active, v6 reserved, promotion gated on a named capability. |
| CONDITIONAL/OPEN | Resolution depends on a separate, not-yet-ruled fork (here, DEC-08); no family answer is assertable until the fork resolves. |
| RETIRED / N/A | The surface is eliminated by D-144 outright; no family question survives it. |
| # | Surface | Class | Reason / governing D | Collapse-relation |
|---|---|---|---|---|
| 1 | MAAS node power-dial reach path (vr1-dcN-maas-01 -> vcloud libvirtd) |
FLIP-TO-v6-NOW-POSSIBLE | Flattening removes the old force (dialing a plane-bridge-bound libvirt address); the new target is vcloud's own sshd over a family-agnostic transport, from a source (metal-admin) that already has v6. Concrete reachable address is UNVERIFIED, live-gated on DEC-15. [pass5-w1 row 1, `docs/design-decisions.md:8299-8304`] |
(a) genuine unlock -- did not exist as a question under Model B |
| 2 | D-124 region<->rack transit overlay (172.31.0.0/24) |
UNRULED-GAP | No D-number rules this leg's family. mesh-link (L2) and SSH (transport) both already support v6; a candidate v6 slot exists in the apex (f00::/40 "Infrastructure / site-to-site links", D-115 :3751-3753) but nothing has carved it. This is a PRE-EXISTING gap (predates D-144), not created by the collapse. [pass5-w1 row 2] |
(b) independent -- collapse only re-homes the leg's endpoint, does not touch family |
| 3 | Client-VM metal-admin leg (.8, D-134 2026-08-10 amendment) |
ALREADY-v6 | metal-admin is D-139 Ruling-A dual-stack for every host on the plane; the client VM inherits it mechanically the moment it is placed there. No new v6 decision -- applying an existing rule to a new object. [pass5-w1 row 3; `docs/design-decisions.md:6240-6248`] |
(b) independent of collapse's v6 credit -- the collapse creates the OBJECT, not the rule |
| 4 | Client-VM transit leg (same 172.31.0.x/30 scheme) |
UNRULED-GAP | Same open question as row 2; the D-144 ledger's "D-124 AMENDS -- Scheme-A addressing survives" (:8279-8280) preserves the ADDRESSING, not a family decision. Do not conflate with row 1 (MAAS's power-dial does not route through the client VM). [pass5-w1 row 4] |
(b) independent, re-homed not re-familied |
| 5 | (a) cross-DC host isolation control (OWED, DEC-14) | v6-CAPABLE-BY-DESIGN | Modeled on SEC-010's live table inet sec010 artifact (scripts/site-headend-install.sh:299) -- nftables' inet family matches v4 AND v6 in one ruleset, scoped by interface not IP literal. Costs nothing extra for v6 day one. [pass5-w1 row 5] |
(a) genuine unlock -- the control itself is NEW, created only because co-residency is new |
| 6 | SEC-010 transit-drop successor (endpoints: client VM + voffice1, DEC-16) | v6-CAPABLE-BY-DESIGN | Same table inet precedent as row 5; the planned extraction carries the shape forward. Covers a v6 transit leg IF/WHEN row 2/4 is ever ruled onto v6. [pass5-w1 row 6] |
(a) genuine unlock in mechanism; (b) the traffic it protects (row 2/4) is still v4 pending its own ruling |
| 7 | MAAS region<->rack control path (retirement pending DEC-08) | CONDITIONAL/OPEN | Moot if DEC-08 ratifies rack-controller retirement (pass2's own recommendation); if rejected, whether MAAS 3.7's rack<->region RPC supports v6 is UNVERIFIED -- no repo or vendor citation found either way. [pass5-w1 row 7] | (b) independent of the collapse itself (D-132 already put region+rack co-located per DC) |
| 8 | provider-public plane |
DUAL-STACK-REQUIRED | D-139 Ruling A: FIPs against a still-v4 internet, external API VIPs, Octavia tenant LB VIPs, edge default route. [pass5-w2 Section 2; `docs/design-decisions.md:7310-7311,7326`] | (b) independent -- D-139-ruled 2026-07-31, predates D-144 |
| 9 | metal-admin plane (base plane) |
DUAL-STACK-REQUIRED, with an embedded FORCED-v4 sub-function | Dual by ruling (D-139 :7327), but the PXE/DHCP sub-function inside it is v4-only by design, not merely v4-heavy: MAAS's own v6-static-only node-acquisition ruling (D-134 2026-07-27 amendment, :6138-6144) leaves dhcpd6 deliberately OFF, and the rack itself measures zero global v6 (ip -6 -o addr show scope global empty, per pass5-w2 Section 1). PXE-over-v6 platform CAPABILITY is UNVERIFIED -- no test/capture/vendor citation on disk states whether MAAS 3.7 even supports v6-only commissioning; do not import outside knowledge. [pass5-w2 Section 1, full] |
(b) independent |
| 10 | metal-internal plane |
ALREADY-v6 (ruled IPv6-only) | D-139 Ruling A explicitly SUPERSEDES D-101's "datastore east-west v4-bound" clause (:7334-7336) -- "nothing forces v4 here... a JUDGEMENT, not a protocol requirement" reversed. Build status: v4 still live, removed LAST after proof (pass5-w2 Section 2). A reader citing D-101's stale text alone would mis-state this plane's CURRENT family -- cite D-139. |
(b) independent -- ruled 2026-07-31 |
| 11 | data-tenant plane (geneve overlay) |
ALREADY-v6 (ruled IPv6-only) | D-139 Ruling A. The 2026-08-09 geneve-over-v6 rebuild fix is recorded at docs/audit/geneve-over-v6-rootcause-20260808.md (confirmed present on disk) and is orthogonal to D-144 per pass5-w2 Section 5b's explicit statement -- it fixes HOW v6 geneve works (a bracketed ovn-encap-ip OVS rejection), not WHETHER the plane is v6; do not credit the collapse for this. |
(b) independent, and independent of D-139 too (a build-mechanics fix, not a family ruling) |
| 12 | storage plane (Ceph public) |
ALREADY-v6 (ruled IPv6-only) | D-139 Ruling A. Build status: v4 still live, removed last. ceph-mon/ceph-osd are in PREFER_IPV6_CHARMS (:7432) -- converting this plane REOPENS the 2026-07-31 "prefer-ipv6 false on all seven" ruling note per-app, not yet re-ruled (pass5-w2 Section 6 risk note). |
(b) independent |
| 13 | replication plane (Ceph cluster incl. cross-DC leg) |
ALREADY-v6 (family settled) but carrier path OPEN (DEC-24) | D-139 Ruling A settles the FAMILY. Two open items compound on the SAME carrier: (i) the cross-DC leg has no v6 route at all today (D-139's own build-constraints bullet, :7431, pre-existing and OPEN); (ii) D-144's DEC-24 (:8312-8317) leaves the post-flatten virbr5/netem attachment for that same leg UNDEFINED. pass5-w2 Section 6 names this explicitly: "the one point where the W2 family ruling and the D-144 collapse genuinely intersect -- an unresolved carrier for an unresolved route." |
Mixed: (b) family independent; (a) the carrier-attachment QUESTION is collapse-raised (DEC-24 exists because of the flatten) |
| 14 | lb-mgmt plane (Octavia) |
ALREADY-v6, but two distinct objects, do not conflate (G18 warning) | (1) the octavia charm's own live/consumed ULA fc00::/64 (R8-ruled); (2) D-139's apex GUA f0X:80::/64 carved as a MAAS-underlay plane with NO charm consumer, kept reserved per the G18 ruling (option b). Pointing octavia at object (2) would reopen R8. [pass5-w2 Sections 2 and 4] |
(b) independent -- G18/D-141 governed, pre-dates D-144 |
| 15 | MAAS PXE / node provisioning (sub-function of row 9) | FORCED-v4 | D-101 (:2307-2308) and D-139 Ruling A both rule "PXE is v4-first" -- but this is a ruling, not a measured platform-capability ceiling. Do not assert PXE-over-v6 is impossible: no test, capture, or MAAS-source citation on disk measures whether MAAS 3.7 could commission v6-only (pass5-w2 Section 1, the "anchor question", explicit UNVERIFIED verdict). What IS settled: the ruling is unscoped to VR1 specifically and nothing in D-101/D-139 limits the v4-first posture to this deployment. |
(b) independent -- and see Roosevelt-delta below |
| 16 | LXD-container / API-charm VIPs (juju LP #1723240) | DUAL-AUTHORED-STATUS-GATED | D-141: v4 active, v6 reserved, promotion gated on the two-layer capability set (LP #1723240 + per-charm fixes, docs/charm-ip-family-compatibility.md). Carried risk (pass5-w2 Section 5a): on metal-admin (dual-stack), container addresses land on ONE family by unsorted mongo order (today v4) -- a detection gate ("every container's metal-admin leg is IPv4") is OWED, not built. DISAMBIGUATION (do not overstate D-144's reach): "container-elim" in this pass's title means the vvr1-dcN containment VM (D-122/D-123 Model B) -- it has nothing to do with juju's LXD-container control-plane units on the node VMs. D-144 eliminating the containment VM does not touch, unblock, or moot LP #1723240 in any way (pass5-w2 Section 5a: "D-144's relationship to this gap: NONE"). |
(b) fully independent -- different container concept entirely |
| 17 | Uplink/ISP NAT (172.30.x/24, modules/site-wan) |
FORCED-v4, single-stack by construction | opentofu/modules/site-wan/main.tf takes ONE var.cidr, one forward.mode="nat", one ips entry -- no v6 CIDR variable exists in the module at all (pass5-w2 Section 3). D-101's own rationale defers external v6 deliberately: NAT64/DNS64 was considered and REJECTED as a v6-egress simulant (:2295-2299); VR1's v4-only edge is a rehearsal simplification, not a capability gap. D-144 persists this UNCHANGED in family -- "edge WAN attaches directly to the per-DC site-wan NAT" (:8256-8257); only the WAN-bridge INDIRECTION (row 19, D-125's plumbing) is removed, not the NAT module or its family. |
(b) independent -- do not conflate with row 19's retirement |
| 18 | qemu+ssh provider dial (voffice1 -> vvr1-dcN, D-126 per-env keys) |
RETIRED / N/A | D-144: "the qemu+ssh provider dial + its D-126 per-env keys (no successor)" (:8254-8255). The surface is DELETED, not flipped -- there is no family question left to classify. |
(a) genuine removal (not a v6 unlock, a surface elimination) |
| 19 | D-125 bridge-in modules/wan-bridge (WAN indirection only, NOT the uplink NAT) |
RETIRED / N/A | D-125 header: "TERMINATED 2026-08-10 by D-144" (:5091-5094); the DC edge WAN attaches directly to row 17's site-wan NAT instead of bridging through the (now-eliminated) containment VM. Retiring the bridge module removes an indirection layer, not a family -- row 17's v4-only NAT survives this row's retirement unchanged. |
(a) genuine removal |
Matrix shape (19 rows): ALREADY-v6 = 6 (rows 3, 10, 11, 12, 13-family-half, 14); DUAL-STACK-REQUIRED = 2 (rows 8, 9); FLIP-TO-v6-NOW-POSSIBLE = 1 (row 1); v6-CAPABLE-BY-DESIGN(new) = 2 (rows 5, 6); FORCED-v4 = 2 (rows 15, 17); UNRULED-GAP = 2 (rows 2, 4); DUAL-AUTHORED-STATUS-GATED = 1 (row 16); CONDITIONAL/OPEN = 1 (row 7); RETIRED/N/A = 2 (rows 18, 19). 6+2+1+2+2+2+1+1+2 = 19. (Row 13 counted once, under ALREADY-v6, with its carrier-open half called out in the reason column and Section 4 below -- not double-counted.)
The honest headline: only ONE row (row 1) is a clean, single "the collapse newly makes this v6-possible" unlock, and even it is UNVERIFIED pending DEC-15. Rows 5/6 are collapse-created SURFACES that happen to be v6-capable by construction, not existing v4 surfaces flipped to v6. An empty-or-near-empty FLIP-TO-v6-NOW-POSSIBLE class is itself the finding, not a gap in this pass's search.
Judged surface-by-surface against the operator's "module deployment project" lens (FINAL-PLAN Section 3, :135-142, imported rather than re-derived):
Transfers verbatim (v4-forced on bare metal too -- not a virtualization artifact):
state/linklayerdevices.go, EthernetDeviceForBridge taking addrs[0] from an unsorted query, per D-139's "What forced this" section :7401-7409) -- substrate-independent. Bare metal runs the same juju version against the same bug; it transfers UNCHANGED. This is the non-obvious one: an operator could assume flattening the substrate also flattens this defect away. It does not -- juju, not the hypervisor, is the constraint.Does NOT transfer (virtual-only artifacts, no bare-metal analog in the same shape):
qemu+ssh dial + D-125 bridge-in module. Both exist ONLY because of nested libvirt (Model B); Roosevelt has no containment layer to dial into or bridge WAN through, so neither the surface nor its retirement has a bare-metal counterpart.:139-142) flags these explicitly as "artifacts of vcloud's single-hypervisor co-residency with no bare-metal analog in the same shape" -- a Roosevelt DC has its own physical NICs and switches, not a shared kernel with another DC's plane bridges.:2294-2301): "Roosevelt has FULL v4 AND v6 EDGE TRANSPORT... External IPv6 routing is deliberately NOT added this deployment; it arrives with the next full deployment." VR1's v4-only simulated-ISP hop is a REHEARSAL SIMPLIFICATION, not a Roosevelt requirement -- it does not transfer./30s. The transit-numbered-mesh SCHEME (region<->rack P2P addressing) is a virtualization-era answer to "how does an off-site controller reach an isolated rack"; whether it has a Roosevelt analog depends on Roosevelt's own physical topology, which is out of this pass's scope to assert.Mesh triangle / netem (row 13's carrier, virbr5 + siblings): FINAL-PLAN's own L0 judgment (:135-136) already rules these "virtualization shims" that do NOT transfer; DEC-24's open carrier-attachment question is a VR1-internal problem with no Roosevelt equivalent to inherit an answer from.
(a) Genuine unlocks the collapse creates (would not exist, or would not be answerable this way, under Model B):
(b) v6 work that is INDEPENDENT of the collapse and must not be credited to it:
ovn-encap-ip) fixed independently of any topology change; the plane was already ruled v6-only under Model B. pass5-w2 Section 5b states its D-144 relationship as explicitly "NONE".No v6 flip identified in this matrix conflicts with a standing ruling. The two UNRULED-GAP rows (2, 4 -- the D-124 transit family) are pre-existing gaps this pass surfaces, not proposed flips; per GA-R5 they are logged as candidate DEC material (a future DEC-14/DEC-16 ruling session should decide whether to close them, since both touch the same leg those DECs already govern) and are explicitly NOT resolved here.
:8312-8317); pass5-w2 independently names it the single point where its plane-family work and the D-144 collapse genuinely intersect (Section 6).Direct reads this session: docs/audit/container-elim-pass/FINAL-PLAN.md (full), docs/audit/container-elim-pass/pass5-w1-mgmt-v6.md (full, rows 1-7 imported verbatim with original citations preserved), docs/audit/container-elim-pass/ pass5-w2-metal-data-v6.md (full, rows 8-17 informed by its precise findings), docs/design-decisions.md D-101 (:2243-2412, incl. the 2026-07-27 ruling-note correction), D-124 + amendments (:4978-5170, incl. the full D-125 bridge-in text), D-134 + all amendments incl. 2026-08-10 (:5885-6250), D-138 (:7091-7159), D-139 both rulings (:7280-7409), D-141 (:8003-8055), D-143 (:8110-8208), D-144 incl. DEC package (:8210-8330); docs/tool-index.md (header + teardown table); ls scripts/ | grep geneve confirmed geneve-encap-assert.sh and dc-dc-mtu-geneve-budget.sh exist on disk; ls docs/audit/ | grep geneve confirmed geneve-over-v6-rootcause-20260808.md exists on disk (cited by path, not memory); ls docs/audit/container-elim-pass/ | grep pass5 re-checked twice this session -- pass5-w1-mgmt-v6.md and pass5-w2-metal-data-v6.md both present at write time, fully reconciled into this document (Section 5). READ-ONLY throughout; no mutation; nothing executed against the cloud; no D-number ruled, amended, or proposed as a ruling by this pass (findings only, GA-R5).