truth-mirror 0.2.0

Truthfulness gate and adversarial reviewer harness for AI coding agents.
Documentation
use std::process::ExitCode;

use anyhow::Result;
use tracing_subscriber::EnvFilter;

pub mod claim;
pub mod cli;
pub mod config;
pub mod context;
pub mod enforcement;
pub mod gate;
pub mod hooks;
pub mod ledger;
pub mod reinject;
pub mod reviewer;
pub mod surface;

pub fn init_tracing() {
    let filter = EnvFilter::try_from_default_env().unwrap_or_else(|_| EnvFilter::new("warn"));
    let _ = tracing_subscriber::fmt().with_env_filter(filter).try_init();
}

pub fn run(cli: cli::Cli) -> Result<ExitCode> {
    let config = config::TruthMirrorConfig::load_for_cli(cli.config.as_deref(), &cli.state_dir)?;

    match cli.command {
        cli::Commands::InstallHooks(args) => {
            hooks::run(args, &cli.state_dir, cli.config.as_deref(), &config)
        }
        cli::Commands::Review(args) => reviewer::run_review_command(args, &cli.state_dir, &config),
        cli::Commands::Gate(args) => gate::run(args, &cli.state_dir, &config),
        cli::Commands::Reinject(args) => reinject::run(args, &cli.state_dir),
        cli::Commands::Ledger(args) => ledger::run(args, &cli.state_dir),
        cli::Commands::Watch(args) => reviewer::run_watch_command(args, &cli.state_dir, &config),
        cli::Commands::HookDispatch(args) => hooks::dispatch(args, &cli.state_dir, &config),
    }
}