diff --git a/docs/dc-dc-deployment-workflow.md b/docs/dc-dc-deployment-workflow.md index 5934adf..443a9ef 100644 --- a/docs/dc-dc-deployment-workflow.md +++ b/docs/dc-dc-deployment-workflow.md @@ -86,17 +86,17 @@ | **Reuse vs new** | NEW infra (Office1 didn't exist for VR0 DC0), but LESS new than it looks: the MAAS-composed-LXD-VM half is **exactly what VR0 runs today** (its `lxd` KVM host at LXD 5.21.4, with `tailscale` composed into it at 2 cores / 2 GiB / 25 GB) and carries **NO Roosevelt delta**. The containment VM itself IS a deliberate simulation-only delta -- it is what makes a "hard-down an entire facility" DR drill (`virsh destroy vvr1-dc0`) executable at all. NetBox-as-IPAM-apex discipline and the `netbox/*-import.py` pattern transfer unchanged. | | **Authoring status** | **Runbook REWRITTEN 2026-07-13 to the D-114 model: `runbooks/dc-dc-phase1-office1-standup.md`.** The old Option A / Option B provisioning fork is **CLOSED** -- OpenTofu (Option A) is the path and `module "voffice1"` is a real, applied `cloudinit-vm` instantiation (real image source, real `user_data`/`meta_data`/`network_config`, plus the new `expose_nested_virt` variable). **PENDING VERIFICATION:** the MAAS/LXD install + LXD-KVM-host registration + VM-compose command lines are NOT yet confirmed against Canonical's current docs -- the runbook marks each unconfirmed flag/channel/subcommand rather than fabricating one, and a separate verification pass owns filling them in. | -### !!! STAGE 2 IS THE BRANCH MERGE POINT (operator ruling, 2026-07-14) !!! +### STAGE 2 WAS THE BRANCH MERGE POINT -- MERGED 2026-07-15 (PR #1, `e468d2e`) -Branch `dc-dc-stage1-phase0-first-exec` merges to `main` at **Stage 2 CLOSE** -- when every -gate bullet above is MET, not before. This is NEW policy: `main` has never taken a feature -merge (its only merge commits are inherited from the pre-rename `openstack-caracal-ipv4` -remote, D-110), so the entire VR1 buildout -- D-112 through D-118, the Office1 headend, the -NetBox tooling -- currently exists ONLY on the branch. Until the merge lands, `main` is not -tracking the mission and must not be treated as trunk-of-record for VR1. +Branch `dc-dc-stage1-phase0-first-exec` merged to `main` at Stage 2 CLOSE, once every close-out +gate bullet (C1..C5) was MET, the gauntlet was ALL GREEN (60) and repo-lint 0-fail. This was the +FIRST VR1 feature merge -- `main` had never taken one (its prior tip was ad-hoc uploads) -- so it +brought D-112..D-120, the Office1 headend, and the NetBox tooling onto trunk. **`main` is now +trunk-of-record for VR1 through Stage 2.** The merged branch was retired. -The merge is an operator-gated action, not a session-end habit. See the Stage 2 close-out -checklist below for what must be true first. +This established the STANDING **branch-per-stage + merge-at-close** discipline (see "Cross-cutting +discipline" above): every subsequent stage develops on its own branch and merges to `main` (merge +commit, operator-gated) as part of its definition-of-done. Stage 3 branches off the post-merge `main`. --- @@ -240,6 +240,16 @@ - **Every deliverable (script, runbook, doc):** `repo-lint` clean, the touched script's harness green (write one if missing), a changelog entry with a per-item revert, and a `docs/session-ledger.md` update. +- **Branch-per-stage + MERGE AT STAGE CLOSE (standing, from Stage 2 on):** each + stage is developed on its own branch (`dc-dc-stageN-...`). Merging that branch to + `main` is PART OF the stage's definition-of-done, not an afterthought: when every + close-out gate bullet is MET, the gauntlet is ALL GREEN and repo-lint is 0-fail, + the branch is merged to `main` via a PR with a **merge commit** (NOT squash -- + preserve the per-item revertable history + changelogs), then the merged branch is + RETIRED (local + remote). The merge is an operator-gated action (present it, do not + run it unasked). `main` is trunk-of-record only for stages that have merged; the + next stage branches off the post-merge `main`. Precedent: Stage 2 -> PR #1 + (`e468d2e`), 2026-07-15. - **Before assigning a new D-/DOCFIX-/BUNDLEFIX-NNN:** `bash scripts/ledger-scan.sh` for next-free (it is the numbering authority, not repo-lint's informational count). diff --git a/docs/session-ledger.md b/docs/session-ledger.md index 6f1bf6e..c53184b 100644 --- a/docs/session-ledger.md +++ b/docs/session-ledger.md @@ -71,8 +71,17 @@ - **VR0 / DC0 testcloud:** fleet fully current (juju 3.6.25, 91 agents); D-011 CLOSED except item 6 (manual unseal, blocked on SEC-003). devteam is a live tenant running their own cluster. No beta cluster, no foil tenant, no orphan trustees (see State facts). -- Branch `dc-dc-stage1-phase0-first-exec`, **pushed and level with origin (2026-07-14)**. VR1 Stage 1 - COMPLETE; Stage 2 in CLOSE-OUT (C1..C4 open, C5 done). +- **STAGE 2 CLOSED AND MERGED (2026-07-15).** All close-out gates C1..C5 met; branch + `dc-dc-stage1-phase0-first-exec` merged to `main` via **PR #1 (`e468d2e`, merge commit)** -- the + FIRST VR1 feature merge. `main` is now trunk-of-record for VR1 through Stage 2; the merged branch + was RETIRED (local + remote). **NEXT: Stage 3** (DC0/DC1 substrate, `dc-dc-phase2`->`phase3`) on + branch **`dc-dc-stage3-phase2-dc-substrate`** (off post-merge `main`); read + `docs/dc-dc-deployment-workflow.md`'s tooling-gap register FIRST. Now standing: **branch-per-stage + + merge-at-close** discipline (workflow doc Cross-cutting) -- merging the stage branch is part of every + stage's definition-of-done. In place for Stage 3: region-qualified `$DC` selectors (D-119) + the + creds-audit mint-time discipline (SEC-009 / `scripts/creds-audit.sh`). +- (historical) Branch `dc-dc-stage1-phase0-first-exec` was pushed and level with origin (2026-07-14); + VR1 Stage 1 COMPLETE; Stage 2 was in CLOSE-OUT -- now superseded by the merge above. - **SESSION CONSOLIDATION (2026-07-14).** Work had fragmented across FOUR concurrent Claude sessions on this one clone -- including two long-lived `--permission-mode auto` background agents (idle 14-15h but still holding auto-approve rights against the live cloud), and a second interactive session that @@ -372,18 +381,13 @@ ## Operator-gated / PINNED (do NOT re-ask; these are rulings, not open questions) -- **BRANCH MERGE POINT = STAGE 2 CLOSE (operator ruling 2026-07-14).** Branch - `dc-dc-stage1-phase0-first-exec` merges to `main` when every Stage 2 gate bullet is MET -- - not at session end, not "when it feels done." The close-out checklist (C1..C5) lives in - `docs/dc-dc-deployment-workflow.md`'s Stage 2 section; that doc is authoritative for what - "closed" means. **DOCFIX-195 (2026-07-15) REDEFINED C2** (the last open C-item): it is no longer an - apex write but "`office1-netbox` holds AND verifies the complete validated dataset"; the - `netbox.baldurkeep.com` write-back is DEFERRED to end-of-deployment. The merge still waits on every - gate bullet MET -- only C2's bar changed. NEW policy: `main` has never taken a feature merge (its only merge commits - are inherited from the pre-rename `openstack-caracal-ipv4` remote, D-110), so ALL VR1 work - -- D-112..D-118, the Office1 headend, the NetBox tooling, 52 commits -- lives only on the - branch. `main`'s tip is two ad-hoc operator uploads; it is NOT trunk-of-record for VR1 yet. - The merge itself is a gated action: present it, do not run it unasked. +- **STAGE 2 MERGED -- DONE 2026-07-15 (PR #1, `e468d2e`).** The Stage 2 close-out (C1..C5 all met) + branch `dc-dc-stage1-phase0-first-exec` merged to `main` via a merge commit -- the first VR1 feature + merge. `main` IS now trunk-of-record for VR1 through Stage 2; the branch was retired. This is no + longer an open ruling; it GRADUATED into the STANDING **branch-per-stage + merge-at-stage-close** + discipline that applies to every stage from here (workflow doc "Cross-cutting discipline"): the merge + is part of each stage's definition-of-done and remains operator-gated (present it, do not run it + unasked). Stage 3 branches off the post-merge `main` as `dc-dc-stage3-phase2-dc-substrate`. - **UPSTREAM APEX WRITE-BACK -- DEFERRED to end-of-deployment (DOCFIX-195, operator ruling 2026-07-15).** Seeding `netbox.baldurkeep.com` from the validated `office1-netbox` dataset is a MAYBE at the very end, NOT a Stage 2 gate. Until then the apex stays a READ-ONLY v1 reference draft (no write during diff --git a/temp/Screenshot 2026-07-13 121435.png b/temp/Screenshot 2026-07-13 121435.png deleted file mode 100644 index 1085c9c..0000000 --- a/temp/Screenshot 2026-07-13 121435.png +++ /dev/null Binary files differ diff --git a/temp/Screenshot 2026-07-13 121522.png b/temp/Screenshot 2026-07-13 121522.png deleted file mode 100644 index a99aa7e..0000000 --- a/temp/Screenshot 2026-07-13 121522.png +++ /dev/null Binary files differ diff --git a/temp/Screenshot 2026-07-13 121547.png b/temp/Screenshot 2026-07-13 121547.png deleted file mode 100644 index 4521e73..0000000 --- a/temp/Screenshot 2026-07-13 121547.png +++ /dev/null Binary files differ