4.6 KiB
migration Specification
Purpose
Переход с CSV-пакета admin/jira-sync на мост: начальные настройки хаба из config.example.json, разовый импорт служебных заметок и сверочного набора связей из CSV, и что остаётся в admin/ как история.
Requirements
Requirement: Инициализация настроек
jira-hub init --config <admin/jira-sync/config.example.json> SHALL перенести в setting: project_key, типы задач,
epic_name_field_id, fields, epic_link, priority_map, labels, status_labels, kind_labels, comment_marker,
pacing (в новую форму по типам команд), transitions.map, link_types; сгенерировать два токена; завести проект
AWPCA «АРМ КА» с board_id из sprints.board_id конфига (если проекта AWPCA ещё нет). Поля auth, base_url,
verify_ssl, ca_bundle MUST NOT переноситься (они у агента).
Scenario: Повторный init
- WHEN
initвызван на уже инициализированной базе - THEN настройки не перезаписываются без
--force, токены сохраняются; проектAWPCAне дублируется
Scenario: Первый init
- WHEN
init --configна пустой базе, в конфигеsprints.board_id = 4216 - THEN есть проект
AWPCA«АРМ КА» сboard_id = 4216; вsettingнетbase_jqlиboard_id
Requirement: Импорт CSV-пакета
jira-hub import <папка admin/jira-sync> SHALL прочитать tasks.csv, new_tasks.csv, epics.csv и заполнить
issue_note по ключу Jira: статус по факту, вид работы, что сделано, что осталось, внутренние колонки. Строки
new_tasks.csv без ключа SHALL получать временный ключ new:<номер строки>; строки tasks.csv и epics.csv без ключа
SHALL пропускаться. links.csv SHALL импортироваться как сверочный набор в отчёт импорта (ожидаемые связи против зеркала
после первого refresh), не как команды. Связь, которой в зеркале нет как source→target того же типа, но есть как
target→source того же типа, SHALL попадать в reversed_links, а не в missing_links. Импорт идемпотентен: повтор
обновляет заметки, не дублирует.
Scenario: Импорт и первая синхронизация
- WHEN выполнены
init,import, запущены хаб и агент,refresh fullзавершён - THEN число задач зеркала ≥ числа строк
tasks.csv+ созданных изnew_tasks.csv; отчёт импорта перечисляет ключи из CSV, которых нет в зеркале, связи изlinks.csv, которых нет вissue_link, и связи, которые есть в обратную сторону
Scenario: Связь в обратную сторону
- WHEN в
links.csvстрока «AURORA-1445 → AURORA-1446, связанные», а в зеркале есть только «ASUPR_Связанные» 1446→1445 - THEN связь в
reversed_links, вmissing_linksеё нет
Scenario: Эпик без ключа
- WHEN в
epics.csvстрока без значения в колонке «Ключ» - THEN строка пропущена, заметка
new:*для неё не создаётся
Requirement: Что остаётся в admin/
После ввода моста admin/jira-sync/README.md SHALL получить в начале пометку «заменено мостом jira-hub/jira-agent,
CSV заморожены <дата>»; jira_sync.py, CSV, runs/, summary.md, _generator/ остаются как история без изменений.
Артефакт просмотрщика на claude.ai MUST NOT переопубликовываться.
Scenario: Пометка в README
- WHEN мост запущен и первая синхронизация сверена с CSV
- THEN README пакета начинается с пометки и ссылки на репозитории моста