Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
109 changes: 106 additions & 3 deletions CUSTOM_UPDATES.md
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,8 @@ This document tracks all customizations made to AutoCoder that deviate from the

1. [UI Theme Customization](#1-ui-theme-customization)
2. [Playwright Browser Configuration](#2-playwright-browser-configuration)
3. [Update Checklist](#update-checklist)
3. [SQLite Robust Connection Handling](#3-sqlite-robust-connection-handling)
4. [Update Checklist](#4-update-checklist)

---

Expand Down Expand Up @@ -174,21 +175,115 @@ playwright_args = [

---

## 3. Update Checklist
## 3. SQLite Robust Connection Handling

### Overview

Added robust SQLite connection handling to prevent database corruption from concurrent access (MCP server, FastAPI server, progress tracking).

**Features Added:**
- WAL mode for better concurrency
- Busy timeout (30 seconds)
- Retry logic with exponential backoff
- Database health check endpoint

### Modified Files

#### `api/database.py`

**New functions added:**

```python
def get_robust_connection(db_path: str) -> sqlite3.Connection:
"""
Create a SQLite connection with robust settings:
- WAL mode for concurrent access
- 30 second busy timeout
- Foreign keys enabled
"""

@contextmanager
def robust_db_connection(db_path: str):
"""Context manager for robust database connections."""

def execute_with_retry(conn, sql, params=None, max_retries=3):
"""Execute SQL with exponential backoff retry for transient errors."""

def check_database_health(db_path: str) -> dict:
"""
Check database integrity and return health status.
Returns: {healthy: bool, message: str, details: dict}
"""
Comment on lines +209 to +216
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue | 🟡 Minor

Fix execute_with_retry signature in docs.
Current snippet documents a different signature than api/database.py.

📄 Suggested doc fix
-def execute_with_retry(conn, sql, params=None, max_retries=3):
-    """Execute SQL with exponential backoff retry for transient errors."""
+def execute_with_retry(db_path, query, params=(), fetch="none", max_retries=SQLITE_MAX_RETRIES):
+    """Execute SQL with exponential backoff retry for transient errors."""
🤖 Prompt for AI Agents
In `@CUSTOM_UPDATES.md` around lines 209 - 216, The docs show an incorrect
signature for execute_with_retry; update the snippet so the function signature
exactly matches the implementation in api/database.py (use the same parameter
names, types and default values and ensure the docstring matches), and also
confirm the check_database_health docstring reflects the actual return shape
used in api/database.py; reference the execute_with_retry and
check_database_health symbols when making the corrections so the docs and code
signatures are consistent.

```

---

#### `progress.py`

**Changed from raw sqlite3 to robust connections:**

```python
# BEFORE:
conn = sqlite3.connect(db_path)

# AFTER:
from api.database import robust_db_connection, execute_with_retry

with robust_db_connection(db_path) as conn:
execute_with_retry(conn, sql, params)
```

---

#### `server/routers/projects.py`

**New endpoint added:**

```python
@router.get("/{project_name}/db-health")
async def get_database_health(project_name: str) -> DatabaseHealth:
"""
Check the health of the project's features database.
Useful for diagnosing corruption issues.
"""
```

---

#### `server/schemas.py`

**New schema added:**

```python
class DatabaseHealth(BaseModel):
healthy: bool
message: str
details: dict = {}
```
Comment on lines +255 to +262
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue | 🟡 Minor

Update DatabaseHealth schema doc to match implementation.
The documented fields don’t align with server/schemas.py.

📄 Suggested doc fix
-class DatabaseHealth(BaseModel):
-    healthy: bool
-    message: str
-    details: dict = {}
+class DatabaseHealth(BaseModel):
+    healthy: bool
+    journal_mode: str | None = None
+    integrity: str | None = None
+    error: str | None = None
📝 Committable suggestion

‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

Suggested change
**New schema added:**
```python
class DatabaseHealth(BaseModel):
healthy: bool
message: str
details: dict = {}
```
**New schema added:**
🤖 Prompt for AI Agents
In `@CUSTOM_UPDATES.md` around lines 255 - 262, The documented DatabaseHealth
schema in CUSTOM_UPDATES.md is out of sync with the actual DatabaseHealth model
in server/schemas.py; open the DatabaseHealth class in server/schemas.py, copy
its exact field names, types, and defaults (including Optional/nullability and
default values) and update the markdown snippet so it matches the implementation
exactly (use the same typing/annotations and default for details if present) and
ensure the doc reflects any renamed fields or added/removed attributes.


---

## 4. Update Checklist

When updating AutoCoder from upstream, verify these items:

### UI Changes
- [ ] `ui/src/styles/custom-theme.css` is preserved
- [ ] `ui/src/components/KanbanColumn.tsx` changes are preserved
- [ ] `ui/src/main.tsx` imports custom theme
- [ ] Run `npm run build` in `ui/` directory
- [ ] Test both light and dark modes

### Backend Changes
- [ ] `client.py` - Playwright browser/headless defaults preserved
- [ ] `.env.example` - Documentation updates preserved
- [ ] `api/database.py` - Robust connection functions preserved
- [ ] `progress.py` - Uses robust_db_connection
- [ ] `server/routers/projects.py` - db-health endpoint preserved
- [ ] `server/schemas.py` - DatabaseHealth schema preserved

### General
- [ ] Test database operations under concurrent load
- [ ] Verify Playwright uses Firefox by default
- [ ] Check that browser runs headless by default

Expand All @@ -205,7 +300,8 @@ cd ui && npm run build

### Backend Only
```bash
git checkout client.py .env.example
git checkout client.py .env.example api/database.py progress.py
git checkout server/routers/projects.py server/schemas.py
```

---
Expand All @@ -219,10 +315,17 @@ git checkout client.py .env.example
| `ui/src/main.tsx` | UI | Imports custom theme |
| `client.py` | Backend | Firefox + headless defaults |
| `.env.example` | Config | Updated documentation |
| `api/database.py` | Backend | Robust SQLite connections |
| `progress.py` | Backend | Uses robust connections |
| `server/routers/projects.py` | Backend | db-health endpoint |
| `server/schemas.py` | Backend | DatabaseHealth schema |

---

## Last Updated

**Date:** January 2026
**Commits:**
- `1910b96` - SQLite robust connection handling
- `e014b04` - Custom theme override system
**PR:** #93 - Twitter-style UI theme with custom theme override system
Loading
Loading