arm-ka-docs/scripts/test_prepare_contour_snapshot.sh
Andrey Epifancev 7b37e696ca fix(dev): снимок для контура вырезает артефакты агента на любой глубине (#75)
Фронт перенесён в arm-core/web/ из arm-web вместе со своими .claude/, CLAUDE.md,
openspec/config.yaml, docs/superpowers/ и .codegraph/. Скрипт удалял их только в
корне, поэтому в arm-core их пришлось вычищать вручную (arm-core #73).

- prepare-contour-snapshot.sh: удаление и проверка через find по всему дереву;
  опустевшие docs/ убираются; Dockerfile/.dockerignore — по-прежнему только корень
- scripts/test_prepare_contour_snapshot.sh + make test-snapshot (входит в make check):
  синтетический arm-core с артефактами в корне и в web/
- dev/contour-transfer-guide.md §1–§3 и текст SNAPSHOT.md

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_019qoydUVv8g1qHxc123u2RR
2026-10-08 23:42:04 +04:00

54 lines
2.8 KiB
Bash
Executable File

#!/usr/bin/env bash
# Тест prepare-contour-snapshot.sh на синтетическом репозитории arm-core: артефакты агента вырезаются на любой глубине
# (в т.ч. во вложенном web/), спецификации и код остаются. Запуск: make test-snapshot (или напрямую из корня docs).
set -euo pipefail
SCRIPT="$(cd "$(dirname "$0")" && pwd)/prepare-contour-snapshot.sh"
WORK=$(mktemp -d)
trap 'rm -rf "$WORK"' EXIT
git init -q --bare "$WORK/origin.git"
git clone -q "$WORK/origin.git" "$WORK/src/arm-core" 2>/dev/null
R="$WORK/src/arm-core"
put() { mkdir -p "$(dirname "$R/$1")"; printf '%s\n' "${2:-x}" > "$R/$1"; }
# платформенные файлы, без которых проверка снимка падает
printf 'venv:\n\tuv venv api/.venv\n' > "$R/Makefile"
for p in raisa_config.yml setup/setup.sh setup/pip.conf api/run_server.py api/requirements.txt api/.env.test \
api/contracts/schema.json; do put "$p"; done
# корень: артефакты агента и локальная сборка
for p in .claude/skills/a/SKILL.md CLAUDE.md openspec/config.yaml docs/superpowers/plans/p.md Dockerfile .dockerignore; do
put "$p" "/Users/someone/projects"
done
put openspec/specs/osv/spec.md
# вложенный фронт (как web/ из arm-web): те же артефакты на второй глубине
for p in web/.claude/commands/opsx/apply.md web/.codegraph/.gitignore web/CLAUDE.md web/openspec/config.yaml \
web/docs/superpowers/plans/2026-10-08-demo.md; do
put "$p" "/Users/someone/projects"
done
put web/openspec/specs/osv-ui/spec.md
put web/openspec/changes/archive/2026-10-08-demo/design.md
put web/src/App.tsx
put web/docs/notes.md # прочее содержимое вложенного docs/ остаётся
git -C "$R" add -A
git -C "$R" -c user.name=t -c user.email=t@t commit -qm init
git -C "$R" push -q origin HEAD:main 2>/dev/null
git -C "$R" fetch -q origin
"$SCRIPT" "$R" "$WORK/out" origin/main >/dev/null
D="$WORK/out/arm-core"
fail=0
for p in .claude CLAUDE.md openspec/config.yaml docs Dockerfile .dockerignore \
web/.claude web/.codegraph web/CLAUDE.md web/openspec/config.yaml web/docs/superpowers; do
if [ -e "$D/$p" ]; then echo "FAIL: в снимке остался $p" >&2; fail=1; fi
done
for p in openspec/specs/osv/spec.md web/openspec/specs/osv-ui/spec.md web/openspec/changes/archive/2026-10-08-demo/design.md \
web/src/App.tsx web/docs/notes.md SNAPSHOT.md; do
if [ ! -e "$D/$p" ]; then echo "FAIL: из снимка пропал $p" >&2; fail=1; fi
done
[ "$fail" = 0 ] || exit 1
echo "ok: prepare-contour-snapshot.sh вырезает артефакты агента на любой глубине"