pub struct ReportFormatter { /* private fields */ }Expand description
Formats consensus results into ASCII banners and markdown reports.
Generates fixed-width ASCII banners (exactly 52 characters wide per line) and full markdown reports from agent outputs and consensus results. The reporting module is pure string formatting – no async, no I/O.
Implementations§
Source§impl ReportFormatter
impl ReportFormatter
Sourcepub fn new() -> Self
pub fn new() -> Self
Creates a new formatter with default configuration.
Infallible because ReportConfig::default always produces a valid
configuration with an 8-byte-or-larger banner width and ASCII agent titles.
Sourcepub fn with_config(config: ReportConfig) -> Result<Self, ReportError>
pub fn with_config(config: ReportConfig) -> Result<Self, ReportError>
Creates a new formatter with a validated custom configuration.
Re-runs the same ASCII and minimum-width checks as
ReportConfig::new_checked, so callers who mutate a ReportConfig
after construction (e.g., via default() + field assignment) cannot
bypass validation.
§Errors
Returns ReportError::BannerTooSmall if config.banner_width < 8.
Returns ReportError::NonAsciiTitle if any agent title contains
non-ASCII characters.
§Example
let cfg = ReportConfig::default();
let fmt = ReportFormatter::with_config(cfg).expect("default config is valid");Generates the fixed-width ASCII verdict banner with column-aligned agent labels.
Every line is exactly banner_width (52) characters. Agent labels are
left-justified to the same width (max_label_len), so verdict suffixes
start at the same column for all agents. When content overflows the inner
width, the label is ellipsized while the verdict suffix is preserved intact.
Structure:
+==================================================+
| MAGI SYSTEM -- VERDICT |
+==================================================+
| Melchior (Scientist): APPROVE (90%) |
| Balthasar (Pragmatist): APPROVE (85%) |
| Caspar (Critic): APPROVE (78%) |
+==================================================+
| CONSENSUS: GO WITH CAVEATS (2-1) |
+==================================================+Generates the pre-analysis initialization banner.
Shows mode, model, and timeout in a fixed-width ASCII box.
Sourcepub fn format_report(
&self,
agents: &[AgentOutput],
consensus: &ConsensusResult,
) -> String
pub fn format_report( &self, agents: &[AgentOutput], consensus: &ConsensusResult, ) -> String
Generates the full markdown report (banner + all sections).
Concatenates sections in order: banner, key findings, dissenting opinion, conditions for approval, recommended actions. Optional sections are omitted entirely when their data is absent.