M2-003: Audited PreferencesRepo — all five functions (findByUser, findByUserAndKey, findByUserAndCategory, upsert, remove) already enforce userId filtering at the DB WHERE clause level. No gaps found. M2-004: Fixed agent memory tools (memory_search, memory_save_preference, memory_save_insight, memory_get_preferences) — removed userId from all tool parameter schemas so the LLM cannot inject an arbitrary user ID. The userId is now bound from the authenticated session at tool-creation time via the new sessionUserId parameter on createMemoryTools(). buildToolsForSandbox() and the doCreateSession() call site are updated to thread the session userId through. Co-Authored-By: Claude Sonnet 4.6 <[email protected]>