diff --git a/docs/CURRENT-STATE.md b/docs/CURRENT-STATE.md index 9df2eac..b5a865d 100644 --- a/docs/CURRENT-STATE.md +++ b/docs/CURRENT-STATE.md @@ -1102,8 +1102,24 @@ report 9a's message, not 9b's, or the next session is sent to add v6 legs when the fix is to remove the option) and re-proven able to fail against the fold-9a-into-9b mutation. Harness 44 -> **48/48**. **Gauntlet ALL GREEN (93); repo-lint 0 fail.** - **THE dc0 DEPLOY INPUT NOW SWEEPS CLEAN: 75 option assignments across 20 charm schemas, - 0 unknown, 0 unresolvable** (was 81 with 6 unknown -- the six removed lines). + **BOTH DEPLOY INPUTS NOW SWEEP CLEAN, for option NAMES *and* VALUE TYPES: dc0 and dc1 each + 75 assignments / 20 schemas / 0 unknown name / 0 type mismatch / 0 note / 0 unresolvable, + EXIT 0** (dc0 was 81 with 6 unknown; dc1 introduces NO new charm@channel pair, checked + rather than assumed). **PROOF OF TEETH, because a clean sweep across two inputs is exactly + the implausibly-uniform result this repo has been burned by:** three defects planted in a + THROWAWAY copy were all caught -- a restored `prefer-ipv6` on barbican (`[FAIL name]`), a + quoted `"true"` on keystone's boolean (`[FAIL type]`), and an unquoted float where a string + is declared (`[note]`), EXIT 1. So the two EXIT-0 readings are a measurement, not a silent + no-op. Type judgement is deliberately conservative: a mismatch is reported only where + juju's own coercion cannot save it; a scalar where a STRING is declared is a NOTE; an + UNRECOGNISED declared type REFUSES. + **WHAT REMAINS BEFORE ATTEMPT 2, none of it a decision:** the dc0 rack's `~/repo-stage` + (the D-138 client host's deploy input) is still at the PRE-ruling overlays and must be + refreshed from the branch; then `preflight.sh` for the DC (expected RED on P5 only, + ruled-accepted 2026-07-30 for its six ENUMERATED findings -- that acceptance does NOT cover + a newer one); then Step 4.2's `--dry-run`, where `bundle.yaml:592`'s `ceph-osd` + `tags=openstack` constraint is the known exposure to decide (that tag is MEASURED ABSENT + from the dc0 region). **RUNBOOK DEFECT FOUND IN PASSING, LOGGED NOT FIXED (DOCFIX material):** `runbooks/dc-dc-phase4-juju-bundle-per-dc.md:553-557` gives the dc0 deploy WITHOUT `overlays/vr1-dc0-machines.yaml`, while the dc1 block three lines below includes its diff --git a/docs/audit/stage5-prefer-ipv6-charm-research-20260731.txt b/docs/audit/stage5-prefer-ipv6-charm-research-20260731.txt index 6993a78..46401f3 100644 --- a/docs/audit/stage5-prefer-ipv6-charm-research-20260731.txt +++ b/docs/audit/stage5-prefer-ipv6-charm-research-20260731.txt @@ -281,15 +281,9 @@ >>> `prefer-ipv6` ON THOSE SIX IS THE ONLY UNKNOWN OPTION IN THE ENTIRE DEPLOY INPUT. -SCOPE OF THAT CLAIM, stated so it is not read as "attempt 2 is safe". This checked -option NAMES, for the dc0 input only. TWO EXTENSIONS ARE OWED BEFORE THE REDEPLOY, -each able to cost a whole attempt the same way: - (i) OPTION VALUE TYPES -- every downloaded config.yaml carries a `type:` field - that this pass discarded. A boolean assigned a string fails the same way. - (ii) THE dc1 INPUT -- unswept. There is no ruled DC ordering and the fix is - symmetric, so a dc1-only defect would surface as a further failed deploy. -Sequenced AFTER the ruling: doing them now would be precondition work the standing -directive puts out of scope. +SCOPE OF THAT CLAIM, stated so it is not read as "attempt 2 is safe". The pass above +checked option NAMES, for the dc0 input only. Two extensions were owed, and BOTH WERE +RUN after the ruling landed (see the closing section). Schemas read (revision at 2024.1/stable unless noted): barbican 265, ceph-mon 491, ceph-osd 953, ceph-radosgw 600 (squid/stable), cinder 820, designate 418, @@ -389,8 +383,66 @@ two commits touch the skill and permission rules only; the four deploy-input files were hash-compared rather than assumed equal. -STATUS OF STAGE 5 AFTER THIS RESEARCH -------------------------------------- -Still BLOCKED, now on the RULING rather than on the research. Nothing was edited: the -overlay is untouched, R2 is unamended, invariant 9 is unchanged. The model remains -empty. +POST-RULING: THE RULING WAS TAKEN, BUILT, AND BOTH DEPLOY INPUTS RE-SWEPT +------------------------------------------------------------------------ +RULED 2026-07-31 (GA-R5). Operator utterance, verbatim: "I want it to use IPv6, if +there is spam mechanisms being applied then that is bad. Even if it doesn't cause an +issue now, it might in the future. A clean IPv6 network is better than one with +unusable and possibly future breaking configurations." That stated a PRINCIPLE rather +than selecting an option, so a confirming exchange was taken rather than adopting an +inferred ruling: "Yes -- keep the v6 legs, remove only the option". Recorded as a +D-101 RULING NOTE dated 2026-07-31; OPS under GA-R3, no D-number; D-101 UNAMENDED. + +BUILT the same day, three parts, all mutation-proven -- see +docs/changelog-20260731-prefer-ipv6-research.md item 6. Measured delta to the +artifacts: EXACTLY SIX LINES REMOVED PER DC AND NOTHING ELSE. Every `vip` string is +byte-identical, so all v6 legs are retained; the seven keep the option. + +BOTH DEPLOY INPUTS THEN RE-SWEPT, now for option NAMES **and VALUE TYPES**: + + dc0 bundle.yaml + vr1-dc0-{vips,machines,octavia-pki} + 75 assignments / 20 schemas / 0 unknown name / 0 type mismatch / 0 note / + 0 unresolvable EXIT 0 (was 81 with 6 unknown) + dc1 bundle.yaml + vr1-dc1-{vips,machines,octavia-pki} + 75 assignments / 20 schemas / 0 unknown name / 0 type mismatch / 0 note / + 0 unresolvable EXIT 0 + (dc1 introduces NO new charm@channel pair -- checked, not assumed) + +PROOF OF TEETH, because a clean sweep across two inputs is exactly the implausibly +uniform result this repo has been burned by. Three defects were planted in a THROWAWAY +copy and all three were caught: + + [FAIL name] barbican barbican@2024.1/stable does not declare option 'prefer-ipv6' + [FAIL type] keystone keystone option 'prefer-ipv6': declared boolean, got str ('true') + [note] glance glance option 'vip': declared string, value is unquoted float + + EXIT 1. So the two EXIT-0 results above are a measurement, not a silent no-op. + +TYPE-CHECK JUDGEMENT, stated because it decides what the sweep is worth: a mismatch is +reported only where juju's own coercion cannot save it (a boolean given a non-boolean, +an int/float given a non-number). A scalar where a STRING is declared is a NOTE, not a +failure -- juju coerces it -- but it is still surfaced, because an unquoted value is how +a version string silently becomes a float. An UNRECOGNISED declared type REFUSES rather +than being waved through. + +STATUS OF STAGE 5 AFTER THIS SESSION +------------------------------------ +UNBLOCKED on this question. The ruling is recorded, built and verified; the gauntlet is +ALL GREEN (93) and repo-lint 0-fail; both DCs' deploy inputs sweep clean on names and +types. No cloud state changed this session -- the `vr1-dc0` model is still empty and no +`juju deploy` was run. + +WHAT REMAINS BEFORE ATTEMPT 2, and none of it is a decision: + - the dc0 rack's `~/repo-stage` (the D-138 client host's deploy input) is at the + PRE-ruling overlays and must be refreshed from the branch; + - `preflight.sh` for the DC -- expected RED on P5 only, ruled-accepted 2026-07-30 for + its six enumerated findings, and note that acceptance does NOT cover any newer P5 + finding; + - `bundle.yaml:592`'s `ceph-osd` `tags=openstack` constraint remains the known + exposure to decide at Step 4.2's `--dry-run`; that tag is MEASURED ABSENT from the + dc0 region. + +STILL OPEN AND NOT DECIDED HERE: + - the SEVEN declaring charms (its own GA-R5 exchange); + - a repo GATE for charm-schema validation (owed, not built); + - the runbook's dc0 deploy block omitting a non-no-op overlay (DOCFIX material). diff --git a/docs/changelog-20260731-prefer-ipv6-research.md b/docs/changelog-20260731-prefer-ipv6-research.md index 5b4c240..de7f2d0 100644 --- a/docs/changelog-20260731-prefer-ipv6-research.md +++ b/docs/changelog-20260731-prefer-ipv6-research.md @@ -79,10 +79,23 @@ capture so it can be re-run or promoted later. CURRENT-STATE already records that no gate in this repo reads a charm config schema. -**Scope, stated so it is not over-read.** It checked option NAMES, for the dc0 input -only. Two extensions are OWED before the redeploy and are sequenced after the ruling: -option VALUE TYPES (every downloaded `config.yaml` carries the `type:` field this pass -discarded), and the dc1 input, which is unswept. +**Both owed extensions were then RUN, after the ruling landed** -- option VALUE TYPES +(every downloaded `config.yaml` carries a `type:` field the first pass discarded) and +the dc1 input. **dc0 and dc1 each: 75 assignments / 20 schemas / 0 unknown name / 0 type +mismatch / 0 note / 0 unresolvable, EXIT 0.** dc1 introduces no new charm@channel pair, +checked rather than assumed. + +**PROOF OF TEETH.** A clean sweep across two inputs is exactly the implausibly-uniform +result this repo has been burned by, so three defects were planted in a THROWAWAY copy: +a restored `prefer-ipv6` on barbican (`[FAIL name]`), a quoted `"true"` on keystone's +boolean (`[FAIL type]`), and an unquoted float where a string is declared (`[note]`). +All three caught, EXIT 1. The EXIT-0 readings are a measurement, not a silent no-op. + +**Type judgement, stated because it decides what the sweep is worth.** A mismatch is +reported only where juju's own coercion cannot save it (a boolean given a non-boolean, +an int/float given a non-number). A scalar where a STRING is declared is a NOTE -- juju +coerces it -- but it is still surfaced, because an unquoted value is how a version string +silently becomes a float. An UNRECOGNISED declared type REFUSES rather than passing. **Revert.** Nothing to revert -- no repo artifact was created by this item.