docs(claude): sync TL;DR + Don't-do-these with new PR workflow

Address auto-review feedback:
- TL;DR rule 5 → branch+PR mandate (was: "user commits themselves")
- TL;DR rule 6 → no --no-verify/--force/--amend (split from rule 5)
- Don't-do-these → drop conflicting "no auto-commit" line, add
  "no direct push to main" + "no merge without approval"
- Critical workflow rules: add explicit rule 2 — worker-agents don't
  commit themselves; main session commits on feature branch
- Restore "Squash on merge" wording in PR section (was dropped)
- Auto-mode section: clarify that main session does commits on feature
  branch (worker-agents leave changes staged)
This commit is contained in:
lekss361 2026-05-12 00:03:10 +03:00
parent bc32822cc1
commit 24feed33c0

View file

@ -32,7 +32,9 @@
obsidian_patch_content / obsidian_append_content / Write (filesystem fallback) 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 - Cross-refs: `Closes #N`, `Relates to #N`, ссылка на vault entity
- `gh pr create` с `--title` + `--body` (через HEREDOC чтобы preserve formatting) - `gh pr create` с `--title` + `--body` (через HEREDOC чтобы preserve formatting)
- После создания — **вернуть PR URL пользователю**, ждать его approval - После создания — **вернуть PR URL пользователю**, ждать его approval
- **Squash on merge** — PR в main объединяется одним коммитом через squash (предпочтительно `gh pr merge --squash`).
### Code review pipeline ### 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 [опционально] code-reviewer agent делает review
↓ если ✅ ↓ если ✅
git push origin feat/branch git push -u origin feat/branch
gh pr create gh pr create → PR URL пользователю
Notify user with PR URL → wait for approval
User approves / requests changes 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 (НЕ нарушать) ### Critical workflow rules (НЕ нарушать)
1. **НИКОГДА не пуш напрямую в main.** Только через PR merge. 1. **НИКОГДА не пуш напрямую в main.** Только через PR merge.
2. **Никогда не используй `--no-verify` / `--no-edit` / `--amend`** — pre-commit hooks обязательны. Если hook падает — fix root cause, не bypass. 2. **Worker-agents (backend/frontend/devops/database) НЕ делают `git commit` сами.** Они оставляют изменения staged — main session коммитит на feature branch.
3. **Никогда не пуш с `--force` ни в main ни в feature branch без approval.** 3. **Никогда не используй `--no-verify` / `--no-edit` / `--amend`** — pre-commit hooks обязательны. Если hook падает — fix root cause, не bypass.
4. **Не merge PR без явного "merge it" / "ok merge" от пользователя.** 4. **Никогда не пуш с `--force` ни в main ни в feature branch без approval.**
5. **Не вызывай destructive команды без явного approval**: `git reset --hard`, `git clean -fdx`, `DROP TABLE`, `TRUNCATE`, `rm -rf` за пределами `node_modules/.next`. 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
Даже в auto-mode НЕ пушим в main без PR. Auto-mode позволяет: Даже в auto-mode НЕ пушим в main без PR. Auto-mode позволяет:
- Создавать branches и commits автономно - Создавать feature branches автономно
- Делать `gh pr create` - Делать commits на feature branch (main session делает, не worker'ы)
- `git push -u origin <feature-branch>`
- `gh pr create`
- Прогонять code-reviewer - Прогонять code-reviewer
- НО — финальный merge только по явному approval от пользователя. - **НО — финальный `gh pr merge` только по явному approval от пользователя.**
## Pre-commit hooks ## Pre-commit hooks
@ -463,9 +467,10 @@ Loop until ✅ → git push origin HEAD:main
- ❌ Писать новые сущности в `old/` папку vault'а — это архив legacy paths. - ❌ Писать новые сущности в `old/` папку vault'а — это архив legacy paths.
### Code / git ### 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 нельзя. - ❌ `--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`. - ❌ Hardcode credentials в код / в коммиты. Используй `os.environ.get()` + `.env`/`.env.runtime`.
- ❌ `print(...)` для логирования в prod-коде — использовать `logger.info/warning/error`. - ❌ `print(...)` для логирования в prod-коде — использовать `logger.info/warning/error`.
- ❌ Catching `Exception` без re-raise или явного логирования (silent failures). - ❌ Catching `Exception` без re-raise или явного логирования (silent failures).