diff --git a/src/AcDream.App/UI/Layout/InventoryController.cs b/src/AcDream.App/UI/Layout/InventoryController.cs
index 26a71386..cdb4dc48 100644
--- a/src/AcDream.App/UI/Layout/InventoryController.cs
+++ b/src/AcDream.App/UI/Layout/InventoryController.cs
@@ -8,7 +8,8 @@ namespace AcDream.App.UI.Layout;
/// Binds the imported gmInventoryUI tree (LayoutDesc 0x21000023) and populates it from
/// . The acdream analogue of retail
/// gmInventoryUI/gmBackpackUI/gm3DItemsUI ::PostInit (named-retail decomp 176236/176596/176728).
-/// Read-only: no container switching / drag / wield-drop wire (later sub-phases).
+/// Container-switching is live (click a side bag → Use 0x0036 → ViewContents 0x0196 full-replace);
+/// drag-into-bag / wield-drop wire are later sub-phases.
///
public sealed class InventoryController
{
@@ -237,7 +238,9 @@ public sealed class InventoryController
}
/// The effective open container — the explicit one, or the player (main pack) by default.
- /// Resolved live (not cached at ctor) so a late-arriving player guid is handled.
+ /// Resolved live (not cached at ctor) so a late-arriving player guid is handled. The default
+ /// sentinel is 0; once the main pack is explicitly opened, _openContainer holds the player
+ /// guid instead — both resolve here to the same main-pack container, so the paths are equivalent.
private uint EffectiveOpen() => _openContainer != 0 ? _openContainer : _playerGuid();
/// Add a populated cell wired to its click role: container cell → open+select,