2026-05-29 - 2026-06-29
Overview
3 Releases published by 1 user
Published
v0.94.1
Published
v0.94.0
Published
v0.93.0
66 Pull requests merged by 2 users
Merged
#231 refactor(agent-roles-catalog): YAML catalog with block-scalar instructions (#229)
Merged
#250 feat(#243): in-RAM blob sandbox (anonymous GET by UUID, TTL, ETag) + stash_page tool with image mirroring
Merged
#232 feat(footnotes): author-inline footnotes + deterministic server canonicalization (#228)
Merged
#230 fix(ui)+test: QA UI bugs (#216 #218) + test coverage (#206 #204 #192)
Merged
#227 fix(share): custom address edit renames in place instead of duplicating (#226)
Merged
#209 feat(ai-chat): auto-open last chat bound to the document (#191)
Merged
#222 feat(ai-roles): импортируемый мультиязычный каталог ролей агента
Merged
#225 fix(temporary-notes): tree clock marker updates without reload + mobile-friendly full-width create buttons
Merged
#224 fix(ai-chat): assistant turn renders nothing — memo signature defeated by AI-SDK in-place part mutation (#182 regression)
Merged
#202 feat(ai-chat): load full transcript for model history (drop 50-msg window)
Merged
#210 feat(ai): generate page title from content (#199)
Merged
#211 feat(ai-chat): interrupt agent + send queued message, keeping partial output (#198)
Merged
#215 feat(page): temporary notes — auto-trash after X hours unless made permanent (#201)
Merged
#214 feat(share): custom /l/:alias pretty links (share_aliases table) (#205)
Merged
#197 Батч: бейдж контекста (#189) + e2e в CI (#187) + inline-тест MCP (#170)
Merged
#212 fix: bug batch — #161 #190 #207 #159 + #206 findings
Merged
#185 Батч: ai-chat/footnotes/mcp/db/tree + red-team (#163 #181 #164 #173 #168 #180 + #159 8/10)
Merged
#186 feat(ai-chat): persistent history as source of truth — step durability + server export (#183)
Merged
#165 fix(ai-chat): WYSIWYG Copy chat export + first-turn export (#160, #174)
Merged
#179 fix(ai-chat): recycle keep-alive sockets + retry pre-response resets (#175)
Merged
#177 feat(ai-chat): surface reasoning from openai-compatible providers (z.ai/GLM) (#175)
Merged
#176 fix(ai-chat): don't sever long agent turns at undici's 300s stream timeout (#175)
Merged
#172 fix(mcp): tool allowlist stored/read as jsonb string, not array (edit-page crash + allowlist not enforced)
Merged
#171 test(footnotes): cover footnoteWarnings import plumbing + doc fixes (#169 second review)
Merged
#169 feat(footnotes): reuse semantics + import diagnostics (#166)
Merged
#154 fix(mcp): structural-diff write-back so agent edits don't jump the cursor (#152)
Merged
#155 feat(editor): recursive tree mode for the subpages node (#150)
Merged
#157 feat(editor): float image with text wrap (#145)
Merged
#158 feat(ai-chat): realtime token counter + reasoning tokens (#151)
Merged
#156 feat(ai-chat): per-role autoStart toggle + custom launchMessage (#149)
Merged
#147 fix(editor): render NodeViewContent first so click hit-testing isn't offset (#146)
Merged
#143 feat(comments): attribute MCP agent comments as AI (unspoofable provenance)
Merged
#142 test: unit tests for the 10 candidates (#139)
Merged
#141 fix(ai-http): fail fast + retry on provider header stall (#140)
Merged
#138 fix(ai-chat): adopt the server-returned chat id (two-tab adoption race #137)
Merged
#135 fix(qa): resolve QA-pass issues #122–#134
Merged
#121 feat(ai-chat): role cards start the chat and show role identity
Merged
#117 chore: finish the 3 remaining open issues (#93 move-snapshot, #62 cap, #109 ru-RU i18n)
Merged
#110 test: review-batch-2 follow-up coverage (sandbox html-embed, #101 fixes, i18n)
Merged
#101 fix: review/red-team batch 2 — 30 issues (security, ws, page-templates, html-embed, mcp, tests, docs)
Merged
#46 fix(html-embed): complete kill-switch on read paths (#28) + total strip helper (#30)
Merged
#45 fix(page-templates): tree marker (#38), embed chrome (#39), embed refresh (#40)
Merged
#50 feat(ai-chat): auto-collapse chat window on page focus (#42)
Merged
#47 fix(ai-chat): resolve current page for agent context (#43, hardness #1)
Merged
#51 feat(share): public-share AI chat reuses internal chat presentation (#41)
Merged
#48 fix(mcp): security review follow-ups (#24)
Merged
#59 ci: gate develop & release image builds on the test suite
Merged
#58 ci: run test suites on push/PR + quarantine broken stock scaffolds
Merged
#57 docs(backlog): extract non-test findings to issues #52-#56
Merged
#49 test: cover features since 053a9c0d + repair test tooling
Merged
#18 feat(editor): footnotes (reference + definitions, collab-safe)
Merged
#17 feat(editor): page templates — live whole-page embed (MVP)
Merged
#16 feat(editor): admin-only raw HTML/CSS/JS embed (variant C)
Merged
#25 feat(public-share): selectable agent-role identity + fix floating-icon overlap
Merged
#15 feat(tree): server-authoritative realtime tree updates
Merged
#13 feat(mcp): per-user auth for /mcp (HTTP Basic, server-validated)
Merged
#14 feat(ai): anonymous AI assistant on public shares
Merged
#11 feat(ai-chat): agent roles (admin persona + optional model)
Merged
#10 test(ai-chat): crypto/SSRF/assistant-parts coverage + a11y + refactors
Merged
#9 feat(ai-chat): step cap 8→20 + forced final text answer
Merged
#23 feat(tree): Expand all / Collapse all for the space page tree
Merged
#19 feat(ai-settings): rebind endpoint status dot to configured x enabled
Merged
#20 feat(ai-settings): put Clear inside the API key field, drop the eye
Merged
#5 feat(comments): denser comments panel
Merged
#2 docs: replace CLAUDE.md with AGENTS.md, codify agent workflow
Merged
#1 refactor(import): remove non-functional DOCX/PDF/Confluence import stubs
12 Pull requests proposed by 2 users
Proposed
#119 WIP: feat(git-sync): native two-way Docmost↔git Markdown sync (Phases A–D, live-verified)
Proposed
#120 WIP: feat(offline): offline-sync (M0–M2) + mobile-app-bootstrap, unified service worker
Proposed
#136 docs: add manual QA test plan
Proposed
#233 feat(editor): image captions (figcaption) with lossless markdown round-trip (#221)
Proposed
#234 feat(ai-chat): autonomous agent runs — phase 1: durable detached runs (#184)
Proposed
#242 fix(ai): show live reindex progress so the embeddings counter resets to 0 and climbs
Proposed
#248 fix(#244): two HIGH data-loss bugs — lossless markdown export + store-side empty-guard
Proposed
#249 refactor(#193): tool-host drift-guard + staged plan (shared spec registry already merged)
Proposed
#253 feat(#251): intentional-clear signal editor→store (persist deliberate clear, keep #248 guard)
Proposed
#254 fix(#252): close leftover ioredis handles so e2e jest exits cleanly (no forceExit)
Proposed
#256 fix(#255): disconnect socket.io redis-adapter pub/sub clients on shutdown
Proposed
#257 test(#244): Part B backlog — editor-ext/mcp/client/server unit+contract tests + findBreadcrumbPath mutation fix
141 Issues closed from 2 users
Closed
#229 [refactor][agent-roles-catalog] Перевод каталога ролей на YAML (instructions блок-скаляром, построчные диффы)
Closed
#243 In-memory blob-sandbox для передачи контента агентом (Docmost → Habr) + миррор картинок
Closed
#245 [test] Тест-стратегия #204: оставшиеся фазы (хвост Ф2 + Ф3 безопасность/DB-харнесс + Ф4 контракты)
Closed
#206 Отчет редтима, написать тесты, потенциально баги
Closed
#204 Тест-стратегия: аудит покрытия и план тестов (10 модулей)
Closed
#218 [bug][ui] Автотест стенда (проход #2): share-not-bound-to-shareId, new-page-empty-body, editor-read-only-window, breadcrumb-lag, page-info-leak, callout-paste
Closed
#192 [test][ai-chat] Отложенные интеграционные тесты AiChatService.stream (рефактор R1-stream)
Closed
#228 feat(footnotes): инлайновое авторство сносок + серверная канонизация (порядок/дедуп, без доступа агента к списку)
Closed
#241 [QA-trace][#184 7/7 финал] Верификация autonomous-runs: инвариант ДЕРЖИТСЯ (real z.ai) + 1 medium TOCTOU-гонка → чиню
Closed
#216 [bug][ui] Автотест стенда: 3 UI-бага (stale-editor island, flushSync warning, share includeSubPages default)
Closed
#239 [QA-trace][#221 5/7] Верификация image-captions: ФИЧА РАБОТАЕТ (0 багов) + процесс-фидбэк (verifier недо-сэмплил)
Closed
#236 [QA-trace][#119 2/7] Процесс-отчёт прогона web-test-orchestrator (git-sync) — стабильность vs прогон 1
Closed
#237 [QA-trace][#120 3/7] Процесс-отчёт web-test-orchestrator (offline-sync/PWA): агенты, SW-техника, фолс-позитивы
Closed
#235 [QA-trace][#119 1/7] Процесс-отчёт прогона web-test-orchestrator (git-sync): агенты, инструменты, фолс-позитивы
Closed
#240 [QA-trace][#228 6/7] Верификация footnotes: 🔴 ФИЧА СЛОМАНА на import-пути (канонизатор не подключён в apps/server) — чиню
Closed
#238 [QA-trace][#120 4/7] Процесс-отчёт web-test-orchestrator (offline) — дедуп-провал: 6 находок = 1 корень
Closed
#191 ИИ-чат: привязка чатов к документам (авто-открытие последнего чата документа)
Closed
#226 [bug][share] Кастомный адрес (/l/:alias) не обновляется при редактировании: Save создаёт дубликат вместо переименования
Closed
#220 [report][#120] Автотест offline-sync — подробный отчёт (PWA/офлайн: 6 багов вкл. 3 HIGH data-loss, граница WIP, мета-отчёт)
Closed
#223 [report][#119] Повторный автотест git-sync (после фиксов) — дублирование мёртво, open-editor converged; вскрыта клиентская collab-race (HIGH) + same-para conflict git-wins
Closed
#199 Фича: кнопка автогенерации названия заметки через AI
Closed
#198 AI-чат: прервать агента сообщением, сохранив частичный вывод («отправить прям щас»)
Closed
#201 [feature] «Временные заметки»: автоперенос в корзину через X часов (структурируй или умри)
Closed
#205 [feature][share] Кастомные адреса для шаринга: /l/:alias (отдельная таблица share_aliases, перенацеливаемый адрес)
Closed
#187 [test][ci] e2e на каждый коммит в develop: не блокируют deploy, уведомление по почте
Closed
#170 [feature][ai-chat] Кнопка «Test» на каждой строке списка внешних MCP-серверов (inline-статус подключения)
Closed
#189 [feature][ai-chat] Бейдж контекста в шапке: показывать «текущий / максимум»; максимум — из настроек AI
Closed
#161 [bug][ai-chat] «New chat» во время стрима первого ответа не сбрасывает чат, а лишь убирает бейдж роли
Closed
#159 [security][audit] Red-team аудит (85db20f9..HEAD): потеря страниц, утечка title шара, ИИ правит не ту страницу, кап стоимости, CI
Closed
#190 [bug][ai-chat] Tool-call валидация отдаёт модели сырое zod-сообщение вместо понятного (роняется pageId в параллельной партии)
Closed
#207 git-sync red-team #7/#8: ядро Docmost — move-TOCTOU цикл A↔B + рекурсивные CTE без cycle-guard
Closed
#219 [report] Автономное тестирование стенда — проход #2 (подробный отчёт: агенты, стадии, who-found-what, real-vs-false, улучшения процесса)
Closed
#217 [report] Автономное тестирование стенда — подробный отчёт (агенты, стадии, находки, real-vs-false, предложения)
Closed
#178 feat(ai-chat): показывать reasoning live во время фазы «думания» (до начала ответа)
Closed
#151 [feature][ai-chat] Реалтайм-счётчик токенов (включая токены размышления), как в Claude Code
Closed
#145 Обтекание картинки текстом (float image) — порт из Forkmost
Closed
#150 [feature][editor] Рекурсивная нода subpages: дерево всех страниц-детей текущей страницы
Closed
#181 [feature][ai-chat] Компактный рендеринг блока «Thinking»: схлопывать пустые строки (\n\n) в reasoning
Closed
#173 Хвосты по ревью PR #172: тот же jsonb double-encoding в jsonbObject (роли агента) + централизация и тесты
Closed
#163 [bug][ai-chat] Счётчик токенов в шапке не тикает в реальном времени между шагами агента (регрессия #151)
Closed
#164 [bug][mcp] replaceImage всё ещё дёргает курсор: mutateLiveContentUnlocked пишет деструктивно (продолжение #152)
Closed
#168 [feature][footnotes] Мульти-бэклинки: определение возвращает ко ВСЕМ своим ссылкам (продолжение #166)
Closed
#180 Фича: инструкция по работе с MCP-сервером в системном промпте агента
Closed
#183 AI-чат: персистентная история как источник истины — серверный экспорт и возобновление до конца шага
Closed
#175 ломается коннект на длинных задачах
Closed
#174 [bug][ai-chat] Нельзя скопировать незавершённое сообщение: кнопка «Copy chat» скрыта во время первого стрима нового чата
Closed
#160 [bug][ai-chat] Экспорт чата («Copy chat») теряет то, что показано на экране, когда стрим оборвался
Closed
#166 [feature][footnotes] Reuse сносок (много ссылок → одна сноска) + предупреждения о пустых/битых сносках при импорте
Closed
#152 [bug][ai-chat] Комментарии агента сбрасывают курсор в конец статьи (регрессия)
Closed
#149 [feature][ai-chat] Настраиваемый авто-запуск роли («скилла»): тумблер autoStart + поле «сообщение для запуска»
Closed
#146 bug(editor): каретка/выделение сдвигается вверх в NodeView со служебным contentEditable=false перед NodeViewContent (code block + сноски)
Closed
#139 Кандидаты на юнит-тесты (из gap-аудита QA-плана PR #136)
Closed
#140 [bug][ai-chat] z.ai (GLM-5.2 coding plan) intermittently stalls/RSTs the chat stream (UND_ERR_HEADERS_TIMEOUT / ECONNRESET)
Closed
#137 [bug][ai-chat] New chat adopts the wrong chat id under a two-tab race → turns leak into another chat
Closed
#131 [ux] Casing & terminology inconsistencies (Untitled/untitled, uppercased space names, confirm-button labels)
Closed
#130 [ux] Raw Zod validation strings shown to users ("Too small: expected string to have >=N characters")
Closed
#133 [ux] Misc polish & consistency nits (dictation message, mark-all-read, invalid-invite page, reader Share button, non-admin AI settings, avatar)
Closed
#134 [bug][ai-search] "Reindex now" counter does not update (stale until reload) — reindex runs async but the UI reads coverage once and never polls
Closed
#129 [bug][search] Spotlight rough edges: "1 results", duplicated no-results message, dead Type filter, silent empty for short queries
Closed
#127 [bug][validation] Workspace name update accepts URLs and empty values (NoUrls/min-length enforced only at setup); error message is generic
Closed
#126 [bug][ai-chat] AI chat window position/size not persisted across reload
Closed
#128 [ux] Inconsistent / missing success toasts across actions (favorites, labels, avatar, member deactivate/reactivate)
Closed
#132 [bug][console] Recurring console errors on editor load: SVG calc() width/height + share-for-page query returns undefined
Closed
#125 [bug][spaces] Space slug auto-generation produces uppercase initials for multi-word names
Closed
#124 [bug][editor] Slash command whose name contains a space (e.g. "/Heading 1") inserts literal text instead of the block
Closed
#123 [bug][collab] Uncaught jwtDecode(undefined) on collab auth failure; editor never reconnects
Closed
#122 [bug][collab] collab-token throttled by the anonymous public-share-AI limiter (5/min) → collaboration sync breaks after a few page opens
Closed
#93 arch/realtime-tree: единый restriction-aware emit + единый снапшот move-аудитории (emitTreeEvent дублирует emitCommentEvent; окно гонки на move)
Closed
#109 i18n(ai-chat): наполнить все локали строками AI-чата (сейчас только en-US, ru-RU частично)
Closed
#62 fix(share-ai): fail-closed workspace limiter + lower default cap (RT-6.3)
Closed
#90 arch/html-embed: вынести повторяющийся admin-gate strip (7 call-site) в один тестируемый хелпер
Closed
#108 test(share-ai): нет тестов на условную подпись ассистента (typing-indicator / message-item)
Closed
#106 test: cover user-provider reconnect-resync branch
Closed
#105 test: export + unit-test resolveTrustProxy (#61)
Closed
#102 test: cover movePage server-side cycle guard (#67)
Closed
#104 test: cover resolveShareAiMaxOutputTokens output-token cap (#60)
Closed
#103 test: drive the non-text message-part rejection 400 path (#63)
Closed
#100 Тесты: покрыть инъекцию trackerHead в ShareSeoController (+ no-op ветка аудита trackerHead)
Closed
#92 arch/public-share: единый ShareService.resolveReadableSharePage вместо трёх копий резолва (shareId,pageId)->страница
Closed
#94 arch/page-templates: page_template_references пишется, но не читается (мёртвая поверхность) + триплицированный sync + дубль lookup-context
Closed
#95 arch/ai-chat: завершить унификацию (live+enabled резолв роли в одном месте; describeProviderError на анонимном пути)
Closed
#99 test: покрыть тестами sandbox HTML-embed и trackerHead (ревью 81823fce..HEAD)
Closed
#91 arch/mcp-auth: устранить дрейф между enforceBasicLoginGate и AuthController.login (общий pre-token гейт или coupling-тест)
Closed
#87 public-share: share-ai-widget показывает generic «Something went wrong», игнорируя error.message (нарушает AGENTS.md и паттерн describeChatError)
Closed
#89 docs: синхронизировать AGENTS.md и README с уже зашитыми фичами (дрейф документации)
Closed
#88 ai-roles: guard от конкурентного soft-delete в update() не покрыт тестом
Closed
#85 public-share: положительная ветка getSharePage (возврат санитизированного контента анонимной модели) без тестов
Closed
#78 html-embed: комментарий обещает «fall back to raw», а catch возвращает "" (теряет данные)
Closed
#83 mcp-auth: check-then-act гонка позволяет конкурентным запросам обойти порог brute-force лимитера /mcp
Closed
#84 mcp-auth: MCP_TOKEN перенесён с Authorization: Bearer на заголовок X-MCP-Token — молча ломает существующие /mcp-клиенты (breaking)
Closed
#71 [cleanup][page-templates] Мёртвые isPageEmbedCycle/isPageEmbedTooDeep — удалить или переиспользовать в decideEmbedState
Closed
#72 ws/realtime-tree: реалтайм-переименование и смена иконки страницы не доходят до других клиентов (регрессия)
Closed
#75 test: sidebar-pages-tree.spec тестирует копию продакшен-логики; обоснование про jest-config неверно
Closed
#68 fix(ai): sandwich SAFETY_FRAMEWORK around role persona (RT-32)
Closed
#70 Null-password (SSO/LDAP-only) accounts: bcrypt throw → 500 on /api/auth/login, leaky 401 + brute-force-limiter evasion on /mcp
Closed
#66 fix(ws): resync sidebar tree on socket reconnect (RT-24)
Closed
#67 fix(page): server-side cycle check in movePage (RT-21)
Closed
#64 fix(ws): emit PAGE_MOVED only when the row actually changed (RT-26)
Closed
#63 fix(share-ai): reject non-text message parts to close size-cap bypass (RT-19)
Closed
#56 test-infra: починить jest DI + lib0 ESM (16 падающих сьютов)
Closed
#61 fix(security): make trustProxy safe so per-IP throttle can't be XFF-spoofed (RT-6.2)
Closed
#60 feat(share-ai): cap per-request output with maxOutputTokens (RT-6.1)
Closed
#55 transclusion: cycle-guard в collectPageEmbedsFromPmJson
Closed
#53 ws: restriction-cache не инвалидируется — 30-секундное окно утечки
Closed
#54 page-embed: серверный guard глубины/циклов раскрытия
Closed
#98 [test-coverage] Тесты для security-рефактора html-embed (commit 81823fce): sandbox + trackerHead
Closed
#107 docs(share-ai): сообщение коммита 18105ff описывает серверные изменения, которых нет в его диффе
Closed
#52 ai-roles: нет серверной валидации модели роли + дрейф enum драйверов
Closed
#86 public-share: инструмент listSharePages полностью без тестов
Closed
#97 test (сквозное): security-нагруженные гейты исполнения и fail-closed ветки системно не покрыты
Closed
#96 test (сквозное): анти-паттерн «спека тестирует копию продакшен-логики» + неработающие сьюты security-фич
Closed
#82 mcp-auth: тело enforceBasicLoginGate (закрытие SSO/MFA-байпаса) не покрыто тестами
Closed
#81 page-templates: catch-ветка lookupTemplate (fail-closed в not_found при битом контенте) без тестов
Closed
#80 page-templates: insertTemplateReferencesForPages (кросс-workspace guard на дублировании/импорте) без тестов
Closed
#77 html-embed: клиентский гейт исполнения JS (shouldExecute) не покрыт тестами
Closed
#79 page-templates: спеки transclusion не компилируются (TS2554, 11 vs 10 аргументов) — 0 тестов, проверки безопасности отключены
Closed
#76 collab: незащищённый workspaceRepo.findById в onStoreDocument может потерять финальное сохранение страницы
Closed
#74 ws: PageWsListener.onPageDeleted/onPageMoved/onPageRestored без тестов
Closed
#69 fix(mcp): pin Bearer workspaceId to the default workspace (RT-16)
Closed
#73 page-tree: collectAllIds/collectBranchIds (Expand/Collapse all) без тестов
Closed
#65 fix(ws): don't drop a tree node when destination parent isn't loaded (RT-28)
Closed
#29 html-embed: conservative collab strip removes admin's embed on a non-admin co-editor's store
Closed
#44 [footnotes] Слишком большой промежуток между номером и текстом определения
Closed
#27 html-embed: upgrade create/duplicate/import gate tests from source-regex to real execution
Closed
#26 html-embed: close collab broadcast window (transient embed executes in concurrent editors before persist strip)
Closed
#37 [nit][page-templates] //@ts-ignore style in duplicatePage pageEmbed remap
Closed
#36 [hardening][page-templates] Defense-in-depth: workspace checks + throttle fan-out
Closed
#35 [bug][page-templates] lookup context can strand an id in-flight on a partial server response
Closed
#34 [cleanup][page-templates] Remove or wire dead findReferencePageIdsBySource
Closed
#33 [test][page-templates] Cover lookupTemplate catch->not_found anti-leak, soft-deleted source, cap test, onlyTemplates
Closed
#32 [test][page-templates] Cover duplicatePage pageEmbed remap + template reference sync
Closed
#31 [test][page-templates] Cover client-side pageEmbed cycle / self-embed / depth guard
Closed
#40 [page-templates] Refresh эмбеда не обновляет контент (lag коллаб-персиста) + нужна матрица веб-тестов
Closed
#39 [page-templates] Дизайн узла page-embed: двойная рамка + дублирующиеся кнопки
Closed
#30 html-embed: minor hardening (strip root-node type-check; document client read-only relies solely on server strip)
Closed
#43 [bug][ai-chat] Хрупкая передача «текущей страницы» агенту: openPage всегда null + контекст только в system-промпте
Closed
#28 html-embed: complete the kill-switch — strip embeds at serve time on all read paths (not just shares)
Closed
#38 [page-templates] Помечать template-страницы значком в дереве
Closed
#42 [feature][ai-chat] Авто-сворачивание окна чата в шапку при фокусе на странице, разворот по клику
Closed
#41 Внешний (public-share) AI-чат расходится с внутренним: нет стриминга/typing — переиспользовать внутренний код
Closed
#24 mcp-per-user-auth (#13): security review follow-ups (hardening + cleanup)
155 Issues created by 3 users
Opened
#24 mcp-per-user-auth (#13): security review follow-ups (hardening + cleanup)
Opened
#28 html-embed: complete the kill-switch — strip embeds at serve time on all read paths (not just shares)
Opened
#26 html-embed: close collab broadcast window (transient embed executes in concurrent editors before persist strip)
Opened
#29 html-embed: conservative collab strip removes admin's embed on a non-admin co-editor's store
Opened
#27 html-embed: upgrade create/duplicate/import gate tests from source-regex to real execution
Opened
#30 html-embed: minor hardening (strip root-node type-check; document client read-only relies solely on server strip)
Opened
#31 [test][page-templates] Cover client-side pageEmbed cycle / self-embed / depth guard
Opened
#32 [test][page-templates] Cover duplicatePage pageEmbed remap + template reference sync
Opened
#33 [test][page-templates] Cover lookupTemplate catch->not_found anti-leak, soft-deleted source, cap test, onlyTemplates
Opened
#34 [cleanup][page-templates] Remove or wire dead findReferencePageIdsBySource
Opened
#37 [nit][page-templates] //@ts-ignore style in duplicatePage pageEmbed remap
Opened
#36 [hardening][page-templates] Defense-in-depth: workspace checks + throttle fan-out
Opened
#35 [bug][page-templates] lookup context can strand an id in-flight on a partial server response
Opened
#38 [page-templates] Помечать template-страницы значком в дереве
Opened
#39 [page-templates] Дизайн узла page-embed: двойная рамка + дублирующиеся кнопки
Opened
#40 [page-templates] Refresh эмбеда не обновляет контент (lag коллаб-персиста) + нужна матрица веб-тестов
Opened
#41 Внешний (public-share) AI-чат расходится с внутренним: нет стриминга/typing — переиспользовать внутренний код
Opened
#42 [feature][ai-chat] Авто-сворачивание окна чата в шапку при фокусе на странице, разворот по клику
Opened
#43 [bug][ai-chat] Хрупкая передача «текущей страницы» агенту: openPage всегда null + контекст только в system-промпте
Opened
#44 [footnotes] Слишком большой промежуток между номером и текстом определения
Opened
#52 ai-roles: нет серверной валидации модели роли + дрейф enum драйверов
Opened
#53 ws: restriction-cache не инвалидируется — 30-секундное окно утечки
Opened
#55 transclusion: cycle-guard в collectPageEmbedsFromPmJson
Opened
#54 page-embed: серверный guard глубины/циклов раскрытия
Opened
#56 test-infra: починить jest DI + lib0 ESM (16 падающих сьютов)
Opened
#61 fix(security): make trustProxy safe so per-IP throttle can't be XFF-spoofed (RT-6.2)
Opened
#60 feat(share-ai): cap per-request output with maxOutputTokens (RT-6.1)
Opened
#65 fix(ws): don't drop a tree node when destination parent isn't loaded (RT-28)
Opened
#63 fix(share-ai): reject non-text message parts to close size-cap bypass (RT-19)
Opened
#66 fix(ws): resync sidebar tree on socket reconnect (RT-24)
Opened
#64 fix(ws): emit PAGE_MOVED only when the row actually changed (RT-26)
Opened
#62 fix(share-ai): fail-closed workspace limiter + lower default cap (RT-6.3)
Opened
#69 fix(mcp): pin Bearer workspaceId to the default workspace (RT-16)
Opened
#67 fix(page): server-side cycle check in movePage (RT-21)
Opened
#68 fix(ai): sandwich SAFETY_FRAMEWORK around role persona (RT-32)
Opened
#70 Null-password (SSO/LDAP-only) accounts: bcrypt throw → 500 on /api/auth/login, leaky 401 + brute-force-limiter evasion on /mcp
Opened
#71 [cleanup][page-templates] Мёртвые isPageEmbedCycle/isPageEmbedTooDeep — удалить или переиспользовать в decideEmbedState
Opened
#74 ws: PageWsListener.onPageDeleted/onPageMoved/onPageRestored без тестов
Opened
#72 ws/realtime-tree: реалтайм-переименование и смена иконки страницы не доходят до других клиентов (регрессия)
Opened
#73 page-tree: collectAllIds/collectBranchIds (Expand/Collapse all) без тестов
Opened
#75 test: sidebar-pages-tree.spec тестирует копию продакшен-логики; обоснование про jest-config неверно
Opened
#78 html-embed: комментарий обещает «fall back to raw», а catch возвращает "" (теряет данные)
Opened
#76 collab: незащищённый workspaceRepo.findById в onStoreDocument может потерять финальное сохранение страницы
Opened
#77 html-embed: клиентский гейт исполнения JS (shouldExecute) не покрыт тестами
Opened
#80 page-templates: insertTemplateReferencesForPages (кросс-workspace guard на дублировании/импорте) без тестов
Opened
#79 page-templates: спеки transclusion не компилируются (TS2554, 11 vs 10 аргументов) — 0 тестов, проверки безопасности отключены
Opened
#81 page-templates: catch-ветка lookupTemplate (fail-closed в not_found при битом контенте) без тестов
Opened
#83 mcp-auth: check-then-act гонка позволяет конкурентным запросам обойти порог brute-force лимитера /mcp
Opened
#84 mcp-auth: MCP_TOKEN перенесён с Authorization: Bearer на заголовок X-MCP-Token — молча ломает существующие /mcp-клиенты (breaking)
Opened
#82 mcp-auth: тело enforceBasicLoginGate (закрытие SSO/MFA-байпаса) не покрыто тестами
Opened
#85 public-share: положительная ветка getSharePage (возврат санитизированного контента анонимной модели) без тестов
Opened
#88 ai-roles: guard от конкурентного soft-delete в update() не покрыт тестом
Opened
#87 public-share: share-ai-widget показывает generic «Something went wrong», игнорируя error.message (нарушает AGENTS.md и паттерн describeChatError)
Opened
#89 docs: синхронизировать AGENTS.md и README с уже зашитыми фичами (дрейф документации)
Opened
#86 public-share: инструмент listSharePages полностью без тестов
Opened
#90 arch/html-embed: вынести повторяющийся admin-gate strip (7 call-site) в один тестируемый хелпер
Opened
#91 arch/mcp-auth: устранить дрейф между enforceBasicLoginGate и AuthController.login (общий pre-token гейт или coupling-тест)
Opened
#94 arch/page-templates: page_template_references пишется, но не читается (мёртвая поверхность) + триплицированный sync + дубль lookup-context
Opened
#93 arch/realtime-tree: единый restriction-aware emit + единый снапшот move-аудитории (emitTreeEvent дублирует emitCommentEvent; окно гонки на move)
Opened
#92 arch/public-share: единый ShareService.resolveReadableSharePage вместо трёх копий резолва (shareId,pageId)->страница
Opened
#95 arch/ai-chat: завершить унификацию (live+enabled резолв роли в одном месте; describeProviderError на анонимном пути)
Opened
#97 test (сквозное): security-нагруженные гейты исполнения и fail-closed ветки системно не покрыты
Opened
#96 test (сквозное): анти-паттерн «спека тестирует копию продакшен-логики» + неработающие сьюты security-фич
Opened
#98 [test-coverage] Тесты для security-рефактора html-embed (commit 81823fce): sandbox + trackerHead
Opened
#99 test: покрыть тестами sandbox HTML-embed и trackerHead (ревью 81823fce..HEAD)
Opened
#100 Тесты: покрыть инъекцию trackerHead в ShareSeoController (+ no-op ветка аудита trackerHead)
Opened
#102 test: cover movePage server-side cycle guard (#67)
Opened
#103 test: drive the non-text message-part rejection 400 path (#63)
Opened
#106 test: cover user-provider reconnect-resync branch
Opened
#104 test: cover resolveShareAiMaxOutputTokens output-token cap (#60)
Opened
#105 test: export + unit-test resolveTrustProxy (#61)
Opened
#107 docs(share-ai): сообщение коммита 18105ff описывает серверные изменения, которых нет в его диффе
Opened
#108 test(share-ai): нет тестов на условную подпись ассистента (typing-indicator / message-item)
Opened
#109 i18n(ai-chat): наполнить все локали строками AI-чата (сейчас только en-US, ru-RU частично)
Opened
#122 [bug][collab] collab-token throttled by the anonymous public-share-AI limiter (5/min) → collaboration sync breaks after a few page opens
Opened
#123 [bug][collab] Uncaught jwtDecode(undefined) on collab auth failure; editor never reconnects
Opened
#124 [bug][editor] Slash command whose name contains a space (e.g. "/Heading 1") inserts literal text instead of the block
Opened
#125 [bug][spaces] Space slug auto-generation produces uppercase initials for multi-word names
Opened
#126 [bug][ai-chat] AI chat window position/size not persisted across reload
Opened
#127 [bug][validation] Workspace name update accepts URLs and empty values (NoUrls/min-length enforced only at setup); error message is generic
Opened
#128 [ux] Inconsistent / missing success toasts across actions (favorites, labels, avatar, member deactivate/reactivate)
Opened
#129 [bug][search] Spotlight rough edges: "1 results", duplicated no-results message, dead Type filter, silent empty for short queries
Opened
#130 [ux] Raw Zod validation strings shown to users ("Too small: expected string to have >=N characters")
Opened
#131 [ux] Casing & terminology inconsistencies (Untitled/untitled, uppercased space names, confirm-button labels)
Opened
#132 [bug][console] Recurring console errors on editor load: SVG calc() width/height + share-for-page query returns undefined
Opened
#133 [ux] Misc polish & consistency nits (dictation message, mark-all-read, invalid-invite page, reader Share button, non-admin AI settings, avatar)
Opened
#134 [bug][ai-search] "Reindex now" counter does not update (stale until reload) — reindex runs async but the UI reads coverage once and never polls
Opened
#137 [bug][ai-chat] New chat adopts the wrong chat id under a two-tab race → turns leak into another chat
Opened
#139 Кандидаты на юнит-тесты (из gap-аудита QA-плана PR #136)
Opened
#140 [bug][ai-chat] z.ai (GLM-5.2 coding plan) intermittently stalls/RSTs the chat stream (UND_ERR_HEADERS_TIMEOUT / ECONNRESET)
Opened
#145 Обтекание картинки текстом (float image) — порт из Forkmost
Opened
#146 bug(editor): каретка/выделение сдвигается вверх в NodeView со служебным contentEditable=false перед NodeViewContent (code block + сноски)
Opened
#149 [feature][ai-chat] Настраиваемый авто-запуск роли («скилла»): тумблер autoStart + поле «сообщение для запуска»
Opened
#150 [feature][editor] Рекурсивная нода subpages: дерево всех страниц-детей текущей страницы
Opened
#151 [feature][ai-chat] Реалтайм-счётчик токенов (включая токены размышления), как в Claude Code
Opened
#152 [bug][ai-chat] Комментарии агента сбрасывают курсор в конец статьи (регрессия)
Opened
#153 Идея: near-realtime синк с Obsidian на мобильных через LiveSync (CouchDB), поверх git-sync
Opened
#159 [security][audit] Red-team аудит (85db20f9..HEAD): потеря страниц, утечка title шара, ИИ правит не ту страницу, кап стоимости, CI
Opened
#160 [bug][ai-chat] Экспорт чата («Copy chat») теряет то, что показано на экране, когда стрим оборвался
Opened
#161 [bug][ai-chat] «New chat» во время стрима первого ответа не сбрасывает чат, а лишь убирает бейдж роли
Opened
#163 [bug][ai-chat] Счётчик токенов в шапке не тикает в реальном времени между шагами агента (регрессия #151)
Opened
#164 [bug][mcp] replaceImage всё ещё дёргает курсор: mutateLiveContentUnlocked пишет деструктивно (продолжение #152)
Opened
#166 [feature][footnotes] Reuse сносок (много ссылок → одна сноска) + предупреждения о пустых/битых сносках при импорте
Opened
#168 [feature][footnotes] Мульти-бэклинки: определение возвращает ко ВСЕМ своим ссылкам (продолжение #166)
Opened
#170 [feature][ai-chat] Кнопка «Test» на каждой строке списка внешних MCP-серверов (inline-статус подключения)
Opened
#173 Хвосты по ревью PR #172: тот же jsonb double-encoding в jsonbObject (роли агента) + централизация и тесты
Opened
#174 [bug][ai-chat] Нельзя скопировать незавершённое сообщение: кнопка «Copy chat» скрыта во время первого стрима нового чата
Opened
#175 ломается коннект на длинных задачах
Opened
#178 feat(ai-chat): показывать reasoning live во время фазы «думания» (до начала ответа)
Opened
#180 Фича: инструкция по работе с MCP-сервером в системном промпте агента
Opened
#181 [feature][ai-chat] Компактный рендеринг блока «Thinking»: схлопывать пустые строки (\n\n) в reasoning
Opened
#183 AI-чат: персистентная история как источник истины — серверный экспорт и возобновление до конца шага
Opened
#184 Идея: автономные агенты — серверные раны, отвязанные от окна браузера (event-sourced)
Opened
#187 [test][ci] e2e на каждый коммит в develop: не блокируют deploy, уведомление по почте
Opened
#188 заметки о инструментах (действий не требует, копится обратная связь)
Opened
#189 [feature][ai-chat] Бейдж контекста в шапке: показывать «текущий / максимум»; максимум — из настроек AI
Opened
#190 [bug][ai-chat] Tool-call валидация отдаёт модели сырое zod-сообщение вместо понятного (роняется pageId в параллельной партии)
Opened
#191 ИИ-чат: привязка чатов к документам (авто-открытие последнего чата документа)
Opened
#192 [test][ai-chat] Отложенные интеграционные тесты AiChatService.stream (рефактор R1-stream)
Opened
#193 [refactor][ai-chat] Дублирование определений инструментов (in-app агент vs standalone MCP) + дублирование конвертера PM↔Markdown
Opened
#194 [feature][epic] Git-sync: двусторонняя синхронизация страниц Docmost ↔ git-папка Markdown (встраивание docmost-sync)
Opened
#195 [feature][epic] Мобильное приложение (iOS-first, Capacitor) + offline-режим и синхронизация (PWA / outbox / Yjs)
Opened
#196 [feature][editor] Множественные курсоры (multi-cursor editing): MVP «выделить все вхождения + одновременный ввод»
Opened
#198 AI-чат: прервать агента сообщением, сохранив частичный вывод («отправить прям щас»)
Opened
#199 Фича: кнопка автогенерации названия заметки через AI
Opened
#201 [feature] «Временные заметки»: автоперенос в корзину через X часов (структурируй или умри)
Opened
#204 Тест-стратегия: аудит покрытия и план тестов (10 модулей)
Opened
#205 [feature][share] Кастомные адреса для шаринга: /l/:alias (отдельная таблица share_aliases, перенацеливаемый адрес)
Opened
#206 Отчет редтима, написать тесты, потенциально баги
Opened
#207 git-sync red-team #7/#8: ядро Docmost — move-TOCTOU цикл A↔B + рекурсивные CTE без cycle-guard
Opened
#216 [bug][ui] Автотест стенда: 3 UI-бага (stale-editor island, flushSync warning, share includeSubPages default)
Opened
#217 [report] Автономное тестирование стенда — подробный отчёт (агенты, стадии, находки, real-vs-false, предложения)
Opened
#219 [report] Автономное тестирование стенда — проход #2 (подробный отчёт: агенты, стадии, who-found-what, real-vs-false, улучшения процесса)
Opened
#218 [bug][ui] Автотест стенда (проход #2): share-not-bound-to-shareId, new-page-empty-body, editor-read-only-window, breadcrumb-lag, page-info-leak, callout-paste
Opened
#220 [report][#120] Автотест offline-sync — подробный отчёт (PWA/офлайн: 6 багов вкл. 3 HIGH data-loss, граница WIP, мета-отчёт)
Opened
#221 Feature: подписи к изображениям (image captions)
Opened
#223 [report][#119] Повторный автотест git-sync (после фиксов) — дублирование мёртво, open-editor converged; вскрыта клиентская collab-race (HIGH) + same-para conflict git-wins
Opened
#226 [bug][share] Кастомный адрес (/l/:alias) не обновляется при редактировании: Save создаёт дубликат вместо переименования
Opened
#228 feat(footnotes): инлайновое авторство сносок + серверная канонизация (порядок/дедуп, без доступа агента к списку)
Opened
#229 [refactor][agent-roles-catalog] Перевод каталога ролей на YAML (instructions блок-скаляром, построчные диффы)
Opened
#235 [QA-trace][#119 1/7] Процесс-отчёт прогона web-test-orchestrator (git-sync): агенты, инструменты, фолс-позитивы
Opened
#236 [QA-trace][#119 2/7] Процесс-отчёт прогона web-test-orchestrator (git-sync) — стабильность vs прогон 1
Opened
#237 [QA-trace][#120 3/7] Процесс-отчёт web-test-orchestrator (offline-sync/PWA): агенты, SW-техника, фолс-позитивы
Opened
#238 [QA-trace][#120 4/7] Процесс-отчёт web-test-orchestrator (offline) — дедуп-провал: 6 находок = 1 корень
Opened
#239 [QA-trace][#221 5/7] Верификация image-captions: ФИЧА РАБОТАЕТ (0 багов) + процесс-фидбэк (verifier недо-сэмплил)
Opened
#240 [QA-trace][#228 6/7] Верификация footnotes: 🔴 ФИЧА СЛОМАНА на import-пути (канонизатор не подключён в apps/server) — чиню
Opened
#241 [QA-trace][#184 7/7 финал] Верификация autonomous-runs: инвариант ДЕРЖИТСЯ (real z.ai) + 1 medium TOCTOU-гонка → чиню
Opened
#243 In-memory blob-sandbox для передачи контента агентом (Docmost → Habr) + миррор картинок
Opened
#244 [bug+test] Остаток после QA/тестов: 2 бага потери данных (#206) + оставшиеся фазы тест-стратегии (#204)
Opened
#245 [test] Тест-стратегия #204: оставшиеся фазы (хвост Ф2 + Ф3 безопасность/DB-харнесс + Ф4 контракты)
Opened
#246 [feature][editor] Инлайновый спойлер (скрытый текст, Telegram/Discord-стиль): mark + клик-раскрытие + lossless Markdown
Opened
#247 Слепки в историю по Save/по простою (вместо эвристики) + матчинг с агентами + share сохранённых версий
Opened
#251 feat(collab): провести сигнал намеренной очистки (intentionalClear) от редактора до store
Opened
#252 [bug][ci] e2e-server в Develop виснет до лимита 6ч — jest не завершается (открытые хендлы AppModule)
Opened
#255 [bug] ws-redis.adapter pub/sub clients never disconnected (latent ioredis handle leak)