For agents, on top of README.md, which they read first.
- No I/O, no runtime, no Postgres:
forbid(unsafe_code)and pure functions only. Time and randomness are passed in. - The request bytes are the cache key's input: test exact bytes for any serialization change.
- Choice options never pass through a map type that sorts.
ApiErrorKind::OutOfCreditis inferred (a 402, or a 403 whose message speaks of credit, balance, insufficient funds or quota exceeded); the vendor documents no out-of-credit response. If a real one is ever seen with another shape, fixApiError::from_responseinsrc/error.rsand correct jevsnesresearch/jev-api-digest.md§10 in the same commit.