|
R9 RULED: derive lib-net's dc1 arm from the overlay with a drift check (D-119 amendment)
GA-R5: question and exact utterance quoted, dated, pushed before dependent work. Operator utterance: "Derive lib-net's dc1 arm from the overlay, with a drift check (Recommended)". Recorded as a D-119 AMENDMENT -- D-119 owns the region-qualified per-DC arms in lib-net.sh, so the question of how the dc1 arm is populated belongs there. RULED SHAPE: lib-net.sh's vr1-dc1 arm is GENERATED from overlays/vr1-dc1-vips.yaml with a render-drift check that fails the gauntlet on divergence. Consumers keep sourcing lib-net unchanged -- no script learns to parse YAML -- and exactly one authored copy of the values exists. WHY THIS IS NOT NEW MACHINERY: D-137 sub-ruling 2 already ruled and built the same shape for credentials, with creds-manifests DERIVED from creds-matrix.tsv and the gauntlet failing on rendered-vs-checked-in drift. This applies a proven in-repo pattern to network literals rather than inventing one. IT DOES NOT PRE-EMPT D-136, and that was the deciding property. D-136 is PROPOSED and unruled. This is the smaller compatible step: the overlay becomes the single authored source for script-facing values. If D-136 is later adopted the apex becomes the source and BOTH the overlay and this derived arm become generated -- a sub-case, not a competitor. MEASURED BASIS, which inverts the intuitive reading: lib-net.sh:76-79 states the backward-compatibility design in terms -- sourcing without the selector keeps VR0/DC0 values "completely unchanged". So the unset block fires ONLY for selector-callers. The 8 correctly-updated scripts break LOUDLY under set -u; the 20 never updated fail SILENTLY on dc0's literals. The silent half is the dangerous half. GUARD CARRIED FROM R11, and it matters for the generator's implementation: the dc1 arm unsets NINE variables for TWO different reasons. METAL_INTERNAL_VID and METAL_INTERNAL_IFACE are CORRECTLY unset because D-133 abolished the VLAN-103 / br-internal stack for VR1 -- those facts genuinely do not exist. Only the VIP/FIP/keystone group is superseded and derivable. A generator that populated all nine would silently reintroduce a stack D-133 retired. COUPLED: R2 makes the derivation dual-family, not v4-only. R11 moves VIP_COUNT_EXPECT 11 -> 13 and widens the octet band to .99, and the two band constants (OCTET_LO/HI in provider-bundle-check.py, VIP_OCTET_MAX in lib-net.sh) are separately named in two files. STILL OWED AND EXPLICITLY NOT COVERED: the consumer sweep. This ruling decides where values live; it does not make the 20 non-selector scripts call the selector. Stage-5 exposure is two of them (phase-03-core-verify.sh, deploy-watch.sh); carve-host-interfaces.sh:48-67 (DOCFIX-166) is the in-repo precedent for wiring one correctly. Execution is a separate gated step under standard delivery discipline. Revert: git revert this commit; the amendment is additive. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01HvCyrwvYTTcDYnRErfMsNf |
|---|
|
|
| docs/CURRENT-STATE.md |
|---|
| docs/design-decisions.md |
|---|