proserpina 0.3.0

Multi-agent critique and cross-examination pipeline for documents requiring intellectual rigor — provider-agnostic interaction-graph engine with pluggable LLM backends
Documentation
# The Interaction Graph

A Proserpina run is modeled as a **directed graph of agent-to-agent message
passing**: nodes are agents (critics, a synthesizer) and edges are message
routes. Topologies — `parallel`, `rounds` — are templates that produce a graph.

## `parallel`

Fan-out: every critic receives the subject prompt independently and produces
a critique. The simplest cross-examination — a degenerate single-round graph.

```
        ┌──► Critic A ──► Critique
subject ─┼──► Critic B ──► Critique
        └──► Critic C ──► Critique
```

## `rounds`

Adversarial cross-examination over successive rounds:

- **Round 1:** the subject is broadcast to every critic as a `Prompt`; each
  produces a `Critique`.
- **Rounds 2..=max_rounds:** each critic receives the prior round's messages
  from the *other* critics. A `Critique` elicits a `Rebuttal`, addressed to
  that critic. A critic never rebuts itself.
- **Convergence:** a round that produces zero rebuttals stops the run early,
  never exceeding `max_rounds`.

```
subject ──► [Critique, Critique, Critique]   (round 1)
                 │            │
                 ▼            ▼
            [Rebuttal, Rebuttal, Rebuttal]   (round 2, each sees the others)
                 │            │
                 ▼            ▼
            ...converges or hits max_rounds
```

The transcript (ordered messages) is then handed to the
[summarizer](./findings.md).

## Generalizing

`parallel` is a degenerate single-round graph; `rounds` adds inter-critic
edges. Future topologies (`moderated` — a Socratic moderator drives the
dialectic) are new graph constructors, not special cases. See the
[design overview](../design/overview.md).