# Exemplar index — which shipped connector to read for each case

Companion to `corpus-stats.json` (frequency data) and the other references (interpretation).
This file answers the lookup question the references cannot: *which* of the 485 shipped
connectors to open when building a specific case. Every name below was verified against the
corpus checkout; read exemplars from a local clone of the connectors repo at
`src/configs/<name>/`.

Three rules when reading an exemplar:

0. **Never open any config for the provider you are currently building.** If the table
   below names your provider, use the alternative in the same row or find another via the
   census grep. Reading the shipped version of the connector you are building copies its
   defects, invalidates benchmark scoring (it is the answer key), and a measured run showed
   it also inflates cost — ~1,600 resident lines replayed for the rest of the session.
   Excerpt what you need (the 2–3 actions showing the mechanism), never Read a full
   exemplar file.

1. **Consensus over exemplar.** A single connector's habit is as likely a defect as a
   pattern. Shipped connectors are not audited artifacts — stale base URLs, under-typed
   enums and rule-violating expression bindings all survive in the corpus. Read exemplars
   for the *shape* of a mechanism; take frequencies and rules from `corpus-stats.json` and
   the other references.
2. **Two exemplars minimum** for anything auth-related. Where the two disagree, the
   references decide.

| Case | Read | Why this one |
|---|---|---|
| OAuth2 authorization code + refresh | `asana` | The clean common case: code exchange, refresh block, standard fields |
| OAuth with post-auth call | `jira` | Token exchange followed by `accessible-resources` cloud-id lookup wired into a multi-step refresh |
| OAuth2 client credentials | `greenhouse`, `360learning` | `grantType: client_credentials` with `refreshAuthentication` re-running the grant |
| API key / basic auth | `jira` (email + token), `1password` (bearer) | Both `type: custom` shapes; contrast where the credential is spent |
| Conditional / per-auth baseUrl | `jira`, `docusign`, `braintree` | JEXL-conditional hosts — the shape that trips naive URL matching |
| Per-step baseUrl override | `googlesheets` | `spreadsheets_list` calls the Drive API from a Sheets connector via a step-level host override |
| GraphQL | `linear`, `dagster` | Query/mutation strings with nested `variables` object inputs |
| SOAP | `sentinelxs` | `soap_request` with namespaces, envelope credentials, `useSoapContext` |
| Cursor pagination | `slack` (`asana` if building slack) | `paginated_request` with `response.dataKey`/`nextKey` and iterator mapping |
| File upload / download | `box`, `1password` | `upload_file` multipart and `download_file` with `responseMode`/`encoding` |
| Webhook / event actions | `jira`, `asana` | `actionType: event` partials, extractors, router wiring |
| Multi-auth connector (several blocks) | `slack` (`docusign` if building slack) | Bot OAuth, user OAuth and static token side by side with per-block testActions |

When a case is missing here, find candidates by census rather than memory:
`grep -rl '<mechanism>' <corpus>/src/configs --include='*.yaml'`, then prefer connectors that
appear in multiple lists above. Add what you used to this table with one line on why.
