@nitra/cursor 12.9.0 → 12.10.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 (168) hide show
  1. package/.claude-template/settings.template.json +1 -23
  2. package/CHANGELOG.md +6 -0
  3. package/bin/n-cursor.js +8 -43
  4. package/docs/stryker.config.md +0 -2
  5. package/lib/docs/llm.md +16 -21
  6. package/lib/docs/omlx.md +20 -25
  7. package/lib/llm.mjs +25 -7
  8. package/lib/omlx.mjs +10 -3
  9. package/package.json +1 -1
  10. package/rules/abie/docs/main.md +0 -2
  11. package/rules/abie/lib/docs/http-route.md +0 -2
  12. package/rules/abie/main.mdc +0 -22
  13. package/rules/adr/docs/main.md +0 -2
  14. package/rules/adr/main.mdc +0 -9
  15. package/rules/bun/docs/main.md +0 -2
  16. package/rules/bun/main.mdc +1 -15
  17. package/rules/capacitor/docs/main.md +0 -2
  18. package/rules/capacitor/main.mdc +0 -6
  19. package/rules/changelog/docs/main.md +0 -2
  20. package/rules/changelog/js/agent-workflow.mdc +1 -1
  21. package/rules/changelog/js/consistency.mjs +3 -3
  22. package/rules/changelog/js/docs/consistency.md +18 -23
  23. package/rules/changelog/main.mdc +0 -5
  24. package/rules/ci4/docs/main.md +0 -2
  25. package/rules/ci4/main.mdc +0 -5
  26. package/rules/doc-files/docs/main.md +0 -2
  27. package/rules/doc-files/js/docs/docgen-crc.md +0 -2
  28. package/rules/doc-files/js/docs/docgen-extract.md +0 -2
  29. package/rules/doc-files/js/docs/docgen-files-batch.md +0 -2
  30. package/rules/doc-files/js/docs/docgen-gen.md +0 -2
  31. package/rules/doc-files/js/docs/docgen-judge-measure.md +0 -2
  32. package/rules/doc-files/js/docs/docgen-judge.md +0 -2
  33. package/rules/doc-files/js/docs/docgen-scan.md +0 -2
  34. package/rules/doc-files/js/docs/run-lint.md +0 -2
  35. package/rules/docker/docs/main.md +0 -2
  36. package/rules/docker/js/docs/lint.md +0 -2
  37. package/rules/docker/lib/docs/docker-hadolint.md +0 -2
  38. package/rules/docker/main.mdc +1 -21
  39. package/rules/efes/docs/main.md +0 -2
  40. package/rules/efes/main.mdc +0 -1
  41. package/rules/feedback/docs/main.md +0 -2
  42. package/rules/ga/docs/main.md +0 -2
  43. package/rules/ga/js/docs/index.md +0 -1
  44. package/rules/ga/main.mdc +1 -31
  45. package/rules/graphql/docs/main.md +0 -2
  46. package/rules/graphql/main.mdc +0 -5
  47. package/rules/hasura/docs/main.md +0 -2
  48. package/rules/hasura/js/docs/index.md +3 -3
  49. package/rules/hasura/js/docs/migrations.md +0 -2
  50. package/rules/hasura/main.mdc +1 -11
  51. package/rules/image-avif/docs/main.md +0 -2
  52. package/rules/image-avif/main.mdc +1 -9
  53. package/rules/image-compress/docs/main.md +0 -2
  54. package/rules/image-compress/js/docs/index.md +0 -1
  55. package/rules/image-compress/main.mdc +1 -9
  56. package/rules/js/docs/main.md +0 -2
  57. package/rules/js/js/dep-policy.mjs +8 -4
  58. package/rules/js/js/docs/check.md +0 -2
  59. package/rules/js/js/docs/dep-policy.md +10 -12
  60. package/rules/js/js/docs/index.md +5 -5
  61. package/rules/js/js/docs/tooling.md +0 -2
  62. package/rules/js/js/docs/utils_imports.md +0 -2
  63. package/rules/js/main.mdc +0 -31
  64. package/rules/js-bun-db/docs/main.md +0 -2
  65. package/rules/js-bun-db/js/docs/safety.md +18 -23
  66. package/rules/js-bun-db/js/safety.mjs +31 -3
  67. package/rules/js-bun-db/lib/bun-sql-scan.mjs +123 -0
  68. package/rules/js-bun-db/lib/docs/bun-sql-scan.md +37 -331
  69. package/rules/js-bun-db/main.mdc +1 -23
  70. package/rules/js-bun-redis/docs/main.md +0 -2
  71. package/rules/js-bun-redis/main.mdc +0 -5
  72. package/rules/js-mssql/docs/main.md +0 -2
  73. package/rules/js-mssql/main.mdc +0 -12
  74. package/rules/js-run/docs/main.md +0 -2
  75. package/rules/js-run/js/docs/runtime.md +15 -13
  76. package/rules/js-run/js/runtime.mjs +48 -4
  77. package/rules/js-run/main.mdc +0 -25
  78. package/rules/k8s/docs/main.md +0 -2
  79. package/rules/k8s/main.mdc +0 -45
  80. package/rules/nginx-default-tpl/docs/main.md +0 -2
  81. package/rules/nginx-default-tpl/main.mdc +0 -13
  82. package/rules/npm-module/docs/main.md +0 -2
  83. package/rules/npm-module/js/docs/header_doc_pointer.md +0 -2
  84. package/rules/npm-module/js/docs/rule_meta.md +0 -2
  85. package/rules/npm-module/js/docs/skill_meta.md +0 -2
  86. package/rules/npm-module/main.mdc +1 -15
  87. package/rules/php/docs/main.md +0 -2
  88. package/rules/php/js/docs/index.md +0 -1
  89. package/rules/php/main.mdc +1 -9
  90. package/rules/python/docs/main.md +0 -2
  91. package/rules/python/js/docs/index.md +0 -1
  92. package/rules/python/main.mdc +1 -13
  93. package/rules/rego/docs/main.md +0 -2
  94. package/rules/rego/js/docs/index.md +2 -2
  95. package/rules/rego/js/docs/tooling.md +0 -2
  96. package/rules/rego/js/tooling.mdc +14 -0
  97. package/rules/rego/main.mdc +0 -9
  98. package/rules/rego/policy/package_json/package_json.mdc +12 -0
  99. package/rules/release/docs/main.md +0 -2
  100. package/rules/release/main.mdc +2 -2
  101. package/rules/rust/docs/main.md +0 -2
  102. package/rules/rust/js/docs/index.md +0 -1
  103. package/rules/rust/main.mdc +1 -11
  104. package/rules/rust/policy/package_json/package_json.mdc +12 -0
  105. package/rules/security/docs/main.md +0 -2
  106. package/rules/security/js/docs/index.md +0 -1
  107. package/rules/security/main.mdc +0 -13
  108. package/rules/style/docs/main.md +0 -2
  109. package/rules/style/js/docs/index.md +2 -2
  110. package/rules/style/js/docs/tooling.md +0 -2
  111. package/rules/style/main.mdc +1 -23
  112. package/rules/tauri/docs/main.md +0 -2
  113. package/rules/tauri/main.mdc +1 -11
  114. package/rules/test/docs/main.md +0 -2
  115. package/rules/test/js/docs/no-console-store-restore.md +0 -2
  116. package/rules/test/js/docs/sandbox-aware-test.md +0 -2
  117. package/rules/test/js/docs/stryker_config.md +0 -2
  118. package/rules/test/js/docs/vitest-config-pool-forks.md +0 -2
  119. package/rules/test/main.mdc +1 -21
  120. package/rules/text/docs/main.md +0 -2
  121. package/rules/text/js/docs/cspell-fix.md +0 -2
  122. package/rules/text/js/docs/run-dotenv-linter.md +0 -2
  123. package/rules/text/js/docs/run-shellcheck.md +0 -2
  124. package/rules/text/js/docs/run-v8r.md +0 -2
  125. package/rules/text/main.mdc +0 -33
  126. package/rules/tool-surface/docs/main.md +0 -2
  127. package/rules/vue/docs/main.md +0 -2
  128. package/rules/vue/main.mdc +0 -22
  129. package/rules/worktree/docs/main.md +0 -2
  130. package/scripts/docs/auto-rules.md +0 -2
  131. package/scripts/docs/auto-skills.md +0 -2
  132. package/scripts/docs/hook.md +13 -12
  133. package/scripts/docs/post-tool-use-check.md +0 -2
  134. package/scripts/docs/sync-claude-config.md +1 -3
  135. package/scripts/docs/sync-setup-bun-deps-action.md +0 -2
  136. package/scripts/hook.mjs +3 -4
  137. package/scripts/lib/docs/check-mdc-template-refs.md +0 -2
  138. package/scripts/lib/docs/index.md +35 -35
  139. package/scripts/lib/docs/inline-template-links.md +6 -8
  140. package/scripts/lib/docs/list-project-rules-mdc.md +0 -2
  141. package/scripts/lib/docs/list-rule-ids.md +0 -2
  142. package/scripts/lib/docs/mirror-parity.md +8 -10
  143. package/scripts/lib/docs/read-n-cursor-config-lite.md +0 -2
  144. package/scripts/lib/docs/rule-meta.md +0 -2
  145. package/scripts/lib/docs/run-lint.md +0 -2
  146. package/scripts/lib/docs/run-rule-cli.md +0 -2
  147. package/scripts/lib/docs/run-rule.md +0 -2
  148. package/scripts/lib/docs/run-standard-lint.md +0 -2
  149. package/scripts/lib/docs/run-standard-rule.md +0 -2
  150. package/scripts/lib/docs/skill-meta.md +0 -2
  151. package/scripts/lib/docs/timing-summary.md +0 -2
  152. package/scripts/lib/docs/worktree-notice.md +0 -2
  153. package/scripts/lib/fix/docs/analyze-escalation.md +0 -2
  154. package/scripts/lib/fix/docs/index.md +10 -9
  155. package/scripts/lib/fix/docs/llm-worker.md +18 -8
  156. package/scripts/lib/fix/docs/orchestrator.md +44 -20
  157. package/scripts/lib/fix/docs/run-conformance-check.md +0 -2
  158. package/scripts/lib/fix/docs/t0.md +0 -2
  159. package/scripts/lib/fix/docs/verbose-block.md +27 -0
  160. package/scripts/lib/fix/llm-worker.mjs +75 -22
  161. package/scripts/lib/fix/orchestrator.mjs +13 -3
  162. package/scripts/lib/fix/verbose-block.mjs +82 -0
  163. package/scripts/lib/inline-template-links.mjs +32 -22
  164. package/scripts/lib/mirror-parity.mjs +2 -2
  165. package/scripts/sync-claude-config.mjs +7 -4
  166. package/scripts/utils/docs/resolve-js-root.md +0 -2
  167. package/skills/doc-files/SKILL.md +9 -24
  168. package/skills/llm-patch/SKILL.md +4 -4
@@ -367,7 +367,13 @@ async function checkWorkspacePackage(rootDir, ignorePaths, fail, passFn, cwd) {
367
367
  passFn(`${label}немає Temporal API у Bun runtime-коді`)
368
368
  }
369
369
 
370
- checkOtelConfigmap(rootDir, passFn, cwd)
370
+ checkOtelConfigmap(rootDir, passFn, fail, cwd)
371
+
372
+ const connAliasViolations = checkConnAliasDeclaration(absPackageRoot, sourcePaths, pkgJson, label, fail)
373
+ if (connAliasViolations === 0) {
374
+ const connDir = resolveConnDirFromPackageJson(pkgJson)
375
+ passFn(`${label}package.json.imports["#conn/*"] оголошений (або файлів у '${connDir}/' немає)`)
376
+ }
371
377
  }
372
378
 
373
379
  /**
@@ -409,9 +415,47 @@ async function loadPackageJson(rootDir, cwd) {
409
415
  * @returns {void}
410
416
  * @param {string} cwd корінь репозиторію
411
417
  */
412
- function checkOtelConfigmap(rootDir, passFn, cwd) {
413
- const configmapPath = join(cwd, rootDir, 'k8s', 'base', 'configmap.yaml')
414
- if (!existsSync(configmapPath)) return
418
+ /**
419
+ * Перевіряє наявність `package.json#imports["#conn/*"]` коли у `connDir` є файли.
420
+ * @param {string} absPackageRoot абсолютний корінь пакета
421
+ * @param {string[]} sourcePaths абсолютні шляхи до файлів пакета
422
+ * @param {unknown} pkgJson розпарсений package.json пакета (або null)
423
+ * @param {string} label префікс повідомлення
424
+ * @param {(msg: string) => void} fail callback при помилці
425
+ * @returns {number} 0 — ок, 1 — порушення
426
+ */
427
+ function checkConnAliasDeclaration(absPackageRoot, sourcePaths, pkgJson, label, fail) {
428
+ const connDir = resolveConnDirFromPackageJson(pkgJson)
429
+ const hasConnFiles = sourcePaths.some(absPath => isInsideConnDir(relPosix(absPackageRoot, absPath), connDir))
430
+ if (!hasConnFiles) return 0
431
+
432
+ const imports =
433
+ pkgJson && typeof pkgJson === 'object' && !Array.isArray(pkgJson)
434
+ ? /** @type {Record<string, unknown>} */ (pkgJson).imports
435
+ : null
436
+ if (imports && typeof imports === 'object' && !Array.isArray(imports) && imports['#conn/*']) return 0
437
+
438
+ fail(
439
+ `${label}є файли у '${connDir}/', але в package.json відсутній аліас "#conn/*" — ` +
440
+ `додай "imports": { "#conn/*": "./${connDir}/*" } (js-run.mdc conn-aliases)`
441
+ )
442
+ return 1
443
+ }
444
+
445
+ function checkOtelConfigmap(rootDir, passFn, failFn, cwd) {
446
+ const k8sDir = join(cwd, rootDir, 'k8s')
447
+ if (!existsSync(k8sDir)) {
448
+ passFn(`${rootDir}: немає каталогу k8s/ — перевірку OTEL configmap пропущено`)
449
+ return
450
+ }
451
+ const configmapPath = join(k8sDir, 'base', 'configmap.yaml')
452
+ if (!existsSync(configmapPath)) {
453
+ failFn(
454
+ `${rootDir}/k8s/base/configmap.yaml відсутній — додай з полем OTEL_RESOURCE_ATTRIBUTES ` +
455
+ `(service.name=, service.namespace=), js-run.mdc`
456
+ )
457
+ return
458
+ }
415
459
  passFn(`${rootDir}/k8s/base/configmap.yaml є (OTEL — npx @nitra/cursor fix → js_run.configmap)`)
416
460
  }
417
461
 
@@ -7,32 +7,7 @@ version: '1.12'
7
7
 
8
8
  Правило охоплює backend Node.js workspace-пакети (jobs, GraphQL/HTTP-сервери, CLI) — визначення меж застосування, вимоги до runtime, структуру проекту, конфігурацію, логування, підключення до БД/GraphQL і безпечне використання env-змінних.
9
9
 
10
- [js-run-scope](./js/scope.mdc)
11
-
12
- [js-run-runtime](./js/runtime.mdc)
13
-
14
- [js-run-temporal](./js/temporal.mdc)
15
-
16
- [js-run-project-structure](./js/project-structure.mdc)
17
-
18
- [js-run-jsconfig](./js/jsconfig.mdc)
19
-
20
- [js-run-pino](./js/pino.mdc)
21
-
22
- [js-run-otel-configmap](./js/otel-configmap.mdc)
23
-
24
- [js-run-conn-aliases](./js/conn-aliases.mdc)
25
-
26
- [js-run-check-env](./js/check-env.mdc)
27
-
28
- [js-run-settimeout](./js/settimeout.mdc)
29
-
30
10
  ## Швидкий gate через conftest
31
11
 
32
12
  Rego-пакети, які запускає `npx @nitra/cursor fix js-run` / `npx @nitra/cursor check`:
33
13
 
34
- [js-run-package_json](./policy/package_json/package_json.mdc)
35
-
36
- [js-run-jsconfig](./policy/jsconfig/jsconfig.mdc)
37
-
38
- [js-run-configmap](./policy/configmap/configmap.mdc)
@@ -8,8 +8,6 @@ docgen:
8
8
  score: 85
9
9
  ---
10
10
 
11
- ## Огляд
12
-
13
11
  Модуль знаходить унікальні корені каталогів із іменем `k8s` за шляхами файлів `*.yaml` у репозиторії. Якщо таких файлів немає, виконання завершується з кодом 0 без виклику зовнішніх CLI. Для знайдених коренів виконується перевірка YAML-маніфестів. `kubeconform` перевіряє маніфести проти OpenAPI-схем Kubernetes (https://github.com/yannh/kubeconform#readme), використовуючи версію, узгоджену з лінією релізу. `kubescape` сканує маніфести на misconfiguration та відповідність стандартам (NSA, MITRE, CIS), використовуючи конфігураційний файл `.kubescape-exceptions.json`. Орієнтир цільового кластера для `kubescape` визначається за тією ж лінією релізу, що й для `kubeconform`. Обидві утиліти (`kubeconform` та `kubescape`) повинні бути доступні в системному PATH.
14
12
 
15
13
  ## Поведінка
@@ -17,52 +17,7 @@ alwaysApply: false
17
17
 
18
18
  Правило активується автоматично для `**/k8s/**/*.yaml` (через `globs`). Додаткова конфігурація в `.n-cursor.json` не потрібна.
19
19
 
20
- [k8s-schema-modeline](./js/schema_modeline.mdc)
21
-
22
- [k8s-lint-k8s](./js/lint_k8s.mdc)
23
-
24
- [k8s-deployment-resources](./js/deployment_resources.mdc)
25
-
26
- [k8s-hasura-httproute](./js/hasura_httproute.mdc)
27
-
28
- [k8s-service](./js/service.mdc)
29
-
30
- [k8s-configmap](./js/configmap.mdc)
31
-
32
- [k8s-kustomize-structure](./js/kustomize_structure.mdc)
33
-
34
- [k8s-topology-hpa-pdb](./js/topology_hpa_pdb.mdc)
35
-
36
- [k8s-network-policy](./js/network_policy.mdc)
37
-
38
- [k8s-ingress-gateway](./js/ingress_gateway.mdc)
39
-
40
- [k8s-hpa-apiversion](./js/hpa_apiversion.mdc)
41
-
42
- [k8s-multidoc-yaml](./js/multidoc_yaml.mdc)
43
-
44
20
  ## Швидкий gate через conftest (Rego)
45
21
 
46
22
  Підмножину пер-документних правил продубльовано як rego-полісі у **`npm/rules/k8s/policy/`** (запускається через **`bun run lint-rego`** для `*_test.rego` юніт-тестів і через **`npx @nitra/cursor fix k8s`** для прогону по реальних YAML). JS authoritative; rego — швидкий gate для одиничного маніфеста.
47
23
 
48
- [k8s-policy-manifest](./policy/manifest/manifest.mdc)
49
-
50
- [k8s-policy-base-manifest](./policy/base_manifest/base_manifest.mdc)
51
-
52
- [k8s-policy-base-kustomization](./policy/base_kustomization/base_kustomization.mdc)
53
-
54
- [k8s-policy-gateway](./policy/gateway/gateway.mdc)
55
-
56
- [k8s-policy-hasura-configmap](./policy/hasura_configmap/hasura_configmap.mdc)
57
-
58
- [k8s-policy-hasura-httproute](./policy/hasura_httproute/hasura_httproute.mdc)
59
-
60
- [k8s-policy-hpa-pdb](./policy/hpa_pdb/hpa_pdb.mdc)
61
-
62
- [k8s-policy-kustomization](./policy/kustomization/kustomization.mdc)
63
-
64
- [k8s-policy-network-policy](./policy/network_policy/network_policy.mdc)
65
-
66
- [k8s-policy-svc-yaml](./policy/svc_yaml/svc_yaml.mdc)
67
-
68
- [k8s-policy-svc-hl-yaml](./policy/svc_hl_yaml/svc_hl_yaml.mdc)
@@ -8,8 +8,6 @@ docgen:
8
8
  score: 90
9
9
  ---
10
10
 
11
- ## Огляд
12
-
13
11
  Модуль перевіряє задане правило, використовуючи конфігурації, які визначаються у meta.json. При запуску через публічну функцію `run` відбувається оркестрація виконання. Процес включає застосування логіки, що використовує кешування результатів у межах одного прогону. Результат виконання визначає код виходу.
14
12
 
15
13
  ## Поведінка
@@ -7,16 +7,3 @@ alwaysApply: false
7
7
 
8
8
  Правило забезпечує відповідність `default.conf.template` канонічній структурі nginx для фронтенду зі статичними файлами, а також перевіряє пов'язані артефакти: HTTPRoute (k8s), Dockerfile, ini-файли середовищ і VS Code конфігурацію.
9
9
 
10
- [nginx-default-tpl-template-structure](./js/template-structure.mdc)
11
-
12
- [nginx-default-tpl-http-route](./js/http-route.mdc)
13
-
14
- [nginx-default-tpl-dockerfile](./js/dockerfile.mdc)
15
-
16
- [nginx-default-tpl-ini-keys](./js/ini-keys.mdc)
17
-
18
- [nginx-default-tpl-vscode](./js/vscode.mdc)
19
-
20
- [nginx-default-tpl-vscode_extensions](./policy/vscode_extensions/vscode_extensions.mdc)
21
-
22
- [nginx-default-tpl-vscode_settings](./policy/vscode_settings/vscode_settings.mdc)
@@ -8,8 +8,6 @@ docgen:
8
8
  score: 100
9
9
  ---
10
10
 
11
- ## Огляд
12
-
13
11
  Модуль виконує перевірку, застосовуючи політику, обробляючи JS-запити. При запуску як інструмент командного рядка, метод `run` ініціює повний запуск правила. Цей запуск включає завантаження конфігурацій, що спираються на meta.json, застосування білих списків та підбиття підсумків. Модуль є Read-only, тобто не пише у ФС/БД. Кешування даних відбувається в межах одного прогону.
14
12
 
15
13
  ## Поведінка
@@ -8,8 +8,6 @@ docgen:
8
8
  score: 100
9
9
  ---
10
10
 
11
- ## Огляд
12
-
13
11
  Модуль валідує відповідність контракту документації для файлів `.mjs` у сегментах `npm/rules` та `npm/skills`. Він виявляє порушення, якщо для файлу `.mjs` існує відповідний файл `docs/<ім'я>.md`, а його JSDoc-блок містить більше одного непорожнього рядка.
14
12
 
15
13
  ## Поведінка
@@ -8,8 +8,6 @@ docgen:
8
8
  score: 100
9
9
  ---
10
10
 
11
- ## Огляд
12
-
13
11
  Модуль перевіряє конфігурації правил, розташованих у каталозі `npm/rules`. Він гарантує, що кожен підкаталог правила містить необхідні файли, включаючи маркери повідомлень (`scripts.mdc`), та коректно структурований конфігураційний файл, що базується на `main.json` та `meta.json`. Перевірка включає валідацію визначених предикатів та експортованих функцій відповідно до очікуваного контракту.
14
12
 
15
13
  ## Поведінка
@@ -8,8 +8,6 @@ docgen:
8
8
  score: 100
9
9
  ---
10
10
 
11
- ## Огляд
12
-
13
11
  Перевіряє структуру та конфігурацію скілів у каталозі `npm/skills`, використовуючи правила, визначені в `meta.json`. Валідує, що кожен скіл не містить файлу `auto.md`. Перевіряє валідність полів `worktree`, `auto` та `requireRoot` у `main.json` кожного скіла.
14
12
 
15
13
  ## Поведінка
@@ -7,17 +7,9 @@ version: '1.14'
7
7
 
8
8
  Bun monorepo: workspace **`npm/`**, кореневий **`package.json`**, **`.github/workflows/`**; опційно **`demo/`**.
9
9
 
10
- [npm-module-package_structure](./js/package_structure.mdc)
11
-
12
- [npm-module-rule_meta](./js/rule_meta.mdc)
13
-
14
- [npm-module-skill_meta](./js/skill_meta.mdc)
15
-
16
- [npm-module-header_doc_pointer](./js/header_doc_pointer.mdc)
17
-
18
10
  ## Версія та CHANGELOG
19
11
 
20
- Версію (`version` у **`npm/package.json`**) і **`npm/CHANGELOG.md`** **не редагуй вручну** — навіть для hotfix. Єдиний артефакт зміни — **change-файл** (`npx @nitra/cursor change --bump <major|minor|patch> --section <Added|Changed|Fixed|Removed> --message "<…>"`); bump `version` і генерацію секції CHANGELOG робить `n-cursor release` у CI на `main`. Будь-який ручний bump `version` поза CI завалює `check changelog` — навіть із change-файлом.
12
+ Версію (`version` у **`npm/package.json`**) і **`npm/CHANGELOG.md`** **не редагуй вручну** — навіть для hotfix. Єдиний артефакт зміни — **change-файл** (`npx @7n/n ch [--bump <major|minor|patch>] [--section <Added|Changed|Fixed|Removed>] [--message "<…>"]`); bump `version` і генерацію секції CHANGELOG робить `n-cursor release` у CI на `main`. Будь-який ручний bump `version` поза CI завалює `check changelog` — навіть із change-файлом.
21
13
 
22
14
  Повна модель (база порівняння, інверсія шляхів, формат CHANGELOG, post-release-інваріант «верхня секція CHANGELOG == `version`») — у **`n-changelog.mdc`** (джерело істини). Це правило їй підпорядковане й власних інструкцій bump/CHANGELOG не дублює.
23
15
 
@@ -25,10 +17,4 @@ Bun monorepo: workspace **`npm/`**, кореневий **`package.json`**, **`.g
25
17
 
26
18
  Rego-пакети (запускаються через `npx @nitra/cursor fix`):
27
19
 
28
- [npm-module-npm_package_json](./policy/npm_package_json/npm_package_json.mdc)
29
-
30
- [npm-module-root_package_json](./policy/root_package_json/root_package_json.mdc)
31
-
32
- [npm-module-emit_types_config](./policy/emit_types_config/emit_types_config.mdc)
33
-
34
20
  - `npm_module.npm_publish_yml` — template-driven перевірка `.github/workflows/npm-publish.yml` (deep-subset: усі обовʼязкові поля й кроки з канонічного сніпету).
@@ -8,8 +8,6 @@ docgen:
8
8
  score: 100
9
9
  ---
10
10
 
11
- ## Огляд
12
-
13
11
  Скрипт виконує перевірку коду відповідно до правила `php.mdc`. Він запускає `composer audit` для перевірки залежностей, а також, якщо встановлені, виконує PHPStan, Psalm, PHP-CS-Fixer (у режимі dry-run) та PHPCS зі стандартом Security. Робота скрипта ґрунтується на конфігурації, визначеній у `composer.json`. Скрипт пропускає запуск інструменту, якщо відповідний виконуваний файл відсутній у `vendor/bin/`. Якщо `composer.json` відсутній у корені, інструменти не запускаються.
14
12
 
15
13
  ## Поведінка
@@ -8,5 +8,4 @@ resource: npm/rules/php/js/
8
8
 
9
9
  | Файл | Тип |
10
10
  | ------------------------- | --------- |
11
- | [lint.mjs](lint.md) | JS Module |
12
11
  | [tooling.mjs](tooling.md) | JS Module |
@@ -5,12 +5,4 @@ globs: "**/*.php"
5
5
  alwaysApply: false
6
6
  ---
7
7
 
8
- Весь код повинен відповідати PHP 8.5 (PHPCompatibility + Rector). Лінт запускається через `n-cursor lint php`.
9
-
10
- [php-tooling](./js/tooling.mdc)
11
-
12
- [php-lint_php_yml](./js/lint_php_yml.mdc)
13
-
14
- ## Швидкий gate через conftest
15
-
16
- [php-lint_php_yml](./policy/lint_php_yml/lint_php_yml.mdc)
8
+ Весь код повинен відповідати PHP 8.5 (PHPCompatibility + Rector). Лінт запускається через `n-cursor lint php`.
@@ -8,8 +8,6 @@ docgen:
8
8
  score: 90
9
9
  ---
10
10
 
11
- ## Огляд
12
-
13
11
  Реалізує логіку запуску `lint-python` за правилом `python.mdc` на базі [uv](https://docs.astral.sh/uv/). Якщо `pyproject.toml` у корені відсутній, процес завершується з кодом виходу 0. Якщо файл присутній, але інструмент `uv` не знайдено в PATH, це розглядається як помилка. Обов'язкові кроки включають перевірку актуальності lock-файлу (`uv lock --check`) та синхронізацію середовища (`uv sync --frozen`). Опційні лінтери (`ruff`, `mypy`) запускаються лише за умови їх доступності через `uv run`. `ruff` виконується у режимі автоматичного виправлення (`--fix`) для мутації робочого дерева та для форматування. Цей підхід відповідає канону патерну `lint-*` (серіалізація через `runStandardLint`, без прямого `withLock`).
14
12
 
15
13
  ## Поведінка
@@ -9,5 +9,4 @@ resource: npm/rules/python/js/
9
9
  | Файл | Тип |
10
10
  | ------------------------- | --------- |
11
11
  | [applies.mjs](applies.md) | JS Module |
12
- | [lint.mjs](lint.md) | JS Module |
13
12
  | [tooling.mjs](tooling.md) | JS Module |
@@ -5,16 +5,4 @@ alwaysApply: false
5
5
  version: '1.0'
6
6
  ---
7
7
 
8
- Python-проєкти ведуться **виключно** на [uv](https://docs.astral.sh/uv/) — єдиний пакет-менеджер і резолвер. **Poetry заборонено.** Середовище: `uv sync --frozen` (строго з `uv.lock`).
9
-
10
- [python-pyproject_toml](./js/pyproject_toml.mdc)
11
-
12
- [python-lint_python_yml](./js/lint_python_yml.mdc)
13
-
14
- [python-tooling](./js/tooling.mdc)
15
-
16
- ## Швидкий gate через conftest (Rego)
17
-
18
- [python-pyproject_toml-policy](./policy/pyproject_toml/pyproject_toml.mdc)
19
-
20
- [python-lint_python_yml-policy](./policy/lint_python_yml/lint_python_yml.mdc)
8
+ Python-проєкти ведуться **виключно** на [uv](https://docs.astral.sh/uv/) — єдиний пакет-менеджер і резолвер. **Poetry заборонено.** Середовище: `uv sync --frozen` (строго з `uv.lock`).
@@ -8,8 +8,6 @@ docgen:
8
8
  score: 90
9
9
  ---
10
10
 
11
- ## Огляд
12
-
13
11
  Файл реалізує конвеєр для лінтування Rego-полісів, що знаходяться у каталозі `npm/rules/` (де живуть Rego-полісі пакета `@nitra/cursor`). Конвеєр послідовно виконує три етапи перевірки: строгу компіляцію за допомогою `opa check --strict`, яка виявляє помилки компіляції, незадекларовані змінні та інші проблеми, які ігнорує `regal`; статичне лінтування за допомогою `regal lint` (згідно з https://docs.styra.com/regal), що перевіряє відповідність стилю та ідіоматичності Rego v1; та опціональний запуск юніт-тестів за допомогою `conftest verify` (як описано на https://www.conftest.dev/install/). Резолюція інструментів (`opa`, `regal`) здійснюється через механізм `ensureTool`, що забезпечує їх доступність у середовищі. Усі операції керуються конфігурацією, визначеною у `target.json`.
14
12
 
15
13
  ## Поведінка
@@ -6,7 +6,7 @@ resource: npm/rules/rego/js/
6
6
 
7
7
  # npm/rules/rego/js
8
8
 
9
- | Файл | Тип |
10
- |---|---|
9
+ | Файл | Тип |
10
+ | ------------------------- | --------- |
11
11
  | [applies.mjs](applies.md) | JS Module |
12
12
  | [tooling.mjs](tooling.md) | JS Module |
@@ -8,8 +8,6 @@ docgen:
8
8
  score: 100
9
9
  ---
10
10
 
11
- ## Огляд
12
-
13
11
  Перевіряє наявність конфігураційного файлу `.regal/config.yaml` у корені проєкту. Ця функція визначає можливість подальшої ініціалізації системи. У разі відсутності файлу, повертає повідомлення, що вимагає створення конфігураційного файлу (rego.mdc).
14
12
 
15
13
  ## Поведінка
@@ -0,0 +1,14 @@
1
+ ## Rego tooling: `.regal/config.yaml`
2
+
3
+ У корені проєкту **має бути** файл `.regal/config.yaml` — конфіг лінтера [regal](https://docs.styra.com/regal).
4
+
5
+ Мінімальний приклад (вимикає `no-defined-entrypoint` для conftest-полісі):
6
+
7
+ ```yaml title=".regal/config.yaml"
8
+ rules:
9
+ idiomatic:
10
+ no-defined-entrypoint:
11
+ level: ignore
12
+ ```
13
+
14
+ `regal lint` запускається через `n-cursor lint rego`; без `.regal/config.yaml` regal використовує дефолти і може помилково флагувати conftest `deny`-правила як entrypoint-порушення.
@@ -9,8 +9,6 @@ alwaysApply: false
9
9
 
10
10
  Синтаксичні правила (`rego.v1`, `import rego.v1`, заборона legacy v0) — у `conftest.mdc` (alwaysApply). Цей файл — про **інструментарій**: VS Code, лінтери, форматування.
11
11
 
12
- [rego-rego-lint](./js/rego-lint.mdc)
13
-
14
12
  ## Швидкий gate через conftest
15
13
 
16
14
  | Пакет | Ціль | Що перевіряє |
@@ -18,10 +16,3 @@ alwaysApply: false
18
16
  | `rego.vscode_extensions` | `.vscode/extensions.json` | `recommendations` містить `tsandall.opa` |
19
17
  | `rego.vscode_settings` | `.vscode/settings.json` | `[rego]`-блок з `defaultFormatter` + `formatOnSave` |
20
18
 
21
- [rego-vscode_extensions](./js/vscode_extensions.mdc)
22
-
23
- [rego-vscode_settings](./js/vscode_settings.mdc)
24
-
25
- [rego-vscode_extensions](./policy/vscode_extensions/vscode_extensions.mdc)
26
-
27
- [rego-vscode_settings](./policy/vscode_settings/vscode_settings.mdc)
@@ -0,0 +1,12 @@
1
+ ## Rego-gate: `opa` та `regal` заборонені у `package.json`
2
+
3
+ Rego-пакет: `rego.package_json`
4
+
5
+ Цільовий файл: `package.json`
6
+
7
+ `opa` і `regal` — це CLI-тули Rego-екосистеми. Вони **не є npm-пакетами** і **не додаються** у `dependencies`, `devDependencies` або `peerDependencies`. Їх встановлюють:
8
+
9
+ - **локально** — через [Homebrew](https://brew.sh/) / системний пакетний менеджер або вручну в PATH;
10
+ - **у CI** — через крок з GitHub-action або аналог.
11
+
12
+ Gate видає deny, якщо `opa` або `regal` з'являється у будь-якій секції залежностей `package.json`.
@@ -8,8 +8,6 @@ docgen:
8
8
  score: 100
9
9
  ---
10
10
 
11
- ## Огляд
12
-
13
11
  Модуль забезпечує оркестрацію та виконання набору правил. При запуску як CLI ініціює повну оркестрацію правил. Як частина процесу, викликає публічну функцію `run` для виконання стандартного правила у контексті поточної директорії. Результат виконання цього правила визначає код виходу процесу. Модуль не модифікує файлову систему чи бази даних. Результати виконання правил кешуються протягом одного прогону.
14
12
 
15
13
  ## Поведінка
@@ -1,10 +1,10 @@
1
1
  ---
2
- description: n-cursor release та n-cursor change — автоматичний version-bump і CHANGELOG із change-файлів
2
+ description: n-cursor release та @7n/n ch — автоматичний version-bump і CHANGELOG із change-файлів
3
3
  version: '1.0'
4
4
  globs: "**/package.json,**/pyproject.toml,**/CHANGELOG.md,**/.changes/*.md"
5
5
  alwaysApply: false
6
6
  ---
7
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`.
8
+ Версія та CHANGELOG **не редагуються вручну**. Єдиний артефакт зміни — **change-файл** (`npx @7n/n ch [--bump <major|minor|patch>] [--section <Added|Changed|Fixed|Removed>] [--message "<…>"]`). Bump `version` і генерацію секції CHANGELOG виконує `n-cursor release` у CI на `main`.
9
9
 
10
10
  Детальна модель (база порівняння, формат CHANGELOG, post-release-інваріант) — у `n-changelog.mdc`.
@@ -8,8 +8,6 @@ docgen:
8
8
  score: 100
9
9
  ---
10
10
 
11
- ## Огляд
12
-
13
11
  Модуль надає інструменти для забезпечення якості коду Rust. Він дозволяє виконати перевірку коду на відповідність заданим Lint-правилам або запустити повну оркестрацію форматування та аналізу коду через `cargo`. Функціонал реалізується через публічні функції `run` та `lint`.
14
12
 
15
13
  ## Поведінка
@@ -9,4 +9,3 @@ resource: npm/rules/rust/js/
9
9
  | Файл | Тип |
10
10
  | ------------------------- | --------- |
11
11
  | [applies.mjs](applies.md) | JS Module |
12
- | [lint.mjs](lint.md) | JS Module |
@@ -5,14 +5,4 @@ alwaysApply: false
5
5
  version: '1.4'
6
6
  ---
7
7
 
8
- Правило забезпечує форматування (rustfmt), лінт (clippy), CI workflow та покриття для Rust-проєктів.
9
-
10
- [rust-lint](./js/lint.mdc)
11
- [rust-vscode_extensions](./js/vscode_extensions.mdc)
12
- [rust-tauri_composition](./js/tauri_composition.mdc)
13
- [rust-coverage](./js/coverage.mdc)
14
-
15
- ## Швидкий gate через conftest
16
-
17
- [rust-lint_rust_yml](./policy/lint_rust_yml/lint_rust_yml.mdc)
18
- [rust-vscode_extensions](./policy/vscode_extensions/vscode_extensions.mdc)
8
+ Правило забезпечує форматування (rustfmt), лінт (clippy), CI workflow та покриття для Rust-проєктів.
@@ -0,0 +1,12 @@
1
+ ## Rego-gate: `cargo`, `rustfmt`, `clippy` заборонені у `package.json`
2
+
3
+ Rego-пакет: `rust.package_json`
4
+
5
+ Цільовий файл: `package.json`
6
+
7
+ `cargo`, `rustfmt` і `clippy` — це частина **Rust toolchain**, а не npm-пакети. Вони **не додаються** у `dependencies`, `devDependencies` або `peerDependencies`. Встановлення:
8
+
9
+ - **локально** — через `rustup` (`rustup component add rustfmt clippy`);
10
+ - **у CI** — через крок `dtolnay/rust-toolchain@stable` із `with.components: rustfmt, clippy`.
11
+
12
+ Gate видає deny, якщо `cargo`, `rustfmt` або `clippy` з'являється у будь-якій секції залежностей `package.json`.
@@ -8,8 +8,6 @@ docgen:
8
8
  score: 100
9
9
  ---
10
10
 
11
- ## Огляд
12
-
13
11
  Модуль виконує перевірку якості коду та безпеки репозиторію, спираючись на конфігурації, визначені у meta.json. Функція `run` застосовує політики та посилання на MDC для виконання перевірки. Функція `lint` сканує файлову систему репозиторію на наявність секретів. Обидві функції мають публічний статус, а кешування відбувається у межах одного прогону.
14
12
 
15
13
  ## Поведінка
@@ -8,6 +8,5 @@ resource: npm/rules/security/js/
8
8
 
9
9
  | Файл | Тип |
10
10
  | ------------------------------------- | --------- |
11
- | [lint.mjs](lint.md) | JS Module |
12
11
  | [sample_secret.mjs](sample_secret.md) | JS Module |
13
12
  | [trufflehog.mjs](trufflehog.md) | JS Module |
@@ -6,19 +6,6 @@ version: '2.1'
6
6
  ---
7
7
 
8
8
  Правило **security** забезпечує сканування секретів через [TruffleHog](https://github.com/trufflesecurity/trufflehog) локально та на CI, а також правильне використання placeholder-значень у прикладних файлах.
9
-
10
- [security-trufflehog](./js/trufflehog.mdc)
11
-
12
- [security-sample-secret](./js/sample_secret.mdc)
13
-
14
- [security-rego-policies](./js/rego_policies.mdc)
15
-
16
- ## Швидкий gate через conftest
17
-
18
- [security-package-json](./policy/package_json/package_json.mdc)
19
-
20
- [security-lint-security-yml](./policy/lint_security_yml/lint_security_yml.mdc)
21
-
22
9
  ## Перевірка
23
10
 
24
11
  `npx @nitra/cursor fix security`
@@ -8,8 +8,6 @@ docgen:
8
8
  score: 100
9
9
  ---
10
10
 
11
- ## Огляд
12
-
13
11
  Модуль реалізує логіку для виконання правил, фільтрації файлів за розширеннями та запуску стильового лінтера. Функція `run` виконує визначені правила. `filterStyleFiles` обробляє файли, вибираючи їх на основі розширень. `lint` запускає перевірку стилю.
14
12
 
15
13
  ## Поведінка
@@ -6,6 +6,6 @@ resource: npm/rules/style/js/
6
6
 
7
7
  # npm/rules/style/js
8
8
 
9
- | Файл | Тип |
10
- |---|---|
9
+ | Файл | Тип |
10
+ | ------------------------- | --------- |
11
11
  | [tooling.mjs](tooling.md) | JS Module |
@@ -8,8 +8,6 @@ docgen:
8
8
  score: 95
9
9
  ---
10
10
 
11
- ## Огляд
12
-
13
11
  Перевіряє налаштування для стилістичного лінтера, підтверджуючи наявність файлів конфігурації, таких як `.stylelintrc.json` та `package.json`. Це забезпечує коректний запуск перевірок відповідно до вимог, визначених у `.stylelintrc.json` та `settings.json`. (js.mdc), (style.mdc)
14
12
 
15
13
  ## Поведінка
@@ -5,26 +5,4 @@ globs: "**/*.{css,scss,vue}"
5
5
  alwaysApply: false
6
6
  ---
7
7
 
8
- Правило **style** для Vue-проєктів: Quasar як стильова система, SCSS-конвенції кольорів і відступів, фікси компонентів, stylelint через `@nitra/stylelint-config`.
9
-
10
- [style-quasar](./js/quasar.mdc)
11
-
12
- [style-colors](./js/colors.mdc)
13
-
14
- [style-gap](./js/gap.mdc)
15
-
16
- [style-quasar-fixes](./js/quasar-fixes.mdc)
17
-
18
- [style-tooling](./js/tooling.mdc)
19
-
20
- [style-admin-table](./js/admin-table.mdc)
21
-
22
- ## Швидкий gate через conftest (Rego)
23
-
24
- [style-lint_style_yml](./policy/lint_style_yml/lint_style_yml.mdc)
25
-
26
- [style-package_json](./policy/package_json/package_json.mdc)
27
-
28
- [style-vscode_extensions](./policy/vscode_extensions/vscode_extensions.mdc)
29
-
30
- [style-vscode_settings](./policy/vscode_settings/vscode_settings.mdc)
8
+ Правило **style** для Vue-проєктів: Quasar як стильова система, SCSS-конвенції кольорів і відступів, фікси компонентів, stylelint через `@nitra/stylelint-config`.
@@ -8,8 +8,6 @@ docgen:
8
8
  score: 100
9
9
  ---
10
10
 
11
- ## Огляд
12
-
13
11
  Модуль обробляє JS-запити та взаємодіє з MDC для отримання даних. При запуску через публічну функцію `run` він оркеструє застосування правил, завантажуючи конфігурації з meta.json, застосовуючи білий список та надаючи підсумок. Модуль є read-only і не здійснює записів у ФС/БД.
14
12
 
15
13
  ## Поведінка
@@ -5,14 +5,4 @@ alwaysApply: false
5
5
  version: '1.5'
6
6
  ---
7
7
 
8
- Правило встановлює канонічні вимоги для Tauri-проєктів: виявлення маркерів у монорепо, VS Code-розширення, налаштування mutation-testing для platform bridge та реалізацію Tool Surface поверх Tauri+Rust.
9
-
10
- ## Швидкий gate через conftest
11
-
12
- [tauri-vscode_extensions](./policy/vscode_extensions/vscode_extensions.mdc)
13
-
14
- [tauri-tooling](./js/tooling.mdc)
15
-
16
- [tauri-cargo_mutants_config](./js/cargo_mutants_config.mdc)
17
-
18
- [tauri-tool_surface](./js/tool_surface.mdc)
8
+ Правило встановлює канонічні вимоги для Tauri-проєктів: виявлення маркерів у монорепо, VS Code-розширення, налаштування mutation-testing для platform bridge та реалізацію Tool Surface поверх Tauri+Rust.
@@ -8,8 +8,6 @@ docgen:
8
8
  score: 100
9
9
  ---
10
10
 
11
- ## Огляд
12
-
13
11
  Модуль виконує перевірку, обробляючи JS-запитання, політику та посилання на mdc. При запуску як окрема програма, він зчитує конфігурації з meta.json, застосовує білий список та підсумовує результати після застосування білого списку, визначаючи код виходу процесу. Функція run ініціює цей процес. Модуль є read-only і не пише у ФС/БД. Кешування відбувається у межах прогону.
14
12
 
15
13
  ## Поведінка