# Reporter SDK

Truthound 2.0 reporters are authored against `ValidationRunResult`.

The recommended authoring path is:

1. Implement `render(run_result, *, context)` through `ValidationReporter`.
2. Build shared structure from `RunPresentation`.
3. Use `legacy_view = self.present(run_result).to_legacy_view()` only when you need migration-era row helpers.

Scaffolding generated by `truthound scaffold reporter` now targets the v2 contract directly and no longer imports persistence DTOs from `truthound.stores.results`.

For custom plugins:

- Canonical input: `truthound.core.ValidationRunResult`
- Shared presentation model: `truthound.reporters.presentation.RunPresentation`
- Migration helpers: `truthound.reporters.sdk.compat`

Related references:

- [Architecture](../concepts/architecture.md)
- [Plugin Platform](../concepts/plugins.md)
- [Migration to 2.0](migration-2.0.md)
