diff --git a/crates/ledger-cli/tests/common/mod.rs b/crates/ledger-cli/tests/common/mod.rs index 3fb84a1..027eb9d 100644 --- a/crates/ledger-cli/tests/common/mod.rs +++ b/crates/ledger-cli/tests/common/mod.rs @@ -209,7 +209,13 @@ impl Server { BufReader::new(child.stdout.take().unwrap()) .read_line(&mut line) .unwrap(); - assert_eq!(line, "ready\n", "the server didn't say ready"); + if line != "ready\n" { + // Say why (the portable jobs run this on macOS and Windows, + // where the only evidence is what the server wrote). + let said = + std::fs::read_to_string(home.dir.path().join("server.log")).unwrap_or_default(); + panic!("the server didn't say ready (got {line:?}); its log:\n{said}"); + } Self { child } } diff --git a/crates/ledger-mcp/src/next_steps.rs b/crates/ledger-mcp/src/next_steps.rs index e77e146..59aaa64 100644 --- a/crates/ledger-mcp/src/next_steps.rs +++ b/crates/ledger-mcp/src/next_steps.rs @@ -309,6 +309,15 @@ pub(crate) fn tool_steps( .get("period_id") .or_else(|| args.and_then(|a| a.get("period_id"))) .and_then(Value::as_u64); + // The chain first (cheap, and what every close has always + // offered: the month_end_close eval follows it), then the + // audit the attestation rests on (P8). + steps.push(Step::tool( + "books.verify", + None, + "Verify the journal's chain and the projection after the close.", + false, + )); steps.push(Step::tool( "books.audit", Some(json!({ "scope": "month" })),