from pathlib import Path
import subprocess,hashlib,json
R=Path('/home/ubuntu/wt/pr-24263');O=Path('/tmp/takeover-24263');E=O/'evidence'
H='b860b56a99d41f071561af98de60228280283d09';P='6fc097e420b550849c74c780e746b6c0624b6a56';B='26c3625f484eadd4d5b6ca5a3dd1f8f8bd5533b4'
def git(*a):return subprocess.check_output(['git',*a],cwd=R)
def source(r,p):return git('show',r+':'+p)
def sha(b):return hashlib.sha256(b).hexdigest()
assert git('rev-parse','HEAD').decode().strip()==H
assert git('merge-base',B,H).decode().strip()==B
assert git('diff','--name-only',P,H).decode().splitlines()==['apps/mobile/scripts/test-enriched-markdown-native.mjs']
assert not git('status','--porcelain').strip()
for row in json.loads((E/'source-manifest.json').read_text()):assert sha((E/row['artifact']).read_bytes())==row['sha256']==sha(source(row['revision'],row['path']))
for line in (E/'SHA256SUMS').read_text().splitlines():
 digest,name=line.split(maxsplit=1);assert sha((E/name.lstrip('*')).read_bytes())==digest
for row in json.loads((O/'follow-up-source-checks.json').read_text())['files']:assert source(H,row['path'])==source(P,row['path'])==(R/row['path']).read_bytes()
assert (E/'before.ts').read_bytes()==source(B,'apps/mobile/src/lib/markdownDocument.ts')
assert (E/'after.ts').read_bytes()==source(H,'apps/mobile/src/lib/markdownDocument.ts')
for p in ['ios/internals/MeasurementCache.h','ios/utils/ENRMAsyncRenderCoordinator.h','ios/utils/ENRMAsyncRenderCoordinator.m']:assert (E/'dependency/package'/p).read_bytes()==(R/'apps/mobile/node_modules/react-native-enriched-markdown'/p).read_bytes()
r=json.loads((E/'results.json').read_text());assert r['head']==P and r['baseline']==B
assert r['equivalence']=={'comparisons':4574,'differences':0}
assert json.loads((E/'extra-equivalence-results.json').read_text())['comparisons']==6176
assert json.loads((E/'integration-differential-results.json').read_text())['comparisons']==29475
for label,passes in [('before',81),('after',54)]:
 row=r['stream']['labels'][label];assert row['parsePasses']==passes;assert sorted(row['samplesMs'])[2]==row['medianMs']
print('PASS: entire-tree delta, identities, source pins, evidence checksums, installed native sources, comparison counts and raw-sample medians')
