# Changelog 2026-08-06 -- Stage 5 dc0: Step 7 phase-03 core verify (core-API layer)

Session-scoped (GA-R2). Branch `dc-dc-stage5-preconditions`. Stage 5 remains OPEN
(this is NOT a stage close). Under blanket approval the changelog is the review
surface: each item = what / why (evidence) / revert.

Evidence capture (all read-only measurement + the one gated install):
`docs/audit/stage5-dc0-phase03-coreverify-20260806.txt`.

---

## Item 1 -- INFRA: openstack CLI installed on the dc0 rack (F-CV2 resolve)
**What.** `sudo apt-get install -y python3-openstackclient` on the dc0 rack
(`vr1-dc0-rack`, 172.31.0.2). Landed `python3-openstackclient 6.6.0-0ubuntu2`
+ `python3-openstacksdk 3.0.0-0ubuntu2` from noble/main. Verified `openstack
--version` -> `openstack 6.6.0`.
**Why.** Step 7 (phase-03) is the first phase to invoke the `openstack` CLI, and
per D-138 that CLI runs FROM the DC rack (no L3 path from voffice1 to the cloud).
The 07-27 install landed only on voffice1. `phase-03-admin-openrc.sh` failed
"openstack not found" on the rack. This is the documented remediation of the
07-30 queued-finding F1 ("Install on the DC client host before Step 7"); pin is
the measured 07-27 value, snap refuted, noble-native Caracal so no UCA.
**Revert.** `ssh vr1-dc0-rack 'sudo apt-get purge -y python3-openstackclient
python3-openstacksdk'` (client-only; no service impact).

## Item 2 -- STAGE: rack repo-stage gained phase-03-admin-openrc.sh + extract helper
**What.** `scp` staged `scripts/phase-03-admin-openrc.sh` (sha 2aeb20b720d83944)
and `scripts/extract_admin_password.py` (sha 7b9b25a8fafd75cb) into
`~/repo-stage/scripts/` on the dc0 rack; both sha256-verified == repo HEAD.
**Why.** D-138 rack-run discipline: Step 7 runs the tested phase-03 admin-openrc
builder from the rack's staged copy, sha-verified before trust.
**Revert.** `ssh vr1-dc0-rack 'rm ~/repo-stage/scripts/phase-03-admin-openrc.sh
~/repo-stage/scripts/extract_admin_password.py'` (redeploy inputs, not live state).

## Item 3 -- RACK STATE: admin-openrc + vault root CA built on the dc0 rack
**What.** `MODEL=vr1-dc0 KEYSTONE_VIP=10.12.4.50 phase-03-admin-openrc.sh` wrote
`~/admin-openrc` (0600) + `~/vault-init/vault-ca-root.pem` on the rack; scoped
token issued. Secret-adjacent files, on-rack only; password never entered context
(script prints length only).
**Why.** phase-03 Step 3.2 -- the IP-only admin credential + vault CA for API
verification. Two-source keystone VIP confirmed (overlay == live endpoint).
**Revert.** `ssh vr1-dc0-rack 'rm ~/admin-openrc'` (regenerable from live state).

## Item 4 -- DOC: CURRENT-STATE section 7 OpenStack-client row amended (GA-R1/C1)
**What.** In-row amendment: client now INSTALLED ON THE dc0 RACK; the D-138
correction that phase-03..06 run from the rack, not voffice1; dc1-rack install
OWED. Verify command + host cell updated.
**Why.** GA-R1/C1 -- a commit that changes a status CURRENT-STATE carries updates
it in the same commit. Real measured status change (client presence on the rack).
**Revert.** `git revert` this commit's CURRENT-STATE hunk.

## Item 5 -- DOC: CURRENT-STATE section 1 Stage-5 progress note (Step 7)
**What.** Added the Step-7 phase-03 core-verify progress block: core-API VERIFIED,
exit gate OPEN on F-CV3 (dashboard TLS) + Step 3.4; F-CV1 retraction; F-CV2 resolve.
**Why.** Stage/gate status lives in CURRENT-STATE only (GA-R1).
**Revert.** `git revert` this commit's CURRENT-STATE hunk.

---

## Findings logged (NOT executed -- hard rule 1)
- **F-CV1** designate-api plaintext on :8991 vs haproxy `check-ssl` -> backend DOWN.
  designate-api is UP; the "collateral of the Stage-7 block" reading is RETRACTED.
- **F-CV3** dashboard VIP 10.12.4.58:443 serves plaintext (apache-SSL-inactive
  despite certs under /etc/apache2/ssl/horizon/). Horizon exit-gate FAILS. NOT
  D-072 by pattern-match; own triage owed. Operator authorized triage 2026-08-06.
- Shared shape: 2 services plaintext-vs-TLS-expecting while the other 12 serve TLS.
- **DOCFIX candidate** phase-03-admin-openrc.sh / phase-04-* / vault-kv-health.sh
  read DC-dependent lib-net values without `lib_net_select_dc` (harmless on dc0,
  WRONG+silent on dc1). Fix before dc1's Step 7.
- **OWED** Step 3.4 domain-manager policy gate (PO: + G3); dc1-rack client install;
  pending rack kernel 6.8.0-136->137 (a maintenance-window reboot, NOT acted on).
