From 6c413ccc0faf38c21d3b8c69d6b8f41bce8bdc18 Mon Sep 17 00:00:00 2001 From: Andrey Epifancev Date: Sun, 18 Oct 2026 12:32:52 +0400 Subject: [PATCH] =?UTF-8?q?openspec(#116):=20=D0=BF=D0=BB=D0=B0=D0=BD=205?= =?UTF-8?q?=20=E2=80=94=20=D0=BF=D0=BE=D0=B4=D0=B3=D0=BE=D1=82=D0=BE=D0=B2?= =?UTF-8?q?=D0=BA=D0=B0=20=D1=85=D0=BE=D1=81=D1=82=D0=B0=20=D1=81=D0=B2?= =?UTF-8?q?=D0=B5=D1=80=D0=B5=D0=BD=D0=B0=20=D1=81=20=D0=BF=D0=BB=D0=B0?= =?UTF-8?q?=D0=BD=D0=BE=D0=BC=202=20(=D0=B7=D0=B0=D0=B4=D0=B0=D1=87=D0=B0?= =?UTF-8?q?=209,=20--in-place)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-Authored-By: Claude Opus 5.5 Claude-Session: https://claude.ai/code/session_01BJKMLHdxMwSUeYcdkwqX4W --- .../plans/2026-10-18-plan-5-scan-gateway.md | 23 ++++++++++++------- 1 file changed, 15 insertions(+), 8 deletions(-) diff --git a/openspec/changes/unified-statement-normalization/plans/2026-10-18-plan-5-scan-gateway.md b/openspec/changes/unified-statement-normalization/plans/2026-10-18-plan-5-scan-gateway.md index 8c6a5cd..70f9ad4 100644 --- a/openspec/changes/unified-statement-normalization/plans/2026-10-18-plan-5-scan-gateway.md +++ b/openspec/changes/unified-statement-normalization/plans/2026-10-18-plan-5-scan-gateway.md @@ -39,7 +39,7 @@ v2.0 — «сначала ядро»»), `specs/quality-checks/spec.md`, `propos |---|---|---| | 0 | тест идентичности копий контракта по MAJOR (в том числе scan-gateway) | слит в scan-gateway `main` до задачи 4; тест идентичности здесь не меняется | | 1 | пакет `arm_statements` (репозиторий `arm-statements`) | API — раздел «Публичный API пакета»; правила разбора OCR (`test_parses_real_forms`, двойники, правки sg#40) — в пакете | -| 2 | `sync-statements`: копия пакета в `api/arm_statements/`, `statements-check` в `make check-full` | PR плана 2 в scan-gateway слит до задачи 1 (файла плана 2 на 18.10.2026 нет — задача 1 сверяет факт, см. O-1) | +| 2 | `sync-statements`: копия пакета в `api/arm_statements/`, `statements-check` в `make check-full` | PR задачи 9 плана 2 (`feat/-arm-statements-copy`) слит в scan-gateway `main` до задачи 1; задача 1 сверяет факт | | docs PR #117 | контракт v2.0, правила §11 | слит в docs `main` до задачи 4 | | 3 | arm-core: приём `2.0` (части А и Б) | **выложено на контур до слияния PR этого плана** («сначала ядро», `proposal.md` шаг 3) | | 4 | tabular-parser на 2.0 | независим (шаг 5 — в любом порядке) | @@ -247,10 +247,11 @@ Claude-Session: https://claude.ai/code/session_01BJKMLHdxMwSUeYcdkwqX4W" - Produces: подтверждённые факты для задач 2–7: `import arm_statements` работает из `api/`, `make check` гоняет тесты и `mypy` копии, `make statements-check` есть и входит в `make check-full`. -> Файла плана 2 на момент написания нет. Ниже — то, что спека требует от хоста (`statement-normalization`, -> «`sync-statements` — копии пакета в потребителях»; `quality-checks`). Если план 2 сделал иначе (имена целей, пути) — -> исполнитель сверяет с планом 2 и отмечает расхождение `O-n` в отчёте; если копии в `main` нет — **стоп**, задача -> заблокирована, отчёт контроллеру (копию в этой ветке не раскладывать). +> Подключение копии — задача 9 плана 2 (`plans/2026-10-18-plan-2-sync-statements.md`, раздел «Что должны включить +> планы 3, 4, 5»): `lint` — `mypy src arm_statements`, `testpaths` — `tests` и `arm_statements/tests`, `arm_statements` +> в строгом блоке mypy и `known-first-party`, `statements-check` в `check-full`. Если копии в `main` нет — **стоп**, +> задача заблокирована, отчёт контроллеру (первичную раскладку в этой ветке не делать). Расхождение факта с планом 2 — +> `O-n` в отчёте. - [ ] **Step 1: Копия и маркер версии** @@ -267,7 +268,12 @@ Expected: обе строки найдены; `make check` зелёный, в в Run: `cd $WT && grep -n "statements-check" Makefile && make statements-check; echo "код $?"` Expected: цель есть и вызывается из `check-full`; код `0` (или `10` — запомнить для описания PR). -- [ ] **Step 4: conftest хоста.** `grep -n "autouse" $WT/api/tests/conftest.py $WT/api/tests/unit/conftest.py` — каждая +- [ ] **Step 4: Новая версия пакета (только если нужна).** Если задачам 2–6 нужна версия `arm-statements` новее, + чем в `main` (например, исправление по находке Review Focus), — по плану 2: `cd $WT && ../docs/scripts/sync-statements.sh + --in-place --host-dir .`, копия — отдельным коммитом `chore(arm_statements): копия пакета arm-statements@ + (#)`; руками копию не править. + +- [ ] **Step 5: conftest хоста.** `grep -n "autouse" $WT/api/tests/conftest.py $WT/api/tests/unit/conftest.py` — каждая `autouse`-фикстура ограничена каталогом `tests/` хоста (спека: иначе она задевает тесты копии). Нарушение — находка `O-n` плану 2, не правка в этой ветке. @@ -1087,8 +1093,9 @@ git -C $WT push -u origin feat/-statements-v2 ## Чего не хватает в API пакета для адаптера OCR (O-n; план 1 не правится) -- **O-1.** Файла плана 2 нет: имена целей (`statements-check`), правки `pytest.ini`/`Makefile` и симлинк источника - `arm-statements` в зеркальном workspace взяты из спеки; задача 1 сверяет их с фактом. +- **O-1.** План 2 (задача 9) подключает копию в scan-gateway отдельным bounded PR и проверяет `default_rules()` в + образе; этот план от него зависит и не дублирует. Симлинк `arm-statements` в зеркальном workspace `$WS` нужен + `statements-check` (`../arm-statements`) — в плане 2 для зеркала хостов он не упомянут, здесь добавлен (задача 0). - **O-2.** `StatementDocument`/`StatementHeader` пакета не несут заголовок формы, а у `statementDocument.header` контракта есть `form_name`. Хост берёт его из `candidate.evidence.title` — это работает только при вызове `normalize_candidate` на кандидата (через `normalize(...)` связь документа с кандидатом теряется: документов меньше, чем кандидатов). То же