Phase 16M: explicit replica readiness on heartbeat seam - master.proto: optional bool replica_ready = 19 (proto regenerated on M01) - block_heartbeat_proto.go: write/read ReplicaReady with presence semantics - master_block_registry.go: replicaReadyObservedFromHeartbeat prefers explicit proto field, falls back to address heuristic when absent - volume_server_block.go: heartbeat emits ReplicaReady from core projection Phase 17: host effects extraction + stop line - phase-17-log.md: Batch 10/11 delivery notes Promote fixes: - master_block_failover.go: deterministic replica addrs from path hash - qa_promote_replication_test.go: address-upgrade trigger test - qa_promote_rejoin_live_test.go: new live rejoin test Testrunner: - devops.go: action improvements - recovery-baseline-failover.yaml, suite-ha-failover.yaml: scenario updates - cp11b3-manual-promote.yaml: promote scenario alignment - fresh_volume_write_test.go: new component test Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
13 KiB
V2 Product Completion Overview
Date: 2026-04-05 Status: active Purpose: provide one product-level overview of current V2 engineering completion, V1 reuse strategy, and the roadmap from the accepted candidate path to a production-ready block engine
Why This Document Exists
The project now has enough accepted V2 algorithm, engine, and hardening evidence that the next question is no longer only:
- is the protocol correct
It is also:
- how complete is the product path
- which parts are already strong
- which parts can reuse V1 engineering
- which parts still require major implementation work
- which future phases actually move product completion
This document is the product-completion view.
It complements:
v2-protocol-truths.mdfor accepted semanticsv2-capability-map.mdfor the capability-expansion and test-closure viewv2-phase-development-plan.mdfor the current phase ladder../.private/phase/phase-16.mdfor the active bounded runtime-closure contract
Current Position
The accepted first candidate path is:
RF=2sync_all- existing master / volume-server heartbeat path
- V2 engine owns recovery policy
v2bridgetranslates real storage/control truthblockvolremains the execution backend
This means the project is no longer at "algorithm only" or even only at "bounded prototype". It already has:
- accepted protocol truths
- accepted engine execution closure on the chosen path
- accepted control-plane and product-surface rebinding on the chosen path
- accepted hardening evidence for the bounded chosen path
- an accepted
Phase 16finish-line runtime checkpoint - an active
Phase 17product-claim package that now makes broader branch, contract, policy, and launch-envelope boundaries explicit - a first bounded productionization artifact set for pilot / preflight / stop-condition / rollout-review discipline
The most important current distinction is:
- the runtime backbone is now largely present
- product completion is no longer blocked by "missing first implementation"
- product completion is still blocked by broader closure and launch-envelope proof
Engineering Completion Snapshot
These levels are rough engineering estimates, not exact percentages.
| Area | Current level | Notes |
|---|---|---|
| Algorithm / protocol truths | Strong | Core V2 semantics are accepted and should remain stable unless contradicted by live evidence. |
| Simulator / prototype evidence | Strong | Main failure classes and protocol boundaries are already well-exercised. |
| Engine recovery core | Strong | Sender/session/orchestrator/driver/executor are substantially implemented and remain the semantic center. |
| Weed bridge integration | Strong | Reader / pinner / control / executor are real and tested on the chosen path. |
| Integrated candidate path | Strong on chosen path | Backend, control-plane, and selected product surfaces are accepted on one bounded chosen path. |
| Runtime ownership inside live server loop | Strong on bounded checkpoint | Phase 16 finish-line closed the bounded runtime checkpoint; broader lifecycle closure is now handled as explicit Phase 17 product-claim work. |
| Production-grade data transfer | Strong on chosen path | TransferFullBase and TransferSnapshot execution closure are accepted on the chosen path; later work is hardening. |
| Truncation / replica-ahead execution | Strong on chosen path | TruncateWAL narrow chosen-path closure is accepted; later work is hardening/planning improvement. |
| End-to-end control-plane closure | Strong on chosen path | Phase 10 accepted bounded end-to-end control-path closure on the chosen path. |
Product surfaces (CSI, NVMe, iSCSI, snapshot productization) |
Strong on chosen path | Phase 11 accepted bounded product-surface rebinding on the chosen path. |
| Production hardening / ops | Strong on bounded path, not full launch proof | Phase 12 closed the bounded hardening bar, but not the whole first-launch envelope. |
| Multi-replica catch-up runtime ownership | Strong on bounded startup/execution path | 16F-16I made command/event/pending/aggregation/startup ownership replica-scoped enough for the bounded primary multi-replica path. |
| Broad failover / publication / launch envelope | Structured but still bounded | Phase 17 now defines a branch map, bounded failover/publication contract, disturbance policy table, and first-launch envelope draft, but not broad launch approval. |
Reuse Strategy
Use this rule:
- if a component decides truth, V2 must own it
- if a component consumes truth, V1 engineering can often be reused
V2-owned semantics
These should not inherit V1 semantics casually:
- recovery choice:
zero_gap/catchup/needs_rebuild - sender/session ownership and fencing
- stable
ReplicaIDand stale-authority rejection - committed/checkpoint interpretation
- rebuild-source choice and recovery outcome meaning
V1 engineering that is usually reusable
These are implementation/reality layers, not protocol truth:
blockvolstorage runtime- WAL / flusher / checkpoint machinery
- real assignment receive/apply path
- front-end adapters such as
NVMe/iSCSI - much of
CSIlifecycle integration - monitoring / metrics / test harness infrastructure
Reuse with explicit bounds
These can reuse implementation, but their semantic placement must remain V2-owned:
- snapshot export / checkpoint plumbing
- rebuild transport / extent read path
- master/heartbeat/control delivery path
Module Treatment Overview
| Module area | Current treatment | Near-term plan |
|---|---|---|
| Recovery engine | V2-owned | Keep semantics stable and focus next on restart/disturbance hardening. |
v2bridge |
V2 boundary adapter | Chosen-path execution closure is accepted; later work is hardening without leaking policy downward. |
blockvol WAL/flusher/runtime |
Reuse reality | Reuse implementation, but do not let V1 replication semantics redefine V2 truth. |
| Snapshot capability | Reuse implementation, V2-owned semantics | Rebinding is accepted on the chosen path; later work is hardening. |
CSI |
Accepted product surface on chosen path | Keep the bounded contract stable and harden under disturbance. |
NVMe / iSCSI |
Accepted front-end adapters on chosen path | Keep publication/address truth stable and harden runtime behavior. |
| Rebuild server / transfer mechanisms | Reuse with redesign boundary | Chosen-path execution closure is accepted; later work is disturbance hardening. |
| Control plane | Reuse existing path | Bounded chosen-path closure is accepted; later work is restart/disturbance hardening. |
What The Candidate Path Already Proves
For the chosen RF=2 sync_all path, the project can already claim:
- stable remote identity across address change when
ServerIDis present - stale epoch/session fencing through the integrated path
- real catch-up one-chain closure on the chosen path
- rebuild control/execution chain proven on the chosen path
- chosen-path execution closure accepted in
Phase 09 - later work is restart/disturbance/perf hardening rather than first-path closure
- chosen-path execution closure accepted in
- replay of accepted failure classes on the unified live path
- one real failover / reassignment cycle
- one true simultaneous-overlap retention safety proof
- committed/checkpoint separation accepted for this candidate path:
CommittedLSN = WALHeadLSNCheckpointLSNremains the durable base-image boundary
- bounded live runtime ownership has materially improved after
Phase 15:- assignment entry is core-owned on the bounded path
apply_role,start_receiver,configure_shipper, andinvalidate_sessionare command-driven- bounded catch-up / rebuild execution starts from core-emitted recovery commands
- recovery command addressing and observation events are replica-scoped
- multi-replica catch-up aggregation and startup ownership are now bounded on the primary path
What Is Still Missing For Product Completion
The biggest remaining product-completion gaps are no longer "invent the first working path". They are closure and launch-envelope gaps:
- broader recovery-loop closure beyond the current
17Abranch map- branches are now classified explicitly, but most remain only partially proven rather than broadly closed
- broader failover / publication closure
17Bnow defines one bounded whole-chain statement, but not yet a broad whole-surface publication proof
- restart / disturbance preservation outside the current
17Cpolicy table- current long-window behavior is now policy-shaped, but not yet a broad production hardening statement
- pilot execution and review outcome
- the bounded productionization artifacts now exist, but no bounded pilot run, incident ledger, or rollout decision outcome has been accepted yet
- long-run / soak / performance extension beyond the bounded floor
Phase 12 P4remains the bounded floor; broader confidence still belongs to later productionization
Recommended Completion Roadmap
Stage 1: Review And Freeze The Phase 17 Checkpoint
Target:
- package the current
Phase 17branch/contract/policy/envelope work into one clear reviewable product-claim checkpoint
Status:
- checkpoint package drafted
- review outcome still pending
Main output:
- one
Phase 17checkpoint review artifact - one first-launch supported-matrix artifact
- one bounded statement of:
- branch map
- failover/publication contract
- disturbance policy
- launch envelope
Why it matters:
This is now the main boundary-setting blocker between a strong bounded path and a bounded launch decision package.
Stage 2: Freeze the first supported launch envelope
Target:
- convert accepted protocol, runtime, control-plane, and hardening evidence into one bounded first-launch support statement
Status:
- first draft frozen inside
Phase 17 - not yet accepted as a launch decision package
- bounded productionization artifacts now exist for pilot discipline, but do not by themselves imply launch approval
Main work:
- accept or refine the bounded supported matrix
- accept or refine explicit exclusions outside the first launch claim
- bind product-facing surfaces to the named supported envelope
- keep pilot/preflight/stop/rollout artifacts aligned to the same frozen matrix
Stage 3: Internal pilot and incident-driven hardening
Target:
- validate the frozen launch envelope without silently broadening scope
Main work:
- run a limited internal pilot package using the existing bounded artifact set
- route incidents with explicit classification:
- config / environment issue
- known exclusion
- true product bug
- harden only within the named supported envelope
- perform controlled rollout review only within the named supported envelope
- record one explicit decision outcome:
- stay in pilot
- widen within the same envelope
- block expansion
Rules:
- this is not
Phase 12 P5 - pilot success is not generic production proof
- missing evidence remains an explicit launch constraint until cleared, especially:
- failover-under-load performance
- hours/days soak under load
RF>2- broad transport matrix
- full gRPC-stream integration evidence
Completion Gates
The most important gates from here are:
- runtime-closure gate
- the strongest live recovery path must be explicit, bounded, and semantically owned by the core rather than spread across legacy host logic
- failover/publication gate
- outward truth under disturbance must be strong enough to make a product statement, not only a local runtime statement
- restart/disturbance gate
- restart, rejoin, address change, and repeated failover must preserve the accepted bounded semantics
- launch-envelope gate
- the first supported matrix and explicit exclusions must be written down
- pilot/rollout gate
- internal pilot discipline, incident routing, and rollout review must be explicit before widening scope
Near-Term Planning Guidance
If the goal is to maximize product completion efficiently:
- do not reopen accepted execution, control-plane, or product-surface semantics casually
- treat
Phase 16as closed at its finish-line checkpoint - use
Phase 17to keep branch/contract/policy/envelope claims explicit and bounded - then run a limited internal pilot
- then widen only through explicit incident review and rollout-gate review
In short:
- runtime checkpoint first
- product-claim / launch-envelope freeze second
- bounded productionization third
Short Summary
The V2 line is already beyond "algorithm only".
It has an accepted bounded chosen path through backend, control-plane, selected
product surfaces, bounded hardening, an accepted Phase 16 runtime checkpoint,
and an active Phase 17 product-claim package.
The main remaining work is not "build the first real thing". It is:
- finish review/freeze of the bounded
Phase 17branch/contract/policy/envelope package - execute the bounded internal pilot using the explicit preflight/stop/rollout artifacts
- harden from incidents without silently broadening scope
- only broaden claims when new evidence supports them
That is the practical path from the current bounded runtime-complete candidate to a bounded first-launch block product.