feat(scripts): снимок для контура — во web/ только зависимости сборки (#112) #113

Merged
aep merged 2 commits from feat/112-contour-web-deps into main 2026-10-16 14:01:01 +03:00
Owner

Суть

Решение владельца 16.10.2026. В контуре фронт только собирается (npm install через Nexus + rsbuild build), а зеркало npm банка не содержит свежих версий инструментов разработки (уже ломались на vitest ≤3.1.4; arm-web #29 добавил eslint 9.17.0, typescript-eslint, prettier). Связь: AURORA-1635, arm-core #116.

prepare-contour-snapshot.sh теперь для arm-core:

  • урезает web/package.json по разрешённому списку (WEB_DEV_ALLOW, WEB_OPTIONAL_KEEP_PREFIX, WEB_SCRIPTS_KEEP в начале скрипта): devDependencies @rsbuild/core, @rsbuild/plugin-react, tailwindcss, daisyui; dependencies без изменений; optional — только raisa-*; scripts — build, start, preview;
  • сокращает web-check в Makefile снимка до npm install + npm run build (check-full ссылается на web-check как раньше);
  • пишет в SNAPSHOT.md убранные пакеты и скрипты;
  • сам собирает урезанный web/ во временной копии; не собралось — код 1, «пакет, нужный сборке, не в разрешённом списке», каталог снимка удаляется. Отключение для тестов без сети — SNAPSHOT_SKIP_WEB_BUILD=1, по умолчанию проверка включена;
  • гайд dev/contour-transfer-guide.md: раздел 3.2 и правило «web/package.json из контура обратно не переносить».

tabular-parser и scan-gateway не затронуты (фронта нет, npm не вызывается — есть тест).

Как проверить

make -C docs test-snapshot test-sync-web validate-contracts; боевой прогон: docs/scripts/prepare-contour-snapshot.sh --web-as-is arm-core <каталог>.

Проверки

  • TDD: тесты написаны первыми, красные (devDependencies/optional/scripts/Makefile/SNAPSHOT.md), затем зелёные.
  • make validate-contracts test-snapshot test-sync-web — зелёные; validate-openspec падает по известной причине (docs#110 O-1), не относится к задаче.
  • Боевой прогон на arm-core@e395eda с включённой проверкой сборки: npm install + npm run build урезанного web/ прошли (27 с). Убрано: devDependencies @biomejs/biome, @eslint/js, @types/react, @types/react-dom, eslint, eslint-config-prettier, eslint-plugin-react, eslint-plugin-react-hooks, globals, prettier, typescript, typescript-eslint, vitest; optional @biomejs/cli-linux-x64-musl; scripts test, format, lint.

Rulings I made

Маркер Решение Статус
R-1 Достаточность списка проверена по rsbuild.config.ts (rsbuild core + react), postcss.config.cjs (tailwindcss), tailwind.config.js (require('daisyui')), импортам src и фактической сборкой; typescript и @types/* сборке не нужны (SWC) fixed (этот коммит)
R-2 Проверка сборки идёт во временной копии web/, а не в выводе: снимок гарантированно без node_modules/dist/package-lock.json, упавшая проверка ��ичего не оставляет fixed (этот коммит)
R-3 Скрипты — тоже разрешённый список (build start preview), а не список на удаление: новый dev-скрипт не просочится в контур молча; убранное видно в SNAPSHOT.md fixed (этот коммит)
R-4 Если в devDependencies нет пакета из разрешённого списка — снимок падает с понятной ошибкой (скрипт устарел) fixed (этот коммит)
R-5 Конфиги инструментов (biome.json, eslint.config.js, tsconfig.json) в web/ снимка оставлены: сборка их не читает, вырезание — лишний риск rejected (вырезать): не нужно для цели, отмечено в гайде
O-1 test_sync_web.sh: синтетические package.json дополнены devDependencies из списка, в пайплайне задан SNAPSHOT_SKIP_WEB_BUILD=1 fixed (этот коммит)
O-2 Раздел 3.2 гайда стоял перед 3.1 — перенесён после (номер 3.1 сохранён: на него ссылается sync-web.sh) fixed c54d585

Closes #112

🤖 Generated with Claude Code

## Суть Решение владельца 16.10.2026. В контуре фронт только собирается (`npm install` через Nexus + `rsbuild build`), а зеркало npm банка не содержит свежих версий инструментов разработки (уже ломались на vitest ≤3.1.4; arm-web #29 добавил eslint 9.17.0, typescript-eslint, prettier). Связь: AURORA-1635, arm-core #116. `prepare-contour-snapshot.sh` теперь для arm-core: - урезает `web/package.json` по разрешённому списку (`WEB_DEV_ALLOW`, `WEB_OPTIONAL_KEEP_PREFIX`, `WEB_SCRIPTS_KEEP` в начале скрипта): devDependencies `@rsbuild/core`, `@rsbuild/plugin-react`, `tailwindcss`, `daisyui`; `dependencies` без изменений; optional — только `raisa-*`; scripts — `build`, `start`, `preview`; - сокращает `web-check` в Makefile снимка до `npm install` + `npm run build` (`check-full` ссылается на `web-check` как раньше); - пишет в `SNAPSHOT.md` убранные пакеты и скрипты; - сам собирает урезанный `web/` во временной копии; не собралось — код 1, «пакет, нужный сборке, не в разрешённом списке», каталог снимка удаляется. Отключение для тестов без сети — `SNAPSHOT_SKIP_WEB_BUILD=1`, по умолчанию проверка включена; - гайд `dev/contour-transfer-guide.md`: раздел 3.2 и правило «`web/package.json` из контура обратно не переносить». tabular-parser и scan-gateway не затронуты (фронта нет, npm не вызывается — есть тест). ## Как проверить `make -C docs test-snapshot test-sync-web validate-contracts`; боевой прогон: `docs/scripts/prepare-contour-snapshot.sh --web-as-is arm-core <каталог>`. ## Проверки - TDD: тесты написаны первыми, красные (devDependencies/optional/scripts/Makefile/SNAPSHOT.md), затем зелёные. - `make validate-contracts test-snapshot test-sync-web` — зелёные; `validate-openspec` падает по известной причине (docs#110 O-1), не относится к задаче. - Боевой прогон на arm-core@e395eda с включённой проверкой сборки: `npm install` + `npm run build` урезанного web/ прошли (27 с). Убрано: devDependencies `@biomejs/biome, @eslint/js, @types/react, @types/react-dom, eslint, eslint-config-prettier, eslint-plugin-react, eslint-plugin-react-hooks, globals, prettier, typescript, typescript-eslint, vitest`; optional `@biomejs/cli-linux-x64-musl`; scripts `test, format, lint`. ## Rulings I made | Маркер | Решение | Статус | |---|---|---| | R-1 | Достаточность списка проверена по `rsbuild.config.ts` (rsbuild core + react), `postcss.config.cjs` (tailwindcss), `tailwind.config.js` (`require('daisyui')`), импортам `src` и фактической сборкой; typescript и `@types/*` сборке не нужны (SWC) | fixed (этот коммит) | | R-2 | Проверка сборки идёт во временной копии `web/`, а не в выводе: снимок гарантированно без `node_modules`/`dist`/`package-lock.json`, упавшая проверка ��ичего не оставляет | fixed (этот коммит) | | R-3 | Скрипты — тоже разрешённый список (`build start preview`), а не список на удаление: новый dev-скрипт не просочится в контур молча; убранное видно в SNAPSHOT.md | fixed (этот коммит) | | R-4 | Если в `devDependencies` нет пакета из разрешённого списка — снимок падает с понятной ошибкой (скрипт устарел) | fixed (этот коммит) | | R-5 | Конфиги инструментов (`biome.json`, `eslint.config.js`, `tsconfig.json`) в `web/` снимка оставлены: сборка их не читает, вырезание — лишний риск | rejected (вырезать): не нужно для цели, отмечено в гайде | | O-1 | `test_sync_web.sh`: синтетические `package.json` дополнены devDependencies из списка, в пайплайне задан `SNAPSHOT_SKIP_WEB_BUILD=1` | fixed (этот коммит) | | O-2 | Раздел 3.2 гайда стоял перед 3.1 — перенесён после (номер 3.1 сохранён: на него ссылается sync-web.sh) | fixed c54d585 | Closes #112 🤖 Generated with [Claude Code](https://claude.com/claude-code)
aep added 1 commit 2026-10-16 13:47:43 +03:00
prepare-contour-snapshot.sh урезает web/package.json arm-core по разрешённому списку
(devDependencies: @rsbuild/core, @rsbuild/plugin-react, tailwindcss, daisyui; optional: raisa-*;
scripts: build, start, preview), сокращает web-check до npm install + npm run build, пишет убранное
в SNAPSHOT.md и сам собирает урезанный web/ во временной копии: не собралось — снимка нет.
Гайд: раздел 3.2 и правило «web/package.json из контура обратно не переносить».

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
aep added 1 commit 2026-10-16 13:48:24 +03:00
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
aep merged commit 0fc940d072 into main 2026-10-16 14:01:01 +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#113
No description provided.