frame-cli 0.4.0

CLI for Frame — six intention-verbs over one application: frame new scaffolds it, frame run serves it, frame dev hot-reloads it against the running node, frame test proves it (real browser included), frame check verifies it statically, frame doctor walks the prerequisites
Documentation
//! Generated Frame application entry point.

/// Boots the full application stack and serves until a shutdown signal.
///
/// # Errors
///
/// Returns the first typed failure `app_host::run` reports; Rust's default
/// `main` termination prints it (with its full cause chain, via `Debug`) and
/// exits non-zero.
fn main() -> Result<(), Box<dyn std::error::Error>> {
    // Without a tracing subscriber, the embedding seam's own `tracing::warn!`
    // and `tracing::error!` calls (its documented LOUD failure surfaces, e.g.
    // an application-event announcer dying at runtime) are silent no-ops —
    // so this binary always installs one.
    tracing_subscriber::fmt()
        .with_env_filter(
            tracing_subscriber::EnvFilter::try_from_default_env()
                .unwrap_or_else(|_| tracing_subscriber::EnvFilter::new("info")),
        )
        .init();
    // `--dev` is passed only by `frame dev`, which owns this process: it
    // opens the hot-reload management door, bound to this node's own bus.
    // A production start takes no flag and carries NO door — not a closed
    // one, none (the boundary `app_host::run_dev`'s docs spell out).
    if std::env::args().any(|argument| argument == "--dev") {
        app_host::run_dev()
    } else {
        app_host::run()
    }
}