## ADDED Requirements ### Requirement: Журнал изменений в refresh Отметка журнала — `started_at` последнего `sync_run` с `history_at IS NOT NULL` (любой `query`). JQL стартовой загрузки — `(<базовая JQL>) AND sprint in openSprints() AND statusCategory != Done`. Хаб SHALL при каждой выдаче `refresh` (первой и повторной) дописывать в параметры `history` (в базе `params` без него, как `boards`): - полный прогон (`refresh` по базовой JQL), отметка есть — `{since: <отметка − 15 минут, ISO-8601 UTC с Z>}`; если `query` прогона-отметки не равна текущей базовой JQL — также `jql: `; - полный прогон, отметки нет — `{jql: }`; - `refresh {keys}` и `refresh` по небазовой JQL — `{since: …}`, если отметка есть; иначе `history` не дописывается; - без базовой JQL (нет проектов) — `history` не дописывается. Результат `refresh` MAY содержать `history` (см. `agent`, «Журнал изменений»); хаб SHALL принимать результат и без него. Отметку (`sync_run.history_at`) хаб SHALL проставлять по правилам `data-model`, «Отметка журнала в журнале синхронизаций». #### Scenario: Первый refresh после выкатки - **WHEN** проект `AWPCA`, прогонов с `history_at` нет; выдаётся полный `refresh` - **THEN** в выданных параметрах `history = {jql: '(project = AURORA AND labels in ("AWPCA")) AND sprint in openSprints() AND statusCategory != Done'}`; в базе `params` без `history` #### Scenario: Регулярный refresh - **WHEN** последний полный прогон с `history_at` начат в `2026-10-22T09:00:00+00:00` по текущей базовой JQL; выдаётся автообновление - **THEN** `history = {since: "2026-10-22T08:45:00Z"}` #### Scenario: Журнал не дочитан - **WHEN** прогон в 10:00 завершился `done` с `history.error`, прогон в 09:00 — с принятым журналом; выдаётся следующий полный `refresh` - **THEN** `history.since` — от прогона 09:00 #### Scenario: Новый проект - **WHEN** прогон с `history_at` в 09:00 по JQL только с `AWPCA`; затем создан проект `STOCKS_DRRK`; выдаётся полный `refresh` - **THEN** `history = {since: "…T08:45:00Z", jql: <стартовая по новой базовой JQL>}` #### Scenario: Хвост пакета - **WHEN** выдаётся хвостовой `refresh {keys: [X]}`, отметка есть - **THEN** `history = {since: …}`; по завершении `done` с `result.history` у его `sync_run` `history_at = NULL` #### Scenario: Хвост пакета до первой отметки - **WHEN** выдаётся хвостовой `refresh {keys: [X]}`, прогонов с `history_at` нет - **THEN** в выданных параметрах нет `history`