Skip to content

symfonic.diagnostics.checks.check_orchestrator_layers

check_orchestrator_layers

Orchestrator-layer audit (v7.16, item 5).

Flags adopters who set FrameworkConfig.enabled_layers (or the legacy OrchestratorConfig.enabled_layers) such that EPISODIC or SEMANTIC is missing. Both layers are load-bearing for hydration -- omitting them silently disables long-term recall while leaving the agent appearing healthy.

The check inspects the FINAL synced config (agent._orchestrator.config.enabled_layers) because the engine syncs FrameworkConfig.enabled_layers into the orchestrator at construction time -- FrameworkConfig.orchestrator.enabled_layers itself remains at its default (frozen Pydantic) while the synced copy is held only by the live MemoryOrchestrator. Reading the post-sync source of truth catches both the new FrameworkConfig.enabled_layers and the older OrchestratorConfig.enabled_layers codepaths.

check_orchestrator_layers async

check_orchestrator_layers(
    agent: SymfonicAgent,
) -> list[CheckResult]

Flag missing EPISODIC / SEMANTIC in enabled_layers.

Source code in src/symfonic/diagnostics/checks/check_orchestrator_layers.py
async def check_orchestrator_layers(
    agent: SymfonicAgent,
) -> list[CheckResult]:
    """Flag missing ``EPISODIC`` / ``SEMANTIC`` in ``enabled_layers``."""
    orchestrator = getattr(agent, "_orchestrator", None)
    orchestrator_config = getattr(orchestrator, "config", None)
    enabled = getattr(orchestrator_config, "enabled_layers", None)
    if enabled is None:
        # Defensive: a custom MemoryOrchestrator subclass that drops the
        # field is unusual but not catastrophic; skip silently.
        return []

    missing = [layer for layer in _LOAD_BEARING_LAYERS if layer not in enabled]
    if not missing:
        return []

    names = ", ".join(layer.value for layer in missing)
    return [
        CheckResult(
            name="orchestrator_layers.missing_load_bearing",
            severity=Severity.ERROR,
            message=(
                f"OrchestratorConfig.enabled_layers is missing "
                f"load-bearing layer(s): {names}.  Long-term recall will "
                "silently degrade to empty context."
            ),
            fix_hint=(
                "Add the missing layers to "
                "FrameworkConfig.enabled_layers (default includes all "
                "five Pentad layers)."
            ),
        ),
    ]