14 lines
1.2 KiB
Python
14 lines
1.2 KiB
Python
#!/usr/bin/env python3
|
|
"""Summarize native smoke evidence without confusing it with gameplay acceptance."""
|
|
from pathlib import Path
|
|
import argparse,json,re,sys
|
|
p=argparse.ArgumentParser(description=__doc__)
|
|
p.add_argument('log',type=Path)
|
|
p.add_argument('--require-completions',type=int,default=1)
|
|
a=p.parse_args();s=a.log.read_text(errors='replace')
|
|
completed=s.count('ERR SMOKE COMPLETE:')
|
|
failures=[l.strip() for l in s.splitlines() if 'ERR SMOKE FAIL:' in l or 'Virtual Machine Exception' in l or re.search(r'\bSCRIPT\s+\(E\)',l) or "won't take damage and wont replicate" in l]
|
|
report={'log':str(a.log),'smoke_completions':completed,'assertions_passed':len(re.findall('ERR SMOKE PASS:',s)),'script_or_runtime_failures':failures,'engine_errors':[l.strip() for l in s.splitlines() if re.search(r'\b(?:SCRIPT|WORLD|DEFAULT|RESOURCES|ENTITY|NETWORK|ENGINE)\s+\(E\)',l)],'missing_end_screen':[l.strip() for l in s.splitlines() if 'Could not find' in l and 'endscreen' in l],'scope':'scripted local Workbench integration only; no multiplayer, piloting or FPS claim'}
|
|
print(json.dumps(report,indent=2))
|
|
sys.exit(0 if completed>=a.require_completions and not failures and not report['engine_errors'] and not report['missing_end_screen'] else 1)
|