The language-agnostic agent ⇄ harness protocol.
Agents are external — a container or HTTP endpoint, in any language — not
Rust code. Each decision step the harness sends a [MarketObservation] (JSON)
and the agent replies with a [Decision] (JSON). Keeping this surface tiny and
stable is what lets any vendor compete (and is the whole adoption story).
All observations are point-in-time: close_history, fundamentals and
news only ever contain information available at or before date.