Skip to content

docs(handoff): brief for the e2e database-locked defect blocking v1.0.0 - #12

Merged
adbarc92 merged 1 commit into
mainfrom
docs/handoff-e2e
Jul 25, 2026
Merged

docs(handoff): brief for the e2e database-locked defect blocking v1.0.0#12
adbarc92 merged 1 commit into
mainfrom
docs/handoff-e2e

Conversation

@adbarc92

Copy link
Copy Markdown
Owner

Documentation only — no code changes.

Adds docs/handoffs/2026-07-25-e2e-database-locked.md, a self-contained brief for whoever picks up the e2e failure, and updates docs/STATUS.md to point at it.

Why

main @ 74cadcf has everything from PRs #9/#10/#11. backend (3.11), backend (3.12), frontend, and validate-config are green. e2e is not — it fails with claim_next_task failed: database is locked. That is now the only known functional defect, and the release is deliberately held behind it.

What the brief carries

  • The reproduction, and the fact that it may not reproduce locally (CI runners are slower — widen the window rather than dismissing it).
  • The leading hypothesis, explicitly marked unverified: backend/main.py:99 passes a constant data/web.db into start_run() on every start_project, and each start_run spawns its own state server plus 4 workers. Two concurrent runs therefore put two OS processes on one SQLite file, which the store's asyncio.Lock cannot serialise — it is in-process only.
  • What is already ruled out: a missing busy_timeout pragma. Python's sqlite3.connect() applies a 5s busy timeout that aiosqlite inherits, so that is not the cause — the brief says so explicitly to stop the next agent burning time there.
  • The second, independent problem: the Playwright specs predate the engine rewrite (last touched 2026-06-02) and still assert on the retired LangGraph flow. Two layers, not one.
  • A trap worth flagging: the local v1.0.0 tag points at ba82ca8, which predates the fresh-clone fix 7bfa00d and therefore cannot start on a clean checkout. It must be moved before it is ever pushed.

Decisions recorded

Both confirmed by the user this session rather than assumed:

  • Hold the v1.0.0 tag and GitHub Release until e2e is green.
  • The successor works autonomously.

Four genuinely open questions are carried as open questions rather than silently defaulted — chiefly whether the Playwright specs should be rewritten against the engine's flow or the job retired, which is a user-facing call.

Brief for the successor picking up the only known functional defect,
plus the STATUS.md state-summary rewrite and session-log entry that
point at it.

Records the two user decisions from this session: hold the tag and
GitHub Release until e2e is green, and the successor works
autonomously. Also flags that the local v1.0.0 tag points at ba82ca8,
which predates the fresh-clone fix and must be moved before it is ever
pushed.
@adbarc92
adbarc92 merged commit 1ff76a8 into main Jul 25, 2026
4 of 5 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant