From f176ddad71c9a2ce0fa664b2fec3dc4f9f47611c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E2=80=9CNaeel=E2=80=9D?= Date: Wed, 15 Jul 2026 11:43:01 +0400 Subject: [PATCH] =?UTF-8?q?fix:=20spec=5Fevents.py=20=E2=80=94=20get=5Fpoo?= =?UTF-8?q?l=20=E2=86=92=20get=5Fconn,=20remove=20FOR=20UPDATE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- site/db/spec_events.py | 30 +++++++++--------------------- 1 file changed, 9 insertions(+), 21 deletions(-) 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):