MemPalace/mempalace · error · UnsupportedSourceAdapterProtocolError
source adapter {adapter_name!r} requires incremental ingesti
Error message
source adapter {adapter_name!r} requires incremental ingestion, which mempalace mine does not support yet What it means
Raised by `mempalace mine` when the resolved source adapter declares the `supports_incremental` capability. The `mine` command implements only snapshot/batch ingestion; adapters that require incremental (stateful, cursor-based) ingestion are explicitly refused rather than run incorrectly, which would silently skip or duplicate content.
Source
Thrown at mempalace/cli.py:955
DrawerRecord,
PalaceContext,
SourceRef,
SourceItemMetadata,
get_adapter,
resolve_adapter_for_source,
)
adapter_name = resolve_adapter_for_source(explicit=source_name)
try:
adapter = get_adapter(adapter_name)
except KeyError as exc:
raise UnknownSourceAdapterError(
f"unknown source adapter {adapter_name!r}; install its adapter package or "
"check the adapter name with `mempalace mine --help`"
) from exc
if "supports_incremental" in adapter.capabilities:
raise UnsupportedSourceAdapterProtocolError(
f"source adapter {adapter_name!r} requires incremental ingestion, which "
"mempalace mine does not support yet"
)
# A dry run must never open a collection: backend opens can create or
# repair storage even when requested as read-only. Non-dry runs hold one
# writer lease from handle creation through adapter iteration, including
# direct KG mutations by adapters.
lock = mine_palace_lock(palace_path) if not dry_run else contextlib.nullcontext()
with lock:
knowledge_graph = None
try:
if dry_run:
drawer_collection = _DryRunCollectionProxy()
knowledge_graph = _DryRunKnowledgeGraphProxy()
else:
drawer_collection = get_collection(palace_path)
knowledge_graph = KnowledgeGraph(View on GitHub (pinned to 06cb6987f0)
Solutions
- Use the command/entrypoint designed for that source (its incremental ingest path) instead of `mempalace mine`.
- If you control the adapter and it can do a full snapshot, remove `supports_incremental` from its capabilities so mine accepts it.
- Check `mempalace --help` / docs for the incremental ingestion command for your source.
- If you need this now, file/track the feature — mine gaining incremental support removes the guard.
Example fix
# before: custom adapter
class MyAdapter:
capabilities = {"supports_incremental"} # mine refuses it
# after: adapter supports full snapshot mining
class MyAdapter:
capabilities = set() # `mempalace mine --source mysource` now works Defensive patterns
Strategy: validation
Validate before calling
from mempalace.adapters import get_adapter
def adapter_mineable(name) -> bool:
adapter = get_adapter(name) # raises KeyError if unknown
return "supports_incremental" not in adapter.capabilities Try / catch
try:
run_mine(source=name, ...)
except UnsupportedSourceAdapterProtocolError as e:
raise SystemExit(f"{e}. Use this source's incremental ingestion command instead of `mempalace mine`.") from e Prevention
- Check the adapter's capabilities before scripting `mine` against it.
- For custom adapters, only declare supports_incremental if you truly need cursors.
- Track mempalace release notes for incremental-ingest support in `mine`.
When it happens
Trigger: Running `mempalace mine --source <name>` where the adapter's `capabilities` set contains `"supports_incremental"` — e.g. mailbox or chat-history adapters that track cursors. Any mine invocation against such an adapter fails before a collection is opened.
Common situations: Pointing the generic mine command at an incremental-only source; writing/selecting a custom adapter and adding `supports_incremental` to its capabilities; upgrading to a version where an adapter switched to the incremental protocol.
Related errors
- unknown source adapter {adapter_name!r}; install its adapter
- qdrant backend requires a local palace path to anchor mismat
- daemon is not running
- daemon is not running; job {args.job_id} is {job['state']}
- pass inline text or a file, not both
AI-assisted analysis of MemPalace/mempalace@06cb6987f0 (2026-08-15).
Data as JSON: /api/errors/7b1da2c1ab246760.
Report an issue: GitHub.