Маршруты GET /wiki/changes, /wiki/pages/{code}/versions, /wiki/pages/{code}/diff;
у страницы — modified_at, modified_by, versions; у состояния — history_at.
Дифф режется по 20 000 символов, фильтр автора без учёта регистра в Python.
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
- schema: wiki_version, wiki_version_stage, wiki_history (без миграций, IF NOT EXISTS)
- history.utc: время версии в UTC; без смещения или не строка — None
- convert.to_markdown(file_links=False): вложение текстом «📎 имя», список файлов пуст
- stage.accept_versions + POST /agent/wiki/versions (agent wiki): проверка формы, перевод вне транзакции
- эталоны baseline (routes, schema) и документы: design.md (П-1…П-12), ARCHITECTURE.md
Co-Authored-By: Claude Haiku 5.5 <noreply@anthropic.com>
I-1 (R-8): ensure_fields с полем из одних пробелов даёт 422, очистка только "" или null.
I-2: agent_view не падает на нецифровой версии агента (GET /agent, /agents).
I-3 (R-9): files.size через fstat у открытого файла, _intact ловит OSError, put переписывает нечитаемый файл.
M-2: /agent/state отвергает пустые не-списки в issues.
T2.1, T3.1, T4.1-T4.3, T5.2, T6.1, T1.5: тесты и мелкие правки.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
OBSOLETE расширен ключами base_jql и board_id: ensure_defaults убирает их при каждом открытии, миграция v7 -> v8 тоже.
settings_version не растёт. PUT /settings для этих ключей по-прежнему отвечает 422 с пояснением. Тест миграции v3
обновлён: после миграции ключей в настройках нет (проекты уже созданы из них).
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Хаб дописывает board_id доски проекта задачи в ensure_fields со story_points — как в
ensure_sprint; свои тексты 422 для канбана и задачи вне проектов; повтор берёт доску заново.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
I-1, I-2 финального ревью: старые MCP-сессии возвращали status_labels/transitions_map
после миграции; окно до kickstart описано для v8.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
После переименования в Gitea старый адрес по SSH отвечает «Cannot find
repository» (T6.2 подтвердилось): preflight сверяет main по адресу
aep/sdlc-hub, derive_remote принимает уже сменённый origin; README —
сменить origin сразу после переименования.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Редактор Eva (TinyMCE) сохраняет в HTML страницы блок table-row-controls (номер
строки, «+», точка); markdownify превращал его в абзацы «№», «1», «2»… перед
таблицей. Блок удаляется целиком до конвертации; карточки вложений с тем же
классом mceNonEditable остаются.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Тест границы test_core_has_no_module_terms; ARCHITECTURE/CLAUDE/README; дельта-спека о хуках before_result/abort_result.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
fmt_agent, safe_name и store_copy вынесены в core/mcp.py; сервер jira их переэкспортирует, тексты вывода не менялись.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Двойное экранирование текста ссылки на страницу убрано; «@» больше не
экранируется. Ссылку на вложение выдаёт только конвертер (внутренний маркер),
авторское «attachment:@» в тексте, атрибутах, коде и именах нейтрализуется,
схема attachment: у ссылок и картинок автора не выводится.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Схемы javascript:/data:/vbscript: в ссылках не выводятся; имя вложения и текст
ссылки экранируются (скобки, @, переводы строк); fill_ids меняет только
](attachment:@N) и поднимает ValueError вне диапазона; «<» в тексте — <;
attachments/links = None трактуются как пустые списки.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>