Skip to content

merge#125

Merged
mimfort merged 36 commits into
mainfrom
dev
Jul 23, 2026
Merged

merge#125
mimfort merged 36 commits into
mainfrom
dev

Conversation

@mimfort

@mimfort mimfort commented Jul 23, 2026

Copy link
Copy Markdown
Owner

merge

mimfort and others added 30 commits July 20, 2026 20:09
feat(mcp): keepalive сессии ревью — живость по последней активности (PRI-212)
feat: directed session-less тул implementations (входящие IMPLEMENTS) — PRI-179
…own → HTML (PRI-213)

md_to_html вставлял URL из markdown-ссылки в href после html.escape, что не
защищает от опасных схем (не HTML-метасимволы). Ссылка вне белого списка
http(s)/mailto теперь деградирует в исходный текст вместо активного <a href>.
…I-213)

Второй GET /tasks/{uuid} в YougileBoard.create резолвит проектный код
(PRI-N). При сетевом сбое деградация до uuid сопровождалась warning'ом,
а при успешном 200-ответе без поля idTaskProject — нет: пользователь
получал ссылку на внутренний uuid без объяснения причины.
Если POST /issues вернул 200 без idReadable, YouTrackBoard.create молча
считал создание успешным и так же молча не применял запрошенный target —
теперь оба случая явно попадают в warnings.

Заодно вынесен общий хелпер _resolve_project_id (create и
_admin_status_fields резолвили project→id идентичным запросом) и уточнён
контракт target_resolved в Protocol.create: семантика truthiness различается
между YouGile (всегда непустой title колонки, в т.ч. как fallback) и
YouTrack (None и при незапрошенном target, и при неудачном резолве) —
потребитель должен сравнивать с запрошенным target, а не проверять на
truthiness.
…I-213)

MCPReviewService.create_task резолвит провайдера доски (по board_type или
единственному настроенному), собирает канонический markdown через
TaskDoc/render_markdown, зовёт provider.create и переиндексирует созданную
задачу write-through (fetch_one → normalize → index_task), как finish_task.
Fail-soft: сбой создания — словарь с ошибкой, сбой реиндекса — warning
без падения вызова. Зарегистрирован одноимённый MCP-тул в mcp_server.py.
mimfort and others added 6 commits July 23, 2026 18:43
fetch_one раньше уходил сетевым запросом с пустой строкой (ключ YouTrack
без idReadable) и полагался на общий except; теперь явный guard пропускает
запрос и логирует причину. Добавлены зеркальные finish_task fail-soft
тесты write-through для create_task (пустой ключ и сбой fetch_one).
…адач (PRI-213)

Обычный sync_board инкрементален по watermark: задачи с timestamp <= курсора
идут через дешёвый meta-refresh, минуя полную нормализацию. После смены
normalize_yougile (markdown вместо HTML) старые задачи так и остались бы с
HTML в сторе. force_renormalize=True на один прогон отключает watermark-гейт
для всех задач провайдера — каждая проходит полный normalize → index_batch;
курсор по-прежнему продвигается на max_ts, следующий обычный синк снова
инкрементален.
feat(tasks): создание задач на досках YouGile/YouTrack (PRI-213)
@mimfort
mimfort merged commit 09379c8 into main Jul 23, 2026
2 of 5 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant