@nitra/cursor 1.9.23 → 1.11.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 (84) hide show
  1. package/.claude-template/hooks/capture-decisions.sh +3 -3
  2. package/.claude-template/hooks/normalize-decisions.sh +370 -0
  3. package/CHANGELOG.md +52 -0
  4. package/bin/n-cursor.js +30 -29
  5. package/package.json +2 -1
  6. package/rules/abie/js/applies/check.mjs +24 -0
  7. package/rules/abie/js/env_dns/check.mjs +53 -0
  8. package/rules/abie/js/firebase_hosting/check.mjs +49 -0
  9. package/rules/abie/js/hc_pairing/check.mjs +58 -0
  10. package/rules/abie/js/ua_http_route/check.mjs +86 -0
  11. package/rules/abie/js/ua_node_selector/check.mjs +65 -0
  12. package/rules/abie/policy/base_deployment_preem/target.json +10 -0
  13. package/rules/abie/policy/clean_merged_ignore_branches/target.json +4 -0
  14. package/rules/abie/policy/health_check_policy/target.json +4 -0
  15. package/rules/abie/policy/http_route_base/target.json +4 -0
  16. package/rules/abie/utils/enabled.mjs +35 -0
  17. package/rules/abie/utils/env-dns.mjs +81 -0
  18. package/rules/abie/utils/hc-yaml.mjs +27 -0
  19. package/rules/abie/utils/http-route.mjs +93 -0
  20. package/rules/abie/utils/k8s-tree.mjs +102 -0
  21. package/rules/abie/utils/kustomization-patches.mjs +224 -0
  22. package/rules/abie/utils/overlay-paths.mjs +97 -0
  23. package/rules/abie/utils/yaml.mjs +72 -0
  24. package/rules/adr/adr.mdc +82 -18
  25. package/rules/adr/js/check.mjs +84 -40
  26. package/rules/adr/policy/settings_json/settings_json.rego +17 -11
  27. package/rules/adr/policy/settings_json/target.json +4 -0
  28. package/rules/adr/policy/settings_local_json/settings_local_json.rego +24 -12
  29. package/rules/adr/policy/settings_local_json/target.json +4 -0
  30. package/rules/bun/policy/bunfig/target.json +4 -0
  31. package/rules/bun/policy/package_json/target.json +4 -0
  32. package/rules/capacitor/policy/package_json/target.json +4 -0
  33. package/rules/docker/policy/lint_docker_yml/target.json +4 -0
  34. package/rules/docker/policy/package_json/target.json +4 -0
  35. package/rules/hasura/policy/svc_hl/target.json +4 -0
  36. package/rules/image-avif/policy/package_json/target.json +4 -0
  37. package/rules/image-compress/policy/package_json/target.json +4 -0
  38. package/rules/js-bun-db/policy/package_json/target.json +4 -0
  39. package/rules/js-bun-redis/policy/package_json/target.json +4 -0
  40. package/rules/js-lint/policy/lint_js_yml/target.json +4 -0
  41. package/rules/js-lint/policy/package_json/target.json +4 -0
  42. package/rules/js-mssql/policy/package_json/target.json +4 -0
  43. package/rules/js-run/policy/configmap/target.json +4 -0
  44. package/rules/js-run/policy/package_json/target.json +4 -0
  45. package/rules/k8s/policy/base_kustomization/target.json +4 -0
  46. package/rules/k8s/policy/base_manifest/target.json +10 -0
  47. package/rules/k8s/policy/gateway/target.json +4 -0
  48. package/rules/k8s/policy/hpa_pdb/target.json +4 -0
  49. package/rules/k8s/policy/kustomization/target.json +4 -0
  50. package/rules/k8s/policy/manifest/target.json +4 -0
  51. package/rules/k8s/policy/svc_hl_yaml/target.json +4 -0
  52. package/rules/k8s/policy/svc_yaml/target.json +4 -0
  53. package/rules/npm-module/policy/emit_types_config/target.json +4 -0
  54. package/rules/npm-module/policy/npm_package_json/target.json +4 -0
  55. package/rules/npm-module/policy/npm_publish_yml/target.json +4 -0
  56. package/rules/npm-module/policy/root_package_json/target.json +4 -0
  57. package/rules/php/policy/lint_php_yml/target.json +4 -0
  58. package/rules/php/policy/package_json/target.json +4 -0
  59. package/rules/rego/js/applies/check.mjs +54 -0
  60. package/rules/rego/policy/package_json/target.json +5 -0
  61. package/rules/rego/policy/vscode_extensions/target.json +5 -0
  62. package/rules/rego/policy/vscode_settings/target.json +5 -0
  63. package/rules/style-lint/policy/lint_style_yml/target.json +4 -0
  64. package/rules/style-lint/policy/package_json/target.json +4 -0
  65. package/rules/style-lint/policy/vscode_extensions/target.json +4 -0
  66. package/rules/style-lint/policy/vscode_settings/target.json +4 -0
  67. package/rules/text/policy/cspell/target.json +4 -0
  68. package/rules/text/policy/markdownlint/target.json +4 -0
  69. package/rules/text/policy/oxfmtrc/target.json +4 -0
  70. package/rules/text/policy/package_json/target.json +4 -0
  71. package/rules/text/policy/vscode_extensions/target.json +4 -0
  72. package/rules/text/policy/vscode_settings/target.json +4 -0
  73. package/rules/vue/policy/package_json/target.json +4 -0
  74. package/schemas/target.json +58 -0
  75. package/scripts/auto-skills.mjs +2 -0
  76. package/scripts/lint-conftest.mjs +65 -414
  77. package/scripts/sync-claude-config.mjs +70 -14
  78. package/scripts/utils/discover-checkable-rules.mjs +123 -0
  79. package/scripts/utils/resolve-target-files.mjs +109 -0
  80. package/scripts/utils/run-rule.mjs +131 -0
  81. package/skills/adr-normalize/SKILL.md +71 -0
  82. package/skills/adr-normalize/auto.md +1 -0
  83. package/rules/abie/js/check.mjs +0 -1152
  84. package/rules/rego/js/check.mjs +0 -106
@@ -1,106 +0,0 @@
1
- /**
2
- * Перевіряє інструментарій rego (rego.mdc): VSCode та `package.json` для проєктів,
3
- * які мають хоча б один `.rego` файл у дереві.
4
- *
5
- * Cross-file gating (JS):
6
- * 1. Walk дерева від `cwd` (з типовими skip-ами і `.n-cursor.json:ignore`).
7
- * 2. Якщо немає жодного `.rego` — пропустити перевірку (rego-tooling не вимагається).
8
- * 3. Інакше — для кожного канонічного файла:
9
- * - FS-existence (з повідомленням, якщо відсутній);
10
- * - делегувати content-валідацію rego-пакетам через `runConftestBatch`:
11
- * `rego.vscode_extensions` — `.vscode/extensions.json`: `tsandall.opa`
12
- * у `recommendations`;
13
- * `rego.vscode_settings` — `.vscode/settings.json`: `[rego]` з
14
- * `editor.defaultFormatter: "tsandall.opa"` і `editor.formatOnSave: true`;
15
- * `rego.package_json` — `package.json#scripts.lint-rego` має бути
16
- * канонічним `"bun ./npm/scripts/lint-rego.mjs"`.
17
- *
18
- * Rego-полісі глобально у `lint-conftest` НЕ реєструються — це conditional
19
- * правило (без `.rego` файлів вимоги не діють). Plan B: Rego-authoritative +
20
- * JS-orchestrator з `runConftestBatch`.
21
- *
22
- * `bun run lint-rego` (`npm/scripts/lint-rego.mjs`) — окрема перевірка САМИХ
23
- * rego-полісі (opa check / regal lint / conftest verify), не плутати з цим
24
- * скриптом, який перевіряє ПРОЄКТНЕ оточення для роботи з rego.
25
- */
26
- import { existsSync } from 'node:fs'
27
-
28
- import { createCheckReporter } from '../../../scripts/utils/check-reporter.mjs'
29
- import { loadCursorIgnorePaths } from '../../../scripts/utils/load-cursor-config.mjs'
30
- import { runConftestBatch } from '../../../scripts/utils/run-conftest-batch.mjs'
31
- import { walkDir } from '../../../scripts/utils/walkDir.mjs'
32
-
33
- /** Список (path, namespace, policyDirRel) для трьох канонічних конфігів rego.mdc. */
34
- const REGO_TARGETS = [
35
- ['.vscode/extensions.json', 'rego.vscode_extensions', 'rego/vscode_extensions'],
36
- ['.vscode/settings.json', 'rego.vscode_settings', 'rego/vscode_settings'],
37
- ['package.json', 'rego.package_json', 'rego/package_json']
38
- ]
39
-
40
- /**
41
- * Чи є хоча б один `.rego` файл у дереві від `cwd`.
42
- * @param {string} root абсолютний шлях кореня
43
- * @param {string[]} ignorePaths шляхи каталогів, повністю виключених з обходу
44
- * @returns {Promise<boolean>} `true`, якщо знайдено хоча б один `.rego`
45
- */
46
- async function projectHasRegoFiles(root, ignorePaths) {
47
- let found = false
48
- await walkDir(
49
- root,
50
- p => {
51
- if (p.endsWith('.rego')) {
52
- found = true
53
- }
54
- },
55
- ignorePaths
56
- )
57
- return found
58
- }
59
-
60
- /**
61
- * Делегує content-валідацію одного канонічного конфіга rego-пакету через
62
- * `runConftestBatch`. FS-існування — попередньо перевірено.
63
- * @param {string} path відносний шлях до файлу
64
- * @param {string} namespace rego-пакет (наприклад `rego.vscode_extensions`)
65
- * @param {string} policyDirRel піддиректорія у `npm/policy/`
66
- * @param {(msg: string) => void} pass success-репортер
67
- * @param {(msg: string) => void} fail fail-репортер
68
- * @returns {void}
69
- */
70
- function runRegoPolicyOnPath(path, namespace, policyDirRel, pass, fail) {
71
- const violations = runConftestBatch({ policyDirRel, namespace, files: [path] })
72
- if (violations.length === 0) {
73
- pass(`${path} відповідає ${namespace} (rego)`)
74
- return
75
- }
76
- for (const v of violations) fail(v.message)
77
- }
78
-
79
- /**
80
- * Перевіряє відповідність проєкту правилам rego.mdc.
81
- * @returns {Promise<number>} 0 — все OK, 1 — є проблеми
82
- */
83
- export async function check() {
84
- const reporter = createCheckReporter()
85
- const { pass, fail } = reporter
86
-
87
- const root = process.cwd()
88
- const ignorePaths = await loadCursorIgnorePaths(root)
89
- const hasRego = await projectHasRegoFiles(root, ignorePaths)
90
- if (!hasRego) {
91
- pass('Немає *.rego у дереві — rego-tooling не вимагається (rego.mdc)')
92
- return reporter.getExitCode()
93
- }
94
-
95
- pass('Знайдено *.rego у дереві — перевіряємо канонічні конфіги rego.mdc')
96
-
97
- for (const [path, namespace, policyDirRel] of REGO_TARGETS) {
98
- if (!existsSync(path)) {
99
- fail(`${path} не існує — створи згідно rego.mdc (${namespace})`)
100
- continue
101
- }
102
- runRegoPolicyOnPath(path, namespace, policyDirRel, pass, fail)
103
- }
104
-
105
- return reporter.getExitCode()
106
- }