import json, subprocess, sys

def run(x):
    p=subprocess.run([sys.executable,"changes_gate.py"],input=json.dumps(x),text=True,capture_output=True)
    return p.returncode,p.stdout.strip(),p.stderr

valid={"has_more":True,"has_more_streams":["posts","comments","nulls"],"continuation_covers":["posts","comments","nulls"]}
negative={"has_more":True,"has_more_streams":["posts","comments","nulls"],"continuation_covers":["posts","comments"]}
assert run(valid)==(0,'{"code": "COVERAGE_OK", "status": "PASS", "streams": ["comments", "nulls", "posts"]}', '')
rc,out,err=run(negative)
assert rc==1 and 'UNCOVERED_STREAM' in out and 'nulls' in out and err==''
print('PASS valid; REFUSE negative uncovered nulls')
