Phase 6.3 exit gate — compliance real-checks + phase doc = SHIPPED (core)
scripts/compliance/phase-6-3-compliance.ps1 turns stub TODOs into 21 real
checks covering:
- Stream B 8-state matrix: ServiceLevelCalculator + ServiceLevelBand present;
Maintenance=0, NoData=1, InvalidTopology=2, AuthoritativePrimary=255,
IsolatedPrimary=230, PrimaryMidApply=200, RecoveringPrimary=180,
AuthoritativeBackup=100, IsolatedBackup=80, BackupMidApply=50,
RecoveringBackup=30 — every numeric band pattern-matched in source (any
drift turns a check red).
- Stream B RecoveryStateManager with dwell + publish-witness gate + 60s
default dwell.
- Stream D ApplyLeaseRegistry: BeginApplyLease returns IAsyncDisposable;
key includes PublishRequestId (decision #162); PruneStale watchdog present;
10 min default ApplyMaxDuration.
Five [DEFERRED] follow-up surfaces explicitly listed with task IDs:
- Stream A topology loader (task #145)
- Stream C OPC UA node wiring (task #147)
- Stream E Admin UI (task #149)
- Stream F interop + Galaxy failover (task #150)
- sp_PublishGeneration Transparent-mode rejection (task #148 part 2)
Cross-cutting: full solution dotnet test passes 1137 >= 1097 pre-Phase-6.3
baseline; pre-existing Client.CLI Subscribe flake tolerated.
docs/v2/implementation/phase-6-3-redundancy-runtime.md status updated from
DRAFT to SHIPPED (core). Non-transparent redundancy per decision #84 keeps
role election out of scope — operator-driven failover is the v2.0 model.
`Phase 6.3 compliance: PASS` — exit 0.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>