Merge Stage 4 (Phase 3: MAAS enlist / commission / carve, per DC) -- CLOSED 2026-07-27
Operator-gated merge of `dc-dc-stage4-phase3-maas-deploy` (77 commits, opened 2026-07-23).
Stage record: docs/archive/stage-records/vr1-stage4-record.md. Status authority remains
docs/CURRENT-STATE.md.

DELIVERED: 18 nodes READY (not Deployed -- MAAS-deploy is SKIPPED by the 2026-07-23
READY-handoff ruling / DOCFIX-200; Juju provisions at Stage 5), carved across 10 named plane
fabrics with pinned MACs, placement tags 9+9 verified LIVE, jammy images synced, and two
deliberately DIFFERENT per-DC artifact-delivery strategies proven: dc0 a full mirror
(949G+342M), dc1 an apt caching proxy (D-135 + its 07-24/07-27 amendments).

DoD: bullets 1-5 met with captures; bullet 6 ("NTP from the DC's own OPNsense edge") STRUCK by
DOCFIX-204 as unsatisfiable -- D-129(iv) had already ruled the MAAS hierarchy the time
authority, so a correctly-built DC could never have met it. The node-side half of bullet 5 is
split to new gate G17 by operator ruling rather than closed conditionally (GA-R6 E3 forbids a
conditional close; powered-off nodes cannot be probed). G17 triggers at Stage 5 first boot and
the phase-4 runbook owns its captures.

THE STAGE'S MOST USEFUL FINDINGS WERE IN ITS OWN CONTROLS. Two checks that had passed for days
could not fail: `dc-mirror.sh check` asserted that `last-sync.status` EXISTED, printing its
contents behind an unconditional OK (dc0 read FAIL, dc1 a four-day-stale RUNNING -- both
PASSED); and `creds-audit`, being declaration-based, read CLEAN on three sites while the D-137
matrix returned 13 findings. The D-137 six-lens committee found 8 more false greens in a
register built four days earlier. Distilled into the operating skill as "a checker that cannot
fail is not a gate", with the assert-on-content and enumerate-what-exists rules.

Decisions: D-133, D-134 (+amendment), D-135 (+two amendments), D-137 (five sub-rulings), plus
amendments to D-101, D-104 and D-113. SEC-017..SEC-025 opened (nine). DOCFIX-198..204.

Close-out: carve residue 108 fabrics -> 17 (cascade-checked, zero orphaned interfaces); dc1's
partial mirror + apparatus removed after making the proxy self-sufficient; GA-R2 consolidation;
skill sweep + dated snapshot regeneration; GA-R7 memory review (no new memory -- everything
durable graduated to the repo); gauntlet ALL GREEN (81); repo-lint 0-fail.

Travelling forward, deliberately: G17, 21 open SEC rows, and 7 residual credential-register
findings including the dc0 edge-API re-mint. Next stage branches off post-merge `main`.
commit 6f5701d0715079d99293ed85d839481f94778661
2 parents bff71d4 + c29059b
@JANeumatrix JANeumatrix authored 2 hours ago
Showing 102 changed files
View
.claude/settings.json
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
Too large (Show diff)
View
CLAUDE.md
Too large (Show diff)
View
_handoff-not-committed/00-DESTINATION-MAP.md 0 → 100644
Too large (Show diff)
View
_handoff-not-committed/10-design-decisions-append.md 0 → 100644
Too large (Show diff)
View
_handoff-not-committed/20-ruling-records.md 0 → 100644
Too large (Show diff)
View
_handoff-not-committed/30-current-state-update.md 0 → 100644
Too large (Show diff)
View
_handoff-not-committed/40-session-changelog-items.md 0 → 100644
Too large (Show diff)
View
_handoff-not-committed/50-ledger-bounded-summary.md 0 → 100644
Too large (Show diff)
View
_handoff-not-committed/60-vault-vip-values.md 0 → 100644
Too large (Show diff)
View
bundle.yaml
Too large (Show diff)
View
creds-manifests/probes 0 → 100644
Too large (Show diff)
View
creds-manifests/stages-reached 0 → 100644
Too large (Show diff)
View
creds-manifests/vm-secret-locations 0 → 100644
Too large (Show diff)
View
creds-manifests/vr1-dc0.manifest
Too large (Show diff)
View
creds-manifests/vr1-dc1.manifest
Too large (Show diff)
View
creds-manifests/vr1-office1.manifest
Too large (Show diff)
View
creds-matrix-notes.md 0 → 100644
Too large (Show diff)
View
creds-matrix.tsv 0 → 100644
Too large (Show diff)
View
docs/CURRENT-STATE.md
Too large (Show diff)
View
docs/D-137-implementation-plan.md 0 → 100644
Too large (Show diff)
View
docs/archive/changelogs/changelog-20260723-caveman-optin-guard.md 0 → 100644
Too large (Show diff)
View
docs/archive/changelogs/changelog-20260723-stage4-open.md 0 → 100644
Too large (Show diff)
View
docs/archive/changelogs/changelog-20260724-caveman-disable.md 0 → 100644
Too large (Show diff)
View
docs/archive/changelogs/changelog-20260724-stage5-committee-fork1.md 0 → 100644
Too large (Show diff)
View
docs/archive/changelogs/changelog-20260725-maas-admin-recovery.md 0 → 100644
Too large (Show diff)
View
docs/archive/changelogs/changelog-20260726-d137-tier1.md 0 → 100644
Too large (Show diff)
View
docs/archive/changelogs/changelog-20260727-creds-consolidation.md 0 → 100644
Too large (Show diff)
View
docs/archive/session-20260726-d137-build.md 0 → 100644
Too large (Show diff)
View
docs/archive/session-ledger-rotated-20260726.md 0 → 100644
Too large (Show diff)
View
docs/archive/stage-records/vr1-stage4-record.md 0 → 100644
Too large (Show diff)
View
docs/audit/committee-20260724-track2-bundle-render.md 0 → 100644
Too large (Show diff)
View
docs/audit/creds-consolidation-audit-20260727.txt 0 → 100644
Too large (Show diff)
View
docs/audit/creds-creation-points-20260725.md 0 → 100644
Too large (Show diff)
View
docs/audit/d137-location-listing-20260726.txt 0 → 100644
Too large (Show diff)
View
docs/audit/d137-tier2-postcommittee-20260726.txt 0 → 100644
Too large (Show diff)
View
docs/audit/d137-tier2-privileged-20260726.txt 0 → 100644
Too large (Show diff)
View
docs/audit/d137-tier2-sweep-20260726.txt 0 → 100644
Too large (Show diff)
View
docs/audit/d137-tier3-probe-20260726.txt 0 → 100644
Too large (Show diff)
View
docs/audit/d137-tier3-provenance-20260726.txt 0 → 100644
Too large (Show diff)
View
docs/audit/dc1-mirror-teardown-20260727.txt 0 → 100644
Too large (Show diff)
View
docs/audit/decision-recon-20260725.md 0 → 100644
Too large (Show diff)
View
docs/audit/gauntlet-20260723-stage4-dcmirror.txt 0 → 100644
Too large (Show diff)
View
docs/audit/maas-admin-recovery-20260725.txt 0 → 100644
Too large (Show diff)
View
docs/audit/operating-model-plan-20260725.md 0 → 100644
Too large (Show diff)
View
docs/audit/queued-findings-20260726.txt 0 → 100644
Too large (Show diff)
View
docs/audit/skill-divergence-20260725.md 0 → 100644
Too large (Show diff)
View
docs/audit/sprygit-requirements-inputs-20260725.md 0 → 100644
Too large (Show diff)
View
docs/audit/stage4-carve-residue-cleanup-20260727.txt 0 → 100644
Too large (Show diff)
View
docs/audit/stage4-carve-verify-20260723.txt 0 → 100644
Too large (Show diff)
View
docs/audit/stage4-discovery-20260723.txt 0 → 100644
Too large (Show diff)
View
docs/audit/stage4-mirror-gate-20260727.txt 0 → 100644
Too large (Show diff)
View
docs/audit/stage5-controller-capacity-20260724.txt 0 → 100644
Too large (Show diff)
View
docs/audit/stage5-expansion-review-20260724.md 0 → 100644
Too large (Show diff)
View
docs/dc-dc-buildout-design.md
Too large (Show diff)
View
docs/dc-dc-deployment-workflow.md
Too large (Show diff)
View
docs/dc-dc-netbox-buildout-scope.md
Too large (Show diff)
View
docs/design-decisions.md
Too large (Show diff)
View
docs/security-ledger.md
Too large (Show diff)
View
docs/session-ledger.md
Too large (Show diff)
View
docs/vr1-office1-as-built.md
Too large (Show diff)
View
logs/as-executed-index.md
Too large (Show diff)
View
netbox/draft/vr1-office1-current-20260725.json 0 → 100644
Too large (Show diff)
View
netbox/office1-record-dump.py 0 → 100644
Too large (Show diff)
View
netbox/prod-draft-dump.py
Too large (Show diff)
View
overlays/dc-ha-scaleup.yaml
Too large (Show diff)
View
overlays/vr1-dc1-machines.yaml 0 → 100644
Too large (Show diff)
View
overlays/vr1-dc1-vips.yaml 0 → 100644
Too large (Show diff)
View
runbooks/appendix-A-troubleshooting.md
Too large (Show diff)
View
runbooks/dc-dc-phase2-tofu-dc-substrate.md
Too large (Show diff)
View
runbooks/dc-dc-phase3-maas-enlist-deploy.md
Too large (Show diff)
View
runbooks/dc-dc-phase4-juju-bundle-per-dc.md
Too large (Show diff)
View
scripts/carve-host-interfaces.sh
Too large (Show diff)
View
scripts/creds-audit.sh
Too large (Show diff)
View
scripts/creds-matrix.py 0 → 100644
Too large (Show diff)
View
scripts/creds-probe.sh 0 → 100755
Too large (Show diff)
View
scripts/dc-cache-proxy.sh 0 → 100644
Too large (Show diff)
View
scripts/dc-mirror.sh 0 → 100755
Too large (Show diff)
View
scripts/lib-hosts.sh
Too large (Show diff)
View
scripts/lib-net.sh
Too large (Show diff)
View
scripts/opnsense-set-interface-v4.sh
Too large (Show diff)
View
scripts/preflight.sh
Too large (Show diff)
View
scripts/provider-bundle-check.py
Too large (Show diff)
View
scripts/reenroll-hosts.sh
Too large (Show diff)
View
scripts/repo-lint.sh
Too large (Show diff)
View
scripts/repo_lint.py
Too large (Show diff)
View
tests/carve-host-interfaces/run-tests.sh
Too large (Show diff)
View
tests/creds-audit/run-tests.sh
Too large (Show diff)
View
tests/creds-matrix/classify-findings.py 0 → 100644
Too large (Show diff)
View
tests/creds-matrix/expected-findings.txt 0 → 100644
Too large (Show diff)
View
tests/creds-matrix/run-tests.sh 0 → 100644
Too large (Show diff)
View
tests/creds-probe/run-tests.sh 0 → 100644
Too large (Show diff)
View
tests/dc-cache-proxy/run-tests.sh 0 → 100644
Too large (Show diff)
View
tests/dc-mirror/run-tests.sh 0 → 100755
Too large (Show diff)
View
tests/dc-selector/run-tests.sh
Too large (Show diff)
View
tests/office1-record-dump/run-tests.sh 0 → 100755
Too large (Show diff)
View
tests/opnsense-set-interface-v4/run-tests.sh
Too large (Show diff)
View
tests/preflight/run-tests.sh
Too large (Show diff)
View
tests/provider-bundle-check/run-tests.sh
Too large (Show diff)
View
tests/reenroll-hosts/run-tests.sh
Too large (Show diff)
View
tests/repo-lint/run-tests.sh
Too large (Show diff)