TuringDB Issues
TuringDB: possible issues
Status: draft, unfiled. Things observed while testing @turtape/sdk against a local TuringDB instance (via docker compose up -d, query API on localhost:6666) that look like bugs, stale docs, or packaging problems in TuringDB itself, not in turtape. Review each page before filing as an issue at turing-db/turingdb — none of these have been reported upstream yet.
Each page: repro, expected vs. actual, and how confident we are it's actually a TuringDB issue rather than us using it wrong.
Open items
-
EXISTSpredicate not implemented — likely just an unimplemented feature, not a bug. Confirmed still true onv1.37(2026-08-24 release;PARSE_ERROR: Not implemented: EXISTS). - Matching an unused label throws instead of returning empty — looks like a real deviation from openCypher semantics. Confirmed still present on
v1.37despite that release's MLIR label/edge-type constraint work (ANALYZE_ERROR: Unknown label: Xon a fresh graph, unchanged). -
HISTORYkeyword doesn't parse — useCALL db.history()instead — docs show a bareHISTORYkeyword that doesn't parse; not a version-drift artifact, looks wrong from the start. Confirmed still present onv1.37. - Without
-demon, writes are 500-5000x slower — runningturingdb startwithout-demon(as upstream's ownrun_visualizer.shdoes) turns an 0.1sCOMMIT/CHANGE SUBMITinto 8-10 minutes, pegging one HTTP worker thread at ~100% CPU. Root cause not fully diagnosed (no debugger in the runtime image), but the fix (-demon) is confirmed and repeatable. - Change tracking gets stuck (
CHANGE_NOT_FOUND) — after enough write traffic,CHANGE SUBMIT(then eventually everyCHANGEoperation) starts failing on changes that were just created, with no error logged anywhere. Root cause not confirmed, but a workaround is:CREATE GRAPH <throwaway-name>resets the stuck state without a container restart. Not re-tested againstv1.37— reproducing needs sustained write traffic, not a single query.
Resolved (kept for reference)
- Inline pattern filter +
count()crashes — fixed inv1.37(2026-08-24). InternalColumnMaskdispatch error used to leak a raw C++ type name; confirmed fixed by direct repro against the upgraded local image (MATCH (z:Zebra {name: "Marty"}) RETURN count(z)now returns the count instead ofEXEC_ERROR). Likely landed as a side effect of that release's MLIR aggregate/codegen work, not a targeted fix. - Commit not visible — not a bug:
COMMITalone doesn't merge into main,CHANGE SUBMITdoes. Originally also notedCHANGE SUBMITresponding very slowly; that turned out to be the-demonissue below , not inherent to the operation.
Docker image / CI / packaging, not the engine itself
-
nightlyDocker tag is stale — its build workflow has beendisabled_manuallysince ~June 2026, after several days of failing runs; the image is frozen ~3.5 months / 820 commits behindmain. -
latestimage breaks a Dockerfile written fornightly—ENTRYPOINTnow ignoresCMDentirely, runs as a non-root user, and exits immediately if stdin is closed. Fixed in this repo'sdocker/db.Dockerfileanddocker-compose.yml. - CLI reports version "1.0" — the
turingdbbinary shipped in the PyPI wheel has a hardcoded"1.0"version literal in its C++ source, disconnected from the real release version (1.37, correctly tracked on PyPI/GitHub via git tags). Confirmed still present onv1.37.
Environment
- Image: self-built (
docker/db.Dockerfile) —pip install turingdbfrom PyPI on apython:3.14-slimbase, notturingdbai/turingdb:latest/:nightly. Both official tags turned out to lagmainby months (see below), andlatest's ownENTRYPOINTbreaks a Dockerfile written fornightly— see the two entries below for details. The self-built image also runsturingdb start -demon(seecommit-cpu-hangabove), which the official images'run_visualizer.shdoes not. - Started via
docker compose up -dat repo root - Queried directly through
@turtape/sdk'squeryRaw()(packages/sdk), which just POSTs the Cypher string to the query API atlocalhost:6666 - Cross-checked several findings against
turing-db/turingdb'smainbranch source directly (not just the locally running image), given how stale both Docker tags turned out to be