|
D-139 ruling A NOT achievable at these charm revisions; apex carve tool built
TWO agent results, both recorded; nothing actioned, nothing pushed to NetBox. >>> RULING A (v6-only on five planes) IS BLOCKED BY UPSTREAM CHARM DEFECTS <<< RULING B (full GUA) IS ORTHOGONAL AND STANDS -- GUA-vs-ULA is independent of whether a plane keeps v4, so the carve tool is unaffected and a GUA DUAL-STACK carve is achievable today. This needs an operator ruling. RE-VERIFIED INDEPENDENTLY against the shipped ceph-osd rev 953 artifact, because it decides the ruling. hooks/utils.py:203-217 get_host_ip() returns get_ipv6_addr()[0] when prefer-ipv6 is set, else socket.inet_aton(hostname) and on failure dns.resolver.query(hostname, 'A') -- an IPv4-ONLY lookup -- under the charm's OWN comment "...just let it kill the hook". So ceph-osd fails on a v6-only plane in BOTH directions: false -> inet_aton raises on a v6 literal then NXDOMAINs an IN A lookup (LP #2109798, New); true -> bare get_ipv6_addr() (also ceph_hooks.py:547, WITHOUT dynamic_only=False) returns DYNAMIC/SLAAC only while every VR1 node holds a MAAS STATIC v6 (LP #2061836 -- Fix Committed on ceph-mon, New and never fixed on ceph-osd, confirmed absent from rev 953). Reported from the capture and NOT re-verified here, recorded as such: mysql / mysql-router bare user:pw@addr URIs invalid for an unbracketed v6 literal; hacluster 2.4/stable rev 166 (released 2026-06-29) still hard-writes ip_version: ipv4 though LP #2111852 is Fix Committed -- FIX COMMITTED IS NOT FIX RELEASED; OVN documenting encap as "The IPv4 address of the encapsulation tunnel endpoint" with zero v6 encap values in OVN 24.03's test suite. Counted locally: metal-internal appears 273 times in bundle.yaml across ~44 apps; rabbitmq-server is DEPLOYED by the bundle but ABSENT from PREFER_IPV6_CHARMS -- the only mismatch across all 33 bundle pairs, where invariant 9a would emit a factually false message. APEX CARVE TOOL (netbox/d139-gua-carve.py, 232 lines) + tests/d139-gua-carve (65 cases, offline stub apex); manifest 94->95. Live dry run: CREATE 22 | EXISTS 6 untouched | RETIRE-REPORT 18, and it surfaced 52 DEPENDENT ip-addresses inside the retiring ULA /64s that a later delete would orphan. Proof no write occurred: apex prefix count 139 before and after. 5 mutations, each turning a NAMED test red, tool restored sha256-identical. OWED: (a) the foundational measurement is STILL not taken -- does network-get return v6 on a v6-only bound space? (b) D-139's "remove v4 LAST, after each is proven" is UNSATISFIABLE as written; per-plane conversion is atomic. (c) the rabbitmq-server mismatch. PROCESS FAILURE, OWNED: the research was written to /tmp and would have been LOST -- I scoped the agent read-only and gave it no repo path. Rescued, sha256-verified. STANDING CONSEQUENCE: every agent mandate must NAME A REPO PATH for its findings; "read-only" constrains what it may CHANGE, not where it may RECORD. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01HvCyrwvYTTcDYnRErfMsNf |
|---|
|
|
| docs/CURRENT-STATE.md |
|---|
| docs/audit/d139-carve-dryrun-20260801.txt 0 → 100644 |
|---|
| docs/audit/v6-only-charm-viability-20260801.txt 0 → 100644 |
|---|
| docs/changelog-20260731-snap-proxy-apply-ipv6.md |
|---|
| netbox/d139-gua-carve.py 0 → 100644 |
|---|
| tests/HARNESS-MANIFEST |
|---|
| tests/d139-gua-carve/run-tests.sh 0 → 100755 |
|---|
| tests/d139-gua-carve/stub-apex.py 0 → 100644 |
|---|