@nitra/cursor 12.6.1 → 12.7.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 (266) hide show
  1. package/.claude-template/settings.template.json +1 -1
  2. package/CHANGELOG.md +10 -0
  3. package/bin/docs/n-cursor.md +4 -20
  4. package/bin/n-cursor.js +7 -53
  5. package/docs/stryker.config.md +20 -28
  6. package/package.json +1 -1
  7. package/rules/abie/docs/index.md +1 -0
  8. package/rules/abie/docs/main.md +29 -0
  9. package/rules/abie/{fix.mjs → main.mjs} +5 -3
  10. package/rules/adr/docs/index.md +1 -0
  11. package/rules/adr/docs/main.md +29 -0
  12. package/rules/adr/{fix.mjs → main.mjs} +5 -3
  13. package/rules/bun/docs/index.md +1 -0
  14. package/rules/bun/docs/main.md +30 -0
  15. package/rules/bun/js/docs/layout.md +11 -36
  16. package/rules/bun/{fix.mjs → main.mjs} +5 -3
  17. package/rules/capacitor/docs/index.md +1 -0
  18. package/rules/capacitor/docs/main.md +29 -0
  19. package/rules/capacitor/{fix.mjs → main.mjs} +5 -3
  20. package/rules/changelog/docs/index.md +1 -0
  21. package/rules/changelog/docs/main.md +27 -0
  22. package/rules/changelog/main.mjs +20 -0
  23. package/rules/ci4/docs/index.md +1 -0
  24. package/rules/ci4/docs/main.md +30 -0
  25. package/rules/ci4/main.mjs +20 -0
  26. package/rules/doc-files/docs/index.md +1 -0
  27. package/rules/doc-files/docs/main.md +31 -0
  28. package/rules/doc-files/js/docgen-files-batch.mjs +47 -3
  29. package/rules/doc-files/js/docgen-scan.mjs +89 -9
  30. package/rules/doc-files/js/docs/docgen-files-batch.md +15 -15
  31. package/rules/doc-files/js/docs/docgen-scan.md +34 -34
  32. package/rules/doc-files/js/docs/index.md +1 -0
  33. package/rules/doc-files/js/docs/run-lint.md +27 -0
  34. package/rules/doc-files/{lint/lint.mjs → js/run-lint.mjs} +23 -9
  35. package/rules/doc-files/{js/lint.mjs → main.mjs} +60 -10
  36. package/rules/docker/docs/index.md +1 -0
  37. package/rules/docker/docs/main.md +28 -0
  38. package/rules/docker/js/docs/lint.md +26 -54
  39. package/rules/docker/js/lint.mjs +11 -0
  40. package/rules/docker/lib/docker-hadolint.mjs +1 -1
  41. package/rules/docker/lib/docs/docker-hadolint.md +16 -173
  42. package/rules/docker/main.mjs +20 -0
  43. package/rules/efes/docs/index.md +1 -0
  44. package/rules/efes/docs/main.md +29 -0
  45. package/rules/efes/main.mjs +20 -0
  46. package/rules/feedback/docs/index.md +1 -0
  47. package/rules/feedback/docs/main.md +30 -0
  48. package/rules/feedback/main.mjs +20 -0
  49. package/rules/ga/docs/index.md +1 -0
  50. package/rules/ga/docs/main.md +29 -0
  51. package/rules/ga/{lint/lint.mjs → main.mjs} +36 -10
  52. package/rules/graphql/docs/index.md +1 -0
  53. package/rules/graphql/docs/main.md +36 -0
  54. package/rules/graphql/main.mjs +20 -0
  55. package/rules/hasura/docs/index.md +1 -0
  56. package/rules/hasura/docs/main.md +30 -0
  57. package/rules/hasura/main.mjs +20 -0
  58. package/rules/image-avif/docs/index.md +1 -0
  59. package/rules/image-avif/docs/main.md +30 -0
  60. package/rules/image-avif/js/docs/avif_generation.md +20 -233
  61. package/rules/image-avif/main.mjs +20 -0
  62. package/rules/image-compress/docs/index.md +1 -0
  63. package/rules/image-compress/docs/main.md +29 -0
  64. package/rules/image-compress/js/docs/package_setup.md +12 -11
  65. package/rules/image-compress/{js/lint.mjs → main.mjs} +21 -5
  66. package/rules/js-bun-db/docs/index.md +1 -0
  67. package/rules/js-bun-db/docs/main.md +30 -0
  68. package/rules/js-bun-db/main.mjs +20 -0
  69. package/rules/js-bun-redis/docs/index.md +1 -0
  70. package/rules/js-bun-redis/docs/main.md +29 -0
  71. package/rules/js-bun-redis/main.mjs +20 -0
  72. package/rules/js-lint/docs/index.md +1 -0
  73. package/rules/js-lint/docs/main.md +29 -0
  74. package/rules/js-lint/js/check.mjs +268 -0
  75. package/rules/js-lint/js/docs/check.md +39 -0
  76. package/rules/js-lint/js/docs/index.md +1 -1
  77. package/rules/js-lint/js/docs/tooling.md +12 -32
  78. package/rules/js-lint/js/tooling.mjs +1 -265
  79. package/rules/js-lint/{js/lint.mjs → main.mjs} +19 -2
  80. package/rules/js-lint-ci/docs/index.md +1 -0
  81. package/rules/js-lint-ci/docs/main.md +27 -0
  82. package/rules/js-lint-ci/main.mjs +33 -0
  83. package/rules/js-mssql/docs/index.md +1 -0
  84. package/rules/js-mssql/docs/main.md +30 -0
  85. package/rules/js-mssql/main.mjs +20 -0
  86. package/rules/js-run/docs/index.md +1 -0
  87. package/rules/js-run/docs/main.md +30 -0
  88. package/rules/js-run/main.mjs +20 -0
  89. package/rules/k8s/docs/index.md +1 -0
  90. package/rules/k8s/docs/main.md +40 -0
  91. package/rules/k8s/js/docs/index.md +12 -0
  92. package/rules/k8s/{lint/lint.mjs → main.mjs} +32 -10
  93. package/rules/nginx-default-tpl/docs/index.md +1 -0
  94. package/rules/nginx-default-tpl/docs/main.md +30 -0
  95. package/rules/nginx-default-tpl/main.mjs +20 -0
  96. package/rules/npm-module/docs/index.md +1 -0
  97. package/rules/npm-module/docs/main.md +29 -0
  98. package/rules/npm-module/js/docs/rule_meta.md +17 -16
  99. package/rules/npm-module/js/rule_meta.mjs +13 -3
  100. package/rules/npm-module/main.mjs +20 -0
  101. package/rules/php/docs/index.md +1 -0
  102. package/rules/php/docs/main.md +33 -0
  103. package/rules/php/js/docs/tooling.md +10 -10
  104. package/rules/php/{lint/lint.mjs → main.mjs} +32 -6
  105. package/rules/python/docs/index.md +1 -0
  106. package/rules/python/docs/main.md +31 -0
  107. package/rules/python/js/docs/tooling.md +17 -17
  108. package/rules/python/{lint/lint.mjs → main.mjs} +29 -5
  109. package/rules/rego/docs/index.md +1 -0
  110. package/rules/rego/docs/main.md +37 -0
  111. package/rules/rego/{lint/lint.mjs → main.mjs} +27 -5
  112. package/rules/release/docs/index.md +1 -0
  113. package/rules/release/docs/main.md +29 -0
  114. package/rules/release/docs/release.md +0 -3
  115. package/rules/release/release.mdc +10 -0
  116. package/rules/rust/docs/index.md +1 -0
  117. package/rules/rust/docs/main.md +27 -0
  118. package/rules/rust/{js/lint.mjs → main.mjs} +20 -3
  119. package/rules/security/docs/index.md +1 -0
  120. package/rules/security/docs/main.md +28 -0
  121. package/rules/security/main.mjs +45 -0
  122. package/rules/style-lint/docs/index.md +1 -0
  123. package/rules/style-lint/docs/main.md +29 -0
  124. package/rules/style-lint/{js/lint.mjs → main.mjs} +19 -1
  125. package/rules/tauri/docs/index.md +1 -0
  126. package/rules/tauri/docs/main.md +29 -0
  127. package/rules/tauri/main.mjs +20 -0
  128. package/rules/test/docs/index.md +1 -0
  129. package/rules/test/docs/main.md +30 -0
  130. package/rules/test/main.mjs +20 -0
  131. package/rules/text/docs/index.md +1 -0
  132. package/rules/text/docs/main.md +29 -0
  133. package/rules/text/js/docs/cspell-fix.md +30 -0
  134. package/rules/text/js/docs/formatting.md +12 -45
  135. package/rules/text/js/docs/index.md +4 -0
  136. package/rules/text/js/docs/run-dotenv-linter.md +31 -0
  137. package/rules/text/js/docs/run-shellcheck.md +28 -0
  138. package/rules/text/js/docs/run-v8r.md +29 -0
  139. package/rules/text/{lint/lint.mjs → main.mjs} +38 -9
  140. package/rules/tool-surface/docs/index.md +1 -0
  141. package/rules/tool-surface/docs/main.md +29 -0
  142. package/rules/tool-surface/main.mjs +20 -0
  143. package/rules/vue/docs/index.md +1 -0
  144. package/rules/vue/docs/main.md +29 -0
  145. package/rules/vue/main.mjs +20 -0
  146. package/rules/worktree/docs/index.md +1 -0
  147. package/rules/worktree/docs/main.md +28 -0
  148. package/rules/worktree/main.mjs +20 -0
  149. package/scripts/docs/index.md +1 -0
  150. package/scripts/docs/post-tool-use-check.md +29 -0
  151. package/scripts/docs/sync-claude-config.md +64 -92
  152. package/scripts/lib/adr/docs/normalize-cli.md +0 -3
  153. package/scripts/lib/adr/docs/normalize-pipeline.md +0 -3
  154. package/scripts/lib/docs/gha-workflow.md +25 -317
  155. package/scripts/lib/docs/index.md +1 -0
  156. package/scripts/lib/docs/list-project-rules-mdc.md +5 -4
  157. package/scripts/lib/docs/list-rule-ids.md +15 -148
  158. package/scripts/lib/docs/read-n-cursor-config-lite.md +12 -16
  159. package/scripts/lib/docs/run-lint-step.md +13 -13
  160. package/scripts/lib/docs/run-lint.md +30 -0
  161. package/scripts/lib/docs/run-rule-cli.md +14 -10
  162. package/scripts/lib/docs/run-standard-lint.md +27 -10
  163. package/scripts/lib/docs/run-standard-rule.md +12 -11
  164. package/scripts/lib/docs/timing-summary.md +11 -12
  165. package/scripts/lib/docs/worktree-notice.md +0 -3
  166. package/scripts/lib/fix/docs/index.md +1 -0
  167. package/scripts/lib/fix/docs/orchestrator.md +23 -18
  168. package/scripts/lib/fix/docs/run-conformance-check.md +32 -0
  169. package/scripts/lib/fix/docs/t0.md +10 -9
  170. package/scripts/lib/fix/orchestrator.mjs +5 -5
  171. package/scripts/lib/fix/{run-fix-check.mjs → run-conformance-check.mjs} +13 -13
  172. package/scripts/lib/fix/t0.mjs +3 -3
  173. package/scripts/lib/list-project-rules-mdc.mjs +1 -1
  174. package/scripts/lib/list-rule-ids.mjs +12 -3
  175. package/scripts/lib/read-n-cursor-config-lite.mjs +2 -2
  176. package/{rules/lint/js/orchestrate.mjs → scripts/lib/run-lint.mjs} +42 -20
  177. package/scripts/lib/run-rule-cli.mjs +4 -4
  178. package/scripts/lib/run-standard-lint.mjs +19 -6
  179. package/scripts/lib/run-standard-rule.mjs +4 -4
  180. package/scripts/lib/timing-summary.mjs +1 -1
  181. package/scripts/{post-tool-use-fix.mjs → post-tool-use-check.mjs} +9 -9
  182. package/scripts/sync-claude-config.mjs +2 -2
  183. package/rules/changelog/fix.mjs +0 -18
  184. package/rules/ci4/fix.mjs +0 -18
  185. package/rules/doc-files/fix.mjs +0 -19
  186. package/rules/doc-files/js/docs/lint.md +0 -34
  187. package/rules/doc-files/lint/docs/index.md +0 -11
  188. package/rules/doc-files/lint/docs/lint.md +0 -35
  189. package/rules/docker/fix.mjs +0 -18
  190. package/rules/docker/lint/docs/index.md +0 -11
  191. package/rules/docker/lint/docs/lint.md +0 -200
  192. package/rules/docker/lint/lint.mjs +0 -95
  193. package/rules/efes/fix.mjs +0 -18
  194. package/rules/feedback/fix.mjs +0 -18
  195. package/rules/ga/fix.mjs +0 -18
  196. package/rules/ga/js/docs/lint.md +0 -20
  197. package/rules/ga/js/lint.mjs +0 -12
  198. package/rules/ga/lint/docs/index.md +0 -11
  199. package/rules/ga/lint/docs/lint.md +0 -31
  200. package/rules/graphql/fix.mjs +0 -18
  201. package/rules/hasura/fix.mjs +0 -18
  202. package/rules/image-avif/fix.mjs +0 -18
  203. package/rules/image-compress/fix.mjs +0 -18
  204. package/rules/image-compress/js/docs/lint.md +0 -24
  205. package/rules/js-bun-db/fix.mjs +0 -18
  206. package/rules/js-bun-redis/fix.mjs +0 -18
  207. package/rules/js-lint/fix.mjs +0 -18
  208. package/rules/js-lint/js/docs/lint.md +0 -32
  209. package/rules/js-lint-ci/fix.mjs +0 -18
  210. package/rules/js-lint-ci/js/docs/lint.md +0 -22
  211. package/rules/js-lint-ci/js/lint.mjs +0 -15
  212. package/rules/js-mssql/fix.mjs +0 -18
  213. package/rules/js-run/fix.mjs +0 -18
  214. package/rules/k8s/fix.mjs +0 -18
  215. package/rules/k8s/js/lint.mjs +0 -14
  216. package/rules/k8s/lint/docs/index.md +0 -11
  217. package/rules/k8s/lint/docs/lint.md +0 -413
  218. package/rules/lint/docs/fix.md +0 -25
  219. package/rules/lint/docs/index.md +0 -11
  220. package/rules/lint/fix.mjs +0 -18
  221. package/rules/lint/js/docs/index.md +0 -11
  222. package/rules/lint/js/docs/orchestrate.md +0 -31
  223. package/rules/lint/meta.json +0 -1
  224. package/rules/nginx-default-tpl/fix.mjs +0 -18
  225. package/rules/npm-module/fix.mjs +0 -18
  226. package/rules/php/fix.mjs +0 -18
  227. package/rules/php/js/docs/lint.md +0 -20
  228. package/rules/php/js/lint.mjs +0 -15
  229. package/rules/php/lint/docs/index.md +0 -11
  230. package/rules/php/lint/docs/lint.md +0 -219
  231. package/rules/python/fix.mjs +0 -18
  232. package/rules/python/js/docs/lint.md +0 -21
  233. package/rules/python/js/lint.mjs +0 -14
  234. package/rules/python/lint/docs/index.md +0 -11
  235. package/rules/python/lint/docs/lint.md +0 -29
  236. package/rules/rego/fix.mjs +0 -18
  237. package/rules/rego/js/docs/lint.md +0 -21
  238. package/rules/rego/js/lint.mjs +0 -12
  239. package/rules/rego/lint/docs/index.md +0 -11
  240. package/rules/rego/lint/docs/lint.md +0 -208
  241. package/rules/rust/fix.mjs +0 -18
  242. package/rules/rust/js/docs/lint.md +0 -21
  243. package/rules/security/fix.mjs +0 -18
  244. package/rules/security/js/docs/lint.md +0 -175
  245. package/rules/security/js/lint.mjs +0 -26
  246. package/rules/style-lint/fix.mjs +0 -18
  247. package/rules/style-lint/js/docs/lint.md +0 -31
  248. package/rules/tauri/fix.mjs +0 -18
  249. package/rules/test/fix.mjs +0 -18
  250. package/rules/text/fix.mjs +0 -18
  251. package/rules/text/js/docs/lint.md +0 -23
  252. package/rules/text/js/lint.mjs +0 -15
  253. package/rules/text/lint/docs/cspell-fix.md +0 -32
  254. package/rules/text/lint/docs/index.md +0 -15
  255. package/rules/text/lint/docs/lint.md +0 -36
  256. package/rules/text/lint/docs/run-dotenv-linter.md +0 -161
  257. package/rules/text/lint/docs/run-shellcheck.md +0 -216
  258. package/rules/text/lint/docs/run-v8r.md +0 -201
  259. package/rules/tool-surface/fix.mjs +0 -18
  260. package/rules/vue/fix.mjs +0 -18
  261. package/rules/worktree/fix.mjs +0 -18
  262. /package/rules/release/{fix.mjs → main.mjs} +0 -0
  263. /package/rules/text/{lint → js}/cspell-fix.mjs +0 -0
  264. /package/rules/text/{lint → js}/run-dotenv-linter.mjs +0 -0
  265. /package/rules/text/{lint → js}/run-shellcheck.mjs +0 -0
  266. /package/rules/text/{lint → js}/run-v8r.mjs +0 -0
@@ -6,11 +6,8 @@ docgen:
6
6
  crc: 06d3556b
7
7
  model: omlx/gemma-4-e4b-it-OptiQ-4bit
8
8
  score: 100
9
- judgeModel: openai-codex/gpt-5.4-mini
10
9
  ---
11
10
 
12
- ## Огляд
13
-
14
11
  Файл автоматизує процес випуску версій. Він агрегує зміна-файли для всіх робочих просторів у `version-bump` та `CHANGELOG`, комітить зміни, ставить тег `<name>@<version>` та видаляє використані зміна-файли. Цей процес виконується у CI на гілці `main` (n-cursor-release-design, варіант A). Публічні функції, що надає модуль, — `release` та `runReleaseCli`.
15
12
 
16
13
  ## Поведінка
@@ -0,0 +1,10 @@
1
+ ---
2
+ description: n-cursor release та n-cursor change — автоматичний version-bump і CHANGELOG із change-файлів
3
+ version: '1.0'
4
+ globs: "**/package.json,**/pyproject.toml,**/CHANGELOG.md,**/.changes/*.md"
5
+ alwaysApply: false
6
+ ---
7
+
8
+ Версія та CHANGELOG **не редагуються вручну**. Єдиний артефакт зміни — **change-файл** (`npx @nitra/cursor change --bump <major|minor|patch> --section <Added|Changed|Fixed|Removed> --message "<…>"`). Bump `version` і генерацію секції CHANGELOG виконує `n-cursor release` у CI на `main`.
9
+
10
+ Детальна модель (база порівняння, формат CHANGELOG, post-release-інваріант) — у `n-changelog.mdc`.
@@ -9,3 +9,4 @@ resource: npm/rules/rust/
9
9
  | Файл | Тип |
10
10
  |---|---|
11
11
  | [fix.mjs](fix.md) | JS Module |
12
+ | [main.mjs](main.md) | JS Module |
@@ -0,0 +1,27 @@
1
+ ---
2
+ type: JS Module
3
+ title: main.mjs
4
+ resource: npm/rules/rust/main.mjs
5
+ docgen:
6
+ crc: a3060168
7
+ model: omlx/gemma-4-e4b-it-OptiQ-4bit
8
+ score: 90
9
+ ---
10
+
11
+ ## Огляд
12
+
13
+ Модуль надає функції для роботи з кодом Rust. Функція `run` виконує повний аналіз коду, включаючи перевірку відповідності політиці MDC. Функція `lint` здійснює статичний аналіз коду. Обидві функції можуть ініціювати форматування та аналіз за допомогою `cargo`.
14
+
15
+ ## Поведінка
16
+
17
+ run виконує перевірку коду Rust, застосовуючи політику та посилання MDC.
18
+ lint запускає оркестрацію перевірки Rust, виконуючи `rustfmt` та `clippy` через `cargo`.
19
+
20
+ ## Публічний API
21
+
22
+ run — точка входу для виконання правила, що перевіряє логіку, пов'язану з JS-зацікавленостями, політикою та посиланнями MDC.
23
+ lint — точка входу для запуску лінтера Rust-коду.
24
+
25
+ ## Гарантії поведінки
26
+
27
+ - Read-only: не виконує операцій запису (ФС/БД).
@@ -3,9 +3,21 @@ import { spawnSync } from 'node:child_process'
3
3
  import { existsSync } from 'node:fs'
4
4
  import { join } from 'node:path'
5
5
 
6
- import { createCheckReporter } from '../../../scripts/lib/check-reporter.mjs'
7
- import { runStandardLint } from '../../../scripts/lib/run-standard-lint.mjs'
8
- import { resolveCmd } from '../../../scripts/utils/resolve-cmd.mjs'
6
+ import { createCheckReporter } from '../../scripts/lib/check-reporter.mjs'
7
+ import { runStandardLint } from '../../scripts/lib/run-standard-lint.mjs'
8
+ import { resolveCmd } from '../../scripts/utils/resolve-cmd.mjs'
9
+ import { isRunAsCli, runRuleCli } from '../../scripts/lib/run-rule-cli.mjs'
10
+ import { runStandardRule } from '../../scripts/lib/run-standard-rule.mjs'
11
+
12
+ /**
13
+ * Єдиний entrypoint правила (ADR 2026-06-21). `run()` — check-поверхня (applies → JS-concerns
14
+ * → policy → mdc-refs); `lint()` нижче — lint-поверхня (cargo fmt/clippy), імпл інлайн тут.
15
+ * @param {import('../../scripts/lib/run-standard-rule.mjs').RuleContext} [ctx] контекст прогону
16
+ * @returns {Promise<number>} 0 — OK, 1 — порушення
17
+ */
18
+ export function run(ctx) {
19
+ return runStandardRule(import.meta.dirname, ctx)
20
+ }
9
21
 
10
22
  /**
11
23
  * Запускає cargo-крок і репортить результат.
@@ -77,3 +89,8 @@ function runRustLint(cwd = process.cwd(), opts = {}) {
77
89
  export function lint(_files, cwd = process.cwd(), opts = {}) {
78
90
  return runStandardLint(import.meta.dirname, () => runRustLint(cwd, opts))
79
91
  }
92
+
93
+ if (isRunAsCli(import.meta.url)) {
94
+ // Standalone: bun rules/rust/main.mjs — повний еквівалент `npx @nitra/cursor check rust`.
95
+ process.exitCode = await runRuleCli(import.meta.dirname)
96
+ }
@@ -9,3 +9,4 @@ resource: npm/rules/security/
9
9
  | Файл | Тип |
10
10
  |---|---|
11
11
  | [fix.mjs](fix.md) | JS Module |
12
+ | [main.mjs](main.md) | JS Module |
@@ -0,0 +1,28 @@
1
+ ---
2
+ type: JS Module
3
+ title: main.mjs
4
+ resource: npm/rules/security/main.mjs
5
+ docgen:
6
+ crc: a0730dcb
7
+ model: omlx/gemma-4-e4b-it-OptiQ-4bit
8
+ score: 100
9
+ ---
10
+
11
+ ## Огляд
12
+
13
+ Модуль виконує перевірку якості коду та безпеки репозиторію, спираючись на конфігурації, визначені у meta.json. Функція `run` застосовує політики та посилання на MDC для виконання перевірки. Функція `lint` сканує файлову систему репозиторію на наявність секретів. Обидві функції мають публічний статус, а кешування відбувається у межах одного прогону.
14
+
15
+ ## Поведінка
16
+
17
+ run виконує перевірку, застосовуючи політики та посилання на MDC.
18
+ lint сканує файлову систему репозиторію на наявність секретів за допомогою trufflehog.
19
+
20
+ ## Публічний API
21
+
22
+ run — Основна точка входу правила, що виконує перевірку: застосовує логіку, перевіряє аспекти JavaScript, застосовує політику та перевіряє посилання на MDC.
23
+ lint — Сканує весь репозиторій на наявність секретів за допомогою trufflehog.
24
+
25
+ ## Гарантії поведінки
26
+
27
+ - Read-only: не виконує операцій запису (ФС/БД).
28
+ - Кешує результати в межах одного прогону.
@@ -0,0 +1,45 @@
1
+ import { spawnSync } from 'node:child_process'
2
+
3
+ import { isRunAsCli, runRuleCli } from '../../scripts/lib/run-rule-cli.mjs'
4
+ import { runStandardRule } from '../../scripts/lib/run-standard-rule.mjs'
5
+
6
+ /**
7
+ * Єдиний entrypoint правила (ADR 2026-06-21). `run()` — check-поверхня: applies →
8
+ * JS-concerns → policy → mdc-refs (через runStandardRule).
9
+ * Library mode: викликається CLI orchestration через `import + run(ctx)`.
10
+ * @param {import('../../scripts/lib/run-standard-rule.mjs').RuleContext} [ctx] контекст прогону (walkCache тощо)
11
+ * @returns {Promise<number>} 0 — OK, 1 — порушення
12
+ */
13
+ export function run(ctx) {
14
+ return runStandardRule(import.meta.dirname, ctx)
15
+ }
16
+
17
+ /**
18
+ * `lint()` — lint-поверхня security: trufflehog filesystem скан усього репо (per-file немає).
19
+ * Викликається lint-оркестратором за `meta.json#lint`.
20
+ * @param {string[] | undefined} _files ігнорується (whole-repo скан)
21
+ * @param {string} [cwd] корінь
22
+ * @returns {Promise<number>} exit code (0 — секретів не знайдено)
23
+ */
24
+ export function lint(_files, cwd = process.cwd()) {
25
+ const r = spawnSync(
26
+ 'trufflehog',
27
+ [
28
+ 'filesystem',
29
+ '.',
30
+ '--no-update',
31
+ '--exclude-paths',
32
+ '.trufflehog-exclude',
33
+ '--results=verified,unknown',
34
+ '--fail'
35
+ ],
36
+ { cwd, stdio: 'inherit' }
37
+ )
38
+ return Promise.resolve(typeof r.status === 'number' ? r.status : 1)
39
+ }
40
+
41
+ if (isRunAsCli(import.meta.url)) {
42
+ // Standalone: bun rules/<id>/main.mjs — повний еквівалент `npx @nitra/cursor check <id>`
43
+ // (config-loading + whitelist + summary): library-роль (run) + standalone-роль (CLI-блок).
44
+ process.exitCode = await runRuleCli(import.meta.dirname)
45
+ }
@@ -9,3 +9,4 @@ resource: npm/rules/style-lint/
9
9
  | Файл | Тип |
10
10
  |---|---|
11
11
  | [fix.mjs](fix.md) | JS Module |
12
+ | [main.mjs](main.md) | JS Module |
@@ -0,0 +1,29 @@
1
+ ---
2
+ type: JS Module
3
+ title: main.mjs
4
+ resource: npm/rules/style-lint/main.mjs
5
+ docgen:
6
+ crc: d4951ce5
7
+ model: omlx/gemma-4-e4b-it-OptiQ-4bit
8
+ score: 100
9
+ ---
10
+
11
+ ## Огляд
12
+
13
+ Модуль реалізує логіку для виконання правил, фільтрації файлів за розширеннями та запуску стильового лінтера. Функція `run` виконує визначені правила. `filterStyleFiles` обробляє файли, вибираючи їх на основі розширень. `lint` запускає перевірку стилю.
14
+
15
+ ## Поведінка
16
+
17
+ run виконує стандартну перевірку для правила.
18
+ filterStyleFiles відбирає з наданого списку лише файли з розширеннями css, scss або vue.
19
+ lint запускає stylelint для перевірки стильових файлів або всього проєкту.
20
+
21
+ ## Публічний API
22
+
23
+ run — головна точка входу для виконання правил, що включає перевірку логіки застосування (JS-занепокложення → політика → посилання MDC) та перевірку стилів (stylelint для CSS/SCSS/Vue).
24
+ filterStyleFiles — відбирає файли, що містять стилі для подальшої обробки.
25
+ lint — виконує стилістичну перевірку (stylelint) для окремих файлів або всього проєкту.
26
+
27
+ ## Гарантії поведінки
28
+
29
+ - Read-only: не виконує операцій запису (ФС/БД).
@@ -1,8 +1,20 @@
1
- /** @see ./docs/lint.md */
2
1
  import { spawnSync } from 'node:child_process'
3
2
 
3
+ import { isRunAsCli, runRuleCli } from '../../scripts/lib/run-rule-cli.mjs'
4
+ import { runStandardRule } from '../../scripts/lib/run-standard-rule.mjs'
5
+
4
6
  const STYLE_EXT_RE = /\.(?:css|scss|vue)$/u
5
7
 
8
+ /**
9
+ * Єдиний entrypoint правила (ADR 2026-06-21). `run()` — check-поверхня (applies → JS-concerns
10
+ * → policy → mdc-refs); `lint()` — lint-поверхня (stylelint по css/scss/vue), імпл інлайн тут.
11
+ * @param {import('../../scripts/lib/run-standard-rule.mjs').RuleContext} [ctx] контекст прогону
12
+ * @returns {Promise<number>} 0 — OK, 1 — порушення
13
+ */
14
+ export function run(ctx) {
15
+ return runStandardRule(import.meta.dirname, ctx)
16
+ }
17
+
6
18
  /**
7
19
  * @param {string[]} files список шляхів
8
20
  * @returns {string[]} лише css/scss/vue
@@ -12,6 +24,7 @@ export function filterStyleFiles(files) {
12
24
  }
13
25
 
14
26
  /**
27
+ * lint-поверхня: stylelint (per-file для css/scss/vue або весь проєкт у `--full`).
15
28
  * @param {string[] | undefined} files per-file: ці файли; undefined: весь проєкт (--full)
16
29
  * @param {string} [cwd] корінь
17
30
  * @param {{ readOnly?: boolean }} [opts] readOnly → без `--fix` (детект, нуль мутацій)
@@ -29,3 +42,8 @@ export function lint(files, cwd = process.cwd(), opts = {}) {
29
42
  const r = spawnSync('npx', args, { cwd, stdio: 'inherit' })
30
43
  return Promise.resolve(typeof r.status === 'number' ? r.status : 1)
31
44
  }
45
+
46
+ if (isRunAsCli(import.meta.url)) {
47
+ // Standalone: bun rules/<id>/main.mjs — повний еквівалент `npx @nitra/cursor check <id>`.
48
+ process.exitCode = await runRuleCli(import.meta.dirname)
49
+ }
@@ -9,3 +9,4 @@ resource: npm/rules/tauri/
9
9
  | Файл | Тип |
10
10
  |---|---|
11
11
  | [fix.mjs](fix.md) | JS Module |
12
+ | [main.mjs](main.md) | JS Module |
@@ -0,0 +1,29 @@
1
+ ---
2
+ type: JS Module
3
+ title: main.mjs
4
+ resource: npm/rules/tauri/main.mjs
5
+ docgen:
6
+ crc: 762b6875
7
+ model: omlx/gemma-4-e4b-it-OptiQ-4bit
8
+ score: 100
9
+ ---
10
+
11
+ ## Огляд
12
+
13
+ Модуль обробляє JS-запити та взаємодіє з MDC для отримання даних. При запуску через публічну функцію `run` він оркеструє застосування правил, завантажуючи конфігурації з meta.json, застосовуючи білий список та надаючи підсумок. Модуль є read-only і не здійснює записів у ФС/БД.
14
+
15
+ ## Поведінка
16
+
17
+ 1. Викликається функція `run` для виконання перевірки.
18
+ 2. Виконання перевірки включає застосування політики, обробку JS-запитань та посилання на MDC.
19
+ 3. Якщо код виконується як окрема утиліта (CLI), запускається оркестрація правила.
20
+ 4. Оркестрація правила виконує завантаження конфігурацій (наприклад, `meta.json`), застосовує білий список та надає підсумок.
21
+
22
+ ## Публічний API
23
+
24
+ run — виконує основну логіку правила: застосовує вимоги до JavaScript, перевіряє політику та посилання на MDC.
25
+
26
+ ## Гарантії поведінки
27
+
28
+ - Read-only: не виконує операцій запису (ФС/БД).
29
+ - Кешує результати в межах одного прогону.
@@ -0,0 +1,20 @@
1
+ import { isRunAsCli, runRuleCli } from '../../scripts/lib/run-rule-cli.mjs'
2
+ import { runStandardRule } from '../../scripts/lib/run-standard-rule.mjs'
3
+
4
+ /**
5
+ * Єдиний entrypoint правила (ADR 2026-06-21). `run()` — check-поверхня: applies →
6
+ * JS-concerns → policy → mdc-refs (через runStandardRule). Lint-поверхні правило не має
7
+ * (`meta.json` без `lint`), тож експорту `lint` тут немає.
8
+ * Library mode: викликається CLI orchestration через `import + run(ctx)`.
9
+ * @param {import('../../scripts/lib/run-standard-rule.mjs').RuleContext} [ctx] контекст прогону (walkCache тощо)
10
+ * @returns {Promise<number>} 0 — OK, 1 — порушення
11
+ */
12
+ export function run(ctx) {
13
+ return runStandardRule(import.meta.dirname, ctx)
14
+ }
15
+
16
+ if (isRunAsCli(import.meta.url)) {
17
+ // Standalone: bun rules/<id>/main.mjs — повний еквівалент `npx @nitra/cursor check <id>`
18
+ // (config-loading + whitelist + summary): library-роль (run) + standalone-роль (CLI-блок).
19
+ process.exitCode = await runRuleCli(import.meta.dirname)
20
+ }
@@ -9,3 +9,4 @@ resource: npm/rules/test/
9
9
  | Файл | Тип |
10
10
  |---|---|
11
11
  | [fix.mjs](fix.md) | JS Module |
12
+ | [main.mjs](main.md) | JS Module |
@@ -0,0 +1,30 @@
1
+ ---
2
+ type: JS Module
3
+ title: main.mjs
4
+ resource: npm/rules/test/main.mjs
5
+ docgen:
6
+ crc: 762b6875
7
+ model: omlx/gemma-4-e4b-it-OptiQ-4bit
8
+ score: 100
9
+ ---
10
+
11
+ ## Огляд
12
+
13
+ Модуль виконує перевірку, обробляючи JS-запитання, політику та посилання на mdc. При запуску як окрема програма, він зчитує конфігурації з meta.json, застосовує білий список та підсумовує результати після застосування білого списку, визначаючи код виходу процесу. Функція run ініціює цей процес. Модуль є read-only і не пише у ФС/БД. Кешування відбувається у межах прогону.
14
+
15
+ ## Поведінка
16
+
17
+ 1. Викликається функція `run` для виконання перевірки.
18
+ 2. Виконання `run` застосовує логіку правила, включаючи обробку JS-запитань, політику та посилання на mdc.
19
+ 3. Якщо скрипт виконується як окрема програма (CLI), запускається оркестрація правила.
20
+ 4. Оркестрація правила зчитує конфігурації, включаючи `meta.json`, застосовує білий список та підсумовує результати.
21
+ 5. Результат оркестрації визначає код виходу процесу.
22
+
23
+ ## Публічний API
24
+
25
+ run — виконує основну логіку правила: застосовує перевірки, обробляє JS-залежності та політики, а також посилається на метадані.
26
+
27
+ ## Гарантії поведінки
28
+
29
+ - Read-only: не виконує операцій запису (ФС/БД).
30
+ - Кешує результати в межах одного прогону.
@@ -0,0 +1,20 @@
1
+ import { isRunAsCli, runRuleCli } from '../../scripts/lib/run-rule-cli.mjs'
2
+ import { runStandardRule } from '../../scripts/lib/run-standard-rule.mjs'
3
+
4
+ /**
5
+ * Єдиний entrypoint правила (ADR 2026-06-21). `run()` — check-поверхня: applies →
6
+ * JS-concerns → policy → mdc-refs (через runStandardRule). Lint-поверхні правило не має
7
+ * (`meta.json` без `lint`), тож експорту `lint` тут немає.
8
+ * Library mode: викликається CLI orchestration через `import + run(ctx)`.
9
+ * @param {import('../../scripts/lib/run-standard-rule.mjs').RuleContext} [ctx] контекст прогону (walkCache тощо)
10
+ * @returns {Promise<number>} 0 — OK, 1 — порушення
11
+ */
12
+ export function run(ctx) {
13
+ return runStandardRule(import.meta.dirname, ctx)
14
+ }
15
+
16
+ if (isRunAsCli(import.meta.url)) {
17
+ // Standalone: bun rules/<id>/main.mjs — повний еквівалент `npx @nitra/cursor check <id>`
18
+ // (config-loading + whitelist + summary): library-роль (run) + standalone-роль (CLI-блок).
19
+ process.exitCode = await runRuleCli(import.meta.dirname)
20
+ }
@@ -9,3 +9,4 @@ resource: npm/rules/text/
9
9
  | Файл | Тип |
10
10
  |---|---|
11
11
  | [fix.mjs](fix.md) | JS Module |
12
+ | [main.mjs](main.md) | JS Module |
@@ -0,0 +1,29 @@
1
+ ---
2
+ type: JS Module
3
+ title: main.mjs
4
+ resource: npm/rules/text/main.mjs
5
+ docgen:
6
+ crc: deba6201
7
+ model: omlx/gemma-4-e4b-it-OptiQ-4bit
8
+ score: 90
9
+ ---
10
+
11
+ ## Огляд
12
+
13
+ CLI-обгортка над канонічним `lint-text` (text.mdc) забезпечує послідовний пайплайн перевірок для текстових файлів. Вона автоматично встановлює необхідні інструменти (`shellcheck`, `dotenv-linter`) через `ensureTool` (brew/scoop/GitHub Release per-platform) та перевіряє наявність `patch` для авто-фіксу. Пайплайн послідовно виконує: перевірку правопису (`cspell` з `@nitra/cspell-dict`), синтаксичну перевірку скриптів (`shellcheck` з авто-фіксом), перевірку конфігураційних файлів (`dotenv-linter` з авто-фіксом), форматування Markdown (`markdownlint-cli2` з авто-фіксом) та валідацію схем (`v8r`). Перший ненульовий код, отриманий у ланцюжку, повертається як код виходу, припиняючи подальші кроки. Функціональність експортується як `runLintTextCli` та викликається через `n-cursor lint text` (оркестраторний адаптер `lint`). Конфігурації, на які спирається код: meta.json.
14
+
15
+ ## Поведінка
16
+
17
+ run: Викликається як check-поверхня, виконуючи стандартне правило.
18
+ runLintTextCli: Виконує повний ланцюжок перевірок для тексту: `cspell`, `shellcheck`, `dotenv-linter`, `markdownlint-cli2` та валідацію схем через `v8r`. Автоматично встановлює `shellcheck` та `dotenv-linter` при першому прогоні. Повертає код першого кроку, що не пройшов.
19
+ lint: Делегує виконання повного ланцюжка перевірок тексту через `runLintTextCli`, дозволяючи вказати режим лише детектування без авто-фіксу.
20
+
21
+ ## Публічний API
22
+
23
+ run — Точка входу правила, що виконує перевірку логіки (JS-занепокложення → політика → посилання text.mdc).
24
+ runLintTextCli — Публічна команда для CLI, яка серіалізує завдання лінтування з блокуванням та усуває дублікати на основі стану репозиторію.
25
+ lint — Адаптер, що керує запуском лінтування тексту через `n-cursor lint text`, делегуючи роботу `runLintTextCli`.
26
+
27
+ ## Гарантії поведінки
28
+
29
+ - Read-only: не виконує операцій запису (ФС/БД).
@@ -0,0 +1,30 @@
1
+ ---
2
+ type: JS Module
3
+ title: cspell-fix.mjs
4
+ resource: npm/rules/text/js/cspell-fix.mjs
5
+ docgen:
6
+ crc: 7b40e8f9
7
+ model: omlx/gemma-4-e4b-it-OptiQ-4bit
8
+ score: 100
9
+ ---
10
+
11
+ ## Огляд
12
+
13
+ Виявляє невідомі слова у тексті у ланцюжку lint-text із omlx-класифікацією (спека docs/specs/2026-06-15-opportunistic-llm-fix-tier.md), використовуючи конфігурації .cspell.json та meta.json. Класифікує знахідки за схемою omlx-класифікація, дописуючи валідні терміни до словника .cspell.json. Ймовірні одруки залишаються списком на рев'ю, оскільки fix-режим не переписує файли. Завершує процес повторною перевіркою, щоб визначити, чи залишилися нерозкласифіковані або ймовірні одруки. Перехоплює помилки (fail-safe), не кидаючи винятків назовні.
14
+
15
+ ## Поведінка
16
+
17
+ unknownWords витягує унікальні невідомі слова з виводу cspell.
18
+ appendWordsToDict додає класифіковані валідні слова до файлу .cspell.json, оновлюючи його словник.
19
+ runCspellText запускає cspell для виявлення невідомих слів, а при увімкненні omlx-класифікації класифікує їх та дописує валідні слова у словник, після чого повторно перевіряє наявність помилок.
20
+
21
+ ## Публічний API
22
+
23
+ unknownWords — Збирає унікальні слова, які не були знайдені у словнику cspell.
24
+ appendWordsToDict — Додає зібрані слова до файлу `.cspell.json#words` у відсортованому та унікальному вигляді для перегляду у Git.
25
+ runCspellText — Виконує перевірку тексту за допомогою cspell, класифікуючи слова та оновлюючи словник за новою схемою.
26
+
27
+ ## Гарантії поведінки
28
+
29
+ - Перехоплює помилки і не пропускає винятків назовні (fail-safe).
30
+ - За певних помилок повертає порожнє значення (напр. `null`) замість винятку.
@@ -3,61 +3,28 @@ type: JS Module
3
3
  title: formatting.mjs
4
4
  resource: npm/rules/text/js/formatting.mjs
5
5
  docgen:
6
- crc: 67b016e2
6
+ crc: 34048813
7
+ model: omlx/gemma-4-e4b-it-OptiQ-4bit
7
8
  score: 100
8
9
  ---
9
10
 
10
- Перевіряє наявність файлів з конфігурацій. Код використовує дані з конфігів з extensions.json, settings.json, target.json, .oxfmtrc.json, .cspell.json та package.json для виконання операцій.
11
+ Модуль перевіряє відповідність конфігураційних файлів та скриптів встановленим вимогам. Він перевіряє наявність конфігураційних файлів, на які спираються `package.json`, `extensions.json`, `target.json`, `.oxfmtrc.json` та `.cspell.json`. Модуль використовує функцію `check` для валідації налаштувань.
11
12
 
12
13
  ## Поведінка
13
14
 
14
- 1. Перевірити наявність файлів з конфігурацій
15
- 2. Перевірити наявність файлів з конфігурацій
16
- 3. Перевірити наявність файлів з конфігурацій
17
- 4. Перевірити наявність файлів з конфігурацій
18
- 5. Перевірити наявність файлів з конфігурацій
19
- 6. Перевірити наявність файлів з конфігурацій
20
- 7. Перевірити наявність файлів з конфігурацій
21
- 8. Перевірити наявність файлів з конфігурацій
22
- 9. Перевірити наявність файлів з конфігурацій
23
- 10. Перевірити наявність файлів з конфігурацій
24
- 11. Перевірити наявність файлів з конфігурацій
25
- 12. Перевірити наявність файлів з конфігурацій
26
- 13. Перевірити наявність файлів з конфігурацій
27
- 14. Перевірити наявність файлів з конфігурацій
28
- 15. Перевірити наявність файлів з конфігурацій
29
- 16. Перевірити наявність файлів з конфігурацій
30
- 17. Перевірити наявність файлів з конфігурацій
31
- 18. Перевірити наявність файлів з конфігурацій
32
- 19. Перевірити наявність файлів з конфігурацій
33
- 20. Перевірити наявність файлів з конфігурації
34
- 21. Перевірити наявність файлів з конфігурації
35
- 22. Перевірити наявність файлів з конфігурації
36
- 23. Перевірити наявність файлів з конфігурації
37
- 24. Перевірити наявність файлів з конфігурації
38
- 25. Перевірити наявність файлів з конфігурації
39
- 26. Перевірити наявність файлів з конфігурації
40
- 27. Перевірити наявність файлів з конфігурації
41
- 28. Перевірити наявність файлів з конфігурації
42
- 29. Перевірити наявність файлів з конфігурації
43
- 30. Перевірити наявність файлів з конфігурації
44
- 31. Перевірити наявність файлів з конфігурації
45
- 32. Перевірити наявність файлів з конфігурації
46
- 33. Перевірити наявність файлів з конфігурації
47
- 34. Перевірити наявність файлів з конфігурації
48
- 35. Перевірити наявність файлів з конфігурації
49
- 36. Перевірити наявність файлів з конфігурації
50
- 37. Перевірити наявність файлів з конфігурації
51
- 38. Перевірити наявність файлів з конфігурації
52
- 39. Перевірити наявність файлів з конфігурації
53
- 40. Перевірити наявність файлів з конфігурації
15
+ 1. Викликається функція check.
16
+ 2. Ініціалізується механізм збору результатів перевірки.
17
+ 3. Виконується перевірка файлу .v8rignore на відповідність вимогам.
18
+ 4. Виконується перевірка наявності текстових конфігураційних файлів: .oxfmtrc.json, .cspell.json, .markdownlint-cli2.jsonc, .vscode/extensions.json, .vscode/settings.json.
19
+ 5. Перевіряється абзац про український апостроф у файлах n-text.mdc або npm/mdc/text.mdc, якщо вони існують.
20
+ 6. Виконується перевірка CI-workflow у файлі .github/workflows/lint-text.yml на наявність кроку `n-cursor lint text --read-only`.
21
+ 7. Повертається код виходу, що відображає загальний статус перевірки.
54
22
 
55
23
  ## Публічний API
56
24
 
57
- check — перевіряє відповідність проєкту правилам text.mdc (text.mdc).
25
+ check — порівнює структуру проєкту з вимогами text.mdc.
58
26
 
59
27
  ## Гарантії поведінки
60
28
 
61
- - Read-only: файл не виконує операцій запису у файлову систему.
29
+ - Read-only: не виконує операцій запису (ФС/БД).
62
30
  - Свідомо пропускає шляхи: `.github`, `.git`.
63
- - Не звертається до мережі.
@@ -8,6 +8,10 @@ resource: npm/rules/text/js/
8
8
 
9
9
  | Файл | Тип |
10
10
  |---|---|
11
+ | [cspell-fix.mjs](cspell-fix.md) | JS Module |
11
12
  | [forbidden-prettier.mjs](forbidden-prettier.md) | JS Module |
12
13
  | [formatting.mjs](formatting.md) | JS Module |
13
14
  | [lint.mjs](lint.md) | JS Module |
15
+ | [run-dotenv-linter.mjs](run-dotenv-linter.md) | JS Module |
16
+ | [run-shellcheck.mjs](run-shellcheck.md) | JS Module |
17
+ | [run-v8r.mjs](run-v8r.md) | JS Module |
@@ -0,0 +1,31 @@
1
+ ---
2
+ type: JS Module
3
+ title: run-dotenv-linter.mjs
4
+ resource: npm/rules/text/js/run-dotenv-linter.mjs
5
+ docgen:
6
+ crc: 4719ac66
7
+ model: omlx/gemma-4-e4b-it-OptiQ-4bit
8
+ score: 100
9
+ ---
10
+
11
+ ## Огляд
12
+
13
+ Модуль запускає `dotenv-linter` для валідації конфігураційних файлів `.env*` відповідно до стандартів (наприклад, `LowercaseKey`). Процес включає два етапи: спочатку автоматичне виправлення порушень за допомогою `dotenv-linter fix`, а потім фінальну перевірку за допомогою `dotenv-linter check`. Інструмент очікується у системному PATH і не включається у залежності проєкту. Він рекурсивно шукає файли, виключаючи `node_modules` та `.envrc`. Якщо `dotenv-linter` відсутній, виводиться інструкція щодо його встановлення (наприклад, `brew install dotenv-linter`) та повертається код помилки. Усі деталі роботи можна знайти за посиланням https://git.io/JLbXn.
14
+
15
+ ## Поведінка
16
+
17
+ 1. `runDotenvLinter` перевіряє наявність інструменту `dotenv-linter` у системному шляху. Якщо інструмент відсутній, виводиться підказка для його встановлення (наприклад, `brew install dotenv-linter` для macOS або завантаження за адресою https://git.io/JLbXn для Linux) та повертається код виходу 1.
18
+ 2. Якщо інструмент знайдено, будується список виключених шляхів для сканування, включаючи `node_modules` та `.envrc`.
19
+ 3. Якщо режим роботи не є лише перевіркою (readOnly дорівнює `false`), виконується перший запуск `dotenv-linter` з опцією авто-фіксу. Цей запуск застосовує всі можливі виправлення до `.env*`-файлів, ігноруючи `.bak`-файли.
20
+ 4. Після застосування авто-фіксу, виконується фінальний запуск `dotenv-linter` з опцією перевірки.
21
+ 5. Якщо фінальна перевірка повертає ненульовий код виходу, це означає, що залишилися порушення, і повертається код виходу 1.
22
+ 6. Якщо фінальна перевірка повертає код виходу 0, операція успішна, і повертається код виходу 0.
23
+
24
+ ## Публічний API
25
+
26
+ runDotenvLinter — запускає dotenv-linter з автоматичним виправленням та фінальною перевіркою конфігураційних файлів.
27
+
28
+ ## Гарантії поведінки
29
+
30
+ - Read-only: не виконує операцій запису (ФС/БД).
31
+ - Свідомо пропускає шляхи: `node_modules`.
@@ -0,0 +1,28 @@
1
+ ---
2
+ type: JS Module
3
+ title: run-shellcheck.mjs
4
+ resource: npm/rules/text/js/run-shellcheck.mjs
5
+ docgen:
6
+ crc: 6b2daaa8
7
+ model: omlx/gemma-4-e4b-it-OptiQ-4bit
8
+ score: 100
9
+ ---
10
+
11
+ ## Огляд
12
+
13
+ Скрипт забезпечує відповідність shell-скриптів стандартам, виконуючи дві послідовні дії: спочатку застосовує автоматичні виправлення для проблем, виявлених `shellcheck` за допомогою формату виводу `diff` та команди `patch -p1` у корені проєкту; потім проводить фінальну перевірку всіх зібраних файлів. Скрипт збирає всі відстежувані shell-скрипти у робочому дереві, ігноруючи директорії `node_modules`. Якщо скриптів не знайдено, процес завершується з кодом 0. Якщо `shellcheck` або `patch` відсутні у PATH, скрипт завершується з кодом 1, надаючи підказки для їх встановлення. Після циклу автовиправлень будь-яке попередження чи помилка від `shellcheck` призводить до ненульового коду виходу.
14
+
15
+ ## Поведінка
16
+
17
+ listShellScriptPaths повертає відсортований масив відносних шляхів до shell-скриптів у проєкті, виключаючи директорії `node_modules`.
18
+ runShellcheckText запускає shellcheck: спочатку намагається автоматично виправити знайдені проблеми за допомогою `diff` та `patch`, а потім виконує фінальну перевірку всіх зібраних файлів.
19
+
20
+ ## Публічний API
21
+
22
+ listShellScriptPaths — надає список шляхів до скриптів оболонки для перевірки.
23
+ runShellcheckText — виконує перевірку коду за допомогою shellcheck з автоматичним виправленням.
24
+
25
+ ## Гарантії поведінки
26
+
27
+ - Read-only: не виконує операцій запису (ФС/БД).
28
+ - Свідомо пропускає шляхи: `node_modules`.
@@ -0,0 +1,29 @@
1
+ ---
2
+ type: JS Module
3
+ title: run-v8r.mjs
4
+ resource: npm/rules/text/js/run-v8r.mjs
5
+ docgen:
6
+ crc: caf707a8
7
+ model: omlx/gemma-4-e4b-it-OptiQ-4bit
8
+ score: 100
9
+ ---
10
+
11
+ ## Огляд
12
+
13
+ Скрипт виконує єдиний виклик `v8r` для перевірки відповідності всіх файлів, які підтримує `v8r` (json, json5, yaml, yml, toml), визначеним контрактам. Це замінює необхідність у кількох окремих викликах `v8r`. Скрипт автоматично використовує каталог схем `@nitra/cursor`, який визначається у `v8r-catalog.json`. Якщо не надано додаткових аргументів, він шукає файли за типовими шаблонами у дереві проєкту. Механізм гарантує, що перевірка всіх розширень відбувається, навіть якщо один із глобів не знаходить файлів, оскільки він обходить проблему падіння `v8r` з кодом 98.
14
+
15
+ ## Поведінка
16
+
17
+ DEFAULT_V8R_GLOBS — надає стандартний список патернів для пошуку файлів JSON, JSON5, YAML, YML та TOML.
18
+ V8R_CATALOG_PATH — визначає абсолютний шлях до каталогу схем `v8r-catalog.json` у корені пакета `@nitra/cursor`.
19
+ runV8rWithGlobs — послідовно запускає перевірку кожного наданого патерну за допомогою `v8r`, використовуючи `v8r-catalog.json` як конфігурацію схем. Повертає код завершення, відображаючи вивід лише при виявленні помилки.
20
+
21
+ ## Публічний API
22
+
23
+ * DEFAULT_V8R_GLOBS — Містить стандартні шаблони для пошуку файлів, які обробляє v8r.
24
+ * V8R_CATALOG_PATH — Вказує на розташування файлу `v8r-catalog.json` у корені пакета.
25
+ * runV8rWithGlobs — Виконує послідовні запуски v8r для файлів, знайдених за шаблонами, повертаючи код завершення.
26
+
27
+ ## Гарантії поведінки
28
+
29
+ - Read-only: не виконує операцій запису (ФС/БД).