pub fn build_dry_run_envelope(ref_: &Ref, plan: &FetchPlan) -> ValueExpand description
Build the dry-run envelope as a serde_json::Value, without writing
anywhere. Used by both the CLI (which prints it to stdout) and the
MCP tool wrapper (which routes the bytes via JSON-RPC). Wire shape:
{
"ok": true,
"dry_run": true,
"ref": { "doi": "10.1234/foo" } | { "arxiv": "2401.12345" },
"plan": { ... see FetchPlan ... },
"rate_limit_budget": { "global_per_sec": 5.0, "per_source_min_gap_ms": 200 }
}