ralph_workflow/cli/handlers/
dry_run.rs1use crate::checkpoint::{checkpoint_exists_with_workspace, load_checkpoint_with_workspace};
6use crate::config::Config;
7use crate::files::validate_prompt_md_with_workspace;
8use crate::language_detector::detect_stack_summary;
9use crate::logger::Logger;
10use crate::workspace::Workspace;
11use std::path::Path;
12
13pub fn handle_dry_run(
35 logger: &Logger,
36 _colors: crate::logger::Colors,
37 config: &Config,
38 developer_agent: &str,
39 reviewer_agent: &str,
40 repo_root: &Path,
41 workspace: &dyn Workspace,
42) -> anyhow::Result<()> {
43 logger.header("DRY RUN: Validation", crate::logger::Colors::cyan);
44
45 let validation =
48 validate_prompt_md_with_workspace(workspace, config.behavior.strict_validation, false);
49
50 for err in &validation.errors {
52 logger.error(err);
53 }
54
55 for warn in &validation.warnings {
57 logger.warn(&format!("{warn} (recommended)"));
58 }
59
60 if !validation.is_valid() {
62 anyhow::bail!("Dry run failed: PROMPT.md validation errors");
63 }
64
65 if validation.has_goal {
67 logger.success("PROMPT.md has Goal section");
68 }
69 if validation.has_acceptance {
70 logger.success("PROMPT.md has acceptance checks section");
71 }
72 if validation.is_perfect() {
73 logger.success("PROMPT.md validation passed with no warnings");
74 }
75
76 logger.success(&format!("Developer agent: {developer_agent}"));
77 logger.success(&format!("Reviewer agent: {reviewer_agent}"));
78 logger.success(&format!("Developer iterations: {}", config.developer_iters));
79 logger.success(&format!("Reviewer passes: {}", config.reviewer_reviews));
80
81 if checkpoint_exists_with_workspace(workspace) {
83 logger.info("Checkpoint found - can resume with --resume");
84 if let Ok(Some(cp)) = load_checkpoint_with_workspace(workspace) {
85 logger.info(&format!(" Phase: {}", cp.phase));
86 logger.info(&format!(" Progress: {}", cp.description()));
87 logger.info(&format!(" Saved at: {}", cp.timestamp));
88 }
89 }
90
91 logger.success(&format!(
93 "Detected stack: {}",
94 detect_stack_summary(repo_root)
95 ));
96
97 logger.success("Dry run validation complete");
98 Ok(())
99}