feat(canopy-test-lib): port CRAIG service-contract crates + typed clients + fault-injection harness

External review (2026-05-09) flagged that canopy-test-lib is narrower than CRAIG's testing infrastructure. CRAIG has:

  • Service contract crates (craig-contracts-*) with shared request/response types — services + tests import the same types, contract drift surfaces at compile time
  • Typed clients per service (auto-generated or hand-written)
  • SDK shape for external consumers
  • Evil/fault test tools (craig-evil): inject latency, errors, restarts mid-flight
  • Multi-replica test harness: spin up N replicas + assert invariant under chaos
  • Quality xtask commands

Scope

Likely a multi-MR effort. Suggest sequence:

  1. Service contract crates per service (start with canopy-eligibility)
  2. Typed clients (replace existing JSON-string-based test calls)
  3. Fault-injection harness
  4. Multi-replica test fixture

Refs

External review (2026-05-09).