You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
A Claude Code skill that automates the beads SQLite → Dolt server migration for v0.56+. Handles Dolt server setup, per-repo migration, and JSONL import (working around the broken bd init --from-jsonl).
Known pitfalls discovered during real migrations. Read this if any step fails unexpectedly.
bd init --from-jsonl is broken (v0.56.1)
Reports success but imports 0 issues. Filed as #2096. Use the bundled scripts/jsonl-to-dolt.py instead.
bd init refuses if beads.db exists
The old SQLite file triggers "This workspace is already initialized" even after removing .beads/dolt. You must rm -rf .beads entirely, not just the dolt subdirectory.
rm -rf .beads destroys the JSONL
The JSONL lives at .beads/issues.jsonl. If you remove .beads without backing up first, your issue data is gone. Always back up to /tmp/ before deleting.
bd migrate --to-dolt doesn't work (v0.56.1)
The --to-dolt flag references embedded Dolt mode, which was removed in v0.56.1. The command errors with "Dolt backend requires CGO" but this is a dead end — embedded mode no longer exists regardless of how the binary was built. v0.56.1 is server-only by design. Do not attempt to rebuild with CGO; use the server-based migration in SKILL.md instead.
Dolt issues table has NOT NULL fields without defaults
The design, acceptance_criteria, and notes columns are NOT NULL with no default value. JSONL data doesn't include these fields, so naive SQL INSERTs fail with:
Error 1105 (HY000): Field 'design' doesn't have a default value
The import script handles this by inserting empty strings for these columns.
dolt sql requires specific flags for non-interactive use
Three flags are needed to connect to the server non-interactively:
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
MANDATORY: Invoke this skill IMMEDIATELY when ANY `bd` command fails with Dolt errors. Triggers: 'Dolt backend configured but database not found', 'Error 1045 (28000): Access denied', 'Unable to open database', 'Failed to open database', 'failed to create database', 'failed to connect to dolt server'. Do NOT attempt manual fixes.
Beads Dolt Upgrade
Beads v0.56+ uses Dolt (git-for-databases MySQL server) instead of SQLite. Server mode is mandatory — v0.56.1 intentionally removed embedded Dolt mode (see changelog: "remove embedded Dolt mode from init and main command paths", "drop dolthub/driver dependency — binary size 168MB → 41MB"). A running dolt sql-server is required; there is no embedded/CGO alternative.
Do NOT downgrade to v0.55.4 (Homebrew's current version) to get embedded mode back — beads is moving server-only.
Procedure
Phase 1: Dolt Server (One-Time)
Check if already running:
which dolt && lsof -i :3308
If both succeed, skip to Phase 2.
1.1 Install and Configure
brew install dolt
mkdir -p ~/dolt-data
lsof -i :3308 # Verify port is free; try 3309, 3310 if occupied
1.2 Create LaunchAgent
Write to ~/Library/LaunchAgents/com.dolt.sql-server.plist:
See GOTCHAS.md for a comprehensive list of pitfalls: broken --from-jsonl flag, NOT NULL column defaults, bd migrate --to-dolt requiring CGO, dolt CLI password prompts, and more.