taskstore: empirically derived golden path + smoke-tested pipeline #1
Loading…
Add table
Add a link
Reference in a new issue
No description provided.
Delete branch "taskstore-golden-path"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Replaces the documentation-assembled taskstore runtime with a sequence derived by running every step in a scratch container (beads 1.1.2 + dolt 2.1.4). Full command output evidence:
docs/taskstore-golden-path.md.What differed from the documentation
BEADS_DOLT_SERVER_MODE=1means externally-managed server, not "server mode" — with it set, bd refuses to start a server even with auto-start explicitly enabled, and init fails dialing127.0.0.1:0. Same forBEADS_DOLT_PORT/BEADS_DOLT_SERVER_PORT. This is what broke runtime attempt 3. Server mode is selected at init time (bd init --server) and persisted in.beads/metadata.json; noBEADS_DOLT_*env may ever be set.procps(pgrep/ps), documented nowhere — python:3.12-slim ships neither, and without them bd deletes its own PID/port state files while the server keeps running (status shows "not running, port 0", clients dial port 0, a second start collides with the dolt lock).bd initleaves a partial.beads/behind — so[ -d .beads ]is not an init guard. The only valid marker ismetadata.jsonwith"dolt_mode": "server"..beads/dolt-server.port— pinning 3307 anywhere both mismatches and triggers divergence 1.--prefix caimanmust be passed at first init — without it the prefix silently defaults to the directory name (workspace); the documented "demands a prefix" error is not reliable.bd dolt statusexits 0 even when the server is down — the health gate is a real SQL roundtrip (bd list --json), which fails hard exactly when it should because sessions run withdolt.auto-start: false.Auto-start verdict (both patterns tested): hybrid. Init needs auto-start ON (it bootstraps the server it initializes against). Immediately after,
dolt.auto-start: falseis written to.beads/config.yaml: from then on clients (kmcp-spawned sessions included) connect or fail loudly, and the entrypoint's explicit idempotentbd dolt startis the only sanctioned daemon launch. Verified: repeatbd dolt startis a no-op; a raw seconddolt sql-serveris refused by the directory lock without corruption.Migration note — existing PVC
The current PVC holds exactly one failed scratch init (partial
.beads/without server-mode metadata — reproduced and tested against). Wiping it is acceptable and is what the entrypoint does automatically: the guard detects the partial state, logswiping for reinit, and reinitializes server-mode with prefixcaiman. No manual PVC action needed; no data exists to migrate.Rollout
:x.y-rc, runs the in-image smoke test (init → status/where → create/ready/show → restart persistence → second-writer → MCP handshake), and only then promotes to the version tag +latestand prints the digest.kubectl -n caiman delete pod -l app.kubernetes.io/name=caiman-taskstore. A second replica would block on (and must never share) the dolt lock.base/caiman/taskstore-mcpserver.yaml.Validation done locally (rootless podman)
smoke-test: all six steps green🤖 Generated with Claude Code