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 Summarizer: `summarize`, `parse_findings`

```rust
pub fn summarize(
    subject: &Subject,
    transcript: &Transcript,
    config: &HttpConfig,
    policy: &RetryPolicy,
) -> Result<Vec<Finding>, ProserpinaError>;

pub fn parse_findings(body: &str) -> Vec<Finding>;
pub fn render_summary_prompt(subject: &Subject, transcript: &Transcript) -> Vec<SummaryMessage>;
```

After a run, `summarize` makes a second LLM call over the whole transcript +
subject, asking the model to group critiques into distinct issues and emit each
as a fenced ` ```proserpina-finding ` block. `parse_findings` extracts those blocks
and parses `key: value` lines into [`Finding`](./report.md)s.

**Graceful degradation:** `parse_findings` never fails on a malformed response
— an unrecognized `severity` defaults to `Major`, a block with no `summary` is
skipped, a response with no blocks yields an empty `Vec`. Only a failed
summarizer *call* (network/HTTP) surfaces [`SummaryFailed`](./errors.md)
(exit 12).

See [The Summarizer and Findings](../concepts/findings.md) for the contract.