|
G19 BUILT and PASSED LIVE; finds a latent defect in D-139's execution list
scripts/dc-node-v6-verify.sh (270 lines, 24-line header) + tests/dc-node-v6-verify (55 cases); manifest 95 -> 96. All three subcommands exercised LIVE this session: plan vr1-dc0 PASS exit 0 (9 machines, v6 plane set IDENTICAL across all 9, 6 planes, prefixes DERIVED); node vr1-dc0 <spec> on storage-01 against live peer storage-02 PASS exit 0 with 12 assertions -- six address-presence, six peer-reachability, every plane "up, global, DAD complete, sole global on the NIC" and "replies, neighbour DELAY"; bridges vr1-dc0 reporting 7 bridges. Harness 55/55, gauntlet ALL GREEN (96), three mutations each turning a NAMED test red. RUN AGAINST A REAL NODE while the boot window was open specifically so it would not ship fixture-green -- the snap proxy's harness was green for a week before anything was proven end to end. NO v6 PREFIX LITERAL EXISTS IN THE FILE, and that was a constraint not a nicety: D-139 retires the ULA /48 for GUA, so a baked table would be right today and wrong on carve day. plan derives from live MAAS and emits a SPEC; node consumes it and knows no prefixes. A harness case drives the same green path with a ULA fixture AND a GUA fixture, so the property is EXECUTED, not asserted. >>> LATENT DEFECT IN D-139's OWN EXECUTION LIST <<< D-139 names dc-node-v6-carve.py to "re-carve 54 node v6 statics". VERIFIED against that script's source: it assigns v6 "on every plane WHERE IT ALREADY CARRIES IPv4", picks the v6 subnet "on the SAME MAAS vlan as that v4 link", derives the host part from "the last octet of the node's own v4 address", and its loop body is a bare `if not v4: continue`. Under D-139 five planes lose v4 and lb-mgmt never had a v4 twin, so after v4 removal it would SILENTLY CARVE FOUR FEWER PLANES PER NODE rather than fail. The v6 carve MUST run BEFORE v4 removal, or the tool must be rewritten -- compounding the already-recorded fact that D-139's "remove v4 LAST" clause is unsatisfiable. LOGGED, NOT FIXED. My own agent mandate stated this tool's input source WRONGLY (apex/D-136; it is live MAAS); the agent checked rather than inheriting the error, which is why the defect surfaced. THREE MORE FINDINGS: (i) the multicast reading is ESTATE-WIDE -- all six plane bridges plus the WAN bridge at snooping=1/querier=0 on dc0 AND dc1, and the jumphost's uplinks too, i.e. the default here, not a chosen setting; the subcommand tags it SUSPECT and asserts no Linux behaviour, correctly, since cold-start multicast ND was already measured working across it. (ii) plan's PEER SELECTION IS DEPLOYMENT-BLIND -- it picked control-01, which is not deployed, so the derived SPEC cannot pass in a PARTIAL deployment; worked around by substituting the live peer, logged not fixed. (iii) a harness bug caught by the instrument-currency rule, NINTH of its kind: absent-ip/absent-virsh REFUSE cases were driven with PATH=/usr/bin:/bin, which still contains both, so they were red for the WRONG REASON. TWO OPEN CHECKS SETTLED on the live nodes: every NIC carries exactly ONE global (sole-global predicate holds today), and an OVS-internal br-ex does report LOWER_UP (predicate safe). GA-R2: the build agent wrote its own changelog; folded VERBATIM into this session's single changelog and removed. Crossing midnight does not start a new session. repo-lint 0 fail. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01HvCyrwvYTTcDYnRErfMsNf |
|---|
|
|
| docs/CURRENT-STATE.md |
|---|
| docs/audit/g19-ipv6-node-plane-verify-20260801.txt |
|---|
| docs/audit/g19-ipv6-plane-gate-build-20260801.txt 0 → 100644 |
|---|
| docs/changelog-20260731-snap-proxy-apply-ipv6.md |
|---|
| scripts/dc-node-v6-verify.sh 0 → 100644 |
|---|
| tests/HARNESS-MANIFEST |
|---|
| tests/dc-node-v6-verify/run-tests.sh 0 → 100644 |
|---|