#!/usr/bin/env python3 """Read-only checkpoint for the grounded-decision trial. No keys or player whispers.""" import collections,json,time,urllib.request from pathlib import Path base='http://127.0.0.1:8787' def get(path): with urllib.request.urlopen(base+path,timeout=20) as r:return json.load(r) s=get('/api/state');insights=get('/api/realm-insights');now=time.time() bots=[b for b in s['bots'] if b.get('status')=='online' and b.get('autonomy',{}).get('managed')] checks=[c for b in bots for c in b.get('autonomy',{}).get('intentChecks',[])] report={'checkedAt':now,'online':len(bots),'teams':dict(collections.Counter(b.get('world',{}).get('team') for b in bots)), 'freshObservations':sum(0<=now-b.get('world',{}).get('at',0)<90 for b in bots), 'groupedBots':sum(bool(b.get('world',{}).get('groupId')) for b in bots), 'questKnowledge':sum(bool(b.get('world',{}).get('questBrief')) for b in bots), 'evaluation':insights.get('evaluation'),'recentIntentResults':dict(collections.Counter(c['status'] for c in checks)), 'currentActivity':dict(collections.Counter(b['label'] for b in insights.get('activity',[]))), 'zaku':[{k:b.get(k) for k in ('name','level','zone','lastDecision')} for b in bots if b['name']=='Zaku'], 'limitations':['Rates use fresh sampled bot-hours; collection gaps excluded.','Native death deltas use retained death records; retention can undercount at rollover.','An observed outcome following an intention does not establish causation.','One day is an initial comparison, not proof of long-term reliability.']} print(json.dumps(report,indent=2))