fix: replace in-memory ID counter with atomic database counter

Replace the in-memory nextID counter with an atomic database-backed
counter using the issue_counters table. This fixes race conditions
when multiple processes create issues concurrently.

Changes:
- Add issue_counters table with atomic INSERT...ON CONFLICT pattern
- Remove in-memory nextID field and sync.Mutex from SQLiteStorage
- Implement getNextIDForPrefix() for atomic ID generation
- Update CreateIssue() to use database counter instead of memory
- Update RemapCollisions() to use database counter for collision resolution
- Clean up old planning and bug documentation files

Fixes the multi-process ID generation race condition tested in
cmd/bd/race_test.go.
This commit is contained in:
v4rgas
2025-10-13 19:29:29 -03:00
committed by Steve Yegge
parent d85ff17f40
commit 20e3235435
6 changed files with 60 additions and 550 deletions

View File

@@ -81,6 +81,12 @@ CREATE TABLE IF NOT EXISTS dirty_issues (
CREATE INDEX IF NOT EXISTS idx_dirty_issues_marked_at ON dirty_issues(marked_at);
-- Issue counters table (for atomic ID generation)
CREATE TABLE IF NOT EXISTS issue_counters (
prefix TEXT PRIMARY KEY,
last_id INTEGER NOT NULL DEFAULT 0
);
-- Ready work view
CREATE VIEW IF NOT EXISTS ready_issues AS
SELECT i.*