diff --git a/.cursor/rules/commit-messages-ru.mdc b/.cursor/rules/commit-messages-ru.mdc new file mode 100644 index 0000000..e6fdf76 --- /dev/null +++ b/.cursor/rules/commit-messages-ru.mdc @@ -0,0 +1,33 @@ +--- +description: "Generate Commit Message: русский subject, fix vs feat, Conventional Commits" +alwaysApply: true +--- + +# Git commit message (Generate Commit Message) + +При **Generate Commit Message**, автогенерации subject и предложении `git commit`: + +## Язык + +- После `:` — **только русский**. Английский в subject/body запрещён. +- Префикс и scope — английский: `fix(ui):`, `chore(rules):`. + +## Тип: сначала не `feat` + +- **`fix`** — баг, регрессия, правка вёрстки/модалки, некорректное поведение, CI/CD, мелкий дефект. +- **`chore` / `docs` / `ci` / `build`** — правила Cursor, README, workflow, зависимости, рефакторинг без новой UX-фичи. +- **`feat`** — только **новая** пользовательская возможность (страница, API, сценарий), которой не было. + +Если сомневаешься между `feat` и `fix` — выбирай **`fix`** или **`chore`**, не `feat`. + +## Примеры + +- `fix(ui): выровнять модалку сводки релиза` +- `fix(ci): исправить сборку release manifest` +- `chore(rules): усилить правила русских commit message` +- `feat(releases): добавить страницу релизов` + +## Запрещено + +- `feat: update layout`, `fix: add modal`, `chore: update rules` — английский subject. +- `feat` для правки UI, правил, документации и багфиксов. diff --git a/.cursor/rules/ma-global.mdc b/.cursor/rules/ma-global.mdc index ff64d49..bdfd9c1 100644 --- a/.cursor/rules/ma-global.mdc +++ b/.cursor/rules/ma-global.mdc @@ -27,4 +27,4 @@ alwaysApply: false ## Связь с проектом - Полные стандарты проекта (формат ответа, чеклисты) — в правиле **`next-shadcn-production.mdc`** (обычно уже подключено). Эти правила **дополняют** его ролью в пайплайне, не отменяют. -- Сообщения коммитов и ожидаемый semver bump — в **`release-versioning.mdc`**. +- Сообщения коммитов: **`commit-messages-ru.mdc`** (язык и `fix` vs `feat`), semver bump — **`release-versioning.mdc`**. diff --git a/.cursor/rules/ma-implementer.mdc b/.cursor/rules/ma-implementer.mdc index da975ea..9aa434b 100644 --- a/.cursor/rules/ma-implementer.mdc +++ b/.cursor/rules/ma-implementer.mdc @@ -18,7 +18,7 @@ alwaysApply: false - Выравнивать UI/UX с **`/servers`** как с главным эталоном (layout, отступы, сетка, типографика, композиция). - Предпочитать **Server Components**; `'use client'` — только при необходимости интерактива (состояние, браузерные API, обработчики). - UI: по возможности **shadcn/ui**; не вводить новый визуальный/UX-паттерн, если на `/servers` уже есть эквивалент. -- При завершении задачи предлагать subject коммита по **`release-versioning.mdc`** (`fix:` для patch, `feat:` для minor), **описание на русском**. +- При завершении задачи предлагать subject по **`commit-messages-ru.mdc`**: правки UI/багов → `fix`, инфраструктура/правила → `chore`, новая фича → `feat`; описание **на русском**. ## Формат вывода (строго) diff --git a/.cursor/rules/next-shadcn-production.mdc b/.cursor/rules/next-shadcn-production.mdc index ed03aa4..79d7f58 100644 --- a/.cursor/rules/next-shadcn-production.mdc +++ b/.cursor/rules/next-shadcn-production.mdc @@ -9,7 +9,7 @@ alwaysApply: true **Язык:** все ответы пользователю — **только на русском**. -**Git / Generate Commit Message:** subject и body коммита — **на русском** (префикс `feat`/`fix`/scope — на английском). Подробности — **`release-versioning.mdc`**. +**Git / Generate Commit Message:** subject и body — **на русском**; `feat` только для новой UX-фичи, иначе `fix`/`chore`. См. **`commit-messages-ru.mdc`** и **`release-versioning.mdc`**. ## 1. Документация в первую очередь diff --git a/.cursor/rules/release-versioning.mdc b/.cursor/rules/release-versioning.mdc index 9335c2b..32a5906 100644 --- a/.cursor/rules/release-versioning.mdc +++ b/.cursor/rules/release-versioning.mdc @@ -11,8 +11,10 @@ alwaysApply: true - Формат: `тип(scope): описание на русском` — префикс Conventional Commits и scope **на английском**, текст после `:` **только на русском**. - Body и footer (если нужны) — **только на русском**. -- Не использовать английские глаголы в subject: `add`, `update`, `fix`, `implement`, `rename` и т.п. -- Примеры: `feat(releases): добавить модалку сводки релиза`; `fix(ci): исправить сборку release manifest`. +- В описании после `:` не использовать английские слова: `add`, `update`, `implement`, `rename` и т.п. +- **`feat` не по умолчанию.** Сначала проверь `fix` / `chore` / `ci` / `docs`; `feat` — только новая пользовательская возможность. +- Примеры: `fix(ui): выровнять модалку релиза`; `chore(rules): усилить правила commit message`; `feat(releases): добавить страницу релизов`. +- Детальный чеклист типов — **`commit-messages-ru.mdc`**. - Версию **не** править вручную в UI, `package.json` и git-тегах; bump делает CI через [`.ci/scripts/compute-release.mjs`](.ci/scripts/compute-release.mjs). - Базовая линия: `v1.0.0`. Формат отображения: `v1.2.3`. diff --git a/AGENTS.md b/AGENTS.md index 1fb06cb..63b163a 100644 --- a/AGENTS.md +++ b/AGENTS.md @@ -2,10 +2,10 @@ ## Сообщения коммитов -При **Generate Commit Message**, предложении subject для `git commit` и любой автогенерации commit message: +При **Generate Commit Message** и любой автогенерации commit message: -- Формат: `feat(scope): описание на русском` (префикс и scope — английский Conventional Commits). -- Текст после двоеточия и body — **только на русском**. -- Плохо: `feat(ui): add release modal`. Хорошо: `feat(ui): добавить модалку сводки релиза`. +1. Subject после `:` — **только на русском**. +2. **`feat` не по умолчанию.** Правка UI/бага/CI → `fix`; правила/README/workflow → `chore`/`ci`; новая пользовательская фича → `feat`. +3. Формат: `fix(ui): выровнять модалку релиза`. -Полные правила semver и примеры — `.cursor/rules/release-versioning.mdc`. +Полные правила: `.cursor/rules/commit-messages-ru.mdc`, semver — `.cursor/rules/release-versioning.mdc`. diff --git a/components/release-notes-modal.tsx b/components/release-notes-modal.tsx index 693a2f1..11b9960 100644 --- a/components/release-notes-modal.tsx +++ b/components/release-notes-modal.tsx @@ -16,6 +16,13 @@ import { formatAppVersionLabel, getAppVersion } from "@/lib/app-version" import type { ReleaseManifest } from "@/lib/release-manifest" import { hasSeenReleaseModal, markReleaseModalSeen } from "@/lib/release-modal-storage" +function formatCommitSubject(subject: string): string { + return subject.replace( + /^(feat|fix|chore|docs|refactor|style|test|build|ci)(\([^)]+\))?!?:\s*/i, + "", + ) +} + export function ReleaseNotesModal() { const [open, setOpen] = React.useState(false) const [manifest, setManifest] = React.useState(null) @@ -56,37 +63,41 @@ export function ReleaseNotesModal() { return ( - - - Что нового в {versionLabel} - + + + + Что нового в {versionLabel} + + Краткая сводка изменений текущего релиза MikrotikManager. -
+
{manifest?.commits.length ? ( -
    +
      {manifest.commits.map((commit) => (
    • -
      +
      {commit.type} {commit.shortSha} {commit.author}
      -

      {commit.subject}

      +

      + {formatCommitSubject(commit.subject)} +

    • ))}
    ) : null}
- +