Sprint Plan - 2026-02-20
Theme
"Flow demos as product truth"
If it can't be demo'd end-to-end from a script, it isn't real yet. Sprint 8 is: Flow B (service discovery) + Flow A (WASM distribution/submit) + CI stability.
Grounded Start State (2026-02-20)
- Open PRs: #1250 (names API, in-review — CI blocked on runner disk), #1251 (CI disk fix, in-review)
- Main head:
f2732365(feat(naming): add kv-backed NamingService implementation (#1248)) - Recently closed issues:
#1083,#1214,#1220,#1221,#1222 - Pilot Completion flow status:
- Flow C (
#1090/#1093/#1094):#1090still open (fallback atomicity — conditional) - Flow B (
#1083/#1084/#1085): backend + gateway done, demo script not started - Flow A (
#1076/#1077/#1078): not started
- Flow C (
Sprint Goals
- Unblock CI so anything can land (
#1251) - Ship Flow B end-to-end demo script (
#1085) - Implement Flow A WASM compute path in gateway + SDK (
#1076,#1077) - Ship Flow A demo script (
#1078)
Milestones and Exit Criteria
M0 — CI stability (must land first) (#1251)
Owner lane: Infra
Tasks:
- Add "Clean stale Cargo test binaries" step to test job in
ci.yml - Verify Test job passes on self-hosted runner after cleanup step runs
- Manually clear
target/debug/deps/onk3s-worker-1(done: 2026-02-20) - Rerun PR #1250 Test job with clean runner
Verification commands:
# After rerun completes:
gh pr checks 1250 --repo InterCooperative-Network/icn
gh pr checks 1251 --repo InterCooperative-Network/icn
Exit criteria:
- PR #1251 merged with
Closes(infra-only, CI-only change) Testjob passes on[self-hosted, homelab, k3s]on two consecutive runs
M1 — Flow A: Gateway compute submit by hash (#1076)
Owner lane: Gateway
Tasks:
- Update compute submit endpoint to accept
wasm_hashfield - Wire to
ComputeActorwithTaskCode::WasmRef - Validate hash format (length/charset) at API boundary
- Return stable
ErrCodeon hash-not-found and bad-format - Add integration test:
compute_submit_wasm_hash_starts_task
Verification commands:
cd icn
cargo fmt --all --check
cargo clippy -p icn-gateway --all-targets -- -D warnings
cargo test -p icn-gateway --features sled-storage
Exit criteria:
- PR merged with
Closes #1076 - Happy path + not-found + bad-format covered by tests
M2 — Flow A: TypeScript SDK WASM client + typed errors (#1077)
Owner lane: SDK
Tasks:
- Create
sdk/typescript/src/wasm.ts:deploy(bytes)→ hashget(hash)→ metadatalist(owner?)→ metadata[]submitCompute(wasmHash, ...)→ task handle (new, ties to#1076)
- Export from
sdk/typescript/src/index.ts - Map errors to typed exceptions aligned with ErrCode taxonomy (
#1062) - Add minimal usage snippet to SDK docs
Verification commands:
cd icn/sdk/typescript
npm ci
npm run build
npm test
npm run lint
Exit criteria:
- PR merged with
Closes #1077 - SDK can deploy, list, get WASM artifacts and submit compute by hash
- Typed error paths covered by tests
M3 — Flow B: Service discovery demo script (#1085)
Owner lane: Demo/Ops Blocked on #1250 merge.
Tasks:
- Create
demo/flow-b-service-discovery.sh - Script uses devnet (3-node)
- Steps: name registration → gossip propagation → discovery lookup → auth call
- Deterministic: clear success markers, non-zero exits on failure, reasonable retries
- Adversarial checks: unsigned response ignored, call without auth fails, invalid JWT fails
Verification commands:
cd /home/ubuntu/projects/icn
bash demo/flow-b-service-discovery.sh
Exit criteria:
- PR merged with
Closes #1085 - Script passes on 3-node devnet from clean start
- Non-zero exit on each adversarial path
M4 — Flow A: WASM distribution demo script (#1078)
Owner lane: Demo/Ops Blocked on #1076 + #1077 merging.
Tasks:
- Create
demo/flow-a-wasm-distribution.sh - Steps:
- Upload WASM → obtain hash
- Submit compute referencing
wasm_hash - Verify receipt / result (minimal proof of execution)
- Script is deterministic, re-runnable, fails loudly
Verification commands:
cd /home/ubuntu/projects/icn
bash demo/flow-a-wasm-distribution.sh
Exit criteria:
- PR merged with
Closes #1078 - Script passes end-to-end on devnet
Explicit Non-Goals (This Sprint)
#1090(fallback atomicity via CoopActor single-writer): out of scope unless Flow A/C demos hit an actual transactional wall. Re-evaluate after M4.#1095–#1098(ContainerRuntime, genesis bundle, devnet compose): post-demo infra track#1047/#1053/#1054(tier:3 perf backlog): not until demos are stable#1009–#1012(arch-wave wave docs): not blocking any demo flow
Execution Order
Lane 0 — CI stability (prerequisite)
- Rerun #1250 Test job (runners now clean)
- Merge #1251 (CI disk fix) — small, CI-only
- Merge #1250 (names API) — unblocks M3
Lane 1 — Flow A plumbing (can start immediately, parallel)
- Build #1076 (gateway
wasm_hash) and #1077 (SDK WASM client) in parallel - Then #1078 (Flow A demo script)
Lane 2 — Flow B demo (starts after #1250 merges)
- Build #1085 (Flow B service discovery demo script)
Sprint Acceptance (the "ship it" bar)
By end of sprint:
- ✅ CI on self-hosted runners no longer fails due to disk exhaustion
- ✅ Flow A demo script succeeds: WASM upload → hash → submit → verify
- ✅ Flow B demo script succeeds: name registration → discovery → auth-gated call
- ✅ TypeScript SDK supports both flows with typed errors
Risk Register
- Runner disk fills again: Mitigation —
#1251cleanup step runs before every test job; manual cleanup performed 2026-02-20 as immediate fix. - Flow B demo flakiness from gossip timing: Mitigation — script preflight + retry loop with explicit timeout and diagnostic output.
- Flow A hash lookup not found on devnet restart: Mitigation — demo script uploads WASM fresh each run, does not assume persistent state.
- PR sequencing blocks: Mitigation —
#1076and#1077are fully independent; start both immediately while waiting for#1250.
Work Queue (Ordered)
- Rerun + merge
#1251(CI fix) - Rerun + merge
#1250(names API) #1076+#1077in parallel (Flow A plumbing)#1085(Flow B demo, as soon as #1250 merges)#1078(Flow A demo, after #1076 + #1077 merge)- Re-evaluate
#1090post-demos
Change Log
- 2026-02-20: Sprint 8 tracker created after Sprint 7 completion.