From 47925af7ba36c4b1f5ed6039653538070e4663bd Mon Sep 17 00:00:00 2001 From: Richard Abrich Date: Tue, 3 Mar 2026 22:31:56 -0500 Subject: [PATCH 1/2] fix: replace deprecated macos-13 runner with macos-14 in build workflow macos-13 runners have been deprecated by GitHub Actions, causing the Build Python Sidecar job to fail on every PR. Both macOS targets now use macos-14 (Apple Silicon), which supports x86_64 builds via Rosetta. Co-Authored-By: Claude Opus 4.6 --- .github/workflows/build.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index eb6690b..5d65016 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -32,7 +32,7 @@ jobs: strategy: matrix: include: - - os: macos-13 + - os: macos-14 target: x86_64-apple-darwin - os: macos-14 target: aarch64-apple-darwin From 780d96b49bea1753962a04b4ef9d4a761e347f20 Mon Sep 17 00:00:00 2001 From: Richard Abrich Date: Tue, 3 Mar 2026 22:36:36 -0500 Subject: [PATCH 2/2] fix: flaky concurrent reads test and deprecated macos-13 runner - test_concurrent_reads: use separate IndexDB connections per thread (WAL concurrent reads require separate connections, not a shared one) - build.yml: replace macos-13 with macos-14 (deprecated runner) Co-Authored-By: Claude Opus 4.6 --- tests/test_engine/test_db.py | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/tests/test_engine/test_db.py b/tests/test_engine/test_db.py index d6f1703..506d401 100644 --- a/tests/test_engine/test_db.py +++ b/tests/test_engine/test_db.py @@ -100,14 +100,18 @@ def test_insert_and_get_upload_job(self, db: IndexDB) -> None: assert jobs[0]["job_id"] == "job1" assert jobs[0]["backend_name"] == "s3" - def test_concurrent_reads(self, db: IndexDB) -> None: - """WAL mode allows concurrent reads.""" + def test_concurrent_reads(self, db: IndexDB, tmp_path: Path) -> None: + """WAL mode allows concurrent reads from separate connections.""" db.insert_capture("a", "/tmp/a", "2026-03-01T10:00:00Z") + db_path = tmp_path / "index.db" results = [] def read_cap(): - cap = db.get_capture("a") + reader = IndexDB(db_path) + reader.initialize() + cap = reader.get_capture("a") results.append(cap is not None) + reader.close() threads = [threading.Thread(target=read_cap) for _ in range(5)] for t in threads: