# Rank v2 — hard rules + search-engine usage

## Formula
```
score = 0.40*relevance + 0.15*trust + 0.20*performance + 0.15*usage + 0.10*freshness
```

## Search-engine analogy
| SE idea | Our event | Meaning |
|--|--|--|
| SERP impression | `impression` | Listing shown for a query |
| SERP click | `click` | Chose that result |
| Landing pageview | `profile_view` | Opened `/p/{slug}` |
| Conversion | `POST /api/events` success/fail | Agent task outcome |

CTR (7d) = clicks / impressions. That feeds the **usage** leg.

## Hard rules
1. Public search only `active`
2. No primary-field match → score 0
3. No agent runs → performance neutral (not fake %)
4. No usage → usage neutral
5. Verified trust floor 0.90
6. Usage cannot rescue zero relevance
7. Display never invents success% without `hasData`

## APIs
- `POST /api/usage` — `{events:[{event_type,provider_slug,query,position,...}]}`
- `GET /api/usage/summary`
- `POST /api/events` — agent run outcomes
- `GET /api/rank/spec`
- `GET /api/search?q=…&explain=1`

Browser pages auto-beacon search/impression/click/profile_view via `usage-beacon.js`.
