Скрипт синхронизации arm-core/web с arm-web и проверка отставания в пайплайне переноса в контур (#94) #95

Merged
aep merged 1 commits from feat/94-sync-web-script into main 2026-10-10 09:47:44 +03:00
Owner

Закрывает #94.

scripts/sync-web.sh — перенос изменений RSHB/arm-web@test во встроенный фронт arm-core/web одной командой
(make sync-web, SYNC_ARGS=--check|--dry-run). Повторяет ручной процесс arm-core #94 и #100:

  • точка синхронизации — коммит arm-web, у которого хэш дерева src равен хэшу web/src в arm-core main; состояние не хранится;
  • нет точки → прямые правки web/ в arm-core, стоп с кодом 20 и списком коммитов (автоперенос затёр бы их);
  • worktree .wt/web-sync-<sha7>/arm-core по абсолютному пути, issue в arm-core через tea, ветка feat/<N>-web-sync-<sha7>, .bounded;
  • перенос набора: всё дерево arm-web, кроме служебного (CLAUDE.md, .claude/, openspec/, docs/, scripts/, Makefile,
    ARCHITECTURE.md, .gitignore, lockfile); контроль diff -rq с деревом arm-web;
  • vitest, tsc --noEmit, biome (предупреждений не больше, чем на main), rsbuild build — до коммита; красное — стоп, worktree остаётся;
  • коммит и PR с диапазоном коммитов arm-web, файлами, цифрами проверок и рулингами R-1/R-2. Не мержит, не удаляет, не закрывает.

Пайплайн переноса в контур. prepare-contour-snapshot.sh для arm-core перед снимком вызывает sync-web.sh --check.
Отставание → вопрос «перенести как есть? [y/N]»: y — снимок, отставание записано в SNAPSHOT.md; n — запуск синхронизации
и остановка переноса (код 3) до merge PR и закрытия issue. Без терминала — флаг --web-as-is первым аргументом, иначе код 3.
Расхождение — стоп. Нет arm-web рядом — предупреждение, снимок делается (старый тест снимка проходит без изменений).

Тест scripts/test_sync_web.sh (make test-sync-web, входит в make check): синтетические arm-web и arm-core с bare-origin;
сценарии — синхронно, отставание (--check 10, --dry-run переносит набор и дерево web/src совпадает с test:src, повторный
запуск отказывает), прямые правки (20), пайплайн без терминала / ответ y / ответ n / --web-as-is / без arm-web / при расхождении.
Оба теста зелёные. Реальный прогон: sync-web.sh --check из worktree — «синхронен с arm-web@origin/test (100fbfb)»;
prepare-contour-snapshot.sh arm-core без терминала — снимок 547 файлов готов.

Гайд dev/contour-transfer-guide.md: §3 шаг 0, новый §3.1, §8 п. 3.

Rulings I made

  • R-1 — README.md входит в набор синхронизации (решение владельца 10.10.2026); следствие: правка README встроенного фронта делается в arm-web.
  • R-2 — корень workspace ищется от каталога скрипта: сначала ../../../.. (запуск из worktree .wt/<задача>/docs), затем ../..; выбирается тот, где рядом есть и arm-core, и arm-web.
  • R-3 — --check имеет приоритет над --dry-run при любом порядке флагов: пайплайн дописывает $SYNC_WEB_ARGS в конец и в тесте передаёт --dry-run.
  • R-4 — коммит синхронизации подписывается Co-Authored-By: sync-web.sh, а не моделью: код не генерируется, а переносится.
  • R-5 — bounded-задача без OpenSpec change.

🤖 Generated with Claude Code

Закрывает #94. **`scripts/sync-web.sh`** — перенос изменений `RSHB/arm-web@test` во встроенный фронт `arm-core/web` одной командой (`make sync-web`, `SYNC_ARGS=--check|--dry-run`). Повторяет ручной процесс arm-core #94 и #100: - точка синхронизации — коммит arm-web, у которого хэш дерева `src` равен хэшу `web/src` в arm-core main; состояние не хранится; - нет точки → прямые правки `web/` в arm-core, стоп с кодом 20 и списком коммитов (автоперенос затёр бы их); - worktree `.wt/web-sync-<sha7>/arm-core` по абсолютному пути, issue в arm-core через `tea`, ветка `feat/<N>-web-sync-<sha7>`, `.bounded`; - перенос набора: всё дерево arm-web, кроме служебного (`CLAUDE.md`, `.claude/`, `openspec/`, `docs/`, `scripts/`, `Makefile`, `ARCHITECTURE.md`, `.gitignore`, lockfile); контроль `diff -rq` с деревом arm-web; - vitest, `tsc --noEmit`, biome (предупреждений не больше, чем на main), `rsbuild build` — до коммита; красное — стоп, worktree остаётся; - коммит и PR с диапазоном коммитов arm-web, файлами, цифрами проверок и рулингами R-1/R-2. Не мержит, не удаляет, не закрывает. **Пайплайн переноса в контур.** `prepare-contour-snapshot.sh` для arm-core перед снимком вызывает `sync-web.sh --check`. Отставание → вопрос «перенести как есть? [y/N]»: `y` — снимок, отставание записано в `SNAPSHOT.md`; `n` — запуск синхронизации и остановка переноса (код 3) до merge PR и закрытия issue. Без терминала — флаг `--web-as-is` первым аргументом, иначе код 3. Расхождение — стоп. Нет arm-web рядом — предупреждение, снимок делается (старый тест снимка проходит без изменений). **Тест** `scripts/test_sync_web.sh` (`make test-sync-web`, входит в `make check`): синтетические arm-web и arm-core с bare-origin; сценарии — синхронно, отставание (`--check` 10, `--dry-run` переносит набор и дерево `web/src` совпадает с `test:src`, повторный запуск отказывает), прямые правки (20), пайплайн без терминала / ответ y / ответ n / `--web-as-is` / без arm-web / при расхождении. Оба теста зелёные. Реальный прогон: `sync-web.sh --check` из worktree — «синхронен с arm-web@origin/test (100fbfb)»; `prepare-contour-snapshot.sh arm-core` без терминала — снимок 547 файлов готов. Гайд `dev/contour-transfer-guide.md`: §3 шаг 0, новый §3.1, §8 п. 3. ## Rulings I made - R-1 — `README.md` входит в набор синхронизации (решение владельца 10.10.2026); следствие: правка README встроенного фронта делается в arm-web. - R-2 — корень workspace ищется от каталога скрипта: сначала `../../../..` (запуск из worktree `.wt/<задача>/docs`), затем `../..`; выбирается тот, где рядом есть и `arm-core`, и `arm-web`. - R-3 — `--check` имеет приоритет над `--dry-run` при любом порядке флагов: пайплайн дописывает `$SYNC_WEB_ARGS` в конец и в тесте передаёт `--dry-run`. - R-4 — коммит синхронизации подписывается `Co-Authored-By: sync-web.sh`, а не моделью: код не генерируется, а переносится. - R-5 — bounded-задача без OpenSpec change. 🤖 Generated with [Claude Code](https://claude.com/claude-code)
aep added 1 commit 2026-10-10 09:46:09 +03:00
Скрипт делает одной командой то, что делалось вручную в arm-core #94 и #100:
точка синхронизации по хэшу дерева src (без хранения состояния), worktree по
абсолютному пути, issue и PR в arm-core через tea, перенос набора (всё кроме
служебного arm-web), контроль diff -rq, проверки vitest/tsc/biome/build до
коммита. Режимы --check (0/10/20), --dry-run, --ref, --core-ref.

prepare-contour-snapshot.sh для arm-core перед снимком вызывает sync-web.sh
--check: при отставании спрашивает «перенести как есть?», «n» запускает
синхронизацию и останавливает перенос (код 3) до merge PR и закрытия issue;
без терминала — флаг --web-as-is; расхождение (прямые правки web/) — стоп.
Тест test_sync_web.sh на синтетических репозиториях, цели make test-sync-web
и sync-web, гайд §3 шаг 0, §3.1, §8.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
aep merged commit c2f9e7af98 into main 2026-10-10 09:47:44 +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#95
No description provided.