# Session ledger -- in-flight work continuity record

**Purpose.** Long ops sessions on this cloud routinely exceed a single context window
and get COMPACTED (sometimes several times). Anything living only in the chat scrollback
is lost at compaction. This ledger is the durable, committed record of what is IN FLIGHT,
so any session -- after a compaction, or a fresh one -- can resume without losing pending work.

**How to use it (standing practice).**
1. At session start: read this ledger AND run `bash scripts/ledger-scan.sh`. Reconcile.
2. `ledger-scan.sh` is the DRIFT CHECK -- it derives the open-work it reliably can
   (PROPOSED/OPEN decisions, OPEN security rows, next-free numbers) straight from the repo.
   This narrative must not claim CLOSED anything the scan shows OPEN, nor omit what it surfaces.
3. Update this ledger at every deliverable/commit -- it is a standing deliverable like the
   changelog. The changelog says what CHANGED; this ledger says what is still OPEN.
4. The machine-derived block below is seeded from a scan; re-run the scan and re-seed rather
   than editing it by hand.

**SINGLE STREAM (collapsed 2026-07-13).** This ledger previously carried three parallel,
separately-owned stream sections (`main-chat`, `jumphost`, `shared`) plus ~30 append-only
session narratives. Those streams are CLOSED and reconciled into the one list below. There is
now ONE stream. Do not re-introduce per-stream sections.

**Where the history went.** The 2,189-line session-by-session narrative is NOT lost -- it is in
git history (the parent of the collapse commit) and, in durable form, in the 65 `docs/changelog-*.md`
files, `docs/design-decisions.md`, and the incident reports. This ledger deliberately carries only
what is still OPEN, plus the facts that would otherwise be lost because they live nowhere else.

---

<!-- SECTION: machine-derived | OWNER: ledger-scan (regenerate; never hand-edit) -->
## Machine-derived (re-seed from `scripts/ledger-scan.sh`; do not hand-edit)

_RE-SEEDED 2026-08-08 (part 3 close) from `bash scripts/ledger-scan.sh`. The prior seed was
2026-08-05; it had gone STALE on the SEC count (29 -> 28, SEC-031 CLOSED 2026-08-07), the DOCFIX
next-free (210 -> 214) and the BUNDLEFIX next-free (053 -> 059) -- exactly the drift this block
exists to prevent (the per-session summaries carried the current figures while this block did
not). Re-run the scan to refresh._

- **PROPOSED / OPEN decisions (4):** D-068 (Vault substrate hardening, Roosevelt -- sole
  remainder is Q2 path selection at Roosevelt Vault design time), D-131 (node-facing DNS for
  rack-only controllers [ARCH] -- sub-4 open + the pinned DNS architectural review), D-132
  (Roosevelt per-DC MAAS topology [ARCH], operator-pinned to the next deployment), D-142
  (vault-init workflow QoL sweep -- APPROVED-IN-PRINCIPLE / IMPL-DEFERRED, R2 off-host
  transport unresolved). D-136/D-137 dropped off the scan when ADOPTED (correct). Status
  lines in `docs/design-decisions.md` are the only ruling authority.
- **OPEN security rows:** **28** per `bash scripts/ledger-scan.sh` (was 29 at the 2026-08-05
  seed). **SEC-031 CLOSED 2026-08-07** -- the dc1 edge was REBUILT via the proven dc0 procedure
  (`dc-egress-check dc1` 8/8), so the open-router live-exposure is resolved. Still open and
  notable: SEC-033 2026-08-04 (tls-certificates relation databag exposes vault's global-client
  private key to any juju model reader; interface-level, mitigate via juju RBAC) and SEC-020
  (per-DC MAAS/creds consolidation). The SEC register of record is `docs/security-ledger.md`;
  row-level dispositions live THERE only (GA-R4/F3) -- this block carries pointer + count,
  never rows.
- **Next-free numbers:** D = **143**, DOCFIX = **214**, BUNDLEFIX = **059** (scan highest
  assigned: D-142 / DOCFIX-213 / BUNDLEFIX-058). DOCFIX moved 210 -> 214 since the last seed
  (through DOCFIX-213, phase-04 network scripts MAAS_PROFILE-aware, 2026-08-08); BUNDLEFIX moved
  053 -> 059 (BUNDLEFIX-056/057/058, designate/dashboard binding conformance, 2026-08-06). No
  new numbers assigned 2026-08-08 part 3 (the geneve-over-v6 D-number is PROPOSED, not minted).
- **Gates:** G17 OPENED 2026-07-27 by operator ruling (node-side artifact reachability split out
  of Stage 4; the gate table in `docs/CURRENT-STATE.md` is the authority).
- **Standing numbering rule:** never write an identifier-shaped token (D-/DOCFIX-/BUNDLEFIX-NNN)
  ABOVE the real high-water mark anywhere in `docs/` or `runbooks/` prose -- historically a
  decoy token in prose inflated the next-free counter (hardened in DOCFIX-174).
- **`ledger-scan` D-115 false-positive: RESOLVED.** The scan keys on the LAST `**Status:**`
  line per `## D-NNN:` block, not arbitrary body prose. The general hygiene -- trust the
  Status line over body text -- still holds.

<!-- END: machine-derived -->

---

## ROTATED 2026-07-19 (GA-R4 rule 6 -- the one-time rotation; F1 cap now enforceable)

The pre-rotation bodies (~1080 lines: Live state, OPEN WORK VR1/VR0, NetBox
write-path bugs, PINNED rulings, standing lessons, state facts, project-
completion, NetBox import narrative) moved VERBATIM to
`docs/archive/session-ledger-rotated-20260719.md`. Standing lessons + VR0
state facts were ROUTED to durable homes first (platform-traps already
carried most; juju format=line -> appendix-A; guard discipline ->
operating-discipline; VR0 cloud facts -> maas-as-built-reference.md).
Open work is machine-derived above + CURRENT-STATE.md; do not re-grow
bodies here -- sessions append BOUNDED summaries only (15-line cap).

Retained compact blocks (still-live obligations without another home yet):
- **NetBox write-path bugs:** ROUTED 2026-07-23 to
  `docs/netbox-write-path-findings.md` (the durable home; the rotated-body
  section is history). Open residue: dumper blind spot + duplicate-CIDR
  collapse unfixed, hardened fidelity re-run + fix re-verification owed --
  ALL gated on the next NetBox WRITE campaign, none current.
- **Project-completion (after D-011 passes):** consolidate the 10 per-phase
  do-documents into a v1 deploy runbook; flip repo PRIVATE (SEC-004);
  revoke/rotate SEC-005/006/007; v2-deferred: GitBucket SSH, IPv6
  dual-stack, NetBox import bundle.
- **Deployment-close consideration review -- tenant-onboarding items (PINNED
  2026-07-21, operator-directed):** the committee review of Chat's three
  tenant-onboarding inserts refuted each as written but identified corrected
  residue; the operator DEFERRED all of it to an end-of-deployment review
  (posture and end goals are shifting this deployment -- reconsider fit then;
  nothing lands before that review). Items: (1) appendix-A symptom entry for
  sub-floor OR nonexistent flavor -> cluster-create rejection (capi-helm
  thresholds are CONFIG OPTIONS, defaults 2 vCPU / 2048 MB RAM, as-built sets
  neither; the RAM error also fires for mistyped flavors; command shape
  `--public -f json`, never the deprecated `--long` -- archive R9); (2)
  appendix-A entry for tenant-net-cannot-reach-public-keystone -> nodes
  register but stall uninitialized (auth_url in the per-cluster clouds secret
  is hardcoded PUBLIC at capi-helm 1.4.0; as-built carries no interface key),
  pointing at the phase-08 D-011.3 probe, plus a per-DC precondition line in
  dc-dc-phase6 Step 12; (3) tenant contract hardening list: PROPOSED
  `-svc`-only password neutralization (admin-rotate to discarded value;
  keystone `lock_password` blocks password CHANGE, not auth; NEVER lock
  `-cluster` -- it keeps PASSWORD auth permanently per D-066); (4) flavor
  catalog marking = commercial catalog policy, operator prioritization only.
  RE-VERIFY every citation at review time -- the full verdict lives in the
  2026-07-21 disconnected-session transcript, not in a repo surface.


## ROTATED 2026-07-26 (GA-R4 rule 3 / F1 -- oldest-first, cap restored)

The eight oldest closed-session summaries (2026-07-18 through the fifth 2026-07-21
session) moved VERBATIM to `docs/archive/session-ledger-rotated-20260726.md`. The live
ledger was 413 lines against the 300-line cap -- a breach the 2026-07-25 close recorded as
OWED. Each rotated summary still points at its own archived full body; only the summaries
moved. Sessions from 2026-07-22 onward remain live below.

## ROTATED 2026-07-27 (GA-R4 rule 3 / F1 -- oldest-first, cap restored at the Stage 4 close)

The three oldest live summaries (all 2026-07-23: G12 dc1 edge->commission+merge, Stage 4
OPEN+carve+mirrors, queue pass + D-068 rulings) moved VERBATIM to
`docs/archive/session-ledger-rotated-20260727.md`. The live ledger was 317 lines against
the 300-line cap. Sessions from 2026-07-24 onward remain live below.

## ROTATED 2026-07-27 (second pass, GA-R4 rule 3 / F1 -- cap restored at the grounding-audit close)

The oldest remaining live summary (2026-07-24, caveman guardrails + DC1 proxy-build start)
moved VERBATIM to `docs/archive/session-ledger-rotated-20260727.md`. The live ledger was 305
lines against the 300-line cap. Sessions from 2026-07-25 onward remain live below.

## ROTATED 2026-07-27 (third pass, GA-R4 rule 3 / F1 -- cap restored at the grounding-audit close)

The TWO oldest remaining live summaries -- 2026-07-25 handoff-pack execution + recon +
Chat D-136 coupling, and 2026-07-25 MAAS admin-account recovery (SEC-020) -- moved VERBATIM
to `docs/archive/session-ledger-rotated-20260727.md`. The live ledger was 321 lines against
the 300-line cap; one pass left it under. (This paragraph was left MANGLED by an earlier
edit -- a sentence broke off mid-number and ran into a stray fragment of the
2026-07-25 MAAS-admin-recovery summary. Found by a 2026-07-29 sweep and repaired here;
that summary's full body is at
docs/archive/changelogs/changelog-20260725-maas-admin-recovery.md.)

## ROTATED 2026-07-27 (fourth pass, GA-R4 rule 3 / F1 -- cap restored at this close)

The oldest remaining live summary ("POST-CLOSE ADDENDUM 2026-07-26 -- D-137 ADOPTED (GA-R4; 07-18/07-21 addendum precedent)") moved VERBATIM to
`docs/archive/session-ledger-rotated-20260727.md`. The live ledger was 316 lines against the 300-line cap.

## ROTATED 2026-07-29 (GA-R4 rule 3 / F1 -- oldest-first, cap restored at this close)

The TWO oldest live summaries -- 2026-07-26 (D-137 build + committee audit + remediation)
and 2026-07-27 (creds consolidation + the STAGE 4 CLOSE-OUT) -- moved VERBATIM to
`docs/archive/session-ledger-rotated-20260729.md`. The live ledger would otherwise have
been 321 lines against the 300-line cap once this session's bookend was appended.
Sessions from the 2026-07-27 grounding audit onward remain live below.

## ROTATED 2026-07-30 (GA-R4 rule 3 / F1 -- oldest-first, cap restored at this close)

The TWO oldest live summaries -- the 2026-07-27 STAGE-5 GROUNDING AUDIT close and its
14-RULINGS post-close addendum -- moved VERBATIM to
`docs/archive/session-ledger-rotated-20260730.md`. The live ledger stood at exactly 300
lines, so the next append would have breached the cap. Rotated HERE rather than leaving it
owed, because the next session is directed straight at the juju deployment.
Sessions from the 2026-07-27 Phase-0 close onward remain live below.

## ROTATED 2026-08-02 (b) (GA-R4 rule 3 / F1 -- cap restored at this close)

The TWO oldest live summaries (2026-07-30 part 3 -- Stage 5 opened, three bootstraps,
D-138 + D-132 ruled; and part 4 -- dc0 region topology built, cutover blocked on a
permission wall) moved VERBATIM to `docs/archive/session-ledger-rotated-20260802b.md`.
The live ledger stood at 294 lines and this close's summary would have breached the cap.

## ROTATED 2026-08-03 (GA-R4 rule 3 / F1 -- cap restored at this close)

The oldest live summary (2026-07-30 part 5 -- dc0 migrated to its own MAAS region, 10/10
Ready, four named gates green) moved VERBATIM to `docs/archive/session-ledger-rotated-20260803.md`.
The live ledger would have breached the 300-line cap with this close's summary.

## ROTATED 2026-08-04 (GA-R4 rule 3 / F1 -- cap restored at this close)

The oldest closed-session summary (2026-07-31 -- dc0 node carve COMPLETE, controller
bootstrapped) moved VERBATIM to `docs/archive/session-ledger-rotated-20260804.md`. The live
ledger stood at 292 lines and this close's summary would have breached the 300-line cap.

## ROTATED 2026-07-31 (GA-R4 rule 3 / F1 -- cap restored at this close)

The oldest closed-session summary moved VERBATIM to
`docs/archive/session-ledger-rotated-20260731.md`. The live ledger stood at 295 lines and
this close's summary would have breached the 300-line cap.

## ROTATED 2026-08-05 (GA-R4 rule 3 / F1 -- oldest-first, cap restored at this close)

The two oldest closed-session summaries (2026-07-31 prefer-ipv6/deploy-then-teardown, and
2026-08-01 snap-proxy/D-139/IPv6) moved VERBATIM to
`docs/archive/session-ledger-rotated-20260805.md`. The live ledger stood at 315 lines and the
2026-08-05 (part 2) close breached the 300-line cap. (The 2026-08-01 rotation's own pointer ->
`docs/archive/session-ledger-rotated-20260801.md` is subsumed here; that archive is unchanged.)

## ROTATED 2026-08-02 (GA-R4 rule 3 / F1 -- cap restored at this close)

The oldest closed-session summary moved VERBATIM to
`docs/archive/session-ledger-rotated-20260802.md`. The live ledger stood at 283 lines and
this close's summary would have breached the 300-line cap.

## ROTATED 2026-08-07 (GA-R4 rule 3 / F1 -- oldest-first, cap restored at this close)

The oldest closed-session summaries (2026-08-03 -- Stage 5 dc0 bundle DEPLOYED, controller
rebuilt Path C; AND 2026-08-04 -- ovn-central cert root-caused + wired for redeploy) moved
VERBATIM to `docs/archive/session-ledger-rotated-20260807.md`. Rotated oldest-first across the
2026-08-07 closes to keep the live ledger under the 300-line cap (GA-R4 rule 3).

## ROTATED 2026-08-08 (GA-R4 rule 3 -- oldest-first, cap restored at this close)

The two oldest closed-session summaries (2026-08-06 -- Task #2 D-020 vault-metal-only; AND
2026-08-06 part 2 -- F4 + dc-ha-scaleup retired + memcached 1->3) moved VERBATIM to
`docs/archive/session-ledger-rotated-20260808.md`. Rotated at the 2026-08-08 dc0-activation
close to keep the live ledger under the 300-line cap (GA-R4 rule 3).

## ROTATED 2026-08-09 (GA-R4 rule 3 -- oldest-first, cap restored at the 2026-08-08 part-3 close)

The two oldest closed-session summaries (2026-08-06 part 3 -- phase-03 core-verify F-CV1/2/3;
AND 2026-08-06/07 -- Step 3.4 G3 + per-DC tailscale rulings + .7 VMs stood up) moved VERBATIM to
`docs/archive/session-ledger-rotated-20260809.md`. Rotated at the 2026-08-08 (part 3) close
(amphora build FIXED + geneve-over-v6 root-caused) to keep the live ledger under the 300-line cap.

## SESSION CLOSE 2026-08-07 (dc0 tailscale + dc1 region) -- dc0 .7 carved-and-ready; naming convention; vr1-dc1-region LIVE (bounded, GA-R4)

- Branch dc-dc-stage5-preconditions; commits `d36d815..9216bdf` (+ a final close) all pushed; voffice1 synced. Scan: 4 open decisions, SEC 29, next-free D-143 / DOCFIX-213 / BUNDLEFIX-059 (NO new numbers). Body: `docs/changelog-20260807-dc0-tailscale-provisioning.md` (Items 1-10). Sweep: `docs/audit/queued-findings-20260807-dc0-tailscale-provisioning.txt` (F1-F4).
- dc0 `.7` DRIVEN TO CARVED-AND-READY (gated): power->commission->carve pass=8/0 (metal-admin 10.12.8.7 + provider-public 10.12.4.7, no br-ex)->deploy jammy, both legs live. C2 correction: it had already self-enlisted (`known-marten`). Join still blocked (PLAIN key + no Headscale ACL; `.7` reachable only via vr1-office1-svc).
- NEW aux-carve tooling: `dc-node-carve.sh` is_tailscale/is_region/is_two_plane_host + lib-hosts CARVE_AUX_HOSTS (isolates aux VMs from HOSTS consumers); harness 63/0; gauntlet 101.
- NAMING convention corrected + RULED standing: renamed dc0 machines to `vr1-dc0-*`; **D-134 AMENDMENT** ("Record that as the preferred naming convention going forward") + lib-hosts comment + memory.
- dc1 RULED "No migration. Build region on DC1 correctly." + "Rebuild fresh into dc1-region"; then BUILT it: `.6` (`vr1-dc1-maas-01`) power->recommission->carve (10.12.68.6/10.12.64.6, `--profile admin`)->deploy jammy; **vr1-dc1-region MAAS LIVE** (maas 3.7.2 + postgresql 16.14; the shared vr1-office1-svc key is ON VCLOUD `~/vr1-office1-creds/office1_svc_ed25519`; reached the .6 from vcloud; snap egress via snapd proxy; operator-authorised credential one-shot, creds 0600 on the .6, never in context; `10.12.68.6:5240/MAAS/`->301). PROFILE registered+verified (voffice1 tunnel -L 5243; rack vr1-dc1-maas-01, 0 machines).
- OWNED: nearly read "powered off" as "not enlisted" (measured first); advisor caught the unverified provider-public leg + the missing bookend; a false-negative `curl -x` 400 vs snap-egress-works (tested definitively); `run-logged.sh` NOT opened (O3, 3rd consecutive).
- OWED: consolidate the .6 MAAS creds to `~/vr1-dc1-creds/` (SEC-020); RE-OPEN the voffice1:5243 tunnel after any reboot before `maas vr1-dc1-region ...`.
- NEXT (dc1, `--profile vr1-dc1-region --expect-rack vr1-dc1-maas-01`, tunnel up): `dc-region-topology.sh apply` (6-plane) -> `maas-region-power-key.sh` (.6 snap) + `dc-plane-ipam.sh` + DHCP + jammy image sync -> import office1_svc pubkey -> REBUILD 9 nodes+juju+.7 fresh in (delete from Office1 admin -> enlist/commission/deploy/carve, name vr1-dc1-<role>-NN). Separately dc0 Step 3.3 on a TAGGED key + Headscale.
- NEXT (NetBox, operator-flagged -- do not miss): record this session's new IPAM objects into `office1-netbox` (live apex, DOCFIX-195) -- dc0 .7 + dc1 .6 region VM + new vr1-dc1-region + dc1 .7 (when live) + D-134 utility `.4-.9` assignments + dc0 renames. Enumerated: changelog-20260807 Item 11. Status ONLY in CURRENT-STATE.md.

## SESSION CLOSE 2026-08-07 (part 2) -- dc1 region STANDUP (topology/IPAM/DHCP cutover/power-key) + SEC-031 edge REBUILT + NetBox util-host importer (bounded, GA-R4)

- Branch dc-dc-stage5-preconditions; 2 commits (b6798df, 2b476e4) pushed at close; voffice1 pulled to sync. Scan: 4 open decisions, **SEC 29->28 (SEC-031 CLOSED)**, next-free D-143 / DOCFIX-213 / BUNDLEFIX-059 (no new numbers assigned).
- **F:** built `netbox/dc-util-hosts-import.py` (+harness 19/19) closing the D-134 utility-HOST IP gap; landed 8 ip-addresses into office1-netbox (186->194, ids 187-194). `.4` artifact + dc1 `.5`/`.7` DEFERRED (S3).
- **dc1 region STANDUP** (`--profile vr1-dc1-region`): topology apply 40/0; IPAM carve-v6 6/6 + reserve 13/13 (check 24/0); DHCP CUTOVER off-admin->on-region, `.6` sole server (no dual-serve, false-alarm resolved); power-key install 9/9 (SEC-016). Captures `docs/audit/dc1-*-20260807`.
- **SEC-031 CLOSED:** dc1 edge REBUILT via the proven dc0 procedure (operator "look back at dc0"), `dc-egress-check dc1` 8/8, `.6` egress restored -> now a RUNBOOK (`runbooks/dc-edge-rebuild.md`) + tool (`scripts/opnsense-console-rebuild.py`) per operator "log accurately so we don't re-derive". jammy image sync TRIGGERED + downloading at close.
- **OWNED:** `pgrep -c dhcpd` self-match false-alarm (instrument #21); recalled DHCP range .100-.200, MEASURED .201-.254; shipped `opnsense-console-rebuild.py` WITHOUT a harness (F1 owed); reserve skipped=6 glance owed; run-logged NOT opened (F2, 4th+ consecutive).
- Gates: repo-lint 0 fail/1 legacy warn; gauntlet ALL GREEN (102); ledger-scan reconciled. Ledger rotated (2026-08-05 x2 -> archive/session-ledger-rotated-20260807.md).
- **NEXT:** verify jammy sync completes; **D** (import ssh keys into vr1-dc1-region) -> **E** (rebuild 9 nodes+juju+.7 FRESH, destructive batches of 3, SEC-028 in-region juju mint + SEC-026 residency) -> **G** (dc1 .6 creds SEC-020); the 2 NetBox findings (S3); the console-driver harness (F1). Sweep: `docs/audit/queued-findings-20260807-dc1-region-sequence.txt` (F1-F3 FIRST SURFACE). Body: `docs/changelog-20260807-dc1-region-sequence.md`. Status ONLY in CURRENT-STATE.md.

## SESSION CLOSE 2026-08-08 -- dc0 .7 tailscale FIXED (advertise-only) + MAJOR 10.13 re-IP PIVOT + dc0-full-deployment checkpoint plan (bounded, GA-R4)

- Branch dc-dc-stage5-preconditions; 2 commits (02e0b12, faef662) UNPUSHED (operator push decision pending) + this bookend uncommitted (savegame prepares, does not commit). voffice1 at a62e4b9 (=origin; lags this host by 2 -- pull after push). Scan: 4 open decisions, SEC 28, next-free D-143/DOCFIX-213/BUNDLEFIX-059.
- **PIVOT (operator):** 10.12.0.0/16 collides with the still-online IPv4 cloud (surfaced at Headscale). Drive dc0 to FULL deployment as a checkpoint, then TEARDOWN+REDEPLOY on 10.13.0.0/16 (never edit live infra). OWED: a GA-R5 ruling + CURRENT-STATE pivot update. Background agent drafting the 10.13 subnetting (Task #2).
- **dc0 .7 tailscale:** first join with --accept-routes BLACKHOLED its own L3 (locked out) -> recovered via qemu-nbd offline-mask -> purged + REBUILT advertise-only (TSIP 100.64.0.57, Running, route UNAPPROVED -- operator STOPPED the tailscale workstream; do NOT approve 10.12.8.0/22). Tool fixed advertise-only + --authkey=file: + check guards (own-subnet, control-reach); harness 27/0, repo-lint 0-fail.
- **dc1 HELD** (0 machines in vr1-dc1-region; all nodes powered off). **dc0 scope RULED:** "activate + smoke-test" (networks + Octavia 1-LB + Designate 1-zone + wrap gates; Magnum DEFERRED). dc0 measured 66 machines/162 units, all core services active; only octavia/designate/ceph-rbd-mirror blocked; tenant-resource-empty.
- **OWNED:** a wrong "profile wiped" NEGATIVE rode into a changelog (profiles were in the snap db path; RETRACTED + corrected); pkill self-match killed my own ssh; read a 90s timeout as a failed join that had SUCCEEDED at ~7min. Instrument-currency #22. run-logged NOT opened (Nth).
- Pinned tasks #1-#4 (dc0 checkpoint; 10.13 NetBox scope; NetBox on vcloud; Chat repo-consolidation).
- **NEXT:** operator PUSH 02e0b12+faef662 -> voffice1 pull; re-IP GA-R5 ruling + CURRENT-STATE pivot; MAAS-profile fix on the racks (existing+rebuild); rebuild MAAS nest DC0>regional>rack, NO migration; dc0 activation resolving the D-138 co-location gap. Sweep: docs/audit/queued-findings-20260808-dc0-tailscale-incident-reip-pivot.txt (F1-F11). Body: docs/changelog-20260807-dc0-tailscale-install.md. Status ONLY in CURRENT-STATE.md.

## SESSION CLOSE 2026-08-08 (part 2) -- dc0 activation checkpoint: F3 RESOLVED + provider net + G18 RULED + Octavia CORE (amphora build INCIDENT) (bounded, GA-R4)

- Branch dc-dc-stage5-preconditions; **4 commits UNPUSHED** (f85daa7 0e8b659 295185d a6340e6) + this bookend (savegame prepares, does not commit). voffice1 == origin `a25ed99` (behind this host by 4; `git pull` AFTER operator push -- Step 1b). Scan: 4 open decisions, SEC 28, next-free D-143 / DOCFIX-214 / BUNDLEFIX-059 (used DOCFIX-213).
- **F3/D-138 co-location gap RESOLVED:** phase-04-network-{create,verify}.sh made MAAS_PROFILE-aware (DOCFIX-213, harnesses + failability proven), rack `vr1-dc0-region` maas profile registered (in-DC regional hot-kid 10.12.8.6; key via stdin, never printed), PROVIDER network created + EXIT GATE PASS.
- **G18 RULED (GA-R5 option b):** Octavia lb-mgmt recorded OUT of apex scope + the D-139 GUA /64 kept `reserved`; annotated D-101/R8 + D-139; NO new D-number; lb-mgmt is v6-ULA, outside the 10.13 re-IP.
- **Octavia CORE activated:** configure-resources (op 67) done, octavia active, lb-mgmt-net + `fc00:5b7a:7bdc:bd86::/64` + o-hm0 up, mgmt router isolated (G18 OWED#1/#2 done). **INCIDENT: amphora image build FAILS** (octavia-diskimage-retrofit exit 1; dib-in-LXD hypothesis, rebuild-relevant) -> the "1 test LB" is BLOCKED (changelog Item 7).
- **Designate RULED real D-106/D-117 Stage-7** (operator; os-public-hostname flip -- depth to confirm). glance-simplestreams-sync DROPPED from scope. Re-IP GA-R5 ruling STILL OWED (3 live-free checks). Re-IP + G18 ruling-prep packages durable in docs/audit/.
- **OWNED:** grep -viE oneline mis-filter (caught, re-queried); my own echo string tripped the DOCFIX-016 maas-list guard (caught); amphora script MODEL defaulted openstack -> needs vr1-dc0 (caught, fast-fail, no partial state); "configure-resources decides G18 by execution" reframed after prep showed R8 already ruled the substance.
- Gates: repo-lint 0 fail / 1 legacy warn; gauntlet ALL GREEN (102); ledger-scan reconciled (DOCFIX 213 used). Ledger rotated (08-06 x2 -> archive/session-ledger-rotated-20260808.md).
- **NEXT:** diagnose retrofit incident (sudo on octavia-diskimage-retrofit/0) -> unblock the LB test; Designate real-Stage-7 (confirm os-public-hostname depth); wrap gates + G18 OWED#3 o-hm0 MTU; re-IP live-free checks -> present the re-IP ruling. Operator PUSH the 4 commits -> voffice1 pull. Sweep: docs/audit/queued-findings-20260808-dc0-activation-checkpoint.txt. Body: docs/changelog-20260808-dc0-activation.md. Status ONLY in CURRENT-STATE.md.

## SESSION CLOSE 2026-08-08 (part 3) -- amphora build FIXED + geneve-over-v6 wrap-gate ROOT-CAUSED (bounded, GA-R4)

- Branch dc-dc-stage5-preconditions; pushed this session: prior 4 (f85daa7..a6340e6) + bookend 8e2b18b + geneve records cd1f9cd/f5daadd. voffice1 pulled to f5daadd. Scan: 4 open decisions, SEC 28, next-free D-143/DOCFIX-214/BUNDLEFIX-059 (NO new numbers -- geneve D-number PROPOSED, not minted).
- AMPHORA BUILD FIXED (was part-2 retrofit exit-1 INCIDENT): two-layer root cause MEASURED -- (a) no loop devices in the retrofit LXD container; (b) dib build's apt hit UNREACHABLE public archives (build doesn't inherit model apt-proxy; charm ubuntu-mirror empty). FIX (live, gated): loop-device passthrough into the container (host-local, rebuild item) + juju config octavia-diskimage-retrofit ubuntu-mirror=<dc0 mirror 10.12.8.4>. Image 775ebeba ACTIVE+tagged (two-sourced).
- G18 OWED#3 (o-hm0 MTU) PASS (1442 match); G18 obligations all discharged.
- 1 TEST LB: amphora BOOTS (nova ACTIVE -> image validated) but BLOCKED by geneve-over-v6 wrap-gate FAIL, ROOT-CAUSED: OVN geneve encap SPLIT across families -- containerized control chassis IPv4-only on data-tenant (10.12.16.x, D-134 auto-picked) vs compute METAL IPv6 (2602:f3e2:f02:30::x) -> cross-family tunnels don't pass -> 100% cross-node loss. Fix NOT applied (rebuild-relevant; warrants a D-number at ruling). Record: docs/audit/geneve-over-v6-rootcause-20260808.md.
- OWNED: nearly reported the yoga-agent as the LB cause (refuted by octavia log ConnectTimeout + ping6 100% loss -> geneve overlay); 3 diagnostic-capture false-starts (all my harness); loop-fix necessary-not-sufficient; run-logged NOT opened (Nth). Instrument-currency #23.
- LEFTOVERS (owed next session): TEAR DOWN test LB 24bd326f / net lb-smoke-* / amphora (left LIVE per operator savegame-now); live mutations (loop passthrough + ubuntu-mirror config) carry reverts in the changelog.
- Gates: repo-lint 0-fail (1 legacy warn); gauntlet ALL GREEN (102); ledger-scan reconciled; ledger rotated (08-06 x2 -> archive/session-ledger-rotated-20260809.md).
- NEXT: tear down the test LB; Designate real-Stage-7 4a depth (read-only); wrap gates (cloud-assert BOM, controller backup, verify-live Ceph); re-IP 3 live-free checks -> present re-IP GA-R5 ruling. Rebuild items: wire retrofit ubuntu-mirror per-DC in bundle + give containerized OVN chassis a v6 data-tenant address. Sweep: docs/audit/queued-findings-20260808-amphora-geneve.txt. Body: docs/changelog-20260808-amphora-geneve.md. Status ONLY in CURRENT-STATE.md.
