"""Resumable isolated regression with explicit groups and truthful partial status.""" import argparse,datetime,json,subprocess,sys,time from pathlib import Path ROOT=Path(__file__).resolve().parents[1] def main(): ap=argparse.ArgumentParser() ap.add_argument('--start',type=int,default=1) ap.add_argument('--end',type=int,default=999) ap.add_argument('--timeout',type=int,default=40) ap.add_argument('--group-size',type=int,default=2) a=ap.parse_args() fs=sorted((ROOT/'tests').glob('test_*.py')) groups=[fs[i:i+a.group_size] for i in range(0,len(fs),a.group_size)] directory=ROOT/'reports/v830-regression';directory.mkdir(parents=True,exist_ok=True) for i,g in enumerate(groups,1): if ia.end:continue start=time.monotonic();command=[sys.executable,'-m','pytest','-q',*[str(f.relative_to(ROOT)) for f in g]] try: r=subprocess.run(command,cwd=ROOT,capture_output=True,text=True,timeout=a.timeout) output=r.stdout+'\n'+r.stderr status='passed' if r.returncode==0 else 'failed' except subprocess.TimeoutExpired as exc: output=(exc.stdout.decode(errors='replace') if isinstance(exc.stdout,bytes) else (exc.stdout or ''))+'\nTIMEOUT' status='timeout' log=directory/f'batch-{i:02}.log';log.write_text(output,encoding='utf-8') record={'batch':i,'modules':[f.name for f in g],'status':status,'elapsed':round(time.monotonic()-start,2),'summary':output[-500:]} (directory/f'batch-{i:02}.json').write_text(json.dumps(record,ensure_ascii=False,indent=2),encoding='utf-8') print(i,len(groups),status,record['elapsed'],','.join(record['modules']),flush=True) if status!='passed':return 1 return 0 if __name__=='__main__':raise SystemExit(main())