QUEUED FINDINGS -- 2026-07-29 session close sweep ================================================= Content that existed ONLY in this session transcript. Captured before compaction, per the precedent of queued-findings-20260726/-20260727. NONE of this is ruled or built; it is material for the Stage-5 close skill sweep (deferred by operator direction 2026-07-27). -- A. THE STRICT-BASH QUOTING TRAP FAMILY (three distinct instances, one session) ------ These gate scripts run `set -euo pipefail` + `inherit_errexit` + `IFS=$'\n\t'`. That combination turns three ordinary-looking constructs into silent or confusing failures. Each was MEASURED here, not theorised: A1. A SPACE-SEPARATED STRING DOES NOT WORD-SPLIT under IFS=$'\n\t'. `VIP_SRC="a b"; grep ... $VIP_SRC` passed BOTH names to grep as ONE filename; grep exited 2, pipefail propagated, and pre-flight-checks DIED SILENTLY mid-CHECK-1. Same root cause made maas-role-tags report a single absurd tag literally named 'control compute storage'. ARRAYS ARE IMMUNE -- use `X=(a b)` / `"${X[@]}"`. A2. A BARE `$( )` ABORTS THE SCRIPT rather than falling through to a refusal branch. `LBNET_MTU="$([ -n "$X" ] && openstack ...)"` exits non-zero when X is empty; with inherit_errexit the whole run dies instead of reaching the "could not look" REFUSE. Every capture in a refusal path needs an explicit `|| true`. A3. AN APOSTROPHE INSIDE A SINGLE-QUOTED SHELL STRING that wraps embedded python terminates the string, and bash then parses python. One word ("host's") in a comment failed all 11 harness cases at once with a shell syntax error pointing at a python line. Embedded-python blocks in these scripts must contain NO apostrophes. -- B. TWO GREPS THAT LOOKED LIKE FINDINGS AND WERE NOT --------------------------------- B1. `grep mac` MATCHES `type_machine`. A MAC-safety audit of a saved tofu plan -- run specifically because 2026-07-20's in-place apply regenerated every MAC -- returned one hit that was `type_machine = "q35"`. Under time pressure that reads as a live MAC change on a domain about to be applied. Grep `mac_address`, not `mac`. B2. `grep -c 'macs = \['` COUNTS COMMENTS. A config comment explaining a deliberate `macs = []` inflated a node-count assertion from 10 to 11 -- indistinguishable from a spurious extra node. Count CONFIG: strip comment lines first. Same class as the ledger-scan defect where a doc merely QUOTING a token inflated the next-free counter. -- C. MAAS BEHAVIOURS MEASURED THIS SESSION -------------------------------------------- C1. ENLISTMENT IS NOT COMMISSIONING. `New` is post-enlistment, pre-commissioning. A VM that PXE-boots into MAAS enlists on its own and sits in New; nothing has probed it. C2. MAAS AUTO-CONFIGURES POWER ONLY FOR IPMI MACHINES. Evidenced by the commission API help: "skip_bmc_config ... for IPMI based machines". A KVM guest has NO BMC, and the virsh parameters (qemu+ssh URI, credential, libvirt DOMAIN NAME) are HYPERVISOR facts nothing inside the guest can discover. Hence the chicken-and-egg that caused 2026-07-20: commissioning needs power control, but for a virsh VM power config cannot be discovered BY commissioning. It MUST be set out-of-band first. C3. `skip_networking=1` PRESERVES NETWORK CONFIG EXACTLY while storage is still re-scanned. Measured on NINE nodes (1 canary + 8): every before/after diff was exactly one hunk, the new block device. Links, modes, addresses, subnets and per-interface MACs identical. This is the vendor control for "add a disk to an already-configured node". C4. MAAS TAGS SURVIVE re-commissioning (18/18 nodes verified). C5. The MAC-ADOPTION PLAN SHAPE: pinning MACs on an already-created domain plans `0 add / 1 change / 0 destroy`, adding `mac = { address = ... }` blocks whose values are IDENTICAL to live. That is ADOPTION, not drift -- tofu state simply has no `mac` block for a domain created unpinned. Until it is applied the pins protect NOTHING. -- D. TWO GUARDS THAT CAN BE DEFEATED BY ACCIDENT -------------------------------------- D1. `lib_hosts_select_dc` refuses a second DC in one shell (deliberate). Muting it with `2>&1` yields ONE DC's data silently labelled as the other's. Found by an agent that caught itself. Anyone scripting cross-DC lookups must re-source per DC. D2. NetBox's `?site=` API filter SILENTLY DOES NOT FILTER -- `/ipam/ip-addresses/?site=X` returned the full unfiltered set for both sites. A per-site count taken that way is wrong and looks right. -- E. PROCESS NOTE: two live-ops agents in parallel ------------------------------------ What made it safe, and is worth repeating: the AGENTS operated on the voffice1 clone while the orchestrator edited the vcloud clone, so repo edits could not reach their working tree mid-run and there was no git race. Agents were explicitly barred from `git commit`/`push`, so all recording stayed with the orchestrator. Both agents were given hard STOP conditions and both honoured them; one declared a STOP, re-measured, disclosed a reclassification and invited reversal -- which is the behaviour that made its result verifiable. Their reports were checked against an INDEPENDENT read of MAAS rather than accepted. COST: agents barred from repo writes cannot leave captures. dc1's evidence sat in voffice1:/tmp and had to be promoted by hand; without that it would have been lost to a reboot, and dc1 would have had no audit record while dc0 had one.