from pathlib import Path
import re,json
root=Path('/tmp/lead-33008-r2/capture')
for side,folder in [('before','before-20261110T091858Z'),('after','after-20261110T091502Z')]:
 run=root/folder
 out=['SYNTHETIC CLAUDE CLI; REAL T3 CLIENT/SERVER', 'threadId=fixture-thread; UTC date=2026-11-10', 'Selected server log lines retain their latest preceding timestamp; stack repetition and unrelated startup/auth/telemetry omitted. No credentials or private runtime model identifiers are included.','']
 timestamp='unknown'
 for n,line in enumerate((run/'server.log').read_text().splitlines(),1):
  m=re.match(r'\[(\d\d:\d\d:\d\d\.\d+)\]',line)
  if m:timestamp='2026-11-10T'+m[1]+'Z'
  if any(term in line for term in ['provider turn start failed','claude-mcp-servers-unavailable','effectType:', 'attemptCount:', 'has no live query','Claude provider query ended before the turn could start.',"runId: 'run:thread:fixture-thread"]):
   out.append(f'[{timestamp}] server.log:{n}: {line.strip()}')
 out+=['','Synthetic process milestones (recorded inside the fake executable at spawn/completion/exit):']
 for line in (run/'fake-cli.ndjson').read_text().splitlines():
  e=json.loads(line)
  if e['event'] in ['spawn','silent-exit','prompt','completed']:out.append(line)
 out+=['','Scenario RPC/click milestones:']+(run/'scenario.ndjson').read_text().splitlines()
 out+=['','Selected provider protocol lines; provider-session ID includes thread:fixture-thread.']
 for line in (run/'home/userdata/logs/provider/events.fixture-thread.log').read_text().splitlines():
  e=json.loads(line.split('NTIVE: ',1)[1]);p=e.get('event',{}).get('payload',{})
  if p.get('type') in ['query.open','query.close','prompt.offer','assistant','result']:
   out.append(line)
 (root/(side+'-log-excerpt.txt')).write_text('\n'.join(out)+'\n')
