# Session changelog 2026-07-21 (successor session) -- disconnect recovery + queued delivery

One changelog per session (GA-R2/D1). Status lives ONLY in
docs/CURRENT-STATE.md; this file is narrative + reverts. Predecessor
session (ops-commissioning-diag, disconnected before its bookend):
docs/changelog-20260721-commissioning-diag.md.

## 1. Predecessor session close LANDED (commit 8b3adb3)

- The ops-commissioning-diag session disconnected before committing its
  deliverable. This session re-verified read-only first (9/9 nodes Ready
  in MAAS with virsh power; dc0-node-dns active+enabled with the 10.12.8.3
  alias up; dhcpd running on BOTH controllers; diag-serial tag deleted and
  serial-console re-attached to hardy-dove = Phase-7 cleanup confirmed
  done), then committed the predecessor's 7 files verbatim plus the
  bounded session-ledger close entry and a machine-derived block re-seed
  from the 2026-07-21 scan (D next-free 132, DOCFIX 197, BUNDLEFIX 052,
  10 open SEC rows). Operator-approved this session.
- **Revert:** git revert 8b3adb3 (returns the record to the
  not-yet-durable state; the live cloud is untouched by that commit).

## 2. MAC pinning in modules/node-vm (queued item 9a of the predecessor)

- modules/node-vm: new OPTIONAL `interface_macs` variable (list(string),
  default [] = unpinned for pre-enlistment use; validations: all-or-
  nothing length vs network_names -- partial pinning is rejected -- and
  6-byte hex format). Interfaces comprehension consumes it as
  `mac = { address = ... }` -- shape VERIFIED against the provider schema
  (dmacvicar/libvirt 0.9.8, `tofu providers schema -json`, this session).
- opentofu/vr1-dc0-substrate: all 9 nodes pinned. 54 MACs MEASURED this
  session (`virsh domiflist` on vvr1-dc0, read-only; order = the
  vr1_dc0_node_nics plane order) and the 9 metal-admin entries
  cross-checked against MAAS boot-interface records 9/9 (machines read).
  No value inferred; no value reused from the adjudication file without
  re-measurement.
- NEW harness tests/node-vm/run-tests.sh (12 cases: variable shape,
  validations, consumption, 9 lists / 54 literals / 0 duplicates in the
  inner root, pass-through, tofu validate). Gauntlet 72 -> 73 ALL GREEN;
  repo-lint 0 fail; opentofu-validate PASS (both EXTRA roots).
- NOT YET APPLIED: the inner root's state (on voffice1) does not carry
  the pins until an operator-gated `tofu apply` there. The plan gate for
  that apply: expected NO REPLACE -- pins equal live values, so the plan
  must show only benign in-place mac adoption or no-op; ANY replace is a
  STOP (present to operator, do not apply).
- **Revert:** git revert of this delivery commit (module + root + harness
  together); live domains unaffected until the gated apply.

## 3. node-vm power-ownership guard (operator-ruled this session)

- The MAC-pin verification plan on voffice1 (captured:
  docs/audit/inner-plan-20260721-macpin.txt -- 0/9/0, 54 mac adoptions,
  ZERO replaces) exposed an entanglement: the module hardcodes
  `running = true` while MAAS holds all 9 Ready nodes OFF, so the apply
  would ALSO have powered on all 9 nodes outside MAAS's control.
- RULING (this session): question = how to proceed with the entangled
  apply; operator selection = "ignore_changes on running first
  (Recommended)".
- Shipped: `lifecycle { ignore_changes = [running] }` on the node domain
  (create still boots for PXE enlistment; after that MAAS owns power --
  virsh here, IPMI on Roosevelt). Harness grew 3 cases (T13-T15: guard
  present, exactly one ignore_changes, cites MAAS). 15 cases green.
- **Revert:** remove the lifecycle block + T13-T15; the 9 power-on
  changes return to the next plan.
