Change only starter/report.py. Input:
scenario/analysis-pack/results.json — a verified EDA summary.
load_inputs(directory) -> dict: readresults.json.build_report(inputs) -> dictreturns{"title", "metrics", "sections"}:metricscarriesrows_total,rows_clean,total_revenue,top_category,revenue_by_regionunchanged from the inputs — a report that recomputes differently is a bug, not a feature.sectionsis an ordered list of{"heading", "body"}containingData quality,Findings,Appendixin that order.
render_markdown(report) -> str: emits# <title>, then## <heading>per section in order; key numbers appear formatted with two decimals (e.g.33347.89).write_report(report, markdown, out_dir): writesreport.json(UTF-8, indent 2, trailing newline) andreport.md.main(): runs the whole pipeline on the shipped scenario pack, writes toout/, prints a one-line confirmation, returns 0.
Done means python verify.py starter exits 0 and
python verify.py starter --expect-failure exits nonzero.