Troubleshooting¶
Start with observation, not cleanup. Keep the vault intact until you know whether the problem is configuration, daemon lifecycle, source-file access, or stored data.
If a command prints a specific error, preserve it. CLI errors go to stderr and
return a non-zero status; HTTP errors include a machine-readable code.
The daemon will not start¶
Run it in the foreground to see the startup error directly:
Common causes:
config.tomlcontains an unknown key, invalid duration, or non-loopback bind address. The daemon rejects these rather than guessing.- Another process owns the same vault. Check
docbank daemon status; do not removevault.lockwhile a daemon may still be alive. - The configured port is already in use. Set
api_port = 0to let the OS choose one, or choose another fixed port.
Background daemon logs are JSON files under $DOCBANK_HOME/logs/. A data
command normally repairs stale runtime records and replaces an incompatible
daemon automatically; daemon status and daemon stop intentionally do not
start anything.
A command cannot connect¶
First ask the CLI to converge the daemon explicitly:
If restart fails, use foreground mode. If it succeeds but a raw HTTP client
still fails, confirm that the client uses the daemon's actual address and
effective API key. With api_port = 0 or an empty configured key, both change
when the daemon restarts; the docbank CLI discovers them automatically, but an
independent client does not.
For a stable integration, configure a fixed loopback port and API key as shown in the Agent Integration Guide.
Import completed with failures¶
docbank add continues past unreadable files inside a directory and reports
each failure. Its exit status is non-zero if any file failed, even when other
files were added successfully.
Fix source permissions or availability, then rerun the same command. Already imported content is skipped, so a rerun converges instead of duplicating the successful portion.
A missing or unreadable top-level argument is reported as a failed source, and the command continues with any remaining arguments. Symlinks and non-regular files are intentionally skipped; import the regular target file explicitly if it belongs in the vault.
Search cannot find document text¶
Search indexes live node names and current supported text contents. Remember that each term is a prefix match, and inspect the extractor job:
Body indexing currently requires verified UTF-8 text/*, JSON, or JSONL no
larger than 16 MiB. It is asynchronous and may take a few seconds after ingest
or replacement. PDF, office-document, OCR, invalid-UTF-8, NUL-containing, and
larger content is not indexed; filename search still works. See
Searching for the exact contract.
Transient blob open, read, and verification failures remain queued and are retried by the running extractor. Repair or restore unavailable content, then retry search after the worker has completed a verified read.
A move or restore conflicts¶
The CLI never overwrites a live file. Moving onto an existing file returns
name already exists; choose another destination or move into an existing
directory to retain the source name.
Restore handles name reuse automatically by adding a numeric suffix. If its
original parent was permanently removed, it restores at /. Use the path
printed by docbank restore rather than assuming the old path returned.
HTTP clients must also distinguish:
409 existsorcycle: the requested tree state is invalid; choose a new action.412 stale_revision: another mutation won; re-read the node and reconsider the action before retrying.428 precondition_required: read the target node or tag again and send its current revision inIf-Match.
Verify reports a problem¶
verify classifies each affected hash:
| Result | Meaning | First response |
|---|---|---|
missing |
The catalog references bytes that cannot be found. | Stop maintenance and locate a known-good snapshot. |
corrupt |
Bytes are readable but no longer match their SHA-256 identity. | Preserve the vault and restore that content from a known-good copy. |
unreadable |
The storage layer returned an I/O or permission error. | Check mounts, permissions, and system logs before retrying. |
Do not run gc --run as a repair tool. GC removes unreachable data; it does
not repair referenced content. Preserve the affected vault, record the full
verify output, and restore from a snapshot only after identifying which copy
is known-good.
GC reclaimed fewer bytes than expected¶
Packed blobs are immutable members of pack files. GC can remove their catalog
authority, but that only makes their stored ranges logically dead; physical
pack space remains until docbank storage repack selects and retires the
sparse source pack. The report separates
pending_packed_bytes from loose bytes actually reclaimable so logical
deletion is not presented as disk reclamation.
Update fails¶
docbank update requires a published release with a matching SHA-256 checksum.
It refuses unverifiable assets. An install failure attempts to restart the old
daemon; inspect docbank daemon status afterward and use daemon run if it is
not healthy.
--force does not bypass checksum verification. It refreshes release metadata
and permits replacing an unversioned development build.
HTTP returns 401¶
Every /api/v1 request requires an effective API key, even when
api_key = "" in config—the empty setting means “generate a per-run key.” Use
exactly one of:
The health check, ping, interactive API docs, and OpenAPI documents are
auth-exempt. A successful /health response therefore proves reachability,
not authenticated access.
Before asking for help¶
Capture the version, daemon status, failing command or request, and relevant log lines. Remove API keys, shutdown tokens, document contents, and private paths before sharing them.
docbank version is newer than v0.7.0; use a source build until the next
release is published.