diff --git a/CLAUDE.md b/CLAUDE.md index 94a6fe19..42c36d69 100644 --- a/CLAUDE.md +++ b/CLAUDE.md @@ -157,30 +157,79 @@ cd frontend && npm run codegen - View'ы пересоздаются `CREATE OR REPLACE VIEW` - Колонки удаляются `ALTER TABLE ... DROP COLUMN IF EXISTS` (после удаления зависимостей) -## Git workflow +## Git workflow — BRANCH + PR mandatory + +### Workflow (НИКАКОГО direct push в main) + +``` +1. Создаём feature branch: git checkout -b feat/foo-bar +2. Commits на этой ветке: git commit -m "..." +3. Push branch: git push -u origin feat/foo-bar +4. Создаём PR: gh pr create --title "..." --body "..." +5. Show PR URL пользователю → ждём review +6. Пользователь комментирует / approves +7. После approval — пользователь merge'ит (или я merge'у после явного "merge it") +8. Удаляем branch после merge +``` ### Branches -- `main` — protected, triggers prod deploy on push -- Feature branches: `feat/short-description` / `fix/short-description` +- `main` — protected, **никаких direct push**. Только через PR merge. +- Feature branches: `feat/short-description` / `fix/short-description` / `refactor/...` / `docs/...` / `chore/...` - Trunk-based, мелкие PR'ы (1-2 файла или 1 концептуальное изменение) -### Commit messages +### Commit messages (на feature branch) - Imperative mood: "fix worker crash" не "fixed worker crash" - Длинный prefix: `feat(scope): ...`, `fix(scope): ...`, `refactor(scope): ...`, `docs(scope): ...`, `chore: ...` - Body — почему, не что (что видно в diff) - Атомарные коммиты — один логический шаг = один коммит +- НЕ добавлять `Co-Authored-By: Claude ...` (per feedback rule) -### PR review -- Обязательный self-review перед request review -- Описание PR: links на issue / vault entity, скрин для UI changes -- Squash on merge +### PR +- Title: краткое описание изменения (под 70 символов) +- Body должен содержать: + - `## Summary` — 1-3 bullet'a что изменилось + - `## Test plan` — что проверить пользователю / какие команды smoke test'а + - Cross-refs: `Closes #N`, `Relates to #N`, ссылка на vault entity +- `gh pr create` с `--title` + `--body` (через HEREDOC чтобы preserve formatting) +- После создания — **вернуть PR URL пользователю**, ждать его approval + +### Code review pipeline + +``` +Worker (backend/frontend/database/devops) пишет код + ↓ +Worker (или main session) делает commit на feature branch + ↓ +[опционально] code-reviewer agent делает review + ↓ если ✅ +git push origin feat/branch + ↓ +gh pr create + ↓ +Notify user with PR URL → wait for approval + ↓ +User approves / requests changes + ↓ +Если changes — main session делает fixup commits на той же branch + ↓ +User merges PR (or `gh pr merge` после явного "merge it") +``` ### Critical workflow rules (НЕ нарушать) -1. **Никогда не делай `git commit` сам** — пользователь коммитит лично. Ты пишешь сообщение в чат, пользователь применяет. +1. **НИКОГДА не пуш напрямую в main.** Только через PR merge. 2. **Никогда не используй `--no-verify` / `--no-edit` / `--amend`** — pre-commit hooks обязательны. Если hook падает — fix root cause, не bypass. -3. **Никогда не пуш с `--force` в main** — катастрофа для всей команды. -4. **Не вызывай destructive команды без явного approval**: `git reset --hard`, `git clean -fdx`, `DROP TABLE`, `TRUNCATE`, `rm -rf` за пределами `node_modules/.next`. +3. **Никогда не пуш с `--force` ни в main ни в feature branch без approval.** +4. **Не merge PR без явного "merge it" / "ok merge" от пользователя.** +5. **Не вызывай destructive команды без явного approval**: `git reset --hard`, `git clean -fdx`, `DROP TABLE`, `TRUNCATE`, `rm -rf` за пределами `node_modules/.next`. + +### Когда auto-mode + +Даже в auto-mode НЕ пушим в main без PR. Auto-mode позволяет: +- Создавать branches и commits автономно +- Делать `gh pr create` +- Прогонять code-reviewer +- НО — финальный merge только по явному approval от пользователя. ## Pre-commit hooks