117 Commits

Author SHA1 Message Date
Andrey Epifancev
bc69d5087a wiki: синхронизация — пачки страниц, копия, поиск (#91)
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-24 02:22:15 +04:00
Andrey Epifancev
97e59c1cc6 wiki: перевод HTML Eva — правки ревью 2 Task 6 (#91)
Двойное экранирование текста ссылки на страницу убрано; «@» больше не
экранируется. Ссылку на вложение выдаёт только конвертер (внутренний маркер),
авторское «attachment:@» в тексте, атрибутах, коде и именах нейтрализуется,
схема attachment: у ссылок и картинок автора не выводится.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-24 02:10:56 +04:00
Andrey Epifancev
d8ebdf57b1 wiki: перевод HTML Eva — правки ревью Task 6 (#91)
Схемы javascript:/data:/vbscript: в ссылках не выводятся; имя вложения и текст
ссылки экранируются (скобки, @, переводы строк); fill_ids меняет только
](attachment:@N) и поднимает ValueError вне диапазона; «<» в тексте — &lt;;
attachments/links = None трактуются как пустые списки.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-24 02:05:02 +04:00
Andrey Epifancev
c80423d5cd wiki: перевод HTML Eva в Markdown (#91)
convert.to_markdown: вложения по ref (картинка и миниатюра+файл — одна ссылка),
ссылки на страницы DOC-… → page:<код>, static/ удаляются, сырого HTML нет.
convert.fill_ids подставляет id вложений вместо attachment:@<n>.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-24 01:59:55 +04:00
Andrey Epifancev
4ea287fbdf Модуль wiki: корень проекта, команды, фоновая синхронизация (#91)
Каркас модуля wiki: схема (wiki_project, wiki_page, wiki_attachment, wiki_sync_stage), настройки,
поле проекта wiki_root с хуками создания и правки, команды wiki_sync и wiki_fetch,
фоновая синхронизация. Зависимость markdownify>=1.2.3.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-24 01:53:31 +04:00
Andrey Epifancev
9534e1385a Task 3: author в PATCH, ответ POST по спеке, проверка editable-полей (#91)
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-24 01:33:03 +04:00
Andrey Epifancev
c9688c036b Поля проекта от модулей, доски — в модуль jira (#91)
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-24 01:24:33 +04:00
Andrey Epifancev
7ab031a064 Релиз: повторяемая миграция раскладки, права 0700 на release/ (#91)
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-24 01:08:10 +04:00
Andrey Epifancev
3f4c9183b8 Очередь, релиз и статус по агенту модуля (#91)
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-24 00:59:49 +04:00
Andrey Epifancev
43c43ade81 Миграция v7: токены и статус по агентам модулей (#91)
tokens -> {client, agents: {модуль: токен}}, agent_status по агентам
(ключ agent, last_call_at), настройки агента и маршруты agent-scope по
модулю токена, min_agent_version переехал в модуль jira.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-24 00:45:44 +04:00
Andrey Epifancev
2673bac5d8 docs: ядро и модули хаба; тест границы ядра (#87)
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-23 23:20:06 +04:00
Andrey Epifancev
6d1e595875 refactor: MCP и CLI по модулям; jira-hub mcp [модуль] (#87)
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-23 22:51:11 +04:00
Andrey Epifancev
751ae885db test: тик убирает downloads/ раз в сутки (#87)
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-23 22:41:27 +04:00
Andrey Epifancev
0bafff9bc4 refactor: HTTP — сервер ядра, маршруты модуля jira (#87)
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-23 22:32:51 +04:00
Andrey Epifancev
bc4e8a288f test: оценка пакета на реальном модуле jira вместо commands.estimate (#87)
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-23 22:23:00 +04:00
Andrey Epifancev
c9ac2d5238 refactor: очередь ядра и обработчики команд модуля jira (#87)
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-23 22:15:42 +04:00
Andrey Epifancev
01daaa8638 refactor: контракт модуля, реестр, схема и настройки по модулям (#87)
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-23 22:01:06 +04:00
Andrey Epifancev
6d7aebe01c refactor: пакеты core и modules.jira — перенос без логики (#87)
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-23 21:50:23 +04:00
Andrey Epifancev
808d7b710c test: эталоны внешнего поведения перед перестройкой (#87)
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-23 21:39:25 +04:00
Andrey Epifancev
62057606c0 Правки финального ревью: ссылки на вложения, размер, 413 в пакетах, имя копии, документация (#83)
I-1 I-2 M-1 M-2 M-3 M-5 M-6 M-7 T3.4 T4.3

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-22 15:14:40 +04:00
Andrey Epifancev
3ad63886a7 MCP: вложения в issue и comment, инструмент attachment (#83)
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-22 14:43:59 +04:00
Andrey Epifancev
5fdcc50451 API: MIME вложения только ASCII, иначе octet-stream (#83)
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-22 14:39:59 +04:00
Andrey Epifancev
722393daf9 API вложений: файл от агента, скачивание, уборка копий (#83)
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-22 14:34:10 +04:00
Andrey Epifancev
90749012f0 Команда fetch_attachment: постановка, выдача, приём результата (#83)
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-22 14:25:58 +04:00
Andrey Epifancev
b5adfdf9b5 Вложения в карточке задачи: ссылки из текста и состояние (#83)
Модуль attachments (fmt_size, ref_names, resolve, state, get); mirror.get_issue
отдаёт attachments, description_attachment_ids, attachment_ids комментариев
и скрывает fetch_attachment из commands.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-22 14:18:59 +04:00
Andrey Epifancev
4f78c27984 Схема v6: список вложений задач в зеркале (#83)
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-22 14:10:35 +04:00
Andrey Epifancev
352d8bba5e feat(mcp): инструмент comment — комментарий задачи целиком (#80)
issue показывает у каждого из 5 последних комментариев номер «#<comment_id>»
(текст по-прежнему до 300 символов); comment(key, comment_id) отдаёт один
комментарий целиком — автор, создан/изменён, полный текст с переносами строк.
Данные — из GET /issues/{key}, новый маршрут API не нужен. Спека mcp и README.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-22 13:18:59 +04:00
Andrey Epifancev
c6a5ef15b3 Лента: крайние даты не роняют хаб, время без смещения — 422 в API и местное в MCP (#70, M-1, M-2)
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-22 10:50:26 +04:00
Andrey Epifancev
a27ebc9586 MCP: лента изменений, история в issue, журнал в sync_log (#70)
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-22 10:23:39 +04:00
Andrey Epifancev
337e36f1a0 Лента изменений GET /changes и история задачи (#70)
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-22 10:15:23 +04:00
Andrey Epifancev
e3649a1a38 Отметка журнала: history в refresh, sync_run.history_at (#70)
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-22 10:12:16 +04:00
Andrey Epifancev
f0590ac9ea Приём журнала изменений: POST /agent/history (#70)
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-22 10:08:29 +04:00
Andrey Epifancev
dc9419fbb9 Схема v5: issue_change, время комментариев в UTC (#70)
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-22 10:05:53 +04:00
Andrey Epifancev
1f2fc142b7 fix(hub): метки проектов в базовой JQL в кавычках, запрет \ и управляющих символов (I-2, #61)
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-19 22:55:05 +04:00
Andrey Epifancev
ec4fb8b1e7 Исправления финального ревью: тип доски нового проекта, нормализация labels_add, документация (#61)
I-1: boards() отдаёт type=null, если тип неизвестен у любого проекта доски.
M-2: labels_add ensure_fields нормализуется к метке проекта. M-3: light_list
вместо list_projects в _assign_boards. M-4/T5.4: пустой project — 422.
M-1, M-5, T10.1-T10.7: README, ARCHITECTURE, CLAUDE.md, design.md (49-51), e2e.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-19 22:06:41 +04:00
Andrey Epifancev
1b441b79a5 Чистка находок ревью задач: типы досок в любом статусе, мелкие правки тестов и веб-приложения (#61)
R-3/T6.1 типы досок из результата refresh пишутся в любом статусе отчёта; T5.1, T3.1 (author), T3.2, T2.1, T2.2, T7.2,
T8.1, T8.2 (ошибка фонового рефетча проектов не сносит страницу), T8.4 (окно «Новый проект» не закрывается во время
создания). Решения 22, 27 переписаны, добавлено 36 в design.md.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-19 21:41:22 +04:00
Andrey Epifancev
c8741be309 MCP: привязка сессии к проекту (--project), инструменты projects и project_create (#61)
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-19 21:09:19 +04:00
Andrey Epifancev
e2e63dab23 Хаб: доска проекта в ensure_sprint, boards в выдаче refresh, типы досок из отчёта агента (#61)
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-19 20:58:39 +04:00
Andrey Epifancev
6d5c40b037 Хаб: пакет проекта — метка проекта, чужие метки и задачи, batch.project, повтор с project (#61)
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-19 20:49:08 +04:00
Andrey Epifancev
63972572fd Хаб: разрез по проекту — свои, соседи по связям и эпики своих в /board и /issues (#61)
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-19 20:39:10 +04:00
Andrey Epifancev
f60aecd889 Хаб: маршруты GET/POST /projects, создание проекта ставит полный refresh (#61)
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-19 20:31:19 +04:00
Andrey Epifancev
203c7e7b3c Хаб: базовая JQL из проектов, настройки без base_jql/board_id, init заводит AWPCA (#61)
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-19 20:25:04 +04:00
Andrey Epifancev
b9f5a24512 Хаб: таблица project, схема v4 и миграция base_jql в проекты (#61)
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-19 20:14:23 +04:00
Andrey Epifancev
0abed70f44 Хаб: настройка closed_statuses и фильтр GET /issues?hide_closed (#57)
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-17 11:31:55 +04:00
Andrey Epifancev
2e98ce6062 fix(files): повторная загрузка лечит испорченную копию того же размера (M-2, #43)
put сверяет sha256 копии на диске при совпадении размера и переписывает испорченную; design.md: решение 13 уточнено, рулинги R-3…R-5 — решения 21–23 (M-5 финального ревью).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-16 02:05:45 +04:00
Andrey Epifancev
4e397b563d feat(mcp): batch_create принимает path у ensure_attachment и сам загружает файл (#43)
Все файлы пакета читаются до загрузки: «файл не найден: <path>», «у ensure_attachment либо path, либо file», больше 10 МБ — до POST /files; filename по умолчанию — имя файла; описание batch_create говорит про path (решение 19). design.md: решение 20 (R-2).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-16 01:51:44 +04:00
Andrey Epifancev
9b21060d60 feat(commands): команда ensure_attachment — проверка файла при постановке, size при выдаче (#43)
SPEC ensure_attachment {key, file, filename}, пауза 30 с, по состоянию не подтверждается; queue._check_setup: формат file, файл загружен («файл <sha> не загружен: POST /files»), filename без / и \, без кавычек и управляющих символов (R-2); claim, довыдача и GET /agent/commands/{id} дописывают size (null без файла), в базе params без size, retry проходит (решения 17–18).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-16 01:46:14 +04:00
Andrey Epifancev
e8707d4762 feat(api): POST /files и GET /agent/files/{sha256}, files/ 0700 при старте, уборка в tick раз в сутки (#43)
Не base64 — 400 bad_request, пустой — 422 empty_file, больше 10 МБ — 413 too_large; агенту — {file, size, content} в base64, нет файла — 404 no_file; уборка отдельно от автообновления (решения 14–16).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-16 01:41:54 +04:00
Andrey Epifancev
19bba60cac feat(files): хранилище файлов вложений files/<sha256> с уборкой (#43)
put — атомарно (mkstemp, fsync, os.replace), одна копия на содержимое, mtime при повторе, предел 10 485 760 байт, пустой — отказ; path/exists/size/read только для sha из 64 hex; sweep — старше 30 дней без ensure_attachment в queued/claimed (решения 10–13).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-16 01:38:31 +04:00
Andrey Epifancev
3b4cf66b77 feat(commands): тип bug в ensure_issue — проверка настройки issue_types.bug при постановке (#43)
validate принимает task|epic|bug; queue._check_setup отвергает bug без issue_types.bug с name или id (422 «команда N: нет настройки issue_types.bug»); init берёт bug из issue_type_bug/issue_type_bug_id, только если ключи есть (решение 9). Спека hub-api: уборка файлов раз в сутки в пределах процесса (R-1).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-16 01:35:56 +04:00