--- agents/rocko/work/vikunja-502/run-mutants.baseline.py 2026-10-21 23:53:18.260554870 -0500 +++ agents/rocko/work/vikunja-502/run-mutants.py 2026-10-22 00:00:01.232405637 -0500 @@ -3,7 +3,7 @@ from pathlib import Path import argparse, hashlib, json, os, re, signal, subprocess, sys, time packet = Path(__file__).resolve().parent -root = Path('/mnt/storage/scratch/rocko-r191-r3') +root = Path('/mnt/storage/scratch/rocko-v502') all_sites = json.loads((packet/'all-mutants.json').read_text()) parser = argparse.ArgumentParser() parser.add_argument('ids', nargs='*') @@ -104,11 +104,15 @@ 'failing':re.findall(r'^\s*not ok \d+ - (.*)$',text,re.M), 'counts':{k:int(v) for k,v in re.findall(r'^# (tests|pass|fail|skipped|cancelled) (\d+)\s*$',text,re.M)}} -def timeout_cause(site): +def timeout_cause(site, control=None): if site['id']=='SR08': return ('runtimes.mjs:333 loops on now() <= deadline; stop-run.test.mjs:106-108 ' 'gives the second host a fixed fake clock with a real sleep. Removing the join ' 'branch enters the delivery loop without advancing that clock. Original log: TAP header only.') + if not control or control.get('passed') is not True: + return ('Mutated '+site['file']+' timed out after 90s; no passing same-file control ' + 'exists in this invocation. Detection is not established. ' + 'Detailed cause must be recorded before review.') return ('Mutated '+site['file']+' timed out after 90s while the same whole test file ' 'passed unmutated in this invocation. Detailed cause must be recorded before review.') @@ -138,7 +142,7 @@ if not old or old['status']!='timeout' or old['test']!=args.control_file or old['failing']: raise SystemExit('historical timeout does not match approved control') if Path(old['log']).read_text().strip()!='TAP version 13': raise SystemExit('historical timeout log changed') - adjudication = {**old,'status':'killed-by-timeout','cause':timeout_cause(site),'control':controls[args.control_file], + adjudication = {**old,'status':'killed-by-timeout','cause':timeout_cause(site, controls[args.control_file]),'control':controls[args.control_file], 'original_log_sha256':hashlib.sha256(Path(old['log']).read_bytes()).hexdigest()} (packet/'SR08-timeout-adjudication.json').write_text(json.dumps(adjudication,indent=2)+'\n') print('TIMEOUT_KILL SR08',adjudication['cause'],flush=True) @@ -162,7 +166,7 @@ elif observed['failing'] and expected: status = 'assertion-killed' else: status = 'invalid-failure' row = {**{k:s[k] for k in ['id','file','test','pattern','check']},**observed,'status':status} - if observed['timeout']: row.update(cause=timeout_cause(s),control=control) + if observed['timeout']: row.update(cause=timeout_cause(s, control),control=control) results.append(row) result_file.write_text(json.dumps(results,indent=2)+'\n') print(status,flush=True)