@nitra/cursor 12.8.9 → 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.
- package/.claude-template/settings.template.json +1 -23
- package/CHANGELOG.md +14 -1
- package/bin/n-cursor.js +21 -48
- 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 +5 -5
- package/rules/abie/docs/index.md +0 -1
- package/rules/abie/docs/main.md +0 -2
- package/rules/abie/lib/docs/http-route.md +9 -12
- package/rules/abie/lib/http-route.mjs +3 -0
- package/rules/abie/main.mdc +0 -22
- package/rules/abie/policy/health_check_policy/health_check_policy.mdc +3 -1
- package/rules/abie/policy/health_check_policy/health_check_policy.rego +27 -0
- package/rules/adr/docs/index.md +0 -1
- package/rules/adr/docs/main.md +0 -2
- package/rules/adr/js/madr_format.mdc +13 -1
- package/rules/adr/main.mdc +0 -9
- package/rules/bun/docs/index.md +0 -1
- package/rules/bun/docs/main.md +0 -2
- package/rules/bun/main.mdc +1 -15
- package/rules/bun/policy/package_json/package_json.rego +12 -0
- package/rules/capacitor/docs/index.md +0 -1
- package/rules/capacitor/docs/main.md +0 -2
- package/rules/capacitor/main.mdc +0 -6
- package/rules/changelog/docs/index.md +0 -1
- package/rules/changelog/docs/main.md +0 -2
- package/rules/changelog/js/agent-workflow.mdc +1 -1
- package/rules/changelog/js/consistency.mjs +3 -3
- package/rules/changelog/js/docs/consistency.md +18 -23
- package/rules/changelog/main.mdc +0 -5
- package/rules/ci4/docs/index.md +0 -1
- package/rules/ci4/docs/main.md +0 -2
- package/rules/ci4/main.mdc +0 -5
- package/rules/doc-files/docs/index.md +0 -1
- package/rules/doc-files/docs/main.md +7 -11
- 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/doc-files/main.mjs +2 -3
- package/rules/docker/docs/index.md +0 -1
- 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/index.md +0 -1
- package/rules/efes/docs/main.md +0 -2
- package/rules/efes/main.mdc +0 -1
- package/rules/feedback/docs/index.md +0 -1
- package/rules/feedback/docs/main.md +0 -2
- package/rules/ga/docs/index.md +0 -1
- 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/index.md +0 -1
- package/rules/graphql/docs/main.md +0 -2
- package/rules/graphql/main.mdc +0 -5
- package/rules/hasura/docs/index.md +0 -1
- package/rules/hasura/docs/main.md +0 -2
- package/rules/hasura/js/docs/index.md +1 -0
- package/rules/hasura/js/docs/migrations.md +28 -0
- package/rules/hasura/js/migrations.mjs +47 -0
- package/rules/hasura/main.mdc +1 -11
- package/rules/image-avif/docs/index.md +0 -1
- package/rules/image-avif/docs/main.md +0 -2
- package/rules/image-avif/main.mdc +1 -9
- package/rules/image-compress/docs/index.md +0 -1
- 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/index.md +0 -1
- package/rules/js/docs/main.md +0 -2
- package/rules/js/js/dep-policy.mjs +91 -0
- package/rules/js/js/docs/check.md +0 -2
- package/rules/js/js/docs/dep-policy.md +34 -0
- package/rules/js/js/docs/index.md +5 -4
- 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/policy/package_json/package_json.rego +16 -0
- package/rules/js-bun-db/docs/index.md +0 -1
- 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/index.md +0 -1
- package/rules/js-bun-redis/docs/main.md +0 -2
- package/rules/js-bun-redis/main.mdc +0 -5
- package/rules/js-mssql/docs/index.md +0 -1
- package/rules/js-mssql/docs/main.md +0 -2
- package/rules/js-mssql/main.mdc +0 -12
- package/rules/js-run/docs/index.md +0 -1
- 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/index.md +0 -1
- package/rules/k8s/docs/main.md +0 -2
- package/rules/k8s/main.mdc +0 -45
- package/rules/nginx-default-tpl/docs/index.md +0 -1
- package/rules/nginx-default-tpl/docs/main.md +0 -2
- package/rules/nginx-default-tpl/main.mdc +0 -13
- package/rules/npm-module/docs/index.md +0 -1
- 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/index.md +0 -1
- 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/index.md +0 -1
- 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/rego/docs/index.md +0 -1
- package/rules/rego/docs/main.md +0 -2
- package/rules/rego/js/docs/index.md +1 -1
- package/rules/rego/js/docs/tooling.md +26 -0
- package/rules/rego/js/tooling.mdc +14 -0
- package/rules/rego/js/tooling.mjs +24 -0
- package/rules/rego/main.mdc +0 -9
- package/rules/rego/policy/package_json/package_json.mdc +12 -0
- package/rules/rego/policy/package_json/package_json.rego +21 -0
- package/rules/rego/policy/package_json/target.json +4 -0
- package/rules/release/docs/index.md +0 -1
- package/rules/release/docs/main.md +0 -2
- package/rules/release/main.mdc +2 -2
- package/rules/rust/docs/index.md +0 -1
- 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/lint_rust_yml/lint_rust_yml.rego +24 -0
- package/rules/rust/policy/package_json/package_json.mdc +12 -0
- package/rules/rust/policy/package_json/package_json.rego +20 -0
- package/rules/rust/policy/package_json/target.json +4 -0
- package/rules/security/docs/index.md +0 -1
- 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/index.md +0 -1
- package/rules/style/docs/main.md +0 -2
- package/rules/style/js/docs/index.md +0 -1
- package/rules/style/js/docs/tooling.md +12 -10
- package/rules/style/js/tooling.mjs +8 -2
- package/rules/style/main.mdc +1 -23
- package/rules/style/policy/lint_style_yml/lint_style_yml.rego +5 -0
- package/rules/tauri/docs/index.md +0 -1
- package/rules/tauri/docs/main.md +0 -2
- package/rules/tauri/main.mdc +1 -11
- package/rules/test/docs/index.md +0 -1
- package/rules/test/docs/main.md +0 -2
- package/rules/test/js/docs/index.md +2 -0
- package/rules/test/js/docs/no-console-store-restore.md +30 -0
- package/rules/test/js/docs/sandbox-aware-test.md +30 -0
- 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/js/no-console-store-restore.mjs +88 -0
- package/rules/test/js/sandbox-aware-test.mjs +89 -0
- package/rules/test/main.mdc +1 -21
- package/rules/text/docs/index.md +0 -1
- 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/index.md +0 -1
- package/rules/tool-surface/docs/main.md +0 -2
- package/rules/vue/docs/index.md +0 -1
- package/rules/vue/docs/main.md +0 -2
- package/rules/vue/main.mdc +0 -22
- package/rules/worktree/docs/index.md +0 -1
- 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 +30 -0
- package/scripts/docs/index.md +1 -2
- 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 +71 -0
- package/scripts/lib/docs/check-mdc-template-refs.md +0 -2
- package/scripts/lib/docs/index.md +35 -36
- 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 +9 -10
- package/scripts/lib/docs/run-rule-cli.md +0 -2
- package/scripts/lib/docs/run-rule.md +7 -9
- 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 +10 -10
- package/scripts/lib/fix/docs/llm-worker.md +18 -8
- package/scripts/lib/fix/docs/orchestrator.md +44 -20
- 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 +13 -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/lib/run-lint.mjs +15 -2
- package/scripts/lib/run-rule.mjs +1 -2
- package/scripts/sync-claude-config.mjs +7 -4
- package/scripts/utils/docs/resolve-js-root.md +0 -2
- package/skills/adr-normalize/SKILL.md +1 -0
- package/skills/coverage-fix/SKILL.md +1 -0
- package/skills/doc-aggregate/SKILL.md +1 -0
- package/skills/doc-files/SKILL.md +10 -24
- package/skills/lint/SKILL.md +24 -19
- package/skills/llm-patch/SKILL.md +5 -4
- package/skills/publish-telegram/SKILL.md +1 -0
- package/skills/start-check/SKILL.md +1 -0
- package/skills/taze/SKILL.md +3 -2
- package/types/bin/n-cursor.d.ts +1 -1
- package/rules/abie/docs/fix.md +0 -37
- package/rules/adr/docs/fix.md +0 -37
- package/rules/bun/docs/fix.md +0 -30
- package/rules/capacitor/docs/fix.md +0 -36
- package/rules/changelog/docs/fix.md +0 -37
- package/rules/ci4/docs/fix.md +0 -32
- package/rules/doc-files/docs/fix.md +0 -29
- package/rules/docker/docs/fix.md +0 -35
- package/rules/efes/docs/fix.md +0 -37
- package/rules/feedback/docs/fix.md +0 -30
- package/rules/ga/docs/fix.md +0 -30
- package/rules/graphql/docs/fix.md +0 -37
- package/rules/hasura/docs/fix.md +0 -39
- package/rules/image-avif/docs/fix.md +0 -28
- package/rules/image-compress/docs/fix.md +0 -27
- package/rules/js/docs/fix.md +0 -37
- package/rules/js-bun-db/docs/fix.md +0 -30
- package/rules/js-bun-redis/docs/fix.md +0 -32
- package/rules/js-mssql/docs/fix.md +0 -30
- package/rules/js-run/docs/fix.md +0 -36
- package/rules/k8s/docs/fix.md +0 -31
- package/rules/nginx-default-tpl/docs/fix.md +0 -35
- package/rules/npm-module/docs/fix.md +0 -34
- package/rules/php/docs/fix.md +0 -35
- package/rules/python/docs/fix.md +0 -38
- package/rules/rego/docs/fix.md +0 -31
- package/rules/release/docs/fix.md +0 -28
- package/rules/rust/docs/fix.md +0 -32
- package/rules/security/docs/fix.md +0 -33
- package/rules/style/docs/fix.md +0 -28
- package/rules/tauri/docs/fix.md +0 -39
- package/rules/test/docs/fix.md +0 -31
- package/rules/text/docs/fix.md +0 -37
- package/rules/tool-surface/docs/fix.md +0 -32
- package/rules/vue/docs/fix.md +0 -32
- package/rules/worktree/docs/fix.md +0 -40
- package/scripts/docs/post-tool-use-fix.md +0 -32
- package/scripts/docs/worktree-cli.md +0 -27
- package/scripts/lib/docs/worktree.md +0 -42
- package/scripts/lib/fix/docs/run-fix-check.md +0 -33
|
@@ -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/index.md
CHANGED
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/index.md
CHANGED
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`).
|
package/rules/rego/docs/index.md
CHANGED
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
|
## Поведінка
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
---
|
|
2
|
+
type: JS Module
|
|
3
|
+
title: tooling.mjs
|
|
4
|
+
resource: npm/rules/rego/js/tooling.mjs
|
|
5
|
+
docgen:
|
|
6
|
+
crc: 4c098cd0
|
|
7
|
+
model: omlx/gemma-4-e4b-it-OptiQ-4bit
|
|
8
|
+
score: 100
|
|
9
|
+
---
|
|
10
|
+
|
|
11
|
+
Перевіряє наявність конфігураційного файлу `.regal/config.yaml` у корені проєкту. Ця функція визначає можливість подальшої ініціалізації системи. У разі відсутності файлу, повертає повідомлення, що вимагає створення конфігураційного файлу (rego.mdc).
|
|
12
|
+
|
|
13
|
+
## Поведінка
|
|
14
|
+
|
|
15
|
+
1. Викликає перевірку на наявність файлу `.regal/config.yaml` у корені проєкту.
|
|
16
|
+
2. Якщо файл `.regal/config.yaml` існує, повідомляє про успіх (rego.mdc).
|
|
17
|
+
3. Якщо файл `.regal/config.yaml` не існує, повідомляє про помилку та рекомендує створити його у корені проєкту (rego.mdc).
|
|
18
|
+
4. Повертає код виходу, що відображає загальний статус перевірки.
|
|
19
|
+
|
|
20
|
+
## Публічний API
|
|
21
|
+
|
|
22
|
+
check — констатує наявність файлу `.regal/config.yaml` у корені проєкту (rego.mdc).
|
|
23
|
+
|
|
24
|
+
## Гарантії поведінки
|
|
25
|
+
|
|
26
|
+
- Read-only: не виконує операцій запису (ФС/БД).
|
|
@@ -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-порушення.
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
/** @see ./docs/tooling.md */
|
|
2
|
+
import { existsSync } from 'node:fs'
|
|
3
|
+
import { join } from 'node:path'
|
|
4
|
+
|
|
5
|
+
import { createCheckReporter } from '../../../scripts/lib/check-reporter.mjs'
|
|
6
|
+
|
|
7
|
+
/**
|
|
8
|
+
* Перевіряє наявність `.regal/config.yaml` у корені проєкту.
|
|
9
|
+
* @param {string} [cwd] корінь репозиторію
|
|
10
|
+
* @returns {Promise<number>} 0 — все OK, 1 — є проблеми
|
|
11
|
+
*/
|
|
12
|
+
export async function check(cwd = process.cwd()) {
|
|
13
|
+
const reporter = createCheckReporter()
|
|
14
|
+
const { pass, fail } = reporter
|
|
15
|
+
|
|
16
|
+
const regalConfig = join(cwd, '.regal', 'config.yaml')
|
|
17
|
+
if (existsSync(regalConfig)) {
|
|
18
|
+
pass('.regal/config.yaml існує (rego.mdc)')
|
|
19
|
+
} else {
|
|
20
|
+
fail('.regal/config.yaml не існує — створи у корені проєкту (rego.mdc)')
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
return reporter.getExitCode()
|
|
24
|
+
}
|
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`.
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
# Перевірка `package.json` (rego.mdc / rego-lint.mdc).
|
|
2
|
+
#
|
|
3
|
+
# `opa` і `regal` не додаються у dependencies / devDependencies — вони мають бути
|
|
4
|
+
# лише у PATH (встановлені глобально або через CI-крок). Rego-лінт запускається
|
|
5
|
+
# через `n-cursor lint rego`, а не через package.json-залежності.
|
|
6
|
+
package rego.package_json
|
|
7
|
+
|
|
8
|
+
import rego.v1
|
|
9
|
+
|
|
10
|
+
banned_opa_tools := {"opa", "regal"}
|
|
11
|
+
|
|
12
|
+
deny contains msg if {
|
|
13
|
+
some field in {"dependencies", "devDependencies", "peerDependencies"}
|
|
14
|
+
deps := object.get(input, field, {})
|
|
15
|
+
some name, _ in deps
|
|
16
|
+
name in banned_opa_tools
|
|
17
|
+
msg := sprintf(
|
|
18
|
+
"package.json: %s.%s заборонений — opa/regal встановлюються глобально або через CI, не через npm (rego.mdc)",
|
|
19
|
+
[field, name]
|
|
20
|
+
)
|
|
21
|
+
}
|
|
@@ -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/index.md
CHANGED
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-проєктів.
|
|
@@ -48,6 +48,30 @@ deny contains msg if {
|
|
|
48
48
|
msg := sprintf("lint-rust.yml: жоден крок run не містить %q (rust.mdc)", [expected_run])
|
|
49
49
|
}
|
|
50
50
|
|
|
51
|
+
# Крок dtolnay/rust-toolchain@stable має мати with.components з rustfmt і clippy.
|
|
52
|
+
toolchain_step(step) if {
|
|
53
|
+
uses := object.get(step, "uses", "")
|
|
54
|
+
startswith(uses, "dtolnay/rust-toolchain@")
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
deny contains msg if {
|
|
58
|
+
some job in object.get(input, "jobs", {})
|
|
59
|
+
some step in object.get(job, "steps", [])
|
|
60
|
+
toolchain_step(step)
|
|
61
|
+
components := object.get(object.get(step, "with", {}), "components", "")
|
|
62
|
+
not contains(components, "rustfmt")
|
|
63
|
+
msg := "lint-rust.yml: dtolnay/rust-toolchain step потребує with.components: rustfmt, clippy (rust.mdc)"
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
deny contains msg if {
|
|
67
|
+
some job in object.get(input, "jobs", {})
|
|
68
|
+
some step in object.get(job, "steps", [])
|
|
69
|
+
toolchain_step(step)
|
|
70
|
+
components := object.get(object.get(step, "with", {}), "components", "")
|
|
71
|
+
not contains(components, "clippy")
|
|
72
|
+
msg := "lint-rust.yml: dtolnay/rust-toolchain step потребує with.components: rustfmt, clippy (rust.mdc)"
|
|
73
|
+
}
|
|
74
|
+
|
|
51
75
|
step_run_to_text(step) := step.run if is_string(step.run)
|
|
52
76
|
|
|
53
77
|
else := concat("\n", [s | some s in step.run]) if is_array(step.run)
|