OpenBMB/ChatDev · error · RegistryError

Entry '{name}' is not an EdgeConditionRegistration

Error message

Entry '{name}' is not an EdgeConditionRegistration

What it means

The registry entry stored under the requested condition type name did not load into an EdgeConditionRegistration. This means the registry contains a foreign or corrupted entry — the type name resolves, but to the wrong object type.

Source

Thrown at runtime/edge/conditions/registry.py:61

    if name in edge_condition_registry.names():
        raise RegistryError(f"Edge condition type '{name}' already registered")
    entry = EdgeConditionRegistration(
        name=name,
        config_cls=config_cls,
        manager_cls=manager_cls,
        summary=summary,
    )
    edge_condition_registry.register(name, target=entry)
    register_edge_condition_schema(name, config_cls=config_cls, summary=summary)


def get_edge_condition_registration(name: str) -> EdgeConditionRegistration:
    """Retrieve a registered condition type."""
    _ensure_builtins_loaded()
    entry: RegistryEntry = edge_condition_registry.get(name)
    registration = entry.load()
    if not isinstance(registration, EdgeConditionRegistration):
        raise RegistryError(f"Entry '{name}' is not an EdgeConditionRegistration")
    return registration


def iter_edge_condition_registrations() -> Dict[str, EdgeConditionRegistration]:
    """Iterate over registered condition types."""
    _ensure_builtins_loaded()
    return {name: entry.load() for name, entry in edge_condition_registry.items()}


def build_edge_condition_manager(
    condition: "EdgeConditionConfig",
    context: ConditionFactoryContext,
    execution_context: ExecutionContext
) -> "EdgeConditionManager[Any]":
    """Instantiate the manager responsible for a specific edge."""
    registration = get_edge_condition_registration(condition.type)
    manager_cls = registration.manager_cls
    if not manager_cls:

View on GitHub (pinned to 4fb2db0ea9)

Solutions

  1. Always register via register_edge_condition, never by mutating edge_condition_registry directly
  2. Check what edge_condition_registry.get(name).load() actually returns for that name
  3. If caused by upgrade, reinstall matching versions of the runtime package so EdgeConditionRegistration is a single class
Defensive patterns

Strategy: try-catch

Validate before calling

from runtime.edge.conditions.registry import iter_edge_condition_registrations
assert 'mycond' in iter_edge_condition_registrations()

Try / catch

try:
    mgr = build_edge_condition_manager(cond, ctx, ec)
except RegistryError as e:
    logger.error('bad condition registration: %s', e)
    raise

Prevention

When it happens

Trigger: Registering into edge_condition_registry directly (bypassing register_edge_condition) with a non-EdgeConditionRegistration target, or a name shadowed by another registry sharing the same backing store; then calling get_edge_condition_registration(name) or build_edge_condition_manager with that name.

Common situations: Plugins writing raw entries into the shared registry; version skew where the registration class was moved/redefined so isinstance fails after a partial upgrade; pickling/entrypoint-based registrations that resolve to a different class.

Related errors


AI-assisted analysis of OpenBMB/ChatDev@4fb2db0ea9 (2026-08-27). Data as JSON: /api/errors/2d636e9233908cba. Report an issue: GitHub.