"""Deterministic projection model; no search server or transport involved.""" import csv, json, platform from pathlib import Path p=Path(__file__).parent events=[(10,'upsert','Old title'),(11,'delete',None),(10,'upsert','Old title'),(11,'delete',None),(12,'upsert','Recreated title')] def run(retain,prune=False): state=None; rows=[] for i,(revision,action,title) in enumerate(events,1): if prune and i==3: state=None accepted=state is None or revision>state['revision'] if accepted: state={'revision':revision,'deleted':action=='delete','title':title} if action=='delete' and not retain: state=None rows.append(dict(step=i,incoming_revision=revision,action=action,accepted=accepted,stored_revision=state['revision'] if state else None,visible=bool(state and not state['deleted']),title=state['title'] if state and not state['deleted'] else None)) return rows results={name:run(*args) for name,args in [('physical_delete',(False,False)),('retained_tombstone',(True,False)),('pruned_before_replay',(True,True))]} assert results['physical_delete'][2]['visible'] is True assert results['retained_tombstone'][2]['visible'] is False assert results['retained_tombstone'][3]['accepted'] is False assert results['pruned_before_replay'][2]['visible'] is True assert all(rows[4]['stored_revision']==12 and rows[4]['visible'] for rows in results.values()) (p/'results.json').write_text(json.dumps(dict(scope='Constructed sequential model; no Elasticsearch or distributed execution',python=platform.python_version(),runs=results),indent=2)+'\n') with (p/'trace.csv').open('w',newline='') as f: fields=['mode',*results['physical_delete'][0]]; w=csv.DictWriter(f,fieldnames=fields);w.writeheader() for mode,rows in results.items(): for row in rows:w.writerow(dict(mode=mode,**row)) print('PASS: 3 modes, 5 deliveries each; stale replay returns only after guard loss.')