7.3 KiB
7.3 KiB
MODIFIED Requirements
Requirement: Маршруты агента
Хаб SHALL предоставлять агенту следующие маршруты (все под агентским токеном):
POST /agent/claim{agent_version, settings_version, last_jira_call_at, jira_user?, symmetric_link_types?}— долгий запрос до 30 с; ответ{command: {id, type, params, pause_seconds}, settings_version}или{command: null, settings_version}; обновляетagent_status(непустыеjira_userиsymmetric_link_typesзаписываются, отсутствующие не стирают прежние значения). Если есть команда вclaimed,claimSHALL выдать её снова (повторная выдача, см.commands), а не следующую из очереди.GET /agent/settings— настройки для агента (без токенов).GET /agent/commands/{id}— команда по id (для восстановления из журнала), включаяpause_seconds.POST /agent/commands/{id}/result{status, result, error, jira_calls, rate_limited}— идемпотентно: повторный отчёт по команде в терминальном статусе отвечает 200 без изменений, кроме позднего отчётаdoneсresult.keyпо отменённойensure_issue(результат записывается, статус остаётсяcancelled, заметкаnew:Nпереносится на ключ). Отчёт по команде вqueuedSHALL отвергаться 409 «команда не выдана».POST /agent/state{command_id, issues: [...], links: [...], neighbor_keys: [...], page, last_page}— загрузка состояния пачками;neighbor_keys— ключи вне базовой JQL, дочитанные по связям; хаб обновляет зеркало иsync_run.GET /agent/known-keys— ключи зеркала (для определения соседей).
Scenario: Выдача с подстановкой ключа
- WHEN следующая команда ссылается на
new:60, аensure_issueдляnew:60завершилась сAURORA-1590 - THEN
claimотдаёт команду сAURORA-1590в параметрах
Scenario: Повторный отчёт
- WHEN агент дважды прислал
resultдля команды 15 - THEN второй ответ 200, статус и результат не изменились
Scenario: Отчёт по невыданной команде
- WHEN
POST /agent/commands/16/resultсstatus = done, команда 16 вqueued - THEN 409, команда осталась
queued
Scenario: Факты агента в claim
- WHEN агент v3 прислал
claimсjira_user = "bridge-user"иsymmetric_link_types = ["ASUPR_Связанные"], затем агент v2 прислалclaimбез этих полей - THEN
agent_status.jira_userиsymmetric_link_typesсохранили значения от первогоclaim
Requirement: Маршруты интерфейсов
Хаб SHALL предоставлять интерфейсам (MCP, позже просмотрщик) следующие маршруты под клиентским токеном:
GET /issuesс фильтрамиsprint,assignee,work_kind,fact_status,status,label,epic,neighbor,q(подстрока темы),limit/offset— компактные карточки (ключ, тема, статус, приоритет, срок, исполнитель, спринт, эпик, заметки кратко).GET /issues/{key}— задача целиком: поля, связи в обе стороны, заметки, последние 10 команд по ней.PUT /issues/{key}/note— заметки (частичное обновление,updated_byиз тела).POST /batches{title, author, commands: [...]}→{id, estimate_seconds}; 422 при неизвестном типе, неверных параметрах, временном ключе безensure_issue, двух и болееensure_issueс одинаковойsummary(сравнение после обрезки пробелов по краям; в ответе перечислены повторяющиеся темы).GET /batches?limit=,GET /batches/{id}(с командами),POST /batches/{id}/cancel.POST /commands/{id}/retry— новая команда с теми же параметрами в новом пакете «Повтор команды N».POST /commands/{id}/cancel— только дляqueued; дляclaimed— 409, если не переданforce: true.POST /refresh{keys | jql | full: true}→ пакет из одногоrefresh.GET /agent,GET /sync-runs?limit=,GET /settings,PUT /settings(частично; поднимаетsettings_version).
Scenario: Фильтр по спринту
- WHEN
GET /issues?sprint=Спринт 2 - THEN только задачи с таким
sprint, отсортированы по сроку, затем по ключу
Scenario: Отмена взятой команды
- WHEN
POST /commands/15/cancelбезforce, командаclaimed - THEN 409 с
claimed_at; сforce: true—cancelled, следующий отчёт агента по ней принимается, статус не меняется
Scenario: Поздний отчёт по отменённому созданию
- WHEN
ensure_issue {temp_key: new:7, …}отменена сforce: true, затем агент прислалdoneсresult.key = AURORA-1620 - THEN команда
cancelled, вresult—AURORA-1620; заметкаnew:7перенесена наAURORA-1620
Scenario: Дубль темы в пакете
- WHEN
POST /batchesс двумяensure_issue, у обеихsummary = "Шахматка: комментарии" - THEN 422 с темой «Шахматка: комментарии», пакет не создан
Requirement: Автообновление зеркала
Если auto_refresh_minutes > 0, агент на связи и очередь пуста дольше этого интервала, хаб SHALL поставить пакет
«Автообновление» из refresh {jql: base_jql}. Очередь не пуста, если есть команды в queued или claimed.
Scenario: Очередь занята
- WHEN интервал прошёл, но в очереди есть
queuedкоманды - THEN автообновление не ставится до опустошения очереди
Scenario: Есть выданная команда без отчёта
- WHEN интервал прошёл,
queuedнет, одна команда вclaimed - THEN автообновление не ставится; команда довыдаётся при следующем
claim