Скрипт sync-statements: копия пакета arm_statements в хостах (#120, #116) #121

Merged
aep merged 9 commits from feat/120-sync-statements into main 2026-10-18 18:36:45 +03:00
Owner

Закрывает #120. Часть единой нормализации ББ/ОФР (#116), план 2, задачи 1–5 (+5b по Р-42). Спека, решения P2-n и R-n плана 2 — в ветке feat/116-unified-normalization (PR #117).

Что делает

Скрипт scripts/sync-statements.sh раскладывает пакет arm_statements из репозитория arm-statements копией в api/arm_statements/ хостов (arm-core, tabular-parser, scan-gateway) и проверяет свежесть копии. Точка синхронизации — api/arm_statements/VERSION (полный хэш коммита источника).

  • --check: 0 — копия равна дереву коммита из VERSION, это --ref, перечень кодов равен docs/contracts/statement-code-orders.yaml; 10 — копия отстала или перечень в docs новее; 20 — прямая правка, чужая VERSION, нет зависимости пакета в хосте, код словаря arm-core вне перечня копии; 2 — нет источника/хоста, неверный аргумент. Файлы и причины печатаются.
  • --in-place --host-dir <dir>: раскладка в существующий worktree хоста без git-операций (подключение хоста, PR фичи с новой версией пакета); отказ 20 при правке копии или нехватке зависимости; защиты от .gitignore хоста и от путей, на которых остановится снимок для контура; отказывает на основном checkout и ветке main/master.
  • Обычный режим и --dry-run: worktree хоста, issue, make check, коммит, PR (по образцу sync-web.sh); предупреждение «сначала ядро».
  • Помощник scripts/statements_check.py (зависимости пакета против requirements.txt хоста; коды словаря против перечня).
  • Цели docs: make sync-statements, make statements-check (обзор по трём хостам, в check не входит), make test-sync-statements (в check). make venv ставит PyYAML.
  • Р-42: prepare-contour-snapshot.sh вызывает --check для хостов, где копия уже есть (10 — абзац в SNAPSHOT.md, 20 — стоп); хосты без копии пропускаются.

Проверки

  • make validate-contracts, make test-snapshot, make test-sync-web, make test-sync-statements — зелёные.
  • make validate-openspec (а значит и make check целиком) красный — это не от этого PR: в Makefile остался CHANGE ?= slice-0-skeleton, а change давно в архиве (O-1 плана 0). Не чинилось здесь.
  • make statements-check до подключения хостов: три строки 20 — копии нет (ожидаемо; хосты подключаются PR задач 7–9 после слияния этого PR).
  • Шаги issue/PR/make check хоста обычного режима проверены заглушками tea/make в тесте, настоящим прогоном — нет.

Findings

Маркер Суть Статус
T1.1 traceback при нестроковом элементе dependencies deferred
T1.2 многословное примечание о версии deferred
T1.3 нет теста «редакции/формы нет в перечне» deferred
T2.1 git archive падал 128 без итоговой строки fixed b5ad8a0
T2.2 нет Claude-Session в трейлере rejected (по поручению только Co-Authored-By)
T2.3 тесты: .ruff_cache, «10+10», «fetch не удался» deferred
T2.4 имя файла с «: » rejected (пренебрежимо)
T3.1 защиты lay_copy не липкие fixed 97777cb
T3.2 хост не git — защита молчит deferred
T3.3 тест «ничего не пишется», .DS_Store fixed 97777cb
T4.1 tea | grep под pipefail обрывал молча fixed df85505
T4.2 make check мог переписать копию fixed df85505
T4.3 диапазон, пустой список, mkdir, подсказка fixed df85505
T4.4 шаг 8 принимает 10 rejected (условие 8 невозможно после раскладки)
I-1 --in-place --host писал в основной checkout fixed fdd25a6
M-1…M-5 --check без итога; подсказка; trap; гайд; шапка fixed fdd25a6
O-1 make check красный по validate-openspec deferred
O-2 строка make venv в dev/checks.md (jsonschema «единственная») устарела; её правит PR #117 deferred

Rulings I made

  • R-1 (план 2). make check красный по validate-openspec (O-1) — не чинить; цели проверены по отдельности. Цена: make check красный до отдельной правки Makefile.
  • R-2 (план 2). Р-42 исполнен здесь (задача 5b) с пропуском хостов без копии, чтобы 20 «копии нет» не блокировал снимок до задач 7–9. Цена: пока хост без копии, снимок о ней не напомнит; тест снимка требует Python ≥ 3.11 с PyYAML.
  • R-3 (план 2). В спеке убрано «и его конфигом линтеров» (конфиг пакета в копию не кладётся, P2-1). Цена: нет.
  • R-4 (план 2). Защиты раскладки липкие; при коде 1 копия остаётся в дереве; после make check хоста evaluate повторяется. Цена: после отказа защиты оператор убирает копию сам.
  • R-5 (план 2). Решение финального ревью: --in-place требует --host-dir и отказывает (код 2) на основном checkout и ветке main/master — защита основных checkout'ов (guard-main). Цена: --in-place --host недоступно.
  • Решения автора плана P2-1…P2-21 — в design.md ветки feat/116-unified-normalization (пункты 143–167).

🤖 Generated with Claude Code

Закрывает #120. Часть единой нормализации ББ/ОФР (#116), план 2, задачи 1–5 (+5b по Р-42). Спека, решения P2-n и R-n плана 2 — в ветке `feat/116-unified-normalization` (PR #117). ## Что делает Скрипт `scripts/sync-statements.sh` раскладывает пакет `arm_statements` из репозитория `arm-statements` копией в `api/arm_statements/` хостов (arm-core, tabular-parser, scan-gateway) и проверяет свежесть копии. Точка синхронизации — `api/arm_statements/VERSION` (полный хэш коммита источника). - `--check`: `0` — копия равна дереву коммита из `VERSION`, это `--ref`, перечень кодов равен `docs/contracts/statement-code-orders.yaml`; `10` — копия отстала или перечень в docs новее; `20` — прямая правка, чужая `VERSION`, нет зависимости пакета в хосте, код словаря `arm-core` вне перечня копии; `2` — нет источника/хоста, неверный аргумент. Файлы и причины печатаются. - `--in-place --host-dir <dir>`: раскладка в существующий worktree хоста без git-операций (подключение хоста, PR фичи с новой версией пакета); отказ `20` при правке копии или нехватке зависимости; защиты от `.gitignore` хоста и от путей, на которых остановится снимок для контура; отказывает на основном checkout и ветке main/master. - Обычный режим и `--dry-run`: worktree хоста, issue, `make check`, коммит, PR (по образцу `sync-web.sh`); предупреждение «сначала ядро». - Помощник `scripts/statements_check.py` (зависимости пакета против `requirements.txt` хоста; коды словаря против перечня). - Цели docs: `make sync-statements`, `make statements-check` (обзор по трём хостам, в `check` не входит), `make test-sync-statements` (в `check`). `make venv` ставит PyYAML. - Р-42: `prepare-contour-snapshot.sh` вызывает `--check` для хостов, где копия уже есть (`10` — абзац в `SNAPSHOT.md`, `20` — стоп); хосты без копии пропускаются. ## Проверки - `make validate-contracts`, `make test-snapshot`, `make test-sync-web`, `make test-sync-statements` — зелёные. - **`make validate-openspec` (а значит и `make check` целиком) красный** — это не от этого PR: в Makefile остался `CHANGE ?= slice-0-skeleton`, а change давно в архиве (O-1 плана 0). Не чинилось здесь. - `make statements-check` до подключения хостов: три строки `20 — копии нет` (ожидаемо; хосты подключаются PR задач 7–9 после слияния этого PR). - Шаги issue/PR/`make check` хоста обычного режима проверены заглушками `tea`/`make` в тесте, настоящим прогоном — нет. ## Findings | Маркер | Суть | Статус | |---|---|---| | T1.1 | traceback при нестроковом элементе `dependencies` | deferred | | T1.2 | многословное примечание о версии | deferred | | T1.3 | нет теста «редакции/формы нет в перечне» | deferred | | T2.1 | `git archive` падал 128 без итоговой строки | fixed b5ad8a0 | | T2.2 | нет `Claude-Session` в трейлере | rejected (по поручению только Co-Authored-By) | | T2.3 | тесты: `.ruff_cache`, «10+10», «fetch не удался» | deferred | | T2.4 | имя файла с «: » | rejected (пренебрежимо) | | T3.1 | защиты `lay_copy` не липкие | fixed 97777cb | | T3.2 | хост не git — защита молчит | deferred | | T3.3 | тест «ничего не пишется», `.DS_Store` | fixed 97777cb | | T4.1 | `tea \| grep` под pipefail обрывал молча | fixed df85505 | | T4.2 | `make check` мог переписать копию | fixed df85505 | | T4.3 | диапазон, пустой список, mkdir, подсказка | fixed df85505 | | T4.4 | шаг 8 принимает 10 | rejected (условие 8 невозможно после раскладки) | | I-1 | `--in-place --host` писал в основной checkout | fixed fdd25a6 | | M-1…M-5 | `--check` без итога; подсказка; trap; гайд; шапка | fixed fdd25a6 | | O-1 | `make check` красный по `validate-openspec` | deferred | | O-2 | строка `make venv` в `dev/checks.md` (jsonschema «единственная») устарела; её правит PR #117 | deferred | ## Rulings I made - **R-1 (план 2).** `make check` красный по `validate-openspec` (O-1) — не чинить; цели проверены по отдельности. Цена: `make check` красный до отдельной правки Makefile. - **R-2 (план 2).** Р-42 исполнен здесь (задача 5b) с пропуском хостов без копии, чтобы `20 «копии нет»` не блокировал снимок до задач 7–9. Цена: пока хост без копии, снимок о ней не напомнит; тест снимка требует Python ≥ 3.11 с PyYAML. - **R-3 (план 2).** В спеке убрано «и его конфигом линтеров» (конфиг пакета в копию не кладётся, P2-1). Цена: нет. - **R-4 (план 2).** Защиты раскладки липкие; при коде 1 копия остаётся в дереве; после `make check` хоста `evaluate` повторяется. Цена: после отказа защиты оператор убирает копию сам. - **R-5 (план 2).** Решение финального ревью: `--in-place` требует `--host-dir` и отказывает (код 2) на основном checkout и ветке main/master — защита основных checkout'ов (guard-main). Цена: `--in-place --host` недоступно. - Решения автора плана P2-1…P2-21 — в design.md ветки `feat/116-unified-normalization` (пункты 143–167). 🤖 Generated with [Claude Code](https://claude.com/claude-code)
aep added 9 commits 2026-10-18 18:33:04 +03:00
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Также: evaluate при коммите VERSION без arm_statements/ даёт код 20 вместо падения с 128 (T2.1).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
aep merged commit 34bb1850d4 into main 2026-10-18 18:36:45 +03:00
Sign in to join this conversation.
No Reviewers
No Label
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: RSHB/arm-ka-docs#121
No description provided.