import os,sys,subprocess,pathlib,json,time
base,head,out=sys.argv[1:]
out=pathlib.Path(out)
node=subprocess.check_output(['which','node'],text=True).strip()
run=str(time.time_ns())
for side,repo in [('before',base),('after',head)]:
    cwd=out/(run+'-'+side); cwd.mkdir()
    shim=cwd/'t3-preview'; shim.write_text('#!/bin/sh\nexec "$PROOF_NODE" "$PROOF_ENTRY" "$@"\n'); shim.chmod(0o755)
    env=dict(os.environ,PROOF_NODE=node,PROOF_ENTRY=repo+'/apps/server/src/bin.ts',T3CODE_CLI_PATH='./t3-preview')
    lines=['Linux CLI • POSIX shell • fresh isolated homes • no sign-in', 'Launcher: ./t3-preview (source CLI wrapper)', '']
    for cmd in [['connect','status'],['connect','publish'],['service','status']]:
        home="T3 home A's" if cmd[0]=='connect' else 'T3 home B'
        args=['./t3-preview',*cmd,'--base-dir',home,'--log-level','none']
        if cmd[0]=='service':
            servicecwd=out/'service-user'/'runs'/(run+'-'+side)
            subprocess.run(['sudo','-n','-u','proof31906','mkdir','-p',str(servicecwd)],check=True)
            envargs=['env', 'XDG_RUNTIME_DIR=/run/user/'+subprocess.check_output(['id','-u','proof31906'],text=True).strip()]
            p=subprocess.run(['sudo','-n','-u','proof31906',*envargs,node,env['PROOF_ENTRY'],*cmd,'--base-dir',home,'--log-level','none'],cwd=servicecwd,text=True,capture_output=True)
            display='node <source-cli> service status'
        else:
            p=subprocess.run(args,cwd=cwd,env=env,text=True,capture_output=True)
            display='./t3-preview '+' '.join(cmd)
        lines+=['$ '+display+' --base-dir '+json.dumps(home),p.stdout.strip(),p.stderr.strip(),'Exit: '+str(p.returncode),'']
    (out/(side+'.txt')).write_text('\n'.join(lines))
