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
# Critics and Panels: `Persona`, `Panel`

```rust
pub struct Persona { /* name, framing?, focus? */ }

impl Persona {
    pub fn new(name: impl Into<String>) -> Self;
    pub fn with_framing(self, ...) -> Self;
    pub fn with_focus(self, ...) -> Self;
    pub fn name(&self) -> &str;
    pub fn framing(&self) -> Option<&str>;
    pub fn focus(&self) -> Option<&str>;
    pub fn archetypes() -> &'static [Persona];   // the 5 built-ins
    pub fn default_panel() -> Vec<Persona>;       // single Devil's Advocate
}

pub enum Panel { Default, Duo, Panel }

impl Panel {
    pub fn personas(&self) -> Vec<Persona>;
    pub fn from_name(name: &str) -> Option<Self>;  // case-insensitive
    pub fn name(&self) -> &'static str;
}

pub fn resolve_panel(name: &str, credentials: &Credentials) -> Result<Vec<Persona>, ProserpinaError>;
```

A `Persona` is the lens a critic applies — **data, not an enum** — so critics
are configurable without code changes. The five archetypes (Devil's Advocate,
Methodologist, Red Team, Domain Expert, Editor) back the built-in `Panel`
presets (`default` / `duo` / `panel`).

`resolve_panel` resolves a name to personas: a `[panels.NAME]` config section
overrides a same-named built-in; otherwise the built-in; otherwise
[`UnknownPanel`](./errors.md). See [Panels](../guide/panels.md).