git 2.50 на явно названный в pathspec игнорируемый путь (':!web/dist')
печатает «paths are ignored» и возвращает 1 — sync-web останавливался
после проверок, до коммита и PR (issue arm-core #115 создана, PR не было).
web/dist и так игнорируется .gitignore arm-core; исключение симлинка
node_modules оставлено (.gitignore его не ловит).
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
tea 0.16.0 не принимает --login/--repo перед подкомандой: «flag provided
but not defined: -login» — sync-web падал сразу после создания worktree,
issue и PR в arm-core не создавались. Флаги вынесены в TEA_FLAGS и
передаются после «issues create» / «pulls create»; подсказка ручного
создания PR — с --login/--repo/--base. В test_sync_web.sh — проверка, что
ни один вызов tea в sync-web.sh и prepare-contour-snapshot.sh не начинается
с флага.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Скрипт делает одной командой то, что делалось вручную в 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>