From 32a9993264b1e4b1aa1587e5e1ea8255b1ff8ba1 Mon Sep 17 00:00:00 2001 From: pingqiu Date: Sun, 3 May 2026 06:55:29 -0700 Subject: [PATCH] docs(p15): add G9G close snapshot and QA instruction --- ...-g9g-blockmaster-product-loop-mini-plan.md | 40 ++++++++++- .../v3-phase-15-g9g-qa-test-instruction.md | 72 +++++++++++++++++++ 2 files changed, 111 insertions(+), 1 deletion(-) create mode 100644 sw-block/design/v3-phase-15-g9g-qa-test-instruction.md diff --git a/sw-block/design/v3-phase-15-g9g-blockmaster-product-loop-mini-plan.md b/sw-block/design/v3-phase-15-g9g-blockmaster-product-loop-mini-plan.md index deda95a84..bcbfb36ab 100644 --- a/sw-block/design/v3-phase-15-g9g-blockmaster-product-loop-mini-plan.md +++ b/sw-block/design/v3-phase-15-g9g-blockmaster-product-loop-mini-plan.md @@ -1,7 +1,7 @@ # V3 Phase 15 G9G - Blockmaster Product Loop To Publisher Mini-Plan Date: 2026-05-03 -Status: component slice implemented at `seaweed_block@afac861`; subprocess L2 implemented at `seaweed_block@bdd56c7`; seed-file entry implemented at `seaweed_block@7ed9ab2`; QA verification pending +Status: close-ready on `p15-g9g/blockmaster-product-loop@7ed9ab2`; QA verification pending Branch target: `p15-g9g/blockmaster-product-loop` Scope: first live blockmaster loop that turns verified placement into publisher input @@ -119,3 +119,41 @@ pre-writing lifecycle store internals: - r2 reaches assignment-backed `Healthy=true`. Only after that should we wire external API/CLI verbs or CSI create/publish. + +## 7. Close Snapshot + +Close target: `seaweed_block@7ed9ab2`. + +G9G closes the first product-loop assignment path: + +```text +seeded placement intent + -> blockmaster lifecycle store + -> product-loop tick + -> VerifiedPlacement + -> G9F-2 AssignmentAsk bridge + -> authority.Publisher + -> blockvolume assignment stream +``` + +Evidence expected from QA: + +```powershell +go test ./core/lifecycle ./core/host/master ./core/authority ./cmd/blockmaster ./cmd/blockvolume -count=1 +``` + +Key L2 evidence: + +- `cmd/blockvolume::TestG9G_L2ProductLoopPublishesAssignmentToBlockvolume` +- real `cmd/blockmaster`; +- real `cmd/blockvolume`; +- `--lifecycle-placement-seed` entry instead of pre-written internal lifecycle store; +- product-loop assignment reaches blockvolume and makes r2 `Healthy=true`. + +Close non-claims: + +- `--lifecycle-placement-seed` is a temporary QA/M01 bridge, not the final product API. +- YAML cluster spec is follow-up, not blocking G9G. +- Create/delete/attach/detach user verbs are follow-up. +- Blank-pool replica-id allocation is follow-up. +- CSI and M01 hardware smoke are follow-up. diff --git a/sw-block/design/v3-phase-15-g9g-qa-test-instruction.md b/sw-block/design/v3-phase-15-g9g-qa-test-instruction.md new file mode 100644 index 000000000..d5f7eabba --- /dev/null +++ b/sw-block/design/v3-phase-15-g9g-qa-test-instruction.md @@ -0,0 +1,72 @@ +# V3 Phase 15 G9G QA Test Instruction + +Date: 2026-05-03 +Status: close-candidate on `p15-g9g/blockmaster-product-loop@7ed9ab2` +Scope: blockmaster product loop publishes verified placement into the authority publisher path + +## Headline + +At `p15-g9g/blockmaster-product-loop@7ed9ab2`, G9G proves a real blockmaster +can import placement intent through a daemon entry point, run the lifecycle +product loop, publish through `authority.Publisher`, and deliver assignment to +a real blockvolume subscriber. + +## Environment + +- Repo: `seaweed_block` +- Branch: `p15-g9g/blockmaster-product-loop` +- Minimum commit: `7ed9ab2` +- Fidelity: subprocess L2 with real `cmd/blockmaster` and real `cmd/blockvolume` +- Non-claim: not m01/M02 hardware and not final product API + +## Full Regression Command + +```powershell +go test ./core/lifecycle ./core/host/master ./core/authority ./cmd/blockmaster ./cmd/blockvolume -count=1 +``` + +Expected result: all five packages pass. `cmd/blockvolume` is expected to take +about two minutes because it includes G8 and G9 subprocess tests. + +## Focused G9G Command + +```powershell +go test ./cmd/blockvolume -run TestG9G_L2ProductLoopPublishesAssignmentToBlockvolume -count=1 +``` + +Expected result: pass in roughly 10-15 seconds on the local Windows harness. + +## Scenario Checklist + +1. Blockmaster accepts a product-loop seed entry. + Backing test: `cmd/blockmaster/main_test.go::TestParseFlags_LifecyclePlacementSeedOptional` + +2. Product-loop component tick publishes verified existing replica placement. + Backing test: `core/host/master/product_loop_test.go::TestG9G_ProductLoopPublishesVerifiedExistingReplica` + +3. Unverified placement does not publish authority. + Backing test: `core/host/master/product_loop_test.go::TestG9G_ProductLoopDoesNotPublishUnverifiedPlacement` + +4. Repeated product-loop tick does not churn authority. + Backing test: `core/host/master/product_loop_test.go::TestG9G_ProductLoopIsIdempotentForSameAuthorityLine` + +5. Publisher subscription receives product-loop assignment. + Backing test: `core/host/master/product_loop_test.go::TestG9G_BlockvolumeSubscriptionReceivesProductLoopAssignment` + +6. Real subprocess path delivers assignment to blockvolume. + Backing test: `cmd/blockvolume/g9g_l2_product_loop_test.go::TestG9G_L2ProductLoopPublishesAssignmentToBlockvolume` + +## Non-Claims + +- `--lifecycle-placement-seed` is a temporary QA/M01 bridge, not the final product API. +- No YAML cluster spec yet. +- No external create/delete/attach/detach API yet. +- No blank-pool replica-id allocator. +- No CSI integration. +- No m01/M02 hardware evidence. +- Assignment publication still does not imply frontend readiness in the abstract; this L2 checks the existing blockvolume status projection after assignment delivery. + +## Closure Sentence + +G9G closes the first live product-loop assignment path: +`seeded placement intent -> blockmaster product loop -> publisher -> blockvolume assignment stream`.