@nitra/cursor 12.7.0 → 12.8.0

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 (172) hide show
  1. package/.pi-template/extensions/n-cursor-adr/docs/index.md +2 -2
  2. package/CHANGELOG.md +15 -5
  3. package/bin/n-cursor.js +1 -1
  4. package/docs/index.md +3 -3
  5. package/docs/stryker.config.md +3 -3
  6. package/lib/docs/index.md +5 -5
  7. package/lib/docs/llm.md +4 -4
  8. package/package.json +2 -2
  9. package/rules/abie/docs/fix.md +8 -8
  10. package/rules/abie/docs/index.md +3 -3
  11. package/rules/abie/js/docs/index.md +6 -6
  12. package/rules/abie/lib/docs/index.md +9 -9
  13. package/rules/bun/docs/fix.md +5 -5
  14. package/rules/bun/docs/index.md +3 -3
  15. package/rules/bun/js/docs/index.md +2 -2
  16. package/rules/capacitor/docs/fix.md +10 -10
  17. package/rules/capacitor/docs/index.md +3 -3
  18. package/rules/capacitor/js/docs/index.md +2 -2
  19. package/rules/changelog/docs/fix.md +11 -11
  20. package/rules/changelog/docs/index.md +3 -3
  21. package/rules/changelog/js/docs/consistency.md +12 -12
  22. package/rules/changelog/js/docs/index.md +2 -2
  23. package/rules/changelog/lib/docs/index.md +2 -2
  24. package/rules/ci4/docs/fix.md +4 -4
  25. package/rules/ci4/docs/index.md +3 -3
  26. package/rules/ci4/js/docs/index.md +2 -2
  27. package/rules/doc-files/docs/index.md +3 -3
  28. package/rules/doc-files/js/docgen-crc.mjs +2 -8
  29. package/rules/doc-files/js/docgen-extract.mjs +5 -3
  30. package/rules/doc-files/js/docgen-files-batch.mjs +18 -3
  31. package/rules/doc-files/js/docgen-gen.mjs +11 -3
  32. package/rules/doc-files/js/docgen-judge-measure.mjs +67 -18
  33. package/rules/doc-files/js/docgen-judge.mjs +8 -1
  34. package/rules/doc-files/js/docgen-scan.mjs +10 -2
  35. package/rules/doc-files/js/docs/docgen-crc.md +25 -14
  36. package/rules/doc-files/js/docs/docgen-extract.md +15 -13
  37. package/rules/doc-files/js/docs/docgen-files-batch.md +11 -11
  38. package/rules/doc-files/js/docs/docgen-gen.md +15 -26
  39. package/rules/doc-files/js/docs/docgen-judge-measure.md +14 -12
  40. package/rules/doc-files/js/docs/index.md +16 -16
  41. package/rules/docker/docs/fix.md +6 -6
  42. package/rules/docker/docs/index.md +3 -3
  43. package/rules/docker/js/docs/index.md +2 -2
  44. package/rules/docker/lib/docs/docker-hadolint.md +2 -2
  45. package/rules/docker/lib/docs/index.md +5 -5
  46. package/rules/efes/docs/fix.md +8 -8
  47. package/rules/efes/docs/index.md +3 -3
  48. package/rules/feedback/docs/fix.md +5 -5
  49. package/rules/feedback/docs/index.md +3 -3
  50. package/rules/ga/docs/fix.md +5 -5
  51. package/rules/ga/docs/index.md +3 -3
  52. package/rules/ga/js/docs/index.md +3 -3
  53. package/rules/graphql/docs/fix.md +8 -8
  54. package/rules/graphql/docs/index.md +3 -3
  55. package/rules/graphql/docs/main.md +8 -8
  56. package/rules/graphql/js/docs/index.md +2 -2
  57. package/rules/graphql/lib/docs/index.md +2 -2
  58. package/rules/hasura/docs/fix.md +11 -11
  59. package/rules/hasura/docs/index.md +3 -3
  60. package/rules/hasura/js/docs/index.md +2 -2
  61. package/rules/image-avif/docs/fix.md +3 -3
  62. package/rules/image-avif/docs/index.md +3 -3
  63. package/rules/image-avif/js/docs/avif_generation.md +6 -6
  64. package/rules/image-avif/js/docs/index.md +2 -2
  65. package/rules/image-compress/docs/fix.md +2 -2
  66. package/rules/image-compress/docs/index.md +3 -3
  67. package/rules/image-compress/js/docs/index.md +3 -3
  68. package/rules/js-bun-db/docs/fix.md +5 -5
  69. package/rules/js-bun-db/docs/index.md +3 -3
  70. package/rules/js-bun-db/js/docs/index.md +2 -2
  71. package/rules/js-bun-db/lib/docs/index.md +2 -2
  72. package/rules/js-bun-redis/docs/fix.md +6 -6
  73. package/rules/js-bun-redis/docs/index.md +3 -3
  74. package/rules/js-bun-redis/js/docs/index.md +2 -2
  75. package/rules/js-bun-redis/lib/docs/index.md +2 -2
  76. package/rules/js-lint/docs/fix.md +9 -9
  77. package/rules/js-lint/docs/index.md +3 -3
  78. package/rules/js-lint/js/docs/check.md +5 -5
  79. package/rules/js-lint/js/docs/index.md +4 -4
  80. package/rules/js-lint-ci/docs/fix.md +3 -3
  81. package/rules/js-lint-ci/docs/index.md +3 -3
  82. package/rules/js-lint-ci/js/docs/index.md +2 -2
  83. package/rules/js-mssql/docs/fix.md +5 -5
  84. package/rules/js-mssql/docs/index.md +3 -3
  85. package/rules/js-mssql/js/docs/index.md +2 -2
  86. package/rules/js-mssql/lib/docs/index.md +2 -2
  87. package/rules/js-run/docs/fix.md +8 -8
  88. package/rules/js-run/docs/index.md +3 -3
  89. package/rules/js-run/js/docs/index.md +2 -2
  90. package/rules/js-run/lib/docs/index.md +7 -7
  91. package/rules/k8s/docs/fix.md +4 -4
  92. package/rules/k8s/docs/index.md +3 -3
  93. package/rules/k8s/js/docs/index.md +3 -3
  94. package/rules/nginx-default-tpl/docs/fix.md +7 -7
  95. package/rules/nginx-default-tpl/docs/index.md +3 -3
  96. package/rules/nginx-default-tpl/js/docs/index.md +2 -2
  97. package/rules/nginx-default-tpl/js/docs/template.md +2 -2
  98. package/rules/npm-module/docs/fix.md +8 -8
  99. package/rules/npm-module/docs/index.md +3 -3
  100. package/rules/npm-module/js/docs/index.md +5 -5
  101. package/rules/npm-module/js/docs/rule_meta.md +6 -6
  102. package/rules/npm-module/js/header_doc_pointer.mjs +1 -3
  103. package/rules/php/docs/fix.md +6 -6
  104. package/rules/php/docs/index.md +3 -3
  105. package/rules/php/js/docs/index.md +3 -3
  106. package/rules/python/docs/fix.md +11 -11
  107. package/rules/python/docs/index.md +3 -3
  108. package/rules/python/js/docs/index.md +3 -3
  109. package/rules/python/main.mjs +2 -1
  110. package/rules/rego/docs/fix.md +5 -5
  111. package/rules/rego/docs/index.md +3 -3
  112. package/rules/rego/js/docs/index.md +3 -3
  113. package/rules/release/docs/index.md +5 -5
  114. package/rules/release/lib/docs/index.md +4 -4
  115. package/rules/rust/docs/fix.md +4 -4
  116. package/rules/rust/docs/index.md +3 -3
  117. package/rules/rust/js/docs/index.md +3 -3
  118. package/rules/rust/lib/docs/index.md +2 -2
  119. package/rules/rust/main.mjs +7 -1
  120. package/rules/security/docs/fix.md +6 -6
  121. package/rules/security/docs/index.md +3 -3
  122. package/rules/security/js/docs/index.md +4 -4
  123. package/rules/style-lint/docs/fix.md +3 -3
  124. package/rules/style-lint/docs/index.md +3 -3
  125. package/rules/style-lint/js/docs/index.md +3 -3
  126. package/rules/tauri/docs/fix.md +11 -11
  127. package/rules/tauri/docs/index.md +3 -3
  128. package/rules/tauri/js/docs/index.md +3 -3
  129. package/rules/test/docs/fix.md +5 -5
  130. package/rules/test/docs/index.md +3 -3
  131. package/rules/test/js/data/stryker_config/docs/index.md +4 -4
  132. package/rules/test/js/data/vitest_config/docs/index.md +2 -2
  133. package/rules/test/js/docs/index.md +7 -7
  134. package/rules/text/docs/fix.md +11 -11
  135. package/rules/text/docs/index.md +3 -3
  136. package/rules/text/js/cspell-fix.mjs +7 -2
  137. package/rules/text/js/docs/index.md +8 -8
  138. package/rules/text/js/docs/run-v8r.md +3 -3
  139. package/rules/text/main.mjs +3 -1
  140. package/rules/tool-surface/docs/index.md +3 -3
  141. package/rules/tool-surface/meta.json +6 -1
  142. package/rules/vue/docs/fix.md +6 -6
  143. package/rules/vue/docs/index.md +3 -3
  144. package/rules/vue/js/docs/index.md +2 -2
  145. package/rules/vue/lib/docs/index.md +2 -2
  146. package/rules/worktree/docs/fix.md +11 -11
  147. package/rules/worktree/docs/index.md +3 -3
  148. package/scripts/coverage-classify/docs/index.md +6 -6
  149. package/scripts/dispatcher/docs/index.md +2 -2
  150. package/scripts/docs/index.md +16 -16
  151. package/scripts/lib/docs/index.md +36 -36
  152. package/scripts/lib/docs/run-lint.md +3 -3
  153. package/scripts/lib/docs/run-standard-lint.md +7 -5
  154. package/scripts/lib/fix/analyze-escalation.mjs +4 -1
  155. package/scripts/lib/fix/docs/index.md +10 -10
  156. package/scripts/lib/fix/docs/run-conformance-check.md +4 -3
  157. package/scripts/lib/fix/docs/run-fix-check.md +3 -3
  158. package/scripts/lib/fix/orchestrator.mjs +26 -3
  159. package/scripts/lib/fix/t0.mjs +4 -1
  160. package/scripts/lib/run-lint.mjs +1 -3
  161. package/scripts/utils/docs/index.md +14 -14
  162. package/skills/doc-aggregate/js/docs/index.md +3 -3
  163. package/skills/doc-files/.changes/260612-0002.md +1 -0
  164. package/skills/doc-files/.changes/260612-0006.md +1 -0
  165. package/skills/doc-files/.changes/260612-0008.md +1 -0
  166. package/skills/doc-files/.changes/260612-0012.md +1 -0
  167. package/skills/doc-files/.changes/260612-0031.md +1 -0
  168. package/skills/doc-files/.changes/260612-0036.md +1 -0
  169. package/skills/doc-files/.changes/260612-0114.md +1 -0
  170. package/skills/start-check/js/docs/index.md +2 -2
  171. package/skills/taze/js/docs/index.md +2 -2
  172. package/types/bin/n-cursor.d.ts +1 -1
@@ -17,8 +17,8 @@ docgen:
17
17
  4. Запис JSONL файлу. Запис серіалізованого тексту у тимчасову директорію.
18
18
  5. Формування вхідного навантаження. Створення JSON об'єкта для передачі у башку.
19
19
  6. Передача виконання скриптів. Паралельний запуск двох окремих скриптів.
20
- а. Виконання хука capture.
21
- б. Виконання хука normalize.
20
+ а. Виконання хука capture.
21
+ б. Виконання хука normalize.
22
22
  7. Обробка результатів. Очікування завершення обох виконання. Помилки обробляються у загальному режимі.
23
23
 
24
24
  ## Гарантії поведінки
package/CHANGELOG.md CHANGED
@@ -1,5 +1,15 @@
1
1
  # Changelog
2
2
 
3
+ ## [12.8.0] - 2026-06-21
4
+
5
+ ### Added
6
+
7
+ - doc-files: orphan-detect і auto-purge — `lint-doc-files` і `fix-doc-files` тепер виявляють і видаляють `docs/<stem>.md` чиї source-файли більше не існують
8
+
9
+ ### Changed
10
+
11
+ - Переміщено логіку linting до `js` та оновив `n-cursor.js
12
+
3
13
  ## [12.7.0] - 2026-06-21
4
14
 
5
15
  ### Added
@@ -149,7 +159,7 @@
149
159
 
150
160
  ### Changed
151
161
 
152
- - Конформність-селекція: .n-cursor.json — єдине джерело правди. resolveCheckRuleIds бере активні правила прямо з конфіга (available ∩ enabled), .cursor/rules/*.mdc лишається лише fallback'ом коли конфіга нема. Прибрано дрейф «правило enabled, але .mdc нема → тихо пропущено». Per-rule whitelist-гейт у runRuleCli видалено як дубль — гейтинг живе виключно у селекції.
162
+ - Конформність-селекція: .n-cursor.json — єдине джерело правди. resolveCheckRuleIds бере активні правила прямо з конфіга (available ∩ enabled), .cursor/rules/\*.mdc лишається лише fallback'ом коли конфіга нема. Прибрано дрейф «правило enabled, але .mdc нема → тихо пропущено». Per-rule whitelist-гейт у runRuleCli видалено як дубль — гейтинг живе виключно у селекції.
153
163
 
154
164
  ## [10.0.1] - 2026-06-14
155
165
 
@@ -161,7 +171,7 @@
161
171
 
162
172
  ### Changed
163
173
 
164
- - Інлайн _fix-check/fix-t0 у прямі функції — видалено внутрішні subcommand'и. runFixCheck (scripts/lib/fix/run-fix-check) + listProjectRulesMdcFiles винесено з bin; orchestrator/t0/PostToolUse-хук/lint-конформність кличуть прямо (без subprocess-обгортки). Per-rule ізоляція збережена
174
+ - Інлайн \_fix-check/fix-t0 у прямі функції — видалено внутрішні subcommand'и. runFixCheck (scripts/lib/fix/run-fix-check) + listProjectRulesMdcFiles винесено з bin; orchestrator/t0/PostToolUse-хук/lint-конформність кличуть прямо (без subprocess-обгортки). Per-rule ізоляція збережена
165
175
 
166
176
  ## [9.4.0] - 2026-06-14
167
177
 
@@ -221,7 +231,7 @@
221
231
 
222
232
  ### Removed
223
233
 
224
- - Видалено команди fix/check/fix-run; рух-движок конформності переміщено skills/fix/js→scripts/lib/fix і поглинуто в lint. PostToolUse-хук → read-only детект усіх правил (без роутингу). /n-fix → делегат на /n-lint. fix-t0/_fix-check лишаються внутрішніми фазами движка
234
+ - Видалено команди fix/check/fix-run; рух-движок конформності переміщено skills/fix/js→scripts/lib/fix і поглинуто в lint. PostToolUse-хук → read-only детект усіх правил (без роутингу). /n-fix → делегат на /n-lint. fix-t0/\_fix-check лишаються внутрішніми фазами движка
225
235
 
226
236
  ## [6.0.0] - 2026-06-14
227
237
 
@@ -254,7 +264,7 @@
254
264
 
255
265
  ### Changed
256
266
 
257
- - ✨ feat(npm/skills/doc-files): doc-files: підтримка Rust (.rs) — SOURCE_
267
+ - ✨ feat(npm/skills/doc-files): doc-files: підтримка Rust (.rs) — SOURCE\_
258
268
 
259
269
  ## [5.3.2] - 2026-06-11
260
270
 
@@ -290,7 +300,7 @@
290
300
 
291
301
  ### Fixed
292
302
 
293
- - lint: санація шарів, що ховалися за першим падінням oxlint — повний bun run lint доведено до lint-js/style зелених: JSDoc/regex/sonarjs фікси у ~25 файлах, slow-regex обмежено bounded-квантифікаторами, eslint ignore для згенерованих docs/*.md, jscpd ignore (.git, COVERAGE.md, docs, відомі легасі-клони), knip ignoreBinaries (pi/claude/fix-t0), stylelint/cspell ignore згенерованих артефактів; docgen-ignore у doc-aggregate став re-export з doc-files
303
+ - lint: санація шарів, що ховалися за першим падінням oxlint — повний bun run lint доведено до lint-js/style зелених: JSDoc/regex/sonarjs фікси у ~25 файлах, slow-regex обмежено bounded-квантифікаторами, eslint ignore для згенерованих docs/\*.md, jscpd ignore (.git, COVERAGE.md, docs, відомі легасі-клони), knip ignoreBinaries (pi/claude/fix-t0), stylelint/cspell ignore згенерованих артефактів; docgen-ignore у doc-aggregate став re-export з doc-files
294
304
 
295
305
  ## [5.1.0] - 2026-06-10
296
306
 
package/bin/n-cursor.js CHANGED
@@ -623,7 +623,7 @@ function buildClaudeLintParallelismSectionLines() {
623
623
  '',
624
624
  '## Лінт і ESLint (паралелізм)',
625
625
  '',
626
- 'Паралельний лінт по **різних** файлах — **дозволено**: диз\'юнктні набори (per-file `lint` на змінених vs origin) не конфліктують і не перевантажують диск/CPU. Серіалізувати треба лише **whole-tree** прогони того самого корпусу (`bun run lint`, `n-cursor lint --full` по всьому репо) — щоб не дублювати важкий full-scan. Деталі: `.cursor/skills/n-lint/SKILL.md`.',
626
+ "Паралельний лінт по **різних** файлах — **дозволено**: диз'юнктні набори (per-file `lint` на змінених vs origin) не конфліктують і не перевантажують диск/CPU. Серіалізувати треба лише **whole-tree** прогони того самого корпусу (`bun run lint`, `n-cursor lint --full` по всьому репо) — щоб не дублювати важкий full-scan. Деталі: `.cursor/skills/n-lint/SKILL.md`.",
627
627
  ''
628
628
  ]
629
629
  }
package/docs/index.md CHANGED
@@ -6,7 +6,7 @@ resource: npm/
6
6
 
7
7
  # npm
8
8
 
9
- | Файл | Тип |
10
- |---|---|
9
+ | Файл | Тип |
10
+ | --------------------------------------- | --------- |
11
11
  | [stryker.config.mjs](stryker.config.md) | JS Module |
12
- | [vitest.config.js](vitest.config.md) | JS Module |
12
+ | [vitest.config.js](vitest.config.md) | JS Module |
@@ -22,9 +22,9 @@ docgen:
22
22
  6. Вказує ім'я файлу для JSON-звіту.
23
23
  7. Вмикає функціонал збереження результатів між запусками, використовуючи файл `incremental.json`.
24
24
  8. Визначає список файлів, які підлягають мутації:
25
- * Файли у директорії `scripts`.
26
- * Файли у директорії `rules`.
27
- * Файли у директорії `bin`.
25
+ - Файли у директорії `scripts`.
26
+ - Файли у директорії `rules`.
27
+ - Файли у директорії `bin`.
28
28
  9. Виключає з мутації файли у директоріях `tests`, `__fixtures__`, `fixtures`, `data`, `template`, `templates`.
29
29
  10. Виключає з мутації файли у директорії `data`, крім файлу `stryker-vue-macros-ignorer.mjs` у директорії `rules/test/js/data/stryker_config/`.
30
30
 
package/lib/docs/index.md CHANGED
@@ -6,9 +6,9 @@ resource: npm/lib/
6
6
 
7
7
  # npm/lib
8
8
 
9
- | Файл | Тип |
10
- |---|---|
11
- | [llm.mjs](llm.md) | JS Module |
12
- | [models.mjs](models.md) | JS Module |
9
+ | Файл | Тип |
10
+ | ------------------------------- | --------- |
11
+ | [llm.mjs](llm.md) | JS Module |
12
+ | [models.mjs](models.md) | JS Module |
13
13
  | [omlx-trace.mjs](omlx-trace.md) | JS Module |
14
- | [omlx.mjs](omlx.md) | JS Module |
14
+ | [omlx.mjs](omlx.md) | JS Module |
package/lib/docs/llm.md CHANGED
@@ -25,10 +25,10 @@ omlxHealthCheck
25
25
  pickBackend — Бекенд для model-id: `omlx` — прямий HTTP, `pi` — CLI.
26
26
  callLlm — Універсальний виклик LLM з маршрутизацією за префіксом model-id і постійне відстеження (wire-trace) обох каналів.
27
27
  omlxHealthCheck — Перевірка omlx перед масовим прогоном через мінімальний чат-виклик (`max_tokens: 1`). Розрізняє стани:
28
- down — Сервер не відповідає (не запущений / не той порт).
29
- memory-guard — Модель не влазить у динамічну стелю пам'яті зайнятої машини — відкладає прогін.
30
- auth — Сервер вимагає API-ключ — виставляє `N_CURSOR_OMLX_KEY`.
31
- error — Інша помилка API.
28
+ down — Сервер не відповідає (не запущений / не той порт).
29
+ memory-guard — Модель не влазить у динамічну стелю пам'яті зайнятої машини — відкладає прогін.
30
+ auth — Сервер вимагає API-ключ — виставляє `N_CURSOR_OMLX_KEY`.
31
+ error — Інша помилка API.
32
32
  Порожній контент відповіді — означає, що сервер живий і модель завантажена.
33
33
 
34
34
  ## Гарантії поведінки
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@nitra/cursor",
3
- "version": "12.7.0",
3
+ "version": "12.8.0",
4
4
  "description": "CLI для завантаження cursor-правил (префікс n-) у локальний репозиторій",
5
5
  "keywords": [
6
6
  "cli",
@@ -68,4 +68,4 @@
68
68
  "skills": "skills",
69
69
  "extensions": ".pi-template/extensions"
70
70
  }
71
- }
71
+ }
@@ -14,16 +14,16 @@ docgen:
14
14
  ## Поведінка
15
15
 
16
16
  1. Запуск правила.
17
- * Приймає контекст прогону.
18
- * Виконує застосування JS-занепокоєних.
19
- * Застосовує політику.
20
- * Генерує посилання MDC.
21
- * Повертає результат прогону.
17
+ - Приймає контекст прогону.
18
+ - Виконує застосування JS-занепокоєних.
19
+ - Застосовує політику.
20
+ - Генерує посилання MDC.
21
+ - Повертає результат прогону.
22
22
 
23
23
  2. Виконання у режимі CLI.
24
- * Виконується при запуску через CLI.
25
- * Виконує повний еквівалент команди `npx @nitra/cursor fix <id>`.
26
- * Повертає код виходу.
24
+ - Виконується при запуску через CLI.
25
+ - Виконує повний еквівалент команди `npx @nitra/cursor fix <id>`.
26
+ - Повертає код виходу.
27
27
 
28
28
  ## Публічний API
29
29
 
@@ -6,7 +6,7 @@ resource: npm/rules/abie/
6
6
 
7
7
  # npm/rules/abie
8
8
 
9
- | Файл | Тип |
10
- |---|---|
11
- | [fix.mjs](fix.md) | JS Module |
9
+ | Файл | Тип |
10
+ | ------------------- | --------- |
11
+ | [fix.mjs](fix.md) | JS Module |
12
12
  | [main.mjs](main.md) | JS Module |
@@ -6,11 +6,11 @@ resource: npm/rules/abie/js/
6
6
 
7
7
  # npm/rules/abie/js
8
8
 
9
- | Файл | Тип |
10
- |---|---|
11
- | [applies.mjs](applies.md) | JS Module |
12
- | [env_dns.mjs](env_dns.md) | JS Module |
9
+ | Файл | Тип |
10
+ | ------------------------------------------- | --------- |
11
+ | [applies.mjs](applies.md) | JS Module |
12
+ | [env_dns.mjs](env_dns.md) | JS Module |
13
13
  | [firebase_hosting.mjs](firebase_hosting.md) | JS Module |
14
- | [hc_pairing.mjs](hc_pairing.md) | JS Module |
15
- | [ua_http_route.mjs](ua_http_route.md) | JS Module |
14
+ | [hc_pairing.mjs](hc_pairing.md) | JS Module |
15
+ | [ua_http_route.mjs](ua_http_route.md) | JS Module |
16
16
  | [ua_node_selector.mjs](ua_node_selector.md) | JS Module |
@@ -6,13 +6,13 @@ resource: npm/rules/abie/lib/
6
6
 
7
7
  # npm/rules/abie/lib
8
8
 
9
- | Файл | Тип |
10
- |---|---|
11
- | [enabled.mjs](enabled.md) | JS Module |
12
- | [env-dns.mjs](env-dns.md) | JS Module |
13
- | [hc-yaml.mjs](hc-yaml.md) | JS Module |
14
- | [http-route.mjs](http-route.md) | JS Module |
15
- | [k8s-tree.mjs](k8s-tree.md) | JS Module |
9
+ | Файл | Тип |
10
+ | ----------------------------------------------------- | --------- |
11
+ | [enabled.mjs](enabled.md) | JS Module |
12
+ | [env-dns.mjs](env-dns.md) | JS Module |
13
+ | [hc-yaml.mjs](hc-yaml.md) | JS Module |
14
+ | [http-route.mjs](http-route.md) | JS Module |
15
+ | [k8s-tree.mjs](k8s-tree.md) | JS Module |
16
16
  | [kustomization-patches.mjs](kustomization-patches.md) | JS Module |
17
- | [overlay-paths.mjs](overlay-paths.md) | JS Module |
18
- | [yaml.mjs](yaml.md) | JS Module |
17
+ | [overlay-paths.mjs](overlay-paths.md) | JS Module |
18
+ | [yaml.mjs](yaml.md) | JS Module |
@@ -12,11 +12,11 @@ docgen:
12
12
  ## Поведінка
13
13
 
14
14
  1. Запуск правила.
15
- * Приймає контекст прогону.
16
- * Виконує застосування JS-занепокоєних.
17
- * Застосовує політику.
18
- * Генерує посилання MDC.
19
- * Повертає результат прогону.
15
+ - Приймає контекст прогону.
16
+ - Виконує застосування JS-занепокоєних.
17
+ - Застосовує політику.
18
+ - Генерує посилання MDC.
19
+ - Повертає результат прогону.
20
20
 
21
21
  ## Публічний API
22
22
 
@@ -6,7 +6,7 @@ resource: npm/rules/bun/
6
6
 
7
7
  # npm/rules/bun
8
8
 
9
- | Файл | Тип |
10
- |---|---|
11
- | [fix.mjs](fix.md) | JS Module |
9
+ | Файл | Тип |
10
+ | ------------------- | --------- |
11
+ | [fix.mjs](fix.md) | JS Module |
12
12
  | [main.mjs](main.md) | JS Module |
@@ -6,6 +6,6 @@ resource: npm/rules/bun/js/
6
6
 
7
7
  # npm/rules/bun/js
8
8
 
9
- | Файл | Тип |
10
- |---|---|
9
+ | Файл | Тип |
10
+ | ----------------------- | --------- |
11
11
  | [layout.mjs](layout.md) | JS Module |
@@ -12,17 +12,17 @@ docgen:
12
12
  ## Поведінка
13
13
 
14
14
  1. Запуск правила.
15
- * Приймає контекст прогону.
16
- * Виконує застосування JS-занепокоєних.
17
- * Застосовує політику.
18
- * Генерує посилання MDC.
19
- * Повертає результат.
15
+ - Приймає контекст прогону.
16
+ - Виконує застосування JS-занепокоєних.
17
+ - Застосовує політику.
18
+ - Генерує посилання MDC.
19
+ - Повертає результат.
20
20
  2. Запуск у режимі CLI.
21
- * Виконується як повний еквівалент команди `npx @nitra/cursor fix <id>`.
22
- * Виконує завантаження конфігурації.
23
- * Виконує перевірку дозволених записів.
24
- * Генерує зведену інформацію.
25
- * Використовує `process.exitCode` для визначення виходу.
21
+ - Виконується як повний еквівалент команди `npx @nitra/cursor fix <id>`.
22
+ - Виконує завантаження конфігурації.
23
+ - Виконує перевірку дозволених записів.
24
+ - Генерує зведену інформацію.
25
+ - Використовує `process.exitCode` для визначення виходу.
26
26
 
27
27
  ## Публічний API
28
28
 
@@ -6,7 +6,7 @@ resource: npm/rules/capacitor/
6
6
 
7
7
  # npm/rules/capacitor
8
8
 
9
- | Файл | Тип |
10
- |---|---|
11
- | [fix.mjs](fix.md) | JS Module |
9
+ | Файл | Тип |
10
+ | ------------------- | --------- |
11
+ | [fix.mjs](fix.md) | JS Module |
12
12
  | [main.mjs](main.md) | JS Module |
@@ -6,6 +6,6 @@ resource: npm/rules/capacitor/js/
6
6
 
7
7
  # npm/rules/capacitor/js
8
8
 
9
- | Файл | Тип |
10
- |---|---|
9
+ | Файл | Тип |
10
+ | ----------------------------- | --------- |
11
11
  | [platforms.mjs](platforms.md) | JS Module |
@@ -12,18 +12,18 @@ docgen:
12
12
  ## Поведінка
13
13
 
14
14
  1. Запуск правила.
15
- * Приймає контекст прогону.
16
- * Виконує застосування JS-занепокоєних.
17
- * Застосовує політику.
18
- * Генерує посилання MDC.
19
- * Повертає результат прогону.
15
+ - Приймає контекст прогону.
16
+ - Виконує застосування JS-занепокоєних.
17
+ - Застосовує політику.
18
+ - Генерує посилання MDC.
19
+ - Повертає результат прогону.
20
20
  2. Виконання у режимі CLI.
21
- * Виконується як окремий скрипт.
22
- * Еквівалент команди `npx @nitra/cursor fix <id>`.
23
- * Виконує завантаження конфігурації.
24
- * Виконує перевірку дозволених елементів.
25
- * Генерує зведену інформацію.
26
- * Виконує повний еквівалент `fix.mjs`.
21
+ - Виконується як окремий скрипт.
22
+ - Еквівалент команди `npx @nitra/cursor fix <id>`.
23
+ - Виконує завантаження конфігурації.
24
+ - Виконує перевірку дозволених елементів.
25
+ - Генерує зведену інформацію.
26
+ - Виконує повний еквівалент `fix.mjs`.
27
27
 
28
28
  ## Публічний API
29
29
 
@@ -6,7 +6,7 @@ resource: npm/rules/changelog/
6
6
 
7
7
  # npm/rules/changelog
8
8
 
9
- | Файл | Тип |
10
- |---|---|
11
- | [fix.mjs](fix.md) | JS Module |
9
+ | Файл | Тип |
10
+ | ------------------- | --------- |
11
+ | [fix.mjs](fix.md) | JS Module |
12
12
  | [main.mjs](main.md) | JS Module |
@@ -16,19 +16,19 @@ docgen:
16
16
  3. Зчитує всі кореневі каталоги проектів у монорепо.
17
17
  4. Класифікує кожен проект як публікувальний (registryPublishable) або локальний.
18
18
  5. Для кожного публікувального проекту виконує перевірку:
19
- а. Зчитує маніфест проекту.
20
- б. Якщо у маніфесті відсутнє ім'я або поле version, фіксує помилку.
21
- в. Якщо є change-файл(и) у .changes/, фіксує успіх, оскільки bump зробить CI (n-changelog.mdc), і перевіряє наявність "CHANGELOG.md" у файлах проекту.
22
- г. Якщо немає change-файлу, визначає точку порівняння на основі поточної гілки.
23
- д. Порівнює версію в маніфесті з опублікованою версією (за допомогою npm view або запиту до https://pypi.org/pypi/).
24
- е. Якщо версія в маніфесті випереджає опубліковану, фіксує помилку, оскільки ручний bump поза CI заборонений.
25
- ж. Якщо версія в маніфесті позаду опублікованої, фіксує успіх, оскільки це відставання локального репозиторію від реєстру.
26
- з. Якщо версії збігаються, перевіряє змінений код відносно точки порівняння. Якщо зміни є, але немає change-файлу, викликає механізм фіксації або фіксує помилку, надаючи підказку для використання команди `npx @nitra/cursor change`.
19
+ а. Зчитує маніфест проекту.
20
+ б. Якщо у маніфесті відсутнє ім'я або поле version, фіксує помилку.
21
+ в. Якщо є change-файл(и) у .changes/, фіксує успіх, оскільки bump зробить CI (n-changelog.mdc), і перевіряє наявність "CHANGELOG.md" у файлах проекту.
22
+ г. Якщо немає change-файлу, визначає точку порівняння на основі поточної гілки.
23
+ д. Порівнює версію в маніфесті з опублікованою версією (за допомогою npm view або запиту до https://pypi.org/pypi/).
24
+ е. Якщо версія в маніфесті випереджає опубліковану, фіксує помилку, оскільки ручний bump поза CI заборонений.
25
+ ж. Якщо версія в маніфесті позаду опублікованої, фіксує успіх, оскільки це відставання локального репозиторію від реєстру.
26
+ з. Якщо версії збігаються, перевіряє змінений код відносно точки порівняння. Якщо зміни є, але немає change-файлу, викликає механізм фіксації або фіксує помилку, надаючи підказку для використання команди `npx @nitra/cursor change`.
27
27
  6. Для кожного локального проекту виконує перевірку:
28
- а. Зчитує маніфест проекту.
29
- б. Визначає точку порівняння на основі поточної гілки.
30
- в. Перевіряє, чи є релевантні зміни у проекті відносно точки порівняння.
31
- г. Якщо зміни є, але немає change-файлу, викликає механізм фіксації або фіксує помилку, надаючи підказку для використання команди `npx @nitra/cursor change`.
28
+ а. Зчитує маніфест проекту.
29
+ б. Визначає точку порівняння на основі поточної гілки.
30
+ в. Перевіряє, чи є релевантні зміни у проекті відносно точки порівняння.
31
+ г. Якщо зміни є, але немає change-файлу, викликає механізм фіксації або фіксує помилку, надаючи підказку для використання команди `npx @nitra/cursor change`.
32
32
  7. Повертає кінцевий код виходу, що відображає результат перевірки.
33
33
 
34
34
  ## Гарантії поведінки
@@ -6,6 +6,6 @@ resource: npm/rules/changelog/js/
6
6
 
7
7
  # npm/rules/changelog/js
8
8
 
9
- | Файл | Тип |
10
- |---|---|
9
+ | Файл | Тип |
10
+ | --------------------------------- | --------- |
11
11
  | [consistency.mjs](consistency.md) | JS Module |
@@ -6,6 +6,6 @@ resource: npm/rules/changelog/lib/
6
6
 
7
7
  # npm/rules/changelog/lib
8
8
 
9
- | Файл | Тип |
10
- |---|---|
9
+ | Файл | Тип |
10
+ | ------------------------------------------- | --------- |
11
11
  | [package-manifest.mjs](package-manifest.md) | JS Module |
@@ -13,12 +13,12 @@ docgen:
13
13
  ## Поведінка
14
14
 
15
15
  1. Запуск правила.
16
- * Виклик runStandardRule з контекстом.
17
- * Повернення результату.
16
+ - Виклик runStandardRule з контекстом.
17
+ - Повернення результату.
18
18
 
19
19
  2. Запуск правила у режимі CLI.
20
- * Виклик runRuleCli з директорією модуля.
21
- * Вихід з процесом залежно від результату.
20
+ - Виклик runRuleCli з директорією модуля.
21
+ - Вихід з процесом залежно від результату.
22
22
 
23
23
  ## Публічний API
24
24
 
@@ -6,7 +6,7 @@ resource: npm/rules/ci4/
6
6
 
7
7
  # npm/rules/ci4
8
8
 
9
- | Файл | Тип |
10
- |---|---|
11
- | [fix.mjs](fix.md) | JS Module |
9
+ | Файл | Тип |
10
+ | ------------------- | --------- |
11
+ | [fix.mjs](fix.md) | JS Module |
12
12
  | [main.mjs](main.md) | JS Module |
@@ -6,6 +6,6 @@ resource: npm/rules/ci4/js/
6
6
 
7
7
  # npm/rules/ci4/js
8
8
 
9
- | Файл | Тип |
10
- |---|---|
9
+ | Файл | Тип |
10
+ | ----------------------------------------- | --------- |
11
11
  | [marksman_config.mjs](marksman_config.md) | JS Module |
@@ -6,7 +6,7 @@ resource: npm/rules/doc-files/
6
6
 
7
7
  # npm/rules/doc-files
8
8
 
9
- | Файл | Тип |
10
- |---|---|
11
- | [fix.mjs](fix.md) | JS Module |
9
+ | Файл | Тип |
10
+ | ------------------- | --------- |
11
+ | [fix.mjs](fix.md) | JS Module |
12
12
  | [main.mjs](main.md) | JS Module |
@@ -74,7 +74,7 @@ const EXT_TYPES = {
74
74
  '.ts': 'TS Module',
75
75
  '.vue': 'Vue Component',
76
76
  '.py': 'Python Module',
77
- '.rs': 'Rust Module',
77
+ '.rs': 'Rust Module'
78
78
  }
79
79
 
80
80
  /**
@@ -86,8 +86,6 @@ function typeForSource(sourcePath) {
86
86
  return EXT_TYPES[extname(sourcePath).toLowerCase()] ?? 'Source File'
87
87
  }
88
88
 
89
-
90
-
91
89
  /**
92
90
  * Нормалізує issues до YAML-безпечних кодів: бере фрагмент до першого пробілу
93
91
  * (зрізає людиночитні хвости помилок), відкидає порожні, обмежує кількість.
@@ -112,11 +110,7 @@ function issueCodes(issues) {
112
110
  * @returns {string} OKF-сумісний YAML frontmatter
113
111
  */
114
112
  export function buildDocFrontmatter(source, crc, quality = null, model = null) {
115
- const okfLines = [
116
- `type: ${typeForSource(source)}`,
117
- `title: ${basename(source)}`,
118
- `resource: ${source}`,
119
- ]
113
+ const okfLines = [`type: ${typeForSource(source)}`, `title: ${basename(source)}`, `resource: ${source}`]
120
114
 
121
115
  // docgen namespace: лише CRC-механіка і quality (source перенесено у resource)
122
116
  const docgenLines = [`crc: ${crc}`]
@@ -48,11 +48,13 @@ const FALSY_RETURN_RE = /catch[\s\S]{0,400}?return\s+(false|null|''|"")/
48
48
  // Мережа: окрім явного fetch/http, ловимо абстраговані клієнти (graphql/db/rpc/
49
49
  // octokit/.request/.query). Хибний false-negative тут = небезпечна гарантія
50
50
  // «без мережі», тож свідомо схиляємось до over-detection (м'якший бік помилки).
51
- const NETWORK_RE = /\bfetch\(|https?:\/\/|\bhttps?\.|axios|\bgot\(|graphql|\.request\(|\.query\(|\.mutate\(|octokit|node-fetch|undici|\bgrpc\b|websocket/i
51
+ const NETWORK_RE =
52
+ /\bfetch\(|https?:\/\/|\bhttps?\.|axios|\bgot\(|graphql|\.request\(|\.query\(|\.mutate\(|octokit|node-fetch|undici|\bgrpc\b|websocket/i
52
53
  // Будь-який `throw` назовні → НЕ можна гарантувати «fail-safe / без винятків».
53
54
  const THROW_RE = /\bthrow\s/
54
55
  // Запис у БД / зовнішню мутацію → НЕ read-only (навіть якщо нема ФС-запису).
55
- const MUTATION_RE = /\b(insert|update|delete|upsert|drop|destroy|save)[A-Za-z]*\s*[(,]|[Mm]utation\b|\bmut[A-Z]\w*|\.(save|create|update|delete|insert|destroy|mutate)\(/
56
+ const MUTATION_RE =
57
+ /\b(insert|update|delete|upsert|drop|destroy|save)[A-Za-z]*\s*[(,]|[Mm]utation\b|\bmut[A-Z]\w*|\.(save|create|update|delete|insert|destroy|mutate)\(/
56
58
  // Кеш — лише за ІМЕНОВАНИМ маркером (`cache`/`Cache`/`memoize`), не за будь-яким
57
59
  // `new Map()`: акумулятор (напр. `byPath = new Map()`) — не кеш, а хибна гарантія
58
60
  // «Кешує результати» гірша за пропуск (фабрикація > мовчання).
@@ -213,7 +215,7 @@ function extractMarkers(src) {
213
215
  return {
214
216
  // «Фабрикація > мовчання»: прапорець true лише за high-confidence; інакше
215
217
  // guaranteesFromMarkers/factsSummary його ОПУСКАЮТЬ (не стверджують протилежне).
216
- readOnly: !WRITE_FS_RE.test(src) && !MUTATION_RE.test(src), // ні ФС-запису, ні DB-мутацій
218
+ readOnly: !WRITE_FS_RE.test(src) && !MUTATION_RE.test(src), // ні ФС-запису, ні DB-мутацій
217
219
  catchesErrors: (CATCH_RE.test(src) || TRY_RE.test(src)) && !THROW_RE.test(src), // fail-safe лише якщо НЕ кидає
218
220
  returnsFalsyOnFail: FALSY_RETURN_RE.test(src) && !THROW_RE.test(src),
219
221
  network: NETWORK_RE.test(src),
@@ -1,5 +1,14 @@
1
1
  /** @see ./docs/docgen-files-batch.md */
2
- import { existsSync, mkdirSync, readdirSync, readFileSync, rmdirSync, statSync, unlinkSync, writeFileSync } from 'node:fs'
2
+ import {
3
+ existsSync,
4
+ mkdirSync,
5
+ readdirSync,
6
+ readFileSync,
7
+ rmdirSync,
8
+ statSync,
9
+ unlinkSync,
10
+ writeFileSync
11
+ } from 'node:fs'
3
12
  import { basename, dirname, join, relative } from 'node:path'
4
13
 
5
14
  import { isRunAsCli } from '../../../scripts/cli-entry.mjs'
@@ -153,7 +162,9 @@ const OKF_RESOURCE_RE = /^resource:[ \t]+(.+)$/mu
153
162
  * @returns {void}
154
163
  */
155
164
  function generateDirIndex(docsAbsDir, root) {
156
- const allMd = readdirSync(docsAbsDir).filter(f => f.endsWith('.md')).sort()
165
+ const allMd = readdirSync(docsAbsDir)
166
+ .filter(f => f.endsWith('.md'))
167
+ .sort()
157
168
 
158
169
  // Якщо index.md вже є дока для source-файлу (має docgen.source → index.*) — не чіпаємо
159
170
  if (allMd.includes('index.md')) {
@@ -243,7 +254,11 @@ export function purgeOrphanedDocs(root) {
243
254
  // Лише index.md або порожня директорія — прибираємо повністю
244
255
  const indexPath = join(docsAbsDir, 'index.md')
245
256
  if (existsSync(indexPath)) unlinkSync(indexPath)
246
- try { rmdirSync(docsAbsDir) } catch { /* не порожня — пропускаємо */ }
257
+ try {
258
+ rmdirSync(docsAbsDir)
259
+ } catch {
260
+ /* не порожня — пропускаємо */
261
+ }
247
262
  } else {
248
263
  generateDirIndex(docsAbsDir, root)
249
264
  }
@@ -133,7 +133,10 @@ export function splitProtected(md) {
133
133
  break
134
134
  }
135
135
  }
136
- const body = lines.slice(start + 1, end).join('\n').trim()
136
+ const body = lines
137
+ .slice(start + 1, end)
138
+ .join('\n')
139
+ .trim()
137
140
  const without = [...lines.slice(0, start), ...lines.slice(end)].join('\n')
138
141
  return { body: body || null, without }
139
142
  }
@@ -395,7 +398,10 @@ export const DEFAULT_LOCAL_MODEL = env.N_CURSOR_DOCGEN_MODEL ?? resolveModel('mi
395
398
  * @param {{ model?: string, threshold?: number, existingMd?: string|null }} [opts] model-id, поріг degraded, наявна дока (для збереження захищеної секції)
396
399
  * @returns {{ md: string, ms: number, llmMs: number, llmCalls: number, score: number|null, issues: string[], degraded: boolean, model: string }} документ і метадані генерації (ms — увесь файл; llmMs/llmCalls — лише LLM; решта ms — оркестрація)
397
400
  */
398
- export function generateDoc(file, { model = DEFAULT_LOCAL_MODEL, threshold = QUALITY_THRESHOLD, existingMd = null } = {}) {
401
+ export function generateDoc(
402
+ file,
403
+ { model = DEFAULT_LOCAL_MODEL, threshold = QUALITY_THRESHOLD, existingMd = null } = {}
404
+ ) {
399
405
  const src = readFileSync(file, 'utf8')
400
406
  // Pre-send guard: весь src вшивається у промпт як є (екстракт фактів його НЕ
401
407
  // замінює). Для гігантів (vendored/генерат) це переповнює контекст → інстант-skip
@@ -403,7 +409,9 @@ export function generateDoc(file, { model = DEFAULT_LOCAL_MODEL, threshold = QUA
403
409
  const estTokens = Math.round(Buffer.byteLength(src, 'utf8') / 4)
404
410
  const budget = srcTokenBudget()
405
411
  if (estTokens > budget) {
406
- throw new Error(`docgen pre-send guard: джерело ~${estTokens} токенів > бюджет ${budget} (0.5× контексту) — Prompt too long, skip`)
412
+ throw new Error(
413
+ `docgen pre-send guard: джерело ~${estTokens} токенів > бюджет ${budget} (0.5× контексту) — Prompt too long, skip`
414
+ )
407
415
  }
408
416
  const facts = extractFacts(src, file)
409
417
  const t0 = Date.now()