@nitra/cursor 12.8.0 → 12.8.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (72) hide show
  1. package/CHANGELOG.md +12 -0
  2. package/package.json +1 -1
  3. package/rules/doc-files/js/docgen-scan.mjs +4 -2
  4. package/rules/doc-files/js/docs/docgen-extract.md +10 -10
  5. package/rules/doc-files/js/docs/docgen-judge-measure.md +10 -10
  6. package/rules/doc-files/js/docs/docgen-judge.md +13 -11
  7. package/rules/doc-files/js/docs/docgen-scan.md +28 -27
  8. package/rules/doc-files/js/docs/index.md +15 -16
  9. package/rules/feedback/feedback.mdc +3 -3
  10. package/rules/ga/ga.mdc +1 -1
  11. package/rules/ga/policy/workflow_common/workflow_common.rego +3 -3
  12. package/rules/{js-lint → js}/coverage/coverage.mjs +7 -7
  13. package/rules/{js-lint → js}/docs/fix.md +1 -1
  14. package/rules/{js-lint → js}/docs/index.md +3 -3
  15. package/rules/{js-lint → js}/docs/main.md +1 -1
  16. package/rules/{js-lint → js}/js/check.mjs +10 -10
  17. package/rules/{js-lint → js}/js/docs/check.md +3 -3
  18. package/rules/{js-lint → js}/js/docs/index.md +3 -3
  19. package/rules/{js-lint → js}/js/docs/lint-findings.md +1 -1
  20. package/rules/{js-lint → js}/js/docs/tooling.md +1 -1
  21. package/rules/{js-lint → js}/js/docs/utils_imports.md +8 -8
  22. package/rules/{js-lint → js}/js/tooling.mjs +1 -1
  23. package/rules/{js-lint → js}/js/utils_imports.mjs +3 -3
  24. package/rules/{js-lint/js-lint.mdc → js/js.mdc} +30 -6
  25. package/rules/{js-lint → js}/main.mjs +22 -5
  26. package/rules/{js-lint → js}/policy/jscpd/jscpd.rego +4 -4
  27. package/rules/{js-lint → js}/policy/jscpd/target.json +1 -1
  28. package/rules/{js-lint → js}/policy/lint_js_yml/lint_js_yml.rego +6 -6
  29. package/rules/{js-lint → js}/policy/lint_js_yml/template/lint-js.yml.snippet.yml +1 -1
  30. package/rules/{js-lint → js}/policy/package_json/package_json.rego +7 -7
  31. package/rules/{js-lint → js}/policy/vscode_extensions/target.json +1 -1
  32. package/rules/{js-lint → js}/policy/vscode_extensions/vscode_extensions.rego +2 -2
  33. package/rules/js-run/lib/docs/conn-file-rules.md +1 -1
  34. package/rules/npm-module/js/docs/header_doc_pointer.md +23 -13
  35. package/rules/python/docs/main.md +10 -10
  36. package/rules/rust/docs/main.md +7 -7
  37. package/rules/style-lint/js/tooling.mjs +1 -1
  38. package/rules/test/js/docs/stryker_config.md +1 -1
  39. package/rules/test/js/stryker_config.mjs +4 -4
  40. package/rules/test/js/vitest-config-pool-forks.mjs +1 -1
  41. package/rules/test/test.mdc +4 -4
  42. package/rules/text/docs/main.md +8 -8
  43. package/rules/text/js/docs/cspell-fix.md +8 -8
  44. package/rules/text/js/docs/index.md +0 -1
  45. package/scripts/lib/docs/discover-checkable-rules.md +2 -2
  46. package/scripts/lib/docs/run-lint.md +6 -6
  47. package/scripts/lib/fix/docs/analyze-escalation.md +28 -15
  48. package/scripts/lib/fix/docs/orchestrator.md +14 -15
  49. package/scripts/lib/fix/docs/t0.md +8 -7
  50. package/scripts/lib/gha-workflow.mjs +1 -1
  51. package/scripts/lib/timing-summary.mjs +1 -1
  52. package/scripts/sync-setup-bun-deps-action.mjs +1 -1
  53. package/scripts/utils/resolve-js-root.mjs +1 -1
  54. package/skills/coverage-fix/meta.json +1 -1
  55. package/skills/lint/SKILL.md +2 -2
  56. package/skills/llm-patch/SKILL.md +1 -1
  57. package/rules/js-lint-ci/docs/fix.md +0 -28
  58. package/rules/js-lint-ci/docs/index.md +0 -12
  59. package/rules/js-lint-ci/docs/main.md +0 -27
  60. package/rules/js-lint-ci/js/docs/index.md +0 -11
  61. package/rules/js-lint-ci/js-lint-ci.mdc +0 -45
  62. package/rules/js-lint-ci/main.mjs +0 -33
  63. package/rules/js-lint-ci/meta.json +0 -1
  64. /package/rules/{js-lint → js}/js/data/tooling/knip-canonical.json +0 -0
  65. /package/rules/{js-lint → js}/js/data/tooling/oxlint-canonical.json +0 -0
  66. /package/rules/{js-lint → js}/js/lint-findings.mjs +0 -0
  67. /package/rules/{js-lint → js}/meta.json +0 -0
  68. /package/rules/{js-lint → js}/policy/jscpd/template/.jscpd.json.snippet.json +0 -0
  69. /package/rules/{js-lint → js}/policy/lint_js_yml/target.json +0 -0
  70. /package/rules/{js-lint → js}/policy/package_json/target.json +0 -0
  71. /package/rules/{js-lint → js}/policy/package_json/template/package.json.snippet.json +0 -0
  72. /package/rules/{js-lint → js}/policy/vscode_extensions/template/extensions.json.snippet.json +0 -0
package/CHANGELOG.md CHANGED
@@ -1,5 +1,17 @@
1
1
  # Changelog
2
2
 
3
+ ## [12.8.2] - 2026-06-22
4
+
5
+ ### Changed
6
+
7
+ - ♻️ refactor(docs): Оновлення логіки та формату в документації
8
+
9
+ ## [12.8.1] - 2026-06-22
10
+
11
+ ### Changed
12
+
13
+ - ♻️ refactor(docs): Оновлення логіки та формату в документації
14
+
3
15
  ## [12.8.0] - 2026-06-21
4
16
 
5
17
  ### Added
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@nitra/cursor",
3
- "version": "12.8.0",
3
+ "version": "12.8.2",
4
4
  "description": "CLI для завантаження cursor-правил (префікс n-) у локальний репозиторій",
5
5
  "keywords": [
6
6
  "cli",
@@ -115,9 +115,11 @@ export function scanOrphanedDocs(root) {
115
115
  }
116
116
  }
117
117
 
118
- /** Обходить дерево, шукаючи docs/-директорії для orphan-перевірки.
118
+ /**
119
+ * Обходить дерево, шукаючи docs/-директорії для orphan-перевірки.
119
120
  * docs/ — входимо завжди (батьківська пройшла ignore-перевірку);
120
- * інші — перевіряємо через isDocgenIgnored. */
121
+ * інші — перевіряємо через isDocgenIgnored.
122
+ */
121
123
  function walk(dir) {
122
124
  let entries
123
125
  try {
@@ -17,17 +17,17 @@ docgen:
17
17
  1. Витягує факт-лист з вмісту файлу.
18
18
  2. Визначає мову файлу за розширенням.
19
19
  3. Якщо мова — Rust, виконує аналіз Rust-коду:
20
- а. Витягує модульний заголовок (`//!`).
21
- б. Визначає публічні експорти (структури, функції, класи), виходячи з префіксів `pub` та атрибутів експозиції.
22
- в. Визначає локальні (приватні) символи, які не є публічними.
23
- г. Класифікує імпорти (`use`) як стандартні, зовнішні чи внутрішні.
24
- д. Визначає поведінкові маркери (наприклад, чи є код лише для читання, чи обробляє помилки).
20
+ а. Витягує модульний заголовок (`//!`).
21
+ б. Визначає публічні експорти (структури, функції, класи), виходячи з префіксів `pub` та атрибутів експозиції.
22
+ в. Визначає локальні (приватні) символи, які не є публічними.
23
+ г. Класифікує імпорти (`use`) як стандартні, зовнішні чи внутрішні.
24
+ д. Визначає поведінкові маркери (наприклад, чи є код лише для читання, чи обробляє помилки).
25
25
  4. Якщо мова — JavaScript/TypeScript/MJS, виконує аналіз JS-коду:
26
- а. Витягує заголовок файлу.
27
- б. Визначає публічні експорти з їхнім JSDoc.
28
- в. Класифікує імпорти як стандартні, npm або внутрішні.
29
- г. Визначає локальні символи (службові функції).
30
- д. Визначає поведінкові маркери (наприклад, чи є код лише для читання, чи звертається до мережі).
26
+ а. Витягує заголовок файлу.
27
+ б. Визначає публічні експорти з їхнім JSDoc.
28
+ в. Класифікує імпорти як стандартні, npm або внутрішні.
29
+ г. Визначає локальні символи (службові функції).
30
+ д. Визначає поведінкові маркери (наприклад, чи є код лише для читання, чи звертається до мережі).
31
31
  5. Усі аналізи свідомо ігнорують шляхи: `.github`, `.git`, `node_modules`, `base/`, `ua/`, `.firebase`.
32
32
  6. Повертає структуру фактів, що містить інформацію про файл.
33
33
 
@@ -10,21 +10,21 @@ docgen:
10
10
 
11
11
  ## Огляд
12
12
 
13
- Модуль обробляє файли, витягуючи їхній зміст для генерації документації. Він порівнює цю документацію з оцінками сильної модільної системи. Під час роботи відбувається кешування у межах прогону. Модуль збирає метрики якості згенерованої документації та зберігає фінальний звіт у `report.json`, який спирається на конфігурації, визначені в `report.json`.
13
+ Файл аналізує надані файли коду, створюючи документацію та оцінюючи її якість відповідно до конфігурації, що міститься у report.json. Процес збирає результати для кожного файлу, використовуючи кешування у межах прогону на основі вмісту джерела та вже згенерованої документації. У кінці процес агрегує дані та зберігає повний звіт у report.json, а також виводить його у консоль.
14
14
 
15
15
  ## Поведінка
16
16
 
17
17
  1. Зчитує список файлів для аналізу з аргументів командного рядка.
18
18
  2. Для кожного файлу зчитує його вміст.
19
- 3. Генерує документацію для файлу, використовуючи кеш за вмістом джерела.
20
- 4. Якщо документація згенерована, перевіряє її якість за встановленим порогом.
21
- 5. Якщо якість документації відповідає порогу, передає вміст джерела та згенеровану документацію для оцінки сильною моделлю.
22
- 6. Оцінювач повертає вердикт (точний, загальний, неточний) з обґрунтуванням.
23
- 7. Зберігає результати для кожного файлу.
24
- 8. Агрегує результати: підраховує загальну кількість файлів, успішно згенерованих, пройшли перевірку, а також розподіл вердиктів серед тих, що пройшли перевірку.
25
- 9. Формує звіт, який включає конфігурацію, підрахунки та відсотки помилкових спрацьовувань.
26
- 10. Зберігає фінальний звіт у файл `report.json` у каталозі кешу.
27
- 11. Виводить консольний звіт про результати вимірювання.
19
+ 3. Генерує документацію для файлу, використовуючи кешування за вмістом джерела.
20
+ 4. Якщо генерація документації успішна і отриманий бал перевищує встановлений поріг, переходить до етапу оцінки.
21
+ 5. Якщо бал не перевищує порогу, файл вважається "degraded" (зниженою якістю) і не підлягає подальшій оцінці.
22
+ 6. Якщо бал перевищує поріг, документація передається для оцінки потужній моделі, використовуючи кешування за вмістом джерела та згенерованою документацією.
23
+ 7. Оцінка повертає вердикт ("accurate", "generic" або "inaccurate"), впевненість та причину.
24
+ 8. Збираються результати для кожного файлу.
25
+ 9. Після обробки всіх файлів агрегуються результати: підраховуються загальні показники (кількість файлів, помилки генерації, кількість пройшлих тестів, розподіл вердиктів).
26
+ 10. Зберігається звіт у файл `report.json` у каталозі кешу.
27
+ 11. Виводиться консольний звіт про результати вимірювання.
28
28
 
29
29
  ## Гарантії поведінки
30
30
 
@@ -3,30 +3,32 @@ type: JS Module
3
3
  title: docgen-judge.mjs
4
4
  resource: npm/rules/doc-files/js/docgen-judge.mjs
5
5
  docgen:
6
- crc: c6ab093a
6
+ crc: fcbf72fa
7
7
  model: omlx/gemma-4-e4b-it-OptiQ-4bit
8
8
  score: 100
9
9
  ---
10
10
 
11
- Модуль оцінює згенеровану документацію, порівнюючи її з вихідним файлом за допомогою великої мовної моделі. Це дозволяє визначити відповідність та якість документації. Модуль надає функції для запуску оцінки (`judgeDoc`, `judgeFailsDoc`), отримання результатів (`parseDocVerdict`), визначення моделі (`JUDGE_MODEL`), перевірки статусу оцінювача (`JUDGE_ENABLED`) та отримання рівня впевненості (`JUDGE_CONFIDENCE`).
11
+ ## Огляд
12
+
13
+ Модуль реалізує механізм оцінки якості документації. Він визначає модель для оцінки за допомогою `JUDGE_MODEL`, перевіряє статус активності гейту через `JUDGE_ENABLED` та встановлює поріг впевненості за допомогою `JUDGE_CONFIDENCE`. Модуль отримує, парсить та визначає фінальний статус документації, викликаючи `judgeDoc` для отримання висновків, а також може використовувати `judgeFailsDoc` для визначення провалу.
12
14
 
13
15
  ## Поведінка
14
16
 
15
17
  JUDGE_MODEL — Вказує модель, яку використовує суддя для оцінки документації.
16
- JUDGE_ENABLED — Позначає, чи активна функціональність судді.
17
- JUDGE_CONFIDENCE — Визначає мінімальний рівень впевненості, необхідний для позначення документації як деградованої.
18
- parseDocVerdict — Витягує та валідує об'єкт з оцінкою документації з сирого текстового виводу судді.
19
- judgeDoc — Виконує оцінку згенерованої документації проти вмісту вихідного файлу за допомогою великої мовної моделі.
18
+ JUDGE_ENABLED — Позначає, чи активний семантичний гейт судді.
19
+ JUDGE_CONFIDENCE — Визначає мінімальну впевненість, необхідну для позначення документації як деградованої.
20
+ parseDocVerdict — Витягує та валідує об'єкт оцінки з сирого текстового виводу судді.
21
+ judgeDoc — Зіставляє вміст вихідного файлу та згенеровану документацію, щоб отримати оцінку від судді.
20
22
  judgeFailsDoc — Визначає, чи слід вважати документацію деградованою на основі оцінки судді.
21
23
 
22
24
  ## Публічний API
23
25
 
24
26
  JUDGE_MODEL — Визначає модель-суддю як `N_CLOUD_MIN_MODEL` (хмарний мінімальний рівень).
25
- JUDGE_ENABLED — Автоматично вмикає механізм судді, якщо обрано `N_CLOUD_MIN_MODEL`.
26
- JUDGE_CONFIDENCE — Встановлює мінімальний рівень впевненості, необхідний для позначення документа як погіршеного (degraded) за неточним вердиктом.
27
- parseDocVerdict — Витягує та перевіряє структуру вердикту у форматі JSON із сирих даних від великої мовної моделі.
28
- judgeDoc — Оцінює згенерований документ потужною моделлю, порівнюючи його з вихідним джерелом.
29
- judgeFailsDoc — Визначає, чи повинен документ бути позначений як погіршений (degraded) на підставі вердикту, якщо він неточний і має достатню впевненість.
27
+ JUDGE_ENABLED — Автоматично вмикає механізм суддівства, якщо обрано `N_CLOUD_MIN_MODEL`.
28
+ JUDGE_CONFIDENCE — Встановлює мінімальний рівень впевненості для позначення документа як погіршеного (degraded) через неточність.
29
+ parseDocVerdict — Витягує та перевіряє JSON-вердикт із відповіді великої мовної моделі.
30
+ judgeDoc — Оцінює згенерований документ потужною моделлю порівняно з оригінальним джерелом.
31
+ judgeFailsDoc — Визначає, чи повинен документ бути позначений як погіршений, якщо вердикт є `inaccurate` і впевненість достатня.
30
32
 
31
33
  ## Гарантії поведінки
32
34
 
@@ -3,47 +3,48 @@ type: JS Module
3
3
  title: docgen-scan.mjs
4
4
  resource: npm/rules/doc-files/js/docgen-scan.mjs
5
5
  docgen:
6
- crc: f01465d8
6
+ crc: 563b7722
7
7
  model: omlx/gemma-4-e4b-it-OptiQ-4bit
8
8
  score: 100
9
9
  ---
10
10
 
11
11
  ## Огляд
12
12
 
13
- Модуль аналізує кодову базу та пов'язану з нею документацію. Він визначає, які файли є джерелами за допомогою `isSourceFile` та знаходить відповідні шляхи документації за допомогою `docPathForSource`. Модуль перевіряє, чи не залишилися без зв'язку (сиротами) документи, використовуючи `scanOrphanedDocs`, та сканує файли документації за допомогою `scanForDocFiles`. Для роботи з кореневими каталогами використовується `resolveRoot`. Усі операції виконуються з механізмом перехоплення помилок (fail-safe), при цьому при певних збоях повертається `null` замість викидання винятків.
13
+ Модуль визначає, які файли є кодовим джерелом за допомогою `isSourceFile`. Він обчислює відповідні шляхи до Markdown-документів для коду за допомогою `docPathForSource`. Модуль ідентифікує потенційні кандидати для документування за допомогою `isDocCandidate` та надає опис файлу за допомогою `describeFile`. Для аналізу файлової системи використовуються `scanOrphanedDocs` для пошуку "сирітських" документів та `scanForDocFiles` для сканування файлів. Модуль також може визначати кореневий каталог за допомогою `resolveRoot` та виконувати сканування файлів документації через `runDocFilesScanCli` або перевірку через `runDocFilesCheckCli`.
14
14
 
15
15
  ## Поведінка
16
16
 
17
17
  isSourceFile визначає, чи є ім'я файлу кодовим джерелом для документування.
18
- docPathForSource обчислює шлях до відповідного MD-документа для заданого кодового файлу.
19
- isDocCandidate визначає, чи підлягає певний файл документуванню, враховуючи розширення, статус тесту та ігнорування.
20
- describeFile описує кодовий файл, надаючи його шлях, шлях до документації та стан застарілості.
21
- scanOrphanedDocs знаходить MD-документи, які посилаються на кодові файли, що більше не існують.
22
- scanForDocFiles рекурсивно обходить дерево і повертає список кодових файлів із їхнім станом застарілості, відфільтрований за ігноруванням Git.
23
- resolveRoot парсить аргументи для визначення абсолютного кореня обходу, використовуючи поточну робочу директорію за замовчуванням.
18
+ docPathForSource обчислює шлях до відповідного md-документа для заданого кодового файлу.
19
+ isDocCandidate визначає, чи є файл кандидатом на документування, враховуючи розширення, статус тесту та ігнорування.
20
+ describeFile описує кодовий файл, надаючи шлях джерела, шлях доки та стан застарілості.
21
+ scanOrphanedDocs знаходить md-документи, які посилаються на джерела, що більше не існують.
22
+ scanForDocFiles рекурсивно сканує дерево і повертає список кодових файлів зі станом застарілості, відфільтрований за ігноруванням Git.
23
+ resolveRoot визначає абсолютний корінь обходу, використовуючи аргументи або поточний робочий каталог.
24
24
  runDocFilesScanCli сканує дерево і друкує JSON-масив усіх кодових файлів зі станом застарілості.
25
- runDocFilesCheckCli виконує перевірку застарілості, підтримуючи режими для перевірки одного файлу, Git-гейту або звітів про знижену якість.
25
+ runDocFilesCheckCli виконує перевірку застарілості, що може бути використана для хуків, Git-гейтів або ручного переліку шляхів.
26
26
 
27
27
  ## Публічний API
28
28
 
29
- isSourceFile — визначає, чи є файл кодовим джерелом для створення документації.
30
- docPathForSource — визначає шлях до відповідного MD-документа, розміщений у теці `docs/` відносно коду.
31
- isDocCandidate — вирішує, чи повинен кодовий файл бути документований: має правильне розширення, не є тестом, не ігнорується та не є системним документом.
32
- describeFile — надає опис кодового файлу, включаючи його шлях, шлях до документації та статус застарілості.
33
- scanOrphanedDocs — шукає документи, які посилаються на кодові файли, що більше не існують, перевіряючи лише згенеровані файли.
34
- scanForDocFiles — рекурсивно збирає всі кодові файли з дерева, визначаючи їхній статус застарілості, і відсіюючи ті, що ігноруються через `.gitignore`.
35
- resolveRoot — встановлює кореневу директорію для сканування, використовуючи аргумент командного рядка або поточну робочу директорію.
36
- runDocFilesScanCli — сканує дерево та виводить JSON-масив усіх кодових файлів зі статусом застарілості, дозволяючи фільтрувати лише застарілі або всі файли.
37
- runDocFilesCheckCli — виконує перевірку застарілості для використання у хуках та командному інтерфейсі.
38
-
39
- Режими:
40
- --hook — перевіряє один файл, отриманий з JSON через стандартний ввід.
41
- --git — порівнює файли у `git diff` та блокує процес, якщо знайдено більше за встановлений поріг застарілих файлів.
42
- --degraded — виводить звіт про документи з низьким показником якості.
43
- <paths…> — обробляє лише вказані шляхи-джерела.
44
-
45
- Вихідний код 2 — вказує на знаходження застарілих файлів (для блокування хука).
46
- Вихідний код 0 — вказує на відсутність застарілих файлів або проходження перевірки згідно з порогом.
29
+ isSourceFile — визначає, чи є файл вихідним кодом для створення документації.
30
+ docPathForSource — визначає шлях до файлу документації, розміщений у теці `docs/` відносно коду.
31
+ isDocCandidate — вирішує, чи повинен кодовий файл бути документований (правильне розширення, не тест, не ігнорується, не системний).
32
+ describeFile — надає опис кодового файлу, включаючи його шлях та статус застарілості.
33
+ scanOrphanedDocs — знаходить файли документації, які посилаються на вихідний код, що більше не існує.
34
+ scanForDocFiles — рекурсивно шукає всі кодові файли у заданому дереві та визначає їхній статус застарілості.
35
+ resolveRoot — встановлює кореневу директорію для сканування, використовуючи аргумент командного рядка або поточну директорію.
36
+ runDocFilesScanCli — сканує дерево та виводить JSON-масив усіх кодових файлів зі статусом застарілості.
37
+ runDocFilesCheckCli — виконує перевірку застарілості файлів для хуків та командного інтерфейсу.
38
+
39
+ **Режими роботи:**
40
+ `--hook` — перевіряє один файл, отриманий із вхідного JSON, у контексті хука.
41
+ `--git` — порівнює файли у `git diff` та блокує виконання, якщо знайдено застарілі файли, перевищуючи встановлений ліміт.
42
+ `--degraded`генерує звіт про файли документації, які не відповідають встановленому рівню якості.
43
+ `<paths…>` — обробляє лише вказані явно шляхи-джерела.
44
+
45
+ **Коди виходу:**
46
+ Вихід 2 — вказує на знаходження застарілих файлів (для блокування хука).
47
+ Вихід 0 — вказує на відсутність застарілих файлів або проходження перевірки згідно з лімітом.
47
48
 
48
49
  ## Гарантії поведінки
49
50
 
@@ -6,20 +6,19 @@ resource: npm/rules/doc-files/js/
6
6
 
7
7
  # npm/rules/doc-files/js
8
8
 
9
- | Файл | Тип |
10
- | ------------------------------------------------------- | --------- |
11
- | [docgen-crc.mjs](docgen-crc.md) | JS Module |
9
+ | Файл | Тип |
10
+ |---|---|
11
+ | [docgen-crc.mjs](docgen-crc.md) | JS Module |
12
12
  | [docgen-extract-anchors.mjs](docgen-extract-anchors.md) | JS Module |
13
- | [docgen-extract.mjs](docgen-extract.md) | JS Module |
14
- | [docgen-files-batch.mjs](docgen-files-batch.md) | JS Module |
15
- | [docgen-gen.mjs](docgen-gen.md) | JS Module |
16
- | [docgen-ignore.mjs](docgen-ignore.md) | JS Module |
17
- | [docgen-judge-measure.mjs](docgen-judge-measure.md) | JS Module |
18
- | [docgen-judge.mjs](docgen-judge.md) | JS Module |
19
- | [docgen-prompts.mjs](docgen-prompts.md) | JS Module |
20
- | [docgen-scan.mjs](docgen-scan.md) | JS Module |
21
- | [lint.mjs](lint.md) | JS Module |
22
- | [run-lint.mjs](run-lint.md) | JS Module |
23
- | [units-js.mjs](units-js.md) | JS Module |
24
- | [units-rs.mjs](units-rs.md) | JS Module |
25
- | [units.mjs](units.md) | JS Module |
13
+ | [docgen-extract.mjs](docgen-extract.md) | JS Module |
14
+ | [docgen-files-batch.mjs](docgen-files-batch.md) | JS Module |
15
+ | [docgen-gen.mjs](docgen-gen.md) | JS Module |
16
+ | [docgen-ignore.mjs](docgen-ignore.md) | JS Module |
17
+ | [docgen-judge-measure.mjs](docgen-judge-measure.md) | JS Module |
18
+ | [docgen-judge.mjs](docgen-judge.md) | JS Module |
19
+ | [docgen-prompts.mjs](docgen-prompts.md) | JS Module |
20
+ | [docgen-scan.mjs](docgen-scan.md) | JS Module |
21
+ | [run-lint.mjs](run-lint.md) | JS Module |
22
+ | [units-js.mjs](units-js.md) | JS Module |
23
+ | [units-rs.mjs](units-rs.md) | JS Module |
24
+ | [units.mjs](units.md) | JS Module |
@@ -29,7 +29,7 @@ version: '1.0'
29
29
  Кожен пункт — за схемою:
30
30
 
31
31
  - **target** — `rule` | `skill` | `check`
32
- - **id** — який саме (`lint`, `text`, `js-lint`, …)
32
+ - **id** — який саме (`lint`, `text`, `js`, …)
33
33
  - **kind** — `ambiguous-doc` | `missing-check` | `false-positive` | `no-autofix` | `recurring-pattern`
34
34
  - **evidence** — конкретний `файл:рядок` або вивід команди з цього запуску
35
35
  - **suggestion** — запропонована зміна
@@ -42,8 +42,8 @@ version: '1.0'
42
42
  - skill `n-lint`, `ambiguous-doc` — крок 2 не каже, як діяти при частковому autofix
43
43
  evidence: `oxlint --fix` лишив 3 no-autofix-помилки
44
44
  suggestion: додати в SKILL.md підпункт про частковий autofix
45
- - rule `js-lint`, `missing-check` — немає програмної перевірки jscpd-порогу
46
- evidence: jscpd впав, але `check js-lint` цього не ловить
45
+ - rule `js`, `missing-check` — немає програмної перевірки jscpd-порогу
46
+ evidence: jscpd впав, але `check js` цього не ловить
47
47
  ```
48
48
 
49
49
  ## Ефемерність — обовʼязково
package/rules/ga/ga.mdc CHANGED
@@ -138,4 +138,4 @@ CLI робить preflight на `shellcheck` і `uv` (`uvx`) у `PATH`, поті
138
138
 
139
139
  **MegaLinter:** не використовувати; прибрати workflow, конфіги (`.mega-linter.yml`, `.megalinter.yaml`, `.mega-linter.yaml`), залежності та згадки в CI / pre-commit / документації.
140
140
 
141
- **`depcheck`:** не використовувати у `.github/workflows/*.yml` — мігровано на `knip` (див. `js-lint.mdc`). Перевірка невикористаних залежностей виконується разом з рештою лінтерів у `lint-js`, окремий крок `npx depcheck` у workflow не потрібен і блокується полісі `ga.workflow_common`.
141
+ **`depcheck`:** не використовувати у `.github/workflows/*.yml` — мігровано на `knip` (див. `js.mdc`). Перевірка невикористаних залежностей виконується разом з рештою лінтерів у `lint-js`, окремий крок `npx depcheck` у workflow не потрібен і блокується полісі `ga.workflow_common`.
@@ -34,7 +34,7 @@ forbidden_step_substrings := {
34
34
  }
35
35
 
36
36
  # Заборонені бінарки у `run:` кроках (ga.mdc). `depcheck` мігровано на `knip`
37
- # у `lint-js.mdc` — окремий крок у workflow не потрібен. Регексп ловить виклики
37
+ # у `js.mdc` — окремий крок у workflow не потрібен. Регексп ловить виклики
38
38
  # через `npx`, `bunx`, `npm exec`, або як standalone-команду на початку рядка.
39
39
  forbidden_run_command_patterns := {"depcheck": `(?:^|[\s;&|])(?:npx|bunx|npm exec|pnpm exec)?[ \t]*depcheck\b`}
40
40
 
@@ -62,7 +62,7 @@ min_uses_version_template := concat(" ", [
62
62
 
63
63
  forbidden_run_command_template := concat(" ", [
64
64
  "jobs.%s.steps[%d]: `%s` заборонено у workflow —",
65
- "мігровано на knip (js-lint.mdc, ga.mdc)",
65
+ "мігровано на knip (js.mdc, ga.mdc)",
66
66
  ])
67
67
 
68
68
  # ── Аліаси на input ────────────────────────────────────────────────────────
@@ -90,7 +90,7 @@ deny contains msg if {
90
90
 
91
91
  # ── deny: depcheck у будь-якому `run:` ────────────────────────────────────
92
92
  #
93
- # `depcheck` мігровано на `knip` (js-lint.mdc); `knip` вже запускається у lint-js
93
+ # `depcheck` мігровано на `knip` (js.mdc); `knip` вже запускається у lint-js
94
94
  # CI як частина `bunx knip` у скрипті, тож окремий depcheck-крок зайвий і має
95
95
  # бути видалений з workflow-файлів.
96
96
 
@@ -1,7 +1,7 @@
1
1
  /**
2
2
  * JS-провайдер для `n-cursor coverage`: збирає метрики покриття (`vitest run --coverage`)
3
3
  * і мутаційного тестування (Stryker з vitest-runner + perTest) для JS/TS коду.
4
- * Активується через `js-lint` правило в `.n-cursor.json#rules`; реальна applies-логіка
4
+ * Активується через `js` правило в `.n-cursor.json#rules`; реальна applies-логіка
5
5
  * — у `detect(cwd)`.
6
6
  *
7
7
  * Контракт провайдера — у docs/superpowers/specs/2026-05-24-coverage-rule-design.md.
@@ -42,7 +42,7 @@ export function scopeToRoot(changedFiles, cwd, jsRoot) {
42
42
  return out
43
43
  }
44
44
  const VITEST_HINT =
45
- 'js-lint coverage: vitest відсутній у package.json — додай `vitest`, `@vitest/coverage-v8` та `@stryker-mutator/vitest-runner` у devDependencies (див. test.mdc)'
45
+ 'js coverage: vitest відсутній у package.json — додай `vitest`, `@vitest/coverage-v8` та `@stryker-mutator/vitest-runner` у devDependencies (див. test.mdc)'
46
46
 
47
47
  /**
48
48
  * Чи у пакеті встановлено vitest (через dependencies або devDependencies).
@@ -334,7 +334,7 @@ async function collectOneRoot(jsRoot, cwd, runner, scope = null) {
334
334
  const mutateSrc = scope ? scope.files.filter(f => !TEST_FILE.test(f)) : null
335
335
 
336
336
  // 1. Coverage через vitest run --passWithNoTests --coverage (+ --changed у changed-режимі)
337
- const lcovDir = await mkdtemp(join(tmpdir(), 'js-lint-cov-'))
337
+ const lcovDir = await mkdtemp(join(tmpdir(), 'js-cov-'))
338
338
  let coverage
339
339
  try {
340
340
  const code = await runner.runJsCoverage(scope ? { cwd: jsRoot, lcovDir, base: scope.base } : { cwd: jsRoot, lcovDir })
@@ -364,7 +364,7 @@ async function collectOneRoot(jsRoot, cwd, runner, scope = null) {
364
364
  const mutationPath = join(jsRoot, 'reports', 'stryker', 'mutation.json')
365
365
  if (!existsSync(mutationPath)) {
366
366
  throw new Error(
367
- 'js-lint coverage: stryker не залишив mutation.json — ' +
367
+ 'js coverage: stryker не залишив mutation.json — ' +
368
368
  'запусти `npx @nitra/cursor fix test` для встановлення canonical stryker.config.mjs, ' +
369
369
  'або налаштуй його вручну'
370
370
  )
@@ -411,7 +411,7 @@ export async function collect(cwd, opts = {}) {
411
411
  const runner = opts.runner ?? defaultRunner
412
412
  const changed = Array.isArray(opts.changedFiles)
413
413
  const jsRoots = await resolveAllJsRoots(cwd)
414
- if (jsRoots.length === 0) throw new Error('js-lint coverage: package.json не знайдено')
414
+ if (jsRoots.length === 0) throw new Error('js coverage: package.json не знайдено')
415
415
 
416
416
  const results = []
417
417
  for (const jsRoot of jsRoots) {
@@ -429,9 +429,9 @@ export async function collect(cwd, opts = {}) {
429
429
  // Changed-режим: нема змінених JS у жодному root → тихо порожньо (це pass, не помилка).
430
430
  if (changed) return []
431
431
  console.error(
432
- 'js-lint coverage: жоден workspace не має тестів ' +
432
+ 'js coverage: жоден workspace не має тестів ' +
433
433
  '(`*.test.{js,mjs}` у `tests/` або поряд із джерелом) — ' +
434
- 'додай тести або вилучи `js-lint` з .n-cursor.json#rules'
434
+ 'додай тести або вилучи `js` з .n-cursor.json#rules'
435
435
  )
436
436
  return []
437
437
  }
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  type: JS Module
3
3
  title: fix.mjs
4
- resource: npm/rules/js-lint/fix.mjs
4
+ resource: npm/rules/js/fix.mjs
5
5
  docgen:
6
6
  crc: 38cf876b
7
7
  score: 90
@@ -1,10 +1,10 @@
1
1
  ---
2
2
  type: Directory Index
3
- title: npm/rules/js-lint
4
- resource: npm/rules/js-lint/
3
+ title: npm/rules/js
4
+ resource: npm/rules/js/
5
5
  ---
6
6
 
7
- # npm/rules/js-lint
7
+ # npm/rules/js
8
8
 
9
9
  | Файл | Тип |
10
10
  | ------------------- | --------- |
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  type: JS Module
3
3
  title: main.mjs
4
- resource: npm/rules/js-lint/main.mjs
4
+ resource: npm/rules/js/main.mjs
5
5
  docgen:
6
6
  crc: 4f68b557
7
7
  model: omlx/gemma-4-e4b-it-OptiQ-4bit
@@ -24,7 +24,7 @@ async function checkEslintConfig(passFn, failFn, cwd) {
24
24
  eslintPath = 'eslint.config.mjs'
25
25
  passFn('eslint.config.mjs існує')
26
26
  } else {
27
- failFn('Відсутній eslint.config.js або eslint.config.mjs — flat config з getConfig (js-lint.mdc)')
27
+ failFn('Відсутній eslint.config.js або eslint.config.mjs — flat config з getConfig (js.mdc)')
28
28
  return
29
29
  }
30
30
  const eslintRaw = await readFile(join(cwd, eslintPath), 'utf8')
@@ -32,7 +32,7 @@ async function checkEslintConfig(passFn, failFn, cwd) {
32
32
  {
33
33
  needle: 'getConfig',
34
34
  ok: `${eslintPath}: містить getConfig`,
35
- err: `${eslintPath}: потрібен виклик getConfig (js-lint.mdc)`
35
+ err: `${eslintPath}: потрібен виклик getConfig (js.mdc)`
36
36
  },
37
37
  {
38
38
  needle: '@nitra/eslint-config',
@@ -42,7 +42,7 @@ async function checkEslintConfig(passFn, failFn, cwd) {
42
42
  {
43
43
  needle: '**/auto-imports.d.ts',
44
44
  ok: `${eslintPath}: ignores містить **/auto-imports.d.ts`,
45
- err: `${eslintPath}: додай у ignores запис **/auto-imports.d.ts (js-lint.mdc)`
45
+ err: `${eslintPath}: додай у ignores запис **/auto-imports.d.ts (js.mdc)`
46
46
  }
47
47
  ]
48
48
  for (const { needle, ok, err } of checks) {
@@ -71,7 +71,7 @@ function checkPackageJsonTypeModule(label, pkg, passFn, failFn) {
71
71
  if (pkg.type === 'module') {
72
72
  passFn(`${label}: "type": "module"`)
73
73
  } else {
74
- failFn(`${label}: має містити "type": "module" (js-lint.mdc)`)
74
+ failFn(`${label}: має містити "type": "module" (js.mdc)`)
75
75
  }
76
76
  }
77
77
 
@@ -163,7 +163,7 @@ async function checkPackageJsonJsLint(passFn, failFn, cwd) {
163
163
  async function checkOxlintRc(passFn, failFn, cwd) {
164
164
  const oxPath = join(cwd, '.oxlintrc.json')
165
165
  if (!existsSync(oxPath)) {
166
- failFn('.oxlintrc.json не існує — додай конфіг oxlint (js-lint.mdc)')
166
+ failFn('.oxlintrc.json не існує — додай конфіг oxlint (js.mdc)')
167
167
  return
168
168
  }
169
169
  let oxCfg
@@ -204,14 +204,14 @@ async function checkLintJsWorkflows(passFn, failFn, cwd) {
204
204
  if (existsSync(join(cwd, '.github/workflows/lint-js.yml'))) {
205
205
  passFn('.github/workflows/lint-js.yml є (структуру перевіряє npx @nitra/cursor fix → js_lint.lint_js_yml)')
206
206
  } else {
207
- failFn('.github/workflows/lint-js.yml не існує — створи його (js-lint.mdc)')
207
+ failFn('.github/workflows/lint-js.yml не існує — створи його (js.mdc)')
208
208
  }
209
209
 
210
210
  const lintYmlPath = join(cwd, '.github/workflows/lint.yml')
211
211
  if (existsSync(lintYmlPath)) {
212
212
  const lintYml = await readFile(lintYmlPath, 'utf8')
213
213
  if (lintYml.includes('bunx oxlint') && lintYml.includes('bunx eslint') && lintYml.includes('jscpd')) {
214
- failFn('.github/workflows/lint.yml дублює кроки lint-js.yml — залиш один workflow на лінт JS (js-lint.mdc)')
214
+ failFn('.github/workflows/lint.yml дублює кроки lint-js.yml — залиш один workflow на лінт JS (js.mdc)')
215
215
  } else {
216
216
  passFn('.github/workflows/lint.yml не дублює oxlint/eslint/jscpd з lint-js.yml')
217
217
  }
@@ -223,7 +223,7 @@ async function checkLintJsWorkflows(passFn, failFn, cwd) {
223
223
  * копіює канонічний `knip-canonical.json` з пакета `@nitra/cursor` як стартовий
224
224
  * baseline; зміст подальших модифікацій локально не валідується (`entry` /
225
225
  * `project` / `ignore` / `ignoreDependencies` / `ignoreBinaries` дозволені
226
- * будь-які; це side effect — описано у js-lint.mdc).
226
+ * будь-які; це side effect — описано у js.mdc).
227
227
  * @param {(msg: string) => void} passFn callback при успішній перевірці
228
228
  * @param {(msg: string) => void} failFn callback при помилці
229
229
  * @param {string} cwd корінь репозиторію
@@ -242,11 +242,11 @@ async function checkKnipConfig(passFn, failFn, cwd) {
242
242
  return
243
243
  }
244
244
  await copyFile(KNIP_CANONICAL_JSON_PATH, knipPath)
245
- passFn('knip.json створено з канонічного npm/rules/js-lint/js/data/tooling/knip-canonical.json (js-lint.mdc)')
245
+ passFn('knip.json створено з канонічного npm/rules/js/js/data/tooling/knip-canonical.json (js.mdc)')
246
246
  }
247
247
 
248
248
  /**
249
- * Перевіряє відповідність проєкту правилам js-lint.mdc
249
+ * Перевіряє відповідність проєкту правилам js.mdc
250
250
  * @param {string} [cwd] корінь репозиторію
251
251
  * @returns {Promise<number>} 0 — все OK, 1 — є проблеми
252
252
  */
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  type: JS Module
3
3
  title: check.mjs
4
- resource: npm/rules/js-lint/js/check.mjs
4
+ resource: npm/rules/js/js/check.mjs
5
5
  docgen:
6
6
  crc: f61768f2
7
7
  model: omlx/gemma-4-e4b-it-OptiQ-4bit
@@ -10,7 +10,7 @@ docgen:
10
10
 
11
11
  ## Огляд
12
12
 
13
- Модуль виконує перевірку конфігураційних файлів проєкту, забезпечуючи їхню відповідність встановленим стандартам. Він читає та аналізує конфігураційні файли, включаючи `package.json`, `.oxlintrc.json`, `knip.json`, `knip-canonical.json` та `.eslintrc.json`. Перевірка ґрунтується на логіці, визначеній у (js-lint.mdc) та (text.mdc). Функціонал реалізований у режимі лише читання, що означає відсутність змін у файловій системі чи базах даних. При виявленні проблем, система перехоплює помилки, працюючи у режимі fail-safe. Свідомо ігноруються шляхи `.github` та `.git`.
13
+ Модуль виконує перевірку конфігураційних файлів проєкту, забезпечуючи їхню відповідність встановленим стандартам. Він читає та аналізує конфігураційні файли, включаючи `package.json`, `.oxlintrc.json`, `knip.json`, `knip-canonical.json` та `.eslintrc.json`. Перевірка ґрунтується на логіці, визначеній у (js.mdc) та (text.mdc). Функціонал реалізований у режимі лише читання, що означає відсутність змін у файловій системі чи базах даних. При виявленні проблем, система перехоплює помилки, працюючи у режимі fail-safe. Свідомо ігноруються шляхи `.github` та `.git`.
14
14
 
15
15
  ## Поведінка
16
16
 
@@ -30,7 +30,7 @@ docgen:
30
30
 
31
31
  ## Публічний API
32
32
 
33
- check — забезпечує відповідність проєкту вимогам, описаним у js-lint.mdc.
33
+ check — забезпечує відповідність проєкту вимогам, описаним у js.mdc.
34
34
 
35
35
  ## Гарантії поведінки
36
36
 
@@ -1,10 +1,10 @@
1
1
  ---
2
2
  type: Directory Index
3
- title: npm/rules/js-lint/js
4
- resource: npm/rules/js-lint/js/
3
+ title: npm/rules/js/js
4
+ resource: npm/rules/js/js/
5
5
  ---
6
6
 
7
- # npm/rules/js-lint/js
7
+ # npm/rules/js/js
8
8
 
9
9
  | Файл | Тип |
10
10
  | ------------------------------------- | --------- |
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  type: JS Module
3
3
  title: lint-findings.mjs
4
- resource: npm/rules/js-lint/js/lint-findings.mjs
4
+ resource: npm/rules/js/js/lint-findings.mjs
5
5
  docgen:
6
6
  crc: bee587da
7
7
  score: 100
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  type: JS Module
3
3
  title: tooling.mjs
4
- resource: npm/rules/js-lint/js/tooling.mjs
4
+ resource: npm/rules/js/js/tooling.mjs
5
5
  docgen:
6
6
  crc: 7ead48ee
7
7
  model: omlx/gemma-4-e4b-it-OptiQ-4bit