Andrey Epifancev 5a6cdecc8e OpenSpec change-history: журнал изменений задач (#70)
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-22 10:04:52 +04:00

3.4 KiB
Raw Blame History

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 стартовой загрузки>;
  • полный прогон, отметки нет — {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