220 Commits

Author SHA1 Message Date
Andrey Epifancev
1d7a82a5c0 feat(web): карточка — описание и комментарии в разметке Jira, кнопка «исходник» (#53)
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-17 01:08:06 +04:00
Andrey Epifancev
3fe820d195 feat(web): WikiText — рендер вики-разметки Jira React-элементами, исходник при ошибке (#53)
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-17 01:06:18 +04:00
Andrey Epifancev
bd042f0d17 feat(web): блочный разборщик вики-разметки Jira (#53)
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-17 01:05:12 +04:00
Andrey Epifancev
cfeb5de59c feat(web): строчный разборщик вики-разметки Jira (#53)
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-17 01:03:45 +04:00
Andrey Epifancev
edaa3a5b90 docs(plan): ветка в шапке плана (#53)
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-17 01:02:37 +04:00
Andrey Epifancev
5edae621c2 docs(plan): рендер вики-разметки Jira в карточке (#53)
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-17 01:02:01 +04:00
Andrey Epifancev
2fe9518d01 docs(openspec): change wiki-render — рендер вики-разметки Jira в карточке (#53)
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-17 00:59:47 +04:00
aep
86739cfcf8 Merge pull request 'README: пути после переноса в ~/projects/jira-bridge (#50)' (#51) from docs/50-move-to-jira-bridge into main 2026-10-16 11:44:33 +03:00
Andrey Epifancev
3e963ce4bf docs(readme): пути после переноса в ~/projects/jira-bridge, MCP в user scope (#50)
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-16 12:42:37 +04:00
aep
59764c37f0 Merge pull request 'Архив OpenSpec: bug-and-attachments (#43)' (#48) from chore/43-archive-bug-and-attachments into main 2026-10-16 09:11:33 +03:00
Andrey Epifancev
f924153596 docs(openspec): архив change bug-and-attachments (#43)
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-16 10:10:59 +04:00
aep
ee1e240396 Merge pull request 'Тип «Ошибка» и вложения: хранилище файлов, ensure_attachment, path в MCP (#43)' (#47) from feat/43-bug-and-attachments into main 2026-10-16 09:10:12 +03:00
Andrey Epifancev
87d28a9f24 docs(openspec): таблица команд — filename без кавычек и управляющих символов (R-2, #43)
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-16 02:07:00 +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
Andrey Epifancev
a8672cf7c0 docs(plan): план хаба bug-and-attachments (#43)
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-16 00:06:42 +04:00
Andrey Epifancev
d327a0488d docs(openspec): change bug-and-attachments — тип «Ошибка» и вложения (#43)
Дельты commands, hub-api, mcp, data-model, agent: issue_type bug с настройкой
issue_types.bug, хранилище файлов хаба (POST /files, GET /agent/files/{sha256}),
команда ensure_attachment, path в MCP batch_create, агент v11; заодно R-1
(#46) и M-1/M-2 из aep/jira-agent#30.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-15 23:42:21 +04:00
aep
68de173c24 Merge pull request 'MCP batch_create: параметры команд в описании и в ошибке 422 (#44)' (#45) from feat/44-mcp-param-hints into main 2026-10-15 22:16:50 +03:00
Andrey Epifancev
1a66aea2de feat(mcp): параметры команд в описании batch_create и в ошибках 422 (#44)
Описание MCP-инструмента batch_create собирается из SPEC (commands.describe):
обязательные и необязательные параметры каждого типа с подсказками формата
(hints) и условием на набор (note). Ошибки validate «нет …» и «лишние
параметры …» называют ожидаемый набор параметров типа.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-15 23:13:14 +04:00
aep
ce9f5a1894 Merge pull request 'docs(openspec): архив issue-card-modal (#37)' (#41) from chore/37-archive-issue-card-modal into main 2026-10-15 14:32:41 +03:00
Andrey Epifancev
ccaba7f4bd docs(openspec): архив issue-card-modal (#37)
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-15 15:32:29 +04:00
aep
2ab455731b Merge pull request 'Карточка задачи окном и комментарии из Jira (#37)' (#40) from feat/37-issue-card-modal into main 2026-10-15 14:31:51 +03:00
Andrey Epifancev
d749db27e8 fix(web): ручной проход карточки — «факт:» у статуса по факту, без обрезка 9-й строки описания, заметки на ширину колонки (O-4…O-6, #37)
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-15 15:23:42 +04:00
Andrey Epifancev
16835abbf8 fix(web): выделение текста, отпущенное за краем окна, не закрывает карточку (I-2); спека: перезагрузка сохраняет страницу под окном (I-1) (#37)
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-15 15:17:33 +04:00
Andrey Epifancev
901a2c1cb7 docs(openspec): R-7 в proposal, требовании «Служебные заметки» и design 15 — доска не показывает заметку (#37)
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-15 15:03:36 +04:00
Andrey Epifancev
9655ca4847 Правки minor-находок ревью Task 6 (T6.1-T6.4)
- T6.1: e2e «описание свёрнуто» проверяет scrollHeight > clientHeight и рост высоты pre после «развернуть»
- T6.2: e2e заметки из окна сверяет scrollY после закрытия окна с исходным
- T6.3: тест переименован, добавлен маркер на DOM-узле карточки (узел не пересоздан)
- T6.4: исправлен разорванный абзац в ARCHITECTURE.md

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-15 13:29:57 +04:00
Andrey Epifancev
62f6d8a11f Волна minor-находок карточки: tsbuildinfo, depth, closingDirect, имя окна, key связей
- T3.3/T4.6/O-2: *.tsbuildinfo в .gitignore
- T3.4: cardState принимает depth только целым неотрицательным, иначе 0
- T4.1: отказ от закрытия («Остаться») сбрасывает closingDirect через CloseAbortContext
- T4.4: у <dialog> запасное имя aria-label = ключ задачи (загрузка, 404, ошибка)
- T5.1: проверка закрытия формы заметки в тесте T14.1
- T5.3: уникальный key строки связи (индекс + ключ + тег)

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-15 13:28:34 +04:00
Andrey Epifancev
fd63335e5b docs(openspec): R-7 — сценарий «заметка видна на доске» по фактическому поведению доски (#37)
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-15 13:26:08 +04:00
Andrey Epifancev
e475a8afc1 test(web): e2e окна карточки, тестовый хаб с комментариями и командами; README (#37)
Раскладка карточки: в одну колонку (уже 900 px) колонки растягиваются на всю
ширину (align-items: stretch), порог — 899.98px.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-15 13:25:44 +04:00
Andrey Epifancev
102cef4125 feat(web): раскладка карточки — шапка состояния, связи по смыслу, комментарии, заметки в режиме чтения (#37)
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-15 13:14:39 +04:00
Andrey Epifancev
87db9720f9 docs(openspec): рулинг R-6 по адаптации тестов Task 4 (#37)
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-15 13:11:11 +04:00
Andrey Epifancev
10285371b2 feat(web): карточка задачи окном поверх списка и доски (#37)
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-15 13:09:20 +04:00
Andrey Epifancev
092e7b32ed feat(web): данные карточки — комментарии, группы связей, просрочка, состояние окна (#37)
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-15 13:06:49 +04:00
Andrey Epifancev
a03550f079 feat(hub): проверка комментариев в POST /agent/state (422 bad_state), комментарии в MCP issue (#37)
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-15 13:04:55 +04:00
Andrey Epifancev
88a6f72b13 feat(hub): комментарии задач в зеркале, схема v3; темы и статусы связанных в карточке (#37)
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-15 13:00:53 +04:00
Andrey Epifancev
9484d10d0b docs: план issue-card-modal (#37); уточнения design 5, 10–13, 25
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-15 12:52:09 +04:00
Andrey Epifancev
590e15e0e0 docs(openspec): change issue-card-modal — карточка задачи окном, комментарии из Jira (#37)
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-15 12:18:35 +04:00
aep
13e6c167a4 Merge pull request 'docs(openspec): архив hub-hygiene-d (#32)' (#38) from chore/32-archive-hub-hygiene-d into main 2026-10-15 10:04:51 +03:00
Andrey Epifancev
6a9f793748 docs(openspec): архив hub-hygiene-d (#32)
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-15 11:04:39 +04:00
aep
cbc86becca Merge pull request 'Пакет D хаба (#32)' (#36) from feat/32-hub-hygiene into main 2026-10-15 10:04:23 +03:00
Andrey Epifancev
0cf71e7792 Merge branch 'main' into feat/32-hub-hygiene
Конфликт pyproject.toml: оставлены обе секции — filterwarnings (hub-hygiene-d, решение 14)
и [tool.uv] python-preference (#29). Рулинги R-14 (переписан), R-15, R-16 в design.md.
318 passed, 0 warnings.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-15 11:01:16 +04:00
Andrey Epifancev
bc377eda2c docs: финальное ревью — M-2, M-3, M-4/T2.5, M-5, R-13, R-14 (#32)
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-15 10:56:51 +04:00
Andrey Epifancev
7d3f648d2c fix: финальное ревью — M-1/T3.1 атомарная подмена agent_update, T1.1/T1.2 open_db, T2.3, T4.1 (#32)
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-15 10:56:51 +04:00
Andrey Epifancev
1f1dad6911 test: bool и [] в параметрах, журнал при пределе выдач, 501, эпик без ключа, «подготовлена заново», предупреждение и офлайн агента, тик (T3.2, T5.2, M-8, minor-3 #16; M-10 #4) (#32)
Решение 13: тесты фиксируют уже верное поведение; каждый проверен мутацией.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-15 10:46:13 +04:00
Andrey Epifancev
e180bb4e5f fix: ответ PUT /settings, «создание задачи отменено», CRLF в подтверждении, реле по resolve() (O-11, O-10, O-9, minor-1, T3.1 #16) (#32)
PUT /settings отвечает всеми настройками (R-3); пропуск при cancelled-создателе — «создание задачи new:N отменено» (R-4); ensure_fields сравнивает строки без различия CRLF/LF; _cleaned по resolve(); _type_error по веткам (решения 9–12, 15).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-15 10:42:03 +04:00
Andrey Epifancev
8a319ea595 fix(agent): agent_reported — до первого claim запускатель неизвестен, подсказки «без run.py» нет (M-2 #25) (#32)
GET /agent отдаёт agent_reported; release.hint(reported=); MCP agent_status: «запускатель: неизвестно (агент ещё не выходил на связь после перезапуска хаба)» (решения 7–8, R-1).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-15 10:36:19 +04:00