Почему нетривиально: апгрейд одновременно ломает schema defaults, cursor API, lifecycle субдокументов и версионную связку драйвера; этот скилл раскладывает миграцию по шагам и отдельно охраняет инвариант botPermissions strict:false, потеря которого тихо режет права ботов.
Самая рискованная инфра-миграция (docs/MIGRATION_AUDIT.md Фаза 3, RISK_REVIEW.md R7/R9). Делать в выделенной ветке с полным e2e-прогоном перед merge.
WARN: Блокер: R7 (нет регресс-сети). Без e2e по критичным flow эта миграция слепая. Сначала покрыть: auth, dialogs, tools executor, DBCA subscribers, buyer-seller bots (есть seed-скрипты).
mongoose 5.10.6 -> 8.x (low-risk) или 9.x при Node 24 (GA ноя-2025, чтобы не мигрировать дважды).ObjectId).mongodb-memory-server 6 -> 10 (dev) синхронно.CLAUDE.md связки). Матрица — docs/CONFLICTS.md.Model.find() cursor API изменён.strict: true по умолчанию — но botPermissions намеренно strict:false (smarty-db/models/workspace/employee.js) -> сохранить явно, иначе гранулярные ключи (view_X/create_X) отбросятся.SchemaType.depopulate поведение.CVE-2023-46120 (NoSQL-injection через $where) — заодно проверить отсутствие user-controlled $where.smarty-db/models/, обёртку SmartySchema.crmAccess.js (единая точка записи + emitBgEvent для DBCA) и DBCA-подписчиков.botPermissions strict:false сохранён — гранулярные права не отбрасываются.strict:false в botPermissions.docs/MIGRATION_AUDIT.md (Фаза 3, §5.2) · docs/CONFLICTS.md · CLAUDE.md (инварианты, связки) · RISK_REVIEW.md (R7, R9).