This PR addresses the "memory poisoning paradox" during blank_start.
Bug 1: The Initialization Leak (Stale PathMemory)
QNavGraph instantiates GoalExecutor.get_instance(device) during startup. Because bot_username wasn't passed, GoalExecutor instantiated the PathMemory component utilizing the default bot_username="" string.
This bound PathMemory to the generic collection goap_paths_v1.
blank_start wiped the specific collection goap_paths_v1_marisaundmarc, but since the singleton was using goap_paths_v1, it retained the stale memories.
Fix: Pre-initialize GoalExecutor.get_instance(device, username) in bot_flow.pybeforeQNavGraph gets built.
Bug 2: The "Poisoned Memory" Paradox in Qdrant Logs
Qdrant's SDK .delete() returns success (200 OK) unconditionally — it doesn't care if the document exists. The delete_point method was blindly logging a successful purge whenever the Unlearn mechanic triggered, regardless of whether the vector had actually been deleted by the agent or by blank_start earlier.
Fix: Added a client.retrieve(ids=[point_id]) validation check in qdrant_memory.py's delete_point. If the point was wiped by a global blank_start and doesn't exist anymore, it skips the log.
This PR addresses the "memory poisoning paradox" during `blank_start`.
1. **Bug 1: The Initialization Leak (Stale PathMemory)**
- `QNavGraph` instantiates `GoalExecutor.get_instance(device)` during startup. Because `bot_username` wasn't passed, `GoalExecutor` instantiated the `PathMemory` component utilizing the default `bot_username=""` string.
- This bound `PathMemory` to the generic collection `goap_paths_v1`.
- `blank_start` wiped the specific collection `goap_paths_v1_marisaundmarc`, but since the singleton was using `goap_paths_v1`, it retained the stale memories.
- **Fix:** Pre-initialize `GoalExecutor.get_instance(device, username)` in `bot_flow.py` *before* `QNavGraph` gets built.
2. **Bug 2: The "Poisoned Memory" Paradox in Qdrant Logs**
- Qdrant's SDK `.delete()` returns success (200 OK) unconditionally — it doesn't care if the document exists. The `delete_point` method was blindly logging a successful purge whenever the Unlearn mechanic triggered, regardless of whether the vector had actually been deleted by the agent or by `blank_start` earlier.
- **Fix:** Added a `client.retrieve(ids=[point_id])` validation check in `qdrant_memory.py`'s `delete_point`. If the point was wiped by a global `blank_start` and doesn't exist anymore, it skips the log.
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.
This PR addresses the "memory poisoning paradox" during
blank_start.Bug 1: The Initialization Leak (Stale PathMemory)
QNavGraphinstantiatesGoalExecutor.get_instance(device)during startup. Becausebot_usernamewasn't passed,GoalExecutorinstantiated thePathMemorycomponent utilizing the defaultbot_username=""string.PathMemoryto the generic collectiongoap_paths_v1.blank_startwiped the specific collectiongoap_paths_v1_marisaundmarc, but since the singleton was usinggoap_paths_v1, it retained the stale memories.GoalExecutor.get_instance(device, username)inbot_flow.pybeforeQNavGraphgets built.Bug 2: The "Poisoned Memory" Paradox in Qdrant Logs
.delete()returns success (200 OK) unconditionally — it doesn't care if the document exists. Thedelete_pointmethod was blindly logging a successful purge whenever the Unlearn mechanic triggered, regardless of whether the vector had actually been deleted by the agent or byblank_startearlier.client.retrieve(ids=[point_id])validation check inqdrant_memory.py'sdelete_point. If the point was wiped by a globalblank_startand doesn't exist anymore, it skips the log.Pull request closed