mirror of
https://github.com/seaweedfs/seaweedfs.git
synced 2026-09-20 13:30:46 +02:00
267 lines
13 KiB
Markdown
267 lines
13 KiB
Markdown
# V3 Batch Process
|
||
|
||
**Date**: 2026-04-26
|
||
**Status**: ACTIVE — applies to all batches from G5-5 onward
|
||
**Supersedes**: ad-hoc per-batch governance (kickoff + mini-plan + G-1 + closure report + forward-carry checklist + QA scenario catalogue, 5+ artifacts)
|
||
|
||
---
|
||
|
||
## §1 The flow
|
||
|
||
```
|
||
plan → (G-1 if V2 PORT) → code → test → close
|
||
```
|
||
|
||
One mini-plan doc per batch. One PR. One close.
|
||
|
||
---
|
||
|
||
## §2 The single mini-plan doc
|
||
|
||
`v3-phase-15-<batch-id>-mini-plan.md` — the only artifact per batch. Sections in order:
|
||
|
||
| § | Content | Required when |
|
||
|---|---|---|
|
||
| §1 Scope | What this batch delivers; what it does NOT (explicit non-claims) | Always |
|
||
| §2 Acceptance criteria | Numbered list, each verifier-named (test or evidence), SINGLE source of truth | Always |
|
||
| §3 Invariants | INV IDs to inscribe at close + their test pointers; ledger updated by PR (not after) | Always |
|
||
| §4 G-1 V2 read | Inline: PORT items + V3-NATIVE items + hidden invariant audit | **Only if V2 muscle PORT batch** |
|
||
| §5 Forward-carry consumed | What this batch inherits from prior batch's §close | Always (even if "none") |
|
||
| §6 Risks + mitigations | Short table | Always |
|
||
| §7 Sign table | architect ratify §1-§6 once at start; architect single-sign §close at close | Always |
|
||
| §close | Appended at batch close: deltas vs §1-§6 + evidence pointers + forward-carries to next batch | Appended at close (not separate doc) |
|
||
|
||
**Total per batch: 1 doc, 1 commit lifecycle (init → §close append → architect sign).** No separate closure report, no separate G-1 doc, no separate forward-carry checklist, no separate QA scenario catalogue.
|
||
|
||
---
|
||
|
||
## §3 What earned its keep — KEEP
|
||
|
||
These survived T4 with track record. Don't drop:
|
||
|
||
| Discipline | When it applies | What it catches |
|
||
|---|---|---|
|
||
| **G-1 V2 PORT read** (inline §4) | V2 muscle ports only | Hidden invariants, architectural pins, placement decisions pre-code (5 saves on T4) |
|
||
| **Mini-plan acceptance criteria** (§2) | Always | Ambiguous closes; PR review checklist |
|
||
| **Invariant ledger discipline** (§3 + `v3-invariant-ledger.md`) | Always | "Claim without test = wish" rule |
|
||
| **m01 -race verification** | Always for any concurrency-touching code | Windows-blind concurrency bugs (caught 2 engine bugs at T4d-4 part C) |
|
||
| **Architect single-sign at close** | Always | Scope drift, stale references, silent narrowing |
|
||
|
||
---
|
||
|
||
## §4 What was overhead — DROP
|
||
|
||
| Practice | Reason dropped |
|
||
|---|---|
|
||
| Separate kickoff PROPOSAL doc | Mini-plan §1-§6 ratification is the same thing |
|
||
| Separate G-1 V2 read doc | Inline §4 of mini-plan |
|
||
| Separate closure report doc | §close section of mini-plan |
|
||
| Separate forward-carry checklist | §5 of next-batch mini-plan |
|
||
| Separate QA scenario catalogue | Author tests directly when ready (catalogue went stale 100% of the time) |
|
||
| Multi-version doc churn (v0.1 → v0.5) | One ratification + one close-sign per batch; mid-flight revisions only if SCOPE changes |
|
||
| Cross-doc invariant restatement (catalogue + checklist + ledger + mini-plan + closure) | Ledger is sole source of truth; other docs reference by INV ID |
|
||
| G-N sub-batch invention (G5-1..G5-6 style) | Architect picks T-track OR G-N batches at kickoff, not both for same gate |
|
||
|
||
---
|
||
|
||
## §5 Sign cycles — compressed
|
||
|
||
**Was:** kickoff ratify → mini-plan ratify → G-1 ratify → code → close ratify (4-5 architect signs per batch)
|
||
|
||
**Now:** mini-plan §1-§6 ratify → code → §close architect sign (2 signs per batch)
|
||
|
||
Mid-flight revisions ONLY when scope changes (architect re-ratifies the changed §). Doc-hygiene fixes don't need ratification — apply, commit, move on.
|
||
|
||
---
|
||
|
||
## §6 Decision rules
|
||
|
||
### §6.1 G-1 yes/no
|
||
|
||
| Batch type | G-1 needed? |
|
||
|---|---|
|
||
| V2 muscle port (`weed/storage/blockvol/*` source) | **YES** — inline §4 |
|
||
| V3-native (no V2 source; component framework or new design) | NO |
|
||
| Mixed (some PORT items + some V3-native) | YES for the PORT items only |
|
||
|
||
### §6.2 T-track vs G-N batch naming
|
||
|
||
| Implementation weight | Naming |
|
||
|---|---|
|
||
| Substantial new code (>500 LOC) | T-track (T5, T6, ...) |
|
||
| Mostly verification + missing pieces | G-N batches (G_x_-1, G_x_-2, ...) |
|
||
| Architect picks at kickoff | Don't mix both for same gate |
|
||
|
||
### §6.3 When to skip the mini-plan entirely
|
||
|
||
Hotfix-class single-commit changes (1-line + regression test, like `f6084ee` BlockStore walHead) don't need a mini-plan. Architect-approved hotfix PR + ledger update if invariant-affecting.
|
||
|
||
---
|
||
|
||
## §7 Doc lifecycle rules
|
||
|
||
1. **One mini-plan doc per batch.** No separate kickoff/closure/checklist/catalogue artifacts.
|
||
2. **Inscribe invariants in `v3-invariant-ledger.md` ONLY** at close. Other docs reference by INV ID.
|
||
3. **Update `v3-dev-roadmap.md` at every gate-close** (not batch-close — gate-close).
|
||
4. **Doc edits that don't change scope don't need architect ratification** — fix typos, fix stale refs, commit, move on.
|
||
5. **Stale doc refs at close-sign time = QA's fault.** Run `grep -r <stale-ref>` before submitting closure for sign.
|
||
|
||
---
|
||
|
||
## §8 What to keep current as control docs
|
||
|
||
These are first-order references; keep updated as batches close:
|
||
|
||
| Doc | Owner | Update trigger |
|
||
|---|---|---|
|
||
| [`v3-dev-roadmap.md`](./v3-dev-roadmap.md) | QA | every gate-close |
|
||
| [`v3-architecture.md`](./v3-architecture.md) | architect | component/responsibility/flow changes |
|
||
| [`v3-phase-15-mvp-scope-gates.md`](./v3-phase-15-mvp-scope-gates.md) | architect | scope changes (e.g. G9A added 2026-04-26) |
|
||
| [`v3-invariant-ledger.md`](./v3-invariant-ledger.md) | sw + QA | every batch-close (PR-atomic) |
|
||
| [`v3-block-behavior-contract-index.md`](./v3-block-behavior-contract-index.md) | architect | new behavior contract ratifications |
|
||
| [`v3-product-placement-authority-rationale.md`](./v3-product-placement-authority-rationale.md) | architect | placement architecture changes |
|
||
| [`v2-v3-contract-bridge-catalogue.md`](./v2-v3-contract-bridge-catalogue.md) | sw + QA | V2→V3 entity bridge updates |
|
||
|
||
Everything else is per-batch (mini-plan) or methodology (`v3-phase-development-model.md`, this doc).
|
||
|
||
---
|
||
|
||
## §9 First trial: G5-5
|
||
|
||
This process gets its first trial at G5-5 (m01 hardware first-light). Concretely:
|
||
|
||
- ONE doc: `v3-phase-15-g5-5-mini-plan.md`
|
||
- §close appended at batch close, not separate report
|
||
- Forward-carries from G5-4 (criteria 3+4) consumed in §5
|
||
- §close pushes any G5-5 carries forward to G5-6
|
||
- Architect: ratify §1-§6 once + sign §close at close
|
||
- No separate kickoff, no separate closure report, no separate checklist
|
||
|
||
If G5-5 closes cleanly under this process, codify as default for G5-6 + G6 + onward.
|
||
|
||
---
|
||
|
||
## §10 Process change protocol
|
||
|
||
This doc evolves like any other:
|
||
- New batch tries something different → propose change here
|
||
- 3+ batches use the new pattern successfully → codify
|
||
- Process change requires architect sign (same §8C.2 rule applies)
|
||
|
||
Do NOT auto-port T4 governance template forward. Each batch asks "does this step earn its keep" at kickoff.
|
||
|
||
---
|
||
|
||
## §11 Honesty principle
|
||
|
||
Documentation overhead that doesn't catch bugs is ceremony. Documentation that catches bugs is discipline.
|
||
|
||
Drop ceremony. Keep discipline.
|
||
|
||
---
|
||
|
||
## §12 Architect review checklist
|
||
|
||
Architect review is not plan authorship. It is the system-level check that prevents drift.
|
||
|
||
Every mini-plan ratification and §close sign must answer:
|
||
|
||
| Check | Question |
|
||
|---|---|
|
||
| Scope truth | What is done, what is explicitly not done, and what product risk remains? |
|
||
| V2 / new-build decision | Is this a full V2 port, partial V2 port, reference-only read, explicit reject, or V3-native design? Does it need a new gate? |
|
||
| Engine / adapter impact | Does this change authority, session fate, recovery, durability, projection, or truth ownership? If yes, where is the invariant and adversarial test? |
|
||
| Product usability level | What can an operator or user actually do end-to-end after this batch? Which test proves it? Which next gate makes it more usable? |
|
||
|
||
Close signs should include a short statement of:
|
||
|
||
```text
|
||
Done:
|
||
Not done:
|
||
Product level reached:
|
||
Next gate that makes it usable:
|
||
```
|
||
|
||
---
|
||
|
||
## §13 Failure modes this process must prevent
|
||
|
||
These are the observed sources of waste. Every batch should actively check them.
|
||
|
||
| Failure mode | Required countermeasure |
|
||
|---|---|
|
||
| V2 porting drift | Top-down mapping: V2 behavior → V3 product contract → truth owner → accepted/rejected semantics → invariant/test |
|
||
| Engine/adapter change without reason | Require reason, truth-domain impact, bad state prevented, and proof test |
|
||
| Function close means happy path only | Acceptance must include stale input, reordering/overlap where relevant, partial progress, retry/restart, and explicit non-claims |
|
||
| Product unusable despite green tests | Mini-plan must name the end-to-end operator/user path and whether it is real, simulated, manual, or deferred |
|
||
| Missing architecture component | If a batch discovers a product component late (for example placement or binary wiring), update `v3-architecture.md` or the gate before continuing |
|
||
|
||
---
|
||
|
||
## §14 Who owns what step
|
||
|
||
All three "architects" are AI agents; user routes messages between them. Per-agent action lists (§15) reduce routing overhead.
|
||
|
||
| Architect role | Owner agent | Scope |
|
||
|---|---|---|
|
||
| **System architect** | architect agent (cursor) | Product, scope, behavior contracts, gate definitions, close sign |
|
||
| **Function/process architect** | QA agent (claude-code) | Process discipline, verification, system-level drift detection, doc lifecycle |
|
||
| **Code-ownership architect** | sw agent (cursor) | Implementation feasibility, code shape, framework state |
|
||
|
||
Based on what actually worked across T4 + G5:
|
||
|
||
| Step | Owner | Why |
|
||
|---|---|---|
|
||
| **Gate scope** (which gate, what it promises, dependencies) | architect | Product requirements + V3 architectural discipline |
|
||
| **Batch sketch** (mini-plan §1-§6) | **sw** | Knows the code + implementation feasibility + framework state; can commit to what's deliverable |
|
||
| **G-1 V2 read** (when V2 PORT) | sw | Owns the V3 target where V2 muscle lands |
|
||
| **Mini-plan ratification** | architect (signs §1-§6) + QA (reviews) | Architect: scope drift / missing bindings / V2 lessons. QA: invariant + acceptance discipline. |
|
||
| **Code + unit tests** | sw | — |
|
||
| **Component scenarios + m01 verification** | QA | Independent perspective; framework + hardware coverage |
|
||
| **Ledger inscription** (PR-atomic) | sw | Lands with code in same PR |
|
||
| **§close append** | sw drafts; QA verifies evidence pointers | Sw: facts. QA: acceptance discipline. |
|
||
| **Close sign** | architect | Single-sign per §8C.2; caught stale refs + scope drift multiple times |
|
||
|
||
**Why sw plans (not architect):**
|
||
- Sw knows what's feasible + what frameworks exist + what shortcuts are safe
|
||
- Architect-drafted plans miss implementation realities (catch up via reviewer cycle anyway)
|
||
- Sw self-commits to scope they can deliver — fewer revision cycles
|
||
- Architect ratifies SCOPE (caught 2 binding clarifications at G5-4 v0.2→v0.3) but doesn't need to author implementation detail
|
||
|
||
**Why QA reviews + verifies (doesn't plan):**
|
||
- Independent third party; not advocate for either scope or implementation choice
|
||
- Catches discipline gaps (invariant inscription, acceptance criteria coverage) sw + architect miss
|
||
- Owns m01 hardware verification + component scenarios
|
||
|
||
**Edge case — process changes (this doc):** QA proposes; architect signs (same as any scope-affecting change).
|
||
|
||
**Edge case — hotfix-class** (per §6.3): sw can self-author + self-merge with QA spot-review. Architect ratifies if invariant-affecting.
|
||
|
||
---
|
||
|
||
## §15 Inter-agent communication discipline
|
||
|
||
Every response from QA, sw, or architect MUST end with an explicit per-agent action list. The user routes messages between agents — communication overhead is real cost.
|
||
|
||
**Mandatory format at end of every substantive response:**
|
||
|
||
```
|
||
## Next actions
|
||
|
||
| Agent | Action |
|
||
|---|---|
|
||
| **architect** | <specific action OR "none — standing by"> |
|
||
| **sw** | <specific action OR "none — standing by"> |
|
||
| **QA** | <specific action OR "none — standing by"> |
|
||
```
|
||
|
||
Rules:
|
||
1. Every agent gets a row, even if "none — standing by"
|
||
2. Actions must be **concrete + executable** ("commit X", "review Y", "decide path A vs B"), NOT vague ("consider Z")
|
||
3. If an action depends on another agent's prior action, name the dependency: "after sw lands G5-5, run -race ×10 on m01"
|
||
4. Skip the table only for genuinely no-decision-needed acknowledgements (e.g., one-line confirmations)
|
||
|
||
**Why**: user's current load is ~90% copy-paste routing between agents. Explicit per-agent action lists at end of every response cut routing time. Every agent reads "what's MY action" without parsing a wall of text.
|
||
|
||
This rule applies to **every agent's outputs**, not just QA's. Sw + architect responses to QA reviews must end with the same per-agent action list.
|