From 52b8064645f2b8102122cf9e21456e1f1e2454f8 Mon Sep 17 00:00:00 2001 From: vitaliytv Date: Sun, 30 Aug 2026 13:35:48 +0300 Subject: [PATCH] =?UTF-8?q?fix(cursor):=20=D1=80=D0=B5=D0=B3=D0=B5=D0=BD?= =?UTF-8?q?=D0=B5=D1=80=D1=83=D0=B2=D0=B0=D1=82=D0=B8=20=D0=B4=D0=B7=D0=B5?= =?UTF-8?q?=D1=80=D0=BA=D0=B0=D0=BB=D0=B0=20n-js/n-test/n-text=20=E2=80=94?= =?UTF-8?q?=20=D0=BA=D0=B0=D0=BD=D0=BE=D0=BD=20=D0=BF=D1=96=D1=88=D0=BE?= =?UTF-8?q?=D0=B2=20=D1=83=D0=BF=D0=B5=D1=80=D0=B5=D0=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit mirror-parity був червоний на main і відтворювався локально. Дзеркала відстали від канону в трьох місцях: перейменований rego-пакет (js_lint.package_json → js.package_json), застарілий приклад тесту, і — найпомітніше — два абзаци про те, що збої авто-фіксу (немає dotenv-linter, shellcheck чи patch у PATH) стали гучними помилками замість тихого «нічого не змінено». Тобто дзеркало обіцяло читачу рівно ту поведінку, яку канон уже виправив. Co-Authored-By: Claude Opus 5 --- .cursor/rules/n-js.mdc | 3 +-- .cursor/rules/n-test.mdc | 2 +- .cursor/rules/n-text.mdc | 4 ++++ 3 files changed, 6 insertions(+), 3 deletions(-) diff --git a/.cursor/rules/n-js.mdc b/.cursor/rules/n-js.mdc index 664637ebf..c20122219 100644 --- a/.cursor/rules/n-js.mdc +++ b/.cursor/rules/n-js.mdc @@ -210,14 +210,13 @@ Rego-пакет: `js_lint.jscpd` ## Rego-gate `package.json` -Rego-пакет: `js_lint.package_json` +Rego-пакет: `js.package_json` Цільовий файл: `package.json` (корінь і workspace-пакети). Що перевіряється: - `"type"` — точна відповідність `"module"` (з канон-snippet) -- `scripts.lint-js` — нормалізована точна відповідність (collapse whitespace) - `engines.node` — semver-парсинг: major >= 24 (inverse, без template) - `engines.bun` — semver-парсинг: >= 1.4 (inverse, без template) - `devDependencies["@nitra/eslint-config"]` — наявність ключа + semver >= порогу зі snippet (`^3.10.0`); `workspace:*` завжди проходить diff --git a/.cursor/rules/n-test.mdc b/.cursor/rules/n-test.mdc index 9ce1c8949..d1ead873b 100644 --- a/.cursor/rules/n-test.mdc +++ b/.cursor/rules/n-test.mdc @@ -296,7 +296,7 @@ await withTmpDir(async dir => { }) ``` -Приклад у репо: `npm/rules/text/markdownlint/tests/fix-markdownlint-native.test.mjs` — `initGitAndTrack` створює tmp-репо, бо фікс бере файли через `git ls-files`. +Приклад у репо: `npm/rules/text/run-shellcheck/tests/run-shellcheck-fixer-helpers.test.mjs` — тест `listShellScriptPaths всередині git-репо`. **Виняток** — top-level smoke-аудит тести, що **за визначенням** перевіряють інваріанти **живого** репо (структура файлів, узгодженість CHANGELOG з `package.json`, кожне правило має fixture). Приклади: `tests/integration-repo-checks.test.mjs`, `tests/check-rule-fixtures.test.mjs`. Такі тести **не дають додаткового coverage у unit-сенсі** — концерни, які вони перевіряють, уже покриті per-rule unit-тестами (`rules//js/tests/`). Захищаємо їх `test.skipIf(env.STRYKER_MUTATOR_WORKER)` від запуску всередині Stryker-sandbox: diff --git a/.cursor/rules/n-text.mdc b/.cursor/rules/n-text.mdc index 44d3b70a4..63fe1d5cb 100644 --- a/.cursor/rules/n-text.mdc +++ b/.cursor/rules/n-text.mdc @@ -314,6 +314,8 @@ Rego-пакет: `text.package_json` У CI — `--no-fix` (нуль мутацій): авто-фікс пропускається, лише `check`. +**Відсутній інструмент під `--fix` — гучна помилка, не тихий no-op.** Раніше `--fix` без `dotenv-linter` у `PATH` звітував «нічого не змінено», і порушення лишалося червоним без пояснення. Тепер це помилка з install-підказкою. Так само гучним став ненульовий код виходу самого `dotenv-linter fix` (криві аргументи, немає прав на запис) — раніше він відкидався цілком. + ## shellcheck: перевірка shell-скриптів **shellcheck** — інструмент лише в **`PATH`**, **не** додавай до `dependencies` / `devDependencies`. VSCode-розширення — канон у `vscode_extensions` (`timonwong.shellcheck`). @@ -332,6 +334,8 @@ ShellCheck не має прапорця `--fix`. Авто-виправлення Delta-лінт (`npx @7n/rules lint`) перевіряє лише змінені `*.sh`-файли; повний прогін (`--full`) — усі tracked `*.sh` у репо. +**Збої авто-фіксу тепер гучні, не тихі.** Раніше `--fix` без `shellcheck` чи без `patch` у `PATH`, а також невдалий `patch -p1` (конфлікт, зіпсований hunk), рапортували «нічого не змінено» — порушення лишалося червоним без жодного пояснення. Тепер кожен із цих випадків — помилка з причиною та іменем файлу. + ## v8r: валідація JSON/YAML/TOML за Schema Store **`v8r`** — інструмент валідації файлів за схемами з [Schema Store](https://www.schemastore.org/). Використовуй лише через **`bunx v8r`**, не в `devDependencies`.