//! 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()
}
}