20 lines
2.6 KiB
Python
20 lines
2.6 KiB
Python
#!/usr/bin/env python3
|
|
"""Producer-vector experiment; no runtime source mutation or credential access."""
|
|
import argparse,hashlib,json,os,subprocess,sys
|
|
from pathlib import Path
|
|
p=argparse.ArgumentParser();p.add_argument('--approval-source',type=Path,required=True);p.add_argument('--vectors',type=Path,required=True);p.add_argument('--output',type=Path,required=True);a=p.parse_args()
|
|
sys.path.insert(0,str(a.approval_source));from approval_engine.binding import binding_digest
|
|
vectors=json.loads(a.vectors.read_bytes());env={k:os.environ[k] for k in ('PATH','HOME') if k in os.environ};env.update(GOCACHE='/tmp/netkingdom-go-cache',GOFLAGS='-buildvcs=false',GOMAXPROCS='2')
|
|
probe=Path(__file__).with_name('raw-representation-probe.go')
|
|
rows=json.loads(subprocess.check_output(['go','run',str(probe)],input=a.vectors.read_bytes(),env=env))
|
|
results=[]
|
|
for vector,row in zip(vectors['native_binding_vectors'],rows,strict=True):
|
|
def owner_digest(target):
|
|
return binding_digest({**vector['binding'],'target':json.loads(target)})
|
|
raw_digest=binding_digest(json.loads(row['raw_message_act_draft']))
|
|
default_digest=owner_digest(row['go_default_target']);number_digest=owner_digest(row['use_number_target'])
|
|
assert raw_digest==vector['native_digest'];assert number_digest==vector['native_digest']
|
|
results.append({'input_target_json':vector['input_target_json'],'producer_native_digest':vector['native_digest'],'raw_message_draft_matches_owner':True,'use_number_roundtrip_matches_owner':True,'default_float64_roundtrip_matches_owner':default_digest==vector['native_digest'],'go_default_target':row['go_default_target'],'go_raw_draft':row['raw_message_act_draft']})
|
|
assert any(not x['default_float64_roundtrip_matches_owner'] for x in results)
|
|
result={'schema':'access-engine.raw-native-representation-experiment.v1','source_vectors_sha256':hashlib.sha256(a.vectors.read_bytes()).hexdigest(),'source_vectors_producer_revision':vectors['producer_revision'],'cases':results,'raw_preservation_passed':len(results),'default_roundtrip_mismatches':sum(not x['default_float64_roundtrip_matches_owner'] for x in results),'boundary':'Synthetic raw draft preservation only. Actual native digest recomputed with Approval owner Python binding_digest; no Go canonicalization implementation or source-origin trust. Does not prove typed Access signed-envelope preservation, registry/compiler correspondence, trusted provider facts or positive eligibility.'}
|
|
a.output.write_text(json.dumps(result,indent=2)+'\n');print({'raw_preservation_passed':len(results),'default_roundtrip_mismatches':result['default_roundtrip_mismatches']})
|