For agents, on top of README.md, which they read first.

Notes for agents

  • No logic here. If a change needs a decision, it belongs in the engine or core; this crate only converts.
  • Do not name an error field message. Kotlin's Throwable.message collides with it and the generated code does not compile; the field is reason.
  • A new exported type is a new mirror, with a From in the direction it travels. The Kotlin names come out UPPER_SNAKE for enum values.