From 381c373467602705f3c57c3b38c3ffa0052ab2db Mon Sep 17 00:00:00 2001 From: Andrey Epifancev Date: Fri, 9 Oct 2026 11:28:03 +0400 Subject: [PATCH] =?UTF-8?q?plan:=20=D0=B0=D0=B1=D1=81=D0=BE=D0=BB=D1=8E?= =?UTF-8?q?=D1=82=D0=BD=D1=8B=D0=B5=20=D0=BF=D1=83=D1=82=D0=B8=20worktree?= =?UTF-8?q?=20=D0=B2=20git-=D0=BA=D0=BE=D0=BC=D0=B0=D0=BD=D0=B4=D0=B0?= =?UTF-8?q?=D1=85=20(#80)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Относительный `git -C arm-core` из корня workspace указывал на main-checkout (O-1 первого запуска контроллера). Co-Authored-By: Claude Opus 5.5 Claude-Session: https://claude.ai/code/session_019qoydUVv8g1qHxc123u2RR --- .../2026-10-09-statement-template-lines.md | 78 ++++++++++--------- 1 file changed, 41 insertions(+), 37 deletions(-) diff --git a/docs/superpowers/plans/2026-10-09-statement-template-lines.md b/docs/superpowers/plans/2026-10-09-statement-template-lines.md index abfae31..7356688 100644 --- a/docs/superpowers/plans/2026-10-09-statement-template-lines.md +++ b/docs/superpowers/plans/2026-10-09-statement-template-lines.md @@ -33,6 +33,10 @@ - arm-core: `make check` зелёный после каждой задачи backend; `make check-full` — перед PR. arm-web: `make check` перед PR. - arm-web: все PR — в ветку `test`, не в `main`. Фронт: цвет строки «БАЛАНС» `#f9f0ff`, шрифт 700; подсветка ячейки («исправлено» `#e6f4ff`, «требует проверки» `#fff7e6`) перекрывает фон строки. +- **Git и пути — только абсолютные.** Все git-команды — `git -C /Users/andrey.epifancev/projects/awp-ca/.wt/stmt-template/ …` (или cwd внутри + этого worktree); относительный `git -C arm-core` из корня workspace указывает на main-checkout — хук guard-main + справедливо блокирует (O-1 первого запуска, 09.10.2026). Исключение — `git -C /Users/andrey.epifancev/projects/awp-ca/ fetch` и `worktree add` + в подготовке задач 6–7 (не commit/push). Коммиты в worktree на ветке фичи разрешены владельцем 09.10.2026. - Git — всегда `git -C ` или cwd внутри worktree; в `main` не коммитить (хук guard-main); хуки не обходить — при отказе хука остановиться и сообщить. @@ -141,7 +145,7 @@ def test_invalid_catalog_is_value_error(tmp_path: Path, body: str, message: str) - [ ] **Step 2: Запустить — падает** -Run: `cd arm-core/api && .venv/bin/pytest tests/test_domain_statement_lines.py -q` +Run: `cd /Users/andrey.epifancev/projects/awp-ca/.wt/stmt-template/arm-core/api && .venv/bin/pytest tests/test_domain_statement_lines.py -q` Expected: FAIL — `ModuleNotFoundError: No module named 'src.domain.statement_lines'`. - [ ] **Step 3: Создать справочник** `api/rules/statement_lines.yaml` (точно этот текст): @@ -354,19 +358,19 @@ def load_line_catalog(path: Path | None = None) -> LineCatalog: - [ ] **Step 5: Запустить — проходит** -Run: `cd arm-core/api && .venv/bin/pytest tests/test_domain_statement_lines.py -q` +Run: `cd /Users/andrey.epifancev/projects/awp-ca/.wt/stmt-template/arm-core/api && .venv/bin/pytest tests/test_domain_statement_lines.py -q` Expected: PASS (все тесты). - [ ] **Step 6: Линтеры** -Run: `cd arm-core && make lint` +Run: `cd /Users/andrey.epifancev/projects/awp-ca/.wt/stmt-template/arm-core && make lint` Expected: ruff и mypy без ошибок (длинные строки yaml линтер не проверяет). - [ ] **Step 7: Коммит** ```bash -git -C arm-core add api/rules/statement_lines.yaml api/src/domain/statement_lines.py api/tests/test_domain_statement_lines.py -git -C arm-core commit -m "feat(statements): справочник строк форм ББ/ОФР по редакциям (#80)" +git -C /Users/andrey.epifancev/projects/awp-ca/.wt/stmt-template/arm-core add api/rules/statement_lines.yaml api/src/domain/statement_lines.py api/tests/test_domain_statement_lines.py +git -C /Users/andrey.epifancev/projects/awp-ca/.wt/stmt-template/arm-core commit -m "feat(statements): справочник строк форм ББ/ОФР по редакциям (#80)" ``` (В конце сообщения — строки атрибуции из system-reminder сессии.) @@ -564,8 +568,8 @@ async def test_get_without_edition_completes_cells_only( - [ ] **Step 2: Запустить — падают** -Run: `cd arm-core && make up` (если стенд PostgreSQL/NATS ещё не поднят), затем -`cd arm-core/api && .venv/bin/pytest tests/test_api_statements.py -q -k "get_"` +Run: `cd /Users/andrey.epifancev/projects/awp-ca/.wt/stmt-template/arm-core && make up` (если стенд PostgreSQL/NATS ещё не поднят), затем +`cd /Users/andrey.epifancev/projects/awp-ca/.wt/stmt-template/arm-core/api && .venv/bin/pytest tests/test_api_statements.py -q -k "get_"` Expected: FAIL — `KeyError: 'origin'` / неверное число строк. - [ ] **Step 3: Реализовать в `api/src/schemas/statements.py`.** @@ -691,19 +695,19 @@ load_line_catalog`; `build_out`: - [ ] **Step 5: Запустить — проходят** -Run: `cd arm-core/api && .venv/bin/pytest tests/test_api_statements.py -q` +Run: `cd /Users/andrey.epifancev/projects/awp-ca/.wt/stmt-template/arm-core/api && .venv/bin/pytest tests/test_api_statements.py -q` Expected: PASS (все, включая старые PATCH-тесты: `_first_cell` берёт строку с суммой — это строка источника). - [ ] **Step 6: `make check`** -Run: `cd arm-core && make check` +Run: `cd /Users/andrey.epifancev/projects/awp-ca/.wt/stmt-template/arm-core && make check` Expected: lint + unit-тесты зелёные. - [ ] **Step 7: Коммит** ```bash -git -C arm-core add api/src/schemas/statements.py api/src/services/statements.py api/tests/test_api_statements.py -git -C arm-core commit -m "feat(statements): GET формы достраивает строки справочника и ячейки (#80)" +git -C /Users/andrey.epifancev/projects/awp-ca/.wt/stmt-template/arm-core add api/src/schemas/statements.py api/src/services/statements.py api/tests/test_api_statements.py +git -C /Users/andrey.epifancev/projects/awp-ca/.wt/stmt-template/arm-core commit -m "feat(statements): GET формы достраивает строки справочника и ячейки (#80)" ``` --- @@ -952,7 +956,7 @@ async def test_patch_duplicate_line_code_rejected( - [ ] **Step 2: Запустить — падают** -Run: `cd arm-core/api && .venv/bin/pytest tests/test_api_statements.py -q -k "patch"` +Run: `cd /Users/andrey.epifancev/projects/awp-ca/.wt/stmt-template/arm-core/api && .venv/bin/pytest tests/test_api_statements.py -q -k "patch"` Expected: новые тесты FAIL (422 массивом на `line_code` — поле запрещено `extra="forbid"`), старые PASS. - [ ] **Step 3: `CellPatch`** в `api/src/schemas/statements.py` (импорт `model_validator` из `pydantic`): @@ -1115,16 +1119,16 @@ FinancialStatementValue`. Константа `LINE_EXISTS = "строка уже - [ ] **Step 6: Запустить — проходят** -Run: `cd arm-core/api && .venv/bin/pytest tests/test_api_statements.py -q` +Run: `cd /Users/andrey.epifancev/projects/awp-ca/.wt/stmt-template/arm-core/api && .venv/bin/pytest tests/test_api_statements.py -q` Expected: PASS. - [ ] **Step 7: `make check`, коммит** -Run: `cd arm-core && make check` — зелёный. +Run: `cd /Users/andrey.epifancev/projects/awp-ca/.wt/stmt-template/arm-core && make check` — зелёный. ```bash -git -C arm-core add api/src/schemas/statements.py api/src/repositories/statements.py api/src/services/statements.py api/tests/test_api_statements.py -git -C arm-core commit -m "feat(statements): правка по line_code создаёт строку и ячейку формы (#80)" +git -C /Users/andrey.epifancev/projects/awp-ca/.wt/stmt-template/arm-core add api/src/schemas/statements.py api/src/repositories/statements.py api/src/services/statements.py api/tests/test_api_statements.py +git -C /Users/andrey.epifancev/projects/awp-ca/.wt/stmt-template/arm-core commit -m "feat(statements): правка по line_code создаёт строку и ячейку формы (#80)" ``` --- @@ -1180,7 +1184,7 @@ async def test_template_line_checks_follow_filled_amounts( - [ ] **Step 2: Запустить — падает** -Run: `cd arm-core/api && .venv/bin/pytest tests/test_api_statements.py -q -k template_line_checks` +Run: `cd /Users/andrey.epifancev/projects/awp-ca/.wt/stmt-template/arm-core/api && .venv/bin/pytest tests/test_api_statements.py -q -k template_line_checks` Expected: FAIL на последнем assert — очищенная 1700 (сумма `None` = 0) даёт нарушение в обеих колонках. - [ ] **Step 3: Реализация** — заменить тело `statement_amounts` после выборки колонок: @@ -1218,14 +1222,14 @@ Docstring дополнить: «Созданные правкой строки ( - [ ] **Step 4: Запустить — проходит; `make check`** -Run: `cd arm-core/api && .venv/bin/pytest tests/test_api_statements.py tests/test_form_confirmable.py tests/test_auto_confirm.py -q` -затем `cd arm-core && make check`. Expected: PASS. +Run: `cd /Users/andrey.epifancev/projects/awp-ca/.wt/stmt-template/arm-core/api && .venv/bin/pytest tests/test_api_statements.py tests/test_form_confirmable.py tests/test_auto_confirm.py -q` +затем `cd /Users/andrey.epifancev/projects/awp-ca/.wt/stmt-template/arm-core && make check`. Expected: PASS. - [ ] **Step 5: Коммит** ```bash -git -C arm-core add api/src/repositories/statements.py api/tests/test_api_statements.py -git -C arm-core commit -m "feat(statements): пустые созданные строки не участвуют в проверках §7 (#80)" +git -C /Users/andrey.epifancev/projects/awp-ca/.wt/stmt-template/arm-core add api/src/repositories/statements.py api/tests/test_api_statements.py +git -C /Users/andrey.epifancev/projects/awp-ca/.wt/stmt-template/arm-core commit -m "feat(statements): пустые созданные строки не участвуют в проверках §7 (#80)" ``` --- @@ -1252,16 +1256,16 @@ git -C arm-core commit -m "feat(statements): пустые созданные с созданные строки не участвуют в §7 (`statement_amounts`). Решения — `openspec/changes/statement-template-lines/design.md`.» - [ ] **Step 3: Полная проверка** -Run: `cd arm-core && make check-full` +Run: `cd /Users/andrey.epifancev/projects/awp-ca/.wt/stmt-template/arm-core && make check-full` Expected: все цели зелёные; вывод сохранить для описания PR. Если `e2e` пропущен (нет профиля `services`) — так и указать в PR. - [ ] **Step 4: Коммит, push, PR** ```bash -git -C arm-core add README.md CLAUDE.md openspec/changes/statement-template-lines/design.md -git -C arm-core commit -m "docs: полный состав строк ББ/ОФР в README и CLAUDE.md (#80)" -git -C arm-core push -u origin feat/80-statement-template-lines +git -C /Users/andrey.epifancev/projects/awp-ca/.wt/stmt-template/arm-core add README.md CLAUDE.md openspec/changes/statement-template-lines/design.md +git -C /Users/andrey.epifancev/projects/awp-ca/.wt/stmt-template/arm-core commit -m "docs: полный состав строк ББ/ОФР в README и CLAUDE.md (#80)" +git -C /Users/andrey.epifancev/projects/awp-ca/.wt/stmt-template/arm-core push -u origin feat/80-statement-template-lines tea pulls create --login home --repo RSHB/arm-core --head feat/80-statement-template-lines --base main \ --title "Полный состав строк ББ/ОФР на экране проверки (#80)" --description "<описание>" ``` @@ -1277,13 +1281,13 @@ design.md + рулинги исполнения), таблица находок **Подготовка (до кода):** ```bash cd /Users/andrey.epifancev/projects/awp-ca -git -C arm-web fetch origin +git -C /Users/andrey.epifancev/projects/awp-ca/arm-web fetch origin tea issues create --login home --repo RSHB/arm-web --title "Шаблонные строки ББ/ОФР и выделение строк «БАЛАНС»" \ --description "Фронт к RSHB/arm-core#80: строки формы с id = null (origin = template) редактируются, правка уходит по line_code; строки 1600/1700 выделены цветом. Спека — arm-core openspec/changes/statement-template-lines." # номер issue → -git -C arm-web worktree add -b feat/-statement-template-lines ../.wt/stmt-template/arm-web origin/test +git -C /Users/andrey.epifancev/projects/awp-ca/arm-web worktree add -b feat/-statement-template-lines ../.wt/stmt-template/arm-web origin/test ln -s ../../web-proto/arm-web/node_modules .wt/stmt-template/arm-web/node_modules -cd .wt/stmt-template/arm-web && openspec new change statement-template-lines +cd /Users/andrey.epifancev/projects/awp-ca/.wt/stmt-template/arm-web && openspec new change statement-template-lines ``` **Files:** @@ -1545,16 +1549,16 @@ const lineBackground = (r: LayoutRow) => (r.kind === 'line' && r.grand ? GRAND_B - [ ] **Step 8: Проверки** -Run: `cd .wt/stmt-template/arm-web && make check` +Run: `cd /Users/andrey.epifancev/projects/awp-ca/.wt/stmt-template/arm-web && make check` Expected: biome, `tsc --noEmit`, vitest, `rsbuild build` — зелёные. Ошибки tsc в файлах, которых задача не касалась и которые были до неё, — не чинить, отметить в отчёте (O-маркер). - [ ] **Step 9: Коммит, push, PR в `test`** ```bash -git -C .wt/stmt-template/arm-web add -A src openspec/changes/statement-template-lines -git -C .wt/stmt-template/arm-web commit -m "feat(review): шаблонные строки ББ/ОФР и выделение строк «БАЛАНС» (#)" -git -C .wt/stmt-template/arm-web push -u origin feat/-statement-template-lines +git -C /Users/andrey.epifancev/projects/awp-ca/.wt/stmt-template/arm-web add -A src openspec/changes/statement-template-lines +git -C /Users/andrey.epifancev/projects/awp-ca/.wt/stmt-template/arm-web commit -m "feat(review): шаблонные строки ББ/ОФР и выделение строк «БАЛАНС» (#)" +git -C /Users/andrey.epifancev/projects/awp-ca/.wt/stmt-template/arm-web push -u origin feat/-statement-template-lines tea pulls create --login home --repo RSHB/arm-web --head feat/-statement-template-lines --base test \ --title "Шаблонные строки ББ/ОФР и выделение «БАЛАНС» (#)" --description "<описание>" ``` @@ -1570,12 +1574,12 @@ tea pulls create --login home --repo RSHB/arm-web --head feat/-statement-temp **Подготовка:** ```bash cd /Users/andrey.epifancev/projects/awp-ca -git -C docs fetch origin +git -C /Users/andrey.epifancev/projects/awp-ca/docs fetch origin tea issues create --login home --repo RSHB/arm-ka-docs --title "Полный состав строк ББ/ОФР: правило §7, OQ-150, гайды" \ --description "Документация к RSHB/arm-core#80 и arm-web#." # номер → rm .wt/stmt-template/docs # это симлинк на main-checkout; вместо него — worktree -git -C docs worktree add -b feat/-statement-template-lines ../.wt/stmt-template/docs origin/main +git -C /Users/andrey.epifancev/projects/awp-ca/docs worktree add -b feat/-statement-template-lines ../.wt/stmt-template/docs origin/main ``` **Files:** @@ -1610,9 +1614,9 @@ git -C docs worktree add -b feat/-statement-template-lines ../.wt/stmt-templa - [ ] **Step 5: Коммит, push, PR** ```bash -git -C .wt/stmt-template/docs add context dev -git -C .wt/stmt-template/docs commit -m "docs: полный состав строк ББ/ОФР — §7, OQ-150, гайды (#)" -git -C .wt/stmt-template/docs push -u origin feat/-statement-template-lines +git -C /Users/andrey.epifancev/projects/awp-ca/.wt/stmt-template/docs add context dev +git -C /Users/andrey.epifancev/projects/awp-ca/.wt/stmt-template/docs commit -m "docs: полный состав строк ББ/ОФР — §7, OQ-150, гайды (#)" +git -C /Users/andrey.epifancev/projects/awp-ca/.wt/stmt-template/docs push -u origin feat/-statement-template-lines tea pulls create --login home --repo RSHB/arm-ka-docs --head feat/-statement-template-lines --base main \ --title "Полный состав строк ББ/ОФР: §7, OQ-150, гайды (#)" --description "Closes #. К RSHB/arm-core#80, arm-web#." ```