"""Replay diagnostics from two downloaded JSON files; standard library, no network/writes. Usage: python diagnostic-method.txt mayden-index-2026-10.json research-diagnostics.json Validates declared calculations, not source truth or the appropriateness of the date rule. """ import json,sys,hashlib from pathlib import Path def main(release_path,diagnostic_path): raw=Path(release_path).read_bytes(); d=json.loads(raw); a=json.loads(Path(diagnostic_path).read_text(encoding='utf-8')); dims=[x['id'] for x in d['dimensions']] assert a['releaseSha256']==hashlib.sha256(raw).hexdigest() and a['edition']==d['version'] cs={c['id']:c for c in d['companies']}; rows={x['companyId']:x for x in a['companies']}; assert cs.keys()==rows.keys() scores={} def vector(c,predicate): return {dim:max([e['level'] for e in c['evidence'] if e['eligible'] and e['dimension']==dim and predicate(e)]+[0]) or None for dim in dims} for cid,c in cs.items(): row=rows[cid]; es=[e for e in c['evidence'] if e['eligible']]; dates=sorted(e['publicationDate'] for e in es if e.get('publicationDate')) assert row['eligibleClaims']==len(es) and row['undatedClaims']==len(es)-len(dates) assert row['datedBefore2025']==sum(x<'2025' for x in dates) assert row['earliestSourceDate']==(dates[0] if dates else None) and row['latestSourceDate']==(dates[-1] if dates else None) assert (row['baselinePoints'],row['baselineScore'],row['baselineRank'])==(c['points'],round(c['points']*100/27,2),c['rank']) v=vector(c,lambda e:bool(e.get('publicationDate')) and '2025'<=e['publicationDate']<=d['date']); points=sum(x or 0 for x in v.values()); scores[cid]=points assert row['dated2025Onwards']['profile']==v and row['dated2025Onwards']['points']==points and row['dated2025Onwards']['score']==round(points*100/27,2) for cid,c in cs.items(): expected=None if scores[cid]==0 else 1+sum(scores[x['id']]>scores[cid] for x in cs.values() if x['sector']==c['sector']) assert rows[cid]['dated2025Onwards']['rank']==expected for key in ('eligibleClaims','undatedClaims','datedBefore2025'): assert a['counts'][key]==sum(x[key] for x in rows.values()) mapping=a['dependencyPilot']['mapping']; claims={e['id']:e for c in cs.values() for e in c['evidence']} for m in mapping: assert claims[m['claimId']]['claimSha256']==m['claimSha256'] for removal in a['dependencyPilot']['removalResults']: ids={m['claimId'] for m in mapping if m.get(removal['kind'])==removal['id']}; c=cs[removal['companyId']] assert sorted(ids)==removal['removedClaimIds'] v=vector(c,lambda e:e['id'] not in ids); assert v==removal['remainingProfile'] assert removal['scoreAfterRemoval']==round(sum(x or 0 for x in v.values())*100/27,2) print(json.dumps({'result':'passed','companies':len(cs),'dependencyPilotChecks':len(a['dependencyPilot']['removalResults']),'counts':a['counts']})) if __name__=='__main__':main(sys.argv[1],sys.argv[2])