@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.
- package/.claude-template/hooks/capture-decisions.sh +3 -3
- package/.claude-template/hooks/normalize-decisions.sh +370 -0
- package/CHANGELOG.md +52 -0
- package/bin/n-cursor.js +30 -29
- package/package.json +2 -1
- package/rules/abie/js/applies/check.mjs +24 -0
- package/rules/abie/js/env_dns/check.mjs +53 -0
- package/rules/abie/js/firebase_hosting/check.mjs +49 -0
- package/rules/abie/js/hc_pairing/check.mjs +58 -0
- package/rules/abie/js/ua_http_route/check.mjs +86 -0
- package/rules/abie/js/ua_node_selector/check.mjs +65 -0
- package/rules/abie/policy/base_deployment_preem/target.json +10 -0
- package/rules/abie/policy/clean_merged_ignore_branches/target.json +4 -0
- package/rules/abie/policy/health_check_policy/target.json +4 -0
- package/rules/abie/policy/http_route_base/target.json +4 -0
- package/rules/abie/utils/enabled.mjs +35 -0
- package/rules/abie/utils/env-dns.mjs +81 -0
- package/rules/abie/utils/hc-yaml.mjs +27 -0
- package/rules/abie/utils/http-route.mjs +93 -0
- package/rules/abie/utils/k8s-tree.mjs +102 -0
- package/rules/abie/utils/kustomization-patches.mjs +224 -0
- package/rules/abie/utils/overlay-paths.mjs +97 -0
- package/rules/abie/utils/yaml.mjs +72 -0
- package/rules/adr/adr.mdc +82 -18
- package/rules/adr/js/check.mjs +84 -40
- package/rules/adr/policy/settings_json/settings_json.rego +17 -11
- package/rules/adr/policy/settings_json/target.json +4 -0
- package/rules/adr/policy/settings_local_json/settings_local_json.rego +24 -12
- package/rules/adr/policy/settings_local_json/target.json +4 -0
- package/rules/bun/policy/bunfig/target.json +4 -0
- package/rules/bun/policy/package_json/target.json +4 -0
- package/rules/capacitor/policy/package_json/target.json +4 -0
- package/rules/docker/policy/lint_docker_yml/target.json +4 -0
- package/rules/docker/policy/package_json/target.json +4 -0
- package/rules/hasura/policy/svc_hl/target.json +4 -0
- package/rules/image-avif/policy/package_json/target.json +4 -0
- package/rules/image-compress/policy/package_json/target.json +4 -0
- package/rules/js-bun-db/policy/package_json/target.json +4 -0
- package/rules/js-bun-redis/policy/package_json/target.json +4 -0
- package/rules/js-lint/policy/lint_js_yml/target.json +4 -0
- package/rules/js-lint/policy/package_json/target.json +4 -0
- package/rules/js-mssql/policy/package_json/target.json +4 -0
- package/rules/js-run/policy/configmap/target.json +4 -0
- package/rules/js-run/policy/package_json/target.json +4 -0
- package/rules/k8s/policy/base_kustomization/target.json +4 -0
- package/rules/k8s/policy/base_manifest/target.json +10 -0
- package/rules/k8s/policy/gateway/target.json +4 -0
- package/rules/k8s/policy/hpa_pdb/target.json +4 -0
- package/rules/k8s/policy/kustomization/target.json +4 -0
- package/rules/k8s/policy/manifest/target.json +4 -0
- package/rules/k8s/policy/svc_hl_yaml/target.json +4 -0
- package/rules/k8s/policy/svc_yaml/target.json +4 -0
- package/rules/npm-module/policy/emit_types_config/target.json +4 -0
- package/rules/npm-module/policy/npm_package_json/target.json +4 -0
- package/rules/npm-module/policy/npm_publish_yml/target.json +4 -0
- package/rules/npm-module/policy/root_package_json/target.json +4 -0
- package/rules/php/policy/lint_php_yml/target.json +4 -0
- package/rules/php/policy/package_json/target.json +4 -0
- package/rules/rego/js/applies/check.mjs +54 -0
- package/rules/rego/policy/package_json/target.json +5 -0
- package/rules/rego/policy/vscode_extensions/target.json +5 -0
- package/rules/rego/policy/vscode_settings/target.json +5 -0
- package/rules/style-lint/policy/lint_style_yml/target.json +4 -0
- package/rules/style-lint/policy/package_json/target.json +4 -0
- package/rules/style-lint/policy/vscode_extensions/target.json +4 -0
- package/rules/style-lint/policy/vscode_settings/target.json +4 -0
- package/rules/text/policy/cspell/target.json +4 -0
- package/rules/text/policy/markdownlint/target.json +4 -0
- package/rules/text/policy/oxfmtrc/target.json +4 -0
- package/rules/text/policy/package_json/target.json +4 -0
- package/rules/text/policy/vscode_extensions/target.json +4 -0
- package/rules/text/policy/vscode_settings/target.json +4 -0
- package/rules/vue/policy/package_json/target.json +4 -0
- package/schemas/target.json +58 -0
- package/scripts/auto-skills.mjs +2 -0
- package/scripts/lint-conftest.mjs +65 -414
- package/scripts/sync-claude-config.mjs +70 -14
- package/scripts/utils/discover-checkable-rules.mjs +123 -0
- package/scripts/utils/resolve-target-files.mjs +109 -0
- package/scripts/utils/run-rule.mjs +131 -0
- package/skills/adr-normalize/SKILL.md +71 -0
- package/skills/adr-normalize/auto.md +1 -0
- package/rules/abie/js/check.mjs +0 -1152
- package/rules/rego/js/check.mjs +0 -106
package/rules/rego/js/check.mjs
DELETED
|
@@ -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
|
-
}
|