Finding 1: Identity no longer address-derived - ReplicaAddr.ServerID field added (stable server identity from registry) - BlockVolumeAssignment.ReplicaServerID field added (scalar RF=2 path) - ControlBridge uses ServerID, NOT address, for ReplicaID - Missing ServerID → replica skipped (fail closed), logged Finding 2: Wired into real ProcessAssignments - BlockService.v2Bridge field initialized in StartBlockService - ProcessAssignments converts each assignment via v2Bridge.ConvertAssignment BEFORE existing V1 processing (parallel, not replacing yet) - Logged at glog V(1) Finding 3: Fail-closed on missing identity - Empty ServerID in ReplicaAddrs → replica skipped with log - Empty ReplicaServerID in scalar path → no replica created - Test: MissingServerID_FailsClosed verifies both paths 7 tests: StableServerID, AddressChange_IdentityPreserved, MultiReplica_StableServerIDs, MissingServerID_FailsClosed, EpochFencing_IntegratedPath, RebuildAssignment, ReplicaAssignment Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
5.4 KiB
Phase 06
Date: 2026-03-30 Status: complete Purpose: move from validated engine slices to the first broader runnable V2 engine stage
Why This Phase Exists
Phase 05 established and validated:
- ownership core
- recovery execution core
- recoverability/data gating core
- integration closure
What still does not exist is a broader engine stage that can run with:
- real control-plane inputs
- real persistence/backing inputs
- non-trivial execution loops instead of only synchronous convenience paths
So Phase 06 exists to turn the accepted engine shape into the first broader runnable engine stage.
Phase 06 must connect the accepted engine core to real control and real storage truth, not just wrap current abstractions with adapters.
Phase Goal
Build the first broader V2 engine stage without reopening protocol shape.
This phase should focus on:
- real engine adapters around the accepted core
- asynchronous or stepwise execution paths where Slice 4 used synchronous helpers
- real retained-history / checkpoint input plumbing
- validation against selected real failure classes and real implementation constraints
Overall Roadmap
Completed:
- Phase 01-03: design + simulator
- Phase 04: prototype closure
- Phase 4.5: evidence hardening
- Phase 05: engine slice closure
- Phase 06: broader engine implementation stage
Next:
- Phase 07: real-system integration / product-path decision
This roadmap should stay strict:
- no return to broad prototype expansion
- no uncontrolled engine sprawl
Scope
In scope
- control-plane adapter into
sw-block/engine/replication/ - retained-history / checkpoint adapter into engine recoverability APIs
- replacement of synchronous convenience flows with explicit engine steps where needed
- engine error taxonomy and observability tightening
- validation against selected real failure classes from:
learn/projects/sw-block/weed/storage/block*
Out of scope
- Smart WAL expansion
- full backend redesign
- performance optimization as primary goal
- V1 replacement rollout
- full product integration
Phase 06 Items
P0: Engine Stage Plan
Status:
- accepted
- module boundaries now explicit:
adapter.godriver.goorchestrator.goclassification
- convenience flows are now classified as:
- test-only convenience wrapper
- stepwise engine task
- planner/executor split
P1: Control / History Adapters
Status:
- accepted
StorageAdapterboundary exists and is exercised by tests- full-base rebuild now has a real pin/release contract
- WAL pinning is tied to actual recovery contract, not loose watermark use
- planner fails closed on missing sender / missing session / wrong session kind
P2: Execution Driver
Status:
- accepted
- executor now owns resource lifecycle on success / failure / cancellation
- catch-up execution is stepwise and budget-checked per progress step
- rebuild execution consumes plan-bound source/target values and does not re-derive policy at execute time
CompleteCatchUp/CompleteRebuildremain test-only convenience wrappers- tester validation accepted with reduced-but-sufficient rebuild failure-path coverage
P3: Validation Against Real Failure Classes
Status:
- accepted
- changed-address restart now validated through planner/executor path with plan cancellation
- stale epoch/session during active execution now validated through the executor-managed loop
- cross-layer trusted-base / replayable-tail proof path validated end-to-end
- rebuild fallback and pin-failure cleanup now fail closed and are diagnosable
Guardrails
Guardrail 1: Do not reopen protocol shape
Phase 06 implemented around accepted engine slices and did not reopen:
- sender/session authority model
- bounded catch-up contract
- recoverability/truncation boundary
Guardrail 2: Do not let adapters smuggle V1 structure back in
V1 code and docs remain:
- constraints
- failure gates
- integration references
not the V2 architecture template.
Guardrail 3: Prefer explicit engine steps over synchronous convenience
Key convenience helpers remain test-only. Real engine work now has explicit planner/executor boundaries.
Guardrail 4: Keep evidence quality high
Phase 06 improved:
- cross-layer traceability
- diagnosability
- real-failure validation
without growing protocol surface.
Guardrail 5: Do not fake storage truth with metadata-only adapters
Phase 06 now requires:
- trusted base to come from storage-side truth
- replayable tail to be grounded in retention state
- observable rejection when those proofs cannot be established
Exit Criteria
Phase 06 is done when:
- engine has real control/history adapters into the accepted core
- engine has real storage/base adapters into the accepted core
- key synchronous convenience paths are explicitly classified or replaced by real engine steps where necessary
- selected real failure classes are validated against the engine stage
- at least one cross-layer storage/engine proof path is validated end-to-end
- engine observability remains good enough to explain recovery causality
Status:
- met
Closeout
Phase 06 is complete.
It established:
- a broader runnable engine stage around the accepted Phase 05 core
- real planner/executor/resource contracts
- validated failure-class behavior through the engine path
- diagnosable proof rejection and cleanup behavior
Next step:
Phase 07real-system integration / product-path decision