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:
- Service contract crates per service (start with canopy-eligibility)
- Typed clients (replace existing JSON-string-based test calls)
- Fault-injection harness
- Multi-replica test fixture
Refs
External review (2026-05-09).