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
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
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
Andrey Epifancev
57934383e7
fix(release): сбой переименования agent.py не удаляет прежний agent.py (T2-I1) ( #32 )
...
Откат удаляет agent.py только при первой публикации; при сбое до переименования прежний файл не трогается. Тест: os.replace падает на agent.py.prev — release/ байт-в-байт прежний.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-15 10:33:54 +04:00
Andrey Epifancev
f977d9bd34
fix(release): публикация с fsync и откатом через agent.py.prev, проверка манифеста (M-1, M-3, M-5, M-6, M-7 #25 ) ( #32 )
...
Сбой записи — «не удалось записать публикацию: …», код 1, прежняя версия остаётся; манифест годен при целой version ≥ 1 и sha256 из 64 hex; предупреждение о негодном — одно на ошибку; не-UTF-8 agent.py — 404 (решения 1–6).
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-15 10:31:22 +04:00
Andrey Epifancev
ea37d54946
test: соединения SQLite в тестах закрываются, утечка — ошибка набора (M-9/O-4 #4 ) ( #32 )
...
Фикстура open_db в tests/conftest.py, фикстуры conn вместо хелперов fresh()/_mirror(); filterwarnings: error::ResourceWarning и error::pytest.PytestUnraisableExceptionWarning (решение 14, R-5).
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-15 10:26:38 +04:00
Andrey Epifancev
447d878e0e
fix(hub): Python от uv вместо miniconda — SQLite 3.51.1 вешал хаб взаимной блокировкой (O-14, R-11, #29 )
...
Стеки зависшего тестового хаба: потоки запросов ждут мьютексы unix-VFS SQLite в sqlite3.connect
(findReusableFd) и close (sqlite3WalClose -> unixLock). Ошибка SQLite 3.51.0–3.51.1, исправлена в 3.51.2.
.python-version = 3.13 и tool.uv.python-preference = only-managed: uv берёт свой CPython 3.13.12 (SQLite 3.50.4)
и сам пересоздаёт .venv. Тест не даёт вернуться на SQLite 3.51.0–3.51.1.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-15 03:29:23 +04:00
Andrey Epifancev
091acda286
style(tests): опечатка форматирования req = в test_bad_requests (T1.1, #29 )
...
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-15 01:21:50 +04:00
Andrey Epifancev
2024a66a6d
fix(hub): нулевой байт в пути /app/assets — 404; тесты типов файлов сборки (T1.1, T1.4, T16.1, #29 )
...
Co-Authored-By: Claude Haiku 5.5 <noreply@anthropic.com>
2026-10-15 01:04:21 +04:00
Andrey Epifancev
34c57ceeab
Merge remote-tracking branch 'origin/main' into feat/21-web-app
...
# Conflicts:
# ARCHITECTURE.md
# CLAUDE.md
# src/jira_hub/api.py
# tests/test_api.py
2026-10-15 00:07:48 +04:00
Andrey Epifancev
51564854d6
feat(api): / и /links ведут в веб-приложение, links.html удалена; документация ( #21 )
...
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-14 23:44:41 +04:00
Andrey Epifancev
3a4fed94ff
fix(hub): ошибка доступа к release/ не роняет claim — публикации нет (I-1, #22 )
...
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-14 22:35:33 +04:00
Andrey Epifancev
7c922382e6
feat(hub): agent_status — публикация и самообновление агента; README, ARCHITECTURE ( #22 )
...
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-14 22:13:21 +04:00
Andrey Epifancev
87a0d3d36c
feat(hub): agent_release в claim, GET /agent/release, состояние обновления в GET /agent ( #22 )
...
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-14 22:11:10 +04:00
Andrey Epifancev
eb66c2144a
feat(hub): публикация версии агента — release.py и jira-hub agent publish ( #22 )
...
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-14 22:09:28 +04:00
Andrey Epifancev
bc610a7734
feat(api): раздача веб-приложения по /app… без токена, 503 без сборки; тест M-7 ( #21 )
...
Co-Authored-By: Claude Haiku 5.5 <noreply@anthropic.com>
2026-10-14 20:03:28 +04:00
Andrey Epifancev
c7d1aaae0a
fix(web): связи из зеркала — только между ключами вида AURORA-1234 (I-1, #17 )
...
Ключ из issue_link попадал в разметку карточки без проверки: строка зеркала с разметкой в target_key исполнялась на странице с токеном.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-14 18:21:36 +04:00
Andrey Epifancev
4f4fb500dd
feat(web): «Обновить из Jira», перенос раскладки импортом JSON, смена токена ( #17 )
...
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-14 18:10:38 +04:00
Andrey Epifancev
e92e7711d6
feat(web): доска на данных хаба — вход по токену, GET /board, «Перечитать» ( #17 )
...
Встроенная выгрузка от 11.10.2026 удалена; CSV и JSON — загрузка файла.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-14 18:02:48 +04:00
Andrey Epifancev
9bfb8be549
feat(api): страница доски связей по GET / и /links без токена ( #17 )
...
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-14 17:56:17 +04:00
Andrey Epifancev
fbd47873b7
feat(api): GET /board — снимок зеркала для доски связей ( #17 )
...
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-14 17:54:16 +04:00
Andrey Epifancev
8e82b31d48
fix: правки по финальному ревью bridge-hygiene — права backups/, cwd, чистка work/ по папкам, отмена завершённого пакета ( #13 )
...
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-14 13:11:03 +04:00
Andrey Epifancev
615530aa1b
fix(relay): 502 на сбой протокола, work/ чистится один раз на папку, тест serve --host ( #13 )
...
M-1, M-3, M-4 (hub#8).
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-14 12:54:45 +04:00
Andrey Epifancev
bd8c769e75
feat(queue,mcp): отмена пакета сообщает о команде у агента; подсказка про labels ( #13 )
...
cancel_batch возвращает still_claimed — команды пакета в статусе claimed,
которые отмена не останавливает. MCP batch_cancel выводит строку на каждую
такую команду с подсказкой про POST /commands/N/cancel с force. Описание
batch_create предупреждает, что ensure_issue нужны labels с базовой меткой
AWPCA, иначе задача выпадет из базовой JQL и из зеркала.
M-11 (hub#12), T3.7 (agent#4).
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-14 12:51:51 +04:00
Andrey Epifancev
19aa032a25
fix(queue): довыдача refresh не удваивает счётчики, предел выдач закрывает sync_run ( #13 )
...
M-4, M-5, M-10 (hub#12).
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-14 12:46:29 +04:00
Andrey Epifancev
4f0b873db6
fix(queue): обрезка error, поздний done по failed, статус отменённого пакета, пустой полный прогон ( #13 )
...
M-4 (hub#12), T5.6 и M-12 (hub#4).
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-14 12:44:13 +04:00
Andrey Epifancev
a309c9bfb1
fix(commands): проверка типов параметров — 422 вместо 500 ( #13 )
...
M-3 (hub#12).
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-14 12:41:44 +04:00
Andrey Epifancev
7a2f2e694b
fix(mirror): rename_note сливает заметки, а не удаляет заметку под ключом ( #13 )
...
M-3 (hub#4, PR #2 ).
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-14 12:39:49 +04:00
Andrey Epifancev
ec49ed64ba
fix(db): каталог данных 0700, одна копия при миграции под блокировкой ( #13 )
...
M-7 (hub#4), M-2 и M-10 (hub#12).
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-14 12:36:45 +04:00
Andrey Epifancev
1fc27055ba
fix(backup): копия перед миграцией схемы не ротируется; design: один процесс агента, откат без восстановления копии (M-1, I-1, #9 )
...
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-13 23:11:32 +04:00
Andrey Epifancev
817c761fb2
feat: ensure_issue закрывается довыдачей, не сверкой; reversed_links в отчёте импорта (R-11, O-3, #9 )
...
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-13 22:48:57 +04:00
Andrey Epifancev
bf73299732
feat(queue): 409 на отчёт по невыданной команде, ключ из позднего отчёта по отменённой ensure_issue, 422 на дубль темы ( #9 )
...
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-13 22:46:41 +04:00
Andrey Epifancev
958dbe956f
feat(queue): довыдача команды без отчёта, предел 3 выдачи; R-13 и «свежая claimed» удалены ( #9 )
...
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-13 22:44:16 +04:00
Andrey Epifancev
4f375fd39c
feat(db): миграция схемы v1→v2 — command.deliveries, копия базы перед миграцией ( #9 )
...
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-13 22:40:59 +04:00
Andrey Epifancev
4a82be05cc
fix(relay): самовосстановление при сбоях папки — одно предупреждение вместо потока трассировок (I-1, I-2, #5 )
...
Отказ доступа (TCC), удалённые req/ или work/ больше не сыплют трассировки каждые 0,1 с и не останавливают
реле молча: одно предупреждение на причину, подкаталоги создаются заново; resp/ создаётся до пересылки,
чтобы выданный claim не уходил в никуда.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-13 01:08:21 +04:00
Andrey Epifancev
aa621a078a
feat(api): реле общей папки запускается в serve; README — транспорт через папку ( #5 )
...
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-13 00:41:27 +04:00
Andrey Epifancev
787543ea89
feat(relay): реле через общую папку — запросы агента из файлов в свой HTTP и обратно ( #5 )
...
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-13 00:39:36 +04:00
Andrey Epifancev
e025577d05
feat(settings): настройка relay_dir — абсолютный путь папки реле или null ( #5 )
...
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-13 00:37:59 +04:00
Andrey Epifancev
1bc6ebe534
fix(mcp): batch_wait и refresh асинхронные, refresh по умолчанию без ожидания (R-12, I-3)
...
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_014Typ5sXWNMFirr2va2uL8o
2026-10-11 23:11:18 +04:00
Andrey Epifancev
4f055a80d0
fix(api): PUT /settings проверяет значения до записи, 422 (I-5); убран мёртвый except, честное имя теста
...
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_014Typ5sXWNMFirr2va2uL8o
2026-10-11 23:09:45 +04:00
Andrey Epifancev
0dba6b7672
fix(queue): зависший определитель пропускает остаток своего пакета, очередь идёт дальше (R-13, I-4)
...
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_014Typ5sXWNMFirr2va2uL8o
2026-10-11 23:08:57 +04:00
Andrey Epifancev
5a5914226f
fix(mirror): флаг neighbor не сбрасывается точечным refresh и ставится полным прогоном (I-2); комментарий про соединение
...
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_014Typ5sXWNMFirr2va2uL8o
2026-10-11 23:08:52 +04:00
Andrey Epifancev
a09b794302
fix(queue): ensure_issue не подтверждается по состоянию без автора (R-11, I-1); reconcile не затирает отчёт и отмену (M-1)
...
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_014Typ5sXWNMFirr2va2uL8o
2026-10-11 23:07:52 +04:00
Andrey Epifancev
e221a18b46
test(hub): промежуточные ассерты сквозного прогона (T10.1–T10.4)
...
Проверяются: одна команда в полёте (второй claim пуст), зеркало не
пишется до /agent/state, заметка переезжает с new:60 на A-90, статус
пакета running с remaining_seconds > 0 между командами и done с 0 в конце,
связь проверяется по полям source_key/target_key/link_type.
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_014Typ5sXWNMFirr2va2uL8o
2026-10-11 22:54:15 +04:00
Andrey Epifancev
181dd65958
test(hub): сквозной прогон очереди через HTTP с имитацией агента
...
Фикстура останавливает сервер (server_close, join потока), иначе
ResourceWarning о незакрытом сокете.
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_014Typ5sXWNMFirr2va2uL8o
2026-10-11 22:51:11 +04:00
Andrey Epifancev
d7f82cb611
feat(hub): CLI, README, описание архитектуры
...
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_014Typ5sXWNMFirr2va2uL8o
2026-10-11 22:47:24 +04:00