6.4 KiB
Raw Blame History

Why

Мост работает в ежедневном режиме с 13.10.2026 (агент на виртуалке за VPN «Континент», обмен через общую папку UTM). Отложенные находки bridge-core (#1) и folder-transport (#5) содержат несколько мест, где живая работа может привести к дублю задачи в Jira, к команде, зависшей в claimed без пути восстановления, или к лишним запросам к Jira банка:

  • R-11 / O-9 — хаб не знает логин Jira агента, поэтому ensure_issue никогда не подтверждается по состоянию; каждый потерянный отчёт о создании задачи требует ручного действия.
  • O-3 — связь симметричного типа («Связанные»), стоящая в Jira в обратную сторону, считается конфликтом в check_confirmed и «отсутствующей» в отчёте импорта (13.10.2026 импорт показал 3 такие ложные missing_links).
  • M-2 — ответ на claim потерян (сбой папки, перезапуск агента во время долгого запроса): команда навсегда claimed, в журнале агента её нет; очередь стоит 10 минут, затем команда требует force-cancel или повтора.
  • M-5 — поздний отчёт по force-отменённой ensure_issue теряет ключ созданной задачи.
  • M-11 — отчёт по команде в queued принимается; две ensure_issue с одной темой в пакете дают одну задачу на два временных ключа.
  • M-9 / O-2 — после перезапуска агент забывает время последнего вызова Jira и сразу выполняет команду без паузы темпа; при восстановлении по журналу пауза обнуляется явно.
  • FM-4 — восстановление по журналу повторно пишет claimed.
  • Расхождение со спекой: agent_status отдаёт признак online, спека говорит offline.

Решения владельца 13.10.2026 (сессия brainstorming): пакет A follow-ups — первым; вариант A для M-2 — хаб довыдаёт команду, выданную агенту и оставшуюся без отчёта (принцип «хаб не повторяет команды» уточняется: довыдача неподтверждённой выдачи — не повтор); дизайн частей 1–3 (повторная выдача и отчёты; факты агента о Jira в claim; темп после перезапуска, online, тесты и выкладка) одобрен.

What Changes

  • jira-hub:
    • повторная выдача: claim при наличии команды в claimed выдаёт её снова (самую старую), счётчик deliveries; после 3 выдач без отчёта — failed «агент не отчитался после 3 выдач»; логика «свежей claimed» (10 минут простоя) и обход пакета с зависшим определителем (R-13) удаляются;
    • отчёт по queued — 409; пакет с двумя ensure_issue одной темы — 422;
    • поздний отчёт по отменённой ensure_issue с ключом сохраняет результат и переносит заметку new:N → ключ, статус остаётся cancelled;
    • agent_status хранит jira_user и symmetric_link_types из claim; check_confirmed подтверждает ensure_issue задачей от jira_user и не считает обратную связь симметричного типа конфликтом; отчёт импорта так же;
    • заготовка настройки reporter удаляется; MCP agent_status показывает логин агента и довыданные команды.
  • jira-agent (версия 3):
    • при старте GET /myself и GET /issueLinkType; jira_user и symmetric_link_types в каждом claim;
    • время последнего вызова Jira восстанавливается при старте из журнала; при восстановлении пауза команды не обнуляется;
    • при восстановлении claimed повторно не пишется.
  • Спеки: hub-api, data-model, commands, agent, mcp — MODIFIED; признак online закрепляется в спеке вместо offline.

Non-goals

  • Остальные находки follow-ups (T-n, M-n вне перечня, расхождения второго порядка) — пакеты C и D.
  • Проверки поведения на реальной Jira банка (CRLF, Epic Link, постраничность комментариев, поле спринта) — пакет B.
  • Подъём min_agent_version до 3: агент v2 продолжает работать, новые поля claim необязательны.
  • Дубли ensure_issue между разными пакетами: поиск дубля по теме за 7 дней уже сводит их к одной задаче.

Impact

  • jira-hub: queue.py (claim, report_result, agent_view), commands.py (validate, check_confirmed), importer.py, db.py (миграция: command.deliveries, agent_status.jira_user, agent_status.symmetric_link_types), api.py (409 на отчёт по queued), settings.py, mcp_server.py; CLAUDE.md и ARCHITECTURE.md — уточнённый принцип повторов.
  • jira-agent: src/agent.py (Runner, Journal, HubClient.claim), README.md, версия 3.
  • Контракт: тело POST /agent/claim получает два необязательных поля; ответы не меняются.
  • Issues: aep/jira-hub#9, aep/jira-agent#9.