forjar 1.23.0

Rust-native Infrastructure as Code — bare-metal first, BLAKE3 state, provenance tracing
Documentation
//! CLI dispatch, subcommands, and output formatting.

mod agent_registry;
mod agent_sbom;
mod apply;
mod apply_drift;
mod apply_dry_run;
mod apply_from_plan;
mod apply_from_plan_checks;
mod apply_gates;
mod apply_gates_budget;
mod apply_helpers;
mod apply_output;
mod apply_preflight;
mod apply_preview;
mod apply_quality_gate;
mod apply_scope;
mod apply_selection;
mod apply_snapshot;
mod apply_summary;
mod apply_variants;
mod bootstrap_cmd;
mod build_distribution;
mod build_image;
mod bundle;
mod cbom;
mod check;
mod check_test;
mod check_test_runners;
mod checkpoint;
pub(crate) mod colors;
pub mod commands;
mod complexity_analysis;
mod config_merge;
mod contracts;
mod cost_estimate;
mod coverage_promote;
mod cross_machine_deps;
mod data_freshness;
mod data_validate;
mod dataset_lineage;
mod destroy;
mod diff_cmd;
pub mod dispatch;
mod dispatch_analysis;
mod dispatch_apply;
mod dispatch_apply_b;
mod dispatch_apply_notify_opts;
mod dispatch_graph;
mod dispatch_graph_b;
mod dispatch_graph_c;
mod dispatch_lock;
mod dispatch_misc;
mod dispatch_misc_b;
mod dispatch_misc_c;
mod dispatch_notify;
mod dispatch_notify_b;
mod dispatch_notify_custom;
mod dispatch_platform;
mod dispatch_status;
mod dispatch_status_b;
mod dispatch_status_c;
mod dispatch_status_d;
mod dispatch_status_ext;
mod dispatch_status_ext_b;
mod dispatch_store;
mod dispatch_tools;
mod dispatch_validate;
mod dispatch_validate_b;
mod dispatch_validate_c;
mod dist;
pub mod dist_checksums;
pub mod dist_generators;
pub mod dist_generators_b;
mod dist_homebrew;
pub mod dist_installer_shell;
mod dist_output;
mod dist_schema;
pub mod dist_verify;
mod dist_verify_exec;
mod dist_verify_tier2;
mod dist_verify_tier2_stage;
mod doctor;
mod drift;
mod drift_predict;
mod drift_report;
mod environments;
mod extract;
mod fault_inject;
mod fleet_ops;
mod fleet_reporting;
mod generation;
mod graph_advanced;
mod graph_advanced_b;
mod graph_analysis;
mod graph_analytics;
mod graph_analytics_ext;
mod graph_compliance;
mod verify;
// GH-212: `graph_core::parse_graph_format` is the single format parser shared
// with the MCP `forjar_graph` tool, so the two surfaces cannot drift.
pub(crate) mod graph_core;
mod graph_cross;
mod graph_export;
mod graph_export_b;
mod graph_extended;
mod graph_governance;
mod graph_health;
mod graph_impact;
mod graph_intelligence;
mod graph_intelligence_b;
mod graph_intelligence_ext;
mod graph_intelligence_ext2;
mod graph_intelligence_ext2_b;
mod graph_intelligence_ext_b;
mod graph_lifecycle;
mod graph_paths;
mod graph_quality;
mod graph_quality_b;
mod graph_resilience;
mod graph_resilience_ext;
mod graph_scoring;
mod graph_scoring_b;
mod graph_svg;
mod graph_topology;
mod graph_topology_b;
mod graph_topology_ext;
mod graph_transport;
mod graph_visualization;
mod graph_weight;
pub mod helpers;
pub mod helpers_state;
pub mod helpers_time;
mod history;
mod history_resource;
pub mod image_android;
pub mod image_cmd;
mod impact_analysis;
mod import_cmd;
mod inert_flags;
mod infra;
mod infra_bench;
mod infra_bench_baseline;
mod infra_query;
mod infra_query_live;
mod init;
mod iso_export;
mod lineage;
pub mod lint;
pub mod lint_fix;
mod lock_audit;
mod lock_chain;
mod lock_core;
mod lock_lifecycle;
mod lock_merge;
mod lock_ops;
mod lock_output;
mod lock_repair;
mod lock_security;
mod logs;
mod logs_follow;
mod logs_gc;
pub mod lsp;
// GH-215: maps a diagnostic message back to a range in the document.
mod lsp_locate;
mod lsp_publish;
mod lsp_validate;
mod make;
mod makefile_cmd;
mod makefile_import;
mod makefile_parse;
mod model_card;
mod model_eval;
mod multi_config;
mod observe;
mod observe_anomaly;
mod oci_pack;
pub(crate) mod output;
mod parallel_multi_stack;
mod plan;
mod plan_compute;
mod plan_file;
mod plan_json;
mod plan_selector;
pub(crate) mod plugin;
mod plugin_run;
mod policy_coverage;
mod policy_install;
mod pq_signing;
mod preservation_check;
mod print_helpers;
mod privilege_analysis;
pub mod progress;
mod promote;
mod prove;
mod provenance;
mod pull_agent;
mod query_format;
mod recipe_registry;
mod recipe_signing;
mod remediate;
mod remote_state;
mod repro_proof;
mod reseal;
mod rules;
mod rules_serve;
mod run_task;
mod runtime_invariants;
mod saga_coordinator;
mod sbom;
mod score;
mod secrets;
mod security_scan;
mod service_catalog;
mod show;
mod snapshot;
mod sovereignty;
mod stack_dep_graph;
mod stack_diff;
mod state_encrypt;
mod state_identity;
mod state_import_brownfield;
pub(crate) mod state_visibility;
mod status_alerts;
mod status_analytics;
mod status_compliance;
mod status_connectivity;
mod status_convergence;
mod status_core;
mod status_cost;
mod status_counts;
mod status_diagnostics;
mod status_diagnostics_b;
mod status_drift;
mod status_drift_intel;
mod status_drift_intel2;
mod status_failures;
mod status_fleet;
mod status_fleet_detail;
mod status_fleet_insight;
mod status_fleet_insight_b;
mod status_health;
mod status_insights;
mod status_intelligence;
mod status_intelligence_b;
mod status_intelligence_ext;
mod status_intelligence_ext2;
mod status_intelligence_ext2_b;
mod status_intelligence_ext_b;
mod status_maturity;
mod status_maturity_b;
mod status_maturity_c;
mod status_observability;
mod status_operational;
mod status_operational_b;
mod status_operational_ext;
mod status_operational_ext2;
mod status_operational_ext2_b;
mod status_predictive;
mod status_quality;
mod status_quality_b;
mod status_queries;
mod status_recovery;
mod status_recovery_b;
mod status_resilience;
mod status_resilience_b;
mod status_resource_detail;
mod status_resource_intel;
mod status_resource_intel_b;
mod status_resources;
mod status_security;
mod status_security_b;
mod status_transport;
mod status_trends;
mod store_archive;
mod store_cache;
mod store_convert;
mod store_import;
mod store_ops;
mod store_pin;
mod store_verify;
pub mod structured_log;
mod template_cmd;
mod trigger;
mod trigger_exec;
pub mod tui;
mod undo;
mod undo_helpers;
mod undo_progress;
mod undo_replay;
mod validate_advanced;
mod validate_analytics;
mod validate_audit;
mod validate_compliance;
mod validate_compliance_ext;
mod validate_config_quality;
mod validate_core;
mod validate_deep;
mod validate_governance;
mod validate_governance_ext;
mod validate_hygiene;
mod validate_maturity;
mod validate_ordering;
mod validate_ordering_b;
mod validate_ordering_ext;
mod validate_ownership;
mod validate_ownership_b;
mod validate_paths;
mod validate_paths_b;
mod validate_policy;
mod validate_quality;
mod validate_resilience;
mod validate_resources;
mod validate_safety;
mod validate_scoring;
mod validate_security;
mod validate_security_ext;
mod validate_store_purity;
mod validate_structural;
mod validate_structural_constraints;
mod validate_topology;
mod validate_transport;
mod webhook_post;
pub(crate) mod workspace;
pub use commands::Commands;
pub use dispatch::{dispatch, dispatch_classified};

// Test module declarations (split across include files for file size).
include!("mod_test_decl.rs");
include!("mod_test_decl_b.rs");
include!("mod_test_decl_c.rs");

/// FJ-2729: the phony filter, for the MCP layer.
///
/// `mcp::handlers` must apply exactly the same goal-only phony rule as
/// `cli::plan`, or the two disagree about whether a converged project has
/// pending work. Re-exported through one named function so there is a single
/// definition, not a second implementation.
///
/// GH-214 (#208): `goals` carries the ids the caller explicitly asked for
/// (e.g. `forjar_plan`'s `resource` selector). A phony resource named by the
/// caller is REQUESTED, so it must survive the strip — otherwise selecting it
/// by name would make it vanish and then be reported as "not found".
pub(crate) fn strip_unrequested_phony_for_mcp(
    config: &mut crate::core::types::ForjarConfig,
    goals: &[String],
) {
    apply_selection::strip_unrequested_phony(config, goals);
}

/// forjar#342: the plan blind-spot count, for the MCP layer.
///
/// `mod print_helpers` is private to `cli`, and `unconsulted_observations` must
/// NOT be relocated — `contracts/binding.yaml` pins its module path. So the
/// MCP/HTTP/verb surfaces reach it through a named shim, following the
/// `strip_unrequested_phony_for_mcp` precedent above: one definition, not a
/// second implementation that could drift from the CLI's answer.
pub(crate) fn unconsulted_observations_for_mcp(
    locks: &std::collections::HashMap<String, crate::core::types::StateLock>,
) -> usize {
    print_helpers::unconsulted_observations(locks)
}

/// forjar#342: the prose disclosure, for the MCP layer.
///
/// `None` at zero, exactly as on the CLI — the contract's biconditional holds
/// on every shipped plan surface or on none of them.
pub(crate) fn scope_disclosure_for_mcp(unconsulted: usize) -> Option<String> {
    print_helpers::scope_disclosure(unconsulted)
}