"""Policy counterfactuals on measured worker evidence arrival times. All crops enter together; these are not camera/UI end-to-end timings. """ from pathlib import Path import json from statistics import median from analyze import POLICIES,decide,infer_groups,propagate,metrics DIR=Path(__file__).resolve().parent;OUT=DIR/'evidence' def main(): frozen=json.loads((OUT/'observations.json').read_text()) data=frozen['resolutions']['live'];sig=frozen['signatures'] edges=json.loads((OUT/'analysis.json').read_text())['resolutions']['live']['guarded_edges'] events=json.loads((OUT/'anytime-events.json').read_text()) families=json.loads((DIR/'group-truth.json').read_text())['families'] report={'clock':'Measured local/OCR completion; frozen appearance edges are precomputed, grouping and transport time excluded. Diagnostic counterfactual, not live deployment.','policies':{}} horizon=events['complete_ms']+1000 for policy in POLICIES: for grouped in (False,True): rows={o['id']:{**o,'rank':[],'local':{},'text':{},'read':''} for o in data['observations']} history={i:[(0.,None)] for i in rows};snapshots={};current={i:None for i in rows} for event in sorted(events['events'],key=lambda e:e['ms']): for delay in (250,500,1000): if delay