#!/usr/bin/env python3
import json, sys

def refuse(reason):
    print(json.dumps({'ok': False, 'status': 'REFUSE', 'reason': reason}, sort_keys=True))
    return 1

def main(argv):
    if len(argv) != 3:
        print('usage: continuity_gate.py RESUME.json MANIFEST.json', file=sys.stderr)
        return 2
    try:
        with open(argv[1], encoding='utf-8') as f: r=json.load(f)
        with open(argv[2], encoding='utf-8') as f: m=json.load(f)
    except Exception as e:
        return refuse('input_error')
    if r.get('contract') != 'agent.resume.v1': return refuse('contract_mismatch')
    if r.get('provenance') != 'OBSERVED': return refuse('provenance_not_observed')
    wl=r.get('work_line')
    if not isinstance(wl, dict) or not all(isinstance(wl.get(k), str) and wl[k].strip() for k in ('goal','beneficiary','next_step')):
        return refuse('work_line_incomplete')
    ids=r.get('evidence_ids')
    if not isinstance(ids, list) or not ids or any(not isinstance(x,int) for x in ids) or ids != list(range(ids[0], ids[0]+len(ids))):
        return refuse('evidence_not_contiguous')
    if r.get('expected_head') != m.get('expected_head'):
        return refuse('head_mismatch')
    print(json.dumps({'ok': True, 'status': 'PASS', 'contract': r['contract'], 'head': r['expected_head']}, sort_keys=True))
    return 0
if __name__ == '__main__': sys.exit(main(sys.argv))
