@nitra/cursor 12.9.0 → 12.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/settings.template.json +1 -23
- package/CHANGELOG.md +12 -0
- package/bin/n-cursor.js +8 -43
- package/docs/stryker.config.md +0 -2
- package/lib/docs/llm.md +16 -21
- package/lib/docs/omlx.md +20 -25
- package/lib/llm.mjs +25 -7
- package/lib/omlx.mjs +10 -3
- package/package.json +1 -1
- package/rules/abie/docs/main.md +0 -2
- package/rules/abie/lib/docs/http-route.md +0 -2
- package/rules/abie/main.mdc +0 -22
- package/rules/adr/docs/main.md +0 -2
- package/rules/adr/js/docs/hooks.md +16 -26
- package/rules/adr/js/hooks.mjs +59 -0
- package/rules/adr/main.mdc +0 -9
- package/rules/bun/docs/main.md +0 -2
- package/rules/bun/main.mdc +1 -15
- package/rules/capacitor/docs/main.md +0 -2
- package/rules/capacitor/main.mdc +0 -6
- package/rules/changelog/docs/main.md +0 -2
- package/rules/changelog/js/agent-workflow.mdc +1 -1
- package/rules/changelog/js/consistency.mjs +57 -3
- package/rules/changelog/js/docs/consistency.md +26 -24
- package/rules/changelog/js/docs/index.md +2 -2
- package/rules/changelog/main.mdc +0 -5
- package/rules/ci4/docs/main.md +0 -2
- package/rules/ci4/main.mdc +0 -5
- package/rules/doc-files/docs/main.md +0 -2
- package/rules/doc-files/js/docs/docgen-crc.md +0 -2
- package/rules/doc-files/js/docs/docgen-extract.md +0 -2
- package/rules/doc-files/js/docs/docgen-files-batch.md +0 -2
- package/rules/doc-files/js/docs/docgen-gen.md +0 -2
- package/rules/doc-files/js/docs/docgen-judge-measure.md +0 -2
- package/rules/doc-files/js/docs/docgen-judge.md +0 -2
- package/rules/doc-files/js/docs/docgen-scan.md +0 -2
- package/rules/doc-files/js/docs/run-lint.md +0 -2
- package/rules/docker/docs/main.md +0 -2
- package/rules/docker/js/docs/lint.md +0 -2
- package/rules/docker/lib/docs/docker-hadolint.md +0 -2
- package/rules/docker/main.mdc +1 -21
- package/rules/efes/docs/main.md +0 -2
- package/rules/efes/main.mdc +0 -1
- package/rules/feedback/docs/main.md +0 -2
- package/rules/ga/docs/main.md +0 -2
- package/rules/ga/js/docs/index.md +0 -1
- package/rules/ga/main.mdc +1 -31
- package/rules/graphql/docs/main.md +0 -2
- package/rules/graphql/main.mdc +0 -5
- package/rules/hasura/docs/main.md +0 -2
- package/rules/hasura/js/docs/index.md +3 -3
- package/rules/hasura/js/docs/migrations.md +0 -2
- package/rules/hasura/main.mdc +1 -11
- package/rules/image-avif/docs/main.md +0 -2
- package/rules/image-avif/main.mdc +1 -9
- package/rules/image-compress/docs/main.md +0 -2
- package/rules/image-compress/js/docs/index.md +0 -1
- package/rules/image-compress/main.mdc +1 -9
- package/rules/js/docs/main.md +0 -2
- package/rules/js/js/dep-policy.mjs +8 -4
- package/rules/js/js/docs/check.md +0 -2
- package/rules/js/js/docs/dep-policy.md +10 -12
- package/rules/js/js/docs/index.md +5 -5
- package/rules/js/js/docs/tooling.md +0 -2
- package/rules/js/js/docs/utils_imports.md +0 -2
- package/rules/js/main.mdc +0 -31
- package/rules/js-bun-db/docs/main.md +0 -2
- package/rules/js-bun-db/js/docs/safety.md +18 -23
- package/rules/js-bun-db/js/safety.mjs +31 -3
- package/rules/js-bun-db/lib/bun-sql-scan.mjs +123 -0
- package/rules/js-bun-db/lib/docs/bun-sql-scan.md +37 -331
- package/rules/js-bun-db/main.mdc +1 -23
- package/rules/js-bun-redis/docs/main.md +0 -2
- package/rules/js-bun-redis/main.mdc +0 -5
- package/rules/js-mssql/docs/main.md +0 -2
- package/rules/js-mssql/main.mdc +0 -12
- package/rules/js-run/docs/main.md +0 -2
- package/rules/js-run/js/docs/runtime.md +15 -13
- package/rules/js-run/js/runtime.mjs +48 -4
- package/rules/js-run/main.mdc +0 -25
- package/rules/k8s/docs/main.md +0 -2
- package/rules/k8s/main.mdc +0 -45
- package/rules/nginx-default-tpl/docs/main.md +0 -2
- package/rules/nginx-default-tpl/main.mdc +0 -13
- package/rules/npm-module/docs/main.md +0 -2
- package/rules/npm-module/js/docs/header_doc_pointer.md +0 -2
- package/rules/npm-module/js/docs/rule_meta.md +0 -2
- package/rules/npm-module/js/docs/skill_meta.md +0 -2
- package/rules/npm-module/main.mdc +1 -15
- package/rules/php/docs/main.md +0 -2
- package/rules/php/js/docs/index.md +0 -1
- package/rules/php/main.mdc +1 -9
- package/rules/python/docs/main.md +0 -2
- package/rules/python/js/docs/index.md +0 -1
- package/rules/python/main.mdc +1 -13
- package/rules/python/policy/lint_python_yml/lint_python_yml.rego +9 -0
- package/rules/python/policy/pyproject_toml/pyproject_toml.rego +15 -1
- package/rules/rego/docs/main.md +0 -2
- package/rules/rego/js/docs/index.md +2 -2
- package/rules/rego/js/docs/tooling.md +0 -2
- package/rules/rego/js/tooling.mdc +14 -0
- package/rules/rego/main.mdc +0 -9
- package/rules/rego/policy/package_json/package_json.mdc +12 -0
- package/rules/release/docs/main.md +0 -2
- package/rules/release/main.mdc +2 -2
- package/rules/rust/docs/main.md +0 -2
- package/rules/rust/js/docs/index.md +0 -1
- package/rules/rust/main.mdc +1 -11
- package/rules/rust/policy/package_json/package_json.mdc +12 -0
- package/rules/security/docs/main.md +0 -2
- package/rules/security/js/docs/index.md +0 -1
- package/rules/security/main.mdc +0 -13
- package/rules/style/docs/main.md +0 -2
- package/rules/style/js/docs/index.md +2 -2
- package/rules/style/js/docs/tooling.md +0 -2
- package/rules/style/main.mdc +1 -23
- package/rules/tauri/docs/main.md +0 -2
- package/rules/tauri/main.mdc +1 -11
- package/rules/test/docs/main.md +0 -2
- package/rules/test/js/docs/no-console-store-restore.md +0 -2
- package/rules/test/js/docs/sandbox-aware-test.md +0 -2
- package/rules/test/js/docs/stryker_config.md +0 -2
- package/rules/test/js/docs/vitest-config-pool-forks.md +0 -2
- package/rules/test/main.mdc +1 -21
- package/rules/text/docs/main.md +0 -2
- package/rules/text/js/docs/cspell-fix.md +0 -2
- package/rules/text/js/docs/run-dotenv-linter.md +0 -2
- package/rules/text/js/docs/run-shellcheck.md +0 -2
- package/rules/text/js/docs/run-v8r.md +0 -2
- package/rules/text/main.mdc +0 -33
- package/rules/tool-surface/docs/main.md +0 -2
- package/rules/vue/docs/main.md +0 -2
- package/rules/vue/js/docs/packages.md +12 -17
- package/rules/vue/js/packages.mjs +41 -1
- package/rules/vue/main.mdc +0 -22
- package/rules/worktree/docs/main.md +0 -2
- package/scripts/docs/auto-rules.md +0 -2
- package/scripts/docs/auto-skills.md +0 -2
- package/scripts/docs/hook.md +13 -12
- package/scripts/docs/post-tool-use-check.md +0 -2
- package/scripts/docs/sync-claude-config.md +1 -3
- package/scripts/docs/sync-setup-bun-deps-action.md +0 -2
- package/scripts/hook.mjs +3 -4
- package/scripts/lib/docs/check-mdc-template-refs.md +0 -2
- package/scripts/lib/docs/index.md +35 -35
- package/scripts/lib/docs/inline-template-links.md +6 -8
- package/scripts/lib/docs/list-project-rules-mdc.md +0 -2
- package/scripts/lib/docs/list-rule-ids.md +0 -2
- package/scripts/lib/docs/mirror-parity.md +8 -10
- package/scripts/lib/docs/read-n-cursor-config-lite.md +0 -2
- package/scripts/lib/docs/rule-meta.md +0 -2
- package/scripts/lib/docs/run-lint.md +0 -2
- package/scripts/lib/docs/run-rule-cli.md +0 -2
- package/scripts/lib/docs/run-rule.md +0 -2
- package/scripts/lib/docs/run-standard-lint.md +0 -2
- package/scripts/lib/docs/run-standard-rule.md +0 -2
- package/scripts/lib/docs/skill-meta.md +0 -2
- package/scripts/lib/docs/timing-summary.md +0 -2
- package/scripts/lib/docs/worktree-notice.md +0 -2
- package/scripts/lib/fix/docs/analyze-escalation.md +0 -2
- package/scripts/lib/fix/docs/index.md +1 -0
- package/scripts/lib/fix/docs/llm-worker.md +18 -8
- package/scripts/lib/fix/docs/orchestrator.md +10 -16
- package/scripts/lib/fix/docs/run-conformance-check.md +0 -2
- package/scripts/lib/fix/docs/t0.md +0 -2
- package/scripts/lib/fix/docs/verbose-block.md +27 -0
- package/scripts/lib/fix/llm-worker.mjs +75 -22
- package/scripts/lib/fix/orchestrator.mjs +9 -3
- package/scripts/lib/fix/verbose-block.mjs +82 -0
- package/scripts/lib/inline-template-links.mjs +32 -22
- package/scripts/lib/mirror-parity.mjs +2 -2
- package/scripts/sync-claude-config.mjs +7 -4
- package/scripts/utils/docs/resolve-js-root.md +0 -2
- package/skills/doc-files/SKILL.md +9 -24
- 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
|
-
|
|
413
|
-
|
|
414
|
-
|
|
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
|
|
package/rules/js-run/main.mdc
CHANGED
|
@@ -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)
|
package/rules/k8s/docs/main.md
CHANGED
|
@@ -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
|
## Поведінка
|
package/rules/k8s/main.mdc
CHANGED
|
@@ -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 @
|
|
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: усі обовʼязкові поля й кроки з канонічного сніпету).
|
package/rules/php/docs/main.md
CHANGED
|
@@ -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
|
## Поведінка
|
package/rules/php/main.mdc
CHANGED
|
@@ -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
|
## Поведінка
|
package/rules/python/main.mdc
CHANGED
|
@@ -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`).
|
|
@@ -43,6 +43,15 @@ deny contains msg if {
|
|
|
43
43
|
msg := sprintf("lint-python.yml: відсутній step з `uses: %s` (python.mdc)", [required_use])
|
|
44
44
|
}
|
|
45
45
|
|
|
46
|
+
deny contains msg if {
|
|
47
|
+
some job in object.get(input, "jobs", {})
|
|
48
|
+
some step in object.get(job, "steps", [])
|
|
49
|
+
object.get(step, "uses", "") == "actions/checkout@v6"
|
|
50
|
+
creds := object.get(object.get(step, "with", {}), "persist-credentials", true)
|
|
51
|
+
creds != false
|
|
52
|
+
msg := "lint-python.yml: actions/checkout@v6 потребує `with: persist-credentials: false` (python.mdc)"
|
|
53
|
+
}
|
|
54
|
+
|
|
46
55
|
deny contains msg if {
|
|
47
56
|
some job in data.template.snippet.jobs
|
|
48
57
|
some step in job.steps
|
|
@@ -21,7 +21,7 @@ deny contains msg if {
|
|
|
21
21
|
msg := sprintf("pyproject.toml: [tool.%s] — %s", [key, reason])
|
|
22
22
|
}
|
|
23
23
|
|
|
24
|
-
# ── PEP 621: обовʼязкові [project]
|
|
24
|
+
# ── PEP 621: обовʼязкові [project].* ─────────────────────────────────────────
|
|
25
25
|
|
|
26
26
|
deny contains msg if {
|
|
27
27
|
not project_field_set("name")
|
|
@@ -33,7 +33,21 @@ deny contains msg if {
|
|
|
33
33
|
msg := "pyproject.toml: відсутній статичний [project].version (PEP 621, python.mdc)"
|
|
34
34
|
}
|
|
35
35
|
|
|
36
|
+
deny contains msg if {
|
|
37
|
+
not project_field_set("requires-python")
|
|
38
|
+
msg := "pyproject.toml: відсутній [project].requires-python (наприклад '>=3.12') (PEP 621, python.mdc)"
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
deny contains msg if {
|
|
42
|
+
not project_key_exists("dependencies")
|
|
43
|
+
msg := "pyproject.toml: відсутній [project].dependencies (навіть порожній список `[]`) (PEP 621, python.mdc)"
|
|
44
|
+
}
|
|
45
|
+
|
|
36
46
|
project_field_set(key) if {
|
|
37
47
|
value := object.get(object.get(input, "project", {}), key, "")
|
|
38
48
|
value != ""
|
|
39
49
|
}
|
|
50
|
+
|
|
51
|
+
project_key_exists(key) if {
|
|
52
|
+
key in object.keys(object.get(input, "project", {}))
|
|
53
|
+
}
|
package/rules/rego/docs/main.md
CHANGED
|
@@ -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
|
## Поведінка
|
|
@@ -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-порушення.
|
package/rules/rego/main.mdc
CHANGED
|
@@ -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
|
## Поведінка
|
package/rules/release/main.mdc
CHANGED
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
---
|
|
2
|
-
description: n-cursor release та n
|
|
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 @
|
|
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`.
|
package/rules/rust/docs/main.md
CHANGED
|
@@ -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
|
## Поведінка
|
package/rules/rust/main.mdc
CHANGED
|
@@ -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
|
## Поведінка
|
package/rules/security/main.mdc
CHANGED
|
@@ -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`
|
package/rules/style/docs/main.md
CHANGED
|
@@ -8,8 +8,6 @@ docgen:
|
|
|
8
8
|
score: 100
|
|
9
9
|
---
|
|
10
10
|
|
|
11
|
-
## Огляд
|
|
12
|
-
|
|
13
11
|
Модуль реалізує логіку для виконання правил, фільтрації файлів за розширеннями та запуску стильового лінтера. Функція `run` виконує визначені правила. `filterStyleFiles` обробляє файли, вибираючи їх на основі розширень. `lint` запускає перевірку стилю.
|
|
14
12
|
|
|
15
13
|
## Поведінка
|
|
@@ -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
|
## Поведінка
|