Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
23 commits
Select commit Hold shift + click to select a range
492853a
fix(dolt): retry mutate+commit methods on serialization conflict (121…
steveyegge Jun 25, 2026
78dd659
test(dolt): add concurrent work-queue drain test (Gas Station claim i…
steveyegge Jun 25, 2026
5fe9f3a
feat(lease): claim-TTL + heartbeat + reclaim for dead-worker recovery
steveyegge Jun 25, 2026
6305733
feat(doltlite): add embedded Beads storage backend
duncan4123 Jun 4, 2026
b5f6b73
feat(cli): allow bd sql against embedded stores
duncan4123 Jun 14, 2026
1f1027d
fix(context): support Beads workspaces outside Git repos
duncan4123 Jun 14, 2026
799c5b8
fix(graph): recover IDs after post-transaction commit failures
duncan4123 Jun 23, 2026
38caa4c
fix(doltlite): preserve native commit policy for runtime tables
duncan4123 Jun 23, 2026
f0a703f
feat(doltlite): implement upstream lease queue APIs
duncan4123 Jun 27, 2026
9d6cb63
test(cli): isolate backup auto config discovery
duncan4123 Jun 27, 2026
1c2126c
fix(doltlite): run compatible migrations for existing stores
duncan4123 Jun 27, 2026
dbd28ce
plan-review: prepare plan review document
duncan4123 Jun 27, 2026
6b52bfd
review: prepare default line audit review document
duncan4123 Jun 27, 2026
c85d0a9
plan: prepare implementation plan document
duncan4123 Jun 27, 2026
2d05c91
decomposition: record DoltLite audit work breakdown
duncan4123 Jun 27, 2026
46da863
summarize: write implementation summary
duncan4123 Jun 28, 2026
837d09e
fix(doltlite): repair legacy ignored dependency tables
duncan4123 Jun 28, 2026
96819e9
ci(doltlite): verify source-built DoltLite backend
duncan4123 Jun 29, 2026
971099c
fix(config): recognize the types.* config namespace
techarles Jun 30, 2026
59a1633
cli: restore list include-ephemeral flag
duncan4123 Jun 30, 2026
04d7039
Merge pull request #20 from Wldc4rd/fix/recognize-types-config-prefix
duncan4123 Jun 30, 2026
a50bde3
Add DoltLite storage conformance coverage
duncan4123 Jul 3, 2026
501aa3f
fix(doltlite): guard unsupported git remotes
techarles Jul 4, 2026
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
45 changes: 45 additions & 0 deletions .gc/settings.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,45 @@
{
"awaySummaryEnabled": false,
"editorMode": "normal",
"enableAllProjectMcpServers": true,
"hooks": {
"PreCompact": [
{
"hooks": [
{
"command": "export PATH=\"$HOME/go/bin:$HOME/.local/bin:$PATH\" && gc handoff --auto \"context cycle\"",
"type": "command"
}
],
"matcher": ""
}
],
"SessionStart": [
{
"hooks": [
{
"command": "export PATH=\"$HOME/go/bin:$HOME/.local/bin:$PATH\" && GC_MANAGED_SESSION_HOOK=1 GC_HOOK_EVENT_NAME=SessionStart gc prime --hook --hook-format codex",
"type": "command"
}
],
"matcher": "startup"
}
],
"UserPromptSubmit": [
{
"hooks": [
{
"command": "export PATH=\"$HOME/go/bin:$HOME/.local/bin:$PATH\" && gc hook run --timeout 15s --timeout-exit-code 0 -- nudge drain --inject",
"type": "command"
},
{
"command": "export PATH=\"$HOME/go/bin:$HOME/.local/bin:$PATH\" && gc hook run --timeout 15s --timeout-exit-code 0 -- mail check --inject",
"type": "command"
}
],
"matcher": ""
}
]
},
"skipDangerousModePermissionPrompt": true
}
117 changes: 117 additions & 0 deletions .github/workflows/doltlite-linked.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,117 @@
name: DoltLite linked backend

on:
pull_request:
branches: [main]
paths:
- ".github/workflows/doltlite-linked.yml"
- "cmd/bd/**"
- "internal/configfile/**"
- "internal/storage/**"
- "go.mod"
- "go.sum"
- "Makefile"
- ".buildflags"
push:
branches:
- "gascity-doltlite-pin"
- "doltlite/**"
- "feat/doltlite/**"
- "fix/doltlite/**"
workflow_dispatch:
inputs:
doltlite_ref:
description: "DoltLite ref to build"
required: false
default: "master"

permissions:
contents: read

concurrency:
group: doltlite-linked-${{ github.event_name }}-${{ github.event.pull_request.number || github.ref || github.run_id }}
cancel-in-progress: true

env:
BD_DISABLE_METRICS: "1"
BD_DISABLE_EVENT_FLUSH: "1"
DOLTLITE_REF: ${{ inputs.doltlite_ref || 'master' }}

jobs:
source-built-doltlite:
name: Source-built DoltLite backend
runs-on: ubuntu-latest
steps:
- name: Checkout beads
uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v6
with:
fetch-depth: 0

- name: Checkout DoltLite
uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v6
with:
repository: dolthub/doltlite
ref: ${{ env.DOLTLITE_REF }}
path: doltlite-src

- name: Set up Go
uses: actions/setup-go@4a3601121dd01d1626a1e23e37211e3254c1c06c # v6
with:
go-version-file: "go.mod"

- name: Install native build dependencies
run: sudo apt-get update && sudo apt-get install -y build-essential tcl zlib1g-dev

- name: Build DoltLite from source
run: |
set -euo pipefail
mkdir -p doltlite-src/build
cd doltlite-src/build
../configure
make -j"$(nproc)" doltlite-lib doltlite
printf 'SELECT doltlite_engine();\n' | ./doltlite :memory:

- name: Test native DoltLite storage package
env:
DOLTLITE_LIB: ${{ github.workspace }}/doltlite-src/build
LD_LIBRARY_PATH: ${{ github.workspace }}/doltlite-src/build
run: make test-doltlite

- name: Build linked bd binary
env:
DOLTLITE_LIB: ${{ github.workspace }}/doltlite-src/build
LD_LIBRARY_PATH: ${{ github.workspace }}/doltlite-src/build
run: |
set -euo pipefail
mkdir -p artifacts
source ./.buildflags
CGO_ENABLED=1 \
CGO_LDFLAGS="-L${DOLTLITE_LIB} -Wl,-rpath,${DOLTLITE_LIB} -ldoltlite" \
go build -tags "libsqlite3 ${BEADS_BUILD_TAGS}" -o artifacts/bd-doltlite ./cmd/bd
./artifacts/bd-doltlite version

- name: Smoke test bd with DoltLite backend
env:
LD_LIBRARY_PATH: ${{ github.workspace }}/doltlite-src/build
BD_NON_INTERACTIVE: "1"
BD_DISABLE_METRICS: "1"
BD_DISABLE_EVENT_FLUSH: "1"
run: |
set -euo pipefail
workdir="$(mktemp -d)"
cd "$workdir"
git init -q
git config beads.role maintainer
export BEADS_DIR="$workdir/.beads"
"${GITHUB_WORKSPACE}/artifacts/bd-doltlite" init --backend doltlite --prefix dl --role maintainer --quiet --skip-hooks --skip-agents
"${GITHUB_WORKSPACE}/artifacts/bd-doltlite" create "DoltLite workflow smoke" --json
"${GITHUB_WORKSPACE}/artifacts/bd-doltlite" list --json
find .beads/doltlite -maxdepth 1 -name '*.db' -type f | grep -q .

- name: Upload linked bd artifact
uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7
with:
name: bd-doltlite-linux
path: artifacts/bd-doltlite
retention-days: 3
if-no-files-found: error
218 changes: 218 additions & 0 deletions .github/workflows/fork-doltlite-release.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,218 @@
name: Fork DoltLite Release

on:
push:
branches:
- "fork/doltlite-release-workflow"
- "fork/release/**"
workflow_dispatch:
inputs:
tag_name:
description: "Fork release tag to create or publish, e.g. v1.0.5-doltlite.2"
required: true
type: string
target_ref:
description: "Commit SHA, branch, or tag to build"
required: true
default: "main"
type: string
doltlite_version:
description: "DoltLite release library version"
required: true
default: "0.11.23"
type: string

concurrency:
group: fork-doltlite-release-${{ inputs.tag_name || github.ref_name }}
cancel-in-progress: false

permissions: {}

jobs:
fork-doltlite-release:
name: Fork DoltLite release
if: ${{ github.repository == 'duncan4123/beads-doltlite' }}
runs-on: ubuntu-latest
permissions:
contents: write
steps:
- name: Checkout target
uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v6
with:
ref: ${{ inputs.target_ref || github.ref }}
fetch-depth: 0

- name: Set up Go
uses: actions/setup-go@4a3601121dd01d1626a1e23e37211e3254c1c06c # v6
with:
go-version-file: go.mod

- name: Resolve fork release tag
id: release
env:
REQUESTED_TAG: ${{ inputs.tag_name || '' }}
TARGET_REF: ${{ inputs.target_ref || github.ref_name }}
run: |
set -euo pipefail

if [ -n "$REQUESTED_TAG" ]; then
TAG_NAME="$REQUESTED_TAG"
else
TAG_NAME="v0.0.0-doltlite.${GITHUB_RUN_NUMBER}"
fi

if ! [[ "$TAG_NAME" =~ ^v[0-9]+\.[0-9]+\.[0-9]+-doltlite\.[0-9]+$ ]]; then
echo "ERROR: tag must match vMAJOR.MINOR.PATCH-doltlite.N, got: $TAG_NAME" >&2
exit 1
fi

commit="$(git rev-parse HEAD)"
git fetch --force --tags origin

if git rev-parse -q --verify "refs/tags/$TAG_NAME" >/dev/null; then
tagged_commit="$(git rev-list -n 1 "$TAG_NAME")"
if [ "$tagged_commit" != "$commit" ]; then
echo "ERROR: tag $TAG_NAME points at $tagged_commit, not checked-out commit $commit from $TARGET_REF" >&2
exit 1
fi
echo "Using existing tag $TAG_NAME at $commit"
else
git config user.name "github-actions[bot]"
git config user.email "github-actions[bot]@users.noreply.github.com"
git tag -a "$TAG_NAME" -m "Release $TAG_NAME" "$commit"
git push origin "refs/tags/$TAG_NAME"
echo "Created tag $TAG_NAME at $commit"
fi

echo "tag=$TAG_NAME" >> "$GITHUB_OUTPUT"
echo "commit=$commit" >> "$GITHUB_OUTPUT"

- name: Download DoltLite release library
id: doltlite
env:
REQUESTED_DOLTLITE_VERSION: ${{ inputs.doltlite_version || '' }}
run: |
set -euo pipefail
DOLTLITE_VERSION="${REQUESTED_DOLTLITE_VERSION:-0.11.23}"
version="${DOLTLITE_VERSION#v}"
asset="doltlite-lib-linux-x64-${version}.zip"
base_url="https://github.com/dolthub/doltlite/releases/download/v${version}"
work_dir="${RUNNER_TEMP}/doltlite-lib/${version}"
zip_path="${work_dir}/${asset}"
lib_dir="${work_dir}/lib"
mkdir -p "$work_dir"

python3 - "$base_url/$asset" "$zip_path" <<'PY'
import os
import sys
import tempfile
import urllib.request

url, dest = sys.argv[1], sys.argv[2]
directory = os.path.dirname(dest)
fd, tmp = tempfile.mkstemp(prefix=".download-", dir=directory)
os.close(fd)
try:
with urllib.request.urlopen(url, timeout=120) as response:
with open(tmp, "wb") as out:
while True:
chunk = response.read(1024 * 1024)
if not chunk:
break
out.write(chunk)
os.replace(tmp, dest)
except Exception:
try:
os.unlink(tmp)
except OSError:
pass
raise
PY

rm -rf "$lib_dir"
python3 - "$zip_path" "$lib_dir" <<'PY'
import os
import shutil
import sys
import tempfile
import zipfile

zip_path, dest = sys.argv[1], sys.argv[2]
tmp = tempfile.mkdtemp(prefix="doltlite-lib-")
try:
with zipfile.ZipFile(zip_path) as archive:
archive.extractall(tmp)
entries = [os.path.join(tmp, name) for name in os.listdir(tmp)]
src = entries[0] if len(entries) == 1 and os.path.isdir(entries[0]) else tmp
os.makedirs(os.path.dirname(dest), exist_ok=True)
shutil.copytree(src, dest)
finally:
shutil.rmtree(tmp, ignore_errors=True)
PY

test -r "$lib_dir/doltlite.h"
test -r "$lib_dir/libdoltlite.a"
echo "lib_dir=$lib_dir" >> "$GITHUB_OUTPUT"

- name: Build bd-doltlite
env:
DOLTLITE_LIB: ${{ steps.doltlite.outputs.lib_dir }}
run: |
set -euo pipefail
mkdir -p artifacts
source ./.buildflags
CGO_ENABLED=1 \
CGO_CFLAGS="-I${DOLTLITE_LIB}" \
CGO_LDFLAGS="-L${DOLTLITE_LIB} ${DOLTLITE_LIB}/libdoltlite.a -lz -lpthread -lm" \
go build -tags "libsqlite3 ${BEADS_BUILD_TAGS}" -o artifacts/bd-doltlite-linux-amd64 ./cmd/bd
./artifacts/bd-doltlite-linux-amd64 version

- name: Smoke test bd with DoltLite backend
env:
BD_NON_INTERACTIVE: "1"
BD_DISABLE_METRICS: "1"
BD_DISABLE_EVENT_FLUSH: "1"
run: |
set -euo pipefail
workdir="$(mktemp -d)"
cd "$workdir"
git init -q
git config beads.role maintainer
export BEADS_DIR="$workdir/.beads"
"${GITHUB_WORKSPACE}/artifacts/bd-doltlite-linux-amd64" init --backend doltlite --prefix dl --role maintainer --quiet --skip-hooks --skip-agents
"${GITHUB_WORKSPACE}/artifacts/bd-doltlite-linux-amd64" create "DoltLite fork release smoke" --json
"${GITHUB_WORKSPACE}/artifacts/bd-doltlite-linux-amd64" list --json
find .beads/doltlite -maxdepth 1 -name '*.db' -type f | grep -q .

- name: Write checksums
run: |
set -euo pipefail
cd artifacts
sha256sum bd-doltlite-linux-amd64 > checksums.txt

- name: Publish fork release
env:
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
TAG_NAME: ${{ steps.release.outputs.tag }}
run: |
set -euo pipefail
if ! gh release view "$TAG_NAME" >/dev/null 2>&1; then
gh release create "$TAG_NAME" --title "bd $TAG_NAME" --notes "Fork DoltLite-linked bd release."
fi
gh release upload "$TAG_NAME" artifacts/bd-doltlite-linux-amd64 artifacts/checksums.txt --clobber

- name: Summarize fork release
env:
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
TAG_NAME: ${{ steps.release.outputs.tag }}
TARGET_COMMIT: ${{ steps.release.outputs.commit }}
run: |
set -euo pipefail
url="$(gh release view "$TAG_NAME" --json url --jq .url)"
{
echo "### Fork DoltLite release"
echo
echo "- Tag: \`$TAG_NAME\`"
echo "- Commit: \`$TARGET_COMMIT\`"
echo "- Release: $url"
} >> "$GITHUB_STEP_SUMMARY"
Loading