2026-10-13 23:17:32 +04:00

7.0 KiB
Raw Blame History

Why

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

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

Решения владельца 13.10.2026 (сессия brainstorming):

  • пакет A follow-ups — первым;
  • M-2, вариант A: хаб довыдаёт команду, выданную агенту и оставшуюся без отчёта (принцип «хаб не повторяет команды» уточняется: новых команд хаб не создаёт, довыдача неподтверждённой выдачи — доставка, не повтор);
  • после написания спеки, при планировании: довыдача закрывает и сценарий R-11 (потерянная ensure_issue выдаётся снова, агент находит свою задачу по reporter = currentUser()), а подтверждение по состоянию при довыдаче почти недостижимо (refresh не выдаётся, пока есть claimed). Поэтому передача логина агента и симметричных типов связей в claim из change убрана; R-11 закрывается довыдачей; O-3 — отдельным списком связей «в обратную сторону» в отчёте импорта.

What Changes

  • jira-hub:
    • повторная выдача: claim при наличии команды в claimed выдаёт её снова (самую старую), счётчик deliveries; после 3 выдач без отчёта — failed «агент не отчитался после 3 выдач»; логика «свежей claimed» (10 минут простоя) и обход пакета с зависшим определителем (R-13) удаляются;
    • миграция схемы v1 → v2 (command.deliveries) с копией базы перед ней — первая миграция живой базы;
    • отчёт по queued — 409; пакет с двумя ensure_issue одной темы — 422;
    • поздний отчёт по отменённой ensure_issue с ключом сохраняет результат и переносит заметку new:N → ключ, статус остаётся cancelled;
    • отчёт импорта: связи из links.csv, которые в зеркале есть того же типа в обратную сторону, — в reversed_links, а не в missing_links;
    • заготовка настройки reporter удаляется; agent_status — redelivered вместо stuck; MCP показывает довыданные команды; принцип повторов уточняется в CLAUDE.md, ARCHITECTURE.md, docstring queue.
  • jira-agent (версия 3):
    • время последнего вызова Jira восстанавливается при старте из журнала; при восстановлении пауза команды не обнуляется;
    • при восстановлении claimed повторно не пишется.
  • Спеки: hub-api, data-model, commands, agent, mcp, migration — MODIFIED; признак online закрепляется в спеке вместо offline.

Non-goals

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

Impact

  • jira-hub: queue.py (claim, report_result, agent_view, maybe_auto_refresh, reconcile), commands.py (validate, check_confirmed), importer.py, db.py (миграция v2), api.py (409 на отчёт по queued), mcp_server.py; CLAUDE.md, ARCHITECTURE.md.
  • jira-agent: src/agent.py (Runner, recover, execute), README.md, версия 3.
  • Контракт хаб ↔ агент: тела запросов не меняются; новый ответ 409 на отчёт по queued (агент уже трактует 409 как «закрыто»).
  • Issues: aep/jira-hub#9, aep/jira-agent#9.