Merge feature branches: company-config, interactive-env-setup, skill-conventions, permission-gate deploy-ref guards

This commit is contained in:
dev
2026-07-16 13:31:22 +03:00
12 changed files with 196 additions and 73 deletions
+10 -6
View File
@@ -7,7 +7,7 @@ description: Используй при написании, ревью и про
Наш основной стек — **Go**. Скилл описывает, как писать, проверять и оформлять код.
Реалистичные общепринятые дефолты приведены ниже; то, что специфично для компании,
помечено `TODO` — уточняй, не выдумывай.
заполнено дефолтами индустрии — тюним под M.Video позже.
## Структура сервиса
@@ -21,7 +21,7 @@ pkg/ # переиспользуемый публичный
api/ # спецификации API (proto/openapi)
```
<!-- TODO: заполнить реальной эталонной структурой сервиса компании -->
> Ориентир по индустрии: `cmd/` + `internal/` + `pkg/`. Эталон под M.Video уточним позже.
## Линтеры
@@ -29,19 +29,23 @@ api/ # спецификации API (proto/openapi)
- Статический анализ: `go vet ./...`.
- Основной линтер: **golangci-lint** — `golangci-lint run ./...`.
Набор линтеров задаётся в `.golangci.yml` в корне репозитория.
<!-- TODO: указать корпоративный .golangci.yml / общий пресет, если он есть -->
Базовый набор: `govet`, `staticcheck`, `errcheck`, `ineffassign`, `gosimple`, `unused`.
Корпоративный `.golangci.yml` добавим позже.
## Тесты
- Прогон всех тестов: `go test ./...`.
- С гонками и покрытием: `go test -race -cover ./...`.
- Требования к покрытию и обязательные виды тестов: `<!-- TODO: пороги покрытия, интеграционные тесты -->`.
- Покрытие: мягкий ориентир ~70%+ для бизнес-логики, критичные пути — обязательно;
интеграционные тесты для внешних зависимостей. (пороги уточним)
- Именование: `TestXxx`, табличные тесты приветствуются.
## Коммиты и MR
- **Формат коммитов:** `<!-- TODO: например Conventional Commits (feat:, fix:, chore:) или свой -->`.
- **Ветки:** от основной, именование `<!-- TODO: напр. feature/PROJ-123-short-desc -->`.
- **Формат коммитов:** Conventional Commits (`feat:`, `fix:`, `chore:`, `docs:`, `refactor:`, `test:` …).
- **Ветки и деплой:** фича-ветки — от `main` (в имя ветки желательно включать ключ тикета).
Деплой управляется ветками/тегами: ветка `release-*` → раскатка на **stage**; тег `v*` → раскатка в **прод**.
Ветки `release-*` и теги `v*` без необходимости не пушь — `permission-gate` переспросит.
- **MR обязателен** (см. корпоративные правила из контекста сессии). Прямой push в защищённые
ветки запрещён — расширение `permission-gate` дополнительно переспросит.
- **Описание MR:** что и зачем изменено, как проверено (линтеры + тесты), ссылка на тикет
+8 -7
View File
@@ -52,16 +52,17 @@ GITLAB_TOKEN=... ./scripts/create-mr.sh "Fix PROJ-123: NPE" main "" PROJ-123
Флаги окружения `create-mr.sh`: `GITLAB_TOKEN` (обязателен), `GITLAB_HOST` (override хоста),
`MR_PUSH=0` (не пушить ветку), `MR_DRY_RUN=1` (показать запрос без вызова API).
MR из защищённой ветки (`main`/`master`/`release/*`) скрипт создавать откажется.
MR из защищённой/релизной ветки (`main`/`master`/`release-*`) скрипт создавать откажется.
## Соглашения
<!-- TODO: заполнить реальными значениями компании -->
- **Формат ключей задач:** `<!-- TODO: например PROJ-123, префиксы проектов -->`
- **Статусы и переходы:** `<!-- TODO: рабочий процесс, напр. To Do → In Progress → In Review → Done -->`
- **Кто и когда меняет статус:** `<!-- TODO: договорённости команды -->`
- **Что писать в комментарии при старте/готовности:** `<!-- TODO -->`
- **Формат ключей задач:** вида `PROJ-123` (буквенный префикс проекта + номер).
`<!-- TODO: перечислить реальные префиксы проектов -->`
- **Статусы и переходы:** To Do → In Progress → Review → Done.
- **Кто и когда меняет статус:** разработчик переводит тикет: в **In Progress** — при старте работы;
в **Review** — при выставлении MR (в тикет добавляется ссылка на MR); в **Done** — после мержа.
- **Что писать в комментарии:** при старте — кратко о начале работы; при готовности — ссылку на MR
(используй `create-mr.sh`, который сразу приложит ссылку, либо `link-mr.sh`).
## Полезное
+2 -2
View File
@@ -26,8 +26,8 @@ JIRA_KEY="${4:-}"
# --- Refuse to open an MR *from* a protected branch (safety). ----------------
case "$SOURCE" in
main | master | release/*)
echo "Refusing: source branch '$SOURCE' looks protected. Create a feature branch first." >&2
main | master | release-* | release/*)
echo "Refusing: source branch '$SOURCE' looks protected/release. Create a feature branch first." >&2
exit 1
;;
esac
+8 -5
View File
@@ -6,7 +6,7 @@ description: Используй при написании, ревью и про
# Стандарты Kotlin
Один из наших языков — **Kotlin** (в первую очередь Android). Ниже — общепринятые дефолты
экосистемы; специфичное для компании помечено `TODO` — уточняй, не выдумывай.
экосистемы; специфичное для компании заполнено дефолтами индустрии — тюним под M.Video позже.
## Структура
@@ -22,20 +22,20 @@ app/ # Android-модуль приложения
<feature-module>/ # модульная структура
```
<!-- TODO: заполнить реальной эталонной структурой проекта/модулей и версией AGP/Gradle -->
> Ориентир: модульный Android-проект на Gradle (Kotlin DSL), актуальные AGP/Gradle. Эталон уточним.
## Линтеры и форматирование
- Стиль/формат: **ktlint** — `./gradlew ktlintCheck` (автоформат `./gradlew ktlintFormat`).
- Статический анализ: **detekt** — `./gradlew detekt` (конфиг `detekt.yml`).
- Android Lint: `./gradlew lint`.
<!-- TODO: корпоративные конфиги ktlint/detekt (общий пресет), если есть -->
Дефолт: ktlint (official code style) + стартовый `detekt.yml`. Корпоративный пресет добавим позже.
## Тесты
- Unit: `./gradlew test`.
- Инструментальные (Android): `./gradlew connectedAndroidTest` (нужен эмулятор/устройство).
- Требования к покрытию / обязательные виды тестов: `<!-- TODO -->`.
- Покрытие: замер через JaCoCo, мягкий ориентир; критичную логику — обязательно. (пороги уточним)
## Сборка и зависимости
@@ -44,7 +44,10 @@ app/ # Android-модуль приложения
## Коммиты и MR
- **Формат коммитов:** `<!-- TODO: например Conventional Commits или свой -->`.
- **Формат коммитов:** Conventional Commits (`feat:`, `fix:`, `chore:`, `docs:`, `refactor:`, `test:` …).
- **Ветки и деплой:** фича-ветки — от `main` (в имя ветки желательно включать ключ тикета).
Деплой управляется ветками/тегами: ветка `release-*` → раскатка на **stage**; тег `v*` → раскатка в **прод**.
Ветки `release-*` и теги `v*` без необходимости не пушь — `permission-gate` переспросит.
- **MR обязателен** (см. корпоративные правила из контекста сессии). Прямой push в защищённые
ветки запрещён — расширение `permission-gate` дополнительно переспросит.
- Перед MR: `ktlintCheck`, `detekt`, `test` (и `lint`) — всё зелёное.
+11 -7
View File
@@ -6,7 +6,7 @@ description: Используй при написании, ревью и про
# Стандарты Python
Один из наших языков — **Python**. Ниже — общепринятые дефолты экосистемы; специфичное для
компании помечено `TODO` — уточняй, не выдумывай.
компании заполнено дефолтами индустрии — тюним под M.Video позже.
## Структура
@@ -19,28 +19,32 @@ src/<package>/ # src-layout
tests/
```
<!-- TODO: заполнить реальной эталонной структурой / шаблоном (менеджер: poetry/uv/pip-tools?) -->
> Ориентир: src-layout, `pyproject.toml`, окружение через uv. Эталон уточним.
## Линтеры и форматирование
- Линтер + форматтер: **ruff** — `ruff check .` и `ruff format --check .`
(локально `ruff format .`). Конфиг — в `pyproject.toml` (`[tool.ruff]`).
- Типы: **mypy** — `mypy .` (конфиг `[tool.mypy]`).
<!-- TODO: корпоративный набор правил ruff/mypy (строгость), если есть -->
Дефолт: ruff (правила `E`,`F`,`I`,`UP`,`B`) + mypy строгий для нового кода. Корпоративный пресет уточним.
## Тесты
- Прогон: **pytest** — `pytest` (с покрытием — `pytest --cov`).
- Требования к покрытию / обязательные виды тестов: `<!-- TODO -->`.
- Покрытие: `uv run pytest --cov`, мягкий ориентир ~80% для бизнес-логики. (пороги уточним)
## Окружение и зависимости
- Менеджер зависимостей и lock: `<!-- TODO: poetry / uv / pip-tools -->` — lock коммитим.
- Виртуальное окружение — обязательно; глобально пакеты не ставим.
- Менеджер зависимостей: **uv** — `uv sync` (установка), `uv add <pkg>`; lock `uv.lock` коммитим.
- Команды запускай через `uv run …` (напр. `uv run pytest`, `uv run ruff check .`, `uv run mypy .`).
- Виртуальное окружение (`.venv`) создаёт uv; глобально пакеты не ставим.
## Коммиты и MR
- **Формат коммитов:** `<!-- TODO: например Conventional Commits или свой -->`.
- **Формат коммитов:** Conventional Commits (`feat:`, `fix:`, `chore:`, `docs:`, `refactor:`, `test:` …).
- **Ветки и деплой:** фича-ветки — от `main` (в имя ветки желательно включать ключ тикета).
Деплой управляется ветками/тегами: ветка `release-*` → раскатка на **stage**; тег `v*` → раскатка в **прод**.
Ветки `release-*` и теги `v*` без необходимости не пушь — `permission-gate` переспросит.
- **MR обязателен** (см. корпоративные правила из контекста сессии). Прямой push в защищённые
ветки запрещён — расширение `permission-gate` дополнительно переспросит.
- Перед MR: `ruff check .`, `ruff format --check .`, `mypy .`, `pytest` — всё зелёное.
+8 -5
View File
@@ -6,7 +6,7 @@ description: Используй при написании, ревью и про
# Стандарты Rust
Один из наших языков — **Rust**. Ниже — общепринятые дефолты экосистемы; специфичное для
компании помечено `TODO` — уточняй, не выдумывай.
компании заполнено дефолтами индустрии — тюним под M.Video позже.
## Структура
@@ -21,20 +21,20 @@ tests/ # интеграционные тесты
benches/ # бенчмарки (если есть)
```
<!-- TODO: заполнить реальной эталонной структурой crate/workspace компании -->
> Ориентир: стандартный cargo-лейаут (`src/`, `tests/`), workspace при нескольких crate. Эталон уточним.
## Линтеры и форматирование
- Форматирование: `cargo fmt --all` (проверка в CI — `cargo fmt --all -- --check`).
- Линтер: **clippy** — `cargo clippy --all-targets --all-features -- -D warnings`.
Настройки — в `clippy.toml` / атрибутах crate.
<!-- TODO: корпоративный набор clippy-lints, если есть -->
Дефолт: clippy с `-D warnings`; точечные `allow` — только с комментарием. Корпоративный набор уточним.
## Тесты
- Прогон: `cargo test --all-features`.
- Для workspace: `cargo test --workspace`.
- Требования к покрытию / обязательные виды тестов: `<!-- TODO -->`.
- Покрытие: `cargo-llvm-cov` (или tarpaulin), мягкий ориентир ~70%+. (пороги уточним)
## Сборка и зависимости
@@ -44,7 +44,10 @@ benches/ # бенчмарки (если есть)
## Коммиты и MR
- **Формат коммитов:** `<!-- TODO: например Conventional Commits или свой -->`.
- **Формат коммитов:** Conventional Commits (`feat:`, `fix:`, `chore:`, `docs:`, `refactor:`, `test:` …).
- **Ветки и деплой:** фича-ветки — от `main` (в имя ветки желательно включать ключ тикета).
Деплой управляется ветками/тегами: ветка `release-*` → раскатка на **stage**; тег `v*` → раскатка в **прод**.
Ветки `release-*` и теги `v*` без необходимости не пушь — `permission-gate` переспросит.
- **MR обязателен** (см. корпоративные правила из контекста сессии). Прямой push в защищённые
ветки запрещён — расширение `permission-gate` дополнительно переспросит.
- Перед MR: `cargo fmt --check`, `cargo clippy -D warnings`, `cargo test` — всё зелёное.
+9 -6
View File
@@ -6,7 +6,7 @@ description: Используй при написании, ревью и про
# Стандарты Swift
Один из наших языков — **Swift** (iOS/macOS). Ниже — общепринятые дефолты экосистемы;
специфичное для компании помечено `TODO` — уточняй, не выдумывай.
значения под M.Video заполнены дефолтами индустрии — тюним позже.
## Структура
@@ -18,28 +18,31 @@ Sources/<Target>/...
Tests/<Target>Tests/...
```
<!-- TODO: заполнить реальной эталонной структурой (SwiftPM vs Xcodeproj, менеджер зависимостей: SPM/CocoaPods) -->
> Ориентир: SwiftPM-пакет (`Package.swift`), `Sources/` + `Tests/`. Эталон уточним.
## Линтеры и форматирование
- Форматирование: **swiftformat** — `swiftformat --lint .` (автоформат `swiftformat .`).
- Линтер: **swiftlint** — `swiftlint` (конфиг `.swiftlint.yml`), в CI `swiftlint --strict`.
<!-- TODO: корпоративные конфиги swiftformat/swiftlint (общий пресет), если есть -->
Дефолт: SwiftLint + SwiftFormat (дефолтные конфиги). Корпоративный пресет уточним.
## Тесты
- SwiftPM: `swift test`.
- Xcode-проект: `xcodebuild test -scheme <Scheme> -destination 'platform=iOS Simulator,name=iPhone 15'`.
- Требования к покрытию / обязательные виды тестов: `<!-- TODO -->`.
- Покрытие: `swift test --enable-code-coverage`, мягкий ориентир. (пороги уточним)
## Сборка и зависимости
- Сборка: `swift build` (или `xcodebuild build -scheme <Scheme>`).
- Зависимости: `<!-- TODO: SwiftPM / CocoaPods -->` — lock (`Package.resolved`/`Podfile.lock`) коммитим.
- Зависимости: **SwiftPM** (`Package.resolved` коммитим); CocoaPods — только для легаси.
## Коммиты и MR
- **Формат коммитов:** `<!-- TODO: например Conventional Commits или свой -->`.
- **Формат коммитов:** Conventional Commits (`feat:`, `fix:`, `chore:`, `docs:`, `refactor:`, `test:` …).
- **Ветки и деплой:** фича-ветки — от `main` (в имя ветки желательно включать ключ тикета).
Деплой управляется ветками/тегами: ветка `release-*` → раскатка на **stage**; тег `v*` → раскатка в **прод**.
Ветки `release-*` и теги `v*` без необходимости не пушь — `permission-gate` переспросит.
- **MR обязателен** (см. корпоративные правила из контекста сессии). Прямой push в защищённые
ветки запрещён — расширение `permission-gate` дополнительно переспросит.
- Перед MR: `swiftformat --lint .`, `swiftlint --strict`, тесты — всё зелёное.
+11 -8
View File
@@ -6,7 +6,7 @@ description: Используй при написании, ревью и про
# Стандарты TypeScript
Один из наших языков — **TypeScript** (фронтенд и Node-сервисы). Ниже — общепринятые дефолты
экосистемы; специфичное для компании помечено `TODO` — уточняй, не выдумывай.
экосистемы; значения под M.Video заполнены дефолтами индустрии — тюним позже.
## Структура
@@ -21,28 +21,31 @@ src/
test/ | *.test.ts # рядом с кодом или в test/
```
<!-- TODO: заполнить реальной эталонной структурой / шаблоном проекта (менеджер пакетов: npm/pnpm/yarn?) -->
> Ориентир: TS-проект/монорепо на pnpm workspaces, strict `tsconfig`. Эталон уточним.
## Линтеры и форматирование
- Типы: `tsc --noEmit` — без ошибок типов.
- Линтер: **ESLint** — `eslint .` (конфиг `.eslintrc*` / `eslint.config.*`).
- Форматирование: **Prettier** — `prettier --check .` (в CI), `prettier --write .` локально.
<!-- TODO: корпоративный конфиг eslint/prettier (общий пресет?), если есть -->
Дефолт: typescript-eslint (recommended) + Prettier (дефолтный конфиг). Корпоративный пресет уточним.
## Тесты
- Прогон: `<!-- TODO: vitest / jest / node --test -->` — напр. `npm test`.
- Требования к покрытию: `<!-- TODO -->`.
- Прогон: **vitest** — `pnpm test` (покрытие `pnpm test --coverage`).
- Покрытие: мягкий ориентир ~80% для бизнес-логики. (пороги уточним)
## Сборка и зависимости
- Сборка: `npm run build` (или скрипт проекта).
- Пакетный менеджер и lock-файл: `<!-- TODO: npm/pnpm/yarn -->` — lock коммитим.
- Сборка: `pnpm build` (или скрипт проекта).
- Пакетный менеджер: **pnpm** — `pnpm install`; lock `pnpm-lock.yaml` коммитим.
## Коммиты и MR
- **Формат коммитов:** `<!-- TODO: например Conventional Commits или свой -->`.
- **Формат коммитов:** Conventional Commits (`feat:`, `fix:`, `chore:`, `docs:`, `refactor:`, `test:` …).
- **Ветки и деплой:** фича-ветки — от `main` (в имя ветки желательно включать ключ тикета).
Деплой управляется ветками/тегами: ветка `release-*` → раскатка на **stage**; тег `v*` → раскатка в **прод**.
Ветки `release-*` и теги `v*` без необходимости не пушь — `permission-gate` переспросит.
- **MR обязателен** (см. корпоративные правила из контекста сессии). Прямой push в защищённые
ветки запрещён — расширение `permission-gate` дополнительно переспросит.
- Перед MR: `tsc --noEmit`, `eslint .`, `prettier --check .`, тесты — всё зелёное.