diff --git a/CLAUDE.md b/CLAUDE.md index 42c36d69..4d68d719 100644 --- a/CLAUDE.md +++ b/CLAUDE.md @@ -32,7 +32,9 @@ obsidian_patch_content / obsidian_append_content / Write (filesystem fallback) ``` -5. **No auto-commit, no `--no-verify`** — пишу сообщение коммита в чат, пользователь коммитит. +5. **Branch + PR workflow обязательно** — никаких direct push в main. Создаю feature branch (`feat/...` / `fix/...` / `refactor/...` / `docs/...` / `chore/...`), коммичу туда, push branch, `gh pr create`, отдаю URL пользователю. Merge только по явному approval. См. секцию "Git workflow". + +6. **No `--no-verify` / `--force` / `--amend`** — pre-commit hooks обязательны, force-push запрещён. --- @@ -192,44 +194,46 @@ cd frontend && npm run codegen - Cross-refs: `Closes #N`, `Relates to #N`, ссылка на vault entity - `gh pr create` с `--title` + `--body` (через HEREDOC чтобы preserve formatting) - После создания — **вернуть PR URL пользователю**, ждать его approval +- **Squash on merge** — PR в main объединяется одним коммитом через squash (предпочтительно `gh pr merge --squash`). ### Code review pipeline ``` -Worker (backend/frontend/database/devops) пишет код +Worker (backend/frontend/database/devops) пишет код на feature branch ↓ -Worker (или main session) делает commit на feature branch +Main session делает commit на feature branch (worker'у запрещено git commit) ↓ [опционально] code-reviewer agent делает review ↓ если ✅ -git push origin feat/branch +git push -u origin feat/branch ↓ -gh pr create - ↓ -Notify user with PR URL → wait for approval +gh pr create → PR URL пользователю ↓ User approves / requests changes ↓ -Если changes — main session делает fixup commits на той же branch +Если changes — main session делает fixup commits на той же branch + push ↓ -User merges PR (or `gh pr merge` после явного "merge it") +По явному "merge it" / "approved" от user → gh pr merge --squash ``` ### Critical workflow rules (НЕ нарушать) 1. **НИКОГДА не пуш напрямую в main.** Только через PR merge. -2. **Никогда не используй `--no-verify` / `--no-edit` / `--amend`** — pre-commit hooks обязательны. Если hook падает — fix root cause, не bypass. -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`. +2. **Worker-agents (backend/frontend/devops/database) НЕ делают `git commit` сами.** Они оставляют изменения staged — main session коммитит на feature branch. +3. **Никогда не используй `--no-verify` / `--no-edit` / `--amend`** — pre-commit hooks обязательны. Если hook падает — fix root cause, не bypass. +4. **Никогда не пуш с `--force` ни в main ни в feature branch без approval.** +5. **Не merge PR без явного "merge it" / "ok merge" / "approved" от пользователя.** +6. **Не вызывай 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` +- Создавать feature branches автономно +- Делать commits на feature branch (main session делает, не worker'ы) +- `git push -u origin ` +- `gh pr create` - Прогонять code-reviewer -- НО — финальный merge только по явному approval от пользователя. +- **НО — финальный `gh pr merge` только по явному approval от пользователя.** ## Pre-commit hooks @@ -463,9 +467,10 @@ Loop until ✅ → git push origin HEAD:main - ❌ Писать новые сущности в `old/` папку vault'а — это архив legacy paths. ### Code / git -- ❌ **Commit сам через `git commit`** — пользователь коммитит лично, я пишу сообщение в чат. +- ❌ **Direct push в main** — только через PR. Все изменения на feature branch → `gh pr create` → user approval → merge. См. "Git workflow". +- ❌ **Merge PR без явного user approval** ("merge it" / "approved" / "ok merge"). - ❌ `--no-verify`, `--amend`, `--no-edit`, `--no-gpg-sign` — обходить hooks/signing нельзя. -- ❌ `git push --force` в main или shared branches. +- ❌ `git push --force` ни в main ни в feature branch без approval. - ❌ Hardcode credentials в код / в коммиты. Используй `os.environ.get()` + `.env`/`.env.runtime`. - ❌ `print(...)` для логирования в prod-коде — использовать `logger.info/warning/error`. - ❌ Catching `Exception` без re-raise или явного логирования (silent failures).