Stage 4 close-out set: GA-R2 consolidation, skill sweep, snapshot, GA-R7 review
Every substantive Stage 4 item is closed or split to gate row G17. This is the GA-R6 close-out
set; only the operator-gated merge to `main` remains.

GA-R2 CONSOLIDATION: the 7 stage changelogs archived to docs/archive/changelogs/ (top-level
docs/ 25 -> 18, 113 archived total) and the stage record written at
docs/archive/stage-records/vr1-stage4-record.md. It records what the stage actually delivered
(READY handoff, not deployed nodes), the three things a future session should read first, and
the false-green pattern this stage kept surfacing. 12 stale `docs/changelog-*` paths in live
surfaces rewritten to the archive -- including several already dangling from the G12 close, so
every changelog reference in CURRENT-STATE / session-ledger / security-ledger now resolves.

SKILL SWEEP: three new INVARIANTS folded in --
  - per-DC ARTIFACT DELIVERY is a per-DC STRATEGY (dc0 full mirror / dc1 caching proxy, D-135
    amendments); checking dc1 as a mirror fails BY DESIGN. Corollary, learned the hard way: a
    per-DC utility service OWNS ITS OWN network prerequisites -- never let one strategy's
    teardown be able to break the other's.
  - Stage 4 hands off READY nodes, NOT deployed ones (DOCFIX-200). Any surface saying "nodes
    Deployed" as a Stage-4 exit is a defect; four were found and fixed. Consequence: nothing
    node-side is probeable in Stage 4, which is why G17 exists.
  - "A CHECKER THAT CANNOT FAIL IS NOT A GATE", with the working rules that came out of two
    measured false greens: assert on CONTENT not existence; an unrecognised state REFUSES;
    "could not look" is never "nothing there"; ENUMERATE what exists rather than only auditing
    what is declared, because a register cannot report the absence of a row it does not have;
    and when a test asserts a literal finding string, REPLACE the assertion, never delete it.
Plus two routing rows (per-DC artifact checks; D-137 as the credential-lifecycle authority).

SNAPSHOT REGENERATED: .claude/skills/openstack-cloud-ops-consolidated-20260727.md (1589 lines,
ASCII + LF byte-verified, all 7 sections). The superseded 20260725 snapshot is REMOVED rather
than kept alongside -- a stale snapshot being uploaded is the exact failure
docs/audit/skill-divergence-20260725.md records (a failed clone + a mis-shaped handoff), and it
is a derived artifact regenerable from any commit.

GA-R7 MEMORY REVIEW: NO new memory written -- everything durable from this stage graduated to
the skill and the repo, which is the correct GA-R7 outcome, not an omission. Both existing
entries verified against the repo (the finding-class baseline they cite does exist) and extended
with the two reasoning traps this stage produced: the register cannot see a credential it has no
ROW for, so enumerate what exists; and diagnose a denied call by checking whether an existing
rule failed to MATCH before blaming the classifier (the measured 2026-07-26 root cause). Also
marked the ask-vs-allow precedence claim UNVERIFIED so no future session relies on it.

Noted, not actioned (hard rule 1): T24's finding-class baseline covers TIER 1 only, so tier-2/3
classes have no baselined red state and a future false green there would not be caught.

Gauntlet ALL GREEN (81), repo-lint 0-fail.

Revert: git revert this commit; the changelog moves are renames and the snapshot is derived.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01HvCyrwvYTTcDYnRErfMsNf
1 parent 43256d6 commit c29059b77f51ac0e620999f835f1966165509b87
@JANeumatrix JANeumatrix authored 2 hours ago
Showing 21 changed files
View
.claude/skills/openstack-cloud-ops-consolidated-20260725.md 100644 → 0
Too large (Show diff)
View
.claude/skills/openstack-cloud-ops-consolidated-20260727.md 0 → 100644
Too large (Show diff)
View
.claude/skills/openstack-cloud-ops/SKILL.md
View
docs/CURRENT-STATE.md
View
docs/archive/changelogs/changelog-20260723-caveman-optin-guard.md 0 → 100644
View
docs/archive/changelogs/changelog-20260723-stage4-open.md 0 → 100644
View
docs/archive/changelogs/changelog-20260724-caveman-disable.md 0 → 100644
View
docs/archive/changelogs/changelog-20260724-stage5-committee-fork1.md 0 → 100644
View
docs/archive/changelogs/changelog-20260725-maas-admin-recovery.md 0 → 100644
View
docs/archive/changelogs/changelog-20260726-d137-tier1.md 0 → 100644
View
docs/archive/changelogs/changelog-20260727-creds-consolidation.md 0 → 100644
View
docs/archive/stage-records/vr1-stage4-record.md 0 → 100644
View
docs/changelog-20260723-caveman-optin-guard.md 100644 → 0
View
docs/changelog-20260723-stage4-open.md 100644 → 0
View
docs/changelog-20260724-caveman-disable.md 100644 → 0
View
docs/changelog-20260724-stage5-committee-fork1.md 100644 → 0
View
docs/changelog-20260725-maas-admin-recovery.md 100644 → 0
View
docs/changelog-20260726-d137-tier1.md 100644 → 0
View
docs/changelog-20260727-creds-consolidation.md 100644 → 0
View
docs/security-ledger.md
View
docs/session-ledger.md