#!/usr/bin/env python3
"""Standalone Restoration reference recomputation (Python stdlib only).

Forest Nucleation Theorem (critical_nucleus, barrier_half_identity):
r* = 2*a*sigma/(3*delta_mu), n* = r*^3, barrier = 1/2*delta_mu*n*; GO when cluster_size >= n*.
"""
import argparse, json
from pathlib import Path

def design(sigma, delta_mu, a=1.0, cluster_size=None):
    if sigma <= 0 or delta_mu <= 0 or a <= 0:
        raise ValueError("sigma, delta_mu and shape_factor must be > 0")
    r = 2 * a * sigma / (3 * delta_mu)
    n = r ** 3
    out = {"barrier_height": f"{0.5 * delta_mu * n:.9f}", "critical_nucleus_n_star": f"{n:.9f}", "critical_radius_r_star": f"{r:.9f}", "edge_to_suitability_ratio": f"{sigma / delta_mu:.9f}"}
    if cluster_size is not None:
        out.update({"cluster_size": f"{cluster_size:.9f}", "go_no_go": "GO" if cluster_size >= n else "NO_GO"})
    return out

def main():
    p=argparse.ArgumentParser(); p.add_argument("--inputs",type=Path,required=True); p.add_argument("--output",type=Path,required=True); a=p.parse_args()
    i=json.loads(a.inputs.read_text()); out={"module_id":"restoration","publication_doi":i["publication_binding"]["doi"],"results":[{"case_id":c["case_id"],**design(float(c["sigma"]),float(c["delta_mu"]),float(c.get("shape_factor",1.0)),None if c.get("cluster_size") is None else float(c["cluster_size"]))} for c in i["cases"]],"schema_version":"VRS-RECOMPUTE-1","scope":"deterministic runtime-kernel reproduction; not empirical calibration or proof of Python-Lean code equivalence"}
    a.output.write_text(json.dumps(out,indent=2,sort_keys=True)+"\n"); print(json.dumps({"status":"PASS","output":str(a.output)},sort_keys=True)); return 0
if __name__ == "__main__": raise SystemExit(main())
