diff --git a/site/db/spec_events.py b/site/db/spec_events.py index f0f505d..4bfe8ea 100644 --- a/site/db/spec_events.py +++ b/site/db/spec_events.py @@ -1,6 +1,6 @@ """spec_events — event sourcing: apply ops, reset contract.""" import json, uuid -from db.connection import query, execute, get_pool +from db.connection import query, execute, get_conn def reset(contract_id): @@ -10,26 +10,14 @@ def reset(contract_id): def get_next_seq(contract_id): - """Get next sequence number with row lock to prevent race conditions.""" - pool = get_pool() - conn = pool.getconn() - try: - conn.autocommit = False - with conn.cursor() as cur: - cur.execute( - "SELECT seq FROM spec_events WHERE contract_id = %s ORDER BY seq DESC LIMIT 1 FOR UPDATE", - (contract_id,), - ) - row = cur.fetchone() - seq = (row[0] + 1) if row else 1 - conn.commit() - return seq - except Exception: - conn.rollback() - raise - finally: - conn.autocommit = True - pool.putconn(conn) + """Get next sequence number. WAL serializes writers — no explicit lock needed.""" + conn = get_conn() + cur = conn.execute( + "SELECT seq FROM spec_events WHERE contract_id = ? ORDER BY seq DESC LIMIT 1", + (contract_id,), + ) + row = cur.fetchone() + return (row["seq"] + 1) if row else 1 def apply_ops(contract_id, supplement_id, document_id, ops, prompt_id, raw_llm_response):