## 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.