diff --git a/runbooks/dc-dc-teardown-rollback.md b/runbooks/dc-dc-teardown-rollback.md index 311c83d..c2add67 100644 --- a/runbooks/dc-dc-teardown-rollback.md +++ b/runbooks/dc-dc-teardown-rollback.md @@ -360,6 +360,18 @@ ``` **(b) is the one that catches a cascade** -- a drop in count means STOP, do not rebuild. +**>>> SECOND INSTRUMENT WARNING, 2026-08-03: DO NOT TEST FOR THE MODEL'S ABSENCE WITH A +GREP THAT CANNOT TELL "GONE" FROM "CANNOT LOOK". <<<** A wait-loop polling +`juju models --format=yaml | grep -q "name: admin/"` and breaking when the grep +MISSES reported **"REAPED"** -- while the model still existed and the CONTROLLER API WAS +DOWN. With the API refused, `juju models` prints NOTHING and exits, the grep matches +nothing, and an absence-test reads that as success. It is the "could not look is never +nothing there" rule, in a checker written in the same session that wrote this runbook. +**Poll on a POSITIVE signal instead:** require `juju models` to actually RETURN model +lines, and only then decide whether the target is among them; treat empty output or a +non-zero juju exit as REFUSE (evaluate again), never as "gone". Watch the pipeline too -- +`cmd | head -3; rc=$?` captures `head`'s status, not the command's. + **INSTRUMENT WARNING, learned by getting it wrong (2026-07-31): during a teardown, `juju status -m ` is the instrument; `juju models` COUNTS ARE NOT.** The summary columns ZERO OUT while the model is `destroying` -- they read "0 machines / 0 units"