# Примеры rules

← [Раздел](README.md) · [Главная](../README.md)

## Цель

Изучить **готовые образцы** rules — от ECC и минимальных project-шаблонов — и адаптировать под свой репозиторий.

## Предварительно

- [Что такое rules](chto-takoe-rules.md)
- [User vs project rules](user-vs-project-rules.md)

## Время

**50–70 минут**

---

## Пример 1: Git workflow (ECC-style)

```yaml
---
description: "Git: conventional commits, no commit without request"
alwaysApply: true
---
# Git Workflow

## Commit Message Format
```
<type>: <description>
```
Types: feat, fix, refactor, docs, test, chore, perf, ci

## Pull Requests
- Analyze full commit history for PR summary
- Never force push to main/master unless explicitly requested
```

Адаптируйте типы под вашу команду.

---

## Пример 2: Security (ECC-style)

```yaml
---
description: "Security: no secrets, validate input, parameterized SQL"
alwaysApply: true
---
# Security Guidelines

Before ANY commit:
- [ ] No hardcoded secrets (API keys, passwords, tokens)
- [ ] All user inputs validated at boundaries
- [ ] SQL injection prevention (parameterized queries)
- [ ] Error messages don't leak sensitive data

If security issue found: STOP, fix CRITICAL first, rotate exposed secrets.
```

---

## Пример 3: Coding style (фрагмент)

```yaml
---
description: "Immutability, small files, error handling"
alwaysApply: true
---
# Coding Style

## Immutability (CRITICAL)
ALWAYS create new objects, NEVER mutate existing ones.

## File Organization
MANY SMALL FILES > FEW LARGE FILES: 200–400 lines typical, 800 max.

## Error Handling
Never silently swallow errors.
```

---

## Пример 4: Language-specific (glob)

```yaml
---
description: "Go idioms for this repo"
globs: "**/*.go"
---
# Go Conventions

- Errors wrapped with context: fmt.Errorf("load user: %w", err)
- context.Context as first param for IO
- Table-driven tests in *_test.go
```

`globs` ограничивает rule файлами Go — экономия контекста на React-репо.

---

## Пример 5: AI docs (project-specific)

Пример из учебной документации nazeebo.site:

```yaml
---
description: "AI docs: tree structure and page conventions"
globs: "docs/AI/**/*.md"
---
# AI Documentation Conventions

- Folders: 00-karta-puti/ … 13-pro-uroven/
- Page template: navigation, Цель, Предварительно, Время, Самопроверка, Дальше
- Relative links only; no real secrets
- Russian language
```

---

## Пример 6: Минимальный project rule с нуля

```yaml
---
description: "Pet project: Python + pytest only"
alwaysApply: true
---
# Stack

- Python 3.12+, type hints required
- pytest for tests; no unittest
- Format with ruff; no black
- Dependencies: add to pyproject.toml only with comment why
```

---

## Антипримеры

| Плохой rule | Почему |
|-------------|--------|
| «Будь умным» | Не actionable |
| 2000 строк всего стека | Съедает контекст |
| «Используй библиотеку X v1.2.3» без glob | Устареет |
| Секрет «для dev» в rule | Утечка через git |

---

## Композиция набора ECC + свои

Рекомендуемый стек для команды:

```
.cursor/rules/
├── common-coding-style.mdc    # из ECC
├── common-security.mdc        # из ECC
├── common-git-workflow.mdc    # из ECC
├── project-architecture.mdc   # ваш
└── react-ui.mdc               # glob **/*.tsx
```

Не редактируйте ECC common-* in-place — лучше thin wrapper `project-*.mdc` с дополнениями.

---

## Чеклист качества rule

- [ ] Один фокус на файл
- [ ] Императивные глаголы для MUST/NEVER
- [ ] Пример good/bad где неочевидно
- [ ] Нет секретов и имён prod-хостов
- [ ] `<800` строк (лучше `<200`)

---

## Практика

Скопируйте **Пример 6** в учебный репо, измените под свой стек, проведите одну Agent-задачу и отметьте, где rule помог / где агент всё равно ошибся.

---

## Самопроверка

1. Зачем `globs` в Go-conventions rule?
2. Чем security rule отличается от skill security-reviewer?
3. Почему не стоит править ECC common-* напрямую?
4. Какой rule вы добавите в свой pet-project?

## Дальше

→ [05 — Skills](../05-skills/README.md)
