# Reconcile final per-file evidence only; executes no tests. from pathlib import Path import json,re BASE=Path(__file__).resolve().parent REPO=BASE.parents[3] OUT=BASE/'gate' CLI_READERS={'host.test','stack-copy.test','stack-instances.test','stack-release-external.test','stack-release.test','stack-upgrade.test','verbs.test'} all_receipts=[] for file in [OUT/'runs.jsonl',OUT/'resume-mos1605-runs.jsonl']: all_receipts += [json.loads(line) for line in file.read_text().splitlines()] latest={r['label']:r for r in all_receipts} def read(label): r=latest[label];assert r['rc']==0 and r['nice']==19,r text=(OUT/(label+'.txt')).read_text() result={} for key in ['tests','pass','fail','skipped','cancelled']: matches=re.findall(r'^(?:ℹ |# )'+key+r' (\d+)',text,re.M);assert matches,(label,key);result[key]=int(matches[-1]) assert result['fail']==0 and result['cancelled']==0,(label,result) return {'label':label,'log':str((OUT/(label+'.txt')).relative_to(REPO)),'counts':result,'rc':r['rc'],'nice':r['nice']} groups={} for suite in ['model-proxy','bus','cli']: total={k:0 for k in ['tests','pass','fail','skipped','cancelled']};mapping=[] for file in sorted((REPO/f'packages/{suite}/tests').glob('*.test.mjs')): if suite=='model-proxy' and file.stem=='management-key-encoding.test':continue # introduced in R2, mapped below label=f'{suite}-{file.stem}' if suite=='model-proxy' or suite=='cli' and file.stem in CLI_READERS:label='post-unit-fix-'+label if suite=='cli' and file.stem=='case1-accept.test':label='cli-case1-accept.rerun-mos1605' row=read(label);row['file']=str(file.relative_to(REPO));mapping.append(row) for k in total:total[k]+=row['counts'][k] groups[suite]={'files':len(mapping),**total,'mapping':mapping} assert total['skipped']==(1 if suite=='cli' else 0),(suite,total) groups['webui-pinned-copy']=read('post-unit-fix-webui-pinned-copy.test') groups['federation-runner']=read('test-federation-acceptance.sh') assert groups['federation-runner']['counts']['pass']==1 and groups['federation-runner']['counts']['skipped']==0 assert latest['test-config.sh']['rc']==0 and 'selftest: 55 passed, 0 failed' in (OUT/'test-config.sh.txt').read_text() groups['config-script']={'rc':0,'pass':55,'fail':0,'log':'agents/magica/work/queue-329/gate/test-config.sh.txt'} groups['history']={'initialRed':'gate/cli-case1-accept.test.txt','diagnostic':'mos-1604:20focused+3whole,179pass,no gate credit','unchangedRerun':'mos-1605:53pass','cause':'F7 unknown; Vikunja625','landingGate':'Sage must independently pass'} # R1 whole-suite history stays distinct from the R2 targeted reruns. groups['round1-model-proxy']=groups['model-proxy'] r2=[json.loads(line) for line in (BASE/'gate-r2/runs.jsonl').read_text().splitlines()] by_label={row['label']:row for row in r2} assert len(by_label)==len(r2), 'no repeated R2 invocations' def r2row(label): row=by_label[label] assert row['rc']==0 and row['nice']==19,row if label!='test-config.sh': assert row['counts']['fail']==row['counts']['cancelled']==row['counts']['skipped']==0,row return row def aggregate(rows): return {'files':len(rows),**{k:sum(row['counts'][k] for row in rows) for k in ['tests','pass','fail','skipped','cancelled']},'mapping':rows} models=[] for file in sorted((REPO/'packages/model-proxy/tests').glob('*.test.mjs')): row=dict(r2row('model-proxy-'+file.stem));row['file']=str(file.relative_to(REPO));models.append(row) groups['model-proxy']=aggregate(models) readers=[] for name in json.loads((BASE/'r2-reader-files.json').read_text()): file=Path(name) label='cli-federation-acceptance-runner' if file.name=='federation-acceptance.test.mjs' else file.parts[1]+'-'+file.stem row=dict(r2row(label));row['file']=name;readers.append(row) config=r2row('test-config.sh') assert 'selftest: 55 passed, 0 failed' in (REPO/config['log']).read_text() extras=[r2row('cli-case1-accept.test'),r2row('cli-case2-unit.test')] assert len(r2)==len(models)+len(readers)+len(extras)+1 round2={'model-proxy':groups['model-proxy'],'readers':aggregate(readers), 'bus-readers':aggregate([row for row in readers if row['file'].startswith('packages/bus/')]), 'cli-readers':aggregate([row for row in readers if row['file'].startswith('packages/cli/')]), 'config-script':{**config,'pass':55,'fail':0},'over-selected-extra-runs':extras, 'extra-run-note':'case1-accept 53/53 in 247.863 s through over-selection, not an F7 diagnostic or evidence about F7 either way. F7 cause unknown; Vikunja 625. case2-unit completed per sage-4277. Neither repeated.'} groups['round2']=round2 (OUT/'FINAL-COUNTS.json').write_text(json.dumps(groups,indent=2)+'\n') lines=[] for suite in ['model-proxy','bus','cli']: g=groups[suite];prefix='R2 current package' if suite=='model-proxy' else 'R1 whole suite (not rerun whole in R2)' lines.append(f"{prefix} {suite}: {g['files']}files {g['tests']}tests {g['pass']}pass {g['fail']}fail {g['skipped']}skip {g['cancelled']}cancel") for suite in ['bus-readers','cli-readers']: g=round2[suite];lines.append(f"R2 {suite}: {g['files']}files {g['tests']}tests {g['pass']}pass {g['fail']}fail {g['skipped']}skip") lines += ['R2 config:55/55; federation official runner included in CLI readers:1/1 no skip.', 'R1 webui pinned-copy:10/10; config:55/55; federation runner:1/1 no skip.', 'R1 CLI listed skip: packages/cli/tests/federation-acceptance.test.mjs, FED R7; covered by the official acceptance runner.', 'R2 over-selection extras: case1-accept53/53 in247.863s; case2-unit47/47 in71.829s. Not required reader coverage.', 'The over-selected case1-accept run is not an F7 diagnostic or evidence about F7 either way. F7 cause unknown; Vikunja625.', 'Initial old red and scratch diagnostic remain separate; mos-1605 unchanged original rerun53/53. Sage landing gate must independently pass.'] (OUT/'FINAL-COUNTS.txt').write_text('\n'.join(lines)+'\n') print('\n'.join(lines))