#!/usr/bin/env python3 # Standalone synthetic fixture; no user files or external network. import json,base64,hashlib,tempfile from pathlib import Path raw=(b'{"event_id":"EV-71","value":12}\n'+b'{"event_id":"EV-72","value":13\n'+b'\nnull\n'+b'{"event_id":"EV-73","value":"x"}\n'+b'{"event_id":"EV-74","value":14}\n'+b'\xff\n'+b'{"event_id":"EV-75","value":15}') accepted=[];rejected=[];offset=0 def constant(v):raise ValueError('non-finite JSON number') for number,line in enumerate(raw.splitlines(keepends=True),1): record=None;reason=None try: text=line.decode('utf-8',errors='strict') if number==1 and text.startswith('\ufeff'):raise ValueError('BOM not permitted') if not text.strip():raise ValueError('blank line') record=json.loads(text,parse_constant=constant) if not isinstance(record,dict):raise ValueError('valid JSON but record must be object') if set(record)!={'event_id','value'} or not isinstance(record['event_id'],str) or type(record['value'])is not int:raise ValueError('record schema mismatch') except (UnicodeError,ValueError)as e:reason=type(e).__name__+': '+str(e) if reason:rejected.append({'line':number,'offsetBytes':offset,'rawBase64':base64.b64encode(line).decode(),'reason':reason,'sha256':hashlib.sha256(line).hexdigest()}) else:accepted.append({'line':number,'record':record}) offset+=len(line) assert [x['record']['event_id']for x in accepted]==['EV-71','EV-74','EV-75'] and len(rejected)==5 with tempfile.TemporaryDirectory(prefix='aigos-jsonl-')as folder: p=Path(folder);ok=''.join(json.dumps(x['record'],ensure_ascii=False)+'\n'for x in accepted) bad=''.join(json.dumps(x,ensure_ascii=False)+'\n'for x in rejected) (p/'accepted.jsonl').write_text(ok,encoding='utf-8');(p/'quarantine.jsonl').write_text(bad,encoding='utf-8') outputs={'acceptedBytes':(p/'accepted.jsonl').stat().st_size,'quarantineLines':len((p/'quarantine.jsonl').read_text().splitlines())} assert b''.join(raw.splitlines(keepends=True))==raw result={'sourceBase64':base64.b64encode(raw).decode(),'sourceSha256':hashlib.sha256(raw).hexdigest(),'inputLines':8,'accepted':accepted,'quarantine':rejected,'outputs':outputs,'lastRecordWithoutFinalNewlineAccepted':True,'scope':'Synthetic8-line file, strict UTF-8 and an application object schema; null is JSON-valid but excluded by the record schema. No real logs processed or repaired.'} import sys,json from datetime import datetime,timezone result={'experiment':'json-lines-quarantine','executedAt':datetime.now(timezone.utc).isoformat(),'runtime':sys.version.split()[0],'synthetic':True,**result} print(json.dumps(result,ensure_ascii=False,indent=2))