import os,sys,subprocess,json,time,pathlib,datetime
checkout=pathlib.Path(os.environ['EVIDENCE_CHECKOUT']).resolve()
root=pathlib.Path(os.environ['EVIDENCE_SCRATCH']).resolve()
side=os.environ['EVIDENCE_SIDE']
run=root/(side+'-'+datetime.datetime.now(datetime.timezone.utc).strftime('%Y%m%dT%H%M%SZ'))
run.mkdir()
repo=run/'sample-repo'
repo.mkdir()
provider=os.environ['EVIDENCE_PROVIDER']; model=os.environ['EVIDENCE_MODEL']
start=time.monotonic(); events=[]; transcript=[]
def clean(s):
    for a,b in [(str(repo),'$SAMPLE_REPO'),(str(run),'$RUN'),(str(checkout),'$CHECKOUT'),(str(root),'$SCRATCH'),(model,'<configured-model>')]: s=s.replace(a,b)
    return s

def emit(s):
    s=clean(s)
    print(s,flush=True); transcript.append(s); events.append([round(time.monotonic()-start,3),'o',s.replace('\n','\r\n')+'\r\n'])
def cmd(args,display=None,cwd=repo):
    emit('$ '+(display or ' '.join(args)))
    p=subprocess.run(args,cwd=cwd,text=True,stdout=subprocess.PIPE,stderr=subprocess.STDOUT,timeout=120)
    emit(p.stdout.rstrip()); emit('exit='+str(p.returncode))
    return p
cli=['node',str(checkout/'apps/server/src/bin.ts')]
location=['--base-dir',str(checkout/'.t3')]
def t3(args,display=None): return cmd(cli+args+location,'t3 '+(display or ' '.join(args))+' --base-dir $ISOLATED_HOME')
emit('Environment: Linux; real T3 development server + CLI; fresh isolated database; synthetic Git repository.')
emit('Commit: '+subprocess.check_output(['git','rev-parse','HEAD'],cwd=checkout,text=True).strip())
emit('Recording: 1440x900 terminal, dark theme. Paths and configured model are redacted.')
cmd(['git','init','-b','main'])
cmd(['git','-c','user.name=Synthetic','-c','user.email=synthetic@example.invalid','commit','--allow-empty','-m','initial'])
cmd(['git','worktree','add','-b','feature/taken',str(run/'occupied')])
cmd(['git','branch','feature/idle'])
t3(['project','add',str(repo),'--title','Branch launch evidence'])
results=[]
for branch in ['feature/taken','feature/idle','main','feature/unused']:
    emit('\nCASE: '+branch)
    before=t3(['thread','list','--project',str(repo),'--json'])
    p=t3(['thread','start','--json','--worktree','main','--branch',branch,'--provider',provider,'--model',model,str(repo),'reply ok'],
        'thread start --json --worktree main --branch '+branch+' --provider <configured-provider> --model <configured-model> $SAMPLE_REPO "reply ok"')
    try: launched=json.loads(p.stdout)
    except: launched=None
    if launched and launched.get('threadId'):
        # Inspect the actual persisted server result after launch returns.
        time.sleep(2)
        t3(['thread','show',launched['threadId'],'--json'])
    after=t3(['thread','list','--project',str(repo),'--json'])
    results.append({'branch':branch,'exit':p.returncode,'output':clean(p.stdout),'before':clean(before.stdout),'after':clean(after.stdout)})
(run/'transcript.txt').write_text('\n'.join(transcript)+'\n')
with (run/'terminal.cast').open('w') as f:
    f.write(json.dumps({'version':2,'width':120,'height':42,'title':side+' branch launch evidence'})+'\n')
    for e in events: f.write(json.dumps(e)+'\n')
(run/'results.json').write_text(json.dumps(results,indent=2))
(root/(side+'-run.txt')).write_text(str(run))
