``` 📊 Quick Energy Impact Reference Category Avg Power Draw Recommended BG Behavior ─────────────────────────────────────────────────────────────────────────── AI Inference 🔋🔋🔋🔋🔋 Throttle rate; pause when idle 3D Physics/Rigidbodies 🔋🔋🔋🔋🔋 Disable off-tab; hard stop Multiplayer Netcode 🔋🔋🔋 Keep alive; reduce tick/packet rate Video Decode/Encode 🔋🔋🔋🔋 Pause while hidden Clipboard/OS Sync 🔋 Event-driven only Background Audio 🔋 Safe to run continuously Timers/State Stores 🔋 Negligible ``` Key Concepts for concurrency/execution options: - call_deferred: Schedules a method to run at the end of the current frame/physics step. Good for safe scene tree manipulation, avoiding "node doesn't exist yet" errors. - await: Godot 4's async/await pattern. Replaces yield. Used for non-blocking waits (signals, timers, functions returning Future). Keeps main thread responsive. - Signals: Native Godot event system. Decouples systems, enables reactive UI/engine updates without polling. Essential for multi-tab state management. - Threading (Thread/Callable.bind()/@thread_sync): For heavy CPU tasks (AI inference, network I/O) that shouldn't block the main thread. - Process Modes (PROCESS_MODE_ALWAYS, INHERIT, PAUSE): Controls when nodes update across different UI states (modals, hidden tabs). - State Machines / Context Managers: Managing tab switches, engine lifecycles, and background vs active states without race conditions. Recommended Pattern for EnvoyOS - Central EnvoyStateManager (RefCounted/Node) that tracks tab focus, engine contexts, and energy tiers. - Use signals for all cross-module communication. - await only for explicit async operations (configs, network handshakes). - call_deferred or signals for scene tree edits during tab swaps. - Threading for heavy computations; marshal results back via signals. - Process modes tied to engine context (active/bg/off).