"""A deterministic projection example with explicit, application-owned revisions.""" import json,itertools from pathlib import Path EVENTS={1:{'id':'event-1','revision':1,'seats':10},2:{'id':'event-2','revision':2,'seats':30},3:{'id':'event-3','revision':3,'seats':20}} DELIVERIES=[3,1,2,2,1] def project(order,policy): seats=0; revision=0; seen=set(); applied=0; trace=[] for attempt,key in enumerate(order,1): e=EVENTS[key] if policy!='arrival_order' and e['id'] in seen: outcome='duplicate' elif policy=='revision_guard' and e['revision']<=revision: seen.add(e['id']);outcome='stale' else: seen.add(e['id']);seats=e['seats'];revision=e['revision'];applied+=1;outcome='applied' trace.append({'delivery':attempt,'event':e['id'],'event_revision':e['revision'],'event_seats':e['seats'],'outcome':outcome,'stored_revision':revision,'stored_seats':seats}) return {'policy':policy,'final_seats':seats,'applied':applied,'trace':trace} def run(): cases=[project(DELIVERIES,p) for p in ['arrival_order','event_id_dedup','revision_guard']] assert [(r['final_seats'],r['applied']) for r in cases]==[(10,5),(30,3),(20,1)] orders=list(itertools.permutations([1,2,3])) checks={p:sum(project(o,p)['final_seats']==20 for o in orders) for p in ['arrival_order','event_id_dedup','revision_guard']} assert checks=={'arrival_order':2,'event_id_dedup':2,'revision_guard':6} # Adding any one duplicate at any slot cannot change the guarded result. for order in orders: for event in [1,2,3]: for slot in range(4): assert project(order[:slot]+(event,)+order[slot:],'revision_guard')['final_seats']==20 return {'scope':'Sequential replacement-state projection with producer-owned monotonic revisions; not Stripe payloads','events':list(EVENTS.values()),'deliveries':DELIVERIES,'cases':cases,'permutations':{'total':6,'correct_final_state':checks},'duplicate_extension_checks':72} if __name__=='__main__': output=run();assert output==run() Path(__file__).with_name('results.json').write_text(json.dumps(output,indent=2)+'\n') print(json.dumps({k:v for k,v in output.items() if k!='cases'},indent=2))