- git-pr.md: self-merge разрешён для Mera/Ptica (solo+pipeline, любой scope, зелёный CI); balance_platform = stage only; tripwires (secret / guard-files) остаются human-only - CLAUDE.md: qa-tester + deep-code-reviewer добавлены в subagent-таблицу (rule #7 / merge-authority) - frontend.md: codegen path src/types/openapi.ts -> src/lib/api-types.ts (реальный out) - deploy.md: GHA -> Forgejo Actions; синк path-триггеров (caddy/**, data/sql/**, ops/glitchtip-auth-forwarder/**, deploy-tradein.yml) - work-as-reviewer/analyst: cadence в body синхронизирован с frontmatter (5m->2m / 30m->15m) Audit 2026-06-27 + решение юзера по split commit/merge-автономии.
3.8 KiB
| paths | |||||
|---|---|---|---|---|---|
|
Deploy conventions
Post-deploy verification (MANDATORY)
После КАЖДОГО успешного merge+deploy на main — немедленно spawn qa-tester subagent с playwright smoke по тому, что merged.
Why: Без auto-smoke user сам ловит prod TypeErrors / 4xx / overlay bugs которые qa-tester catched бы за 2 мин. Плохой UX + потерянное время на P0 hotfixes уже после того как user увидел проблему. User rule (2026-05-18): «проверяй через плэйврайт сразу после деплоя».
How to apply:
- После
mcp__forgejo__get_pull_requestmerged: trueИ подтверждения deploy success (HTTP 200 на routes / GHA run finished / user сказал «deploy прошёл») —Agentsubagent_type=qa-tester. - Prompt: routes изменённые в PR + expected behaviour из PR body + console errors check + critical API calls (4xx/5xx detection) + regression baseline (
/,/health,/landing/stats). - Background OK — wait notification, не блокировать остальной flow.
- НЕ дожидаться user feedback «не работает» — qa-tester ловит сам.
Reference incident: PR #346 (2026-05-18) deploy → user сам нашёл prod 500 на by-bbox, потом 400 на analyze, потом TypeError на poi-score, потом UI overlap. Каждое ловилось бы playwright smoke по /site-finder/analysis/{cad}.
Path triggers (Forgejo Actions, .forgejo/workflows/)
backend/**,frontend/**,Caddyfile,caddy/**,docker-compose.prod.yml,data/sql/**,ops/glitchtip-auth-forwarder/**,.forgejo/workflows/deploy.yml→deploy.yml(main Site Finder stack)- trade-in изменения →
deploy-tradein.yml(отдельный stack; paths-filter base = last deployed SHA → накопленный diff, fail-safe build-all) docker-compose.obsidian.yml,scripts/setup-couchdb.sh→.github/workflows/deploy-obsidian.ymldocs/**alone → НЕ триггерит деплой
После изменения .env на VPS
docker compose up -d --force-recreate --no-deps <service>
docker compose restart НЕ перечитывает env_file.
Caddyfile
Bind-mounted → нужен явный caddy reload после изменения. deploy.yml делает автоматически после compose up -d.
Sentry release tracking
SENTRY_RELEASE=$IMAGE_TAG пишется в backend/.env.runtime на VPS через sed — не полная перезапись файла (там user-managed COUCHDB_PASSWORD и пр.).
VPS git state
deploy.yml делает git reset --hard origin/main → любые ручные правки в /opt/gendesign стираются. .env-файлы выживают (в .gitignore).
DB migrations через deploy
data/sql/NN_*.sql применяются до compose up -d. Если SQL падает → deploy останавливается (exit 1), containers не обновляются.
Diagnose: GHA log "Apply DB migrations". См. .claude/rules/sql.md для migration order.
Запреты
- ❌ Менять
env_fileсекреты вdocker-compose*.yml— секреты через VPS.envфайлы - ❌ Полностью перезаписывать
.env.runtime— толькоsedдля конкретных переменных - ❌
git pullна VPS вручную — deploy.yml уже делаетgit reset --hard - ❌ Hardcode tags / SHA в compose files —
${IMAGE_TAG}через env