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

  1. Use the command/entrypoint designed for that source (its incremental ingest path) instead of `mempalace mine`.
  2. If you control the adapter and it can do a full snapshot, remove `supports_incremental` from its capabilities so mine accepts it.
  3. Check `mempalace --help` / docs for the incremental ingestion command for your source.
  4. 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

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


AI-assisted analysis of MemPalace/mempalace@06cb6987f0 (2026-08-15). Data as JSON: /api/errors/7b1da2c1ab246760. Report an issue: GitHub.