Ctrl K
ComunidadGuías…

butler_deps.dot

Rama main · réplica de lectura del repositorio original.

Archivo original ↗Preguntar a KiBot
digraph ButlerDeps {
  rankdir=LR;
  node [shape=box, style=filled];
  graph [fontsize=12, label="Butler Module Dependencies"];

  subgraph cluster_Cross_Cutting {
    label="Cross-Cutting";
    style=filled;
    fillcolor="#e0bbff";
    nodesep=0.3;
    ranksep=0.5;
    "configuration.context" [label="context"];
    "configuration.context_ops" [label="context_ops"];
    "configuration.gateway_ops" [label="gateway_ops"];
    "configuration.memory_ops" [label="memory_ops"];
    "configuration.provider_presets" [label="provider_presets"];
    "configuration.provider_presets_ops" [label="provider_presets_ops"];
    "configuration.secrets" [label="secrets"];
    "configuration.secrets_crypto" [label="secrets_crypto"];
    "configuration.secrets_ops" [label="secrets_ops"];
    "configuration.service" [label="service"];
    "configuration.settings" [label="settings"];
    "configuration.settings_ops" [label="settings_ops"];
    "contracts" [label="contracts"];
    "contracts.approval_registry" [label="approval_registry"];
    "contracts.approval_store_impl" [label="approval_store_impl"];
    "contracts.completion_registry" [label="completion_registry"];
    "contracts.gateway_registry" [label="gateway_registry"];
    "contracts.health_diagnostic_ports" [label="health_diagnostic_ports"];
    "contracts.health_diagnostic_registry" [label="health_diagnostic_registry"];
    "contracts.inbound_idempotency_registry" [label="inbound_idempotency_registry"];
    "contracts.sink_registry" [label="sink_registry"];
    "contracts.tool_dispatch_ports" [label="tool_dispatch_ports"];
    "contracts.tool_dispatch_registry" [label="tool_dispatch_registry"];
    "contracts.tool_registry_registry" [label="tool_registry_registry"];
    "contracts.workflow_gate_impl" [label="workflow_gate_impl"];
    "contracts.workflow_gate_registry" [label="workflow_gate_registry"];
    "project" [label="project"];
    "project.archetypes" [label="archetypes"];
    "project.lead" [label="lead"];
    "project.manager" [label="manager"];
    "project.manager_ops" [label="manager_ops"];
    "project.maturity" [label="maturity"];
    "project.maturity_ops" [label="maturity_ops"];
    "project.meta" [label="meta"];
    "project.model" [label="model"];
    "project.plugins" [label="plugins"];
    "project.policy_env" [label="policy_env"];
    "project.preflight" [label="preflight"];
    "project.preflight_ops" [label="preflight_ops"];
    "project.worktree" [label="worktree"];
    "project.worktree_ops" [label="worktree_ops"];
    "registry" [label="registry"];
    "registry.audit" [label="audit"];
    "registry.catalog_integrity" [label="catalog_integrity"];
    "registry.hub_index_cache" [label="hub_index_cache"];
    "registry.hub_manifest" [label="hub_manifest"];
    "registry.hub_manifest_ops" [label="hub_manifest_ops"];
    "registry.install_pending" [label="install_pending"];
    "registry.install_scan" [label="install_scan"];
    "registry.install_scan_ops" [label="install_scan_ops"];
    "registry.marketplace_compat" [label="marketplace_compat"];
    "registry.marketplace_compat_ops" [label="marketplace_compat_ops"];
    "registry.mcp_catalog" [label="mcp_catalog"];
    "registry.mcp_catalog_ops" [label="mcp_catalog_ops"];
    "registry.mcp_catalog_remote" [label="mcp_catalog_remote"];
    "registry.mcp_install" [label="mcp_install"];
    "registry.mcp_install_ops" [label="mcp_install_ops"];
    "registry.mcp_merge" [label="mcp_merge"];
    "registry.mcp_merge_ops" [label="mcp_merge_ops"];
    "registry.mcp_project_tools" [label="mcp_project_tools"];
    "registry.mcp_project_tools_ops" [label="mcp_project_tools_ops"];
    "registry.mcp_ssot" [label="mcp_ssot"];
    "registry.paths" [label="paths"];
    "registry.registry_errors" [label="registry_errors"];
    "registry.registry_paths_ops" [label="registry_paths_ops"];
    "registry.skill_install" [label="skill_install"];
    "registry.skill_lock" [label="skill_lock"];
    "registry.skill_service" [label="skill_service"];
    "registry.skill_service_ops" [label="skill_service_ops"];
    "registry.skill_sources" [label="skill_sources"];
    "registry.skill_sources.base" [label="base"];
    "registry.skill_sources.bundled" [label="bundled"];
    "registry.skill_sources.bundled_ops" [label="bundled_ops"];
    "registry.skill_sources.clawhub" [label="clawhub"];
    "registry.skill_sources.github" [label="github"];
    "registry.skill_sources.lobehub" [label="lobehub"];
    "registry.skill_sources.lobehub_ops" [label="lobehub_ops"];
    "registry.skill_sources.marketplace" [label="marketplace"];
    "registry.skill_sources.marketplace_ops" [label="marketplace_ops"];
    "registry.skill_sources.project" [label="project"];
    "registry.skill_sources.url" [label="url"];
    "registry.skill_sources.url_ops" [label="url_ops"];
    "registry.skills_project_sync" [label="skills_project_sync"];
    "registry.skills_project_sync_ops" [label="skills_project_sync_ops"];
    "registry.skills_ssot" [label="skills_ssot"];
    "registry.url_safety" [label="url_safety"];
    "runtime" [label="runtime"];
    "runtime.approval" [label="approval"];
    "runtime.async_delegate" [label="async_delegate"];
    "runtime.async_delegate_ops" [label="async_delegate_ops"];
    "runtime.audit" [label="audit"];
    "runtime.builtin_handlers" [label="builtin_handlers"];
    "runtime.cc_bridge" [label="cc_bridge"];
    "runtime.cc_bridge_ops" [label="cc_bridge_ops"];
    "runtime.consistency_outcome" [label="consistency_outcome"];
    "runtime.delegate_async_result" [label="delegate_async_result"];
    "runtime.delegate_job" [label="delegate_job"];
    "runtime.delegate_job_body" [label="delegate_job_body"];
    "runtime.delegate_job_finalize" [label="delegate_job_finalize"];
    "runtime.delegate_job_finalize_ops" [label="delegate_job_finalize_ops"];
    "runtime.delegate_progress" [label="delegate_progress"];
    "runtime.delegate_progress_ops" [label="delegate_progress_ops"];
    "runtime.delegate_registry" [label="delegate_registry"];
    "runtime.delegate_registry_ops" [label="delegate_registry_ops"];
    "runtime.diagnostics" [label="diagnostics"];
    "runtime.diagnostics_ops" [label="diagnostics_ops"];
    "runtime.failure_tracker" [label="failure_tracker"];
    "runtime.failure_tracker_ops" [label="failure_tracker_ops"];
    "runtime.loader" [label="loader"];
    "runtime.notify" [label="notify"];
    "runtime.push_queue" [label="push_queue"];
    "runtime.runner" [label="runner"];
    "runtime.service" [label="service"];
    "runtime.service_ops" [label="service_ops"];
    "runtime.summary_enrich" [label="summary_enrich"];
    "runtime.task_store" [label="task_store"];
    "runtime.workflow_version" [label="workflow_version"];
    "tools.registry" [label="registry"];
    "utilities.env_parse" [label="env_parse"];
    "utilities.logging_config" [label="logging_config"];
    "utilities.tenant" [label="tenant"];
  }

  subgraph cluster_L1_Gateway {
    label="L1-Gateway";
    style=filled;
    fillcolor="#a8d8ea";
    nodesep=0.3;
    ranksep=0.5;
    "cli" [label="cli"];
    "cli.architecture_cli" [label="architecture_cli"];
    "cli.blackboard_cli" [label="blackboard_cli"];
    "cli.chat_cli" [label="chat_cli"];
    "cli.cost_cli" [label="cost_cli"];
    "cli.doctor" [label="doctor"];
    "cli.doctor_sections" [label="doctor_sections"];
    "cli.eval_cli" [label="eval_cli"];
    "cli.events_cli" [label="events_cli"];
    "cli.experiment_cli" [label="experiment_cli"];
    "cli.gateway_cli" [label="gateway_cli"];
    "cli.mcp_catalog_cli" [label="mcp_catalog_cli"];
    "cli.mcp_cli" [label="mcp_cli"];
    "cli.memory_cli" [label="memory_cli"];
    "cli.memory_cli_ops" [label="memory_cli_ops"];
    "cli.onboard_cli" [label="onboard_cli"];
    "cli.projects_cli" [label="projects_cli"];
    "cli.prompt_eval_cli" [label="prompt_eval_cli"];
    "cli.provider_presets_cli" [label="provider_presets_cli"];
    "cli.registry_cli" [label="registry_cli"];
    "cli.runtime_cli" [label="runtime_cli"];
    "cli.secrets_cli" [label="secrets_cli"];
    "cli.session_ui" [label="session_ui"];
    "cli.sessions_cli" [label="sessions_cli"];
    "cli.skills_registry" [label="skills_registry"];
    "cli.skills_registry_ops" [label="skills_registry_ops"];
    "cli.slash_dispatch" [label="slash_dispatch"];
    "cli.slash_dispatch_ops" [label="slash_dispatch_ops"];
    "cli.stream" [label="stream"];
    "cli.transcript_cli" [label="transcript_cli"];
    "cli.workflow_cli" [label="workflow_cli"];
    "configuration.gateway" [label="gateway"];
    "gateway" [label="gateway"];
    "gateway.approval_cards" [label="approval_cards"];
    "gateway.bot_loop_guard" [label="bot_loop_guard"];
    "gateway.bot_loop_guard_ops" [label="bot_loop_guard_ops"];
    "gateway.command_registry" [label="command_registry"];
    "gateway.commands" [label="commands"];
    "gateway.commands.cc_bridge_commands" [label="cc_bridge_commands"];
    "gateway.commands.dev_commands" [label="dev_commands"];
    "gateway.commands.dev_handlers" [label="dev_handlers"];
    "gateway.commands.dev_handlers_ops" [label="dev_handlers_ops"];
    "gateway.commands.dialog_commands" [label="dialog_commands"];
    "gateway.commands.dialog_commands_ops" [label="dialog_commands_ops"];
    "gateway.commands.experience_commands" [label="experience_commands"];
    "gateway.commands.experience_commands_ops" [label="experience_commands_ops"];
    "gateway.commands.export_handlers" [label="export_handlers"];
    "gateway.commands.help_handlers" [label="help_handlers"];
    "gateway.commands.help_handlers_ops" [label="help_handlers_ops"];
    "gateway.commands.info_commands" [label="info_commands"];
    "gateway.commands.info_commands_ops" [label="info_commands_ops"];
    "gateway.commands.lifecycle_commands" [label="lifecycle_commands"];
    "gateway.commands.lifecycle_commands_ops" [label="lifecycle_commands_ops"];
    "gateway.commands.memory_commands" [label="memory_commands"];
    "gateway.commands.memory_handlers" [label="memory_handlers"];
    "gateway.commands.memory_handlers_ops" [label="memory_handlers_ops"];
    "gateway.commands.outcome_handlers" [label="outcome_handlers"];
    "gateway.commands.owner_shortcut_commands" [label="owner_shortcut_commands"];
    "gateway.commands.permission_commands" [label="permission_commands"];
    "gateway.commands.permission_commands_ops" [label="permission_commands_ops"];
    "gateway.commands.project_commands" [label="project_commands"];
    "gateway.commands.project_commands_ops" [label="project_commands_ops"];
    "gateway.commands.project_handlers" [label="project_handlers"];
    "gateway.commands.registry_handlers" [label="registry_handlers"];
    "gateway.commands.registry_handlers_ops" [label="registry_handlers_ops"];
    "gateway.commands.runtime_commands" [label="runtime_commands"];
    "gateway.commands.runtime_handlers" [label="runtime_handlers"];
    "gateway.commands.sandbox_commands" [label="sandbox_commands"];
    "gateway.commands.sessions_handlers" [label="sessions_handlers"];
    "gateway.commands.skill_commands" [label="skill_commands"];
    "gateway.completion_notify" [label="completion_notify"];
    "gateway.completion_notify_ops" [label="completion_notify_ops"];
    "gateway.completion_policy" [label="completion_policy"];
    "gateway.completion_telemetry" [label="completion_telemetry"];
    "gateway.completion_telemetry_ops" [label="completion_telemetry_ops"];
    "gateway.delegate_push_dedup" [label="delegate_push_dedup"];
    "gateway.delegate_task_kind" [label="delegate_task_kind"];
    "gateway.durable_outbox" [label="durable_outbox"];
    "gateway.error_cards" [label="error_cards"];
    "gateway.events_sink" [label="events_sink"];
    "gateway.events_sink_impl" [label="events_sink_impl"];
    "gateway.gate_reply_templates" [label="gate_reply_templates"];
    "gateway.gateway_contracts" [label="gateway_contracts"];
    "gateway.gateway_transcript" [label="gateway_transcript"];
    "gateway.gateway_transcript_ops" [label="gateway_transcript_ops"];
    "gateway.handler_commands" [label="handler_commands"];
    "gateway.handler_helpers" [label="handler_helpers"];
    "gateway.hooks" [label="hooks"];
    "gateway.inbound_drain" [label="inbound_drain"];
    "gateway.inbound_idempotency" [label="inbound_idempotency"];
    "gateway.inbound_idempotency_ops" [label="inbound_idempotency_ops"];
    "gateway.inbound_media" [label="inbound_media"];
    "gateway.inbound_media_ops" [label="inbound_media_ops"];
    "gateway.inbound_pipeline" [label="inbound_pipeline"];
    "gateway.inbound_validate" [label="inbound_validate"];
    "gateway.inbound_validate_ops" [label="inbound_validate_ops"];
    "gateway.item_event_sink" [label="item_event_sink"];
    "gateway.item_event_sink_ops" [label="item_event_sink_ops"];
    "gateway.item_events" [label="item_events"];
    "gateway.item_events_ops" [label="item_events_ops"];
    "gateway.locked_phase_registry" [label="locked_phase_registry"];
    "gateway.locked_phases" [label="locked_phases"];
    "gateway.locked_phases.augment_phase" [label="augment_phase"];
    "gateway.locked_phases.error_phase" [label="error_phase"];
    "gateway.locked_phases.execute_phase" [label="execute_phase"];
    "gateway.locked_phases.finalize_phase" [label="finalize_phase"];
    "gateway.locked_phases.format_phase" [label="format_phase"];
    "gateway.locked_phases.hooks_phase" [label="hooks_phase"];
    "gateway.locked_phases.init_phase" [label="init_phase"];
    "gateway.locked_phases.normalizer_phase" [label="normalizer_phase"];
    "gateway.locked_phases.state" [label="state"];
    "gateway.locked_phases.validation_phase" [label="validation_phase"];
    "gateway.locked_phases_ops" [label="locked_phases_ops"];
    "gateway.locked_turn_orchestrator" [label="locked_turn_orchestrator"];
    "gateway.locked_turn_orchestrator_ops" [label="locked_turn_orchestrator_ops"];
    "gateway.media_diagnostic_ops" [label="media_diagnostic_ops"];
    "gateway.media_telemetry" [label="media_telemetry"];
    "gateway.media_telemetry_ops" [label="media_telemetry_ops"];
    "gateway.message_handler" [label="message_handler"];
    "gateway.message_handler_ops" [label="message_handler_ops"];
    "gateway.message_pipelines" [label="message_pipelines"];
    "gateway.message_pipelines_fail_closed" [label="message_pipelines_fail_closed"];
    "gateway.message_queue" [label="message_queue"];
    "gateway.message_queue_ops" [label="message_queue_ops"];
    "gateway.minimax_image_gen" [label="minimax_image_gen"];
    "gateway.minimax_tts" [label="minimax_tts"];
    "gateway.minimax_vlm" [label="minimax_vlm"];
    "gateway.network_route_verify_runner" [label="network_route_verify_runner"];
    "gateway.network_route_verify_runner_ops" [label="network_route_verify_runner_ops"];
    "gateway.outbound_bridge" [label="outbound_bridge"];
    "gateway.outbound_bridge_ops" [label="outbound_bridge_ops"];
    "gateway.outbound_delay" [label="outbound_delay"];
    "gateway.outbound_files" [label="outbound_files"];
    "gateway.outbound_prefs" [label="outbound_prefs"];
    "gateway.outbound_prefs_ops" [label="outbound_prefs_ops"];
    "gateway.owner_delegate_shortcuts" [label="owner_delegate_shortcuts"];
    "gateway.owner_delegate_shortcuts_ops" [label="owner_delegate_shortcuts_ops"];
    "gateway.owner_gate" [label="owner_gate"];
    "gateway.owner_ingest_shortcuts" [label="owner_ingest_shortcuts"];
    "gateway.owner_surface" [label="owner_surface"];
    "gateway.owner_surface_ops" [label="owner_surface_ops"];
    "gateway.pii_scrub" [label="pii_scrub"];
    "gateway.pii_scrub_ops" [label="pii_scrub_ops"];
    "gateway.platforms" [label="platforms"];
    "gateway.platforms.base" [label="base"];
    "gateway.platforms.base_ops" [label="base_ops"];
    "gateway.platforms.helpers" [label="helpers"];
    "gateway.platforms.http.adapter" [label="adapter"];
    "gateway.platforms.wechat" [label="wechat"];
    "gateway.platforms.wechat_format" [label="wechat_format"];
    "gateway.platforms.wechat_ilink" [label="wechat_ilink"];
    "gateway.platforms.wechat_ilink._compat" [label="_compat"];
    "gateway.platforms.wechat_ilink._utils_legacy" [label="_utils_legacy"];
    "gateway.platforms.wechat_ilink.account" [label="account"];
    "gateway.platforms.wechat_ilink.adapter" [label="adapter"];
    "gateway.platforms.wechat_ilink.adapter_inbound" [label="adapter_inbound"];
    "gateway.platforms.wechat_ilink.adapter_inbound_ops" [label="adapter_inbound_ops"];
    "gateway.platforms.wechat_ilink.adapter_lifecycle" [label="adapter_lifecycle"];
    "gateway.platforms.wechat_ilink.adapter_lifecycle_ops" [label="adapter_lifecycle_ops"];
    "gateway.platforms.wechat_ilink.adapter_media" [label="adapter_media"];
    "gateway.platforms.wechat_ilink.adapter_media_ops" [label="adapter_media_ops"];
    "gateway.platforms.wechat_ilink.adapter_outbound" [label="adapter_outbound"];
    "gateway.platforms.wechat_ilink.adapter_outbound_ops" [label="adapter_outbound_ops"];
    "gateway.platforms.wechat_ilink.connect_phases" [label="connect_phases"];
    "gateway.platforms.wechat_ilink.connect_phases_ops" [label="connect_phases_ops"];
    "gateway.platforms.wechat_ilink.crypto" [label="crypto"];
    "gateway.platforms.wechat_ilink.direct" [label="direct"];
    "gateway.platforms.wechat_ilink.media" [label="media"];
    "gateway.platforms.wechat_ilink.phases" [label="phases"];
    "gateway.platforms.wechat_ilink.poll_phases" [label="poll_phases"];
    "gateway.platforms.wechat_ilink.qr_login" [label="qr_login"];
    "gateway.platforms.wechat_ilink.qr_phases" [label="qr_phases"];
    "gateway.platforms.wechat_ilink.send_phases" [label="send_phases"];
    "gateway.platforms.wechat_ilink.send_phases_ops" [label="send_phases_ops"];
    "gateway.platforms.wechat_ilink.transport" [label="transport"];
    "gateway.progressive_stream" [label="progressive_stream"];
    "gateway.queue_settings" [label="queue_settings"];
    "gateway.reply_admission" [label="reply_admission"];
    "gateway.runner" [label="runner"];
    "gateway.runner_ops" [label="runner_ops"];
    "gateway.session_lifecycle" [label="session_lifecycle"];
    "gateway.session_loop_factory" [label="session_loop_factory"];
    "gateway.session_registry" [label="session_registry"];
    "gateway.session_registry_ops" [label="session_registry_ops"];
    "gateway.singleton_lock" [label="singleton_lock"];
    "gateway.speech_stt" [label="speech_stt"];
    "gateway.speech_stt_ops" [label="speech_stt_ops"];
    "gateway.task_milestone" [label="task_milestone"];
    "gateway.task_milestone_ops" [label="task_milestone_ops"];
    "gateway.turn_post_pipeline" [label="turn_post_pipeline"];
    "gateway.turn_post_pipeline_ops" [label="turn_post_pipeline_ops"];
    "gateway.vision_fallback" [label="vision_fallback"];
    "gateway.wechat_scenario_sim" [label="wechat_scenario_sim"];
    "gateway.wechat_scenario_sim.evaluation" [label="evaluation"];
    "gateway.wechat_scenario_sim.execution" [label="execution"];
    "gateway.wechat_scenario_sim.utils" [label="utils"];
    "gateway.wechat_scenario_sim_bridge" [label="wechat_scenario_sim_bridge"];
    "gateway.wechat_scenario_sim_ops" [label="wechat_scenario_sim_ops"];
    "gateway.wechat_text_export" [label="wechat_text_export"];
  }

  subgraph cluster_L2_Orchestration {
    label="L2-Orchestration";
    style=filled;
    fillcolor="#aa96da";
    nodesep=0.3;
    ranksep=0.5;
    "delegate" [label="delegate"];
    "delegate.category_resolver" [label="category_resolver"];
    "delegate.category_resolver_ops" [label="category_resolver_ops"];
    "delegate.policy" [label="policy"];
    "delegate.policy_ops" [label="policy_ops"];
    "delegate.subagent_permissions" [label="subagent_permissions"];
    "delegate.subagent_permissions_ops" [label="subagent_permissions_ops"];
    "delegate.task_kind" [label="task_kind"];
    "orchestrator" [label="orchestrator"];
    "orchestrator.loop_factory" [label="loop_factory"];
    "orchestrator.loop_factory_ops" [label="loop_factory_ops"];
    "orchestrator.memory_bridge" [label="memory_bridge"];
    "orchestrator.memory_bridge_ops" [label="memory_bridge_ops"];
    "orchestrator.prompt_assembler" [label="prompt_assembler"];
    "orchestrator.prompt_assembler_ops" [label="prompt_assembler_ops"];
    "orchestrator.skill_bridge" [label="skill_bridge"];
    "orchestrator.templates" [label="templates"];
    "orchestrator.templates_ops" [label="templates_ops"];
    "workflows" [label="workflows"];
    "workflows.callbacks" [label="callbacks"];
    "workflows.commands" [label="commands"];
    "workflows.loader" [label="loader"];
    "workflows.pause_state" [label="pause_state"];
    "workflows.runner" [label="runner"];
    "workflows.runner_ops" [label="runner_ops"];
    "workflows.schema" [label="schema"];
    "workflows.step_runner" [label="step_runner"];
    "workflows.validate" [label="validate"];
    "workflows.workflow_run_snapshot" [label="workflow_run_snapshot"];
    "workflows.workflow_run_snapshot_ops" [label="workflow_run_snapshot_ops"];
  }

  subgraph cluster_L3_Core {
    label="L3-Core";
    style=filled;
    fillcolor="#fcbad3";
    nodesep=0.3;
    ranksep=0.5;
    "core.agent_loop" [label="agent_loop"];
    "core.agent_loop.loop" [label="loop"];
    "core.agent_loop.loop_conversation" [label="loop_conversation"];
    "core.agent_loop.loop_helpers" [label="loop_helpers"];
    "core.agent_loop.phases" [label="phases"];
    "core.agent_loop.phases.compaction_phase" [label="compaction_phase"];
    "core.agent_loop.phases.dispatch_phase" [label="dispatch_phase"];
    "core.agent_loop.phases.finalize_phase" [label="finalize_phase"];
    "core.agent_loop.phases.init_phase" [label="init_phase"];
    "core.agent_loop.phases.llm_phase" [label="llm_phase"];
    "core.agent_loop.phases.state" [label="state"];
    "core.agent_loop.phases.user_text_phase" [label="user_text_phase"];
    "core.agent_loop_ops" [label="agent_loop_ops"];
    "core.agent_loop_phases" [label="agent_loop_phases"];
    "core.agents_md_sections" [label="agents_md_sections"];
    "core.agents_md_sections_ops" [label="agents_md_sections_ops"];
    "core.auto_continue" [label="auto_continue"];
    "core.auto_review" [label="auto_review"];
    "core.auto_review_ops" [label="auto_review_ops"];
    "core.batch_sequence_guard" [label="batch_sequence_guard"];
    "core.batch_sequence_guard_ops" [label="batch_sequence_guard_ops"];
    "core.best_effort" [label="best_effort"];
    "core.cache_safe_delegate" [label="cache_safe_delegate"];
    "core.circular_dependency_detector" [label="circular_dependency_detector"];
    "core.compaction_checkpoint" [label="compaction_checkpoint"];
    "core.compaction_checkpoint_ops" [label="compaction_checkpoint_ops"];
    "core.compaction_context_adapter" [label="compaction_context_adapter"];
    "core.compaction_context_adapter_ops" [label="compaction_context_adapter_ops"];
    "core.compaction_phase" [label="compaction_phase"];
    "core.compaction_prompt" [label="compaction_prompt"];
    "core.compaction_status" [label="compaction_status"];
    "core.compaction_status_ops" [label="compaction_status_ops"];
    "core.compaction_steer_bridge" [label="compaction_steer_bridge"];
    "core.compaction_steer_bridge_ops" [label="compaction_steer_bridge_ops"];
    "core.compaction_task" [label="compaction_task"];
    "core.compaction_task_ops" [label="compaction_task_ops"];
    "core.confirm_flags" [label="confirm_flags"];
    "core.container" [label="container"];
    "core.context_budget" [label="context_budget"];
    "core.context_budget_ops" [label="context_budget_ops"];
    "core.context_compress_hooks" [label="context_compress_hooks"];
    "core.context_compress_pipeline" [label="context_compress_pipeline"];
    "core.context_compress_support" [label="context_compress_support"];
    "core.context_compressor" [label="context_compressor"];
    "core.context_pipeline" [label="context_pipeline"];
    "core.context_pipeline_ops" [label="context_pipeline_ops"];
    "core.context_transform_registry" [label="context_transform_registry"];
    "core.context_transform_registry_ops" [label="context_transform_registry_ops"];
    "core.conversation_state" [label="conversation_state"];
    "core.correction_intent" [label="correction_intent"];
    "core.correction_intent_ops" [label="correction_intent_ops"];
    "core.delegate_context" [label="delegate_context"];
    "core.delegate_semaphore" [label="delegate_semaphore"];
    "core.design_md_sections" [label="design_md_sections"];
    "core.design_md_sections_ops" [label="design_md_sections_ops"];
    "core.dev_context_adapter" [label="dev_context_adapter"];
    "core.dev_context_adapter_ops" [label="dev_context_adapter_ops"];
    "core.dev_state_context_adapter" [label="dev_state_context_adapter"];
    "core.dev_state_context_adapter_ops" [label="dev_state_context_adapter_ops"];
    "core.effects.combinators" [label="combinators"];
    "core.effects.race" [label="race"];
    "core.effects.result" [label="result"];
    "core.effects.tool_failure" [label="tool_failure"];
    "core.event_store" [label="event_store"];
    "core.event_store_events" [label="event_store_events"];
    "core.events.event_bus" [label="event_bus"];
    "core.events.event_consumer" [label="event_consumer"];
    "core.events.event_handlers" [label="event_handlers"];
    "core.events.event_store" [label="event_store"];
    "core.events.event_store_protocol" [label="event_store_protocol"];
    "core.events.event_types" [label="event_types"];
    "core.events.session_events" [label="session_events"];
    "core.events_sink" [label="events_sink"];
    "core.events_sink_ops" [label="events_sink_ops"];
    "core.evidence_extract" [label="evidence_extract"];
    "core.exp_cache" [label="exp_cache"];
    "core.exp_cache_ops" [label="exp_cache_ops"];
    "core.fact_extraction" [label="fact_extraction"];
    "core.fact_extraction_ops" [label="fact_extraction_ops"];
    "core.finish_tool_truncate" [label="finish_tool_truncate"];
    "core.goal_loop" [label="goal_loop"];
    "core.goal_loop_ops" [label="goal_loop_ops"];
    "core.harness_flags" [label="harness_flags"];
    "core.hashline" [label="hashline"];
    "core.hook_context_adapter" [label="hook_context_adapter"];
    "core.hook_context_adapter_ops" [label="hook_context_adapter_ops"];
    "core.hygiene_preflight" [label="hygiene_preflight"];
    "core.hygiene_preflight_ops" [label="hygiene_preflight_ops"];
    "core.inline_tool_compress" [label="inline_tool_compress"];
    "core.input_stage" [label="input_stage"];
    "core.instruction_walkup" [label="instruction_walkup"];
    "core.instruction_walkup_ops" [label="instruction_walkup_ops"];
    "core.intent_keywords" [label="intent_keywords"];
    "core.io_guardrail" [label="io_guardrail"];
    "core.learning_graph" [label="learning_graph"];
    "core.llm_retry" [label="llm_retry"];
    "core.llm_retry_errors" [label="llm_retry_errors"];
    "core.llm_retry_helpers" [label="llm_retry_helpers"];
    "core.llm_retry_invoke" [label="llm_retry_invoke"];
    "core.llm_retry_invoke_ops" [label="llm_retry_invoke_ops"];
    "core.llm_retry_ops" [label="llm_retry_ops"];
    "core.llm_retry_outcomes" [label="llm_retry_outcomes"];
    "core.llm_retry_safe" [label="llm_retry_safe"];
    "core.llm_retry_success" [label="llm_retry_success"];
    "core.loop_budget_nudge" [label="loop_budget_nudge"];
    "core.loop_callbacks_merge" [label="loop_callbacks_merge"];
    "core.loop_middleware" [label="loop_middleware"];
    "core.loop_middleware_ops" [label="loop_middleware_ops"];
    "core.loop_plugins" [label="loop_plugins"];
    "core.loop_plugins_ops" [label="loop_plugins_ops"];
    "core.loop_response" [label="loop_response"];
    "core.loop_types" [label="loop_types"];
    "core.memory_context_adapter" [label="memory_context_adapter"];
    "core.memory_context_adapter_ops" [label="memory_context_adapter_ops"];
    "core.memory_manager" [label="memory_manager"];
    "core.memory_recap_line" [label="memory_recap_line"];
    "core.message_context_adapter" [label="message_context_adapter"];
    "core.message_context_adapter_ops" [label="message_context_adapter_ops"];
    "core.message_ir" [label="message_ir"];
    "core.message_repair" [label="message_repair"];
    "core.meta_flags" [label="meta_flags"];
    "core.metrics_sink" [label="metrics_sink"];
    "core.metrics_sink_ops" [label="metrics_sink_ops"];
    "core.mode_classifier" [label="mode_classifier"];
    "core.mode_classifier_ops" [label="mode_classifier_ops"];
    "core.model_context" [label="model_context"];
    "core.model_context_ops" [label="model_context_ops"];
    "core.output_grounding" [label="output_grounding"];
    "core.output_grounding_ops" [label="output_grounding_ops"];
    "core.output_schema_registry" [label="output_schema_registry"];
    "core.parallel_tools" [label="parallel_tools"];
    "core.parallel_tools_ops" [label="parallel_tools_ops"];
    "core.pim_state" [label="pim_state"];
    "core.pim_state_ops" [label="pim_state_ops"];
    "core.plan_reason_graph" [label="plan_reason_graph"];
    "core.post_commit" [label="post_commit"];
    "core.post_commit_ops" [label="post_commit_ops"];
    "core.post_compact_cleanup" [label="post_compact_cleanup"];
    "core.post_compact_cleanup_ops" [label="post_compact_cleanup_ops"];
    "core.post_edit_format" [label="post_edit_format"];
    "core.preemptive_compact" [label="preemptive_compact"];
    "core.preemptive_compact_ops" [label="preemptive_compact_ops"];
    "core.preread_context" [label="preread_context"];
    "core.preread_context_ops" [label="preread_context_ops"];
    "core.prompt_renderer" [label="prompt_renderer"];
    "core.prompt_renderer_ops" [label="prompt_renderer_ops"];
    "core.reactive_compact" [label="reactive_compact"];
    "core.reactive_compact_ops" [label="reactive_compact_ops"];
    "core.read_file_partial" [label="read_file_partial"];
    "core.read_state" [label="read_state"];
    "core.reasoning_trace" [label="reasoning_trace"];
    "core.reasoning_trace_ops" [label="reasoning_trace_ops"];
    "core.reflection_closure" [label="reflection_closure"];
    "core.reflection_closure_ops" [label="reflection_closure_ops"];
    "core.reflexion_ephemeral" [label="reflexion_ephemeral"];
    "core.reflexion_ephemeral_ops" [label="reflexion_ephemeral_ops"];
    "core.reflexion_write" [label="reflexion_write"];
    "core.reflexion_write_ops" [label="reflexion_write_ops"];
    "core.remote_compact" [label="remote_compact"];
    "core.remote_compact_ops" [label="remote_compact_ops"];
    "core.research_simplicity" [label="research_simplicity"];
    "core.retry_policy" [label="retry_policy"];
    "core.review_context_adapter" [label="review_context_adapter"];
    "core.review_context_adapter_ops" [label="review_context_adapter_ops"];
    "core.rules_engine" [label="rules_engine"];
    "core.safety_finish" [label="safety_finish"];
    "core.schema_optimizer" [label="schema_optimizer"];
    "core.schema_optimizer_ops" [label="schema_optimizer_ops"];
    "core.schema_recovery" [label="schema_recovery"];
    "core.schema_recovery_ops" [label="schema_recovery_ops"];
    "core.session_epoch" [label="session_epoch"];
    "core.session_epoch_ops" [label="session_epoch_ops"];
    "core.session_hydration" [label="session_hydration"];
    "core.session_hydration_ops" [label="session_hydration_ops"];
    "core.session_recall_intent" [label="session_recall_intent"];
    "core.session_todos" [label="session_todos"];
    "core.session_todos_ops" [label="session_todos_ops"];
    "core.session_tool_index" [label="session_tool_index"];
    "core.session_tool_index_ops" [label="session_tool_index_ops"];
    "core.session_transcript" [label="session_transcript"];
    "core.session_transcript_ops" [label="session_transcript_ops"];
    "core.skill_compact_rescue" [label="skill_compact_rescue"];
    "core.skill_tool_bridge" [label="skill_tool_bridge"];
    "core.skill_tool_bridge_ops" [label="skill_tool_bridge_ops"];
    "core.steer" [label="steer"];
    "core.steer_ops" [label="steer_ops"];
    "core.streaming_tools" [label="streaming_tools"];
    "core.streaming_tools_ops" [label="streaming_tools_ops"];
    "core.structured_events" [label="structured_events"];
    "core.system_reminder" [label="system_reminder"];
    "core.system_reminder_ops" [label="system_reminder_ops"];
    "core.task_route_hints" [label="task_route_hints"];
    "core.task_route_hints_ops" [label="task_route_hints_ops"];
    "core.text_truncate" [label="text_truncate"];
    "core.todo_continuation" [label="todo_continuation"];
    "core.todo_continuation_ops" [label="todo_continuation_ops"];
    "core.tool_batch" [label="tool_batch"];
    "core.tool_batch_finalize" [label="tool_batch_finalize"];
    "core.tool_batch_finalize_ops" [label="tool_batch_finalize_ops"];
    "core.tool_batch_hooks" [label="tool_batch_hooks"];
    "core.tool_batch_post_edit" [label="tool_batch_post_edit"];
    "core.tool_batch_runner" [label="tool_batch_runner"];
    "core.tool_batch_runner_ops" [label="tool_batch_runner_ops"];
    "core.tool_call_limits" [label="tool_call_limits"];
    "core.tool_call_normalize" [label="tool_call_normalize"];
    "core.tool_dispatch" [label="tool_dispatch"];
    "core.tool_dispatch_doom" [label="tool_dispatch_doom"];
    "core.tool_dispatch_doom_ops" [label="tool_dispatch_doom_ops"];
    "core.tool_dispatch_ops" [label="tool_dispatch_ops"];
    "core.tool_error_policy" [label="tool_error_policy"];
    "core.tool_error_policy_ops" [label="tool_error_policy_ops"];
    "core.tool_event_emitter" [label="tool_event_emitter"];
    "core.tool_executor" [label="tool_executor"];
    "core.tool_failure_bridge" [label="tool_failure_bridge"];
    "core.tool_loop_detect" [label="tool_loop_detect"];
    "core.tool_narrative" [label="tool_narrative"];
    "core.tool_narrative_ops" [label="tool_narrative_ops"];
    "core.tool_orchestrator" [label="tool_orchestrator"];
    "core.tool_orchestrator_ops" [label="tool_orchestrator_ops"];
    "core.tool_output_masking" [label="tool_output_masking"];
    "core.tool_output_prune" [label="tool_output_prune"];
    "core.tool_pair_repair" [label="tool_pair_repair"];
    "core.tool_pair_repair_ops" [label="tool_pair_repair_ops"];
    "core.tool_prune_policy" [label="tool_prune_policy"];
    "core.tool_recall_bm25" [label="tool_recall_bm25"];
    "core.tool_result_cache" [label="tool_result_cache"];
    "core.tool_result_storage" [label="tool_result_storage"];
    "core.tool_retry" [label="tool_retry"];
    "core.tool_retry_ops" [label="tool_retry_ops"];
    "core.tool_selector" [label="tool_selector"];
    "core.tool_selector_ops" [label="tool_selector_ops"];
    "core.transcript_export" [label="transcript_export"];
    "core.transcript_export_ops" [label="transcript_export_ops"];
    "core.transcript_fork" [label="transcript_fork"];
    "core.transcript_fts" [label="transcript_fts"];
    "core.transcript_index" [label="transcript_index"];
    "core.transcript_revert" [label="transcript_revert"];
    "core.transcript_search" [label="transcript_search"];
    "core.transcript_search_ops" [label="transcript_search_ops"];
    "core.transform_feedback" [label="transform_feedback"];
    "core.transform_overrides" [label="transform_overrides"];
    "core.turn_compaction" [label="turn_compaction"];
    "core.turn_summary_line" [label="turn_summary_line"];
    "core.turn_summary_line_ops" [label="turn_summary_line_ops"];
    "core.turn_token_budget" [label="turn_token_budget"];
    "core.two_phase_confirm" [label="two_phase_confirm"];
    "core.two_phase_confirm_ops" [label="two_phase_confirm_ops"];
    "core.workflow_flags" [label="workflow_flags"];
  }

  subgraph cluster_L4_Tools {
    label="L4-Tools";
    style=filled;
    fillcolor="#ffffd2";
    nodesep=0.3;
    ranksep=0.5;
    "dev_engine" [label="dev_engine"];
    "dev_engine.b9_delegate_gate" [label="b9_delegate_gate"];
    "dev_engine.b9_delegate_gate_ops" [label="b9_delegate_gate_ops"];
    "dev_engine.b9_experience_retrieval" [label="b9_experience_retrieval"];
    "dev_engine.b9_experience_retrieval_ops" [label="b9_experience_retrieval_ops"];
    "dev_engine.b9_live_fixed_tasks" [label="b9_live_fixed_tasks"];
    "dev_engine.b9_live_tuning" [label="b9_live_tuning"];
    "dev_engine.b9_live_tuning_ops" [label="b9_live_tuning_ops"];
    "dev_engine.b9_oracle_curriculum" [label="b9_oracle_curriculum"];
    "dev_engine.b9_oracle_fewshot" [label="b9_oracle_fewshot"];
    "dev_engine.b9_prod_shaped_tasks" [label="b9_prod_shaped_tasks"];
    "dev_engine.b9_task_fixtures" [label="b9_task_fixtures"];
    "dev_engine.b9_tiers" [label="b9_tiers"];
    "dev_engine.b9_verify_utils" [label="b9_verify_utils"];
    "dev_engine.code_search" [label="code_search"];
    "dev_engine.code_search_ops" [label="code_search_ops"];
    "dev_engine.coding_knowledge" [label="coding_knowledge"];
    "dev_engine.coding_knowledge.context" [label="context"];
    "dev_engine.coding_knowledge.experience" [label="experience"];
    "dev_engine.coding_knowledge.generation" [label="generation"];
    "dev_engine.coding_knowledge.theorems" [label="theorems"];
    "dev_engine.coding_knowledge.verification" [label="verification"];
    "dev_engine.coding_knowledge_benchmark" [label="coding_knowledge_benchmark"];
    "dev_engine.coding_knowledge_fixup" [label="coding_knowledge_fixup"];
    "dev_engine.coding_knowledge_fixup_ops" [label="coding_knowledge_fixup_ops"];
    "dev_engine.coding_knowledge_ops" [label="coding_knowledge_ops"];
    "dev_engine.delegate_finalize" [label="delegate_finalize"];
    "dev_engine.delegate_finalize_ops" [label="delegate_finalize_ops"];
    "dev_engine.delegate_init" [label="delegate_init"];
    "dev_engine.delegate_init_ops" [label="delegate_init_ops"];
    "dev_engine.delegate_workspace" [label="delegate_workspace"];
    "dev_engine.delegate_workspace_ops" [label="delegate_workspace_ops"];
    "dev_engine.dev_benchmark" [label="dev_benchmark"];
    "dev_engine.dev_context" [label="dev_context"];
    "dev_engine.dev_context_ops" [label="dev_context_ops"];
    "dev_engine.dev_loop" [label="dev_loop"];
    "dev_engine.dev_loop_ops" [label="dev_loop_ops"];
    "dev_engine.dev_metrics" [label="dev_metrics"];
    "dev_engine.dev_tools" [label="dev_tools"];
    "dev_engine.dev_tools_ops" [label="dev_tools_ops"];
    "dev_engine.diagnostics" [label="diagnostics"];
    "dev_engine.edit_ops" [label="edit_ops"];
    "dev_engine.fix_strategy" [label="fix_strategy"];
    "dev_engine.gentc_mutation" [label="gentc_mutation"];
    "dev_engine.llm_delegate_benchmark" [label="llm_delegate_benchmark"];
    "dev_engine.llm_delegate_benchmark_ops" [label="llm_delegate_benchmark_ops"];
    "dev_engine.loop_plugin" [label="loop_plugin"];
    "dev_engine.loop_plugin_ops" [label="loop_plugin_ops"];
    "dev_engine.optimize_advisory" [label="optimize_advisory"];
    "dev_engine.prod_delegate_bridge" [label="prod_delegate_bridge"];
    "dev_engine.prod_delegate_bridge_ops" [label="prod_delegate_bridge_ops"];
    "dev_engine.prod_playbook_seeds" [label="prod_playbook_seeds"];
    "dev_engine.review_closure" [label="review_closure"];
    "dev_engine.review_closure_ops" [label="review_closure_ops"];
    "dev_engine.review_knowledge" [label="review_knowledge"];
    "dev_engine.review_static" [label="review_static"];
    "dev_engine.swebench_lite" [label="swebench_lite"];
    "dev_engine.swebench_lite.queries" [label="queries"];
    "dev_engine.theorem_library" [label="theorem_library"];
    "dev_engine.verify" [label="verify"];
    "dev_engine.verify_ops" [label="verify_ops"];
    "mcp" [label="mcp"];
    "mcp.approval" [label="approval"];
    "mcp.async_runner" [label="async_runner"];
    "mcp.async_runner_ops" [label="async_runner_ops"];
    "mcp.bridge" [label="bridge"];
    "mcp.client_http" [label="client_http"];
    "mcp.client_http_ops" [label="client_http_ops"];
    "mcp.client_stdio" [label="client_stdio"];
    "mcp.client_stdio_ops" [label="client_stdio_ops"];
    "mcp.config" [label="config"];
    "mcp.config_ops" [label="config_ops"];
    "mcp.deferred" [label="deferred"];
    "mcp.deferred_ops" [label="deferred_ops"];
    "mcp.diagnostics" [label="diagnostics"];
    "mcp.extension_grounding" [label="extension_grounding"];
    "mcp.extension_manifest" [label="extension_manifest"];
    "mcp.extension_manifest_ops" [label="extension_manifest_ops"];
    "mcp.extension_verify" [label="extension_verify"];
    "mcp.extension_verify_ops" [label="extension_verify_ops"];
    "mcp.github_grounding" [label="github_grounding"];
    "mcp.github_tool_aliases" [label="github_tool_aliases"];
    "mcp.github_tool_aliases_ops" [label="github_tool_aliases_ops"];
    "mcp.manager" [label="manager"];
    "mcp.manager_ops" [label="manager_ops"];
    "mcp.naming" [label="naming"];
    "mcp.outbound_grounding_gate" [label="outbound_grounding_gate"];
    "mcp.profiles" [label="profiles"];
    "mcp.profiles_ops" [label="profiles_ops"];
    "mcp.registry_hook" [label="registry_hook"];
    "mcp.registry_hook_ops" [label="registry_hook_ops"];
    "mcp.server_stdio" [label="server_stdio"];
    "mcp.todoist_grounding" [label="todoist_grounding"];
    "mcp.todoist_tool_aliases" [label="todoist_tool_aliases"];
    "mcp.todoist_tool_aliases_ops" [label="todoist_tool_aliases_ops"];
    "mcp.tools_engine" [label="tools_engine"];
    "mcp.tools_engine_ops" [label="tools_engine_ops"];
    "mcp.tools_manifest" [label="tools_manifest"];
    "mcp.tools_manifest_ops" [label="tools_manifest_ops"];
    "mcp.turn_scrape_dedup" [label="turn_scrape_dedup"];
    "mcp.turn_scrape_dedup_ops" [label="turn_scrape_dedup_ops"];
    "skills" [label="skills"];
    "skills.experience_pointers" [label="experience_pointers"];
    "skills.fusion_wiring" [label="fusion_wiring"];
    "skills.fusion_wiring_ops" [label="fusion_wiring_ops"];
    "skills.injection_policy" [label="injection_policy"];
    "skills.learn" [label="learn"];
    "skills.learn_ops" [label="learn_ops"];
    "skills.manager" [label="manager"];
    "skills.manager.manager" [label="manager"];
    "skills.manager_ops" [label="manager_ops"];
    "skills.router" [label="router"];
    "skills.router_ops" [label="router_ops"];
    "skills.seed_bundled" [label="seed_bundled"];
    "skills.similarity" [label="similarity"];
    "skills.similarity_ops" [label="similarity_ops"];
    "skills.write_approval" [label="write_approval"];
    "skills.write_approval_ops" [label="write_approval_ops"];
    "tools.audit_persist" [label="audit_persist"];
    "tools.audit_persist_ops" [label="audit_persist_ops"];
    "tools.builtin_impl" [label="builtin_impl"];
    "tools.builtin_impl_ops" [label="builtin_impl_ops"];
    "tools.builtin_register" [label="builtin_register"];
    "tools.builtin_register_ops" [label="builtin_register_ops"];
    "tools.butlerignore" [label="butlerignore"];
    "tools.butlerignore_ops" [label="butlerignore_ops"];
    "tools.config_tools" [label="config_tools"];
    "tools.contacts" [label="contacts"];
    "tools.conversation_state_tools" [label="conversation_state_tools"];
    "tools.data_query" [label="data_query"];
    "tools.data_query_ops" [label="data_query_ops"];
    "tools.delegate_impl" [label="delegate_impl"];
    "tools.delegate_orchestrator" [label="delegate_orchestrator"];
    "tools.delegate_phases" [label="delegate_phases"];
    "tools.delegate_prepare" [label="delegate_prepare"];
    "tools.delegate_prepare_ops" [label="delegate_prepare_ops"];
    "tools.delegate_record" [label="delegate_record"];
    "tools.delegate_record_ops" [label="delegate_record_ops"];
    "tools.delegate_report" [label="delegate_report"];
    "tools.delegate_report_ops" [label="delegate_report_ops"];
    "tools.delegate_role_guard" [label="delegate_role_guard"];
    "tools.delegate_role_guard_ops" [label="delegate_role_guard_ops"];
    "tools.delegate_run" [label="delegate_run"];
    "tools.delegate_run_ops" [label="delegate_run_ops"];
    "tools.delegate_subagent" [label="delegate_subagent"];
    "tools.delegate_subagent_ops" [label="delegate_subagent_ops"];
    "tools.delegate_summary_budget" [label="delegate_summary_budget"];
    "tools.delegate_yield_tools" [label="delegate_yield_tools"];
    "tools.delegate_yield_tools_ops" [label="delegate_yield_tools_ops"];
    "tools.document_reader" [label="document_reader"];
    "tools.download_tools" [label="download_tools"];
    "tools.execute_code" [label="execute_code"];
    "tools.execute_code_ops" [label="execute_code_ops"];
    "tools.expense" [label="expense"];
    "tools.experience_selector" [label="experience_selector"];
    "tools.file_io" [label="file_io"];
    "tools.file_io_ops" [label="file_io_ops"];
    "tools.git_tools" [label="git_tools"];
    "tools.habits" [label="habits"];
    "tools.interrupt" [label="interrupt"];
    "tools.knowledge_search" [label="knowledge_search"];
    "tools.knowledge_search_ops" [label="knowledge_search_ops"];
    "tools.mcp_self_service" [label="mcp_self_service"];
    "tools.mcp_self_service_ops" [label="mcp_self_service_ops"];
    "tools.memo" [label="memo"];
    "tools.memory_tools" [label="memory_tools"];
    "tools.memory_tools_ops" [label="memory_tools_ops"];
    "tools.multimodal_tools" [label="multimodal_tools"];
    "tools.network_route_verify" [label="network_route_verify"];
    "tools.network_route_verify_ops" [label="network_route_verify_ops"];
    "tools.network_search_policy" [label="network_search_policy"];
    "tools.network_search_policy_ops" [label="network_search_policy_ops"];
    "tools.orthogonality_lint" [label="orthogonality_lint"];
    "tools.orthogonality_lint_ops" [label="orthogonality_lint_ops"];
    "tools.path_safety" [label="path_safety"];
    "tools.path_safety_ops" [label="path_safety_ops"];
    "tools.project_todos" [label="project_todos"];
    "tools.project_todos_ops" [label="project_todos_ops"];
    "tools.project_tools" [label="project_tools"];
    "tools.project_tools_ops" [label="project_tools_ops"];
    "tools.registry_gates" [label="registry_gates"];
    "tools.registry_invoke_ops" [label="registry_invoke_ops"];
    "tools.registry_tools" [label="registry_tools"];
    "tools.registry_tools_ops" [label="registry_tools_ops"];
    "tools.reminder" [label="reminder"];
    "tools.runtime_tools" [label="runtime_tools"];
    "tools.runtime_tools_ops" [label="runtime_tools_ops"];
    "tools.safe_root" [label="safe_root"];
    "tools.session_todos_tools" [label="session_todos_tools"];
    "tools.session_todos_tools_ops" [label="session_todos_tools_ops"];
    "tools.tenant_store" [label="tenant_store"];
    "tools.tenant_store_ops" [label="tenant_store_ops"];
    "tools.terminal_approval" [label="terminal_approval"];
    "tools.terminal_approval_ops" [label="terminal_approval_ops"];
    "tools.terminal_danger" [label="terminal_danger"];
    "tools.terminal_danger_ops" [label="terminal_danger_ops"];
    "tools.terminal_impl" [label="terminal_impl"];
    "tools.terminal_impl_ops" [label="terminal_impl_ops"];
    "tools.terminal_pattern_approval" [label="terminal_pattern_approval"];
    "tools.terminal_pattern_approval_ops" [label="terminal_pattern_approval_ops"];
    "tools.terminal_sandbox" [label="terminal_sandbox"];
    "tools.tool_audit" [label="tool_audit"];
    "tools.tool_audit_ops" [label="tool_audit_ops"];
    "tools.tool_discovery" [label="tool_discovery"];
    "tools.tool_implicit_context" [label="tool_implicit_context"];
    "tools.tool_implicit_context_ops" [label="tool_implicit_context_ops"];
    "tools.tool_schemas" [label="tool_schemas"];
    "tools.tool_scope" [label="tool_scope"];
    "tools.tool_service" [label="tool_service"];
    "tools.tool_taxonomy" [label="tool_taxonomy"];
    "tools.tool_validation" [label="tool_validation"];
    "tools.toolset_profiles" [label="toolset_profiles"];
    "tools.web_fetch" [label="web_fetch"];
    "tools.web_fetch_ops" [label="web_fetch_ops"];
    "tools.web_search" [label="web_search"];
    "tools.web_search_probe" [label="web_search_probe"];
    "tools.workflow_tools" [label="workflow_tools"];
  }

  subgraph cluster_L5_Memory {
    label="L5-Memory";
    style=filled;
    fillcolor="#a8e6cf";
    nodesep=0.3;
    ranksep=0.5;
    "configuration.memory" [label="memory"];
    "memory" [label="memory"];
    "memory.butler_memory" [label="butler_memory"];
    "memory.butler_memory.core" [label="core"];
    "memory.butler_memory.experience_store" [label="experience_store"];
    "memory.butler_memory.profile_store" [label="profile_store"];
    "memory.butler_memory_ops" [label="butler_memory_ops"];
    "memory.chunking" [label="chunking"];
    "memory.chunking_ops" [label="chunking_ops"];
    "memory.coding_recall" [label="coding_recall"];
    "memory.conversation_store" [label="conversation_store"];
    "memory.corpus_router" [label="corpus_router"];
    "memory.corpus_router_ops" [label="corpus_router_ops"];
    "memory.corrective_recall" [label="corrective_recall"];
    "memory.corrective_recall_ops" [label="corrective_recall_ops"];
    "memory.diagnostics" [label="diagnostics"];
    "memory.diagnostics_collect" [label="diagnostics_collect"];
    "memory.document_ingest" [label="document_ingest"];
    "memory.embedding" [label="embedding"];
    "memory.embedding_ops" [label="embedding_ops"];
    "memory.experience" [label="experience"];
    "memory.experience.classifier" [label="classifier"];
    "memory.experience.domain_router" [label="domain_router"];
    "memory.experience.retriever" [label="retriever"];
    "memory.experience.store" [label="store"];
    "memory.experience.tree" [label="tree"];
    "memory.experience.writer" [label="writer"];
    "memory.experience_consolidation" [label="experience_consolidation"];
    "memory.experience_consolidation_ops" [label="experience_consolidation_ops"];
    "memory.experience_mining" [label="experience_mining"];
    "memory.experience_mining_cli" [label="experience_mining_cli"];
    "memory.experience_mining_ops" [label="experience_mining_ops"];
    "memory.facade" [label="facade"];
    "memory.facade_ops" [label="facade_ops"];
    "memory.hybrid_retriever" [label="hybrid_retriever"];
    "memory.injection_guard" [label="injection_guard"];
    "memory.injection_llm_score" [label="injection_llm_score"];
    "memory.injection_llm_score_ops" [label="injection_llm_score_ops"];
    "memory.knowledge_graph" [label="knowledge_graph"];
    "memory.knowledge_warehouse" [label="knowledge_warehouse"];
    "memory.knowledge_warehouse.digestion" [label="digestion"];
    "memory.knowledge_warehouse.ingestor" [label="ingestor"];
    "memory.knowledge_warehouse.rebuild_all" [label="rebuild_all"];
    "memory.memory_benchmark" [label="memory_benchmark"];
    "memory.memory_benchmark_ops" [label="memory_benchmark_ops"];
    "memory.memory_caps" [label="memory_caps"];
    "memory.memory_metrics" [label="memory_metrics"];
    "memory.memory_scope" [label="memory_scope"];
    "memory.metrics_persist" [label="metrics_persist"];
    "memory.metrics_persist_ops" [label="metrics_persist_ops"];
    "memory.observation_migrate" [label="observation_migrate"];
    "memory.observation_recall" [label="observation_recall"];
    "memory.observation_store" [label="observation_store"];
    "memory.observer_queue" [label="observer_queue"];
    "memory.observer_queue_ops" [label="observer_queue_ops"];
    "memory.owner_experience_seed" [label="owner_experience_seed"];
    "memory.owner_experience_seed_ops" [label="owner_experience_seed_ops"];
    "memory.owner_write_pending" [label="owner_write_pending"];
    "memory.pending_cli" [label="pending_cli"];
    "memory.pending_command_ops" [label="pending_command_ops"];
    "memory.pending_handlers" [label="pending_handlers"];
    "memory.prefetch_cache" [label="prefetch_cache"];
    "memory.prefetch_retrieval_metrics" [label="prefetch_retrieval_metrics"];
    "memory.prefetch_retrieval_metrics_ops" [label="prefetch_retrieval_metrics_ops"];
    "memory.private_tags" [label="private_tags"];
    "memory.project_memory" [label="project_memory"];
    "memory.project_memory.classifiers" [label="classifiers"];
    "memory.project_memory.facts_store" [label="facts_store"];
    "memory.project_memory.project_memory" [label="project_memory"];
    "memory.project_memory_ops" [label="project_memory_ops"];
    "memory.query_decompose" [label="query_decompose"];
    "memory.recall_layers" [label="recall_layers"];
    "memory.recall_layers_ops" [label="recall_layers_ops"];
    "memory.recall_ops" [label="recall_ops"];
    "memory.recall_router" [label="recall_router"];
    "memory.reindex" [label="reindex"];
    "memory.reindex_ops" [label="reindex_ops"];
    "memory.retrieval_ranking" [label="retrieval_ranking"];
    "memory.retrieval_ranking_ops" [label="retrieval_ranking_ops"];
    "memory.retrieval_telemetry" [label="retrieval_telemetry"];
    "memory.retrieval_telemetry_ops" [label="retrieval_telemetry_ops"];
    "memory.scope_diagnostics" [label="scope_diagnostics"];
    "memory.scope_diagnostics_ops" [label="scope_diagnostics_ops"];
    "memory.search_cli" [label="search_cli"];
    "memory.search_result" [label="search_result"];
    "memory.search_result_ops" [label="search_result_ops"];
    "memory.semantic_config" [label="semantic_config"];
    "memory.semantic_health" [label="semantic_health"];
    "memory.semantic_health_ops" [label="semantic_health_ops"];
    "memory.semantic_index" [label="semantic_index"];
    "memory.semantic_index_ops" [label="semantic_index_ops"];
    "memory.semantic_project" [label="semantic_project"];
    "memory.semantic_project_ops" [label="semantic_project_ops"];
    "memory.transcript_memory_pipeline" [label="transcript_memory_pipeline"];
    "memory.transcript_memory_pipeline_ops" [label="transcript_memory_pipeline_ops"];
    "memory.transcript_recall" [label="transcript_recall"];
    "memory.unified_recall" [label="unified_recall"];
    "memory.unified_recall_config" [label="unified_recall_config"];
    "memory.vector_gc" [label="vector_gc"];
    "memory.vector_store" [label="vector_store"];
  }

  subgraph cluster_L6_Transport {
    label="L6-Transport";
    style=filled;
    fillcolor="#ffd3b6";
    nodesep=0.3;
    ranksep=0.5;
    "transport" [label="transport"];
    "transport.anthropic_transport" [label="anthropic_transport"];
    "transport.auxiliary_client" [label="auxiliary_client"];
    "transport.auxiliary_client_ops" [label="auxiliary_client_ops"];
    "transport.base" [label="base"];
    "transport.cache_control" [label="cache_control"];
    "transport.chat_completions" [label="chat_completions"];
    "transport.fallback" [label="fallback"];
    "transport.fusion_client" [label="fusion_client"];
    "transport.fusion_client_ops" [label="fusion_client_ops"];
    "transport.interruptible_client" [label="interruptible_client"];
    "transport.llm_client" [label="llm_client"];
    "transport.llm_client_ops" [label="llm_client_ops"];
    "transport.memory_context_scrubber" [label="memory_context_scrubber"];
    "transport.provider_health" [label="provider_health"];
    "transport.providers" [label="providers"];
    "transport.reasoning_replay" [label="reasoning_replay"];
    "transport.reasoning_replay_ops" [label="reasoning_replay_ops"];
    "transport.stream_probe" [label="stream_probe"];
    "transport.stream_probe_ops" [label="stream_probe_ops"];
    "transport.streaming_signal" [label="streaming_signal"];
    "transport.streaming_signal_ops" [label="streaming_signal_ops"];
    "transport.thinking_headers" [label="thinking_headers"];
    "transport.thinking_protocol" [label="thinking_protocol"];
    "transport.tool_wire" [label="tool_wire"];
    "transport.tool_wire_ops" [label="tool_wire_ops"];
    "transport.types" [label="types"];
    "transport.usage_normalize" [label="usage_normalize"];
  }

  subgraph cluster_L7_Permissions {
    label="L7-Permissions";
    style=filled;
    fillcolor="#ffaaa5";
    nodesep=0.3;
    ranksep=0.5;
    "human_gate" [label="human_gate"];
    "permissions" [label="permissions"];
    "permissions.approvals" [label="approvals"];
    "permissions.doom_loop" [label="doom_loop"];
    "permissions.doom_loop_ops" [label="doom_loop_ops"];
    "permissions.human_gate" [label="human_gate"];
    "permissions.human_gate_ops" [label="human_gate_ops"];
    "permissions.rules" [label="rules"];
    "permissions.rules_context" [label="rules_context"];
    "permissions.rules_fail_closed" [label="rules_fail_closed"];
    "permissions.rules_fail_closed_ops" [label="rules_fail_closed_ops"];
    "permissions.tool_boundary_registry" [label="tool_boundary_registry"];
  }

  subgraph cluster_L8_Resilience {
    label="L8-Resilience";
    style=filled;
    fillcolor="#dcedc1";
    nodesep=0.3;
    ranksep=0.5;
    "resilience.durable_outbox" [label="durable_outbox"];
    "resilience.inbound_idempotency" [label="inbound_idempotency"];
    "resilience.inbound_idempotency_ops" [label="inbound_idempotency_ops"];
    "resilience.message_queue" [label="message_queue"];
    "resilience.message_queue_ops" [label="message_queue_ops"];
  }

  subgraph cluster_L9_Ops {
    label="L9-Ops";
    style=filled;
    fillcolor="#ffdac1";
    nodesep=0.3;
    ranksep=0.5;
    "eval_integration" [label="eval_integration"];
    "eval_integration.manager" [label="manager"];
    "eval_integration.manager_ops" [label="manager_ops"];
    "eval_integration.oss.deepeval_runner" [label="deepeval_runner"];
    "eval_integration.oss.prefetch_audit_loader" [label="prefetch_audit_loader"];
    "eval_integration.oss.ragas_runner" [label="ragas_runner"];
    "eval_integration.report_schema" [label="report_schema"];
    "eval_integration.sinks.audit_sink" [label="audit_sink"];
    "eval_integration.sinks.deepeval_sink" [label="deepeval_sink"];
    "eval_integration.sinks.junit_sink" [label="junit_sink"];
    "eval_integration.sinks.langfuse_sink" [label="langfuse_sink"];
    "eval_integration.sinks.langfuse_sink_ops" [label="langfuse_sink_ops"];
    "eval_integration.sinks.ragas_sink" [label="ragas_sink"];
    "eval_integration.suite_registry" [label="suite_registry"];
    "eval_integration.suites.agent_weekly_suite" [label="agent_weekly_suite"];
    "eval_integration.suites.b9_oracle_suite" [label="b9_oracle_suite"];
    "eval_integration.suites.capability_suite" [label="capability_suite"];
    "eval_integration.suites.deepeval_suite" [label="deepeval_suite"];
    "eval_integration.suites.hermes_gate_suite" [label="hermes_gate_suite"];
    "eval_integration.suites.memory_mb_suite" [label="memory_mb_suite"];
    "eval_integration.suites.ragas_suite" [label="ragas_suite"];
    "eval_integration.suites.regression_suite" [label="regression_suite"];
    "eval_integration.suites.tcr_suite" [label="tcr_suite"];
    "eval_integration.suites.wechat_corpus_suite" [label="wechat_corpus_suite"];
    "eval_integration.suites_ops" [label="suites_ops"];
    "ops" [label="ops"];
    "ops.approval_diagnostics_ops" [label="approval_diagnostics_ops"];
    "ops.assistant_health" [label="assistant_health"];
    "ops.assistant_health_ops" [label="assistant_health_ops"];
    "ops.b9_failure_analysis" [label="b9_failure_analysis"];
    "ops.b9_harness_audit" [label="b9_harness_audit"];
    "ops.b9_harness_audit_ops" [label="b9_harness_audit_ops"];
    "ops.b9_lessons" [label="b9_lessons"];
    "ops.b9_lessons_ops" [label="b9_lessons_ops"];
    "ops.b9_prod_weekly" [label="b9_prod_weekly"];
    "ops.b9_prod_weekly_ops" [label="b9_prod_weekly_ops"];
    "ops.boundary_observability" [label="boundary_observability"];
    "ops.boundary_observability_ops" [label="boundary_observability_ops"];
    "ops.butler_inbox" [label="butler_inbox"];
    "ops.butler_inbox_ops" [label="butler_inbox_ops"];
    "ops.compaction_audit" [label="compaction_audit"];
    "ops.compaction_audit_ops" [label="compaction_audit_ops"];
    "ops.cost_calibration" [label="cost_calibration"];
    "ops.cost_calibration_cli" [label="cost_calibration_cli"];
    "ops.cost_tracker" [label="cost_tracker"];
    "ops.cost_tracker_ops" [label="cost_tracker_ops"];
    "ops.degradation_registry" [label="degradation_registry"];
    "ops.degradation_registry_ops" [label="degradation_registry_ops"];
    "ops.delegate_failure_b9_import" [label="delegate_failure_b9_import"];
    "ops.delegate_failure_b9_promote" [label="delegate_failure_b9_promote"];
    "ops.delegate_failure_b9_promote_ops" [label="delegate_failure_b9_promote_ops"];
    "ops.delegate_failure_capture" [label="delegate_failure_capture"];
    "ops.delegate_failure_capture_ops" [label="delegate_failure_capture_ops"];
    "ops.delegate_judge" [label="delegate_judge"];
    "ops.delegate_judge_ops" [label="delegate_judge_ops"];
    "ops.deploy_profile" [label="deploy_profile"];
    "ops.dev_eval" [label="dev_eval"];
    "ops.dual_playbook_probe" [label="dual_playbook_probe"];
    "ops.embedding_diagnostics" [label="embedding_diagnostics"];
    "ops.embedding_diagnostics_ops" [label="embedding_diagnostics_ops"];
    "ops.embedding_health" [label="embedding_health"];
    "ops.env_profiles" [label="env_profiles"];
    "ops.eval_actions" [label="eval_actions"];
    "ops.eval_actions_ops" [label="eval_actions_ops"];
    "ops.eval_bridge" [label="eval_bridge"];
    "ops.eval_bridge_ops" [label="eval_bridge_ops"];
    "ops.eval_config_overrides" [label="eval_config_overrides"];
    "ops.eval_diagnostics" [label="eval_diagnostics"];
    "ops.eval_diagnostics_ops" [label="eval_diagnostics_ops"];
    "ops.eval_experiment" [label="eval_experiment"];
    "ops.eval_experiment_ops" [label="eval_experiment_ops"];
    "ops.eval_feedback" [label="eval_feedback"];
    "ops.eval_feedback_ops" [label="eval_feedback_ops"];
    "ops.eval_regression" [label="eval_regression"];
    "ops.eval_regression_ops" [label="eval_regression_ops"];
    "ops.eval_scoring" [label="eval_scoring"];
    "ops.eval_turn" [label="eval_turn"];
    "ops.eval_turn_ops" [label="eval_turn_ops"];
    "ops.execution_surface_collect" [label="execution_surface_collect"];
    "ops.execution_surface_diagnostics" [label="execution_surface_diagnostics"];
    "ops.experience_selection_telemetry" [label="experience_selection_telemetry"];
    "ops.experience_selection_telemetry_ops" [label="experience_selection_telemetry_ops"];
    "ops.experiment_diagnostics" [label="experiment_diagnostics"];
    "ops.experiment_diagnostics_ops" [label="experiment_diagnostics_ops"];
    "ops.g1_04_prod_evidence" [label="g1_04_prod_evidence"];
    "ops.g1_04_prod_evidence_ops" [label="g1_04_prod_evidence_ops"];
    "ops.harness_diagnostics" [label="harness_diagnostics"];
    "ops.harness_diagnostics_ops" [label="harness_diagnostics_ops"];
    "ops.head_to_head" [label="head_to_head"];
    "ops.head_to_head_common" [label="head_to_head_common"];
    "ops.head_to_head_common_ops" [label="head_to_head_common_ops"];
    "ops.head_to_head_t1" [label="head_to_head_t1"];
    "ops.health_report" [label="health_report"];
    "ops.health_report_input" [label="health_report_input"];
    "ops.health_report_turn" [label="health_report_turn"];
    "ops.langfuse_tracer" [label="langfuse_tracer"];
    "ops.lingwen1_capture_probe" [label="lingwen1_capture_probe"];
    "ops.lingwen1_delegate_drill" [label="lingwen1_delegate_drill"];
    "ops.lingwen1_failure_seed" [label="lingwen1_failure_seed"];
    "ops.lingwen1_prod_sample" [label="lingwen1_prod_sample"];
    "ops.memory_eval" [label="memory_eval"];
    "ops.memory_eval_ops" [label="memory_eval_ops"];
    "ops.memory_recall_diagnostics_ops" [label="memory_recall_diagnostics_ops"];
    "ops.morning_brief_push" [label="morning_brief_push"];
    "ops.observation_diagnostics" [label="observation_diagnostics"];
    "ops.observation_diagnostics_ops" [label="observation_diagnostics_ops"];
    "ops.onboard" [label="onboard"];
    "ops.onboard_ops" [label="onboard_ops"];
    "ops.openclaw_diagnostics" [label="openclaw_diagnostics"];
    "ops.openclaw_diagnostics_ops" [label="openclaw_diagnostics_ops"];
    "ops.owner_brief_blocks" [label="owner_brief_blocks"];
    "ops.owner_brief_blocks_ops" [label="owner_brief_blocks_ops"];
    "ops.owner_feedback" [label="owner_feedback"];
    "ops.owner_feedback_ops" [label="owner_feedback_ops"];
    "ops.owner_pmf_metrics" [label="owner_pmf_metrics"];
    "ops.owner_pmf_metrics_ops" [label="owner_pmf_metrics_ops"];
    "ops.owner_quality_surface" [label="owner_quality_surface"];
    "ops.owner_quality_surface_ops" [label="owner_quality_surface_ops"];
    "ops.owner_trust_surface" [label="owner_trust_surface"];
    "ops.owner_trust_surface_ops" [label="owner_trust_surface_ops"];
    "ops.prod_experience_effectiveness" [label="prod_experience_effectiveness"];
    "ops.production_failure_experience" [label="production_failure_experience"];
    "ops.production_failure_experience_ops" [label="production_failure_experience_ops"];
    "ops.rag_diagnostics" [label="rag_diagnostics"];
    "ops.rag_diagnostics_ops" [label="rag_diagnostics_ops"];
    "ops.registry_diagnostics" [label="registry_diagnostics"];
    "ops.registry_diagnostics_ops" [label="registry_diagnostics_ops"];
    "ops.retry_buckets" [label="retry_buckets"];
    "ops.retry_buckets_ops" [label="retry_buckets_ops"];
    "ops.runtime_metrics_sink" [label="runtime_metrics_sink"];
    "ops.secrets_contract" [label="secrets_contract"];
    "ops.secrets_contract_cli" [label="secrets_contract_cli"];
    "ops.secrets_contract_ops" [label="secrets_contract_ops"];
    "ops.security_audit" [label="security_audit"];
    "ops.security_audit_ops" [label="security_audit_ops"];
    "ops.snapshot" [label="snapshot"];
    "ops.snapshot_ops" [label="snapshot_ops"];
    "ops.stack_diagnostics" [label="stack_diagnostics"];
    "ops.stack_diagnostics_ops" [label="stack_diagnostics_ops"];
    "ops.swebench_entry_gate" [label="swebench_entry_gate"];
    "ops.swebench_live_eval" [label="swebench_live_eval"];
    "ops.tcr_strict_readiness" [label="tcr_strict_readiness"];
    "ops.terminal_sandbox_diagnostics" [label="terminal_sandbox_diagnostics"];
    "ops.terminal_sandbox_diagnostics_ops" [label="terminal_sandbox_diagnostics_ops"];
    "ops.token_cost_diagnostics" [label="token_cost_diagnostics"];
    "ops.tool_routing" [label="tool_routing"];
    "ops.tool_routing_ops" [label="tool_routing_ops"];
    "ops.transcript_diagnostics" [label="transcript_diagnostics"];
    "ops.usage_ledger" [label="usage_ledger"];
    "ops.wechat_corpus_eval" [label="wechat_corpus_eval"];
    "ops.wechat_corpus_eval_ops" [label="wechat_corpus_eval_ops"];
    "ops.wechat_dataset" [label="wechat_dataset"];
  }

  subgraph cluster_Other {
    label="Other";
    style=filled;
    fillcolor="#cccccc";
    nodesep=0.3;
    ranksep=0.5;
    "agent_profiles" [label="agent_profiles"];
    "agent_profiles_ops" [label="agent_profiles_ops"];
    "agents_md" [label="agents_md"];
    "agents_md_ops" [label="agents_md_ops"];
    "blackboard.audit" [label="audit"];
    "blackboard.handoff" [label="handoff"];
    "blackboard.integrations.claude_session_end" [label="claude_session_end"];
    "blackboard.shift_io" [label="shift_io"];
    "blackboard.snapshot" [label="snapshot"];
    "blackboard.state_io" [label="state_io"];
    "blackboard.sync" [label="sync"];
    "blackboard.task_io" [label="task_io"];
    "blackboard.validator" [label="validator"];
    "butler_init_ops" [label="butler_init_ops"];
    "config" [label="config"];
    "config_ops" [label="config_ops"];
    "config_secrets" [label="config_secrets"];
    "config_secrets_crypto" [label="config_secrets_crypto"];
    "config_secrets_crypto_ops" [label="config_secrets_crypto_ops"];
    "config_secrets_ops" [label="config_secrets_ops"];
    "config_service" [label="config_service"];
    "context_settings" [label="context_settings"];
    "context_settings_ops" [label="context_settings_ops"];
    "dag_scheduler" [label="dag_scheduler"];
    "env_parse" [label="env_parse"];
    "execpolicy" [label="execpolicy"];
    "execpolicy.engine" [label="engine"];
    "execpolicy.engine_ops" [label="engine_ops"];
    "execution_context" [label="execution_context"];
    "experiments" [label="experiments"];
    "experiments.crash_guard" [label="crash_guard"];
    "experiments.git_utils" [label="git_utils"];
    "experiments.ledger" [label="ledger"];
    "experiments.ledger_ops" [label="ledger_ops"];
    "experiments.mode" [label="mode"];
    "experiments.outcomes" [label="outcomes"];
    "extensions.opencode" [label="opencode"];
    "extensions.opencode_ops" [label="opencode_ops"];
    "gate_reply_templates" [label="gate_reply_templates"];
    "gateway_settings" [label="gateway_settings"];
    "gateway_settings_ops" [label="gateway_settings_ops"];
    "hooks" [label="hooks"];
    "hooks.loader" [label="loader"];
    "hooks.loader_ops" [label="loader_ops"];
    "hooks.runner" [label="runner"];
    "hooks.runner_ops" [label="runner_ops"];
    "hooks.telemetry" [label="telemetry"];
    "hooks.telemetry_ops" [label="telemetry_ops"];
    "human_gate_ops" [label="human_gate_ops"];
    "logging_config" [label="logging_config"];
    "main" [label="main"];
    "memory_plugin" [label="memory_plugin"];
    "memory_settings" [label="memory_settings"];
    "memory_settings_ops" [label="memory_settings_ops"];
    "model_resolve" [label="model_resolve"];
    "model_resolve_ops" [label="model_resolve_ops"];
    "plan.markdown_sync" [label="markdown_sync"];
    "plan.markdown_sync_ops" [label="markdown_sync_ops"];
    "plan.mode" [label="mode"];
    "plan.mode_ops" [label="mode_ops"];
    "plan.store" [label="store"];
    "prompt_eval" [label="prompt_eval"];
    "prompt_eval.corpus_bridge" [label="corpus_bridge"];
    "prompt_eval.llm_rubric" [label="llm_rubric"];
    "prompt_eval.llm_rubric_ops" [label="llm_rubric_ops"];
    "prompt_eval.runner" [label="runner"];
    "provider_presets" [label="provider_presets"];
    "provider_presets_ops" [label="provider_presets_ops"];
    "repo_paths" [label="repo_paths"];
    "report" [label="report"];
    "report.acceptance_card" [label="acceptance_card"];
    "report.format" [label="format"];
    "report.format_ops" [label="format_ops"];
    "report.generator" [label="generator"];
    "report.generator_ops" [label="generator_ops"];
    "report.generator_schema" [label="generator_schema"];
    "report.store" [label="store"];
    "session" [label="session"];
    "session.lifecycle" [label="lifecycle"];
    "session.lifecycle_manager" [label="lifecycle_manager"];
    "session.lifecycle_ops" [label="lifecycle_ops"];
    "session.memory_prefetch" [label="memory_prefetch"];
    "session.memory_prefetch_ops" [label="memory_prefetch_ops"];
    "session.new_session" [label="new_session"];
    "session.new_session_ops" [label="new_session_ops"];
    "session.post_session" [label="post_session"];
    "session.post_session_extract_ops" [label="post_session_extract_ops"];
    "session.post_session_guard" [label="post_session_guard"];
    "session.post_session_layered" [label="post_session_layered"];
    "session.post_session_layered_ops" [label="post_session_layered_ops"];
    "session.post_session_ops" [label="post_session_ops"];
    "session.session_monitor" [label="session_monitor"];
    "session.session_resume" [label="session_resume"];
    "task_orchestrator" [label="task_orchestrator"];
    "task_orchestrator_ops" [label="task_orchestrator_ops"];
    "tenant" [label="tenant"];
    "tool_guardrails" [label="tool_guardrails"];
    "tool_guardrails_ops" [label="tool_guardrails_ops"];
    "workflow_step_runner" [label="workflow_step_runner"];
    "workflow_step_runner_ops" [label="workflow_step_runner_ops"];
  }

  "agent_profiles" -> "butler.agent_profiles_ops" [color="gray60", style="solid"];
  "agent_profiles_ops" -> "butler.core.best_effort" [color="gray60", style="solid"];
  "agent_profiles_ops" -> "butler.dev_engine.dev_tools" [color="gray60", style="solid"];
  "agents_md" -> "butler.agents_md_ops" [color="gray60", style="solid"];
  "agents_md_ops" -> "butler.core.best_effort" [color="gray60", style="solid"];
  "blackboard.audit" -> "butler.blackboard.shift_io" [color="gray60", style="solid"];
  "blackboard.audit" -> "butler.blackboard.task_io" [color="gray60", style="solid"];
  "blackboard.handoff" -> "butler.blackboard" [color="gray60", style="solid"];
  "blackboard.handoff" -> "butler.blackboard.shift_io" [color="gray60", style="solid"];
  "blackboard.integrations.claude_session_end" -> "butler.blackboard" [color="gray60", style="solid"];
  "blackboard.shift_io" -> "butler.blackboard" [color="gray60", style="solid"];
  "blackboard.shift_io" -> "butler.blackboard.errors" [color="gray60", style="solid"];
  "blackboard.shift_io" -> "butler.blackboard.schema" [color="gray60", style="solid"];
  "blackboard.shift_io" -> "butler.blackboard.validator" [color="gray60", style="solid"];
  "blackboard.snapshot" -> "butler.blackboard.shift_io" [color="gray60", style="solid"];
  "blackboard.snapshot" -> "butler.blackboard.task_io" [color="gray60", style="solid"];
  "blackboard.state_io" -> "butler.blackboard" [color="gray60", style="solid"];
  "blackboard.sync" -> "butler.blackboard.schema" [color="gray60", style="solid"];
  "blackboard.sync" -> "butler.blackboard.task_io" [color="gray60", style="solid"];
  "blackboard.task_io" -> "butler.blackboard" [color="gray60", style="solid"];
  "blackboard.task_io" -> "butler.blackboard.schema" [color="gray60", style="solid"];
  "blackboard.validator" -> "butler.blackboard.errors" [color="gray60", style="solid"];
  "blackboard.validator" -> "butler.blackboard.schema" [color="gray60", style="solid"];
  "butler_init_ops" -> "butler.core.best_effort" [color="gray60", style="solid"];
  "cli" -> "butler.cli.session_ui" [color="gray60", style="solid"];
  "cli.architecture_cli" -> "butler.core.circular_dependency_detector" [color="gray60", style="solid"];
  "cli.blackboard_cli" -> "butler.blackboard" [color="gray60", style="solid"];
  "cli.blackboard_cli" -> "butler.blackboard.audit" [color="gray60", style="solid"];
  "cli.blackboard_cli" -> "butler.blackboard.handoff" [color="gray60", style="solid"];
  "cli.blackboard_cli" -> "butler.blackboard.paths" [color="gray60", style="solid"];
  "cli.blackboard_cli" -> "butler.blackboard.shift_io" [color="gray60", style="solid"];
  "cli.blackboard_cli" -> "butler.blackboard.snapshot" [color="gray60", style="solid"];
  "cli.blackboard_cli" -> "butler.blackboard.sync" [color="gray60", style="solid"];
  "cli.blackboard_cli" -> "butler.blackboard.validator" [color="gray60", style="solid"];
  "cli.chat_cli" -> "butler.cli.chat_cli_ops" [color="gray60", style="solid"];
  "cli.chat_cli" -> "butler.cli.session_ui" [color="gray60", style="solid"];
  "cli.chat_cli" -> "butler.cli.slash_commands" [color="gray60", style="solid"];
  "cli.chat_cli" -> "butler.cli.slash_dispatch" [color="gray60", style="solid"];
  "cli.chat_cli" -> "butler.cli.stream" [color="gray60", style="solid"];
  "cli.chat_cli" -> "butler.core.loop_types" [color="gray60", style="solid"];
  "cli.chat_cli" -> "butler.execution_context" [color="gray60", style="solid"];
  "cli.chat_cli" -> "butler.gateway.hooks" [color="gray60", style="solid"];
  "cli.chat_cli" -> "butler.hooks.runner" [color="gray60", style="solid"];
  "cli.chat_cli" -> "butler.orchestrator" [color="gray60", style="solid"];
  "cli.chat_cli" -> "butler.project.lead" [color="gray60", style="solid"];
  "cli.chat_cli" -> "butler.session.keys" [color="gray60", style="solid"];
  "cli.chat_cli" -> "butler.session.lifecycle" [color="gray60", style="solid"];
  "cli.chat_cli" -> "butler.tools.project_tools" [color="gray60", style="solid"];
  "cli.chat_cli" -> "butler.tools.registry" [color="gray60", style="solid"];
  "cli.cost_cli" -> "butler.ops.cost_calibration_cli" [color="gray60", style="solid"];
  "cli.doctor" -> "butler.cli.doctor_sections" [color="gray60", style="solid"];
  "cli.doctor" -> "butler.ops.security_audit" [color="gray60", style="solid"];
  "cli.doctor_sections" -> "butler.configuration.secrets" [color="gray60", style="solid"];
  "cli.doctor_sections" -> "butler.configuration.settings" [color="gray60", style="solid"];
  "cli.doctor_sections" -> "butler.core.best_effort" [color="gray60", style="solid"];
  "cli.doctor_sections" -> "butler.core.transform_overrides" [color="gray60", style="solid"];
  "cli.doctor_sections" -> "butler.gateway.media_diagnostic_ops" [color="gray60", style="solid"];
  "cli.doctor_sections" -> "butler.memory.semantic_config" [color="gray60", style="solid"];
  "cli.doctor_sections" -> "butler.memory.semantic_index" [color="gray60", style="solid"];
  "cli.doctor_sections" -> "butler.memory.vector_store" [color="gray60", style="solid"];
  "cli.doctor_sections" -> "butler.model_resolve" [color="gray60", style="solid"];
  "cli.doctor_sections" -> "butler.ops.approval_diagnostics_ops" [color="gray60", style="solid"];
  "cli.doctor_sections" -> "butler.ops.boundary_observability" [color="gray60", style="solid"];
  "cli.doctor_sections" -> "butler.ops.degradation_registry" [color="gray60", style="solid"];
  "cli.doctor_sections" -> "butler.ops.deploy_profile" [color="gray60", style="solid"];
  "cli.doctor_sections" -> "butler.ops.embedding_diagnostics" [color="gray60", style="solid"];
  "cli.doctor_sections" -> "butler.ops.embedding_health" [color="gray60", style="solid"];
  "cli.doctor_sections" -> "butler.ops.eval_diagnostics" [color="gray60", style="solid"];
  "cli.doctor_sections" -> "butler.ops.execution_surface_diagnostics" [color="gray60", style="solid"];
  "cli.doctor_sections" -> "butler.ops.memory_recall_diagnostics_ops" [color="gray60", style="solid"];
  "cli.doctor_sections" -> "butler.ops.stack_diagnostics" [color="gray60", style="solid"];
  "cli.doctor_sections" -> "butler.ops.terminal_sandbox_diagnostics" [color="gray60", style="solid"];
  "cli.doctor_sections" -> "butler.ops.transcript_diagnostics" [color="gray60", style="solid"];
  "cli.doctor_sections" -> "butler.tools.path_safety" [color="gray60", style="solid"];
  "cli.doctor_sections" -> "butler.utilities.tenant" [color="gray60", style="solid"];
  "cli.eval_cli" -> "butler.eval_integration.manager" [color="gray60", style="solid"];
  "cli.eval_cli" -> "butler.eval_integration.presets" [color="gray60", style="solid"];
  "cli.events_cli" -> "butler.core.events.event_consumer" [color="gray60", style="solid"];
  "cli.experiment_cli" -> "butler.experiments.git_utils" [color="gray60", style="solid"];
  "cli.experiment_cli" -> "butler.experiments.ledger" [color="gray60", style="solid"];
  "cli.experiment_cli" -> "butler.experiments.outcomes" [color="gray60", style="solid"];
  "cli.experiment_cli" -> "butler.project.manager" [color="gray60", style="solid"];
  "cli.gateway_cli" -> "butler.configuration.settings" [color="gray60", style="solid"];
  "cli.gateway_cli" -> "butler.gateway.platform_policy" [color="gray60", style="solid"];
  "cli.gateway_cli" -> "butler.gateway.platforms.wechat" [color="gray60", style="solid"];
  "cli.gateway_cli" -> "butler.gateway.runner" [color="gray60", style="solid"];
  "cli.gateway_cli" -> "butler.utilities.repo_paths" [color="gray60", style="solid"];
  "cli.mcp_catalog_cli" -> "butler.registry.install_scan" [color="gray60", style="solid"];
  "cli.mcp_catalog_cli" -> "butler.registry.mcp_catalog" [color="gray60", style="solid"];
  "cli.mcp_catalog_cli" -> "butler.registry.mcp_install" [color="gray60", style="solid"];
  "cli.mcp_catalog_cli" -> "butler.registry.mcp_merge" [color="gray60", style="solid"];
  "cli.mcp_catalog_cli" -> "butler.registry.mcp_ssot" [color="gray60", style="solid"];
  "cli.mcp_cli" -> "butler.cli.mcp_catalog_cli" [color="gray60", style="solid"];
  "cli.mcp_cli" -> "butler.mcp.server_stdio" [color="gray60", style="solid"];
  "cli.memory_cli" -> "butler.cli.memory_cli_ops" [color="gray60", style="solid"];
  "cli.memory_cli" -> "butler.configuration.settings" [color="gray60", style="solid"];
  "cli.memory_cli" -> "butler.defaults.env_defaults" [color="gray60", style="solid"];
  "cli.memory_cli" -> "butler.dev_engine.prod_delegate_bridge" [color="gray60", style="solid"];
  "cli.memory_cli" -> "butler.memory.document_ingest" [color="gray60", style="solid"];
  "cli.memory_cli" -> "butler.memory.experience_consolidation" [color="gray60", style="solid"];
  "cli.memory_cli" -> "butler.memory.observation_migrate" [color="gray60", style="solid"];
  "cli.memory_cli" -> "butler.memory.owner_experience_seed" [color="gray60", style="solid"];
  "cli.memory_cli" -> "butler.memory.pending_cli" [color="gray60", style="solid"];
  "cli.memory_cli" -> "butler.memory.reindex" [color="gray60", style="solid"];
  "cli.memory_cli" -> "butler.memory.scope_diagnostics" [color="gray60", style="solid"];
  "cli.memory_cli" -> "butler.memory.search_cli" [color="gray60", style="solid"];
  "cli.memory_cli" -> "butler.memory.vector_gc" [color="gray60", style="solid"];
  "cli.memory_cli" -> "butler.ops.observation_diagnostics" [color="gray60", style="solid"];
  "cli.memory_cli_ops" -> "butler.core.best_effort" [color="gray60", style="solid"];
  "cli.memory_cli_ops" -> "butler.project.manager" [color="gray60", style="solid"];
  "cli.onboard_cli" -> "butler.ops.onboard" [color="gray60", style="solid"];
  "cli.projects_cli" -> "butler.configuration.settings" [color="gray60", style="solid"];
  "cli.projects_cli" -> "butler.project.archetypes" [color="gray60", style="solid"];
  "cli.projects_cli" -> "butler.project.manager" [color="gray60", style="solid"];
  "cli.projects_cli" -> "butler.project.preflight" [color="gray60", style="solid"];
  "cli.prompt_eval_cli" -> "butler.prompt_eval.corpus_bridge" [color="gray60", style="solid"];
  "cli.prompt_eval_cli" -> "butler.prompt_eval.runner" [color="gray60", style="solid"];
  "cli.provider_presets_cli" -> "butler.configuration.provider_presets" [color="gray60", style="solid"];
  "cli.provider_presets_cli" -> "butler.project" [color="gray60", style="solid"];
  "cli.registry_cli" -> "butler.registry.hub_manifest" [color="gray60", style="solid"];
  "cli.runtime_cli" -> "butler.runtime.notify" [color="gray60", style="solid"];
  "cli.runtime_cli" -> "butler.runtime.push_queue" [color="gray60", style="solid"];
  "cli.runtime_cli" -> "butler.runtime.service" [color="gray60", style="solid"];
  "cli.secrets_cli" -> "butler.configuration.secrets" [color="gray60", style="solid"];
  "cli.session_ui" -> "butler.cli.display" [color="gray60", style="solid"];
  "cli.session_ui" -> "butler.cli.spinner" [color="gray60", style="solid"];
  "cli.session_ui" -> "butler.cli.stream" [color="gray60", style="solid"];
  "cli.session_ui" -> "butler.core.loop_types" [color="gray60", style="solid"];
  "cli.session_ui" -> "butler.defaults.env_defaults" [color="gray60", style="solid"];
  "cli.session_ui" -> "butler.report" [color="gray60", style="solid"];
  "cli.session_ui" -> "butler.transport.error_classifier" [color="gray60", style="solid"];
  "cli.sessions_cli" -> "butler.configuration.settings" [color="gray60", style="solid"];
  "cli.sessions_cli" -> "butler.session.post_session_layered" [color="gray60", style="solid"];
  "cli.sessions_cli" -> "butler.transport.auxiliary_client" [color="gray60", style="solid"];
  "cli.skills_registry" -> "butler.cli.skills_registry_ops" [color="gray60", style="solid"];
  "cli.skills_registry" -> "butler.configuration.settings" [color="gray60", style="solid"];
  "cli.skills_registry" -> "butler.registry.skill_service" [color="gray60", style="solid"];
  "cli.skills_registry" -> "butler.registry.skills_project_sync" [color="gray60", style="solid"];
  "cli.skills_registry" -> "butler.registry.skills_ssot" [color="gray60", style="solid"];
  "cli.skills_registry" -> "butler.skills.learn" [color="gray60", style="solid"];
  "cli.skills_registry" -> "butler.skills.lint" [color="gray60", style="solid"];
  "cli.skills_registry" -> "butler.skills.manager" [color="gray60", style="solid"];
  "cli.skills_registry" -> "butler.skills.write_approval" [color="gray60", style="solid"];
  "cli.skills_registry" -> "butler.utilities.tenant" [color="gray60", style="solid"];
  "cli.skills_registry_ops" -> "butler.configuration.settings" [color="gray60", style="solid"];
  "cli.skills_registry_ops" -> "butler.core.best_effort" [color="gray60", style="solid"];
  "cli.skills_registry_ops" -> "butler.registry.registry_errors" [color="gray60", style="solid"];
  "cli.slash_dispatch" -> "butler.cli.slash_dispatch_ops" [color="gray60", style="solid"];
  "cli.slash_dispatch" -> "butler.core.steer" [color="gray60", style="solid"];
  "cli.slash_dispatch" -> "butler.execution_context" [color="gray60", style="solid"];
  "cli.slash_dispatch" -> "butler.gateway.commands.memory_handlers" [color="gray60", style="solid"];
  "cli.slash_dispatch" -> "butler.gateway.message_handler" [color="gray60", style="solid"];
  "cli.slash_dispatch" -> "butler.model_resolve" [color="gray60", style="solid"];
  "cli.slash_dispatch" -> "butler.orchestrator" [color="gray60", style="solid"];
  "cli.slash_dispatch" -> "butler.plan.mode" [color="gray60", style="solid"];
  "cli.slash_dispatch" -> "butler.project.lead" [color="gray60", style="solid"];
  "cli.slash_dispatch" -> "butler.report" [color="gray60", style="solid"];
  "cli.slash_dispatch" -> "butler.report.format" [color="gray60", style="solid"];
  "cli.slash_dispatch" -> "butler.runtime.task_store" [color="gray60", style="solid"];
  "cli.slash_dispatch" -> "butler.session.keys" [color="gray60", style="solid"];
  "cli.slash_dispatch" -> "butler.session.lifecycle" [color="gray60", style="solid"];
  "cli.slash_dispatch" -> "butler.session.new_session" [color="gray60", style="solid"];
  "cli.slash_dispatch" -> "butler.workflows.commands" [color="gray60", style="solid"];
  "cli.slash_dispatch_ops" -> "butler.report" [color="gray60", style="solid"];
  "cli.stream" -> "butler.defaults.env_defaults" [color="gray60", style="solid"];
  "cli.stream" -> "butler.transport.content_sanitize" [color="gray60", style="solid"];
  "cli.transcript_cli" -> "butler.core.transcript_fts" [color="gray60", style="solid"];
  "cli.workflow_cli" -> "butler.project.manager" [color="gray60", style="solid"];
  "cli.workflow_cli" -> "butler.workflows.validate" [color="gray60", style="solid"];
  "config" -> "butler.configuration.settings" [color="gray60", style="solid"];
  "config_ops" -> "butler.configuration.settings_ops" [color="gray60", style="solid"];
  "config_secrets" -> "butler.configuration.secrets" [color="gray60", style="solid"];
  "config_secrets_crypto" -> "butler.configuration.secrets_crypto" [color="gray60", style="solid"];
  "config_secrets_crypto_ops" -> "butler.configuration.secrets_crypto_ops" [color="gray60", style="solid"];
  "config_secrets_ops" -> "butler.configuration.secrets_ops" [color="gray60", style="solid"];
  "config_service" -> "butler.configuration.service" [color="gray60", style="solid"];
  "configuration.context" -> "butler.defaults.env_defaults" [color="gray60", style="solid"];
  "configuration.context" -> "butler.utilities.env_parse" [color="gray60", style="solid"];
  "configuration.context_ops" -> "butler.core.best_effort" [color="gray60", style="solid"];
  "configuration.gateway" -> "butler.configuration.settings" [color="gray60", style="solid"];
  "configuration.gateway" -> "butler.defaults.env_defaults" [color="gray60", style="solid"];
  "configuration.gateway" -> "butler.defaults.model_defaults" [color="gray60", style="solid"];
  "configuration.gateway" -> "butler.utilities.env_parse" [color="gray60", style="solid"];
  "configuration.gateway_ops" -> "butler.core.best_effort" [color="gray60", style="solid"];
  "configuration.memory" -> "butler.defaults.env_defaults" [color="gray60", style="solid"];
  "configuration.memory" -> "butler.utilities.env_parse" [color="gray60", style="solid"];
  "configuration.memory_ops" -> "butler.core.best_effort" [color="gray60", style="solid"];
  "configuration.provider_presets" -> "butler.defaults.model_defaults" [color="gray60", style="solid"];
  "configuration.provider_presets" -> "butler.model_resolve" [color="gray60", style="solid"];
  "configuration.provider_presets" -> "butler.project" [color="gray60", style="solid"];
  "configuration.provider_presets_ops" -> "butler.core.best_effort" [color="gray60", style="solid"];
  "configuration.secrets" -> "butler.defaults.env_defaults" [color="gray60", style="solid"];
  "configuration.secrets_crypto" -> "butler.utilities.env_parse" [color="gray60", style="solid"];
  "configuration.secrets_ops" -> "butler.core.best_effort" [color="gray60", style="solid"];
  "configuration.service" -> "butler.defaults.env_defaults" [color="gray60", style="solid"];
  "configuration.settings" -> "butler.defaults.env_defaults" [color="gray60", style="solid"];
  "configuration.settings" -> "butler.defaults.model_defaults" [color="gray60", style="solid"];
  "configuration.settings" -> "butler.model_resolve" [color="gray60", style="solid"];
  "configuration.settings" -> "butler.utilities.env_parse" [color="gray60", style="solid"];
  "configuration.settings_ops" -> "butler.core.best_effort" [color="gray60", style="solid"];
  "context_settings" -> "butler.configuration.context" [color="gray60", style="solid"];
  "context_settings_ops" -> "butler.configuration.context" [color="gray60", style="solid"];
  "contracts" -> "butler.contracts.approval_store_impl" [color="gray60", style="solid"];
  "contracts" -> "butler.contracts.bridge_access" [color="gray60", style="solid"];
  "contracts" -> "butler.contracts.compaction_ports" [color="gray60", style="solid"];
  "contracts" -> "butler.contracts.context_transform_ports" [color="gray60", style="solid"];
  "contracts" -> "butler.contracts.dev_context_ports" [color="gray60", style="solid"];
  "contracts" -> "butler.contracts.dev_state_ports" [color="gray60", style="solid"];
  "contracts" -> "butler.contracts.eval_ports" [color="gray60", style="solid"];
  "contracts" -> "butler.contracts.events" [color="gray60", style="solid"];
  "contracts" -> "butler.contracts.gateway_registry" [color="gray60", style="solid"];
  "contracts" -> "butler.contracts.hook_context_ports" [color="gray60", style="solid"];
  "contracts" -> "butler.contracts.memory_ports" [color="gray60", style="solid"];
  "contracts" -> "butler.contracts.message_ports" [color="gray60", style="solid"];
  "contracts" -> "butler.contracts.owner_gate" [color="gray60", style="solid"];
  "contracts" -> "butler.contracts.review_ports" [color="gray60", style="solid"];
  "contracts" -> "butler.contracts.sink_registry" [color="gray60", style="solid"];
  "contracts" -> "butler.contracts.workflow_gate_impl" [color="gray60", style="solid"];
  "contracts.approval_registry" -> "butler.contracts.approval_ports" [color="gray60", style="solid"];
  "contracts.approval_store_impl" -> "butler.contracts.approval_registry" [color="gray60", style="solid"];
  "contracts.approval_store_impl" -> "butler.permissions.approvals" [color="gray60", style="solid"];
  "contracts.completion_registry" -> "butler.contracts.completion_ports" [color="gray60", style="solid"];
  "contracts.gateway_registry" -> "butler.contracts.bridge_access" [color="gray60", style="solid"];
  "contracts.gateway_registry" -> "butler.contracts.owner_gate" [color="gray60", style="solid"];
  "contracts.health_diagnostic_ports" -> "butler.contracts.health_report_input" [color="gray60", style="solid"];
  "contracts.health_diagnostic_registry" -> "butler.contracts.health_diagnostic_ports" [color="gray60", style="solid"];
  "contracts.inbound_idempotency_registry" -> "butler.contracts.inbound_idempotency_ports" [color="gray60", style="solid"];
  "contracts.sink_registry" -> "butler.contracts.events" [color="gray60", style="solid"];
  "contracts.tool_dispatch_ports" -> "butler.tool_guardrails" [color="gray60", style="solid"];
  "contracts.tool_dispatch_registry" -> "butler.contracts.tool_dispatch_ports" [color="gray60", style="solid"];
  "contracts.tool_registry_registry" -> "butler.contracts.tool_registry_ports" [color="gray60", style="solid"];
  "contracts.workflow_gate_impl" -> "butler.contracts.workflow_gate_registry" [color="gray60", style="solid"];
  "contracts.workflow_gate_impl" -> "butler.permissions.human_gate" [color="gray60", style="solid"];
  "contracts.workflow_gate_registry" -> "butler.contracts.workflow_gate_impl" [color="gray60", style="solid"];
  "contracts.workflow_gate_registry" -> "butler.contracts.workflow_gate_ports" [color="gray60", style="solid"];
  "core.agent_loop" -> "butler.core.agent_loop.loop" [color="gray60", style="solid"];
  "core.agent_loop" -> "butler.core.agent_loop.phases" [color="gray60", style="solid"];
  "core.agent_loop" -> "butler.core.loop_types" [color="gray60", style="solid"];
  "core.agent_loop.loop" -> "butler.core.agent_loop.loop_conversation" [color="gray60", style="solid"];
  "core.agent_loop.loop" -> "butler.core.agent_loop.loop_helpers" [color="gray60", style="solid"];
  "core.agent_loop.loop" -> "butler.core.agent_loop.phases" [color="gray60", style="solid"];
  "core.agent_loop.loop" -> "butler.core.agent_loop_ops" [color="gray60", style="solid"];
  "core.agent_loop.loop" -> "butler.core.best_effort" [color="gray60", style="solid"];
  "core.agent_loop.loop" -> "butler.core.context_pipeline" [color="gray60", style="solid"];
  "core.agent_loop.loop" -> "butler.core.interrupt" [color="gray60", style="solid"];
  "core.agent_loop.loop" -> "butler.core.loop_callbacks_merge" [color="gray60", style="solid"];
  "core.agent_loop.loop" -> "butler.core.loop_plugins" [color="gray60", style="solid"];
  "core.agent_loop.loop" -> "butler.core.loop_types" [color="gray60", style="solid"];
  "core.agent_loop.loop" -> "butler.core.session_transcript" [color="gray60", style="solid"];
  "core.agent_loop.loop" -> "butler.core.steer" [color="gray60", style="solid"];
  "core.agent_loop.loop" -> "butler.execution_context" [color="gray60", style="solid"];
  "core.agent_loop.loop" -> "butler.mcp.turn_scrape_dedup" [color="gray60", style="solid"];
  "core.agent_loop.loop" -> "butler.tool_guardrails" [color="gray60", style="solid"];
  "core.agent_loop.loop" -> "butler.tools.network_search_policy" [color="gray60", style="solid"];
  "core.agent_loop.loop" -> "butler.transport.base" [color="gray60", style="solid"];
  "core.agent_loop.loop" -> "butler.transport.fallback" [color="gray60", style="solid"];
  "core.agent_loop.loop" -> "butler.transport.llm_client" [color="gray60", style="solid"];
  "core.agent_loop.loop_conversation" -> "butler.core.best_effort" [color="gray60", style="solid"];
  "core.agent_loop.loop_conversation" -> "butler.core.conversation_state" [color="gray60", style="solid"];
  "core.agent_loop.loop_conversation" -> "butler.core.delegate_context" [color="gray60", style="solid"];
  "core.agent_loop.loop_conversation" -> "butler.core.steer" [color="gray60", style="solid"];
  "core.agent_loop.loop_conversation" -> "butler.core.tool_call_limits" [color="gray60", style="solid"];
  "core.agent_loop.loop_conversation" -> "butler.core.turn_summarizer" [color="gray60", style="solid"];
  "core.agent_loop.loop_conversation" -> "butler.defaults.env_defaults" [color="gray60", style="solid"];
  "core.agent_loop.loop_conversation" -> "butler.memory.experience.retriever" [color="gray60", style="solid"];
  "core.agent_loop.loop_conversation" -> "butler.memory.experience.writer" [color="gray60", style="solid"];
  "core.agent_loop.loop_conversation" -> "butler.memory.semantic_index" [color="gray60", style="solid"];
  "core.agent_loop.loop_conversation" -> "butler.tools.conversation_state_tools" [color="gray60", style="solid"];
  "core.agent_loop.loop_helpers" -> "butler.core.agent_loop_ops" [color="gray60", style="solid"];
  "core.agent_loop.loop_helpers" -> "butler.core.best_effort" [color="gray60", style="solid"];
  "core.agent_loop.loop_helpers" -> "butler.core.context_compressor" [color="gray60", style="solid"];
  "core.agent_loop.loop_helpers" -> "butler.core.events.event_store" [color="gray60", style="solid"];
  "core.agent_loop.loop_helpers" -> "butler.core.interrupt" [color="gray60", style="solid"];
  "core.agent_loop.loop_helpers" -> "butler.core.llm_retry" [color="gray60", style="solid"];
  "core.agent_loop.loop_helpers" -> "butler.core.tool_batch" [color="gray60", style="solid"];
  "core.agent_loop.loop_helpers" -> "butler.execution_context" [color="gray60", style="solid"];
  "core.agent_loop.loop_helpers" -> "butler.tools.network_search_policy" [color="gray60", style="solid"];
  "core.agent_loop.loop_helpers" -> "butler.tools.tool_service" [color="gray60", style="solid"];
  "core.agent_loop.loop_helpers" -> "butler.transport.fallback" [color="gray60", style="solid"];
  "core.agent_loop.loop_helpers" -> "butler.transport.types" [color="gray60", style="solid"];
  "core.agent_loop.phases" -> "butler.core.agent_loop.phases" [color="gray60", style="solid"];
  "core.agent_loop.phases.compaction_phase" -> "butler.core.agent_loop.loop" [color="gray60", style="solid"];
  "core.agent_loop.phases.compaction_phase" -> "butler.core.agent_loop.loop_helpers" [color="gray60", style="solid"];
  "core.agent_loop.phases.compaction_phase" -> "butler.core.best_effort" [color="gray60", style="solid"];
  "core.agent_loop.phases.compaction_phase" -> "butler.core.compaction_steer_bridge" [color="gray60", style="solid"];
  "core.agent_loop.phases.compaction_phase" -> "butler.core.compaction_task" [color="gray60", style="solid"];
  "core.agent_loop.phases.compaction_phase" -> "butler.core.loop_types" [color="gray60", style="solid"];
  "core.agent_loop.phases.dispatch_phase" -> "butler.core.agent_loop.loop" [color="gray60", style="solid"];
  "core.agent_loop.phases.dispatch_phase" -> "butler.core.agent_loop.loop_helpers" [color="gray60", style="solid"];
  "core.agent_loop.phases.dispatch_phase" -> "butler.core.best_effort" [color="gray60", style="solid"];
  "core.agent_loop.phases.dispatch_phase" -> "butler.core.loop_response" [color="gray60", style="solid"];
  "core.agent_loop.phases.dispatch_phase" -> "butler.core.loop_stuck" [color="gray60", style="solid"];
  "core.agent_loop.phases.dispatch_phase" -> "butler.core.loop_types" [color="gray60", style="solid"];
  "core.agent_loop.phases.dispatch_phase" -> "butler.core.output_grounding" [color="gray60", style="solid"];
  "core.agent_loop.phases.dispatch_phase" -> "butler.core.reasoning_trace" [color="gray60", style="solid"];
  "core.agent_loop.phases.dispatch_phase" -> "butler.core.turn_token_budget" [color="gray60", style="solid"];
  "core.agent_loop.phases.dispatch_phase" -> "butler.mcp.github_grounding" [color="gray60", style="solid"];
  "core.agent_loop.phases.dispatch_phase" -> "butler.mcp.outbound_grounding_gate" [color="gray60", style="solid"];
  "core.agent_loop.phases.dispatch_phase" -> "butler.mcp.todoist_grounding" [color="gray60", style="solid"];
  "core.agent_loop.phases.dispatch_phase" -> "butler.transport.types" [color="gray60", style="solid"];
  "core.agent_loop.phases.finalize_phase" -> "butler.core.agent_loop.loop" [color="gray60", style="solid"];
  "core.agent_loop.phases.finalize_phase" -> "butler.core.best_effort" [color="gray60", style="solid"];
  "core.agent_loop.phases.finalize_phase" -> "butler.core.hook_context_adapter" [color="gray60", style="solid"];
  "core.agent_loop.phases.finalize_phase" -> "butler.core.loop_types" [color="gray60", style="solid"];
  "core.agent_loop.phases.finalize_phase" -> "butler.core.session_transcript" [color="gray60", style="solid"];
  "core.agent_loop.phases.finalize_phase" -> "butler.hooks.runner" [color="gray60", style="solid"];
  "core.agent_loop.phases.finalize_phase" -> "butler.ops.runtime_metrics" [color="gray60", style="solid"];
  "core.agent_loop.phases.init_phase" -> "butler.core.agent_loop.loop" [color="gray60", style="solid"];
  "core.agent_loop.phases.init_phase" -> "butler.core.agent_loop.loop_conversation" [color="gray60", style="solid"];
  "core.agent_loop.phases.init_phase" -> "butler.core.agent_loop.loop_helpers" [color="gray60", style="solid"];
  "core.agent_loop.phases.init_phase" -> "butler.core.best_effort" [color="gray60", style="solid"];
  "core.agent_loop.phases.init_phase" -> "butler.core.turn_token_budget" [color="gray60", style="solid"];
  "core.agent_loop.phases.init_phase" -> "butler.ops.eval_actions" [color="gray60", style="solid"];
  "core.agent_loop.phases.init_phase" -> "butler.ops.eval_feedback" [color="gray60", style="solid"];
  "core.agent_loop.phases.llm_phase" -> "butler.core.agent_loop.loop" [color="gray60", style="solid"];
  "core.agent_loop.phases.llm_phase" -> "butler.core.agent_loop.loop_helpers" [color="gray60", style="solid"];
  "core.agent_loop.phases.llm_phase" -> "butler.core.best_effort" [color="gray60", style="solid"];
  "core.agent_loop.phases.llm_phase" -> "butler.core.context_budget" [color="gray60", style="solid"];
  "core.agent_loop.phases.llm_phase" -> "butler.core.loop_budget_nudge" [color="gray60", style="solid"];
  "core.agent_loop.phases.llm_phase" -> "butler.core.loop_types" [color="gray60", style="solid"];
  "core.agent_loop.phases.llm_phase" -> "butler.execution_context" [color="gray60", style="solid"];
  "core.agent_loop.phases.llm_phase" -> "butler.ops.cost_tracker" [color="gray60", style="solid"];
  "core.agent_loop.phases.llm_phase" -> "butler.transport.types" [color="gray60", style="solid"];
  "core.agent_loop.phases.llm_phase" -> "butler.transport.usage_normalize" [color="gray60", style="solid"];
  "core.agent_loop.phases.state" -> "butler.core.loop_types" [color="gray60", style="solid"];
  "core.agent_loop.phases.state" -> "butler.execution_context" [color="gray60", style="solid"];
  "core.agent_loop.phases.state" -> "butler.transport.reasoning_replay" [color="gray60", style="solid"];
  "core.agent_loop.phases.state" -> "butler.transport.types" [color="gray60", style="solid"];
  "core.agent_loop.phases.user_text_phase" -> "butler.core.agent_loop.loop" [color="gray60", style="solid"];
  "core.agent_loop.phases.user_text_phase" -> "butler.core.best_effort" [color="gray60", style="solid"];
  "core.agent_loop.phases.user_text_phase" -> "butler.core.harness_flags" [color="gray60", style="solid"];
  "core.agent_loop.phases.user_text_phase" -> "butler.core.message_sanitize" [color="gray60", style="solid"];
  "core.agent_loop.phases.user_text_phase" -> "butler.core.session_transcript" [color="gray60", style="solid"];
  "core.agent_loop.phases.user_text_phase" -> "butler.core.skill_tool_bridge" [color="gray60", style="solid"];
  "core.agent_loop.phases.user_text_phase" -> "butler.core.system_reminder" [color="gray60", style="solid"];
  "core.agent_loop.phases.user_text_phase" -> "butler.core.tool_selector" [color="gray60", style="solid"];
  "core.agent_loop.phases.user_text_phase" -> "butler.mcp.deferred" [color="gray60", style="solid"];
  "core.agent_loop.phases.user_text_phase" -> "butler.ops.runtime_metrics" [color="gray60", style="solid"];
  "core.agent_loop.phases.user_text_phase" -> "butler.tools.tool_service" [color="gray60", style="solid"];
  "core.agent_loop_ops" -> "butler.core.agent_loop.phases" [color="gray60", style="solid"];
  "core.agent_loop_ops" -> "butler.core.best_effort" [color="gray60", style="solid"];
  "core.agent_loop_ops" -> "butler.core.context_transform_registry" [color="gray60", style="solid"];
  "core.agent_loop_ops" -> "butler.core.loop_types" [color="gray60", style="solid"];
  "core.agent_loop_ops" -> "butler.core.reflexion_ephemeral" [color="gray60", style="solid"];
  "core.agent_loop_ops" -> "butler.hooks.runner" [color="gray60", style="solid"];
  "core.agent_loop_ops" -> "butler.ops.runtime_metrics" [color="gray60", style="solid"];
  "core.agent_loop_ops" -> "butler.permissions.doom_loop" [color="gray60", style="solid"];
  "core.agent_loop_ops" -> "butler.tool_guardrails" [color="gray60", style="solid"];
  "core.agent_loop_ops" -> "butler.transport.fallback" [color="gray60", style="solid"];
  "core.agent_loop_ops" -> "butler.transport.provider_health" [color="gray60", style="solid"];
  "core.agent_loop_phases" -> "butler.core.agent_loop.phases" [color="gray60", style="solid"];
  "core.agents_md_sections" -> "butler.core.agents_md_sections_ops" [color="gray60", style="solid"];
  "core.agents_md_sections" -> "butler.defaults.env_defaults" [color="gray60", style="solid"];
  "core.agents_md_sections" -> "butler.utilities.env_parse" [color="gray60", style="solid"];
  "core.agents_md_sections_ops" -> "butler.core.design_md_sections_ops" [color="gray60", style="solid"];
  "core.auto_continue" -> "butler.core.compaction_checkpoint" [color="gray60", style="solid"];
  "core.auto_continue" -> "butler.defaults.env_defaults" [color="gray60", style="solid"];
  "core.auto_continue" -> "butler.utilities.env_parse" [color="gray60", style="solid"];
  "core.auto_review" -> "butler.core.auto_review_ops" [color="gray60", style="solid"];
  "core.auto_review" -> "butler.defaults.env_defaults" [color="gray60", style="solid"];
  "core.auto_review" -> "butler.utilities.env_parse" [color="gray60", style="solid"];
  "core.auto_review_ops" -> "butler.core.best_effort" [color="gray60", style="solid"];
  "core.auto_review_ops" -> "butler.tools.terminal_sandbox" [color="gray60", style="solid"];
  "core.auto_review_ops" -> "butler.transport.auxiliary_client" [color="gray60", style="solid"];
  "core.batch_sequence_guard" -> "butler.core.batch_sequence_guard_ops" [color="gray60", style="solid"];
  "core.batch_sequence_guard" -> "butler.tool_guardrails" [color="gray60", style="solid"];
  "core.batch_sequence_guard" -> "butler.utilities.env_parse" [color="gray60", style="solid"];
  "core.batch_sequence_guard_ops" -> "butler.core.batch_sequence_guard" [color="gray60", style="solid"];
  "core.batch_sequence_guard_ops" -> "butler.core.best_effort" [color="gray60", style="solid"];
  "core.batch_sequence_guard_ops" -> "butler.core.read_state" [color="gray60", style="solid"];
  "core.best_effort" -> "butler.ops.runtime_metrics" [color="gray60", style="solid"];
  "core.cache_safe_delegate" -> "butler.utilities.env_parse" [color="gray60", style="solid"];
  "core.circular_dependency_detector" -> "butler.utilities.repo_paths" [color="gray60", style="solid"];
  "core.compaction_checkpoint" -> "butler.core.compaction_checkpoint_ops" [color="gray60", style="solid"];
  "core.compaction_checkpoint_ops" -> "butler.core.best_effort" [color="gray60", style="solid"];
  "core.compaction_checkpoint_ops" -> "butler.core.compaction_context_adapter" [color="gray60", style="solid"];
  "core.compaction_checkpoint_ops" -> "butler.core.session_todos" [color="gray60", style="solid"];
  "core.compaction_context_adapter" -> "butler.contracts.compaction_ports" [color="gray60", style="solid"];
  "core.compaction_context_adapter" -> "butler.core.compaction_context_adapter_ops" [color="gray60", style="solid"];
  "core.compaction_context_adapter" -> "butler.core.hook_context_adapter" [color="gray60", style="solid"];
  "core.compaction_context_adapter_ops" -> "butler.contracts.compaction_ports" [color="gray60", style="solid"];
  "core.compaction_context_adapter_ops" -> "butler.core.best_effort" [color="gray60", style="solid"];
  "core.compaction_context_adapter_ops" -> "butler.core.metrics_sink" [color="gray60", style="solid"];
  "core.compaction_phase" -> "butler.utilities.env_parse" [color="gray60", style="solid"];
  "core.compaction_prompt" -> "butler.defaults.env_defaults" [color="gray60", style="solid"];
  "core.compaction_prompt" -> "butler.utilities.env_parse" [color="gray60", style="solid"];
  "core.compaction_status" -> "butler.core.compaction_status_ops" [color="gray60", style="solid"];
  "core.compaction_status_ops" -> "butler.core.best_effort" [color="gray60", style="solid"];
  "core.compaction_status_ops" -> "butler.core.compaction_checkpoint" [color="gray60", style="solid"];
  "core.compaction_status_ops" -> "butler.core.session_epoch" [color="gray60", style="solid"];
  "core.compaction_steer_bridge" -> "butler.core.compaction_steer_bridge_ops" [color="gray60", style="solid"];
  "core.compaction_steer_bridge" -> "butler.defaults.env_defaults" [color="gray60", style="solid"];
  "core.compaction_steer_bridge" -> "butler.utilities.env_parse" [color="gray60", style="solid"];
  "core.compaction_steer_bridge_ops" -> "butler.core.best_effort" [color="gray60", style="solid"];
  "core.compaction_steer_bridge_ops" -> "butler.core.events_sink" [color="gray60", style="solid"];
  "core.compaction_steer_bridge_ops" -> "butler.core.steer" [color="gray60", style="solid"];
  "core.compaction_task" -> "butler.core.compaction_phase" [color="gray60", style="solid"];
  "core.compaction_task" -> "butler.core.compaction_task_ops" [color="gray60", style="solid"];
  "core.compaction_task" -> "butler.core.context_budget" [color="gray60", style="solid"];
  "core.compaction_task" -> "butler.defaults.env_defaults" [color="gray60", style="solid"];
  "core.compaction_task" -> "butler.utilities.env_parse" [color="gray60", style="solid"];
  "core.compaction_task_ops" -> "butler.core.best_effort" [color="gray60", style="solid"];
  "core.compaction_task_ops" -> "butler.core.compaction_context_adapter" [color="gray60", style="solid"];
  "core.compaction_task_ops" -> "butler.core.context_compressor" [color="gray60", style="solid"];
  "core.compaction_task_ops" -> "butler.core.events_sink" [color="gray60", style="solid"];
  "core.compaction_task_ops" -> "butler.core.hook_context_adapter" [color="gray60", style="solid"];
  "core.compaction_task_ops" -> "butler.core.session_transcript" [color="gray60", style="solid"];
  "core.compaction_task_ops" -> "butler.execution_context" [color="gray60", style="solid"];
  "core.compaction_task_ops" -> "butler.hooks.runner" [color="gray60", style="solid"];
  "core.confirm_flags" -> "butler.defaults.env_defaults" [color="gray60", style="solid"];
  "core.confirm_flags" -> "butler.utilities.env_parse" [color="gray60", style="solid"];
  "core.container" -> "butler.configuration.settings" [color="gray60", style="solid"];
  "core.container" -> "butler.contracts.events" [color="gray60", style="solid"];
  "core.container" -> "butler.core.effects.result" [color="gray60", style="solid"];
  "core.container" -> "butler.core.event_store" [color="gray60", style="solid"];
  "core.container" -> "butler.memory.conversation_store" [color="gray60", style="solid"];
  "core.container" -> "butler.memory.experience.store" [color="gray60", style="solid"];
  "core.container" -> "butler.memory.hybrid_retriever" [color="gray60", style="solid"];
  "core.container" -> "butler.memory.knowledge_graph" [color="gray60", style="solid"];
  "core.container" -> "butler.memory.memory_metrics" [color="gray60", style="solid"];
  "core.container" -> "butler.project.manager" [color="gray60", style="solid"];
  "core.container" -> "butler.session.session_monitor" [color="gray60", style="solid"];
  "core.context_budget" -> "butler.configuration.context" [color="gray60", style="solid"];
  "core.context_budget" -> "butler.core.context_budget_ops" [color="gray60", style="solid"];
  "core.context_budget" -> "butler.defaults.env_defaults" [color="gray60", style="solid"];
  "core.context_budget_ops" -> "butler.core.best_effort" [color="gray60", style="solid"];
  "core.context_budget_ops" -> "butler.ops.usage_ledger" [color="gray60", style="solid"];
  "core.context_compress_hooks" -> "butler.core.best_effort" [color="gray60", style="solid"];
  "core.context_compress_hooks" -> "butler.core.compaction_phase" [color="gray60", style="solid"];
  "core.context_compress_hooks" -> "butler.core.context_compressor" [color="gray60", style="solid"];
  "core.context_compress_hooks" -> "butler.core.evidence_extract" [color="gray60", style="solid"];
  "core.context_compress_hooks" -> "butler.core.fact_extraction" [color="gray60", style="solid"];
  "core.context_compress_hooks" -> "butler.core.skill_compact_rescue" [color="gray60", style="solid"];
  "core.context_compress_hooks" -> "butler.core.turn_compaction" [color="gray60", style="solid"];
  "core.context_compress_pipeline" -> "butler.core.context_compress_hooks" [color="gray60", style="solid"];
  "core.context_compress_pipeline" -> "butler.core.context_compress_support" [color="gray60", style="solid"];
  "core.context_compress_pipeline" -> "butler.core.context_compressor" [color="gray60", style="solid"];
  "core.context_compress_pipeline" -> "butler.core.turn_compaction" [color="gray60", style="solid"];
  "core.context_compress_pipeline" -> "butler.execution_context" [color="gray60", style="solid"];
  "core.context_compress_support" -> "butler.core.best_effort" [color="gray60", style="solid"];
  "core.context_compress_support" -> "butler.core.events_sink" [color="gray60", style="solid"];
  "core.context_compress_support" -> "butler.core.session_transcript" [color="gray60", style="solid"];
  "core.context_compress_support" -> "butler.core.turn_compaction" [color="gray60", style="solid"];
  "core.context_compress_support" -> "butler.transport.auxiliary_client" [color="gray60", style="solid"];
  "core.context_compressor" -> "butler.core.best_effort" [color="gray60", style="solid"];
  "core.context_compressor" -> "butler.core.compaction_cutoff" [color="gray60", style="solid"];
  "core.context_compressor" -> "butler.core.compaction_prompt" [color="gray60", style="solid"];
  "core.context_compressor" -> "butler.core.context_compress_pipeline" [color="gray60", style="solid"];
  "core.context_compressor" -> "butler.core.context_compress_support" [color="gray60", style="solid"];
  "core.context_compressor" -> "butler.core.remote_compact" [color="gray60", style="solid"];
  "core.context_compressor" -> "butler.core.tool_prune_policy" [color="gray60", style="solid"];
  "core.context_compressor" -> "butler.core.tool_result_storage" [color="gray60", style="solid"];
  "core.context_compressor" -> "butler.defaults.env_defaults" [color="gray60", style="solid"];
  "core.context_compressor" -> "butler.ops.runtime_metrics" [color="gray60", style="solid"];
  "core.context_compressor" -> "butler.utilities.env_parse" [color="gray60", style="solid"];
  "core.context_pipeline" -> "butler.core.compaction_context_adapter" [color="gray60", style="solid"];
  "core.context_pipeline" -> "butler.core.context_compressor" [color="gray60", style="solid"];
  "core.context_pipeline" -> "butler.core.context_pipeline_ops" [color="gray60", style="solid"];
  "core.context_pipeline" -> "butler.core.hygiene_preflight" [color="gray60", style="solid"];
  "core.context_pipeline" -> "butler.core.loop_types" [color="gray60", style="solid"];
  "core.context_pipeline" -> "butler.core.message_repair" [color="gray60", style="solid"];
  "core.context_pipeline" -> "butler.core.message_sanitize" [color="gray60", style="solid"];
  "core.context_pipeline" -> "butler.core.pipeline_steps" [color="gray60", style="solid"];
  "core.context_pipeline" -> "butler.core.post_compact_cleanup" [color="gray60", style="solid"];
  "core.context_pipeline" -> "butler.core.session_todos" [color="gray60", style="solid"];
  "core.context_pipeline" -> "butler.core.tool_output_prune" [color="gray60", style="solid"];
  "core.context_pipeline" -> "butler.core.tool_pair_repair" [color="gray60", style="solid"];
  "core.context_pipeline" -> "butler.core.tool_result_storage" [color="gray60", style="solid"];
  "core.context_pipeline" -> "butler.execution_context" [color="gray60", style="solid"];
  "core.context_pipeline_ops" -> "butler.core.best_effort" [color="gray60", style="solid"];
  "core.context_pipeline_ops" -> "butler.core.compaction_checkpoint" [color="gray60", style="solid"];
  "core.context_pipeline_ops" -> "butler.core.compaction_phase" [color="gray60", style="solid"];
  "core.context_pipeline_ops" -> "butler.core.context_transform_registry" [color="gray60", style="solid"];
  "core.context_pipeline_ops" -> "butler.core.inline_tool_compress" [color="gray60", style="solid"];
  "core.context_pipeline_ops" -> "butler.core.message_context_adapter" [color="gray60", style="solid"];
  "core.context_pipeline_ops" -> "butler.core.preemptive_compact" [color="gray60", style="solid"];
  "core.context_pipeline_ops" -> "butler.core.tool_output_masking" [color="gray60", style="solid"];
  "core.context_pipeline_ops" -> "butler.execution_context" [color="gray60", style="solid"];
  "core.context_transform_registry" -> "butler.agent_profiles" [color="gray60", style="solid"];
  "core.context_transform_registry" -> "butler.configuration.settings" [color="gray60", style="solid"];
  "core.context_transform_registry" -> "butler.contracts.context_transform_ports" [color="gray60", style="solid"];
  "core.context_transform_registry" -> "butler.core.context_transform_registry_ops" [color="gray60", style="solid"];
  "core.context_transform_registry" -> "butler.core.transform_overrides" [color="gray60", style="solid"];
  "core.context_transform_registry" -> "butler.transport.thinking_protocol" [color="gray60", style="solid"];
  "core.context_transform_registry_ops" -> "butler.core.best_effort" [color="gray60", style="solid"];
  "core.context_transform_registry_ops" -> "butler.transport.model_context" [color="gray60", style="solid"];
  "core.conversation_state" -> "butler.core.turn_context" [color="gray60", style="solid"];
  "core.conversation_state" -> "butler.memory.hybrid_retriever" [color="gray60", style="solid"];
  "core.conversation_state" -> "butler.memory.knowledge_graph" [color="gray60", style="solid"];
  "core.conversation_state" -> "butler.memory.semantic_memory" [color="gray60", style="solid"];
  "core.conversation_state" -> "butler.memory.triplets" [color="gray60", style="solid"];
  "core.correction_intent" -> "butler.core.correction_intent_ops" [color="gray60", style="solid"];
  "core.correction_intent_ops" -> "butler.execution_context" [color="gray60", style="solid"];
  "core.correction_intent_ops" -> "butler.tools.memory_tools" [color="gray60", style="solid"];
  "core.delegate_context" -> "butler.core.loop_types" [color="gray60", style="solid"];
  "core.delegate_semaphore" -> "butler.core.effects.result" [color="gray60", style="solid"];
  "core.delegate_semaphore" -> "butler.defaults.env_defaults" [color="gray60", style="solid"];
  "core.delegate_semaphore" -> "butler.utilities.env_parse" [color="gray60", style="solid"];
  "core.design_md_sections" -> "butler.core.design_md_sections_ops" [color="gray60", style="solid"];
  "core.design_md_sections" -> "butler.defaults.env_defaults" [color="gray60", style="solid"];
  "core.design_md_sections" -> "butler.utilities.env_parse" [color="gray60", style="solid"];
  "core.design_md_sections_ops" -> "butler.core.best_effort" [color="gray60", style="solid"];
  "core.design_md_sections_ops" -> "butler.execution_context" [color="gray60", style="solid"];
  "core.dev_context_adapter" -> "butler.contracts.dev_context_ports" [color="gray60", style="solid"];
  "core.dev_context_adapter" -> "butler.core.dev_context_adapter_ops" [color="gray60", style="solid"];
  "core.dev_context_adapter" -> "butler.dev_engine.dev_state" [color="gray60", style="solid"];
  "core.dev_context_adapter_ops" -> "butler.contracts.dev_context_ports" [color="gray60", style="solid"];
  "core.dev_context_adapter_ops" -> "butler.core.best_effort" [color="gray60", style="solid"];
  "core.dev_context_adapter_ops" -> "butler.core.metrics_sink" [color="gray60", style="solid"];
  "core.dev_context_adapter_ops" -> "butler.dev_engine.dev_state" [color="gray60", style="solid"];
  "core.dev_state_context_adapter" -> "butler.contracts.dev_state_ports" [color="gray60", style="solid"];
  "core.dev_state_context_adapter" -> "butler.core.dev_state_context_adapter_ops" [color="gray60", style="solid"];
  "core.dev_state_context_adapter_ops" -> "butler.contracts.dev_state_ports" [color="gray60", style="solid"];
  "core.dev_state_context_adapter_ops" -> "butler.core.best_effort" [color="gray60", style="solid"];
  "core.dev_state_context_adapter_ops" -> "butler.dev_engine.dev_state" [color="gray60", style="solid"];
  "core.effects.combinators" -> "butler.core.effects.maybe_monad" [color="gray60", style="solid"];
  "core.effects.combinators" -> "butler.core.effects.result_monad" [color="gray60", style="solid"];
  "core.effects.race" -> "butler.core.effects.result" [color="gray60", style="solid"];
  "core.effects.result" -> "butler.core.effects.combinators" [color="gray60", style="solid"];
  "core.effects.result" -> "butler.core.effects.maybe_monad" [color="gray60", style="solid"];
  "core.effects.result" -> "butler.core.effects.result_monad" [color="gray60", style="solid"];
  "core.effects.tool_failure" -> "butler.core.effects.result_monad" [color="gray60", style="solid"];
  "core.event_store" -> "butler.contracts.events" [color="gray60", style="solid"];
  "core.event_store" -> "butler.core.best_effort" [color="gray60", style="solid"];
  "core.event_store" -> "butler.core.container" [color="gray60", style="solid"];
  "core.event_store_events" -> "butler.core.effects.result" [color="gray60", style="solid"];
  "core.events.event_bus" -> "butler.core.effects" [color="gray60", style="solid"];
  "core.events.event_bus" -> "butler.core.events.event_types" [color="gray60", style="solid"];
  "core.events.event_consumer" -> "butler.core.events.event_store" [color="gray60", style="solid"];
  "core.events.event_handlers" -> "butler.core.effects" [color="gray60", style="solid"];
  "core.events.event_handlers" -> "butler.core.events.event_bus" [color="gray60", style="solid"];
  "core.events.event_handlers" -> "butler.core.events.event_store_protocol" [color="gray60", style="solid"];
  "core.events.event_handlers" -> "butler.core.events.event_types" [color="gray60", style="solid"];
  "core.events.event_store" -> "butler.core.effects" [color="gray60", style="solid"];
  "core.events.event_store" -> "butler.core.events.event_bus" [color="gray60", style="solid"];
  "core.events.event_store" -> "butler.core.events.event_handlers" [color="gray60", style="solid"];
  "core.events.event_store" -> "butler.core.events.event_store_protocol" [color="gray60", style="solid"];
  "core.events.event_store" -> "butler.core.events.event_types" [color="gray60", style="solid"];
  "core.events.event_store_protocol" -> "butler.core.effects" [color="gray60", style="solid"];
  "core.events.event_store_protocol" -> "butler.core.events.event_types" [color="gray60", style="solid"];
  "core.events.event_types" -> "butler.core.effects" [color="gray60", style="solid"];
  "core.events.session_events" -> "butler.core.events.event_types" [color="gray60", style="solid"];
  "core.events_sink" -> "butler.contracts.events" [color="gray60", style="solid"];
  "core.events_sink" -> "butler.contracts.sink_registry" [color="gray60", style="solid"];
  "core.events_sink" -> "butler.core.events_sink_ops" [color="gray60", style="solid"];
  "core.events_sink_ops" -> "butler.contracts.events" [color="gray60", style="solid"];
  "core.events_sink_ops" -> "butler.contracts.sink_registry" [color="gray60", style="solid"];
  "core.events_sink_ops" -> "butler.core.best_effort" [color="gray60", style="solid"];
  "core.evidence_extract" -> "butler.utilities.env_parse" [color="gray60", style="solid"];
  "core.exp_cache" -> "butler.core.exp_cache_ops" [color="gray60", style="solid"];
  "core.exp_cache" -> "butler.core.meta_flags" [color="gray60", style="solid"];
  "core.exp_cache" -> "butler.utilities.env_parse" [color="gray60", style="solid"];
  "core.exp_cache_ops" -> "butler.core.best_effort" [color="gray60", style="solid"];
  "core.exp_cache_ops" -> "butler.core.effects" [color="gray60", style="solid"];
  "core.exp_cache_ops" -> "butler.execution_context" [color="gray60", style="solid"];
  "core.exp_cache_ops" -> "butler.io.atomic_write" [color="gray60", style="solid"];
  "core.fact_extraction" -> "butler.configuration.settings" [color="gray60", style="solid"];
  "core.fact_extraction" -> "butler.core.fact_extraction_ops" [color="gray60", style="solid"];
  "core.fact_extraction" -> "butler.core.tool_prune_policy" [color="gray60", style="solid"];
  "core.fact_extraction" -> "butler.defaults.env_defaults" [color="gray60", style="solid"];
  "core.fact_extraction" -> "butler.tools.pim_schema" [color="gray60", style="solid"];
  "core.fact_extraction_ops" -> "butler.core.best_effort" [color="gray60", style="solid"];
  "core.fact_extraction_ops" -> "butler.memory.memory_metrics" [color="gray60", style="solid"];
  "core.finish_tool_truncate" -> "butler.defaults.env_defaults" [color="gray60", style="solid"];
  "core.finish_tool_truncate" -> "butler.transport.types" [color="gray60", style="solid"];
  "core.finish_tool_truncate" -> "butler.utilities.env_parse" [color="gray60", style="solid"];
  "core.goal_loop" -> "butler.core.goal_loop_ops" [color="gray60", style="solid"];
  "core.goal_loop" -> "butler.core.loop_types" [color="gray60", style="solid"];
  "core.goal_loop" -> "butler.defaults.env_defaults" [color="gray60", style="solid"];
  "core.goal_loop" -> "butler.utilities.env_parse" [color="gray60", style="solid"];
  "core.goal_loop_ops" -> "butler.core.best_effort" [color="gray60", style="solid"];
  "core.goal_loop_ops" -> "butler.core.goal_loop" [color="gray60", style="solid"];
  "core.harness_flags" -> "butler.utilities.env_parse" [color="gray60", style="solid"];
  "core.hashline" -> "butler.defaults.env_defaults" [color="gray60", style="solid"];
  "core.hashline" -> "butler.utilities.env_parse" [color="gray60", style="solid"];
  "core.hook_context_adapter" -> "butler.contracts.hook_context_ports" [color="gray60", style="solid"];
  "core.hook_context_adapter" -> "butler.core.hook_context_adapter_ops" [color="gray60", style="solid"];
  "core.hook_context_adapter_ops" -> "butler.contracts.hook_context_ports" [color="gray60", style="solid"];
  "core.hook_context_adapter_ops" -> "butler.core.best_effort" [color="gray60", style="solid"];
  "core.hook_context_adapter_ops" -> "butler.core.compaction_context_adapter" [color="gray60", style="solid"];
  "core.hook_context_adapter_ops" -> "butler.core.metrics_sink" [color="gray60", style="solid"];
  "core.hygiene_preflight" -> "butler.core.context_budget" [color="gray60", style="solid"];
  "core.hygiene_preflight" -> "butler.core.hygiene_preflight_ops" [color="gray60", style="solid"];
  "core.hygiene_preflight_ops" -> "butler.core.best_effort" [color="gray60", style="solid"];
  "core.hygiene_preflight_ops" -> "butler.core.compaction_status" [color="gray60", style="solid"];
  "core.hygiene_preflight_ops" -> "butler.core.session_transcript" [color="gray60", style="solid"];
  "core.hygiene_preflight_ops" -> "butler.execution_context" [color="gray60", style="solid"];
  "core.inline_tool_compress" -> "butler.utilities.env_parse" [color="gray60", style="solid"];
  "core.input_stage" -> "butler.utilities.env_parse" [color="gray60", style="solid"];
  "core.instruction_walkup" -> "butler.configuration.context" [color="gray60", style="solid"];
  "core.instruction_walkup" -> "butler.core.instruction_walkup_ops" [color="gray60", style="solid"];
  "core.instruction_walkup_ops" -> "butler.core.best_effort" [color="gray60", style="solid"];
  "core.instruction_walkup_ops" -> "butler.core.rules_engine" [color="gray60", style="solid"];
  "core.instruction_walkup_ops" -> "butler.execution_context" [color="gray60", style="solid"];
  "core.intent_keywords" -> "butler.defaults.env_defaults" [color="gray60", style="solid"];
  "core.io_guardrail" -> "butler.utilities.env_parse" [color="gray60", style="solid"];
  "core.learning_graph" -> "butler.skills.layout" [color="gray60", style="solid"];
  "core.learning_graph" -> "butler.skills.usage" [color="gray60", style="solid"];
  "core.llm_retry" -> "butler.core.llm_retry_helpers" [color="gray60", style="solid"];
  "core.llm_retry" -> "butler.core.llm_retry_ops" [color="gray60", style="solid"];
  "core.llm_retry" -> "butler.core.llm_retry_outcomes" [color="gray60", style="solid"];
  "core.llm_retry" -> "butler.core.llm_retry_safe" [color="gray60", style="solid"];
  "core.llm_retry" -> "butler.core.loop_types" [color="gray60", style="solid"];
  "core.llm_retry" -> "butler.core.preemptive_compact" [color="gray60", style="solid"];
  "core.llm_retry" -> "butler.transport.llm_client" [color="gray60", style="solid"];
  "core.llm_retry" -> "butler.transport.types" [color="gray60", style="solid"];
  "core.llm_retry_errors" -> "butler.core.llm_retry_helpers" [color="gray60", style="solid"];
  "core.llm_retry_errors" -> "butler.core.llm_retry_safe" [color="gray60", style="solid"];
  "core.llm_retry_errors" -> "butler.core.loop_types" [color="gray60", style="solid"];
  "core.llm_retry_errors" -> "butler.core.retry_policy" [color="gray60", style="solid"];
  "core.llm_retry_errors" -> "butler.core.schema_recovery" [color="gray60", style="solid"];
  "core.llm_retry_errors" -> "butler.ops.retry_buckets" [color="gray60", style="solid"];
  "core.llm_retry_errors" -> "butler.transport.error_classifier" [color="gray60", style="solid"];
  "core.llm_retry_errors" -> "butler.transport.interruptible_client" [color="gray60", style="solid"];
  "core.llm_retry_helpers" -> "butler.core.exp_cache" [color="gray60", style="solid"];
  "core.llm_retry_helpers" -> "butler.core.llm_retry_safe" [color="gray60", style="solid"];
  "core.llm_retry_helpers" -> "butler.core.meta_flags" [color="gray60", style="solid"];
  "core.llm_retry_helpers" -> "butler.core.preemptive_compact" [color="gray60", style="solid"];
  "core.llm_retry_helpers" -> "butler.core.reactive_compact" [color="gray60", style="solid"];
  "core.llm_retry_helpers" -> "butler.core.schema_optimizer" [color="gray60", style="solid"];
  "core.llm_retry_helpers" -> "butler.mcp.tools_engine" [color="gray60", style="solid"];
  "core.llm_retry_helpers" -> "butler.ops.retry_buckets" [color="gray60", style="solid"];
  "core.llm_retry_helpers" -> "butler.ops.runtime_metrics" [color="gray60", style="solid"];
  "core.llm_retry_helpers" -> "butler.transport.llm_client" [color="gray60", style="solid"];
  "core.llm_retry_helpers" -> "butler.transport.provider_health" [color="gray60", style="solid"];
  "core.llm_retry_helpers" -> "butler.transport.types" [color="gray60", style="solid"];
  "core.llm_retry_invoke" -> "butler.core.llm_retry_invoke_ops" [color="gray60", style="solid"];
  "core.llm_retry_invoke" -> "butler.core.loop_types" [color="gray60", style="solid"];
  "core.llm_retry_invoke" -> "butler.transport.llm_client" [color="gray60", style="solid"];
  "core.llm_retry_invoke" -> "butler.transport.memory_context_scrubber" [color="gray60", style="solid"];
  "core.llm_retry_invoke" -> "butler.transport.types" [color="gray60", style="solid"];
  "core.llm_retry_invoke_ops" -> "butler.core.best_effort" [color="gray60", style="solid"];
  "core.llm_retry_invoke_ops" -> "butler.core.loop_types" [color="gray60", style="solid"];
  "core.llm_retry_invoke_ops" -> "butler.core.structured_events" [color="gray60", style="solid"];
  "core.llm_retry_invoke_ops" -> "butler.execution_context" [color="gray60", style="solid"];
  "core.llm_retry_invoke_ops" -> "butler.transport.llm_client" [color="gray60", style="solid"];
  "core.llm_retry_invoke_ops" -> "butler.transport.types" [color="gray60", style="solid"];
  "core.llm_retry_ops" -> "butler.core.llm_retry_errors" [color="gray60", style="solid"];
  "core.llm_retry_ops" -> "butler.core.llm_retry_helpers" [color="gray60", style="solid"];
  "core.llm_retry_ops" -> "butler.core.llm_retry_invoke" [color="gray60", style="solid"];
  "core.llm_retry_ops" -> "butler.core.llm_retry_outcomes" [color="gray60", style="solid"];
  "core.llm_retry_ops" -> "butler.core.llm_retry_success" [color="gray60", style="solid"];
  "core.llm_retry_ops" -> "butler.core.loop_types" [color="gray60", style="solid"];
  "core.llm_retry_ops" -> "butler.transport.error_classifier" [color="gray60", style="solid"];
  "core.llm_retry_ops" -> "butler.transport.llm_client" [color="gray60", style="solid"];
  "core.llm_retry_ops" -> "butler.transport.types" [color="gray60", style="solid"];
  "core.llm_retry_outcomes" -> "butler.core.llm_retry_safe" [color="gray60", style="solid"];
  "core.llm_retry_outcomes" -> "butler.ops.runtime_metrics" [color="gray60", style="solid"];
  "core.llm_retry_outcomes" -> "butler.transport.llm_client" [color="gray60", style="solid"];
  "core.llm_retry_safe" -> "butler.core.llm_retry_safe_ops" [color="gray60", style="solid"];
  "core.llm_retry_success" -> "butler.core.llm_retry_helpers" [color="gray60", style="solid"];
  "core.llm_retry_success" -> "butler.core.llm_retry_safe" [color="gray60", style="solid"];
  "core.llm_retry_success" -> "butler.core.loop_response" [color="gray60", style="solid"];
  "core.llm_retry_success" -> "butler.core.loop_types" [color="gray60", style="solid"];
  "core.llm_retry_success" -> "butler.core.preemptive_compact" [color="gray60", style="solid"];
  "core.llm_retry_success" -> "butler.core.safety_finish" [color="gray60", style="solid"];
  "core.llm_retry_success" -> "butler.transport.llm_client" [color="gray60", style="solid"];
  "core.llm_retry_success" -> "butler.transport.types" [color="gray60", style="solid"];
  "core.loop_budget_nudge" -> "butler.utilities.env_parse" [color="gray60", style="solid"];
  "core.loop_callbacks_merge" -> "butler.core.loop_types" [color="gray60", style="solid"];
  "core.loop_middleware" -> "butler.core.loop_middleware_ops" [color="gray60", style="solid"];
  "core.loop_middleware_ops" -> "butler.core.best_effort" [color="gray60", style="solid"];
  "core.loop_plugins" -> "butler.core.loop_middleware" [color="gray60", style="solid"];
  "core.loop_plugins" -> "butler.core.loop_plugins_ops" [color="gray60", style="solid"];
  "core.loop_plugins_ops" -> "butler.core.best_effort" [color="gray60", style="solid"];
  "core.loop_response" -> "butler.core.tool_call_normalize" [color="gray60", style="solid"];
  "core.loop_response" -> "butler.transport.content_sanitize" [color="gray60", style="solid"];
  "core.loop_response" -> "butler.transport.types" [color="gray60", style="solid"];
  "core.loop_types" -> "butler.transport.types" [color="gray60", style="solid"];
  "core.memory_context_adapter" -> "butler.contracts.memory_ports" [color="gray60", style="solid"];
  "core.memory_context_adapter" -> "butler.core.memory_context_adapter_ops" [color="gray60", style="solid"];
  "core.memory_context_adapter_ops" -> "butler.contracts.memory_ports" [color="gray60", style="solid"];
  "core.memory_context_adapter_ops" -> "butler.core.best_effort" [color="gray60", style="solid"];
  "core.memory_context_adapter_ops" -> "butler.core.metrics_sink" [color="gray60", style="solid"];
  "core.memory_manager" -> "butler.core.events.event_store" [color="gray60", style="solid"];
  "core.memory_recap_line" -> "butler.core.memory_source_surface" [color="gray60", style="solid"];
  "core.memory_recap_line" -> "butler.defaults.env_defaults" [color="gray60", style="solid"];
  "core.memory_recap_line" -> "butler.utilities.env_parse" [color="gray60", style="solid"];
  "core.message_context_adapter" -> "butler.contracts.message_ports" [color="gray60", style="solid"];
  "core.message_context_adapter" -> "butler.core.message_context_adapter_ops" [color="gray60", style="solid"];
  "core.message_context_adapter" -> "butler.utilities.env_parse" [color="gray60", style="solid"];
  "core.message_context_adapter_ops" -> "butler.contracts.message_ports" [color="gray60", style="solid"];
  "core.message_context_adapter_ops" -> "butler.core.best_effort" [color="gray60", style="solid"];
  "core.message_context_adapter_ops" -> "butler.core.metrics_sink" [color="gray60", style="solid"];
  "core.message_ir" -> "butler.utilities.env_parse" [color="gray60", style="solid"];
  "core.message_repair" -> "butler.core.json_repair" [color="gray60", style="solid"];
  "core.meta_flags" -> "butler.defaults.env_defaults" [color="gray60", style="solid"];
  "core.meta_flags" -> "butler.utilities.env_parse" [color="gray60", style="solid"];
  "core.metrics_sink" -> "butler.core.metrics_sink_ops" [color="gray60", style="solid"];
  "core.metrics_sink_ops" -> "butler.core.best_effort" [color="gray60", style="solid"];
  "core.metrics_sink_ops" -> "butler.core.metrics_sink" [color="gray60", style="solid"];
  "core.mode_classifier" -> "butler.core.mode_classifier_ops" [color="gray60", style="solid"];
  "core.mode_classifier" -> "butler.utilities.env_parse" [color="gray60", style="solid"];
  "core.mode_classifier_ops" -> "butler.core.best_effort" [color="gray60", style="solid"];
  "core.mode_classifier_ops" -> "butler.plan.mode" [color="gray60", style="solid"];
  "core.mode_classifier_ops" -> "butler.transport.auxiliary_client" [color="gray60", style="solid"];
  "core.model_context" -> "butler.core.model_context_ops" [color="gray60", style="solid"];
  "core.model_context_ops" -> "butler.core.best_effort" [color="gray60", style="solid"];
  "core.model_context_ops" -> "butler.model_resolve" [color="gray60", style="solid"];
  "core.model_context_ops" -> "butler.project.lead" [color="gray60", style="solid"];
  "core.output_grounding" -> "butler.core.output_grounding_ops" [color="gray60", style="solid"];
  "core.output_grounding" -> "butler.utilities.env_parse" [color="gray60", style="solid"];
  "core.output_grounding_ops" -> "butler.core.best_effort" [color="gray60", style="solid"];
  "core.output_grounding_ops" -> "butler.memory.prefetch_retrieval_metrics" [color="gray60", style="solid"];
  "core.output_schema_registry" -> "butler.report" [color="gray60", style="solid"];
  "core.parallel_tools" -> "butler.core.parallel_tools_ops" [color="gray60", style="solid"];
  "core.parallel_tools" -> "butler.tools.registry" [color="gray60", style="solid"];
  "core.parallel_tools_ops" -> "butler.core.batch_sequence_guard" [color="gray60", style="solid"];
  "core.parallel_tools_ops" -> "butler.core.best_effort" [color="gray60", style="solid"];
  "core.pim_state" -> "butler.configuration.settings" [color="gray60", style="solid"];
  "core.pim_state" -> "butler.core.pim_state_ops" [color="gray60", style="solid"];
  "core.pim_state" -> "butler.utilities.tenant" [color="gray60", style="solid"];
  "core.pim_state_ops" -> "butler.core.best_effort" [color="gray60", style="solid"];
  "core.pim_state_ops" -> "butler.core.pim_state" [color="gray60", style="solid"];
  "core.pim_state_ops" -> "butler.io.atomic_write" [color="gray60", style="solid"];
  "core.pim_state_ops" -> "butler.tools.contacts" [color="gray60", style="solid"];
  "core.pim_state_ops" -> "butler.tools.expense" [color="gray60", style="solid"];
  "core.pim_state_ops" -> "butler.tools.habits" [color="gray60", style="solid"];
  "core.pim_state_ops" -> "butler.tools.memo" [color="gray60", style="solid"];
  "core.pim_state_ops" -> "butler.tools.reminder" [color="gray60", style="solid"];
  "core.plan_reason_graph" -> "butler.configuration.settings" [color="gray60", style="solid"];
  "core.plan_reason_graph" -> "butler.core.session_transcript" [color="gray60", style="solid"];
  "core.post_commit" -> "butler.core.post_commit_ops" [color="gray60", style="solid"];
  "core.post_commit_ops" -> "butler.core.best_effort" [color="gray60", style="solid"];
  "core.post_compact_cleanup" -> "butler.core.context_compressor" [color="gray60", style="solid"];
  "core.post_compact_cleanup" -> "butler.core.post_compact_cleanup_ops" [color="gray60", style="solid"];
  "core.post_compact_cleanup_ops" -> "butler.core.agents_md_sections" [color="gray60", style="solid"];
  "core.post_compact_cleanup_ops" -> "butler.core.best_effort" [color="gray60", style="solid"];
  "core.post_compact_cleanup_ops" -> "butler.core.compaction_phase" [color="gray60", style="solid"];
  "core.post_compact_cleanup_ops" -> "butler.core.design_md_sections" [color="gray60", style="solid"];
  "core.post_compact_cleanup_ops" -> "butler.core.fact_extraction" [color="gray60", style="solid"];
  "core.post_compact_cleanup_ops" -> "butler.core.read_state" [color="gray60", style="solid"];
  "core.post_compact_cleanup_ops" -> "butler.core.research_simplicity" [color="gray60", style="solid"];
  "core.post_compact_cleanup_ops" -> "butler.core.session_todos" [color="gray60", style="solid"];
  "core.post_compact_cleanup_ops" -> "butler.execution_context" [color="gray60", style="solid"];
  "core.post_compact_cleanup_ops" -> "butler.runtime.task_store" [color="gray60", style="solid"];
  "core.post_compact_cleanup_ops" -> "butler.session.lifecycle" [color="gray60", style="solid"];
  "core.post_compact_cleanup_ops" -> "butler.tools.registry" [color="gray60", style="solid"];
  "core.post_edit_format" -> "butler.utilities.env_parse" [color="gray60", style="solid"];
  "core.preemptive_compact" -> "butler.core.context_budget" [color="gray60", style="solid"];
  "core.preemptive_compact" -> "butler.core.preemptive_compact_ops" [color="gray60", style="solid"];
  "core.preemptive_compact" -> "butler.core.tool_result_storage" [color="gray60", style="solid"];
  "core.preemptive_compact" -> "butler.utilities.env_parse" [color="gray60", style="solid"];
  "core.preemptive_compact_ops" -> "butler.core.best_effort" [color="gray60", style="solid"];
  "core.preemptive_compact_ops" -> "butler.ops.retry_buckets" [color="gray60", style="solid"];
  "core.preread_context" -> "butler.configuration.memory" [color="gray60", style="solid"];
  "core.preread_context" -> "butler.core.preread_context_ops" [color="gray60", style="solid"];
  "core.preread_context_ops" -> "butler.core.best_effort" [color="gray60", style="solid"];
  "core.preread_context_ops" -> "butler.memory.observer_queue" [color="gray60", style="solid"];
  "core.prompt_renderer" -> "butler.core.prompt_renderer_ops" [color="gray60", style="solid"];
  "core.prompt_renderer" -> "butler.core.system_reminder" [color="gray60", style="solid"];
  "core.prompt_renderer_ops" -> "butler.core.best_effort" [color="gray60", style="solid"];
  "core.prompt_renderer_ops" -> "butler.core.harness_flags" [color="gray60", style="solid"];
  "core.reactive_compact" -> "butler.core.reactive_compact_ops" [color="gray60", style="solid"];
  "core.reactive_compact_ops" -> "butler.core.best_effort" [color="gray60", style="solid"];
  "core.reactive_compact_ops" -> "butler.core.session_transcript" [color="gray60", style="solid"];
  "core.reactive_compact_ops" -> "butler.core.turn_compaction" [color="gray60", style="solid"];
  "core.reactive_compact_ops" -> "butler.execution_context" [color="gray60", style="solid"];
  "core.read_file_partial" -> "butler.utilities.env_parse" [color="gray60", style="solid"];
  "core.read_state" -> "butler.execution_context" [color="gray60", style="solid"];
  "core.read_state" -> "butler.tools.path_safety" [color="gray60", style="solid"];
  "core.read_state" -> "butler.utilities.env_parse" [color="gray60", style="solid"];
  "core.reasoning_trace" -> "butler.core.reasoning_trace_ops" [color="gray60", style="solid"];
  "core.reasoning_trace" -> "butler.core.session_transcript" [color="gray60", style="solid"];
  "core.reasoning_trace" -> "butler.utilities.env_parse" [color="gray60", style="solid"];
  "core.reasoning_trace_ops" -> "butler.core.best_effort" [color="gray60", style="solid"];
  "core.reasoning_trace_ops" -> "butler.core.plan_reason_graph" [color="gray60", style="solid"];
  "core.reasoning_trace_ops" -> "butler.core.reflection_closure" [color="gray60", style="solid"];
  "core.reasoning_trace_ops" -> "butler.core.session_transcript" [color="gray60", style="solid"];
  "core.reasoning_trace_ops" -> "butler.dev_engine.fix_strategy" [color="gray60", style="solid"];
  "core.reasoning_trace_ops" -> "butler.execution_context" [color="gray60", style="solid"];
  "core.reasoning_trace_ops" -> "butler.plan.mode" [color="gray60", style="solid"];
  "core.reflection_closure" -> "butler.core.reflection_closure_ops" [color="gray60", style="solid"];
  "core.reflection_closure" -> "butler.utilities.env_parse" [color="gray60", style="solid"];
  "core.reflection_closure_ops" -> "butler.core.best_effort" [color="gray60", style="solid"];
  "core.reflection_closure_ops" -> "butler.core.reflexion_write" [color="gray60", style="solid"];
  "core.reflection_closure_ops" -> "butler.utilities.env_parse" [color="gray60", style="solid"];
  "core.reflexion_ephemeral" -> "butler.core.reflexion_ephemeral_ops" [color="gray60", style="solid"];
  "core.reflexion_ephemeral" -> "butler.execution_context" [color="gray60", style="solid"];
  "core.reflexion_ephemeral" -> "butler.utilities.env_parse" [color="gray60", style="solid"];
  "core.reflexion_ephemeral_ops" -> "butler.core.best_effort" [color="gray60", style="solid"];
  "core.reflexion_ephemeral_ops" -> "butler.core.reflection_closure" [color="gray60", style="solid"];
  "core.reflexion_ephemeral_ops" -> "butler.core.reflexion_write" [color="gray60", style="solid"];
  "core.reflexion_write" -> "butler.core.reflexion_write_ops" [color="gray60", style="solid"];
  "core.reflexion_write" -> "butler.utilities.env_parse" [color="gray60", style="solid"];
  "core.reflexion_write_ops" -> "butler.core.best_effort" [color="gray60", style="solid"];
  "core.reflexion_write_ops" -> "butler.core.effects" [color="gray60", style="solid"];
  "core.reflexion_write_ops" -> "butler.execution_context" [color="gray60", style="solid"];
  "core.remote_compact" -> "butler.configuration.settings" [color="gray60", style="solid"];
  "core.remote_compact" -> "butler.core.compaction_prompt" [color="gray60", style="solid"];
  "core.remote_compact" -> "butler.core.context_compressor" [color="gray60", style="solid"];
  "core.remote_compact" -> "butler.core.remote_compact_ops" [color="gray60", style="solid"];
  "core.remote_compact" -> "butler.defaults.env_defaults" [color="gray60", style="solid"];
  "core.remote_compact" -> "butler.transport.auxiliary_client" [color="gray60", style="solid"];
  "core.remote_compact" -> "butler.utilities.env_parse" [color="gray60", style="solid"];
  "core.remote_compact_ops" -> "butler.core.best_effort" [color="gray60", style="solid"];
  "core.remote_compact_ops" -> "butler.ops.retry_buckets" [color="gray60", style="solid"];
  "core.research_simplicity" -> "butler.utilities.env_parse" [color="gray60", style="solid"];
  "core.retry_policy" -> "butler.transport.retry_utils" [color="gray60", style="solid"];
  "core.review_context_adapter" -> "butler.contracts.review_ports" [color="gray60", style="solid"];
  "core.review_context_adapter" -> "butler.core.review_context_adapter_ops" [color="gray60", style="solid"];
  "core.review_context_adapter_ops" -> "butler.contracts.review_ports" [color="gray60", style="solid"];
  "core.review_context_adapter_ops" -> "butler.core.best_effort" [color="gray60", style="solid"];
  "core.review_context_adapter_ops" -> "butler.core.plan_snapshot" [color="gray60", style="solid"];
  "core.review_context_adapter_ops" -> "butler.core.review_context_adapter" [color="gray60", style="solid"];
  "core.review_context_adapter_ops" -> "butler.dev_engine.dev_state" [color="gray60", style="solid"];
  "core.rules_engine" -> "butler.utilities.env_parse" [color="gray60", style="solid"];
  "core.safety_finish" -> "butler.transport.types" [color="gray60", style="solid"];
  "core.safety_finish" -> "butler.utilities.env_parse" [color="gray60", style="solid"];
  "core.schema_optimizer" -> "butler.core.schema_optimizer_ops" [color="gray60", style="solid"];
  "core.schema_optimizer" -> "butler.utilities.env_parse" [color="gray60", style="solid"];
  "core.schema_optimizer_ops" -> "butler.core.best_effort" [color="gray60", style="solid"];
  "core.schema_optimizer_ops" -> "butler.transport.schema_sanitizer" [color="gray60", style="solid"];
  "core.schema_recovery" -> "butler.core.schema_recovery_ops" [color="gray60", style="solid"];
  "core.schema_recovery" -> "butler.transport.schema_sanitizer" [color="gray60", style="solid"];
  "core.schema_recovery_ops" -> "butler.core.best_effort" [color="gray60", style="solid"];
  "core.schema_recovery_ops" -> "butler.ops.retry_buckets" [color="gray60", style="solid"];
  "core.session_epoch" -> "butler.core.session_epoch_ops" [color="gray60", style="solid"];
  "core.session_epoch_ops" -> "butler.core.best_effort" [color="gray60", style="solid"];
  "core.session_epoch_ops" -> "butler.core.transcript_export" [color="gray60", style="solid"];
  "core.session_hydration" -> "butler.core.session_hydration_ops" [color="gray60", style="solid"];
  "core.session_hydration" -> "butler.core.session_tool_index" [color="gray60", style="solid"];
  "core.session_hydration" -> "butler.utilities.env_parse" [color="gray60", style="solid"];
  "core.session_hydration_ops" -> "butler.core.best_effort" [color="gray60", style="solid"];
  "core.session_hydration_ops" -> "butler.core.read_state" [color="gray60", style="solid"];
  "core.session_hydration_ops" -> "butler.core.session_epoch" [color="gray60", style="solid"];
  "core.session_hydration_ops" -> "butler.core.session_tool_index" [color="gray60", style="solid"];
  "core.session_hydration_ops" -> "butler.project.worktree" [color="gray60", style="solid"];
  "core.session_recall_intent" -> "butler.core.best_effort" [color="gray60", style="solid"];
  "core.session_recall_intent" -> "butler.core.session_tool_index" [color="gray60", style="solid"];
  "core.session_recall_intent" -> "butler.execution_context" [color="gray60", style="solid"];
  "core.session_todos" -> "butler.configuration.settings" [color="gray60", style="solid"];
  "core.session_todos" -> "butler.core.session_todos_ops" [color="gray60", style="solid"];
  "core.session_todos" -> "butler.utilities.env_parse" [color="gray60", style="solid"];
  "core.session_todos_ops" -> "butler.core.best_effort" [color="gray60", style="solid"];
  "core.session_todos_ops" -> "butler.core.session_transcript" [color="gray60", style="solid"];
  "core.session_todos_ops" -> "butler.execution_context" [color="gray60", style="solid"];
  "core.session_tool_index" -> "butler.core.session_tool_index_ops" [color="gray60", style="solid"];
  "core.session_tool_index" -> "butler.utilities.env_parse" [color="gray60", style="solid"];
  "core.session_tool_index_ops" -> "butler.core.best_effort" [color="gray60", style="solid"];
  "core.session_tool_index_ops" -> "butler.core.session_epoch" [color="gray60", style="solid"];
  "core.session_transcript" -> "butler.configuration.settings" [color="gray60", style="solid"];
  "core.session_transcript" -> "butler.core.session_transcript_ops" [color="gray60", style="solid"];
  "core.session_transcript" -> "butler.core.transcript_index" [color="gray60", style="solid"];
  "core.session_transcript" -> "butler.core.transcript_retention" [color="gray60", style="solid"];
  "core.session_transcript" -> "butler.utilities.env_parse" [color="gray60", style="solid"];
  "core.session_transcript_ops" -> "butler.core.best_effort" [color="gray60", style="solid"];
  "core.session_transcript_ops" -> "butler.core.reasoning_trace" [color="gray60", style="solid"];
  "core.session_transcript_ops" -> "butler.core.transcript_fts" [color="gray60", style="solid"];
  "core.session_transcript_ops" -> "butler.core.transcript_index" [color="gray60", style="solid"];
  "core.skill_compact_rescue" -> "butler.utilities.env_parse" [color="gray60", style="solid"];
  "core.skill_tool_bridge" -> "butler.core.skill_tool_bridge_ops" [color="gray60", style="solid"];
  "core.skill_tool_bridge_ops" -> "butler.core.best_effort" [color="gray60", style="solid"];
  "core.skill_tool_bridge_ops" -> "butler.execution_context" [color="gray60", style="solid"];
  "core.skill_tool_bridge_ops" -> "butler.ops.runtime_metrics" [color="gray60", style="solid"];
  "core.skill_tool_bridge_ops" -> "butler.session.memory_prefetch" [color="gray60", style="solid"];
  "core.skill_tool_bridge_ops" -> "butler.skills.experience_pointers" [color="gray60", style="solid"];
  "core.skill_tool_bridge_ops" -> "butler.skills.injection_policy" [color="gray60", style="solid"];
  "core.steer" -> "butler.core.steer_ops" [color="gray60", style="solid"];
  "core.steer_ops" -> "butler.core.best_effort" [color="gray60", style="solid"];
  "core.steer_ops" -> "butler.execution_context" [color="gray60", style="solid"];
  "core.streaming_tools" -> "butler.core.streaming_tools_ops" [color="gray60", style="solid"];
  "core.streaming_tools" -> "butler.utilities.env_parse" [color="gray60", style="solid"];
  "core.streaming_tools_ops" -> "butler.core.best_effort" [color="gray60", style="solid"];
  "core.structured_events" -> "butler.contracts.events" [color="gray60", style="solid"];
  "core.structured_events" -> "butler.core.metrics_sink" [color="gray60", style="solid"];
  "core.system_reminder" -> "butler.core.harness_flags" [color="gray60", style="solid"];
  "core.system_reminder" -> "butler.core.system_reminder_ops" [color="gray60", style="solid"];
  "core.system_reminder_ops" -> "butler.core.best_effort" [color="gray60", style="solid"];
  "core.system_reminder_ops" -> "butler.execution_context" [color="gray60", style="solid"];
  "core.task_route_hints" -> "butler.core.task_route_hints_ops" [color="gray60", style="solid"];
  "core.task_route_hints" -> "butler.utilities.env_parse" [color="gray60", style="solid"];
  "core.task_route_hints_ops" -> "butler.core.best_effort" [color="gray60", style="solid"];
  "core.task_route_hints_ops" -> "butler.runtime.cc_bridge" [color="gray60", style="solid"];
  "core.text_truncate" -> "butler.utilities.env_parse" [color="gray60", style="solid"];
  "core.todo_continuation" -> "butler.core.agent_loop.loop" [color="gray60", style="solid"];
  "core.todo_continuation" -> "butler.core.loop_types" [color="gray60", style="solid"];
  "core.todo_continuation" -> "butler.core.session_todos" [color="gray60", style="solid"];
  "core.todo_continuation" -> "butler.core.todo_continuation_ops" [color="gray60", style="solid"];
  "core.todo_continuation" -> "butler.utilities.env_parse" [color="gray60", style="solid"];
  "core.todo_continuation_ops" -> "butler.core.best_effort" [color="gray60", style="solid"];
  "core.todo_continuation_ops" -> "butler.core.goal_loop" [color="gray60", style="solid"];
  "core.tool_batch" -> "butler.contracts.tool_dispatch_registry" [color="gray60", style="solid"];
  "core.tool_batch" -> "butler.core.batch_sequence_guard" [color="gray60", style="solid"];
  "core.tool_batch" -> "butler.core.best_effort" [color="gray60", style="solid"];
  "core.tool_batch" -> "butler.core.finish_tool_truncate" [color="gray60", style="solid"];
  "core.tool_batch" -> "butler.core.loop_types" [color="gray60", style="solid"];
  "core.tool_batch" -> "butler.core.parallel_tools" [color="gray60", style="solid"];
  "core.tool_batch" -> "butler.core.tool_batch_finalize" [color="gray60", style="solid"];
  "core.tool_batch" -> "butler.core.tool_batch_hooks" [color="gray60", style="solid"];
  "core.tool_batch" -> "butler.core.tool_batch_post_edit" [color="gray60", style="solid"];
  "core.tool_batch" -> "butler.core.tool_batch_runner" [color="gray60", style="solid"];
  "core.tool_batch" -> "butler.core.tool_dispatch" [color="gray60", style="solid"];
  "core.tool_batch" -> "butler.execution_context" [color="gray60", style="solid"];
  "core.tool_batch" -> "butler.tool_guardrails" [color="gray60", style="solid"];
  "core.tool_batch" -> "butler.transport.reasoning_replay" [color="gray60", style="solid"];
  "core.tool_batch" -> "butler.transport.types" [color="gray60", style="solid"];
  "core.tool_batch_finalize" -> "butler.core.best_effort" [color="gray60", style="solid"];
  "core.tool_batch_finalize" -> "butler.core.tool_batch_finalize_ops" [color="gray60", style="solid"];
  "core.tool_batch_finalize" -> "butler.tools.registry" [color="gray60", style="solid"];
  "core.tool_batch_finalize_ops" -> "butler.core.tool_batch_finalize" [color="gray60", style="solid"];
  "core.tool_batch_finalize_ops" -> "butler.tools.registry" [color="gray60", style="solid"];
  "core.tool_batch_hooks" -> "butler.core.batch_sequence_guard" [color="gray60", style="solid"];
  "core.tool_batch_hooks" -> "butler.core.best_effort" [color="gray60", style="solid"];
  "core.tool_batch_hooks" -> "butler.core.delegate_context" [color="gray60", style="solid"];
  "core.tool_batch_hooks" -> "butler.core.loop_types" [color="gray60", style="solid"];
  "core.tool_batch_hooks" -> "butler.core.pim_state" [color="gray60", style="solid"];
  "core.tool_batch_hooks" -> "butler.core.session_transcript" [color="gray60", style="solid"];
  "core.tool_batch_hooks" -> "butler.core.tool_batch_finalize" [color="gray60", style="solid"];
  "core.tool_batch_hooks" -> "butler.core.tool_batch_post_edit" [color="gray60", style="solid"];
  "core.tool_batch_hooks" -> "butler.execution_context" [color="gray60", style="solid"];
  "core.tool_batch_hooks" -> "butler.ops.cost_tracker" [color="gray60", style="solid"];
  "core.tool_batch_hooks" -> "butler.ops.runtime_metrics" [color="gray60", style="solid"];
  "core.tool_batch_hooks" -> "butler.tool_guardrails" [color="gray60", style="solid"];
  "core.tool_batch_post_edit" -> "butler.core.best_effort" [color="gray60", style="solid"];
  "core.tool_batch_post_edit" -> "butler.core.reasoning_trace" [color="gray60", style="solid"];
  "core.tool_batch_post_edit" -> "butler.core.tool_batch_finalize" [color="gray60", style="solid"];
  "core.tool_batch_post_edit" -> "butler.core.tool_batch_state" [color="gray60", style="solid"];
  "core.tool_batch_post_edit" -> "butler.dev_engine.b9_live_tuning" [color="gray60", style="solid"];
  "core.tool_batch_post_edit" -> "butler.dev_engine.coding_knowledge" [color="gray60", style="solid"];
  "core.tool_batch_post_edit" -> "butler.dev_engine.coding_knowledge_fixup" [color="gray60", style="solid"];
  "core.tool_batch_post_edit" -> "butler.dev_engine.dev_loop" [color="gray60", style="solid"];
  "core.tool_batch_post_edit" -> "butler.dev_engine.dev_state" [color="gray60", style="solid"];
  "core.tool_batch_post_edit" -> "butler.dev_engine.dev_tools" [color="gray60", style="solid"];
  "core.tool_batch_post_edit" -> "butler.dev_engine.fix_strategy" [color="gray60", style="solid"];
  "core.tool_batch_post_edit" -> "butler.dev_engine.verify" [color="gray60", style="solid"];
  "core.tool_batch_post_edit" -> "butler.plan.markdown_sync" [color="gray60", style="solid"];
  "core.tool_batch_post_edit" -> "butler.project.maturity_ops" [color="gray60", style="solid"];
  "core.tool_batch_post_edit" -> "butler.tools.safe_root" [color="gray60", style="solid"];
  "core.tool_batch_runner" -> "butler.core.batch_sequence_guard" [color="gray60", style="solid"];
  "core.tool_batch_runner" -> "butler.core.steer" [color="gray60", style="solid"];
  "core.tool_batch_runner" -> "butler.core.tool_batch_finalize" [color="gray60", style="solid"];
  "core.tool_batch_runner" -> "butler.core.tool_batch_runner_ops" [color="gray60", style="solid"];
  "core.tool_batch_runner" -> "butler.core.tool_executor" [color="gray60", style="solid"];
  "core.tool_batch_runner" -> "butler.core.tool_result_storage" [color="gray60", style="solid"];
  "core.tool_batch_runner" -> "butler.tool_guardrails" [color="gray60", style="solid"];
  "core.tool_batch_runner_ops" -> "butler.core.best_effort" [color="gray60", style="solid"];
  "core.tool_call_limits" -> "butler.utilities.env_parse" [color="gray60", style="solid"];
  "core.tool_call_normalize" -> "butler.transport.types" [color="gray60", style="solid"];
  "core.tool_dispatch" -> "butler.contracts.tool_dispatch_registry" [color="gray60", style="solid"];
  "core.tool_dispatch" -> "butler.core.batch_sequence_guard" [color="gray60", style="solid"];
  "core.tool_dispatch" -> "butler.core.best_effort" [color="gray60", style="solid"];
  "core.tool_dispatch" -> "butler.core.effects" [color="gray60", style="solid"];
  "core.tool_dispatch" -> "butler.core.event_store" [color="gray60", style="solid"];
  "core.tool_dispatch" -> "butler.core.event_store_events" [color="gray60", style="solid"];
  "core.tool_dispatch" -> "butler.core.structured_events" [color="gray60", style="solid"];
  "core.tool_dispatch" -> "butler.core.tool_batch_finalize" [color="gray60", style="solid"];
  "core.tool_dispatch" -> "butler.core.tool_batch_post_edit" [color="gray60", style="solid"];
  "core.tool_dispatch" -> "butler.core.tool_call_limits" [color="gray60", style="solid"];
  "core.tool_dispatch" -> "butler.core.tool_dispatch_doom" [color="gray60", style="solid"];
  "core.tool_dispatch" -> "butler.core.tool_dispatch_ops" [color="gray60", style="solid"];
  "core.tool_dispatch" -> "butler.core.tool_error_policy" [color="gray60", style="solid"];
  "core.tool_dispatch" -> "butler.core.tool_result_cache" [color="gray60", style="solid"];
  "core.tool_dispatch" -> "butler.core.tool_retry" [color="gray60", style="solid"];
  "core.tool_dispatch" -> "butler.core.two_phase_confirm" [color="gray60", style="solid"];
  "core.tool_dispatch" -> "butler.execution_context" [color="gray60", style="solid"];
  "core.tool_dispatch" -> "butler.ops.retry_buckets" [color="gray60", style="solid"];
  "core.tool_dispatch" -> "butler.permissions.tool_boundary_registry" [color="gray60", style="solid"];
  "core.tool_dispatch" -> "butler.tool_guardrails" [color="gray60", style="solid"];
  "core.tool_dispatch" -> "butler.tools.tool_types" [color="gray60", style="solid"];
  "core.tool_dispatch_doom" -> "butler.core.tool_dispatch_doom_ops" [color="gray60", style="solid"];
  "core.tool_dispatch_doom_ops" -> "butler.core.best_effort" [color="gray60", style="solid"];
  "core.tool_dispatch_doom_ops" -> "butler.core.reasoning_trace" [color="gray60", style="solid"];
  "core.tool_dispatch_doom_ops" -> "butler.core.tool_batch_finalize" [color="gray60", style="solid"];
  "core.tool_dispatch_doom_ops" -> "butler.permissions.doom_loop" [color="gray60", style="solid"];
  "core.tool_dispatch_doom_ops" -> "butler.tool_guardrails" [color="gray60", style="solid"];
  "core.tool_dispatch_ops" -> "butler.core.best_effort" [color="gray60", style="solid"];
  "core.tool_dispatch_ops" -> "butler.core.tool_result_classification" [color="gray60", style="solid"];
  "core.tool_error_policy" -> "butler.core.tool_error_policy_ops" [color="gray60", style="solid"];
  "core.tool_error_policy" -> "butler.utilities.env_parse" [color="gray60", style="solid"];
  "core.tool_error_policy_ops" -> "butler.core.best_effort" [color="gray60", style="solid"];
  "core.tool_error_policy_ops" -> "butler.ops.runtime_metrics" [color="gray60", style="solid"];
  "core.tool_event_emitter" -> "butler.core.events" [color="gray60", style="solid"];
  "core.tool_executor" -> "butler.core.tool_event_emitter" [color="gray60", style="solid"];
  "core.tool_executor" -> "butler.core.tool_middleware" [color="gray60", style="solid"];
  "core.tool_executor" -> "butler.defaults.env_defaults" [color="gray60", style="solid"];
  "core.tool_failure_bridge" -> "butler.core.effects.tool_failure" [color="gray60", style="solid"];
  "core.tool_loop_detect" -> "butler.tool_guardrails" [color="gray60", style="solid"];
  "core.tool_loop_detect" -> "butler.utilities.env_parse" [color="gray60", style="solid"];
  "core.tool_narrative" -> "butler.core.tool_narrative_ops" [color="gray60", style="solid"];
  "core.tool_narrative_ops" -> "butler.core.session_tool_index_ops" [color="gray60", style="solid"];
  "core.tool_orchestrator" -> "butler.core.approval_cards" [color="gray60", style="solid"];
  "core.tool_orchestrator" -> "butler.core.tool_orchestrator_ops" [color="gray60", style="solid"];
  "core.tool_orchestrator" -> "butler.permissions" [color="gray60", style="solid"];
  "core.tool_orchestrator_ops" -> "butler.core.approval_cards" [color="gray60", style="solid"];
  "core.tool_orchestrator_ops" -> "butler.core.best_effort" [color="gray60", style="solid"];
  "core.tool_orchestrator_ops" -> "butler.core.confirm_flags" [color="gray60", style="solid"];
  "core.tool_orchestrator_ops" -> "butler.core.session_epoch" [color="gray60", style="solid"];
  "core.tool_orchestrator_ops" -> "butler.hooks.runner" [color="gray60", style="solid"];
  "core.tool_orchestrator_ops" -> "butler.mcp.approval" [color="gray60", style="solid"];
  "core.tool_orchestrator_ops" -> "butler.permissions.approvals" [color="gray60", style="solid"];
  "core.tool_orchestrator_ops" -> "butler.tools.network_search_policy" [color="gray60", style="solid"];
  "core.tool_orchestrator_ops" -> "butler.tools.terminal_approval" [color="gray60", style="solid"];
  "core.tool_orchestrator_ops" -> "butler.tools.terminal_danger" [color="gray60", style="solid"];
  "core.tool_output_masking" -> "butler.core.context_compressor" [color="gray60", style="solid"];
  "core.tool_output_masking" -> "butler.core.tool_prune_policy" [color="gray60", style="solid"];
  "core.tool_output_masking" -> "butler.core.tool_result_storage" [color="gray60", style="solid"];
  "core.tool_output_masking" -> "butler.defaults.env_defaults" [color="gray60", style="solid"];
  "core.tool_output_masking" -> "butler.utilities.env_parse" [color="gray60", style="solid"];
  "core.tool_output_prune" -> "butler.configuration.context" [color="gray60", style="solid"];
  "core.tool_output_prune" -> "butler.core.tool_prune_policy" [color="gray60", style="solid"];
  "core.tool_pair_repair" -> "butler.core.tool_pair_repair_ops" [color="gray60", style="solid"];
  "core.tool_pair_repair" -> "butler.defaults.env_defaults" [color="gray60", style="solid"];
  "core.tool_pair_repair_ops" -> "butler.core.best_effort" [color="gray60", style="solid"];
  "core.tool_pair_repair_ops" -> "butler.core.session_transcript" [color="gray60", style="solid"];
  "core.tool_prune_policy" -> "butler.configuration.context" [color="gray60", style="solid"];
  "core.tool_prune_policy" -> "butler.core.tool_result_storage" [color="gray60", style="solid"];
  "core.tool_recall_bm25" -> "butler.core.meta_flags" [color="gray60", style="solid"];
  "core.tool_recall_bm25" -> "butler.core.tool_selector" [color="gray60", style="solid"];
  "core.tool_result_cache" -> "butler.utilities.env_parse" [color="gray60", style="solid"];
  "core.tool_result_storage" -> "butler.configuration.settings" [color="gray60", style="solid"];
  "core.tool_result_storage" -> "butler.core.text_truncate" [color="gray60", style="solid"];
  "core.tool_result_storage" -> "butler.core.tool_result_storage_ops" [color="gray60", style="solid"];
  "core.tool_result_storage" -> "butler.defaults.env_defaults" [color="gray60", style="solid"];
  "core.tool_result_storage" -> "butler.execution_context" [color="gray60", style="solid"];
  "core.tool_result_storage" -> "butler.utilities.env_parse" [color="gray60", style="solid"];
  "core.tool_retry" -> "butler.core.effects" [color="gray60", style="solid"];
  "core.tool_retry" -> "butler.core.tool_retry_ops" [color="gray60", style="solid"];
  "core.tool_retry" -> "butler.utilities.env_parse" [color="gray60", style="solid"];
  "core.tool_retry_ops" -> "butler.core.best_effort" [color="gray60", style="solid"];
  "core.tool_retry_ops" -> "butler.core.tool_error_policy" [color="gray60", style="solid"];
  "core.tool_selector" -> "butler.core.tool_recall_bm25" [color="gray60", style="solid"];
  "core.tool_selector" -> "butler.core.tool_selector_ops" [color="gray60", style="solid"];
  "core.tool_selector" -> "butler.memory.embedding" [color="gray60", style="solid"];
  "core.tool_selector" -> "butler.utilities.env_parse" [color="gray60", style="solid"];
  "core.tool_selector_ops" -> "butler.core.best_effort" [color="gray60", style="solid"];
  "core.tool_selector_ops" -> "butler.core.tool_recall_bm25" [color="gray60", style="solid"];
  "core.tool_selector_ops" -> "butler.memory.embedding" [color="gray60", style="solid"];
  "core.transcript_export" -> "butler.configuration.settings" [color="gray60", style="solid"];
  "core.transcript_export" -> "butler.core.session_transcript" [color="gray60", style="solid"];
  "core.transcript_export" -> "butler.core.transcript_export_ops" [color="gray60", style="solid"];
  "core.transcript_export" -> "butler.utilities.env_parse" [color="gray60", style="solid"];
  "core.transcript_export_ops" -> "butler.core.best_effort" [color="gray60", style="solid"];
  "core.transcript_export_ops" -> "butler.core.session_transcript_ops" [color="gray60", style="solid"];
  "core.transcript_export_ops" -> "butler.execution_context" [color="gray60", style="solid"];
  "core.transcript_export_ops" -> "butler.report" [color="gray60", style="solid"];
  "core.transcript_export_ops" -> "butler.runtime.task_store" [color="gray60", style="solid"];
  "core.transcript_fork" -> "butler.core.session_transcript" [color="gray60", style="solid"];
  "core.transcript_fork" -> "butler.core.transcript_index" [color="gray60", style="solid"];
  "core.transcript_fts" -> "butler.configuration.settings" [color="gray60", style="solid"];
  "core.transcript_fts" -> "butler.utilities.env_parse" [color="gray60", style="solid"];
  "core.transcript_index" -> "butler.defaults.env_defaults" [color="gray60", style="solid"];
  "core.transcript_revert" -> "butler.core.session_transcript" [color="gray60", style="solid"];
  "core.transcript_revert" -> "butler.core.transcript_index" [color="gray60", style="solid"];
  "core.transcript_revert" -> "butler.utilities.env_parse" [color="gray60", style="solid"];
  "core.transcript_search" -> "butler.configuration.settings" [color="gray60", style="solid"];
  "core.transcript_search" -> "butler.core.session_transcript" [color="gray60", style="solid"];
  "core.transcript_search" -> "butler.core.transcript_search_ops" [color="gray60", style="solid"];
  "core.transcript_search" -> "butler.execution_context" [color="gray60", style="solid"];
  "core.transcript_search" -> "butler.utilities.env_parse" [color="gray60", style="solid"];
  "core.transcript_search_ops" -> "butler.core.best_effort" [color="gray60", style="solid"];
  "core.transcript_search_ops" -> "butler.core.transcript_fts" [color="gray60", style="solid"];
  "core.transform_feedback" -> "butler.core.transform_overrides" [color="gray60", style="solid"];
  "core.transform_overrides" -> "butler.configuration.settings" [color="gray60", style="solid"];
  "core.turn_compaction" -> "butler.core.compaction_cutoff" [color="gray60", style="solid"];
  "core.turn_compaction" -> "butler.core.context_budget" [color="gray60", style="solid"];
  "core.turn_compaction" -> "butler.core.context_compressor" [color="gray60", style="solid"];
  "core.turn_compaction" -> "butler.defaults.env_defaults" [color="gray60", style="solid"];
  "core.turn_compaction" -> "butler.utilities.env_parse" [color="gray60", style="solid"];
  "core.turn_summary_line" -> "butler.core.turn_summary_line_ops" [color="gray60", style="solid"];
  "core.turn_summary_line" -> "butler.defaults.env_defaults" [color="gray60", style="solid"];
  "core.turn_summary_line" -> "butler.utilities.env_parse" [color="gray60", style="solid"];
  "core.turn_summary_line_ops" -> "butler.core.best_effort" [color="gray60", style="solid"];
  "core.turn_summary_line_ops" -> "butler.core.session_epoch" [color="gray60", style="solid"];
  "core.turn_token_budget" -> "butler.configuration.context" [color="gray60", style="solid"];
  "core.turn_token_budget" -> "butler.core.loop_types" [color="gray60", style="solid"];
  "core.two_phase_confirm" -> "butler.configuration.settings" [color="gray60", style="solid"];
  "core.two_phase_confirm" -> "butler.core.confirm_flags" [color="gray60", style="solid"];
  "core.two_phase_confirm" -> "butler.core.two_phase_confirm_ops" [color="gray60", style="solid"];
  "core.two_phase_confirm" -> "butler.defaults.env_defaults" [color="gray60", style="solid"];
  "core.two_phase_confirm" -> "butler.utilities.env_parse" [color="gray60", style="solid"];
  "core.two_phase_confirm_ops" -> "butler.core.best_effort" [color="gray60", style="solid"];
  "core.two_phase_confirm_ops" -> "butler.core.session_transcript" [color="gray60", style="solid"];
  "core.two_phase_confirm_ops" -> "butler.execution_context" [color="gray60", style="solid"];
  "core.two_phase_confirm_ops" -> "butler.tools.registry" [color="gray60", style="solid"];
  "core.two_phase_confirm_ops" -> "butler.tools.terminal_danger" [color="gray60", style="solid"];
  "core.workflow_flags" -> "butler.utilities.env_parse" [color="gray60", style="solid"];
  "dag_scheduler" -> "butler.core.handoff" [color="gray60", style="solid"];
  "dag_scheduler" -> "butler.core.workflow_flags" [color="gray60", style="solid"];
  "dag_scheduler" -> "butler.dag_scheduler_ops" [color="gray60", style="solid"];
  "dag_scheduler" -> "butler.task_orchestrator" [color="gray60", style="solid"];
  "delegate" -> "butler.delegate.category_resolver" [color="gray60", style="solid"];
  "delegate" -> "butler.delegate.policy" [color="gray60", style="solid"];
  "delegate" -> "butler.delegate.subagent_permissions" [color="gray60", style="solid"];
  "delegate.category_resolver" -> "butler.delegate.category_resolver_ops" [color="gray60", style="solid"];
  "delegate.category_resolver_ops" -> "butler.core.best_effort" [color="gray60", style="solid"];
  "delegate.policy" -> "butler.defaults.env_defaults" [color="gray60", style="solid"];
  "delegate.policy" -> "butler.delegate.policy_ops" [color="gray60", style="solid"];
  "delegate.policy" -> "butler.utilities.env_parse" [color="gray60", style="solid"];
  "delegate.policy_ops" -> "butler.core.best_effort" [color="gray60", style="solid"];
  "delegate.policy_ops" -> "butler.ops.eval_config_overrides" [color="gray60", style="solid"];
  "delegate.subagent_permissions" -> "butler.delegate.policy" [color="gray60", style="solid"];
  "delegate.subagent_permissions" -> "butler.delegate.subagent_permissions_ops" [color="gray60", style="solid"];
  "delegate.subagent_permissions" -> "butler.permissions.rules" [color="gray60", style="solid"];
  "delegate.subagent_permissions" -> "butler.tools.pim_schema" [color="gray60", style="solid"];
  "delegate.subagent_permissions" -> "butler.tools.project_tools" [color="gray60", style="solid"];
  "delegate.subagent_permissions" -> "butler.tools.registry" [color="gray60", style="solid"];
  "delegate.subagent_permissions_ops" -> "butler.core.best_effort" [color="gray60", style="solid"];
  "delegate.subagent_permissions_ops" -> "butler.mcp.naming" [color="gray60", style="solid"];
  "delegate.task_kind" -> "butler.delegate.owner_ingest_shortcuts" [color="gray60", style="solid"];
  "dev_engine" -> "butler.dev_engine.dev_loop" [color="gray60", style="solid"];
  "dev_engine" -> "butler.dev_engine.dev_state" [color="gray60", style="solid"];
  "dev_engine" -> "butler.dev_engine.dev_tools" [color="gray60", style="solid"];
  "dev_engine.b9_delegate_gate" -> "butler.core.dev_state_context_adapter" [color="gray60", style="solid"];
  "dev_engine.b9_delegate_gate" -> "butler.core.read_state" [color="gray60", style="solid"];
  "dev_engine.b9_delegate_gate" -> "butler.defaults.env_defaults" [color="gray60", style="solid"];
  "dev_engine.b9_delegate_gate" -> "butler.dev_engine.b9_delegate_gate_ops" [color="gray60", style="solid"];
  "dev_engine.b9_delegate_gate" -> "butler.dev_engine.b9_live_tuning" [color="gray60", style="solid"];
  "dev_engine.b9_delegate_gate" -> "butler.dev_engine.b9_oracle_curriculum" [color="gray60", style="solid"];
  "dev_engine.b9_delegate_gate" -> "butler.dev_engine.b9_verify_utils" [color="gray60", style="solid"];
  "dev_engine.b9_delegate_gate_ops" -> "butler.core.best_effort" [color="gray60", style="solid"];
  "dev_engine.b9_delegate_gate_ops" -> "butler.delegate.task_kind" [color="gray60", style="solid"];
  "dev_engine.b9_delegate_gate_ops" -> "butler.dev_engine.b9_live_tuning" [color="gray60", style="solid"];
  "dev_engine.b9_delegate_gate_ops" -> "butler.dev_engine.dev_tools" [color="gray60", style="solid"];
  "dev_engine.b9_delegate_gate_ops" -> "butler.dev_engine.prod_delegate_bridge" [color="gray60", style="solid"];
  "dev_engine.b9_delegate_gate_ops" -> "butler.tools.path_safety" [color="gray60", style="solid"];
  "dev_engine.b9_experience_retrieval" -> "butler.configuration.settings" [color="gray60", style="solid"];
  "dev_engine.b9_experience_retrieval" -> "butler.dev_engine.b9_experience_retrieval_ops" [color="gray60", style="solid"];
  "dev_engine.b9_experience_retrieval" -> "butler.dev_engine.coding_knowledge" [color="gray60", style="solid"];
  "dev_engine.b9_experience_retrieval_ops" -> "butler.core.best_effort" [color="gray60", style="solid"];
  "dev_engine.b9_experience_retrieval_ops" -> "butler.dev_engine.prod_delegate_bridge" [color="gray60", style="solid"];
  "dev_engine.b9_live_fixed_tasks" -> "butler.dev_engine.b9_prod_shaped_tasks" [color="gray60", style="solid"];
  "dev_engine.b9_live_fixed_tasks" -> "butler.dev_engine.b9_task_fixtures" [color="gray60", style="solid"];
  "dev_engine.b9_live_fixed_tasks" -> "butler.dev_engine.b9_types" [color="gray60", style="solid"];
  "dev_engine.b9_live_fixed_tasks" -> "butler.dev_engine.b9_verify_utils" [color="gray60", style="solid"];
  "dev_engine.b9_live_fixed_tasks" -> "butler.dev_engine.edit_ops" [color="gray60", style="solid"];
  "dev_engine.b9_live_tuning" -> "butler.defaults.env_defaults" [color="gray60", style="solid"];
  "dev_engine.b9_live_tuning" -> "butler.dev_engine.b9_live_tuning_ops" [color="gray60", style="solid"];
  "dev_engine.b9_live_tuning" -> "butler.dev_engine.b9_oracle_curriculum" [color="gray60", style="solid"];
  "dev_engine.b9_live_tuning" -> "butler.dev_engine.b9_oracle_fewshot" [color="gray60", style="solid"];
  "dev_engine.b9_live_tuning" -> "butler.dev_engine.b9_types" [color="gray60", style="solid"];
  "dev_engine.b9_live_tuning" -> "butler.dev_engine.swe_curriculum" [color="gray60", style="solid"];
  "dev_engine.b9_live_tuning" -> "butler.ops.eval_config_overrides" [color="gray60", style="solid"];
  "dev_engine.b9_live_tuning_ops" -> "butler.core.best_effort" [color="gray60", style="solid"];
  "dev_engine.b9_live_tuning_ops" -> "butler.dev_engine.b9_oracle_curriculum" [color="gray60", style="solid"];
  "dev_engine.b9_live_tuning_ops" -> "butler.ops.b9_lessons" [color="gray60", style="solid"];
  "dev_engine.b9_oracle_curriculum" -> "butler.configuration.settings" [color="gray60", style="solid"];
  "dev_engine.b9_oracle_curriculum" -> "butler.dev_engine.b9_types" [color="gray60", style="solid"];
  "dev_engine.b9_oracle_fewshot" -> "butler.defaults.env_defaults" [color="gray60", style="solid"];
  "dev_engine.b9_oracle_fewshot" -> "butler.utilities.env_parse" [color="gray60", style="solid"];
  "dev_engine.b9_prod_shaped_tasks" -> "butler.dev_engine.b9_task_fixtures" [color="gray60", style="solid"];
  "dev_engine.b9_prod_shaped_tasks" -> "butler.dev_engine.b9_types" [color="gray60", style="solid"];
  "dev_engine.b9_prod_shaped_tasks" -> "butler.dev_engine.b9_verify_utils" [color="gray60", style="solid"];
  "dev_engine.b9_prod_shaped_tasks" -> "butler.dev_engine.edit_ops" [color="gray60", style="solid"];
  "dev_engine.b9_task_fixtures" -> "butler.dev_engine.b9_verify_utils" [color="gray60", style="solid"];
  "dev_engine.b9_task_fixtures" -> "butler.dev_engine.edit_ops" [color="gray60", style="solid"];
  "dev_engine.b9_tiers" -> "butler.defaults.env_defaults" [color="gray60", style="solid"];
  "dev_engine.b9_verify_utils" -> "butler.dev_engine.b9_verify_utils_ops" [color="gray60", style="solid"];
  "dev_engine.code_search" -> "butler.dev_engine.code_search_ops" [color="gray60", style="solid"];
  "dev_engine.code_search" -> "butler.dev_engine.dev_state" [color="gray60", style="solid"];
  "dev_engine.code_search_ops" -> "butler.dev_engine.dev_state" [color="gray60", style="solid"];
  "dev_engine.coding_knowledge" -> "butler.dev_engine.coding_knowledge.ast_analysis" [color="gray60", style="solid"];
  "dev_engine.coding_knowledge" -> "butler.dev_engine.coding_knowledge.context" [color="gray60", style="solid"];
  "dev_engine.coding_knowledge" -> "butler.dev_engine.coding_knowledge.elements" [color="gray60", style="solid"];
  "dev_engine.coding_knowledge" -> "butler.dev_engine.coding_knowledge.experience" [color="gray60", style="solid"];
  "dev_engine.coding_knowledge" -> "butler.dev_engine.coding_knowledge.generation" [color="gray60", style="solid"];
  "dev_engine.coding_knowledge" -> "butler.dev_engine.coding_knowledge.theorems" [color="gray60", style="solid"];
  "dev_engine.coding_knowledge" -> "butler.dev_engine.coding_knowledge.verification" [color="gray60", style="solid"];
  "dev_engine.coding_knowledge.context" -> "butler.dev_engine.coding_knowledge.elements" [color="gray60", style="solid"];
  "dev_engine.coding_knowledge.context" -> "butler.dev_engine.coding_knowledge.experience" [color="gray60", style="solid"];
  "dev_engine.coding_knowledge.context" -> "butler.dev_engine.coding_knowledge.theorems" [color="gray60", style="solid"];
  "dev_engine.coding_knowledge.experience" -> "butler.dev_engine.coding_knowledge.elements" [color="gray60", style="solid"];
  "dev_engine.coding_knowledge.experience" -> "butler.dev_engine.coding_knowledge.seed_experiences" [color="gray60", style="solid"];
  "dev_engine.coding_knowledge.experience" -> "butler.dev_engine.coding_knowledge.theorems" [color="gray60", style="solid"];
  "dev_engine.coding_knowledge.experience" -> "butler.dev_engine.coding_knowledge.verification" [color="gray60", style="solid"];
  "dev_engine.coding_knowledge.experience" -> "butler.dev_engine.coding_knowledge_ops" [color="gray60", style="solid"];
  "dev_engine.coding_knowledge.experience" -> "butler.memory.memory_scope" [color="gray60", style="solid"];
  "dev_engine.coding_knowledge.generation" -> "butler.dev_engine.coding_knowledge.context" [color="gray60", style="solid"];
  "dev_engine.coding_knowledge.generation" -> "butler.dev_engine.coding_knowledge.elements" [color="gray60", style="solid"];
  "dev_engine.coding_knowledge.generation" -> "butler.dev_engine.coding_knowledge.experience" [color="gray60", style="solid"];
  "dev_engine.coding_knowledge.generation" -> "butler.dev_engine.coding_knowledge.theorems" [color="gray60", style="solid"];
  "dev_engine.coding_knowledge.generation" -> "butler.dev_engine.coding_knowledge.verification" [color="gray60", style="solid"];
  "dev_engine.coding_knowledge.theorems" -> "butler.dev_engine.coding_knowledge.ast_analysis" [color="gray60", style="solid"];
  "dev_engine.coding_knowledge.theorems" -> "butler.dev_engine.coding_knowledge.elements" [color="gray60", style="solid"];
  "dev_engine.coding_knowledge.verification" -> "butler.dev_engine.coding_knowledge.theorems" [color="gray60", style="solid"];
  "dev_engine.coding_knowledge_benchmark" -> "butler.dev_engine.coding_knowledge" [color="gray60", style="solid"];
  "dev_engine.coding_knowledge_fixup" -> "butler.dev_engine.coding_knowledge_fixup_ops" [color="gray60", style="solid"];
  "dev_engine.coding_knowledge_fixup_ops" -> "butler.configuration.settings" [color="gray60", style="solid"];
  "dev_engine.coding_knowledge_fixup_ops" -> "butler.core.best_effort" [color="gray60", style="solid"];
  "dev_engine.coding_knowledge_fixup_ops" -> "butler.dev_engine.coding_knowledge" [color="gray60", style="solid"];
  "dev_engine.coding_knowledge_fixup_ops" -> "butler.memory.memory_scope" [color="gray60", style="solid"];
  "dev_engine.coding_knowledge_fixup_ops" -> "butler.ops.eval_config_overrides" [color="gray60", style="solid"];
  "dev_engine.coding_knowledge_fixup_ops" -> "butler.ops.experience_selection_telemetry" [color="gray60", style="solid"];
  "dev_engine.coding_knowledge_ops" -> "butler.core.best_effort" [color="gray60", style="solid"];
  "dev_engine.coding_knowledge_ops" -> "butler.dev_engine.b9_experience_retrieval" [color="gray60", style="solid"];
  "dev_engine.coding_knowledge_ops" -> "butler.dev_engine.prod_delegate_bridge" [color="gray60", style="solid"];
  "dev_engine.delegate_finalize" -> "butler.dev_engine.delegate_finalize_ops" [color="gray60", style="solid"];
  "dev_engine.delegate_finalize" -> "butler.tools.delegate_phases" [color="gray60", style="solid"];
  "dev_engine.delegate_finalize_ops" -> "butler.configuration.settings" [color="gray60", style="solid"];
  "dev_engine.delegate_finalize_ops" -> "butler.core.best_effort" [color="gray60", style="solid"];
  "dev_engine.delegate_finalize_ops" -> "butler.core.dev_state_context_adapter" [color="gray60", style="solid"];
  "dev_engine.delegate_finalize_ops" -> "butler.dev_engine.coding_knowledge" [color="gray60", style="solid"];
  "dev_engine.delegate_finalize_ops" -> "butler.dev_engine.dev_state" [color="gray60", style="solid"];
  "dev_engine.delegate_finalize_ops" -> "butler.dev_engine.dev_tools" [color="gray60", style="solid"];
  "dev_engine.delegate_finalize_ops" -> "butler.dev_engine.review_closure" [color="gray60", style="solid"];
  "dev_engine.delegate_finalize_ops" -> "butler.memory.memory_scope" [color="gray60", style="solid"];
  "dev_engine.delegate_finalize_ops" -> "butler.ops.experience_selection_telemetry" [color="gray60", style="solid"];
  "dev_engine.delegate_finalize_ops" -> "butler.ops.g1_04_prod_evidence" [color="gray60", style="solid"];
  "dev_engine.delegate_finalize_ops" -> "butler.ops.prod_experience_effectiveness" [color="gray60", style="solid"];
  "dev_engine.delegate_finalize_ops" -> "butler.tools.delegate_phases" [color="gray60", style="solid"];
  "dev_engine.delegate_init" -> "butler.dev_engine.delegate_init_ops" [color="gray60", style="solid"];
  "dev_engine.delegate_init" -> "butler.tools.delegate_phases" [color="gray60", style="solid"];
  "dev_engine.delegate_init_ops" -> "butler.configuration.settings" [color="gray60", style="solid"];
  "dev_engine.delegate_init_ops" -> "butler.core.best_effort" [color="gray60", style="solid"];
  "dev_engine.delegate_init_ops" -> "butler.dev_engine.coding_knowledge" [color="gray60", style="solid"];
  "dev_engine.delegate_init_ops" -> "butler.dev_engine.dev_loop" [color="gray60", style="solid"];
  "dev_engine.delegate_init_ops" -> "butler.dev_engine.dev_state" [color="gray60", style="solid"];
  "dev_engine.delegate_init_ops" -> "butler.dev_engine.dev_tools" [color="gray60", style="solid"];
  "dev_engine.delegate_init_ops" -> "butler.dev_engine.loop_plugin" [color="gray60", style="solid"];
  "dev_engine.delegate_init_ops" -> "butler.dev_engine.prod_delegate_bridge" [color="gray60", style="solid"];
  "dev_engine.delegate_init_ops" -> "butler.memory.memory_scope" [color="gray60", style="solid"];
  "dev_engine.delegate_init_ops" -> "butler.ops.eval_config_overrides" [color="gray60", style="solid"];
  "dev_engine.delegate_init_ops" -> "butler.ops.experience_selection_telemetry" [color="gray60", style="solid"];
  "dev_engine.delegate_init_ops" -> "butler.tools.delegate_phases" [color="gray60", style="solid"];
  "dev_engine.delegate_workspace" -> "butler.dev_engine.b9_delegate_gate" [color="gray60", style="solid"];
  "dev_engine.delegate_workspace" -> "butler.dev_engine.delegate_workspace_ops" [color="gray60", style="solid"];
  "dev_engine.delegate_workspace" -> "butler.tools.delegate_impl" [color="gray60", style="solid"];
  "dev_engine.delegate_workspace" -> "butler.tools.delegate_phases" [color="gray60", style="solid"];
  "dev_engine.delegate_workspace_ops" -> "butler.core.best_effort" [color="gray60", style="solid"];
  "dev_engine.delegate_workspace_ops" -> "butler.dev_engine.b9_delegate_gate" [color="gray60", style="solid"];
  "dev_engine.dev_benchmark" -> "butler.dev_engine" [color="gray60", style="solid"];
  "dev_engine.dev_benchmark" -> "butler.dev_engine.dev_benchmark_ops" [color="gray60", style="solid"];
  "dev_engine.dev_benchmark" -> "butler.dev_engine.dev_loop" [color="gray60", style="solid"];
  "dev_engine.dev_benchmark" -> "butler.dev_engine.dev_metrics" [color="gray60", style="solid"];
  "dev_engine.dev_benchmark" -> "butler.dev_engine.dev_state" [color="gray60", style="solid"];
  "dev_engine.dev_benchmark" -> "butler.dev_engine.edit_ops" [color="gray60", style="solid"];
  "dev_engine.dev_benchmark" -> "butler.dev_engine.review_static" [color="gray60", style="solid"];
  "dev_engine.dev_benchmark" -> "butler.dev_engine.swebench_lite" [color="gray60", style="solid"];
  "dev_engine.dev_benchmark" -> "butler.dev_engine.verify" [color="gray60", style="solid"];
  "dev_engine.dev_context" -> "butler.dev_engine.dev_context_ops" [color="gray60", style="solid"];
  "dev_engine.dev_context" -> "butler.dev_engine.dev_state" [color="gray60", style="solid"];
  "dev_engine.dev_context_ops" -> "butler.core.best_effort" [color="gray60", style="solid"];
  "dev_engine.dev_context_ops" -> "butler.dev_engine.b9_oracle_fewshot" [color="gray60", style="solid"];
  "dev_engine.dev_context_ops" -> "butler.dev_engine.coding_knowledge" [color="gray60", style="solid"];
  "dev_engine.dev_context_ops" -> "butler.ops.eval_config_overrides" [color="gray60", style="solid"];
  "dev_engine.dev_loop" -> "butler.core.dev_context_adapter" [color="gray60", style="solid"];
  "dev_engine.dev_loop" -> "butler.core.review_context_adapter" [color="gray60", style="solid"];
  "dev_engine.dev_loop" -> "butler.dev_engine.dev_loop_ops" [color="gray60", style="solid"];
  "dev_engine.dev_loop" -> "butler.dev_engine.dev_state" [color="gray60", style="solid"];
  "dev_engine.dev_loop" -> "butler.utilities.env_parse" [color="gray60", style="solid"];
  "dev_engine.dev_loop_ops" -> "butler.core.best_effort" [color="gray60", style="solid"];
  "dev_engine.dev_loop_ops" -> "butler.dev_engine.dev_metrics" [color="gray60", style="solid"];
  "dev_engine.dev_loop_ops" -> "butler.dev_engine.dev_state" [color="gray60", style="solid"];
  "dev_engine.dev_loop_ops" -> "butler.dev_engine.dev_tools" [color="gray60", style="solid"];
  "dev_engine.dev_loop_ops" -> "butler.ops.eval_config_overrides" [color="gray60", style="solid"];
  "dev_engine.dev_metrics" -> "butler.dev_engine.dev_metrics_ops" [color="gray60", style="solid"];
  "dev_engine.dev_tools" -> "butler.core.review_context_adapter" [color="gray60", style="solid"];
  "dev_engine.dev_tools" -> "butler.defaults.env_defaults" [color="gray60", style="solid"];
  "dev_engine.dev_tools" -> "butler.dev_engine" [color="gray60", style="solid"];
  "dev_engine.dev_tools" -> "butler.dev_engine.code_search" [color="gray60", style="solid"];
  "dev_engine.dev_tools" -> "butler.dev_engine.dev_loop" [color="gray60", style="solid"];
  "dev_engine.dev_tools" -> "butler.dev_engine.dev_metrics" [color="gray60", style="solid"];
  "dev_engine.dev_tools" -> "butler.dev_engine.dev_state" [color="gray60", style="solid"];
  "dev_engine.dev_tools" -> "butler.dev_engine.edit_ops" [color="gray60", style="solid"];
  "dev_engine.dev_tools" -> "butler.dev_engine.optimize_advisory" [color="gray60", style="solid"];
  "dev_engine.dev_tools" -> "butler.dev_engine.review_closure" [color="gray60", style="solid"];
  "dev_engine.dev_tools" -> "butler.dev_engine.review_static" [color="gray60", style="solid"];
  "dev_engine.dev_tools" -> "butler.dev_engine.verify" [color="gray60", style="solid"];
  "dev_engine.dev_tools" -> "butler.tools.path_safety" [color="gray60", style="solid"];
  "dev_engine.dev_tools" -> "butler.tools.safe_root" [color="gray60", style="solid"];
  "dev_engine.dev_tools_ops" -> "butler.core.best_effort" [color="gray60", style="solid"];
  "dev_engine.dev_tools_ops" -> "butler.core.review_context_adapter" [color="gray60", style="solid"];
  "dev_engine.dev_tools_ops" -> "butler.dev_engine.b9_live_tuning" [color="gray60", style="solid"];
  "dev_engine.dev_tools_ops" -> "butler.dev_engine.coding_knowledge" [color="gray60", style="solid"];
  "dev_engine.dev_tools_ops" -> "butler.dev_engine.dev_tools" [color="gray60", style="solid"];
  "dev_engine.dev_tools_ops" -> "butler.dev_engine.review_closure" [color="gray60", style="solid"];
  "dev_engine.dev_tools_ops" -> "butler.execution_context" [color="gray60", style="solid"];
  "dev_engine.diagnostics" -> "butler.dev_engine.dev_state" [color="gray60", style="solid"];
  "dev_engine.edit_ops" -> "butler.dev_engine.dev_state" [color="gray60", style="solid"];
  "dev_engine.edit_ops" -> "butler.io.atomic_write" [color="gray60", style="solid"];
  "dev_engine.fix_strategy" -> "butler.dev_engine.dev_state" [color="gray60", style="solid"];
  "dev_engine.gentc_mutation" -> "butler.defaults.env_defaults" [color="gray60", style="solid"];
  "dev_engine.gentc_mutation" -> "butler.dev_engine.coding_knowledge" [color="gray60", style="solid"];
  "dev_engine.gentc_mutation" -> "butler.dev_engine.gentc_mutation_ops" [color="gray60", style="solid"];
  "dev_engine.llm_delegate_benchmark" -> "butler.defaults.env_defaults" [color="gray60", style="solid"];
  "dev_engine.llm_delegate_benchmark" -> "butler.dev_engine.b9_delegate_gate" [color="gray60", style="solid"];
  "dev_engine.llm_delegate_benchmark" -> "butler.dev_engine.b9_live_fixed_tasks" [color="gray60", style="solid"];
  "dev_engine.llm_delegate_benchmark" -> "butler.dev_engine.b9_live_tuning" [color="gray60", style="solid"];
  "dev_engine.llm_delegate_benchmark" -> "butler.dev_engine.b9_types" [color="gray60", style="solid"];
  "dev_engine.llm_delegate_benchmark" -> "butler.dev_engine.edit_ops" [color="gray60", style="solid"];
  "dev_engine.llm_delegate_benchmark" -> "butler.dev_engine.llm_delegate_benchmark_ops" [color="gray60", style="solid"];
  "dev_engine.llm_delegate_benchmark" -> "butler.dev_engine.swe_curriculum" [color="gray60", style="solid"];
  "dev_engine.llm_delegate_benchmark" -> "butler.execution_context" [color="gray60", style="solid"];
  "dev_engine.llm_delegate_benchmark" -> "butler.ops.eval_config_overrides" [color="gray60", style="solid"];
  "dev_engine.llm_delegate_benchmark" -> "butler.orchestrator" [color="gray60", style="solid"];
  "dev_engine.llm_delegate_benchmark" -> "butler.project.model" [color="gray60", style="solid"];
  "dev_engine.llm_delegate_benchmark" -> "butler.tools.registry" [color="gray60", style="solid"];
  "dev_engine.llm_delegate_benchmark_ops" -> "butler.core.best_effort" [color="gray60", style="solid"];
  "dev_engine.llm_delegate_benchmark_ops" -> "butler.ops.b9_lessons" [color="gray60", style="solid"];
  "dev_engine.loop_plugin" -> "butler.defaults.env_defaults" [color="gray60", style="solid"];
  "dev_engine.loop_plugin" -> "butler.dev_engine.loop_plugin_ops" [color="gray60", style="solid"];
  "dev_engine.loop_plugin_ops" -> "butler.core.best_effort" [color="gray60", style="solid"];
  "dev_engine.loop_plugin_ops" -> "butler.core.read_state" [color="gray60", style="solid"];
  "dev_engine.loop_plugin_ops" -> "butler.dev_engine.dev_context" [color="gray60", style="solid"];
  "dev_engine.loop_plugin_ops" -> "butler.dev_engine.dev_state" [color="gray60", style="solid"];
  "dev_engine.loop_plugin_ops" -> "butler.dev_engine.dev_tools" [color="gray60", style="solid"];
  "dev_engine.loop_plugin_ops" -> "butler.dev_engine.loop_plugin" [color="gray60", style="solid"];
  "dev_engine.optimize_advisory" -> "butler.contracts.review_ports" [color="gray60", style="solid"];
  "dev_engine.optimize_advisory" -> "butler.dev_engine.review_static" [color="gray60", style="solid"];
  "dev_engine.prod_delegate_bridge" -> "butler.dev_engine.b9_delegate_gate" [color="gray60", style="solid"];
  "dev_engine.prod_delegate_bridge" -> "butler.dev_engine.b9_experience_retrieval" [color="gray60", style="solid"];
  "dev_engine.prod_delegate_bridge" -> "butler.dev_engine.b9_live_tuning" [color="gray60", style="solid"];
  "dev_engine.prod_delegate_bridge" -> "butler.dev_engine.coding_knowledge" [color="gray60", style="solid"];
  "dev_engine.prod_delegate_bridge" -> "butler.dev_engine.prod_delegate_bridge_ops" [color="gray60", style="solid"];
  "dev_engine.prod_delegate_bridge" -> "butler.memory.memory_scope" [color="gray60", style="solid"];
  "dev_engine.prod_delegate_bridge" -> "butler.project.manager" [color="gray60", style="solid"];
  "dev_engine.prod_delegate_bridge_ops" -> "butler.core.best_effort" [color="gray60", style="solid"];
  "dev_engine.prod_delegate_bridge_ops" -> "butler.dev_engine.prod_playbook_seeds" [color="gray60", style="solid"];
  "dev_engine.prod_delegate_bridge_ops" -> "butler.ops.lingwen1_prod_sample" [color="gray60", style="solid"];
  "dev_engine.prod_playbook_seeds" -> "butler.configuration.settings" [color="gray60", style="solid"];
  "dev_engine.prod_playbook_seeds" -> "butler.dev_engine.b9_experience_retrieval" [color="gray60", style="solid"];
  "dev_engine.prod_playbook_seeds" -> "butler.dev_engine.coding_knowledge" [color="gray60", style="solid"];
  "dev_engine.prod_playbook_seeds" -> "butler.memory.memory_scope" [color="gray60", style="solid"];
  "dev_engine.review_closure" -> "butler.configuration.settings" [color="gray60", style="solid"];
  "dev_engine.review_closure" -> "butler.contracts.review_ports" [color="gray60", style="solid"];
  "dev_engine.review_closure" -> "butler.core.review_context_adapter" [color="gray60", style="solid"];
  "dev_engine.review_closure" -> "butler.dev_engine.review_closure_ops" [color="gray60", style="solid"];
  "dev_engine.review_closure" -> "butler.memory.memory_scope" [color="gray60", style="solid"];
  "dev_engine.review_closure_ops" -> "butler.contracts.review_ports" [color="gray60", style="solid"];
  "dev_engine.review_closure_ops" -> "butler.core.best_effort" [color="gray60", style="solid"];
  "dev_engine.review_closure_ops" -> "butler.core.reflection_closure" [color="gray60", style="solid"];
  "dev_engine.review_closure_ops" -> "butler.defaults.env_defaults" [color="gray60", style="solid"];
  "dev_engine.review_closure_ops" -> "butler.utilities.env_parse" [color="gray60", style="solid"];
  "dev_engine.review_knowledge" -> "butler.contracts.review_ports" [color="gray60", style="solid"];
  "dev_engine.review_static" -> "butler.contracts.review_ports" [color="gray60", style="solid"];
  "dev_engine.review_static" -> "butler.core.review_context_adapter" [color="gray60", style="solid"];
  "dev_engine.review_static" -> "butler.utilities.env_parse" [color="gray60", style="solid"];
  "dev_engine.swebench_lite" -> "butler.dev_engine.swebench_lite" [color="gray60", style="solid"];
  "dev_engine.swebench_lite.queries" -> "butler.dev_engine.swebench_lite_ops" [color="gray60", style="solid"];
  "dev_engine.theorem_library" -> "butler.dev_engine.coding_elements" [color="gray60", style="solid"];
  "dev_engine.verify" -> "butler.defaults.env_defaults" [color="gray60", style="solid"];
  "dev_engine.verify" -> "butler.dev_engine.dev_state" [color="gray60", style="solid"];
  "dev_engine.verify" -> "butler.dev_engine.diagnostics" [color="gray60", style="solid"];
  "dev_engine.verify" -> "butler.dev_engine.project_dev_env" [color="gray60", style="solid"];
  "dev_engine.verify" -> "butler.dev_engine.verify_ops" [color="gray60", style="solid"];
  "dev_engine.verify" -> "butler.utilities.env_parse" [color="gray60", style="solid"];
  "dev_engine.verify_ops" -> "butler.core.best_effort" [color="gray60", style="solid"];
  "dev_engine.verify_ops" -> "butler.dev_engine.dev_state" [color="gray60", style="solid"];
  "dev_engine.verify_ops" -> "butler.dev_engine.diagnostics" [color="gray60", style="solid"];
  "dev_engine.verify_ops" -> "butler.dev_engine.prod_delegate_bridge" [color="gray60", style="solid"];
  "dev_engine.verify_ops" -> "butler.ops.eval_config_overrides" [color="gray60", style="solid"];
  "dev_engine.verify_ops" -> "butler.project.model" [color="gray60", style="solid"];
  "env_parse" -> "butler.utilities.env_parse" [color="gray60", style="solid"];
  "eval_integration" -> "butler.eval_integration.manager" [color="gray60", style="solid"];
  "eval_integration" -> "butler.eval_integration.report_schema" [color="gray60", style="solid"];
  "eval_integration.manager" -> "butler.contracts.eval_ports" [color="gray60", style="solid"];
  "eval_integration.manager" -> "butler.eval_integration.manager_ops" [color="gray60", style="solid"];
  "eval_integration.manager" -> "butler.eval_integration.report_schema" [color="gray60", style="solid"];
  "eval_integration.manager" -> "butler.eval_integration.sinks.audit_sink" [color="gray60", style="solid"];
  "eval_integration.manager" -> "butler.eval_integration.sinks.deepeval_sink" [color="gray60", style="solid"];
  "eval_integration.manager" -> "butler.eval_integration.sinks.junit_sink" [color="gray60", style="solid"];
  "eval_integration.manager" -> "butler.eval_integration.sinks.langfuse_sink" [color="gray60", style="solid"];
  "eval_integration.manager" -> "butler.eval_integration.sinks.ragas_sink" [color="gray60", style="solid"];
  "eval_integration.manager" -> "butler.eval_integration.suite_registry" [color="gray60", style="solid"];
  "eval_integration.manager" -> "butler.eval_integration.sync_policy" [color="gray60", style="solid"];
  "eval_integration.manager_ops" -> "butler.contracts.eval_ports" [color="gray60", style="solid"];
  "eval_integration.manager_ops" -> "butler.core.transform_feedback" [color="gray60", style="solid"];
  "eval_integration.oss.deepeval_runner" -> "butler.eval_integration.oss.deepeval_runner_ops" [color="gray60", style="solid"];
  "eval_integration.oss.deepeval_runner" -> "butler.utilities.env_parse" [color="gray60", style="solid"];
  "eval_integration.oss.prefetch_audit_loader" -> "butler.configuration.settings" [color="gray60", style="solid"];
  "eval_integration.oss.prefetch_audit_loader" -> "butler.utilities.env_parse" [color="gray60", style="solid"];
  "eval_integration.oss.ragas_runner" -> "butler.eval_integration.oss.prefetch_audit_loader" [color="gray60", style="solid"];
  "eval_integration.oss.ragas_runner" -> "butler.utilities.env_parse" [color="gray60", style="solid"];
  "eval_integration.report_schema" -> "butler.contracts.eval_ports" [color="gray60", style="solid"];
  "eval_integration.sinks.audit_sink" -> "butler.configuration.settings" [color="gray60", style="solid"];
  "eval_integration.sinks.audit_sink" -> "butler.contracts.eval_ports" [color="gray60", style="solid"];
  "eval_integration.sinks.deepeval_sink" -> "butler.contracts.eval_ports" [color="gray60", style="solid"];
  "eval_integration.sinks.junit_sink" -> "butler.contracts.eval_ports" [color="gray60", style="solid"];
  "eval_integration.sinks.langfuse_sink" -> "butler.contracts.eval_ports" [color="gray60", style="solid"];
  "eval_integration.sinks.langfuse_sink" -> "butler.eval_integration.sinks.langfuse_sink_ops" [color="gray60", style="solid"];
  "eval_integration.sinks.langfuse_sink_ops" -> "butler.contracts.eval_ports" [color="gray60", style="solid"];
  "eval_integration.sinks.langfuse_sink_ops" -> "butler.ops.eval_bridge" [color="gray60", style="solid"];
  "eval_integration.sinks.ragas_sink" -> "butler.contracts.eval_ports" [color="gray60", style="solid"];
  "eval_integration.suite_registry" -> "butler.contracts.eval_ports" [color="gray60", style="solid"];
  "eval_integration.suite_registry" -> "butler.eval_integration.suites.agent_weekly_suite" [color="gray60", style="solid"];
  "eval_integration.suite_registry" -> "butler.eval_integration.suites.b9_oracle_suite" [color="gray60", style="solid"];
  "eval_integration.suite_registry" -> "butler.eval_integration.suites.capability_suite" [color="gray60", style="solid"];
  "eval_integration.suite_registry" -> "butler.eval_integration.suites.deepeval_suite" [color="gray60", style="solid"];
  "eval_integration.suite_registry" -> "butler.eval_integration.suites.hermes_gate_suite" [color="gray60", style="solid"];
  "eval_integration.suite_registry" -> "butler.eval_integration.suites.memory_mb_suite" [color="gray60", style="solid"];
  "eval_integration.suite_registry" -> "butler.eval_integration.suites.ragas_suite" [color="gray60", style="solid"];
  "eval_integration.suite_registry" -> "butler.eval_integration.suites.regression_suite" [color="gray60", style="solid"];
  "eval_integration.suite_registry" -> "butler.eval_integration.suites.tcr_suite" [color="gray60", style="solid"];
  "eval_integration.suite_registry" -> "butler.eval_integration.suites.wechat_corpus_suite" [color="gray60", style="solid"];
  "eval_integration.suites.agent_weekly_suite" -> "butler.contracts.eval_ports" [color="gray60", style="solid"];
  "eval_integration.suites.agent_weekly_suite" -> "butler.ops.agent_eval_weekly" [color="gray60", style="solid"];
  "eval_integration.suites.b9_oracle_suite" -> "butler.contracts.eval_ports" [color="gray60", style="solid"];
  "eval_integration.suites.b9_oracle_suite" -> "butler.dev_engine.b9_types" [color="gray60", style="solid"];
  "eval_integration.suites.b9_oracle_suite" -> "butler.dev_engine.llm_delegate_benchmark" [color="gray60", style="solid"];
  "eval_integration.suites.b9_oracle_suite" -> "butler.eval_integration.suites_ops" [color="gray60", style="solid"];
  "eval_integration.suites.b9_oracle_suite" -> "butler.ops.eval_diagnostics" [color="gray60", style="solid"];
  "eval_integration.suites.b9_oracle_suite" -> "butler.utilities.env_parse" [color="gray60", style="solid"];
  "eval_integration.suites.capability_suite" -> "butler.contracts.eval_ports" [color="gray60", style="solid"];
  "eval_integration.suites.deepeval_suite" -> "butler.contracts.eval_ports" [color="gray60", style="solid"];
  "eval_integration.suites.deepeval_suite" -> "butler.eval_integration.oss.deepeval_runner" [color="gray60", style="solid"];
  "eval_integration.suites.hermes_gate_suite" -> "butler.contracts.eval_ports" [color="gray60", style="solid"];
  "eval_integration.suites.hermes_gate_suite" -> "butler.ops.hermes_gate" [color="gray60", style="solid"];
  "eval_integration.suites.memory_mb_suite" -> "butler.contracts.eval_ports" [color="gray60", style="solid"];
  "eval_integration.suites.memory_mb_suite" -> "butler.eval_integration.suites_ops" [color="gray60", style="solid"];
  "eval_integration.suites.memory_mb_suite" -> "butler.memory.memory_benchmark" [color="gray60", style="solid"];
  "eval_integration.suites.memory_mb_suite" -> "butler.utilities.env_parse" [color="gray60", style="solid"];
  "eval_integration.suites.ragas_suite" -> "butler.contracts.eval_ports" [color="gray60", style="solid"];
  "eval_integration.suites.ragas_suite" -> "butler.eval_integration.oss.ragas_runner" [color="gray60", style="solid"];
  "eval_integration.suites.regression_suite" -> "butler.contracts.eval_ports" [color="gray60", style="solid"];
  "eval_integration.suites.regression_suite" -> "butler.ops.eval_regression" [color="gray60", style="solid"];
  "eval_integration.suites.tcr_suite" -> "butler.contracts.eval_ports" [color="gray60", style="solid"];
  "eval_integration.suites.tcr_suite" -> "butler.ops" [color="gray60", style="solid"];
  "eval_integration.suites.wechat_corpus_suite" -> "butler.contracts.eval_ports" [color="gray60", style="solid"];
  "eval_integration.suites.wechat_corpus_suite" -> "butler.ops.wechat_corpus_eval" [color="gray60", style="solid"];
  "eval_integration.suites_ops" -> "butler.ops.eval_bridge" [color="gray60", style="solid"];
  "eval_integration.suites_ops" -> "butler.ops.memory_eval" [color="gray60", style="solid"];
  "execpolicy" -> "butler.execpolicy.engine" [color="gray60", style="solid"];
  "execpolicy.engine" -> "butler.defaults.env_defaults" [color="gray60", style="solid"];
  "execpolicy.engine" -> "butler.execpolicy.engine_ops" [color="gray60", style="solid"];
  "execpolicy.engine" -> "butler.utilities.env_parse" [color="gray60", style="solid"];
  "execpolicy.engine_ops" -> "butler.configuration.settings" [color="gray60", style="solid"];
  "execpolicy.engine_ops" -> "butler.core.best_effort" [color="gray60", style="solid"];
  "execution_context" -> "butler.contracts.gateway_registry" [color="gray60", style="solid"];
  "execution_context" -> "butler.orchestrator" [color="gray60", style="solid"];
  "experiments" -> "butler.experiments.ledger" [color="gray60", style="solid"];
  "experiments" -> "butler.experiments.metrics" [color="gray60", style="solid"];
  "experiments" -> "butler.experiments.mode" [color="gray60", style="solid"];
  "experiments.crash_guard" -> "butler.experiments.ledger" [color="gray60", style="solid"];
  "experiments.crash_guard" -> "butler.utilities.env_parse" [color="gray60", style="solid"];
  "experiments.git_utils" -> "butler.defaults.env_defaults" [color="gray60", style="solid"];
  "experiments.git_utils" -> "butler.utilities.env_parse" [color="gray60", style="solid"];
  "experiments.ledger" -> "butler.defaults.env_defaults" [color="gray60", style="solid"];
  "experiments.ledger" -> "butler.experiments.git_utils" [color="gray60", style="solid"];
  "experiments.ledger" -> "butler.experiments.ledger_ops" [color="gray60", style="solid"];
  "experiments.ledger" -> "butler.experiments.metrics" [color="gray60", style="solid"];
  "experiments.ledger" -> "butler.utilities.env_parse" [color="gray60", style="solid"];
  "experiments.ledger_ops" -> "butler.core.best_effort" [color="gray60", style="solid"];
  "experiments.ledger_ops" -> "butler.experiments.crash_guard" [color="gray60", style="solid"];
  "experiments.ledger_ops" -> "butler.experiments.outcomes" [color="gray60", style="solid"];
  "experiments.ledger_ops" -> "butler.project.manager" [color="gray60", style="solid"];
  "experiments.mode" -> "butler.defaults.env_defaults" [color="gray60", style="solid"];
  "experiments.mode" -> "butler.utilities.env_parse" [color="gray60", style="solid"];
  "experiments.outcomes" -> "butler.utilities.env_parse" [color="gray60", style="solid"];
  "extensions.opencode" -> "butler.extensions.opencode_ops" [color="gray60", style="solid"];
  "extensions.opencode_ops" -> "butler.core.best_effort" [color="gray60", style="solid"];
  "gate_reply_templates" -> "butler.permissions.human_gate" [color="gray60", style="solid"];
  "gateway" -> "butler.resilience" [color="gray60", style="solid"];
  "gateway.approval_cards" -> "butler.core.approval_cards" [color="gray60", style="solid"];
  "gateway.bot_loop_guard" -> "butler.defaults.env_defaults" [color="gray60", style="solid"];
  "gateway.bot_loop_guard" -> "butler.gateway.bot_loop_guard_ops" [color="gray60", style="solid"];
  "gateway.bot_loop_guard" -> "butler.utilities.env_parse" [color="gray60", style="solid"];
  "gateway.bot_loop_guard_ops" -> "butler.core.best_effort" [color="gray60", style="solid"];
  "gateway.bot_loop_guard_ops" -> "butler.core.session_transcript" [color="gray60", style="solid"];
  "gateway.command_registry" -> "butler.gateway.command_registry_ops" [color="gray60", style="solid"];
  "gateway.command_registry" -> "butler.gateway.gateway_transcript" [color="gray60", style="solid"];
  "gateway.command_registry" -> "butler.gateway.outbound_prefs" [color="gray60", style="solid"];
  "gateway.command_registry" -> "butler.gateway.owner_gate" [color="gray60", style="solid"];
  "gateway.command_registry" -> "butler.gateway.session_registry" [color="gray60", style="solid"];
  "gateway.command_registry" -> "butler.orchestrator" [color="gray60", style="solid"];
  "gateway.commands" -> "butler.gateway.commands" [color="gray60", style="solid"];
  "gateway.commands.cc_bridge_commands" -> "butler.gateway.command_registry" [color="gray60", style="solid"];
  "gateway.commands.cc_bridge_commands" -> "butler.runtime.cc_bridge" [color="gray60", style="solid"];
  "gateway.commands.dev_commands" -> "butler.gateway.command_registry" [color="gray60", style="solid"];
  "gateway.commands.dev_commands" -> "butler.gateway.commands.dev_handlers" [color="gray60", style="solid"];
  "gateway.commands.dev_handlers" -> "butler.dev_engine.project_dev_env" [color="gray60", style="solid"];
  "gateway.commands.dev_handlers" -> "butler.gateway.commands.dev_handlers_ops" [color="gray60", style="solid"];
  "gateway.commands.dev_handlers" -> "butler.gateway.owner_gate" [color="gray60", style="solid"];
  "gateway.commands.dev_handlers" -> "butler.gateway.owner_surface" [color="gray60", style="solid"];
  "gateway.commands.dev_handlers" -> "butler.tools.git_tools" [color="gray60", style="solid"];
  "gateway.commands.dev_handlers" -> "butler.utilities.env_parse" [color="gray60", style="solid"];
  "gateway.commands.dev_handlers_ops" -> "butler.core.best_effort" [color="gray60", style="solid"];
  "gateway.commands.dev_handlers_ops" -> "butler.gateway.message_handler" [color="gray60", style="solid"];
  "gateway.commands.dev_handlers_ops" -> "butler.project.manager" [color="gray60", style="solid"];
  "gateway.commands.dialog_commands" -> "butler.core.goal_loop" [color="gray60", style="solid"];
  "gateway.commands.dialog_commands" -> "butler.core.steer" [color="gray60", style="solid"];
  "gateway.commands.dialog_commands" -> "butler.gateway.command_registry" [color="gray60", style="solid"];
  "gateway.commands.dialog_commands" -> "butler.gateway.commands.dialog_commands_ops" [color="gray60", style="solid"];
  "gateway.commands.dialog_commands" -> "butler.gateway.queue_settings" [color="gray60", style="solid"];
  "gateway.commands.dialog_commands" -> "butler.model_resolve" [color="gray60", style="solid"];
  "gateway.commands.dialog_commands" -> "butler.orchestrator" [color="gray60", style="solid"];
  "gateway.commands.dialog_commands" -> "butler.permissions.human_gate" [color="gray60", style="solid"];
  "gateway.commands.dialog_commands" -> "butler.plan.mode" [color="gray60", style="solid"];
  "gateway.commands.dialog_commands" -> "butler.project.lead" [color="gray60", style="solid"];
  "gateway.commands.dialog_commands" -> "butler.report" [color="gray60", style="solid"];
  "gateway.commands.dialog_commands" -> "butler.session.new_session" [color="gray60", style="solid"];
  "gateway.commands.dialog_commands" -> "butler.tools.tool_audit" [color="gray60", style="solid"];
  "gateway.commands.dialog_commands_ops" -> "butler.core.best_effort" [color="gray60", style="solid"];
  "gateway.commands.dialog_commands_ops" -> "butler.core.compaction_checkpoint" [color="gray60", style="solid"];
  "gateway.commands.dialog_commands_ops" -> "butler.core.goal_loop" [color="gray60", style="solid"];
  "gateway.commands.dialog_commands_ops" -> "butler.core.instruction_walkup" [color="gray60", style="solid"];
  "gateway.commands.dialog_commands_ops" -> "butler.core.read_state" [color="gray60", style="solid"];
  "gateway.commands.dialog_commands_ops" -> "butler.core.session_transcript" [color="gray60", style="solid"];
  "gateway.commands.dialog_commands_ops" -> "butler.gateway.completion_telemetry" [color="gray60", style="solid"];
  "gateway.commands.dialog_commands_ops" -> "butler.gateway.owner_surface" [color="gray60", style="solid"];
  "gateway.commands.dialog_commands_ops" -> "butler.gateway.queue_settings" [color="gray60", style="solid"];
  "gateway.commands.dialog_commands_ops" -> "butler.hooks.telemetry" [color="gray60", style="solid"];
  "gateway.commands.dialog_commands_ops" -> "butler.permissions.human_gate" [color="gray60", style="solid"];
  "gateway.commands.dialog_commands_ops" -> "butler.resilience.message_queue" [color="gray60", style="solid"];
  "gateway.commands.experience_commands" -> "butler.gateway.command_registry" [color="gray60", style="solid"];
  "gateway.commands.experience_commands" -> "butler.gateway.commands.experience_commands_ops" [color="gray60", style="solid"];
  "gateway.commands.experience_commands" -> "butler.memory.experience_mining" [color="gray60", style="solid"];
  "gateway.commands.experience_commands_ops" -> "butler.core.best_effort" [color="gray60", style="solid"];
  "gateway.commands.export_handlers" -> "butler.core.transcript_export" [color="gray60", style="solid"];
  "gateway.commands.export_handlers" -> "butler.gateway.outbound_files" [color="gray60", style="solid"];
  "gateway.commands.export_handlers" -> "butler.gateway.owner_gate" [color="gray60", style="solid"];
  "gateway.commands.export_handlers" -> "butler.gateway.wechat_text_export" [color="gray60", style="solid"];
  "gateway.commands.help_handlers" -> "butler.gateway.commands.help_handlers_ops" [color="gray60", style="solid"];
  "gateway.commands.help_handlers" -> "butler.gateway.owner_surface" [color="gray60", style="solid"];
  "gateway.commands.help_handlers_ops" -> "butler.core.best_effort" [color="gray60", style="solid"];
  "gateway.commands.help_handlers_ops" -> "butler.gateway.command_registry" [color="gray60", style="solid"];
  "gateway.commands.info_commands" -> "butler.configuration.provider_presets" [color="gray60", style="solid"];
  "gateway.commands.info_commands" -> "butler.core.compaction_status" [color="gray60", style="solid"];
  "gateway.commands.info_commands" -> "butler.core.memory_source_surface" [color="gray60", style="solid"];
  "gateway.commands.info_commands" -> "butler.core.session_epoch" [color="gray60", style="solid"];
  "gateway.commands.info_commands" -> "butler.core.session_todos" [color="gray60", style="solid"];
  "gateway.commands.info_commands" -> "butler.core.session_tool_index" [color="gray60", style="solid"];
  "gateway.commands.info_commands" -> "butler.core.tool_narrative" [color="gray60", style="solid"];
  "gateway.commands.info_commands" -> "butler.core.transcript_export" [color="gray60", style="solid"];
  "gateway.commands.info_commands" -> "butler.core.turn_token_budget" [color="gray60", style="solid"];
  "gateway.commands.info_commands" -> "butler.gateway.command_registry" [color="gray60", style="solid"];
  "gateway.commands.info_commands" -> "butler.gateway.commands.help_handlers" [color="gray60", style="solid"];
  "gateway.commands.info_commands" -> "butler.gateway.commands.info_commands_ops" [color="gray60", style="solid"];
  "gateway.commands.info_commands" -> "butler.gateway.commands.memory_handlers" [color="gray60", style="solid"];
  "gateway.commands.info_commands" -> "butler.gateway.commands.outcome_handlers" [color="gray60", style="solid"];
  "gateway.commands.info_commands" -> "butler.gateway.commands.sessions_handlers" [color="gray60", style="solid"];
  "gateway.commands.info_commands" -> "butler.gateway.handler_helpers" [color="gray60", style="solid"];
  "gateway.commands.info_commands" -> "butler.gateway.owner_surface" [color="gray60", style="solid"];
  "gateway.commands.info_commands" -> "butler.gateway.wechat_text_export" [color="gray60", style="solid"];
  "gateway.commands.info_commands" -> "butler.ops.butler_inbox" [color="gray60", style="solid"];
  "gateway.commands.info_commands" -> "butler.ops.cost_calibration" [color="gray60", style="solid"];
  "gateway.commands.info_commands" -> "butler.ops.health_report" [color="gray60", style="solid"];
  "gateway.commands.info_commands" -> "butler.ops.owner_feedback" [color="gray60", style="solid"];
  "gateway.commands.info_commands" -> "butler.ops.owner_quality_surface" [color="gray60", style="solid"];
  "gateway.commands.info_commands" -> "butler.ops.owner_trust_surface" [color="gray60", style="solid"];
  "gateway.commands.info_commands" -> "butler.report" [color="gray60", style="solid"];
  "gateway.commands.info_commands" -> "butler.report.format" [color="gray60", style="solid"];
  "gateway.commands.info_commands" -> "butler.tools.contacts" [color="gray60", style="solid"];
  "gateway.commands.info_commands" -> "butler.tools.expense" [color="gray60", style="solid"];
  "gateway.commands.info_commands" -> "butler.tools.habits" [color="gray60", style="solid"];
  "gateway.commands.info_commands" -> "butler.tools.memo" [color="gray60", style="solid"];
  "gateway.commands.info_commands" -> "butler.tools.pim_schema" [color="gray60", style="solid"];
  "gateway.commands.info_commands" -> "butler.tools.project_todos" [color="gray60", style="solid"];
  "gateway.commands.info_commands" -> "butler.tools.tenant_store" [color="gray60", style="solid"];
  "gateway.commands.info_commands_ops" -> "butler.core.best_effort" [color="gray60", style="solid"];
  "gateway.commands.info_commands_ops" -> "butler.ops.owner_pmf_metrics" [color="gray60", style="solid"];
  "gateway.commands.info_commands_ops" -> "butler.tools.reminder" [color="gray60", style="solid"];
  "gateway.commands.lifecycle_commands" -> "butler.configuration.service" [color="gray60", style="solid"];
  "gateway.commands.lifecycle_commands" -> "butler.core.transcript_fork" [color="gray60", style="solid"];
  "gateway.commands.lifecycle_commands" -> "butler.core.transcript_revert" [color="gray60", style="solid"];
  "gateway.commands.lifecycle_commands" -> "butler.defaults.env_defaults" [color="gray60", style="solid"];
  "gateway.commands.lifecycle_commands" -> "butler.gateway.command_registry" [color="gray60", style="solid"];
  "gateway.commands.lifecycle_commands" -> "butler.gateway.commands.export_handlers" [color="gray60", style="solid"];
  "gateway.commands.lifecycle_commands" -> "butler.gateway.commands.lifecycle_commands_ops" [color="gray60", style="solid"];
  "gateway.commands.lifecycle_commands" -> "butler.gateway.commands.registry_handlers" [color="gray60", style="solid"];
  "gateway.commands.lifecycle_commands" -> "butler.memory.transcript_memory_pipeline" [color="gray60", style="solid"];
  "gateway.commands.lifecycle_commands" -> "butler.ops.security_audit" [color="gray60", style="solid"];
  "gateway.commands.lifecycle_commands" -> "butler.runtime.task_store" [color="gray60", style="solid"];
  "gateway.commands.lifecycle_commands" -> "butler.workflows.commands" [color="gray60", style="solid"];
  "gateway.commands.lifecycle_commands_ops" -> "butler.core.best_effort" [color="gray60", style="solid"];
  "gateway.commands.memory_commands" -> "butler.gateway.command_registry" [color="gray60", style="solid"];
  "gateway.commands.memory_commands" -> "butler.gateway.commands.memory_handlers" [color="gray60", style="solid"];
  "gateway.commands.memory_commands" -> "butler.gateway.owner_gate" [color="gray60", style="solid"];
  "gateway.commands.memory_handlers" -> "butler.gateway.owner_gate" [color="gray60", style="solid"];
  "gateway.commands.memory_handlers" -> "butler.memory.pending_command_ops" [color="gray60", style="solid"];
  "gateway.commands.memory_handlers" -> "butler.memory.pending_handlers" [color="gray60", style="solid"];
  "gateway.commands.memory_handlers" -> "butler.orchestrator" [color="gray60", style="solid"];
  "gateway.commands.memory_handlers_ops" -> "butler.memory.pending_command_ops" [color="gray60", style="solid"];
  "gateway.commands.outcome_handlers" -> "butler.experiments.outcomes" [color="gray60", style="solid"];
  "gateway.commands.outcome_handlers" -> "butler.gateway.owner_gate" [color="gray60", style="solid"];
  "gateway.commands.owner_shortcut_commands" -> "butler.gateway.command_registry" [color="gray60", style="solid"];
  "gateway.commands.owner_shortcut_commands" -> "butler.gateway.owner_delegate_shortcuts" [color="gray60", style="solid"];
  "gateway.commands.permission_commands" -> "butler.gateway.command_registry" [color="gray60", style="solid"];
  "gateway.commands.permission_commands" -> "butler.gateway.commands.permission_commands_ops" [color="gray60", style="solid"];
  "gateway.commands.permission_commands" -> "butler.permissions.approvals" [color="gray60", style="solid"];
  "gateway.commands.permission_commands" -> "butler.tools.terminal_approval" [color="gray60", style="solid"];
  "gateway.commands.permission_commands" -> "butler.tools.terminal_pattern_approval" [color="gray60", style="solid"];
  "gateway.commands.permission_commands_ops" -> "butler.core.best_effort" [color="gray60", style="solid"];
  "gateway.commands.permission_commands_ops" -> "butler.ops.runtime_metrics" [color="gray60", style="solid"];
  "gateway.commands.project_commands" -> "butler.defaults.env_defaults" [color="gray60", style="solid"];
  "gateway.commands.project_commands" -> "butler.gateway.command_registry" [color="gray60", style="solid"];
  "gateway.commands.project_commands" -> "butler.gateway.commands.project_commands_ops" [color="gray60", style="solid"];
  "gateway.commands.project_commands" -> "butler.gateway.commands.project_handlers" [color="gray60", style="solid"];
  "gateway.commands.project_commands" -> "butler.orchestrator" [color="gray60", style="solid"];
  "gateway.commands.project_commands" -> "butler.plan.mode" [color="gray60", style="solid"];
  "gateway.commands.project_commands" -> "butler.project.lead" [color="gray60", style="solid"];
  "gateway.commands.project_commands" -> "butler.project.maturity" [color="gray60", style="solid"];
  "gateway.commands.project_commands" -> "butler.project.meta" [color="gray60", style="solid"];
  "gateway.commands.project_commands_ops" -> "butler.core.best_effort" [color="gray60", style="solid"];
  "gateway.commands.project_commands_ops" -> "butler.gateway.owner_surface" [color="gray60", style="solid"];
  "gateway.commands.project_handlers" -> "butler.configuration.settings" [color="gray60", style="solid"];
  "gateway.commands.project_handlers" -> "butler.gateway.commands.project_handlers_ops" [color="gray60", style="solid"];
  "gateway.commands.project_handlers" -> "butler.gateway.owner_gate" [color="gray60", style="solid"];
  "gateway.commands.project_handlers" -> "butler.orchestrator" [color="gray60", style="solid"];
  "gateway.commands.project_handlers" -> "butler.project.archetypes" [color="gray60", style="solid"];
  "gateway.commands.project_handlers" -> "butler.project.preflight" [color="gray60", style="solid"];
  "gateway.commands.registry_handlers" -> "butler.gateway.command_registry" [color="gray60", style="solid"];
  "gateway.commands.registry_handlers" -> "butler.gateway.commands.registry_handlers_ops" [color="gray60", style="solid"];
  "gateway.commands.registry_handlers" -> "butler.registry.install_pending" [color="gray60", style="solid"];
  "gateway.commands.registry_handlers" -> "butler.registry.mcp_catalog" [color="gray60", style="solid"];
  "gateway.commands.registry_handlers" -> "butler.registry.mcp_install" [color="gray60", style="solid"];
  "gateway.commands.registry_handlers" -> "butler.registry.mcp_merge" [color="gray60", style="solid"];
  "gateway.commands.registry_handlers" -> "butler.registry.paths" [color="gray60", style="solid"];
  "gateway.commands.registry_handlers" -> "butler.registry.skill_service" [color="gray60", style="solid"];
  "gateway.commands.registry_handlers_ops" -> "butler.configuration.settings" [color="gray60", style="solid"];
  "gateway.commands.registry_handlers_ops" -> "butler.core.best_effort" [color="gray60", style="solid"];
  "gateway.commands.registry_handlers_ops" -> "butler.registry.install_pending" [color="gray60", style="solid"];
  "gateway.commands.registry_handlers_ops" -> "butler.registry.registry_errors" [color="gray60", style="solid"];
  "gateway.commands.runtime_commands" -> "butler.gateway.command_registry" [color="gray60", style="solid"];
  "gateway.commands.runtime_commands" -> "butler.gateway.commands.runtime_handlers" [color="gray60", style="solid"];
  "gateway.commands.runtime_commands" -> "butler.gateway.owner_gate" [color="gray60", style="solid"];
  "gateway.commands.runtime_handlers" -> "butler.gateway.owner_gate" [color="gray60", style="solid"];
  "gateway.commands.runtime_handlers" -> "butler.orchestrator" [color="gray60", style="solid"];
  "gateway.commands.runtime_handlers" -> "butler.runtime.service" [color="gray60", style="solid"];
  "gateway.commands.sandbox_commands" -> "butler.gateway.command_registry" [color="gray60", style="solid"];
  "gateway.commands.sandbox_commands" -> "butler.ops.env_profiles" [color="gray60", style="solid"];
  "gateway.commands.sandbox_commands" -> "butler.ops.terminal_sandbox_diagnostics" [color="gray60", style="solid"];
  "gateway.commands.sandbox_commands" -> "butler.runtime.cc_bridge" [color="gray60", style="solid"];
  "gateway.commands.sandbox_commands" -> "butler.tools.terminal_sandbox" [color="gray60", style="solid"];
  "gateway.commands.sessions_handlers" -> "butler.cli.sessions_cli" [color="gray60", style="solid"];
  "gateway.commands.sessions_handlers" -> "butler.gateway.owner_gate" [color="gray60", style="solid"];
  "gateway.commands.sessions_handlers" -> "butler.utilities.env_parse" [color="gray60", style="solid"];
  "gateway.commands.skill_commands" -> "butler.gateway.command_registry" [color="gray60", style="solid"];
  "gateway.commands.skill_commands" -> "butler.gateway.owner_gate" [color="gray60", style="solid"];
  "gateway.commands.skill_commands" -> "butler.orchestrator" [color="gray60", style="solid"];
  "gateway.commands.skill_commands" -> "butler.orchestrator.skill_bridge" [color="gray60", style="solid"];
  "gateway.commands.skill_commands" -> "butler.skills.learn" [color="gray60", style="solid"];
  "gateway.commands.skill_commands" -> "butler.skills.write_approval" [color="gray60", style="solid"];
  "gateway.completion_notify" -> "butler.contracts.completion_registry" [color="gray60", style="solid"];
  "gateway.completion_notify" -> "butler.contracts.gateway_registry" [color="gray60", style="solid"];
  "gateway.completion_notify" -> "butler.defaults.env_defaults" [color="gray60", style="solid"];
  "gateway.completion_notify" -> "butler.gateway" [color="gray60", style="solid"];
  "gateway.completion_notify" -> "butler.gateway.completion_notify_ops" [color="gray60", style="solid"];
  "gateway.completion_notify" -> "butler.gateway.completion_policy" [color="gray60", style="solid"];
  "gateway.completion_notify" -> "butler.gateway.completion_telemetry" [color="gray60", style="solid"];
  "gateway.completion_notify" -> "butler.gateway.outbound_bridge" [color="gray60", style="solid"];
  "gateway.completion_notify" -> "butler.gateway.pii_scrub" [color="gray60", style="solid"];
  "gateway.completion_notify" -> "butler.gateway.wechat_text_export" [color="gray60", style="solid"];
  "gateway.completion_notify" -> "butler.report" [color="gray60", style="solid"];
  "gateway.completion_notify" -> "butler.resilience.durable_outbox" [color="gray60", style="solid"];
  "gateway.completion_notify" -> "butler.runtime.notify" [color="gray60", style="solid"];
  "gateway.completion_notify" -> "butler.runtime.push_queue" [color="gray60", style="solid"];
  "gateway.completion_notify" -> "butler.utilities.env_parse" [color="gray60", style="solid"];
  "gateway.completion_notify_ops" -> "butler.core.best_effort" [color="gray60", style="solid"];
  "gateway.completion_notify_ops" -> "butler.resilience.durable_outbox" [color="gray60", style="solid"];
  "gateway.completion_policy" -> "butler.defaults.env_defaults" [color="gray60", style="solid"];
  "gateway.completion_policy" -> "butler.utilities.env_parse" [color="gray60", style="solid"];
  "gateway.completion_telemetry" -> "butler.gateway.completion_telemetry_ops" [color="gray60", style="solid"];
  "gateway.completion_telemetry" -> "butler.ops.runtime_metrics" [color="gray60", style="solid"];
  "gateway.completion_telemetry_ops" -> "butler.core.best_effort" [color="gray60", style="solid"];
  "gateway.completion_telemetry_ops" -> "butler.runtime.push_queue" [color="gray60", style="solid"];
  "gateway.delegate_push_dedup" -> "butler.core.best_effort" [color="gray60", style="solid"];
  "gateway.delegate_push_dedup" -> "butler.defaults.env_defaults" [color="gray60", style="solid"];
  "gateway.delegate_push_dedup" -> "butler.gateway.outbound_bridge" [color="gray60", style="solid"];
  "gateway.delegate_push_dedup" -> "butler.runtime.notify" [color="gray60", style="solid"];
  "gateway.delegate_push_dedup" -> "butler.runtime.task_store" [color="gray60", style="solid"];
  "gateway.delegate_push_dedup" -> "butler.utilities.env_parse" [color="gray60", style="solid"];
  "gateway.delegate_task_kind" -> "butler.delegate.task_kind" [color="gray60", style="solid"];
  "gateway.durable_outbox" -> "butler.resilience.durable_outbox" [color="gray60", style="solid"];
  "gateway.error_cards" -> "butler.core.approval_cards" [color="gray60", style="solid"];
  "gateway.events_sink" -> "butler.gateway.events_sink_impl" [color="gray60", style="solid"];
  "gateway.events_sink_impl" -> "butler.contracts.events" [color="gray60", style="solid"];
  "gateway.events_sink_impl" -> "butler.contracts.sink_registry" [color="gray60", style="solid"];
  "gateway.events_sink_impl" -> "butler.core.session_transcript" [color="gray60", style="solid"];
  "gateway.events_sink_impl" -> "butler.gateway.hooks" [color="gray60", style="solid"];
  "gateway.events_sink_impl" -> "butler.gateway.item_events" [color="gray60", style="solid"];
  "gateway.events_sink_impl" -> "butler.resilience.message_queue" [color="gray60", style="solid"];
  "gateway.gate_reply_templates" -> "butler.gate_reply_templates" [color="gray60", style="solid"];
  "gateway.gateway_contracts" -> "butler.contracts.gateway_registry" [color="gray60", style="solid"];
  "gateway.gateway_contracts" -> "butler.contracts.inbound_idempotency_registry" [color="gray60", style="solid"];
  "gateway.gateway_contracts" -> "butler.gateway.completion_notify" [color="gray60", style="solid"];
  "gateway.gateway_contracts" -> "butler.gateway.outbound_bridge" [color="gray60", style="solid"];
  "gateway.gateway_contracts" -> "butler.gateway.owner_gate" [color="gray60", style="solid"];
  "gateway.gateway_contracts" -> "butler.resilience.inbound_idempotency" [color="gray60", style="solid"];
  "gateway.gateway_transcript" -> "butler.gateway.gateway_transcript_ops" [color="gray60", style="solid"];
  "gateway.gateway_transcript_ops" -> "butler.core.best_effort" [color="gray60", style="solid"];
  "gateway.gateway_transcript_ops" -> "butler.core.session_transcript" [color="gray60", style="solid"];
  "gateway.handler_commands" -> "butler.core.loop_types" [color="gray60", style="solid"];
  "gateway.handler_commands" -> "butler.gateway.command_registry" [color="gray60", style="solid"];
  "gateway.handler_commands" -> "butler.gateway.commands" [color="gray60", style="solid"];
  "gateway.handler_commands" -> "butler.gateway.handler_helpers" [color="gray60", style="solid"];
  "gateway.handler_commands" -> "butler.gateway.message_handler" [color="gray60", style="solid"];
  "gateway.handler_commands" -> "butler.ops.health_report" [color="gray60", style="solid"];
  "gateway.handler_commands" -> "butler.report.format" [color="gray60", style="solid"];
  "gateway.handler_helpers" -> "butler.core.agent_loop.loop" [color="gray60", style="solid"];
  "gateway.handler_helpers" -> "butler.core.auto_continue" [color="gray60", style="solid"];
  "gateway.handler_helpers" -> "butler.core.best_effort" [color="gray60", style="solid"];
  "gateway.handler_helpers" -> "butler.core.loop_types" [color="gray60", style="solid"];
  "gateway.handler_helpers" -> "butler.defaults.env_defaults" [color="gray60", style="solid"];
  "gateway.handler_helpers" -> "butler.gateway.command_registry" [color="gray60", style="solid"];
  "gateway.handler_helpers" -> "butler.gateway.outbound_bridge" [color="gray60", style="solid"];
  "gateway.handler_helpers" -> "butler.mcp.registry_hook" [color="gray60", style="solid"];
  "gateway.handler_helpers" -> "butler.runtime.service" [color="gray60", style="solid"];
  "gateway.handler_helpers" -> "butler.tools._file_cache" [color="gray60", style="solid"];
  "gateway.handler_helpers" -> "butler.tools.registry" [color="gray60", style="solid"];
  "gateway.handler_helpers" -> "butler.tools.reminder" [color="gray60", style="solid"];
  "gateway.handler_helpers" -> "butler.utilities.env_parse" [color="gray60", style="solid"];
  "gateway.hooks" -> "butler.gateway.hooks_ops" [color="gray60", style="solid"];
  "gateway.inbound_drain" -> "butler.defaults.env_defaults" [color="gray60", style="solid"];
  "gateway.inbound_drain" -> "butler.gateway.outbound_bridge" [color="gray60", style="solid"];
  "gateway.inbound_drain" -> "butler.gateway.queue_settings" [color="gray60", style="solid"];
  "gateway.inbound_drain" -> "butler.resilience.message_queue" [color="gray60", style="solid"];
  "gateway.inbound_drain" -> "butler.utilities.env_parse" [color="gray60", style="solid"];
  "gateway.inbound_idempotency" -> "butler.resilience.inbound_idempotency" [color="gray60", style="solid"];
  "gateway.inbound_idempotency_ops" -> "butler.resilience.inbound_idempotency_ops" [color="gray60", style="solid"];
  "gateway.inbound_media" -> "butler.configuration.gateway" [color="gray60", style="solid"];
  "gateway.inbound_media" -> "butler.gateway.inbound_media_ops" [color="gray60", style="solid"];
  "gateway.inbound_media" -> "butler.gateway.platforms.types" [color="gray60", style="solid"];
  "gateway.inbound_media" -> "butler.tools.document_reader" [color="gray60", style="solid"];
  "gateway.inbound_media_ops" -> "butler.gateway.minimax_vlm" [color="gray60", style="solid"];
  "gateway.inbound_media_ops" -> "butler.gateway.speech_stt" [color="gray60", style="solid"];
  "gateway.inbound_media_ops" -> "butler.tools.document_reader" [color="gray60", style="solid"];
  "gateway.inbound_pipeline" -> "butler.gateway" [color="gray60", style="solid"];
  "gateway.inbound_pipeline" -> "butler.gateway.inbound_pipeline_ops" [color="gray60", style="solid"];
  "gateway.inbound_pipeline" -> "butler.gateway.message_handler" [color="gray60", style="solid"];
  "gateway.inbound_validate" -> "butler.gateway.inbound_validate_ops" [color="gray60", style="solid"];
  "gateway.inbound_validate" -> "butler.utilities.env_parse" [color="gray60", style="solid"];
  "gateway.inbound_validate_ops" -> "butler.core.best_effort" [color="gray60", style="solid"];
  "gateway.inbound_validate_ops" -> "butler.core.message_ir" [color="gray60", style="solid"];
  "gateway.item_event_sink" -> "butler.gateway.item_event_sink_ops" [color="gray60", style="solid"];
  "gateway.item_event_sink" -> "butler.gateway.outbound_events" [color="gray60", style="solid"];
  "gateway.item_event_sink_ops" -> "butler.core.best_effort" [color="gray60", style="solid"];
  "gateway.item_events" -> "butler.gateway.item_events_ops" [color="gray60", style="solid"];
  "gateway.item_events" -> "butler.gateway.outbound_events" [color="gray60", style="solid"];
  "gateway.item_events_ops" -> "butler.core.best_effort" [color="gray60", style="solid"];
  "gateway.item_events_ops" -> "butler.gateway.item_event_sink" [color="gray60", style="solid"];
  "gateway.locked_phase_registry" -> "butler.gateway.gateway_transcript" [color="gray60", style="solid"];
  "gateway.locked_phase_registry" -> "butler.gateway.locked_phases" [color="gray60", style="solid"];
  "gateway.locked_phase_registry" -> "butler.gateway.message_handler" [color="gray60", style="solid"];
  "gateway.locked_phases" -> "butler.gateway.locked_phases.__init__" [color="gray60", style="solid"];
  "gateway.locked_phases.augment_phase" -> "butler.core.best_effort" [color="gray60", style="solid"];
  "gateway.locked_phases.augment_phase" -> "butler.core.hook_context_adapter" [color="gray60", style="solid"];
  "gateway.locked_phases.augment_phase" -> "butler.core.intent_keywords" [color="gray60", style="solid"];
  "gateway.locked_phases.augment_phase" -> "butler.core.mode_classifier" [color="gray60", style="solid"];
  "gateway.locked_phases.augment_phase" -> "butler.core.session_recall_intent" [color="gray60", style="solid"];
  "gateway.locked_phases.augment_phase" -> "butler.core.task_route_hints" [color="gray60", style="solid"];
  "gateway.locked_phases.augment_phase" -> "butler.gateway.hooks" [color="gray60", style="solid"];
  "gateway.locked_phases.augment_phase" -> "butler.gateway.message_handler" [color="gray60", style="solid"];
  "gateway.locked_phases.error_phase" -> "butler.gateway.locked_phases_ops" [color="gray60", style="solid"];
  "gateway.locked_phases.execute_phase" -> "butler.core.best_effort" [color="gray60", style="solid"];
  "gateway.locked_phases.execute_phase" -> "butler.core.goal_loop" [color="gray60", style="solid"];
  "gateway.locked_phases.execute_phase" -> "butler.core.loop_types" [color="gray60", style="solid"];
  "gateway.locked_phases.execute_phase" -> "butler.core.todo_continuation" [color="gray60", style="solid"];
  "gateway.locked_phases.execute_phase" -> "butler.execution_context" [color="gray60", style="solid"];
  "gateway.locked_phases.finalize_phase" -> "butler.core.auto_continue" [color="gray60", style="solid"];
  "gateway.locked_phases.finalize_phase" -> "butler.core.best_effort" [color="gray60", style="solid"];
  "gateway.locked_phases.finalize_phase" -> "butler.core.compaction_status" [color="gray60", style="solid"];
  "gateway.locked_phases.finalize_phase" -> "butler.core.loop_types" [color="gray60", style="solid"];
  "gateway.locked_phases.finalize_phase" -> "butler.core.memory_source_surface" [color="gray60", style="solid"];
  "gateway.locked_phases.finalize_phase" -> "butler.core.transform_feedback" [color="gray60", style="solid"];
  "gateway.locked_phases.finalize_phase" -> "butler.gateway.message_handler" [color="gray60", style="solid"];
  "gateway.locked_phases.finalize_phase" -> "butler.memory.memory_metrics" [color="gray60", style="solid"];
  "gateway.locked_phases.finalize_phase" -> "butler.memory.metrics_persist" [color="gray60", style="solid"];
  "gateway.locked_phases.finalize_phase" -> "butler.memory.prefetch_retrieval_metrics" [color="gray60", style="solid"];
  "gateway.locked_phases.finalize_phase" -> "butler.ops" [color="gray60", style="solid"];
  "gateway.locked_phases.finalize_phase" -> "butler.ops.eval_turn" [color="gray60", style="solid"];
  "gateway.locked_phases.finalize_phase" -> "butler.session.lifecycle" [color="gray60", style="solid"];
  "gateway.locked_phases.format_phase" -> "butler.core.best_effort" [color="gray60", style="solid"];
  "gateway.locked_phases.format_phase" -> "butler.core.memory_recap_line" [color="gray60", style="solid"];
  "gateway.locked_phases.format_phase" -> "butler.core.session_hydration" [color="gray60", style="solid"];
  "gateway.locked_phases.format_phase" -> "butler.core.turn_summary_line" [color="gray60", style="solid"];
  "gateway.locked_phases.format_phase" -> "butler.gateway.item_event_sink" [color="gray60", style="solid"];
  "gateway.locked_phases.format_phase" -> "butler.gateway.message_handler" [color="gray60", style="solid"];
  "gateway.locked_phases.format_phase" -> "butler.gateway.outbound_bridge" [color="gray60", style="solid"];
  "gateway.locked_phases.format_phase" -> "butler.ops" [color="gray60", style="solid"];
  "gateway.locked_phases.hooks_phase" -> "butler.hooks.runner" [color="gray60", style="solid"];
  "gateway.locked_phases.init_phase" -> "butler.core.best_effort" [color="gray60", style="solid"];
  "gateway.locked_phases.init_phase" -> "butler.gateway.message_handler" [color="gray60", style="solid"];
  "gateway.locked_phases.init_phase" -> "butler.memory.memory_metrics" [color="gray60", style="solid"];
  "gateway.locked_phases.init_phase" -> "butler.memory.metrics_persist" [color="gray60", style="solid"];
  "gateway.locked_phases.init_phase" -> "butler.plan.mode" [color="gray60", style="solid"];
  "gateway.locked_phases.init_phase" -> "butler.project.lead" [color="gray60", style="solid"];
  "gateway.locked_phases.normalizer_phase" -> "butler.core.best_effort" [color="gray60", style="solid"];
  "gateway.locked_phases.normalizer_phase" -> "butler.core.correction_intent" [color="gray60", style="solid"];
  "gateway.locked_phases.normalizer_phase" -> "butler.gateway.message_handler" [color="gray60", style="solid"];
  "gateway.locked_phases.normalizer_phase" -> "butler.mcp.github_grounding" [color="gray60", style="solid"];
  "gateway.locked_phases.state" -> "butler.core.agent_loop.loop" [color="gray60", style="solid"];
  "gateway.locked_phases.state" -> "butler.core.best_effort" [color="gray60", style="solid"];
  "gateway.locked_phases.state" -> "butler.core.loop_types" [color="gray60", style="solid"];
  "gateway.locked_phases.state" -> "butler.gateway.handler_helpers" [color="gray60", style="solid"];
  "gateway.locked_phases.validation_phase" -> "butler.core.best_effort" [color="gray60", style="solid"];
  "gateway.locked_phases.validation_phase" -> "butler.core.loop_types" [color="gray60", style="solid"];
  "gateway.locked_phases.validation_phase" -> "butler.core.model_context" [color="gray60", style="solid"];
  "gateway.locked_phases.validation_phase" -> "butler.core.tool_pair_repair" [color="gray60", style="solid"];
  "gateway.locked_phases.validation_phase" -> "butler.core.turn_token_budget" [color="gray60", style="solid"];
  "gateway.locked_phases.validation_phase" -> "butler.gateway.handler_helpers" [color="gray60", style="solid"];
  "gateway.locked_phases.validation_phase" -> "butler.gateway.inbound_validate" [color="gray60", style="solid"];
  "gateway.locked_phases.validation_phase" -> "butler.gateway.locked_phases_ops" [color="gray60", style="solid"];
  "gateway.locked_phases.validation_phase" -> "butler.gateway.message_handler" [color="gray60", style="solid"];
  "gateway.locked_phases.validation_phase" -> "butler.ops" [color="gray60", style="solid"];
  "gateway.locked_phases.validation_phase" -> "butler.session.lifecycle" [color="gray60", style="solid"];
  "gateway.locked_phases_ops" -> "butler.core.best_effort" [color="gray60", style="solid"];
  "gateway.locked_phases_ops" -> "butler.gateway.error_cards" [color="gray60", style="solid"];
  "gateway.locked_turn_orchestrator" -> "butler.execution_context" [color="gray60", style="solid"];
  "gateway.locked_turn_orchestrator" -> "butler.gateway.handler_helpers" [color="gray60", style="solid"];
  "gateway.locked_turn_orchestrator" -> "butler.gateway.locked_phase_registry" [color="gray60", style="solid"];
  "gateway.locked_turn_orchestrator" -> "butler.gateway.locked_phases" [color="gray60", style="solid"];
  "gateway.locked_turn_orchestrator" -> "butler.gateway.locked_turn_orchestrator_ops" [color="gray60", style="solid"];
  "gateway.locked_turn_orchestrator" -> "butler.gateway.message_handler" [color="gray60", style="solid"];
  "gateway.locked_turn_orchestrator" -> "butler.gateway.owner_delegate_shortcuts" [color="gray60", style="solid"];
  "gateway.locked_turn_orchestrator" -> "butler.gateway.owner_ingest_shortcuts" [color="gray60", style="solid"];
  "gateway.locked_turn_orchestrator_ops" -> "butler.gateway.locked_phase_registry" [color="gray60", style="solid"];
  "gateway.locked_turn_orchestrator_ops" -> "butler.gateway.locked_phases" [color="gray60", style="solid"];
  "gateway.locked_turn_orchestrator_ops" -> "butler.gateway.user_errors" [color="gray60", style="solid"];
  "gateway.media_diagnostic_ops" -> "butler.configuration.gateway" [color="gray60", style="solid"];
  "gateway.media_diagnostic_ops" -> "butler.core.best_effort" [color="gray60", style="solid"];
  "gateway.media_diagnostic_ops" -> "butler.gateway.inbound_media" [color="gray60", style="solid"];
  "gateway.media_diagnostic_ops" -> "butler.gateway.media_telemetry" [color="gray60", style="solid"];
  "gateway.media_telemetry" -> "butler.configuration.settings" [color="gray60", style="solid"];
  "gateway.media_telemetry" -> "butler.gateway.media_telemetry_ops" [color="gray60", style="solid"];
  "gateway.media_telemetry_ops" -> "butler.core.best_effort" [color="gray60", style="solid"];
  "gateway.message_handler" -> "butler.core.agent_loop.loop" [color="gray60", style="solid"];
  "gateway.message_handler" -> "butler.core.loop_types" [color="gray60", style="solid"];
  "gateway.message_handler" -> "butler.defaults.env_defaults" [color="gray60", style="solid"];
  "gateway.message_handler" -> "butler.gateway.delegate_push_dedup" [color="gray60", style="solid"];
  "gateway.message_handler" -> "butler.gateway.handler_commands" [color="gray60", style="solid"];
  "gateway.message_handler" -> "butler.gateway.handler_helpers" [color="gray60", style="solid"];
  "gateway.message_handler" -> "butler.gateway.inbound_drain" [color="gray60", style="solid"];
  "gateway.message_handler" -> "butler.gateway.inbound_pipeline" [color="gray60", style="solid"];
  "gateway.message_handler" -> "butler.gateway.locked_turn_orchestrator" [color="gray60", style="solid"];
  "gateway.message_handler" -> "butler.gateway.message_handler_ops" [color="gray60", style="solid"];
  "gateway.message_handler" -> "butler.gateway.message_pipelines" [color="gray60", style="solid"];
  "gateway.message_handler" -> "butler.gateway.session_loop_factory" [color="gray60", style="solid"];
  "gateway.message_handler" -> "butler.gateway.session_registry" [color="gray60", style="solid"];
  "gateway.message_handler" -> "butler.gateway.turn_post_pipeline" [color="gray60", style="solid"];
  "gateway.message_handler" -> "butler.orchestrator" [color="gray60", style="solid"];
  "gateway.message_handler" -> "butler.resilience.message_queue" [color="gray60", style="solid"];
  "gateway.message_handler" -> "butler.session.keys" [color="gray60", style="solid"];
  "gateway.message_handler" -> "butler.session.lifecycle" [color="gray60", style="solid"];
  "gateway.message_handler" -> "butler.utilities.env_parse" [color="gray60", style="solid"];
  "gateway.message_handler_ops" -> "butler.core.best_effort" [color="gray60", style="solid"];
  "gateway.message_handler_ops" -> "butler.runtime.delegate_registry" [color="gray60", style="solid"];
  "gateway.message_pipelines" -> "butler.core.best_effort" [color="gray60", style="solid"];
  "gateway.message_pipelines" -> "butler.core.message_ir" [color="gray60", style="solid"];
  "gateway.message_pipelines" -> "butler.core.session_transcript" [color="gray60", style="solid"];
  "gateway.message_pipelines" -> "butler.core.steer" [color="gray60", style="solid"];
  "gateway.message_pipelines" -> "butler.core.two_phase_confirm" [color="gray60", style="solid"];
  "gateway.message_pipelines" -> "butler.gateway.bot_loop_guard" [color="gray60", style="solid"];
  "gateway.message_pipelines" -> "butler.gateway.handler_helpers" [color="gray60", style="solid"];
  "gateway.message_pipelines" -> "butler.gateway.hooks" [color="gray60", style="solid"];
  "gateway.message_pipelines" -> "butler.gateway.message_handler" [color="gray60", style="solid"];
  "gateway.message_pipelines" -> "butler.gateway.message_pipelines_fail_closed" [color="gray60", style="solid"];
  "gateway.message_pipelines" -> "butler.gateway.owner_gate" [color="gray60", style="solid"];
  "gateway.message_pipelines" -> "butler.gateway.queue_settings" [color="gray60", style="solid"];
  "gateway.message_pipelines" -> "butler.gateway.reply_admission" [color="gray60", style="solid"];
  "gateway.message_pipelines" -> "butler.gateway.session_lifecycle" [color="gray60", style="solid"];
  "gateway.message_pipelines" -> "butler.mcp.profiles" [color="gray60", style="solid"];
  "gateway.message_pipelines" -> "butler.resilience.inbound_idempotency" [color="gray60", style="solid"];
  "gateway.message_pipelines" -> "butler.resilience.message_queue" [color="gray60", style="solid"];
  "gateway.message_pipelines" -> "butler.session.keys" [color="gray60", style="solid"];
  "gateway.message_pipelines" -> "butler.skills.similarity" [color="gray60", style="solid"];
  "gateway.message_pipelines_fail_closed" -> "butler.core.io_guardrail" [color="gray60", style="solid"];
  "gateway.message_pipelines_fail_closed" -> "butler.gateway.message_pipelines_fail_closed_ops" [color="gray60", style="solid"];
  "gateway.message_pipelines_fail_closed" -> "butler.gateway.owner_gate" [color="gray60", style="solid"];
  "gateway.message_pipelines_fail_closed" -> "butler.memory.injection_guard" [color="gray60", style="solid"];
  "gateway.message_pipelines_fail_closed" -> "butler.memory.injection_llm_score" [color="gray60", style="solid"];
  "gateway.message_pipelines_fail_closed" -> "butler.permissions.human_gate" [color="gray60", style="solid"];
  "gateway.message_queue" -> "butler.resilience.message_queue" [color="gray60", style="solid"];
  "gateway.message_queue_ops" -> "butler.resilience.message_queue_ops" [color="gray60", style="solid"];
  "gateway.minimax_image_gen" -> "butler.transport.multimodal.minimax_image_gen" [color="gray60", style="solid"];
  "gateway.minimax_tts" -> "butler.transport.multimodal.minimax_tts" [color="gray60", style="solid"];
  "gateway.minimax_vlm" -> "butler.configuration.gateway" [color="gray60", style="solid"];
  "gateway.minimax_vlm" -> "butler.defaults.model_defaults" [color="gray60", style="solid"];
  "gateway.minimax_vlm" -> "butler.gateway.media_telemetry" [color="gray60", style="solid"];
  "gateway.minimax_vlm" -> "butler.gateway.minimax_vlm_ops" [color="gray60", style="solid"];
  "gateway.minimax_vlm" -> "butler.gateway.vision_fallback" [color="gray60", style="solid"];
  "gateway.network_route_verify_runner" -> "butler.gateway.message_handler" [color="gray60", style="solid"];
  "gateway.network_route_verify_runner" -> "butler.gateway.network_route_verify_runner_ops" [color="gray60", style="solid"];
  "gateway.network_route_verify_runner" -> "butler.tools.network_route_verify" [color="gray60", style="solid"];
  "gateway.network_route_verify_runner_ops" -> "butler.gateway.wechat_scenario_sim" [color="gray60", style="solid"];
  "gateway.network_route_verify_runner_ops" -> "butler.tools.network_route_verify" [color="gray60", style="solid"];
  "gateway.outbound_bridge" -> "butler.contracts.completion_ports" [color="gray60", style="solid"];
  "gateway.outbound_bridge" -> "butler.contracts.completion_registry" [color="gray60", style="solid"];
  "gateway.outbound_bridge" -> "butler.core.best_effort" [color="gray60", style="solid"];
  "gateway.outbound_bridge" -> "butler.core.loop_callbacks_merge" [color="gray60", style="solid"];
  "gateway.outbound_bridge" -> "butler.defaults.env_defaults" [color="gray60", style="solid"];
  "gateway.outbound_bridge" -> "butler.gateway.completion_policy" [color="gray60", style="solid"];
  "gateway.outbound_bridge" -> "butler.gateway.item_event_sink" [color="gray60", style="solid"];
  "gateway.outbound_bridge" -> "butler.gateway.outbound_bridge_ops" [color="gray60", style="solid"];
  "gateway.outbound_bridge" -> "butler.gateway.outbound_events" [color="gray60", style="solid"];
  "gateway.outbound_bridge" -> "butler.gateway.pii_scrub" [color="gray60", style="solid"];
  "gateway.outbound_bridge" -> "butler.gateway.progressive_stream" [color="gray60", style="solid"];
  "gateway.outbound_bridge" -> "butler.gateway.task_milestone" [color="gray60", style="solid"];
  "gateway.outbound_bridge" -> "butler.utilities.env_parse" [color="gray60", style="solid"];
  "gateway.outbound_bridge_ops" -> "butler.core.best_effort" [color="gray60", style="solid"];
  "gateway.outbound_bridge_ops" -> "butler.gateway.task_milestone" [color="gray60", style="solid"];
  "gateway.outbound_delay" -> "butler.utilities.env_parse" [color="gray60", style="solid"];
  "gateway.outbound_files" -> "butler.configuration.settings" [color="gray60", style="solid"];
  "gateway.outbound_files" -> "butler.defaults.env_defaults" [color="gray60", style="solid"];
  "gateway.outbound_files" -> "butler.utilities.env_parse" [color="gray60", style="solid"];
  "gateway.outbound_prefs" -> "butler.gateway.outbound_prefs_ops" [color="gray60", style="solid"];
  "gateway.outbound_prefs_ops" -> "butler.core.best_effort" [color="gray60", style="solid"];
  "gateway.outbound_prefs_ops" -> "butler.execution_context" [color="gray60", style="solid"];
  "gateway.owner_delegate_shortcuts" -> "butler.gateway.owner_delegate_shortcuts_ops" [color="gray60", style="solid"];
  "gateway.owner_delegate_shortcuts_ops" -> "butler.core.best_effort" [color="gray60", style="solid"];
  "gateway.owner_delegate_shortcuts_ops" -> "butler.core.session_tool_index" [color="gray60", style="solid"];
  "gateway.owner_delegate_shortcuts_ops" -> "butler.runtime.cc_bridge" [color="gray60", style="solid"];
  "gateway.owner_gate" -> "butler.defaults.env_defaults" [color="gray60", style="solid"];
  "gateway.owner_gate" -> "butler.session.keys" [color="gray60", style="solid"];
  "gateway.owner_gate" -> "butler.utilities.env_parse" [color="gray60", style="solid"];
  "gateway.owner_ingest_shortcuts" -> "butler.delegate.owner_ingest_shortcuts" [color="gray60", style="solid"];
  "gateway.owner_surface" -> "butler.defaults.env_defaults" [color="gray60", style="solid"];
  "gateway.owner_surface" -> "butler.gateway.commands.help_handlers" [color="gray60", style="solid"];
  "gateway.owner_surface" -> "butler.gateway.owner_surface_ops" [color="gray60", style="solid"];
  "gateway.owner_surface" -> "butler.ops.butler_inbox" [color="gray60", style="solid"];
  "gateway.owner_surface" -> "butler.project.lead" [color="gray60", style="solid"];
  "gateway.owner_surface" -> "butler.project.meta" [color="gray60", style="solid"];
  "gateway.owner_surface_ops" -> "butler.core.best_effort" [color="gray60", style="solid"];
  "gateway.owner_surface_ops" -> "butler.gateway.completion_telemetry" [color="gray60", style="solid"];
  "gateway.owner_surface_ops" -> "butler.gateway.owner_surface" [color="gray60", style="solid"];
  "gateway.owner_surface_ops" -> "butler.ops.butler_inbox_ops" [color="gray60", style="solid"];
  "gateway.owner_surface_ops" -> "butler.ops.degradation_registry" [color="gray60", style="solid"];
  "gateway.owner_surface_ops" -> "butler.resilience.durable_outbox" [color="gray60", style="solid"];
  "gateway.owner_surface_ops" -> "butler.runtime.task_store" [color="gray60", style="solid"];
  "gateway.pii_scrub" -> "butler.gateway.pii_scrub_ops" [color="gray60", style="solid"];
  "gateway.pii_scrub" -> "butler.utilities.env_parse" [color="gray60", style="solid"];
  "gateway.pii_scrub_ops" -> "butler.core.best_effort" [color="gray60", style="solid"];
  "gateway.pii_scrub_ops" -> "butler.gateway.internal_leak_scrub" [color="gray60", style="solid"];
  "gateway.platforms" -> "butler.gateway.platforms.wechat" [color="gray60", style="solid"];
  "gateway.platforms.base" -> "butler.gateway.outbound_bridge" [color="gray60", style="solid"];
  "gateway.platforms.base" -> "butler.gateway.platforms.base_ops" [color="gray60", style="solid"];
  "gateway.platforms.base" -> "butler.gateway.platforms.types" [color="gray60", style="solid"];
  "gateway.platforms.base_ops" -> "butler.core.best_effort" [color="gray60", style="solid"];
  "gateway.platforms.base_ops" -> "butler.gateway.platforms.types" [color="gray60", style="solid"];
  "gateway.platforms.base_ops" -> "butler.gateway.user_errors" [color="gray60", style="solid"];
  "gateway.platforms.helpers" -> "butler.io.atomic_write" [color="gray60", style="solid"];
  "gateway.platforms.http.adapter" -> "butler.gateway.message_handler" [color="gray60", style="solid"];
  "gateway.platforms.wechat" -> "butler.gateway.platforms.wechat_ilink" [color="gray60", style="solid"];
  "gateway.platforms.wechat_format" -> "butler.core.text_truncate" [color="gray60", style="solid"];
  "gateway.platforms.wechat_ilink" -> "butler.gateway.platforms.wechat_ilink" [color="gray60", style="solid"];
  "gateway.platforms.wechat_ilink" -> "butler.gateway.platforms.wechat_ilink.adapter" [color="gray60", style="solid"];
  "gateway.platforms.wechat_ilink" -> "butler.gateway.platforms.wechat_ilink.direct" [color="gray60", style="solid"];
  "gateway.platforms.wechat_ilink" -> "butler.gateway.platforms.wechat_ilink.qr_login" [color="gray60", style="solid"];
  "gateway.platforms.wechat_ilink._compat" -> "butler.gateway.platforms.wechat_format" [color="gray60", style="solid"];
  "gateway.platforms.wechat_ilink._compat" -> "butler.gateway.platforms.wechat_ilink._utils_legacy" [color="gray60", style="solid"];
  "gateway.platforms.wechat_ilink._compat" -> "butler.gateway.platforms.wechat_ilink.constants" [color="gray60", style="solid"];
  "gateway.platforms.wechat_ilink._compat" -> "butler.gateway.platforms.wechat_ilink.registry" [color="gray60", style="solid"];
  "gateway.platforms.wechat_ilink._compat" -> "butler.gateway.platforms.wechat_ilink.transport" [color="gray60", style="solid"];
  "gateway.platforms.wechat_ilink._utils_legacy" -> "butler.gateway.platforms.helpers" [color="gray60", style="solid"];
  "gateway.platforms.wechat_ilink._utils_legacy" -> "butler.gateway.platforms.types" [color="gray60", style="solid"];
  "gateway.platforms.wechat_ilink._utils_legacy" -> "butler.gateway.platforms.wechat_ilink._utils_legacy_ops" [color="gray60", style="solid"];
  "gateway.platforms.wechat_ilink._utils_legacy" -> "butler.gateway.platforms.wechat_ilink.constants" [color="gray60", style="solid"];
  "gateway.platforms.wechat_ilink._utils_legacy" -> "butler.utilities.env_parse" [color="gray60", style="solid"];
  "gateway.platforms.wechat_ilink.account" -> "butler.gateway.platforms.wechat_ilink._utils_legacy" [color="gray60", style="solid"];
  "gateway.platforms.wechat_ilink.adapter" -> "butler.configuration.settings" [color="gray60", style="solid"];
  "gateway.platforms.wechat_ilink.adapter" -> "butler.gateway.outbound_files" [color="gray60", style="solid"];
  "gateway.platforms.wechat_ilink.adapter" -> "butler.gateway.pii_scrub" [color="gray60", style="solid"];
  "gateway.platforms.wechat_ilink.adapter" -> "butler.gateway.platforms.base" [color="gray60", style="solid"];
  "gateway.platforms.wechat_ilink.adapter" -> "butler.gateway.platforms.types" [color="gray60", style="solid"];
  "gateway.platforms.wechat_ilink.adapter" -> "butler.gateway.platforms.wechat_ilink" [color="gray60", style="solid"];
  "gateway.platforms.wechat_ilink.adapter" -> "butler.gateway.platforms.wechat_ilink._compat" [color="gray60", style="solid"];
  "gateway.platforms.wechat_ilink.adapter" -> "butler.gateway.platforms.wechat_ilink_phases" [color="gray60", style="solid"];
  "gateway.platforms.wechat_ilink.adapter_inbound" -> "butler.gateway.platforms.wechat_ilink" [color="gray60", style="solid"];
  "gateway.platforms.wechat_ilink.adapter_inbound" -> "butler.gateway.platforms.wechat_ilink.adapter" [color="gray60", style="solid"];
  "gateway.platforms.wechat_ilink.adapter_inbound" -> "butler.gateway.platforms.wechat_ilink.adapter_inbound_ops" [color="gray60", style="solid"];
  "gateway.platforms.wechat_ilink.adapter_inbound" -> "butler.gateway.platforms.wechat_ilink.constants" [color="gray60", style="solid"];
  "gateway.platforms.wechat_ilink.adapter_inbound" -> "butler.gateway.platforms.wechat_ilink.phases" [color="gray60", style="solid"];
  "gateway.platforms.wechat_ilink.adapter_inbound_ops" -> "butler.gateway.platforms.wechat_ilink" [color="gray60", style="solid"];
  "gateway.platforms.wechat_ilink.adapter_inbound_ops" -> "butler.gateway.platforms.wechat_ilink.adapter" [color="gray60", style="solid"];
  "gateway.platforms.wechat_ilink.adapter_lifecycle" -> "butler.gateway.platforms.wechat_ilink._compat" [color="gray60", style="solid"];
  "gateway.platforms.wechat_ilink.adapter_lifecycle" -> "butler.gateway.platforms.wechat_ilink.adapter" [color="gray60", style="solid"];
  "gateway.platforms.wechat_ilink.adapter_lifecycle" -> "butler.gateway.platforms.wechat_ilink.adapter_lifecycle_ops" [color="gray60", style="solid"];
  "gateway.platforms.wechat_ilink.adapter_lifecycle" -> "butler.gateway.platforms.wechat_ilink_phases" [color="gray60", style="solid"];
  "gateway.platforms.wechat_ilink.adapter_lifecycle_ops" -> "butler.gateway.platforms.wechat_ilink.adapter" [color="gray60", style="solid"];
  "gateway.platforms.wechat_ilink.adapter_media" -> "butler.gateway.platforms.wechat_ilink" [color="gray60", style="solid"];
  "gateway.platforms.wechat_ilink.adapter_media" -> "butler.gateway.platforms.wechat_ilink.adapter" [color="gray60", style="solid"];
  "gateway.platforms.wechat_ilink.adapter_media" -> "butler.gateway.platforms.wechat_ilink.adapter_media_ops" [color="gray60", style="solid"];
  "gateway.platforms.wechat_ilink.adapter_media" -> "butler.gateway.platforms.wechat_ilink.constants" [color="gray60", style="solid"];
  "gateway.platforms.wechat_ilink.adapter_media" -> "butler.registry.url_safety" [color="gray60", style="solid"];
  "gateway.platforms.wechat_ilink.adapter_media_ops" -> "butler.gateway.platforms.wechat_ilink.adapter" [color="gray60", style="solid"];
  "gateway.platforms.wechat_ilink.adapter_outbound" -> "butler.defaults.env_defaults" [color="gray60", style="solid"];
  "gateway.platforms.wechat_ilink.adapter_outbound" -> "butler.gateway.outbound_prefs" [color="gray60", style="solid"];
  "gateway.platforms.wechat_ilink.adapter_outbound" -> "butler.gateway.platforms.types" [color="gray60", style="solid"];
  "gateway.platforms.wechat_ilink.adapter_outbound" -> "butler.gateway.platforms.wechat_ilink" [color="gray60", style="solid"];
  "gateway.platforms.wechat_ilink.adapter_outbound" -> "butler.gateway.platforms.wechat_ilink.adapter" [color="gray60", style="solid"];
  "gateway.platforms.wechat_ilink.adapter_outbound" -> "butler.gateway.platforms.wechat_ilink.adapter_media" [color="gray60", style="solid"];
  "gateway.platforms.wechat_ilink.adapter_outbound" -> "butler.gateway.platforms.wechat_ilink.adapter_outbound_ops" [color="gray60", style="solid"];
  "gateway.platforms.wechat_ilink.adapter_outbound" -> "butler.gateway.platforms.wechat_ilink.constants" [color="gray60", style="solid"];
  "gateway.platforms.wechat_ilink.adapter_outbound" -> "butler.gateway.platforms.wechat_ilink_phases" [color="gray60", style="solid"];
  "gateway.platforms.wechat_ilink.adapter_outbound" -> "butler.utilities.env_parse" [color="gray60", style="solid"];
  "gateway.platforms.wechat_ilink.adapter_outbound_ops" -> "butler.core.best_effort" [color="gray60", style="solid"];
  "gateway.platforms.wechat_ilink.adapter_outbound_ops" -> "butler.defaults.env_defaults" [color="gray60", style="solid"];
  "gateway.platforms.wechat_ilink.adapter_outbound_ops" -> "butler.gateway.platforms.types" [color="gray60", style="solid"];
  "gateway.platforms.wechat_ilink.adapter_outbound_ops" -> "butler.gateway.platforms.wechat_ilink" [color="gray60", style="solid"];
  "gateway.platforms.wechat_ilink.adapter_outbound_ops" -> "butler.gateway.platforms.wechat_ilink.adapter" [color="gray60", style="solid"];
  "gateway.platforms.wechat_ilink.adapter_outbound_ops" -> "butler.gateway.platforms.wechat_ilink_phases" [color="gray60", style="solid"];
  "gateway.platforms.wechat_ilink.adapter_outbound_ops" -> "butler.utilities.env_parse" [color="gray60", style="solid"];
  "gateway.platforms.wechat_ilink.connect_phases" -> "butler.gateway.platforms.wechat_ilink" [color="gray60", style="solid"];
  "gateway.platforms.wechat_ilink.connect_phases" -> "butler.gateway.platforms.wechat_ilink.connect_phases_ops" [color="gray60", style="solid"];
  "gateway.platforms.wechat_ilink.connect_phases" -> "butler.gateway.platforms.wechat_ilink.registry" [color="gray60", style="solid"];
  "gateway.platforms.wechat_ilink.connect_phases_ops" -> "butler.core.best_effort" [color="gray60", style="solid"];
  "gateway.platforms.wechat_ilink.connect_phases_ops" -> "butler.gateway.platforms.wechat_ilink" [color="gray60", style="solid"];
  "gateway.platforms.wechat_ilink.crypto" -> "butler.gateway.platforms.wechat_ilink._utils_legacy" [color="gray60", style="solid"];
  "gateway.platforms.wechat_ilink.direct" -> "butler.configuration.settings" [color="gray60", style="solid"];
  "gateway.platforms.wechat_ilink.direct" -> "butler.gateway.platforms.types" [color="gray60", style="solid"];
  "gateway.platforms.wechat_ilink.direct" -> "butler.gateway.platforms.wechat_ilink" [color="gray60", style="solid"];
  "gateway.platforms.wechat_ilink.direct" -> "butler.gateway.platforms.wechat_ilink._compat" [color="gray60", style="solid"];
  "gateway.platforms.wechat_ilink.media" -> "butler.gateway.platforms.wechat_ilink._utils_legacy" [color="gray60", style="solid"];
  "gateway.platforms.wechat_ilink.phases" -> "butler.gateway.platforms.helpers" [color="gray60", style="solid"];
  "gateway.platforms.wechat_ilink.phases" -> "butler.gateway.platforms.types" [color="gray60", style="solid"];
  "gateway.platforms.wechat_ilink.phases" -> "butler.gateway.platforms.wechat_ilink" [color="gray60", style="solid"];
  "gateway.platforms.wechat_ilink.phases" -> "butler.gateway.platforms.wechat_ilink.connect_phases" [color="gray60", style="solid"];
  "gateway.platforms.wechat_ilink.phases" -> "butler.gateway.platforms.wechat_ilink.poll_phases" [color="gray60", style="solid"];
  "gateway.platforms.wechat_ilink.phases" -> "butler.gateway.platforms.wechat_ilink.qr_phases" [color="gray60", style="solid"];
  "gateway.platforms.wechat_ilink.phases" -> "butler.gateway.platforms.wechat_ilink.send_phases" [color="gray60", style="solid"];
  "gateway.platforms.wechat_ilink.poll_phases" -> "butler.gateway.platforms.wechat_ilink" [color="gray60", style="solid"];
  "gateway.platforms.wechat_ilink.qr_login" -> "butler.gateway.platforms.wechat_ilink._compat" [color="gray60", style="solid"];
  "gateway.platforms.wechat_ilink.qr_login" -> "butler.gateway.platforms.wechat_ilink_phases" [color="gray60", style="solid"];
  "gateway.platforms.wechat_ilink.qr_phases" -> "butler.gateway.platforms.wechat_ilink" [color="gray60", style="solid"];
  "gateway.platforms.wechat_ilink.qr_phases" -> "butler.gateway.platforms.wechat_ilink.qr_phases_ops" [color="gray60", style="solid"];
  "gateway.platforms.wechat_ilink.send_phases" -> "butler.gateway.outbound_delay" [color="gray60", style="solid"];
  "gateway.platforms.wechat_ilink.send_phases" -> "butler.gateway.platforms.wechat_ilink" [color="gray60", style="solid"];
  "gateway.platforms.wechat_ilink.send_phases" -> "butler.gateway.platforms.wechat_ilink.send_phases_ops" [color="gray60", style="solid"];
  "gateway.platforms.wechat_ilink.send_phases_ops" -> "butler.core.best_effort" [color="gray60", style="solid"];
  "gateway.platforms.wechat_ilink.send_phases_ops" -> "butler.gateway.platforms.wechat_ilink" [color="gray60", style="solid"];
  "gateway.platforms.wechat_ilink.transport" -> "butler.gateway.platforms.wechat_ilink._utils_legacy" [color="gray60", style="solid"];
  "gateway.platforms.wechat_ilink.transport" -> "butler.gateway.platforms.wechat_ilink.constants" [color="gray60", style="solid"];
  "gateway.progressive_stream" -> "butler.defaults.env_defaults" [color="gray60", style="solid"];
  "gateway.progressive_stream" -> "butler.utilities.env_parse" [color="gray60", style="solid"];
  "gateway.queue_settings" -> "butler.configuration.gateway" [color="gray60", style="solid"];
  "gateway.queue_settings" -> "butler.configuration.settings" [color="gray60", style="solid"];
  "gateway.queue_settings" -> "butler.gateway.queue_settings_ops" [color="gray60", style="solid"];
  "gateway.reply_admission" -> "butler.utilities.env_parse" [color="gray60", style="solid"];
  "gateway.runner" -> "butler.defaults.env_defaults" [color="gray60", style="solid"];
  "gateway.runner" -> "butler.gateway" [color="gray60", style="solid"];
  "gateway.runner" -> "butler.gateway.events_sink" [color="gray60", style="solid"];
  "gateway.runner" -> "butler.gateway.gateway_contracts" [color="gray60", style="solid"];
  "gateway.runner" -> "butler.gateway.inbound_media" [color="gray60", style="solid"];
  "gateway.runner" -> "butler.gateway.message_handler" [color="gray60", style="solid"];
  "gateway.runner" -> "butler.gateway.outbound_bridge" [color="gray60", style="solid"];
  "gateway.runner" -> "butler.gateway.platform_policy" [color="gray60", style="solid"];
  "gateway.runner" -> "butler.gateway.platforms.types" [color="gray60", style="solid"];
  "gateway.runner" -> "butler.gateway.platforms.wechat" [color="gray60", style="solid"];
  "gateway.runner" -> "butler.gateway.runner_ops" [color="gray60", style="solid"];
  "gateway.runner" -> "butler.gateway.singleton_lock" [color="gray60", style="solid"];
  "gateway.runner" -> "butler.ops.runtime_metrics_sink" [color="gray60", style="solid"];
  "gateway.runner" -> "butler.utilities.env_parse" [color="gray60", style="solid"];
  "gateway.runner" -> "butler.utilities.logging_config" [color="gray60", style="solid"];
  "gateway.runner_ops" -> "butler.core.best_effort" [color="gray60", style="solid"];
  "gateway.runner_ops" -> "butler.defaults.env_defaults" [color="gray60", style="solid"];
  "gateway.runner_ops" -> "butler.mcp.async_runner" [color="gray60", style="solid"];
  "gateway.runner_ops" -> "butler.memory.semantic_index" [color="gray60", style="solid"];
  "gateway.runner_ops" -> "butler.ops.degradation_registry" [color="gray60", style="solid"];
  "gateway.runner_ops" -> "butler.resilience.durable_outbox" [color="gray60", style="solid"];
  "gateway.runner_ops" -> "butler.resilience.message_queue" [color="gray60", style="solid"];
  "gateway.runner_ops" -> "butler.skills.similarity" [color="gray60", style="solid"];
  "gateway.runner_ops" -> "butler.tools.reminder" [color="gray60", style="solid"];
  "gateway.session_lifecycle" -> "butler.defaults.env_defaults" [color="gray60", style="solid"];
  "gateway.session_lifecycle" -> "butler.utilities.env_parse" [color="gray60", style="solid"];
  "gateway.session_loop_factory" -> "butler.core.agent_loop.loop" [color="gray60", style="solid"];
  "gateway.session_loop_factory" -> "butler.core.session_hydration" [color="gray60", style="solid"];
  "gateway.session_loop_factory" -> "butler.gateway.handler_helpers" [color="gray60", style="solid"];
  "gateway.session_loop_factory" -> "butler.gateway.message_handler" [color="gray60", style="solid"];
  "gateway.session_loop_factory" -> "butler.plan.mode" [color="gray60", style="solid"];
  "gateway.session_loop_factory" -> "butler.project.lead" [color="gray60", style="solid"];
  "gateway.session_loop_factory" -> "butler.tools.project_tools" [color="gray60", style="solid"];
  "gateway.session_loop_factory" -> "butler.tools.registry" [color="gray60", style="solid"];
  "gateway.session_registry" -> "butler.gateway.session_registry_ops" [color="gray60", style="solid"];
  "gateway.session_registry_ops" -> "butler.core.best_effort" [color="gray60", style="solid"];
  "gateway.session_registry_ops" -> "butler.ops.runtime_metrics" [color="gray60", style="solid"];
  "gateway.singleton_lock" -> "butler.defaults.env_defaults" [color="gray60", style="solid"];
  "gateway.speech_stt" -> "butler.configuration.gateway" [color="gray60", style="solid"];
  "gateway.speech_stt" -> "butler.gateway.speech_stt_ops" [color="gray60", style="solid"];
  "gateway.speech_stt_ops" -> "butler.gateway.media_telemetry" [color="gray60", style="solid"];
  "gateway.task_milestone" -> "butler.defaults.env_defaults" [color="gray60", style="solid"];
  "gateway.task_milestone" -> "butler.gateway.completion_notify" [color="gray60", style="solid"];
  "gateway.task_milestone" -> "butler.gateway.outbound_bridge" [color="gray60", style="solid"];
  "gateway.task_milestone" -> "butler.gateway.task_milestone_ops" [color="gray60", style="solid"];
  "gateway.task_milestone" -> "butler.utilities.env_parse" [color="gray60", style="solid"];
  "gateway.task_milestone_ops" -> "butler.core.best_effort" [color="gray60", style="solid"];
  "gateway.task_milestone_ops" -> "butler.gateway.completion_notify" [color="gray60", style="solid"];
  "gateway.turn_post_pipeline" -> "butler.gateway.handler_helpers" [color="gray60", style="solid"];
  "gateway.turn_post_pipeline" -> "butler.gateway.inbound_pipeline" [color="gray60", style="solid"];
  "gateway.turn_post_pipeline" -> "butler.gateway.message_handler" [color="gray60", style="solid"];
  "gateway.turn_post_pipeline" -> "butler.gateway.message_pipelines" [color="gray60", style="solid"];
  "gateway.turn_post_pipeline" -> "butler.gateway.reply_admission" [color="gray60", style="solid"];
  "gateway.turn_post_pipeline" -> "butler.gateway.turn_post_pipeline_ops" [color="gray60", style="solid"];
  "gateway.turn_post_pipeline_ops" -> "butler.core.best_effort" [color="gray60", style="solid"];
  "gateway.turn_post_pipeline_ops" -> "butler.ops.owner_pmf_metrics" [color="gray60", style="solid"];
  "gateway.turn_post_pipeline_ops" -> "butler.resilience.inbound_idempotency" [color="gray60", style="solid"];
  "gateway.vision_fallback" -> "butler.defaults.env_defaults" [color="gray60", style="solid"];
  "gateway.vision_fallback" -> "butler.defaults.model_defaults" [color="gray60", style="solid"];
  "gateway.vision_fallback" -> "butler.gateway.vision_fallback_ops" [color="gray60", style="solid"];
  "gateway.wechat_scenario_sim" -> "butler.gateway.wechat_scenario_sim.__init__" [color="gray60", style="solid"];
  "gateway.wechat_scenario_sim.evaluation" -> "butler.core.session_epoch" [color="gray60", style="solid"];
  "gateway.wechat_scenario_sim.evaluation" -> "butler.gateway.outbound_files" [color="gray60", style="solid"];
  "gateway.wechat_scenario_sim.evaluation" -> "butler.gateway.wechat_scenario_sim_ops" [color="gray60", style="solid"];
  "gateway.wechat_scenario_sim.evaluation" -> "butler.report" [color="gray60", style="solid"];
  "gateway.wechat_scenario_sim.execution" -> "butler.defaults.env_defaults" [color="gray60", style="solid"];
  "gateway.wechat_scenario_sim.execution" -> "butler.gateway.gateway_contracts" [color="gray60", style="solid"];
  "gateway.wechat_scenario_sim.execution" -> "butler.gateway.message_handler" [color="gray60", style="solid"];
  "gateway.wechat_scenario_sim.execution" -> "butler.gateway.wechat_scenario_sim_bridge" [color="gray60", style="solid"];
  "gateway.wechat_scenario_sim.execution" -> "butler.gateway.wechat_scenario_sim_ops" [color="gray60", style="solid"];
  "gateway.wechat_scenario_sim.execution" -> "butler.project.manager" [color="gray60", style="solid"];
  "gateway.wechat_scenario_sim.utils" -> "butler.core.session_epoch" [color="gray60", style="solid"];
  "gateway.wechat_scenario_sim.utils" -> "butler.tools.registry" [color="gray60", style="solid"];
  "gateway.wechat_scenario_sim_bridge" -> "butler.execution_context" [color="gray60", style="solid"];
  "gateway.wechat_scenario_sim_bridge" -> "butler.gateway.gateway_contracts" [color="gray60", style="solid"];
  "gateway.wechat_scenario_sim_bridge" -> "butler.gateway.outbound_bridge" [color="gray60", style="solid"];
  "gateway.wechat_scenario_sim_bridge" -> "butler.gateway.outbound_bridge_ops" [color="gray60", style="solid"];
  "gateway.wechat_scenario_sim_bridge" -> "butler.gateway.platforms.types" [color="gray60", style="solid"];
  "gateway.wechat_scenario_sim_bridge" -> "butler.runtime.async_delegate" [color="gray60", style="solid"];
  "gateway.wechat_scenario_sim_ops" -> "butler.core.best_effort" [color="gray60", style="solid"];
  "gateway.wechat_scenario_sim_ops" -> "butler.core.session_epoch" [color="gray60", style="solid"];
  "gateway.wechat_scenario_sim_ops" -> "butler.report" [color="gray60", style="solid"];
  "gateway.wechat_text_export" -> "butler.configuration.settings" [color="gray60", style="solid"];
  "gateway.wechat_text_export" -> "butler.defaults.env_defaults" [color="gray60", style="solid"];
  "gateway.wechat_text_export" -> "butler.gateway.outbound_files" [color="gray60", style="solid"];
  "gateway.wechat_text_export" -> "butler.gateway.pii_scrub" [color="gray60", style="solid"];
  "gateway.wechat_text_export" -> "butler.report" [color="gray60", style="solid"];
  "gateway.wechat_text_export" -> "butler.utilities.env_parse" [color="gray60", style="solid"];
  "gateway_settings" -> "butler.configuration.gateway" [color="gray60", style="solid"];
  "gateway_settings_ops" -> "butler.configuration.gateway_ops" [color="gray60", style="solid"];
  "hooks" -> "butler.hooks.loader" [color="gray60", style="solid"];
  "hooks" -> "butler.hooks.runner" [color="gray60", style="solid"];
  "hooks" -> "butler.hooks.telemetry" [color="gray60", style="solid"];
  "hooks.loader" -> "butler.hooks.loader_ops" [color="gray60", style="solid"];
  "hooks.loader_ops" -> "butler.configuration.settings" [color="gray60", style="solid"];
  "hooks.runner" -> "butler.defaults.env_defaults" [color="gray60", style="solid"];
  "hooks.runner" -> "butler.hooks.loader" [color="gray60", style="solid"];
  "hooks.runner" -> "butler.hooks.runner_ops" [color="gray60", style="solid"];
  "hooks.runner" -> "butler.utilities.env_parse" [color="gray60", style="solid"];
  "hooks.runner_ops" -> "butler.core.best_effort" [color="gray60", style="solid"];
  "hooks.runner_ops" -> "butler.execution_context" [color="gray60", style="solid"];
  "hooks.runner_ops" -> "butler.hooks.telemetry" [color="gray60", style="solid"];
  "hooks.runner_ops" -> "butler.tools.path_safety" [color="gray60", style="solid"];
  "hooks.telemetry" -> "butler.hooks.telemetry_ops" [color="gray60", style="solid"];
  "hooks.telemetry_ops" -> "butler.core.best_effort" [color="gray60", style="solid"];
  "hooks.telemetry_ops" -> "butler.hooks.loader" [color="gray60", style="solid"];
  "hooks.telemetry_ops" -> "butler.hooks.runner" [color="gray60", style="solid"];
  "hooks.telemetry_ops" -> "butler.ops.runtime_metrics" [color="gray60", style="solid"];
  "human_gate" -> "butler.permissions.human_gate" [color="gray60", style="solid"];
  "human_gate_ops" -> "butler.permissions.human_gate_ops" [color="gray60", style="solid"];
  "logging_config" -> "butler.utilities.logging_config" [color="gray60", style="solid"];
  "main" -> "butler.cli.architecture_cli" [color="gray60", style="solid"];
  "main" -> "butler.cli.blackboard_cli" [color="gray60", style="solid"];
  "main" -> "butler.cli.chat_cli" [color="gray60", style="solid"];
  "main" -> "butler.cli.cost_cli" [color="gray60", style="solid"];
  "main" -> "butler.cli.doctor" [color="gray60", style="solid"];
  "main" -> "butler.cli.eval_cli" [color="gray60", style="solid"];
  "main" -> "butler.cli.events_cli" [color="gray60", style="solid"];
  "main" -> "butler.cli.experiment_cli" [color="gray60", style="solid"];
  "main" -> "butler.cli.gate_cli" [color="gray60", style="solid"];
  "main" -> "butler.cli.gateway_cli" [color="gray60", style="solid"];
  "main" -> "butler.cli.mcp_cli" [color="gray60", style="solid"];
  "main" -> "butler.cli.memory_cli" [color="gray60", style="solid"];
  "main" -> "butler.cli.onboard_cli" [color="gray60", style="solid"];
  "main" -> "butler.cli.projects_cli" [color="gray60", style="solid"];
  "main" -> "butler.cli.prompt_eval_cli" [color="gray60", style="solid"];
  "main" -> "butler.cli.provider_presets_cli" [color="gray60", style="solid"];
  "main" -> "butler.cli.registry_cli" [color="gray60", style="solid"];
  "main" -> "butler.cli.runtime_cli" [color="gray60", style="solid"];
  "main" -> "butler.cli.secrets_cli" [color="gray60", style="solid"];
  "main" -> "butler.cli.sessions_cli" [color="gray60", style="solid"];
  "main" -> "butler.cli.skills_registry" [color="gray60", style="solid"];
  "main" -> "butler.cli.slash_dispatch" [color="gray60", style="solid"];
  "main" -> "butler.cli.transcript_cli" [color="gray60", style="solid"];
  "main" -> "butler.cli.workflow_cli" [color="gray60", style="solid"];
  "main" -> "butler.core.events.event_consumer" [color="gray60", style="solid"];
  "main" -> "butler.orchestrator" [color="gray60", style="solid"];
  "main" -> "butler.utilities.env_parse" [color="gray60", style="solid"];
  "main" -> "butler.utilities.logging_config" [color="gray60", style="solid"];
  "main" -> "butler.utilities.repo_paths" [color="gray60", style="solid"];
  "mcp" -> "butler.mcp.config" [color="gray60", style="solid"];
  "mcp" -> "butler.mcp.registry_hook" [color="gray60", style="solid"];
  "mcp.approval" -> "butler.mcp.classify" [color="gray60", style="solid"];
  "mcp.approval" -> "butler.permissions.approvals" [color="gray60", style="solid"];
  "mcp.approval" -> "butler.utilities.env_parse" [color="gray60", style="solid"];
  "mcp.async_runner" -> "butler.mcp.async_runner_ops" [color="gray60", style="solid"];
  "mcp.async_runner_ops" -> "butler.core.best_effort" [color="gray60", style="solid"];
  "mcp.async_runner_ops" -> "butler.mcp" [color="gray60", style="solid"];
  "mcp.async_runner_ops" -> "butler.mcp.async_runner" [color="gray60", style="solid"];
  "mcp.async_runner_ops" -> "butler.mcp.config" [color="gray60", style="solid"];
  "mcp.async_runner_ops" -> "butler.mcp.manager" [color="gray60", style="solid"];
  "mcp.bridge" -> "butler.mcp.classify" [color="gray60", style="solid"];
  "mcp.bridge" -> "butler.mcp.config" [color="gray60", style="solid"];
  "mcp.bridge" -> "butler.mcp.naming" [color="gray60", style="solid"];
  "mcp.bridge" -> "butler.mcp.result_slim" [color="gray60", style="solid"];
  "mcp.bridge" -> "butler.mcp.schema_normalize" [color="gray60", style="solid"];
  "mcp.bridge" -> "butler.mcp.types" [color="gray60", style="solid"];
  "mcp.client_http" -> "butler.core.effects" [color="gray60", style="solid"];
  "mcp.client_http" -> "butler.mcp.client_http_ops" [color="gray60", style="solid"];
  "mcp.client_http" -> "butler.mcp.client_stdio" [color="gray60", style="solid"];
  "mcp.client_http" -> "butler.mcp.config" [color="gray60", style="solid"];
  "mcp.client_http" -> "butler.mcp.types" [color="gray60", style="solid"];
  "mcp.client_http_ops" -> "butler.core.best_effort" [color="gray60", style="solid"];
  "mcp.client_stdio" -> "butler.mcp.client_stdio_ops" [color="gray60", style="solid"];
  "mcp.client_stdio" -> "butler.mcp.config" [color="gray60", style="solid"];
  "mcp.client_stdio" -> "butler.mcp.types" [color="gray60", style="solid"];
  "mcp.client_stdio" -> "butler.tools.path_safety" [color="gray60", style="solid"];
  "mcp.client_stdio_ops" -> "butler.core.best_effort" [color="gray60", style="solid"];
  "mcp.config" -> "butler.defaults.env_defaults" [color="gray60", style="solid"];
  "mcp.config" -> "butler.io.safe_load" [color="gray60", style="solid"];
  "mcp.config" -> "butler.mcp.config_ops" [color="gray60", style="solid"];
  "mcp.config" -> "butler.mcp.types" [color="gray60", style="solid"];
  "mcp.config" -> "butler.utilities.env_parse" [color="gray60", style="solid"];
  "mcp.config_ops" -> "butler.configuration.settings" [color="gray60", style="solid"];
  "mcp.config_ops" -> "butler.core.best_effort" [color="gray60", style="solid"];
  "mcp.config_ops" -> "butler.mcp.config" [color="gray60", style="solid"];
  "mcp.deferred" -> "butler.core.harness_flags" [color="gray60", style="solid"];
  "mcp.deferred" -> "butler.mcp.bridge" [color="gray60", style="solid"];
  "mcp.deferred" -> "butler.mcp.config" [color="gray60", style="solid"];
  "mcp.deferred" -> "butler.mcp.deferred_ops" [color="gray60", style="solid"];
  "mcp.deferred" -> "butler.mcp.manager" [color="gray60", style="solid"];
  "mcp.deferred" -> "butler.mcp.naming" [color="gray60", style="solid"];
  "mcp.deferred_ops" -> "butler.core.best_effort" [color="gray60", style="solid"];
  "mcp.deferred_ops" -> "butler.execution_context" [color="gray60", style="solid"];
  "mcp.diagnostics" -> "butler.mcp.registry_hook" [color="gray60", style="solid"];
  "mcp.extension_grounding" -> "butler.mcp.extension_manifest" [color="gray60", style="solid"];
  "mcp.extension_grounding" -> "butler.utilities.env_parse" [color="gray60", style="solid"];
  "mcp.extension_manifest" -> "butler.configuration.secrets_crypto" [color="gray60", style="solid"];
  "mcp.extension_manifest" -> "butler.mcp.extension_manifest_ops" [color="gray60", style="solid"];
  "mcp.extension_manifest_ops" -> "butler.core.best_effort" [color="gray60", style="solid"];
  "mcp.extension_verify" -> "butler.mcp.config" [color="gray60", style="solid"];
  "mcp.extension_verify" -> "butler.mcp.extension_manifest" [color="gray60", style="solid"];
  "mcp.extension_verify" -> "butler.mcp.extension_verify_ops" [color="gray60", style="solid"];
  "mcp.extension_verify_ops" -> "butler.mcp.registry_hook" [color="gray60", style="solid"];
  "mcp.extension_verify_ops" -> "butler.registry.mcp_catalog_ops" [color="gray60", style="solid"];
  "mcp.github_grounding" -> "butler.defaults.env_defaults" [color="gray60", style="solid"];
  "mcp.github_grounding" -> "butler.mcp.extension_grounding" [color="gray60", style="solid"];
  "mcp.github_grounding" -> "butler.mcp.github_tool_aliases" [color="gray60", style="solid"];
  "mcp.github_grounding" -> "butler.mcp.registry_hook" [color="gray60", style="solid"];
  "mcp.github_grounding" -> "butler.mcp.result_slim" [color="gray60", style="solid"];
  "mcp.github_grounding" -> "butler.utilities.env_parse" [color="gray60", style="solid"];
  "mcp.github_tool_aliases" -> "butler.defaults.env_defaults" [color="gray60", style="solid"];
  "mcp.github_tool_aliases" -> "butler.mcp.github_tool_aliases_ops" [color="gray60", style="solid"];
  "mcp.github_tool_aliases_ops" -> "butler.core.best_effort" [color="gray60", style="solid"];
  "mcp.github_tool_aliases_ops" -> "butler.mcp.extension_manifest" [color="gray60", style="solid"];
  "mcp.manager" -> "butler.mcp.async_runner" [color="gray60", style="solid"];
  "mcp.manager" -> "butler.mcp.bridge" [color="gray60", style="solid"];
  "mcp.manager" -> "butler.mcp.client_http" [color="gray60", style="solid"];
  "mcp.manager" -> "butler.mcp.client_stdio" [color="gray60", style="solid"];
  "mcp.manager" -> "butler.mcp.config" [color="gray60", style="solid"];
  "mcp.manager" -> "butler.mcp.manager_ops" [color="gray60", style="solid"];
  "mcp.manager" -> "butler.mcp.types" [color="gray60", style="solid"];
  "mcp.manager_ops" -> "butler.core.best_effort" [color="gray60", style="solid"];
  "mcp.manager_ops" -> "butler.mcp.profiles" [color="gray60", style="solid"];
  "mcp.manager_ops" -> "butler.ops.degradation_registry" [color="gray60", style="solid"];
  "mcp.naming" -> "butler.defaults.env_defaults" [color="gray60", style="solid"];
  "mcp.outbound_grounding_gate" -> "butler.mcp.github_grounding" [color="gray60", style="solid"];
  "mcp.outbound_grounding_gate" -> "butler.mcp.todoist_grounding" [color="gray60", style="solid"];
  "mcp.profiles" -> "butler.defaults.env_defaults" [color="gray60", style="solid"];
  "mcp.profiles" -> "butler.mcp.config" [color="gray60", style="solid"];
  "mcp.profiles" -> "butler.mcp.profiles_ops" [color="gray60", style="solid"];
  "mcp.profiles" -> "butler.mcp.types" [color="gray60", style="solid"];
  "mcp.profiles" -> "butler.utilities.env_parse" [color="gray60", style="solid"];
  "mcp.profiles_ops" -> "butler.registry.mcp_catalog_ops" [color="gray60", style="solid"];
  "mcp.registry_hook" -> "butler.mcp.bridge" [color="gray60", style="solid"];
  "mcp.registry_hook" -> "butler.mcp.classify" [color="gray60", style="solid"];
  "mcp.registry_hook" -> "butler.mcp.config" [color="gray60", style="solid"];
  "mcp.registry_hook" -> "butler.mcp.github_tool_aliases" [color="gray60", style="solid"];
  "mcp.registry_hook" -> "butler.mcp.manager" [color="gray60", style="solid"];
  "mcp.registry_hook" -> "butler.mcp.naming" [color="gray60", style="solid"];
  "mcp.registry_hook" -> "butler.mcp.registry_hook_ops" [color="gray60", style="solid"];
  "mcp.registry_hook" -> "butler.mcp.todoist_tool_aliases" [color="gray60", style="solid"];
  "mcp.registry_hook" -> "butler.mcp.turn_scrape_dedup" [color="gray60", style="solid"];
  "mcp.registry_hook_ops" -> "butler.core.best_effort" [color="gray60", style="solid"];
  "mcp.registry_hook_ops" -> "butler.core.harness_flags" [color="gray60", style="solid"];
  "mcp.registry_hook_ops" -> "butler.core.tool_orchestrator" [color="gray60", style="solid"];
  "mcp.registry_hook_ops" -> "butler.execution_context" [color="gray60", style="solid"];
  "mcp.registry_hook_ops" -> "butler.mcp.config" [color="gray60", style="solid"];
  "mcp.registry_hook_ops" -> "butler.mcp.deferred" [color="gray60", style="solid"];
  "mcp.registry_hook_ops" -> "butler.mcp.extension_verify" [color="gray60", style="solid"];
  "mcp.registry_hook_ops" -> "butler.plan.mode" [color="gray60", style="solid"];
  "mcp.server_stdio" -> "butler.tools.registry" [color="gray60", style="solid"];
  "mcp.todoist_grounding" -> "butler.defaults.env_defaults" [color="gray60", style="solid"];
  "mcp.todoist_grounding" -> "butler.mcp.extension_grounding" [color="gray60", style="solid"];
  "mcp.todoist_grounding" -> "butler.mcp.result_slim" [color="gray60", style="solid"];
  "mcp.todoist_grounding" -> "butler.utilities.env_parse" [color="gray60", style="solid"];
  "mcp.todoist_tool_aliases" -> "butler.mcp.todoist_tool_aliases_ops" [color="gray60", style="solid"];
  "mcp.todoist_tool_aliases_ops" -> "butler.core.best_effort" [color="gray60", style="solid"];
  "mcp.todoist_tool_aliases_ops" -> "butler.mcp.extension_manifest" [color="gray60", style="solid"];
  "mcp.tools_engine" -> "butler.defaults.env_defaults" [color="gray60", style="solid"];
  "mcp.tools_engine" -> "butler.mcp.tools_engine_ops" [color="gray60", style="solid"];
  "mcp.tools_engine" -> "butler.transport.model_capabilities" [color="gray60", style="solid"];
  "mcp.tools_engine" -> "butler.utilities.env_parse" [color="gray60", style="solid"];
  "mcp.tools_engine_ops" -> "butler.core.best_effort" [color="gray60", style="solid"];
  "mcp.tools_engine_ops" -> "butler.mcp.tools_manifest" [color="gray60", style="solid"];
  "mcp.tools_manifest" -> "butler.defaults.env_defaults" [color="gray60", style="solid"];
  "mcp.tools_manifest" -> "butler.mcp.naming" [color="gray60", style="solid"];
  "mcp.tools_manifest" -> "butler.mcp.tools_manifest_ops" [color="gray60", style="solid"];
  "mcp.tools_manifest" -> "butler.utilities.env_parse" [color="gray60", style="solid"];
  "mcp.tools_manifest_ops" -> "butler.core.best_effort" [color="gray60", style="solid"];
  "mcp.tools_manifest_ops" -> "butler.registry.mcp_merge" [color="gray60", style="solid"];
  "mcp.turn_scrape_dedup" -> "butler.mcp.turn_scrape_dedup_ops" [color="gray60", style="solid"];
  "mcp.turn_scrape_dedup_ops" -> "butler.core.best_effort" [color="gray60", style="solid"];
  "mcp.turn_scrape_dedup_ops" -> "butler.execution_context" [color="gray60", style="solid"];
  "memory" -> "butler.memory.butler_memory" [color="gray60", style="solid"];
  "memory" -> "butler.memory.facade" [color="gray60", style="solid"];
  "memory" -> "butler.memory.project_memory" [color="gray60", style="solid"];
  "memory" -> "butler.memory.semantic_config" [color="gray60", style="solid"];
  "memory" -> "butler.memory.semantic_index" [color="gray60", style="solid"];
  "memory.butler_memory" -> "butler.memory.butler_memory.__init__" [color="gray60", style="solid"];
  "memory.butler_memory.core" -> "butler.defaults.env_defaults" [color="gray60", style="solid"];
  "memory.butler_memory.core" -> "butler.memory.butler_memory_ops" [color="gray60", style="solid"];
  "memory.butler_memory.core" -> "butler.memory.experience_consolidation" [color="gray60", style="solid"];
  "memory.butler_memory.core" -> "butler.memory.semantic_index" [color="gray60", style="solid"];
  "memory.butler_memory.core" -> "butler.memory.triplets" [color="gray60", style="solid"];
  "memory.butler_memory.core" -> "butler.memory.vector_sync_telemetry" [color="gray60", style="solid"];
  "memory.butler_memory.core" -> "butler.utilities.tenant" [color="gray60", style="solid"];
  "memory.butler_memory.experience_store" -> "butler.memory.butler_memory_ops" [color="gray60", style="solid"];
  "memory.butler_memory.experience_store" -> "butler.memory.retrieval_ranking" [color="gray60", style="solid"];
  "memory.butler_memory.profile_store" -> "butler.io.safe_load" [color="gray60", style="solid"];
  "memory.butler_memory_ops" -> "butler.core.best_effort" [color="gray60", style="solid"];
  "memory.butler_memory_ops" -> "butler.memory.semantic_config" [color="gray60", style="solid"];
  "memory.butler_memory_ops" -> "butler.memory.semantic_index" [color="gray60", style="solid"];
  "memory.butler_memory_ops" -> "butler.skills.seed_bundled" [color="gray60", style="solid"];
  "memory.chunking" -> "butler.defaults.env_defaults" [color="gray60", style="solid"];
  "memory.chunking" -> "butler.memory.chunking_ops" [color="gray60", style="solid"];
  "memory.chunking" -> "butler.memory.document_ingest" [color="gray60", style="solid"];
  "memory.chunking" -> "butler.utilities.env_parse" [color="gray60", style="solid"];
  "memory.chunking_ops" -> "butler.core.best_effort" [color="gray60", style="solid"];
  "memory.chunking_ops" -> "butler.memory.semantic_index" [color="gray60", style="solid"];
  "memory.coding_recall" -> "butler.configuration.settings" [color="gray60", style="solid"];
  "memory.coding_recall" -> "butler.dev_engine.coding_knowledge" [color="gray60", style="solid"];
  "memory.coding_recall" -> "butler.memory.memory_scope" [color="gray60", style="solid"];
  "memory.coding_recall" -> "butler.memory.recall_ops" [color="gray60", style="solid"];
  "memory.conversation_store" -> "butler.core.container" [color="gray60", style="solid"];
  "memory.conversation_store" -> "butler.core.conversation_state" [color="gray60", style="solid"];
  "memory.corpus_router" -> "butler.memory.corpus_router_ops" [color="gray60", style="solid"];
  "memory.corpus_router" -> "butler.tools.memory_tools" [color="gray60", style="solid"];
  "memory.corpus_router" -> "butler.utilities.env_parse" [color="gray60", style="solid"];
  "memory.corpus_router_ops" -> "butler.core.best_effort" [color="gray60", style="solid"];
  "memory.corpus_router_ops" -> "butler.memory.query_decompose" [color="gray60", style="solid"];
  "memory.corrective_recall" -> "butler.configuration.memory" [color="gray60", style="solid"];
  "memory.corrective_recall" -> "butler.memory.corrective_recall_ops" [color="gray60", style="solid"];
  "memory.corrective_recall_ops" -> "butler.tools.memory_tools" [color="gray60", style="solid"];
  "memory.diagnostics" -> "butler.configuration.memory" [color="gray60", style="solid"];
  "memory.diagnostics" -> "butler.core.best_effort" [color="gray60", style="solid"];
  "memory.diagnostics" -> "butler.memory.diagnostics_collect" [color="gray60", style="solid"];
  "memory.diagnostics" -> "butler.memory.facade_ops" [color="gray60", style="solid"];
  "memory.diagnostics" -> "butler.memory.metrics_persist" [color="gray60", style="solid"];
  "memory.diagnostics" -> "butler.memory.prefetch_cache" [color="gray60", style="solid"];
  "memory.diagnostics" -> "butler.memory.project_memory" [color="gray60", style="solid"];
  "memory.diagnostics" -> "butler.memory.retrieval_ranking" [color="gray60", style="solid"];
  "memory.diagnostics" -> "butler.memory.scope_diagnostics" [color="gray60", style="solid"];
  "memory.diagnostics" -> "butler.memory.semantic_config" [color="gray60", style="solid"];
  "memory.diagnostics" -> "butler.memory.semantic_project" [color="gray60", style="solid"];
  "memory.diagnostics" -> "butler.memory.vector_sync_telemetry" [color="gray60", style="solid"];
  "memory.diagnostics" -> "butler.ops.embedding_diagnostics" [color="gray60", style="solid"];
  "memory.diagnostics" -> "butler.session.lifecycle" [color="gray60", style="solid"];
  "memory.diagnostics_collect" -> "butler.configuration.settings" [color="gray60", style="solid"];
  "memory.diagnostics_collect" -> "butler.core.best_effort" [color="gray60", style="solid"];
  "memory.diagnostics_collect" -> "butler.memory.knowledge_db" [color="gray60", style="solid"];
  "memory.diagnostics_collect" -> "butler.memory.retrieval_telemetry" [color="gray60", style="solid"];
  "memory.diagnostics_collect" -> "butler.memory.scope_diagnostics" [color="gray60", style="solid"];
  "memory.diagnostics_collect" -> "butler.memory.semantic_health" [color="gray60", style="solid"];
  "memory.diagnostics_collect" -> "butler.memory.semantic_index" [color="gray60", style="solid"];
  "memory.diagnostics_collect" -> "butler.ops.embedding_diagnostics" [color="gray60", style="solid"];
  "memory.diagnostics_collect" -> "butler.ops.transcript_diagnostics" [color="gray60", style="solid"];
  "memory.document_ingest" -> "butler.memory.document_ingest_ops" [color="gray60", style="solid"];
  "memory.document_ingest" -> "butler.utilities.env_parse" [color="gray60", style="solid"];
  "memory.embedding" -> "butler.defaults.model_defaults" [color="gray60", style="solid"];
  "memory.embedding" -> "butler.memory.embedding_ops" [color="gray60", style="solid"];
  "memory.embedding" -> "butler.memory.semantic_config" [color="gray60", style="solid"];
  "memory.embedding_ops" -> "butler.core.best_effort" [color="gray60", style="solid"];
  "memory.embedding_ops" -> "butler.defaults.model_defaults" [color="gray60", style="solid"];
  "memory.embedding_ops" -> "butler.memory.embedding" [color="gray60", style="solid"];
  "memory.embedding_ops" -> "butler.ops.degradation_registry" [color="gray60", style="solid"];
  "memory.experience" -> "butler.memory.experience.domain_router" [color="gray60", style="solid"];
  "memory.experience" -> "butler.memory.experience.taxonomy" [color="gray60", style="solid"];
  "memory.experience" -> "butler.memory.experience.tree" [color="gray60", style="solid"];
  "memory.experience.classifier" -> "butler.memory.experience.taxonomy" [color="gray60", style="