HKUDS/Vibe-Trading · error · RegistryError

: no source path recorded

Error message

{alpha_id}: no source path recorded

What it means

Raised by FactorRegistry.get_source when the alpha_id exists in the registry but no Python source path was recorded for it. The registry stores a mapping of alpha ids to .py file paths; if that entry is missing, the source cannot be retrieved. It usually indicates the alpha was registered without filesystem-backed source discovery.

Solutions

  1. Check registry.health() to confirm the alpha loaded and inspect how it was registered
  2. Ensure the registry is constructed with filesystem source discovery enabled so _py_paths is populated
  3. Rebuild/reload the registry from the zoo directory before calling get_source

Example fix

// before
src = registry.get_source('alpha_008')
// after
if registry.has_source('alpha_008'):
    src = registry.get_source('alpha_008')
else:
    src = inspect.getsource(importlib.import_module(module_path))
Defensive patterns

Strategy: validation

Validate before calling

py_path = registry._py_paths.get(alpha_id) if hasattr(registry, '_py_paths') else None
if py_path is None:
    logger.warning('no source recorded; falling back to inspect')

Try / catch

try:
    src = registry.get_source(alpha_id)
except RegistryError:
    src = inspect.getsource(importlib.import_module(registry.get(alpha_id).module_path))

Prevention

When it happens

Trigger: Calling get_source(alpha_id) or get_alpha(alpha_id, include_source=True) for an alpha registered from an installed package (no _py_paths entry), or after a partial registry load that skipped source-path collection.

Common situations: Registry built with filesystem loader disabled; alpha registered programmatically rather than scanned from disk; source files moved/deleted between registration and lookup.

Related errors


AI-assisted analysis of HKUDS/Vibe-Trading@80ffdda44c (2026-08-28). Data as JSON: /api/errors/308e00d15e16b77e. Report an issue: GitHub.

Appendix: source

Thrown at agent/src/factors/registry.py:298

        return sorted(out)

    def get(self, alpha_id: str) -> Alpha:
        if alpha_id not in self._alphas:
            raise KeyError(f"alpha_id {alpha_id!r} not in registry")
        return self._alphas[alpha_id]

    def get_source(self, alpha_id: str) -> str:
        """Return the raw .py source of a registered alpha (size-capped).

        Raises:
            KeyError: alpha_id unknown.
            RegistryError: source file exceeds ``_MAX_PY_BYTES`` or cannot be read.
        """
        if alpha_id not in self._alphas:
            raise KeyError(f"alpha_id {alpha_id!r} not in registry")
        py_path = self._py_paths.get(alpha_id)
        if py_path is None:
            raise RegistryError(f"{alpha_id}: no source path recorded")
        try:
            size = py_path.stat().st_size
        except OSError as exc:
            raise RegistryError(f"{alpha_id}: cannot stat source: {exc}") from exc
        if size > _MAX_PY_BYTES:
            raise RegistryError(
                f"{alpha_id}: source {size}B exceeds {_MAX_PY_BYTES}B cap"
            )
        try:
            return py_path.read_text(encoding="utf-8")
        except OSError as exc:
            raise RegistryError(f"{alpha_id}: cannot read source: {exc}") from exc

    def health(self) -> dict[str, Any]:
        return {
            "loaded": len(self._alphas),
            "failed": len(self._load_errors),
            "errors": [

View on GitHub (pinned to 80ffdda44c)