# Host Elimination Cascade

## Principle

Renter d's host selection IS the first elimination pass. Hosts it never picks don't need testing — renterd already told us they're not worth the contract.

## The Cascade

```
ALL HOSTS (~580 in hoastr.db)
  │
  ├─ 1. CONTRACTED — active contract with renterd
  │     Query: /api/bus/contracts → state=active
  │     Eliminates: hosts renterd never formed contracts with
  │
  ├─ 2. USABLE — contract usability=good
  │     Query: same, filter usability="good"
  │     Eliminates: blocked, offline, gouging, missing scans, no revision
  │
  ├─ 3. DATA-READY — contract has stored data (size > 0)
  │     Query: same, filter size > 0
  │     Eliminates: hosts that contracted but can't receive sectors
  │
  ├─ 4. VERIFIED — upload + retrieval + integrity match
  │     Verified hosts are the trusted pool for future operations
  │
  └─ 5. NEVER-SELECTED — untouched after 3 full benchmark cycles
        No action. No renewal. Let contracts expire naturally (~13 weeks).
```

## Benchmark Protocol

- 85 × 40MB uploads per cycle, no allowlist, unrestricted pool
- Track slab-to-host mappings via `contract_sectors` in renterd DB
- Run 3 cycles minimum before classifying a host as NEVER-SELECTED
- Download speeds collected per slab but NOT analyzed until methodology is validated
- Upload speed per-host is not measurable through renterd S3 (parallel shard writes)

## Contract Cleanup Policy

**NEVER delete contracts with data.** This is absolute. S3 gate blocks mutations when objects exist.

For NEVER-SELECTED hosts (tier 5):
- **Passive expiration only.** Do not archive, do not touch the contract.
- Contracts expire naturally (~13 weeks from formation, at `window_end`).
- Locked collateral returns to wallet on expiration.
- Autopilot will not renew unused contracts.
