一键导入
neumann-troubleshoot
Debug and troubleshoot Neumann issues. Use when encountering errors, performance problems, cluster issues, or unexpected query results.
用 Codex 或 Claude 帮你安装 复制这段 Prompt,粘贴到 Codex、Claude 或其他助手里,让它检查 Skill 页面并帮你完成安装。
菜单
Debug and troubleshoot Neumann issues. Use when encountering errors, performance problems, cluster issues, or unexpected query results.
用 Codex 或 Claude 帮你安装 复制这段 Prompt,粘贴到 Codex、Claude 或其他助手里,让它检查 Skill 页面并帮你完成安装。
基于 SOC 职业分类
Integrate Neumann database using official client SDKs. Use when writing Rust, Python, or TypeScript code that connects to Neumann, executes queries, or handles results.
Deploy and operate Neumann in production. Use when setting up single-node or cluster deployments, configuring Docker Compose or Kubernetes, or planning production infrastructure.
Model and query graph data in Neumann. Use when creating nodes and edges, traversing relationships, finding paths, running graph algorithms, or using Cypher-style queries.
Migrate data to Neumann from other databases. Use when moving data from PostgreSQL, MySQL, MongoDB, Neo4j, Pinecone, Redis, or other systems to Neumann.
Write correct Neumann database queries. Use when writing NODE, EDGE, EMBED, SIMILAR, ENTITY, VAULT, CACHE, BLOB, CHECKPOINT, CHAIN, or CLUSTER commands, or any Neumann SQL query.
Design Neumann data models using relational tables, graph nodes/edges, and vector embeddings. Use when planning a database schema or deciding which Neumann engines to use for a feature.
| name | neumann-troubleshoot |
| description | Debug and troubleshoot Neumann issues. Use when encountering errors, performance problems, cluster issues, or unexpected query results. |
Parse errors are the most common issue. The parser is strict and error messages point to the exact token that failed.
Neumann has 150+ reserved keywords. If a column name, node label, or edge type collides with a keyword, you get a parse error.
Symptoms: expected identifier, found keyword 'NODE' or similar.
Fix: Rename the identifier. Common collisions: node, edge, path, type,
status, key, value, name, index, limit, order, group, select,
table, set, delete, create, drop, insert, update.
NODE CREATE node { ... } -- WRONG: node is a keyword
NODE CREATE nd { ... } -- correct: renamed to nd
CREATE TABLE status (...) -- WRONG: status is a keyword
CREATE TABLE user_status (...) -- correct: prefixed
The parser splits tokens on :, -, and other punctuation.
EMBED STORE 'doc:1' [0.1, 0.2] -- correct
EMBED STORE doc:1 [0.1, 0.2] -- WRONG: 3 tokens (doc, :, 1)
NODE GET 'node-abc' -- correct
NODE GET node-abc -- WRONG: parsed as node minus abc
The parser only accepts OUTGOING, INCOMING, BOTH.
NEIGHBORS 'n1' OUTGOING -- correct
NEIGHBORS 'n1' OUT -- WRONG: OUT is not a direction keyword
NEIGHBORS 'n1' IN -- WRONG: IN means SQL IN operator
SIMILAR [0.1, 0.2] LIMIT 5 -- correct
SIMILAR TO [0.1, 0.2] LIMIT 5 -- WRONG: no TO keyword
SIMILAR [0.1, 0.2] BY COSINE -- WRONG: use METRIC, not BY
NODE CREATE person { name: 'Alice' } -- correct
NODE CREATE person name: 'Alice' -- WRONG: missing braces
NODE CREATE person { name: 'Alice', age: 30 } -- correct (colon)
NODE CREATE person { name = 'Alice' } -- WRONG: use colon, not equals
EDGE CREATE 'a' -> 'b' : knows -- correct
EDGE CREATE 'a' 'b' knows -- WRONG: missing -> and :
EDGE CREATE (a)-[:knows]->(b) -- WRONG: that is Cypher, use EDGE syntax
| Service | Default Port | Protocol |
|---|---|---|
| gRPC API | 9200 | HTTP/2 (gRPC) |
| Raft consensus | 9300 | TCP (length-prefixed frames) |
Symptom: Address already in use on startup.
Fix: Check what is using the port:
lsof -i :9200
lsof -i :9300
Kill the conflicting process or change the Neumann bind address via
NEUMANN_BIND_ADDR environment variable.
grpcurl -plaintext localhost:9200 grpc.health.v1.Health/Check
Expected response: { "status": "SERVING" }.
If TLS is enabled, use the correct certificate:
grpcurl -cacert ca.pem -cert client.pem -key client-key.pem localhost:9200 grpc.health.v1.Health/Check
If API key authentication is enabled, include the key in metadata:
grpcurl -plaintext -H 'authorization: Bearer <api-key>' localhost:9200 neumann.QueryService/Query
Check for missing indexes:
DESCRIBE users -- shows column types but not indexes
SHOW TABLES -- verify table exists
SHOW VECTOR INDEX -- check if HNSW index is built
GRAPH INDEX SHOW NODE -- check graph property indexes
GRAPH INDEX SHOW EDGE -- check edge property indexes
Common fixes:
CREATE INDEX idx_name ON table (column)EMBED BUILD INDEX (must be run after inserts)GRAPH INDEX CREATE NODE PROPERTY prop_nameIf SIMILAR is slow, the HNSW index likely was not built or is stale:
SHOW VECTOR INDEX
EMBED BUILD INDEX
Check embedding count -- each embedding consumes memory proportional to its dimensionality:
COUNT EMBEDDINGS
Check node/edge counts:
GRAPH AGGREGATE COUNT NODES
GRAPH AGGREGATE COUNT EDGES
Always use LIMIT to bound result sizes:
SIMILAR [0.1, 0.2] LIMIT 10 -- bounded
NODE LIST person LIMIT 100 -- bounded
SELECT * FROM users LIMIT 1000 -- bounded
Symptom: Two nodes both claim to be leader, or queries return different results depending on which node is queried.
Diagnose:
CLUSTER STATUS
CLUSTER LEADER
CLUSTER NODES
Compare commit indices across nodes. The node with the higher commit index has more up-to-date data. The other node likely lost connectivity and elected itself.
Fix: Restart the minority-side node. It will rejoin the cluster and replicate from the true leader.
Symptom: CLUSTER LEADER returns no leader or times out.
Causes:
Quorum requirements:
| Cluster Size | Quorum | Can Tolerate Failures |
|---|---|---|
| 3 | 2 | 1 |
| 5 | 3 | 2 |
| 7 | 4 | 3 |
Symptom: Writes on the leader are not immediately visible on followers.
This is normal in an eventually-consistent read path. For strong consistency, read from the leader. For followers, wait briefly or verify via:
CLUSTER STATUS
Check that commit_index on followers is close to the leader's.
Verify:
NEUMANN_CLUSTER_PEERS includes all peer addresses in node_id=IP:port format.NEUMANN_CLUSTER_NODE_ID is unique across all nodes.Check you are querying the right engine:
SELECT * FROM table WHERE ...NODE GET 'id' or NODE LIST labelEMBED GET 'key'ENTITY GET 'key'A common mistake is inserting into one engine and querying another.
CHAIN VERIFY
BLOB VERIFY 'blob-id'
CHECKPOINTS -- list available checkpoints
CHECKPOINTS LIMIT 5 -- show last 5
ROLLBACK TO 'checkpoint-id' -- restore to a checkpoint
If the write-ahead log is corrupted, start Neumann with a fresh WAL directory.
Data persisted in checkpoints is still recoverable via ROLLBACK TO.
Set the RUST_LOG environment variable to control log verbosity.
Levels: error, warn, info, debug, trace.
# All modules at info level
RUST_LOG=info neumann
# Specific module at debug level
RUST_LOG=query_router=debug neumann
# Multiple modules at different levels
RUST_LOG=tensor_chain=debug,query_router=trace,tensor_store=info neumann
# Everything at trace (very verbose)
RUST_LOG=trace neumann
Useful module targets for debugging:
query_router -- query parsing and routingtensor_chain -- Raft consensus and chain operationstensor_store -- storage operationsvector_engine -- HNSW index and similarity searchgraph_engine -- graph traversal and algorithmsneumann_server -- gRPC request handlingWhen filing an issue, include:
--version).RUST_LOG=debug to capture details).