Block a user
Рефакторинг рендера [этап 5/6]: таблица медиа-типов в post_parser (два коммита: 5a байт-в-байт + 5b фиксы)
refactor(render): этап 5 — таблица медиа-типов (5a байт-в-байт + 5b фиксы) (#32)
Рефакторинг рендера [этап 4/6]: группировка без deepcopy и мутаций, фикс naive/aware краша
refactor(render): этап 4 — группировка без deepcopy + фикс naive/aware (#31)
Рефакторинг рендера [этап 3/6]: слияние generate_channel_rss/html вокруг _prepare_feed_posts
refactor(render): этап 3 — слияние близнецов вокруг _prepare_feed_posts (#30)
Рефакторинг рендера [этап 2/6]: футер merged-групп из настоящего Message, выпил конвертера
refactor(render): этап 2 — футер merged-групп из настоящего Message (#29)
AI-чат: индикатор прогресса выполнения инструмента в UI (elapsed / timeout, напр. «40с / 120с»)
[observability][follow-up #355] Метрики collab-цикла и MCP: load/lifecycle/connect/per-tool — слепые зоны, вскрытые инцидентом per-cell правок (#400)
perf(collab): три фикса горячего пути сервера — гонка connect-vs-unload (hocuspocus 3.4.4), двойная перекодировка в onLoadDocument, isDeepStrictEqual на каждом store
perf(mcp): переиспользование collab-соединения (кэш CollabSession) — серия правок страницы за один connect/sync вместо N полных round-trip'ов
[perf][comments] POST /api/comments/resolve: p95 до 4.5 с — HTTP-ответ ждёт загрузку Y.Doc и полный store-пайплайн ради операции над меткой
Уточнение механики джоба по итогам обсуждения (вопрос был: «это просто fire-and-forget?» — нет):
**Гарантии доставки.*…
[perf][comments] POST /api/comments/resolve: p95 до 4.5 с — HTTP-ответ ждёт загрузку Y.Doc и полный store-пайплайн ради флипа одного атрибута метки
feat(mcp): создание и редактирование drawio-ноды из XML (get/insert/update_drawio)
review(ai-chat): постфактум-ревью фикса зависания AI-чата из-за MCP (16b476a2, уже в develop)