pub fn plan_progress(plan_body: &str) -> Vec<TaskProgress>Expand description
Count ticked steps per task in a ## Plan body.
Read-only, and deliberately mirrors the CLI descmd step rule rather than
inventing its own: a step is a GFM checkbox at column zero, so indented
child bullets are prose, not steps. Getting this wrong would only misreport
a comment, never corrupt a description — which is why counting lives here
while mutation stays in descmd.