Andrey Epifancev 47e6372cbe chore(openspec): архив unified-statement-normalization (#116)
Спеки применены: 5 новых capability (arm-core, arm-web, scan-gateway,
statement-normalization, tabular-recognition-service) с Purpose, изменения
quality-checks и recognition-contract. Ссылки в 05-domain-rules, DBML v5.19,
entities, dev/checks.md и dev/qa-statements-v2.md ведут в архив.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-19 09:25:43 +04:00
..

Исполнение единой нормализации ББ/ОФР — дорожная карта

Читать первым при продолжении работы. Источник истины по требованиям — спека этого change (../specs/, ../proposal.md, docs/contracts/, docs/context/05-domain-rules.md §7/§9/§11, docs/model/data-model-v5.19.dbml); по решениям — ../design.md (Р-1…Р-43 владельца, S-1…S-74 писателей спеки). Планы ниже аргументируют от спеки; при расхождении права спека.

Планы

№ Файл Репозиторий Задач Ветка / worktree Зависит от
0 2026-10-18-plan-0-contract-identity.md arm-core, tabular-parser, scan-gateway (3 PR) 5 feat/<issue>-contract-identity-window, .wt/contract-window/<repo> ничего
1 2026-10-18-plan-1-arm-statements.md arm-statements (новый) 19 feat/<issue>-arm-statements-package, .wt/normalization/arm-statements push main arm-statements
2 2026-10-18-plan-2-sync-statements.md docs + 3 PR подключения в хостах 9 feat/<issue>-sync-statements, .wt/sync-statements/docs; хосты — .wt/statements-adopt/<хост> PR плана 1 слит
3А 2026-10-18-plan-3-arm-core.md, часть А arm-core 14 feat/<issue>-normalization-core-a, .wt/normalization-core-a/arm-core план 0 (для A5)
3Б тот же, часть Б arm-core 7 feat/<issue>-normalization-core-b, .wt/normalization-core-b/arm-core PR 3А и PR плана 2 в arm-core слиты
4 2026-10-18-plan-4-tabular-parser.md tabular-parser (+ golden в fixtures) 10 feat/<issue>-statements-v2, .wt/normalization-tp/tabular-parser планы 1, 2
5 2026-10-18-plan-5-scan-gateway.md scan-gateway (+ golden в fixtures) 8 feat/<issue>-statements-v2, .wt/normalization-sg/scan-gateway планы 1, 2
6 2026-10-18-plan-6-arm-web.md arm-web (PR в test), затем make -C docs sync-web 12 feat/<issue>-statements-v2, .wt/normalization-web/arm-web T1–T10 — по фикстуре сразу; T11 — после 3А

Волны

  1. Волна 1 (параллельно): план 0 — три PR, слить до docs PR #117; план 1 — после push main arm-statements; план 3 часть А; план 6 задачи T0–T10.
  2. Волна 2: план 2 (после PR плана 1) → затем планы 4, 5 и 3 часть Б (после подключения пакета к хостам).
  3. Финиш волны 2: план 6 T11 (Playwright на стенде) после 3А, лучше вместе с 3Б.

Способ исполнения (глобальный CLAUDE.md): на каждую дорожку — фоновый SDD-контроллер на модели sonnet; исполнители — модели, указанные в задачах плана; ревью всей ветки — opus. План ≤ 5 задач (план 0) — executing-plans. В брифе контроллера: ждать task-notification, не циклы sleep; хук не обходить; находки — с маркерами и статусами (fixed <commit> / deferred / rejected), таблица ## Findings в ledger.

Выкладка (proposal, «сначала ядро»)

  1. Слиты PR плана 0 во всех трёх репозиториях.
  2. Очистка форм ББ/ОФР на стенде: api/scripts/purge_statements.py --dry-run → решение владельца по смешанным файлам (Р-27) → --apply.
  3. Ядро А + Б и фронт (план 6 + sync-web) выкладываются одним снимком (JobBrief.warnings меняет тип).
  4. Слить docs PR #117 (контракт v2.0, DBML v5.19, спека); перед этим повторить проверку плана 0 на его последнем коммите.
  5. Сервисы на 2.0: PR golden в fixtures и PR tabular-parser / scan-gateway сливаются только после выкладки ядра, golden — непосредственно перед своим сервисом.
  6. После выкладки: архивация OpenSpec change'ей в каждом репозитории, follow-up issue по deferred.

Предусловия и состояние на 18.10.2026

  • RSHB/arm-statements создан; клон awp-ca/arm-statements, main локально: начальный README + adopt-project.sh. Push main делает владелец (хук guard-main): git -C ~/projects/awp-ca/arm-statements push -u origin main.
  • Решения владельца по открытым вопросам планов — Р-31…Р-43 в ../design.md; на прогоне реальных файлов неожиданный needs_check — стоп и вопрос владельцу (Р-31).
  • Jira недоступна; что внести после — arm-ka-docs#118 (тестировщику — сразу после слияния, не ждать контур).

Решения Р-31…Р-43 и планы

Решения приняты после написания планов и в тексты планов не внесены — контроллер дорожки обязан учесть их в брифах исполнителей (а при расхождении с планом — следовать решению):

Решение План Что учесть
Р-31 4, 5 неожиданный needs_check на реальных файлах — стоп и вопрос владельцу, адаптер под файл не подгонять
Р-32, Р-33 5 json без таблиц → JSON_FAILED; все json ошибочны → перечислить JSON_FAILED каждого, код файла — от первого
Р-34 1, 3, 6 подтверждение кода — флаг is_confirmed, уверенность не меняется (уже внесено в спеку и планы сведением)
Р-35 3 (A4) очистка отказывает только при VERIFIED / ARCHIVED со снимком ЕХ (уже внесено сведением)
Р-36 0, docs в окне перехода новых примеров контракта верхнего уровня не добавлять
Р-37, Р-38 6 экран принимается по фикстуре 2.0 + регрессия 1.x, прогон aep_3 — follow-up; подтверждённая ячейка — серая галочка
Р-39 4 коды предупреждений ОСВ — по источнику OSV_*
Р-40 3 CODE_NOT_IN_DICTIONARY / CODE_NOT_IN_EDITION — только четырёхзначные коды
Р-41 3 (A3) смена crm_id ГСК/ГСЗ — в аудит как изменение группы
Р-42 2 sync-statements --check в prepare-contour-snapshot.sh
Р-43 1 arm-statements — в таблицу workspace (CLAUDE.md workspace, context/00-workspace-layout.md)

Решения исполнителей планов P1-21…P1-31, P3-19…P3-24, P5-20 (появились при сведении API) переносятся в ../design.md, раздел «Decisions made without discussion», при исполнении соответствующего плана, вместе с остальными P-n.