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): #1090 still open (fallback atomicity — conditional)
    • Flow B (#1083/#1084/#1085): backend + gateway done, demo script not started
    • Flow A (#1076/#1077/#1078): not started

Sprint Goals

  1. Unblock CI so anything can land (#1251)
  2. Ship Flow B end-to-end demo script (#1085)
  3. Implement Flow A WASM compute path in gateway + SDK (#1076, #1077)
  4. 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/ on k3s-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)
  • Test job 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_hash field
  • Wire to ComputeActor with TaskCode::WasmRef
  • Validate hash format (length/charset) at API boundary
  • Return stable ErrCode on 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) → hash
    • get(hash) → metadata
    • list(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:
    1. Upload WASM → obtain hash
    2. Submit compute referencing wasm_hash
    3. 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)

  1. Rerun #1250 Test job (runners now clean)
  2. Merge #1251 (CI disk fix) — small, CI-only
  3. Merge #1250 (names API) — unblocks M3

Lane 1 — Flow A plumbing (can start immediately, parallel)

  1. Build #1076 (gateway wasm_hash) and #1077 (SDK WASM client) in parallel
  2. Then #1078 (Flow A demo script)

Lane 2 — Flow B demo (starts after #1250 merges)

  1. 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 — #1251 cleanup 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 — #1076 and #1077 are fully independent; start both immediately while waiting for #1250.

Work Queue (Ordered)

  1. Rerun + merge #1251 (CI fix)
  2. Rerun + merge #1250 (names API)
  3. #1076 + #1077 in parallel (Flow A plumbing)
  4. #1085 (Flow B demo, as soon as #1250 merges)
  5. #1078 (Flow A demo, after #1076 + #1077 merge)
  6. Re-evaluate #1090 post-demos

Change Log

  • 2026-02-20: Sprint 8 tracker created after Sprint 7 completion.