@nitra/cursor 12.8.2 → 12.8.4
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/CHANGELOG.md +12 -0
- package/bin/n-cursor.js +1 -1
- package/package.json +1 -1
- package/rules/js/docs/index.md +3 -3
- package/rules/js/docs/main.md +6 -6
- package/rules/js/js/docs/check.md +12 -17
- package/rules/js/js/docs/index.md +4 -4
- package/rules/js/js/docs/tooling.md +8 -8
- package/rules/js/js/docs/utils_imports.md +21 -200
- package/rules/npm-module/js/docs/index.md +5 -5
- package/rules/npm-module/js/docs/rule_meta.md +13 -13
- package/rules/npm-module/js/docs/skill_meta.md +19 -9
- package/rules/npm-module/js/rule_meta.mjs +9 -9
- package/rules/npm-module/js/skill_meta.mjs +6 -6
- package/rules/{style-lint → style}/docs/fix.md +1 -1
- package/rules/{style-lint → style}/docs/index.md +3 -3
- package/rules/{style-lint → style}/docs/main.md +1 -1
- package/rules/{style-lint → style}/js/docs/index.md +3 -3
- package/rules/{style-lint → style}/js/docs/tooling.md +3 -3
- package/rules/{style-lint → style}/js/tooling.mjs +1 -1
- package/rules/{style-lint/style-lint.mdc → style/main.mdc} +3 -3
- package/rules/{style-lint → style}/policy/lint_style_yml/lint_style_yml.rego +2 -2
- package/rules/{style-lint → style}/policy/lint_style_yml/template/lint-style.yml.snippet.yml +1 -1
- package/rules/{style-lint → style}/policy/package_json/package_json.rego +3 -3
- package/rules/{style-lint → style}/policy/vscode_extensions/vscode_extensions.rego +2 -2
- package/rules/{style-lint → style}/policy/vscode_settings/vscode_settings.rego +2 -2
- package/rules/test/js/docs/index.md +7 -7
- package/rules/test/js/docs/stryker_config.md +18 -35
- package/rules/test/js/docs/vitest-config-pool-forks.md +14 -12
- package/schemas/v8r-catalog.json +4 -4
- package/scripts/docs/index.md +16 -16
- package/scripts/docs/sync-setup-bun-deps-action.md +13 -14
- package/scripts/lib/check-mdc-template-refs.mjs +2 -2
- package/scripts/lib/docs/check-mdc-template-refs.md +12 -214
- package/scripts/lib/docs/gha-workflow.md +1 -1
- package/scripts/lib/docs/index.md +36 -36
- package/scripts/lib/docs/mirror-parity.md +18 -157
- package/scripts/lib/docs/rule-meta.md +19 -22
- package/scripts/lib/docs/run-rule.md +11 -11
- package/scripts/lib/docs/skill-meta.md +17 -19
- package/scripts/lib/docs/timing-summary.md +6 -6
- package/scripts/lib/gha-workflow.mjs +1 -1
- package/scripts/lib/mirror-parity.mjs +1 -1
- package/scripts/lib/rule-meta.mjs +1 -1
- package/scripts/lib/run-rule.mjs +4 -4
- package/scripts/lib/skill-meta.mjs +1 -1
- package/scripts/utils/docs/index.md +14 -14
- package/scripts/utils/docs/resolve-js-root.md +12 -13
- /package/rules/abie/{meta.json → main.json} +0 -0
- /package/rules/abie/{abie.mdc → main.mdc} +0 -0
- /package/rules/adr/{meta.json → main.json} +0 -0
- /package/rules/adr/{adr.mdc → main.mdc} +0 -0
- /package/rules/bun/{meta.json → main.json} +0 -0
- /package/rules/bun/{bun.mdc → main.mdc} +0 -0
- /package/rules/capacitor/{meta.json → main.json} +0 -0
- /package/rules/capacitor/{capacitor.mdc → main.mdc} +0 -0
- /package/rules/changelog/{meta.json → main.json} +0 -0
- /package/rules/changelog/{changelog.mdc → main.mdc} +0 -0
- /package/rules/ci4/{meta.json → main.json} +0 -0
- /package/rules/ci4/{ci4.mdc → main.mdc} +0 -0
- /package/rules/doc-files/{meta.json → main.json} +0 -0
- /package/rules/doc-files/{doc-files.mdc → main.mdc} +0 -0
- /package/rules/docker/{meta.json → main.json} +0 -0
- /package/rules/docker/{docker.mdc → main.mdc} +0 -0
- /package/rules/efes/{meta.json → main.json} +0 -0
- /package/rules/efes/{efes.mdc → main.mdc} +0 -0
- /package/rules/feedback/{meta.json → main.json} +0 -0
- /package/rules/feedback/{feedback.mdc → main.mdc} +0 -0
- /package/rules/ga/{meta.json → main.json} +0 -0
- /package/rules/ga/{ga.mdc → main.mdc} +0 -0
- /package/rules/graphql/{meta.json → main.json} +0 -0
- /package/rules/graphql/{graphql.mdc → main.mdc} +0 -0
- /package/rules/hasura/{meta.json → main.json} +0 -0
- /package/rules/hasura/{hasura.mdc → main.mdc} +0 -0
- /package/rules/image-avif/{meta.json → main.json} +0 -0
- /package/rules/image-avif/{image-avif.mdc → main.mdc} +0 -0
- /package/rules/image-compress/{meta.json → main.json} +0 -0
- /package/rules/image-compress/{image-compress.mdc → main.mdc} +0 -0
- /package/rules/js/{meta.json → main.json} +0 -0
- /package/rules/js/{js.mdc → main.mdc} +0 -0
- /package/rules/js-bun-db/{meta.json → main.json} +0 -0
- /package/rules/js-bun-db/{js-bun-db.mdc → main.mdc} +0 -0
- /package/rules/js-bun-redis/{meta.json → main.json} +0 -0
- /package/rules/js-bun-redis/{js-bun-redis.mdc → main.mdc} +0 -0
- /package/rules/js-mssql/{meta.json → main.json} +0 -0
- /package/rules/js-mssql/{js-mssql.mdc → main.mdc} +0 -0
- /package/rules/js-run/{meta.json → main.json} +0 -0
- /package/rules/js-run/{js-run.mdc → main.mdc} +0 -0
- /package/rules/k8s/{meta.json → main.json} +0 -0
- /package/rules/k8s/{k8s.mdc → main.mdc} +0 -0
- /package/rules/nginx-default-tpl/{meta.json → main.json} +0 -0
- /package/rules/nginx-default-tpl/{nginx-default-tpl.mdc → main.mdc} +0 -0
- /package/rules/npm-module/{meta.json → main.json} +0 -0
- /package/rules/npm-module/{npm-module.mdc → main.mdc} +0 -0
- /package/rules/php/{meta.json → main.json} +0 -0
- /package/rules/php/{php.mdc → main.mdc} +0 -0
- /package/rules/python/{meta.json → main.json} +0 -0
- /package/rules/python/{python.mdc → main.mdc} +0 -0
- /package/rules/rego/{meta.json → main.json} +0 -0
- /package/rules/rego/{rego.mdc → main.mdc} +0 -0
- /package/rules/release/{meta.json → main.json} +0 -0
- /package/rules/release/{release.mdc → main.mdc} +0 -0
- /package/rules/rust/{meta.json → main.json} +0 -0
- /package/rules/rust/{rust.mdc → main.mdc} +0 -0
- /package/rules/security/{meta.json → main.json} +0 -0
- /package/rules/security/{security.mdc → main.mdc} +0 -0
- /package/rules/{style-lint/meta.json → style/main.json} +0 -0
- /package/rules/{style-lint → style}/main.mjs +0 -0
- /package/rules/{style-lint → style}/policy/lint_style_yml/target.json +0 -0
- /package/rules/{style-lint → style}/policy/package_json/target.json +0 -0
- /package/rules/{style-lint → style}/policy/package_json/template/package.json.snippet.json +0 -0
- /package/rules/{style-lint → style}/policy/vscode_extensions/target.json +0 -0
- /package/rules/{style-lint → style}/policy/vscode_extensions/template/extensions.json.snippet.json +0 -0
- /package/rules/{style-lint → style}/policy/vscode_settings/target.json +0 -0
- /package/rules/{style-lint → style}/policy/vscode_settings/template/settings.json.snippet.json +0 -0
- /package/rules/tauri/{meta.json → main.json} +0 -0
- /package/rules/tauri/{tauri.mdc → main.mdc} +0 -0
- /package/rules/test/{meta.json → main.json} +0 -0
- /package/rules/test/{test.mdc → main.mdc} +0 -0
- /package/rules/text/{meta.json → main.json} +0 -0
- /package/rules/text/{text.mdc → main.mdc} +0 -0
- /package/rules/tool-surface/{meta.json → main.json} +0 -0
- /package/rules/tool-surface/{tool-surface.mdc → main.mdc} +0 -0
- /package/rules/vue/{meta.json → main.json} +0 -0
- /package/rules/vue/{vue.mdc → main.mdc} +0 -0
- /package/rules/worktree/{meta.json → main.json} +0 -0
- /package/rules/worktree/{worktree.mdc → main.mdc} +0 -0
- /package/skills/adr-normalize/{meta.json → main.json} +0 -0
- /package/skills/coverage-fix/{meta.json → main.json} +0 -0
- /package/skills/doc-aggregate/{meta.json → main.json} +0 -0
- /package/skills/doc-files/{meta.json → main.json} +0 -0
- /package/skills/lint/{meta.json → main.json} +0 -0
- /package/skills/llm-patch/{meta.json → main.json} +0 -0
- /package/skills/publish-telegram/{meta.json → main.json} +0 -0
- /package/skills/start-check/{meta.json → main.json} +0 -0
- /package/skills/taze/{meta.json → main.json} +0 -0
|
@@ -15,15 +15,15 @@ import { parseSkillAutoSpec, readSkillMetaRaw } from '../../../scripts/lib/skill
|
|
|
15
15
|
function checkSkillFields(id, raw, reporter) {
|
|
16
16
|
let ok = true
|
|
17
17
|
if (typeof raw.worktree !== 'boolean') {
|
|
18
|
-
reporter.fail(`skills/${id}:
|
|
18
|
+
reporter.fail(`skills/${id}: main.json.worktree має бути boolean`)
|
|
19
19
|
ok = false
|
|
20
20
|
}
|
|
21
21
|
if (raw.auto !== undefined && parseSkillAutoSpec(raw.auto) === null) {
|
|
22
|
-
reporter.fail(`skills/${id}:
|
|
22
|
+
reporter.fail(`skills/${id}: main.json.auto нерозпізнане — очікується "завжди" або непорожній масив правил`)
|
|
23
23
|
ok = false
|
|
24
24
|
}
|
|
25
25
|
if (raw.requireRoot !== undefined && typeof raw.requireRoot !== 'boolean') {
|
|
26
|
-
reporter.fail(`skills/${id}:
|
|
26
|
+
reporter.fail(`skills/${id}: main.json.requireRoot має бути boolean`)
|
|
27
27
|
ok = false
|
|
28
28
|
}
|
|
29
29
|
if (raw.worktree === true && raw.requireRoot === false) {
|
|
@@ -46,20 +46,20 @@ function checkSkill(id, skillDir, reporter) {
|
|
|
46
46
|
let skillOk = true
|
|
47
47
|
|
|
48
48
|
if (existsSync(join(skillDir, 'auto.md'))) {
|
|
49
|
-
reporter.fail(`skills/${id}: залишковий auto.md — видали (метадані тепер у
|
|
49
|
+
reporter.fail(`skills/${id}: залишковий auto.md — видали (метадані тепер у main.json)`)
|
|
50
50
|
skillOk = false
|
|
51
51
|
}
|
|
52
52
|
|
|
53
53
|
const raw = readSkillMetaRaw(skillDir)
|
|
54
54
|
if (!raw) {
|
|
55
|
-
reporter.fail(`skills/${id}: відсутній або невалідний
|
|
55
|
+
reporter.fail(`skills/${id}: відсутній або невалідний main.json (очікується {"auto"?, "worktree": bool})`)
|
|
56
56
|
return
|
|
57
57
|
}
|
|
58
58
|
|
|
59
59
|
if (!checkSkillFields(id, raw, reporter)) skillOk = false
|
|
60
60
|
|
|
61
61
|
if (skillOk) {
|
|
62
|
-
reporter.pass(`skills/${id}:
|
|
62
|
+
reporter.pass(`skills/${id}: main.json валідний`)
|
|
63
63
|
}
|
|
64
64
|
}
|
|
65
65
|
|
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
---
|
|
2
2
|
type: Directory Index
|
|
3
|
-
title: npm/rules/style
|
|
4
|
-
resource: npm/rules/style
|
|
3
|
+
title: npm/rules/style
|
|
4
|
+
resource: npm/rules/style/
|
|
5
5
|
---
|
|
6
6
|
|
|
7
|
-
# npm/rules/style
|
|
7
|
+
# npm/rules/style
|
|
8
8
|
|
|
9
9
|
| Файл | Тип |
|
|
10
10
|
| ------------------- | --------- |
|
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
---
|
|
2
2
|
type: Directory Index
|
|
3
|
-
title: npm/rules/style
|
|
4
|
-
resource: npm/rules/style
|
|
3
|
+
title: npm/rules/style/js
|
|
4
|
+
resource: npm/rules/style/js/
|
|
5
5
|
---
|
|
6
6
|
|
|
7
|
-
# npm/rules/style
|
|
7
|
+
# npm/rules/style/js
|
|
8
8
|
|
|
9
9
|
| Файл | Тип |
|
|
10
10
|
| ------------------------- | --------- |
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
---
|
|
2
2
|
type: JS Module
|
|
3
3
|
title: tooling.mjs
|
|
4
|
-
resource: npm/rules/style
|
|
4
|
+
resource: npm/rules/style/js/tooling.mjs
|
|
5
5
|
docgen:
|
|
6
|
-
crc:
|
|
6
|
+
crc: bc2b0934
|
|
7
7
|
score: 80
|
|
8
8
|
---
|
|
9
9
|
|
|
@@ -18,7 +18,7 @@ docgen:
|
|
|
18
18
|
|
|
19
19
|
## Публічний API
|
|
20
20
|
|
|
21
|
-
check — Перевіряє відповідність проєкту правилам style
|
|
21
|
+
check — Перевіряє відповідність проєкту правилам style.mdc
|
|
22
22
|
|
|
23
23
|
## Гарантії поведінки
|
|
24
24
|
|
|
@@ -44,7 +44,7 @@ async function checkStylelintConfigPresence(reporter, cwd) {
|
|
|
44
44
|
// `npx @nitra/cursor fix`. JS-копії видалено, щоб не було двох джерел істини.
|
|
45
45
|
|
|
46
46
|
/**
|
|
47
|
-
* Перевіряє відповідність проєкту правилам style
|
|
47
|
+
* Перевіряє відповідність проєкту правилам style.mdc
|
|
48
48
|
* @param {string} [cwd] корінь репозиторію
|
|
49
49
|
* @returns {Promise<number>} 0 — все OK, 1 — є проблеми
|
|
50
50
|
*/
|
|
@@ -95,7 +95,7 @@ $white-a1: color.adjust(white, $alpha: -0.85);
|
|
|
95
95
|
|
|
96
96
|
- **Джерело правил:** перед тим як писати або суттєво змінювати **`.css`**, **`.scss`** або стилі в **`.vue`**, переглянь у корені проєкту (і в релевантних пакетах монорепо, якщо є) поле **`stylelint`** у **`package.json`** (зокрема `extends`), наявні **`.stylelintrc.*`**, **`stylelint.config.*`** та **`.stylelintignore`**. Не покладайся на «типові» правила stylelint з пам’яті — дотримуйся **проєктного** **`@nitra/stylelint-config`** і будь-яких локальних доповнень у репозиторії.
|
|
97
97
|
- **Форматування** узгоджуй з **`n-text.mdc`** (oxfmt / `.oxfmtrc.json` для css, scss тощо), щоб форматер і stylelint не суперечили один одному.
|
|
98
|
-
- **Запуск stylelint:** лише через **`n-cursor lint style
|
|
98
|
+
- **Запуск stylelint:** лише через **`n-cursor lint style`** (локально — з auto-fix; у CI — `--read-only`, нуль мутацій). Під капотом — `npx stylelint`; **не** використовуй **`bunx stylelint`**. Після змін запускай **`n-cursor lint style`** і виправляй усе, що лишилось після auto-fix; за потреби — повний прогін `n-cursor lint --full`.
|
|
99
99
|
- **Не розширюй винятки:** не додавай зайві **`stylelint-disable`** без потреби; краще підлаштувати стилі під правила проєкту.
|
|
100
100
|
|
|
101
101
|
## Канон
|
|
@@ -104,7 +104,7 @@ $white-a1: color.adjust(white, $alpha: -0.85);
|
|
|
104
104
|
|
|
105
105
|
- `stylelint.extends`: [package.json.snippet.json](./policy/package_json/template/package.json.snippet.json)
|
|
106
106
|
|
|
107
|
-
Окремого `lint-style` скрипта немає — запуск через **`n-cursor lint style
|
|
107
|
+
Окремого `lint-style` скрипта немає — запуск через **`n-cursor lint style`** (CI — `--read-only`).
|
|
108
108
|
|
|
109
109
|
### `.vscode/extensions.json`
|
|
110
110
|
|
|
@@ -129,7 +129,7 @@ $white-a1: color.adjust(white, $alpha: -0.85);
|
|
|
129
129
|
},
|
|
130
130
|
```
|
|
131
131
|
|
|
132
|
-
Додай **`.github/workflows/lint-style.yml`** (лише **`.yml`**, **`ga.mdc`**): після **`checkout`** — локальний composite **`setup-bun-deps`**, далі `n-cursor lint style
|
|
132
|
+
Додай **`.github/workflows/lint-style.yml`** (лише **`.yml`**, **`ga.mdc`**): після **`checkout`** — локальний composite **`setup-bun-deps`**, далі `n-cursor lint style --read-only` у кроці **`run`**. **Не** дублюй окремі кроки **`setup-node`** / **`oven-sh/setup-bun`** / кеш / **`npm install`**.
|
|
133
133
|
|
|
134
134
|
```yaml title=".github/workflows/lint-style.yml"
|
|
135
135
|
name: StyleLint
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
# Перевірка `lint-style.yml` (style
|
|
1
|
+
# Перевірка `lint-style.yml` (style.mdc).
|
|
2
2
|
#
|
|
3
3
|
# Канон надходить через --data: { "template": { "snippet": ... } }
|
|
4
4
|
# Структура --data сформована з template/lint-style.yml.snippet.yml.
|
|
@@ -23,7 +23,7 @@ all_run_text := concat("\n", [run_text |
|
|
|
23
23
|
deny contains msg if {
|
|
24
24
|
expected_run_blob != ""
|
|
25
25
|
not contains(all_run_text, expected_run_blob)
|
|
26
|
-
msg := sprintf("lint-style.yml: жоден крок run не містить %q (style
|
|
26
|
+
msg := sprintf("lint-style.yml: жоден крок run не містить %q (style.mdc)", [expected_run_blob])
|
|
27
27
|
}
|
|
28
28
|
|
|
29
29
|
step_run_to_text(step) := step.run if is_string(step.run)
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
# Порт перевірок `package.json` (style
|
|
1
|
+
# Порт перевірок `package.json` (style.mdc).
|
|
2
2
|
#
|
|
3
3
|
# Канон надходить через --data: { "template": { "contains": ..., "snippet": ... } }
|
|
4
4
|
# Структура --data сформована з template/package.json.{contains,snippet}.json.
|
|
@@ -19,7 +19,7 @@ deny contains msg if {
|
|
|
19
19
|
some leaf_key, expected_value in expected_inner
|
|
20
20
|
actual := object.get(cfg, leaf_key, null)
|
|
21
21
|
actual != expected_value
|
|
22
|
-
msg := sprintf("package.json: %s.%s має бути %q (style
|
|
22
|
+
msg := sprintf("package.json: %s.%s має бути %q (style.mdc)", [section, leaf_key, expected_value])
|
|
23
23
|
}
|
|
24
24
|
|
|
25
25
|
# ── deny: @nitra/stylelint-config у devDependencies (inverse) ────────────
|
|
@@ -27,5 +27,5 @@ deny contains msg if {
|
|
|
27
27
|
deny contains msg if {
|
|
28
28
|
dev := object.get(input, "devDependencies", {})
|
|
29
29
|
not "@nitra/stylelint-config" in object.keys(dev)
|
|
30
|
-
msg := "@nitra/stylelint-config відсутній — bun add -d @nitra/stylelint-config (style
|
|
30
|
+
msg := "@nitra/stylelint-config відсутній — bun add -d @nitra/stylelint-config (style.mdc)"
|
|
31
31
|
}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
# Перевірка `.vscode/extensions.json` для style
|
|
1
|
+
# Перевірка `.vscode/extensions.json` для style (style.mdc).
|
|
2
2
|
#
|
|
3
3
|
# Канон надходить через --data: { "template": { "snippet": ... } }
|
|
4
4
|
# Структура --data сформована з template/extensions.json.snippet.json.
|
|
@@ -9,5 +9,5 @@ import rego.v1
|
|
|
9
9
|
deny contains msg if {
|
|
10
10
|
some rec in data.template.snippet.recommendations
|
|
11
11
|
not rec in {r | some r in object.get(input, "recommendations", [])}
|
|
12
|
-
msg := sprintf(".vscode/extensions.json: recommendations має містити %q (style
|
|
12
|
+
msg := sprintf(".vscode/extensions.json: recommendations має містити %q (style.mdc)", [rec])
|
|
13
13
|
}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
# Перевірка `.vscode/settings.json` для style
|
|
1
|
+
# Перевірка `.vscode/settings.json` для style (style.mdc).
|
|
2
2
|
#
|
|
3
3
|
# Канон надходить через --data: { "template": { "snippet": ... } }
|
|
4
4
|
# Структура --data сформована з template/settings.json.snippet.json.
|
|
@@ -11,5 +11,5 @@ deny contains msg if {
|
|
|
11
11
|
some key, expected_value in data.template.snippet
|
|
12
12
|
actual := object.get(input, key, null)
|
|
13
13
|
actual != expected_value
|
|
14
|
-
msg := sprintf(".vscode/settings.json: \"%s\" має бути %v (style
|
|
14
|
+
msg := sprintf(".vscode/settings.json: \"%s\" має бути %v (style.mdc)", [key, expected_value])
|
|
15
15
|
}
|
|
@@ -6,11 +6,11 @@ resource: npm/rules/test/js/
|
|
|
6
6
|
|
|
7
7
|
# npm/rules/test/js
|
|
8
8
|
|
|
9
|
-
| Файл
|
|
10
|
-
|
|
11
|
-
| [cargo_mutants_config.mjs](cargo_mutants_config.md)
|
|
12
|
-
| [location.mjs](location.md)
|
|
13
|
-
| [no-process-chdir.mjs](no-process-chdir.md)
|
|
14
|
-
| [no-relative-fs-path.mjs](no-relative-fs-path.md)
|
|
15
|
-
| [stryker_config.mjs](stryker_config.md)
|
|
9
|
+
| Файл | Тип |
|
|
10
|
+
|---|---|
|
|
11
|
+
| [cargo_mutants_config.mjs](cargo_mutants_config.md) | JS Module |
|
|
12
|
+
| [location.mjs](location.md) | JS Module |
|
|
13
|
+
| [no-process-chdir.mjs](no-process-chdir.md) | JS Module |
|
|
14
|
+
| [no-relative-fs-path.mjs](no-relative-fs-path.md) | JS Module |
|
|
15
|
+
| [stryker_config.mjs](stryker_config.md) | JS Module |
|
|
16
16
|
| [vitest-config-pool-forks.mjs](vitest-config-pool-forks.md) | JS Module |
|
|
@@ -3,48 +3,31 @@ type: JS Module
|
|
|
3
3
|
title: stryker_config.mjs
|
|
4
4
|
resource: npm/rules/test/js/stryker_config.mjs
|
|
5
5
|
docgen:
|
|
6
|
-
crc:
|
|
7
|
-
|
|
6
|
+
crc: be62c446
|
|
7
|
+
model: omlx/gemma-4-e4b-it-OptiQ-4bit
|
|
8
|
+
score: 100
|
|
8
9
|
---
|
|
9
10
|
|
|
10
|
-
|
|
11
|
+
## Огляд
|
|
12
|
+
|
|
13
|
+
Модуль ініціалізує та налаштовує середовище для покриття коду, перевіряючи конфігурації, зокрема `mutation.json` та `package.json`. Він створює або оновлює конфігураційні файли Stryker, Vue-макросів та Vitest для кожного знайденого кореневого каталогу JavaScript. Функція `check` виконує перевірку, ігноруючи каталоги `node_modules`. Поведінка модуля фіксується за маркером (test.mdc). Модуль перехоплює помилки (fail-safe) і не кидає винятків назовні.
|
|
11
14
|
|
|
12
15
|
## Поведінка
|
|
13
16
|
|
|
14
|
-
1.
|
|
15
|
-
2.
|
|
16
|
-
3.
|
|
17
|
-
4.
|
|
18
|
-
5. Для кожного кореневого
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
13. Для кожного кореневого пакета перевірити наявність базових базлайн-файлів.
|
|
27
|
-
14. Для кожного кореневого пакета перевірити наявність `stryker.config.mjs`.
|
|
28
|
-
15. Для кожного кореневого пакета перевірити наявність `vitest.config.mjs` або `vitest.config.js`.
|
|
29
|
-
16. Для кожного кореневого пакета перевірити наявність базових базлайн-файлів.
|
|
30
|
-
17. Для кожного кореневого пакета перевірити наявність `stryker.config.mjs`.
|
|
31
|
-
18. Для кожного кореневого пакета перевірити наявність `vitest.config.mjs` або `vitest.config.js`.
|
|
32
|
-
19. Для кожного кореневого пакета перевірити наявність базових базлайн-файлів.
|
|
33
|
-
20. Для кожного кореневого пакета перевірити наявність `stryker.config.mjs`.
|
|
34
|
-
21. Для кожного кореневого пакета перевірити наявність `vitest.config.mjs` або `vitest.config.js`.
|
|
35
|
-
22. Для кожного кореневого пакета перевірити наявність базових базлайн-файлів.
|
|
36
|
-
23. Для кожного кореневого пакета перевірити наявність `stryker.config.mjs`.
|
|
37
|
-
24. Для кожного кореневого пакета перевірити наявність `vitest.config.mjs` або `vitest.config.js`.
|
|
38
|
-
25. Для кожного кореневого пакета перевірити наявність базових базлайн-файлів.
|
|
39
|
-
26. Для кожного кореневого пакета перевірити наявність `stryker.config.mjs`.
|
|
40
|
-
27. Для кожного кореневого пакета перевірити наявність `vitest.config.mjs` або `vitest.config.js`.
|
|
41
|
-
28. Для кожного кореневого пакета перевірити наявність базових базлайн-файлів.
|
|
42
|
-
29. Для кожного кореневого пакета перевірити наявність `stryker.config.mjs`.
|
|
43
|
-
30. Для кожного кореневого пакета перевірити наявність `vitest.config.mjs` або `vitest.config.js`.
|
|
17
|
+
1. Викликається `check` для ініціалізації процесу перевірки.
|
|
18
|
+
2. Перевіряється, чи у конфігурації дозволено перевірку JavaScript. Якщо ні, процес завершується успішно.
|
|
19
|
+
3. Знаходяться всі кореневі каталоги JavaScript у робочому просторі. Якщо їх немає, процес завершується з помилкою.
|
|
20
|
+
4. Перевіряється наявність усіх канонічних базових конфігураційних файлів. Якщо хоча б один відсутній, процес завершується з помилкою.
|
|
21
|
+
5. Для кожного знайденого кореневого каталогу JavaScript:
|
|
22
|
+
а. Визначається, чи містить цей каталог файли Vue.
|
|
23
|
+
б. Створюється або оновлюється конфігураційний файл Stryker для цього каталогу. Якщо файл відсутній, він копіюється з канонічного базового файлу, замінюючи ім'я конфігурації Vitest на фактичне ім'я конфігу каталогу. Якщо файл існує, він залишається без змін.
|
|
24
|
+
в. Якщо каталог містить файли Vue і конфігураційний файл Stryker вже існував, виконується аугментація конфігурації. Це додає локальний плагін Vue-макросів до конфігурації Stryker, якщо він відсутній.
|
|
25
|
+
г. Створюється або оновлюється конфігураційний файл плагіна Vue-макросів.
|
|
26
|
+
д. Створюється або оновлюється конфігураційний файл Vitest для каталогу, використовуючи фактичне ім'я конфігу.
|
|
27
|
+
6. Виконується гарантія, що файли з результатами тестів Stryker та покриття (lcov) не потрапляють у систему контролю версій. Якщо додаються нові патерни до `.gitignore`, це фіксується як успіх (test.mdc).
|
|
28
|
+
7. Процес завершується з кодом виходу, що відображає успіх або помилку.
|
|
44
29
|
|
|
45
30
|
## Гарантії поведінки
|
|
46
31
|
|
|
47
32
|
- Перехоплює помилки і не пропускає винятків назовні (fail-safe).
|
|
48
|
-
- За невдачі повертає значення помилки (`false`/`null`/`Err`) замість генерування винятку чи паніки.
|
|
49
33
|
- Свідомо пропускає шляхи: `node_modules`.
|
|
50
|
-
- Не звертається до мережі.
|
|
@@ -3,27 +3,29 @@ type: JS Module
|
|
|
3
3
|
title: vitest-config-pool-forks.mjs
|
|
4
4
|
resource: npm/rules/test/js/vitest-config-pool-forks.mjs
|
|
5
5
|
docgen:
|
|
6
|
-
crc:
|
|
6
|
+
crc: c8640fd7
|
|
7
|
+
model: omlx/gemma-4-e4b-it-OptiQ-4bit
|
|
7
8
|
score: 100
|
|
8
9
|
---
|
|
9
10
|
|
|
10
|
-
Огляд
|
|
11
|
-
|
|
11
|
+
## Огляд
|
|
12
|
+
|
|
13
|
+
Модуль визначає, чи встановлено режим `pool: 'forks'` у конфігураційному файлі Vitest. Перевірка здійснюється у `vitest.config.mjs` або `vitest.config.js` кореневого репозиторію. Це забезпечує коректну поведінку при паралельному запуску тестових файлів. Результат перевірки фіксується у test.mdc.
|
|
12
14
|
|
|
13
15
|
## Поведінка
|
|
14
16
|
|
|
15
|
-
1.
|
|
16
|
-
2. Якщо файл
|
|
17
|
-
3.
|
|
18
|
-
4.
|
|
19
|
-
5. Якщо
|
|
20
|
-
6. Якщо
|
|
17
|
+
1. Визначається назва конфігураційного файлу Vitest, шукаючи спочатку `vitest.config.mjs`, а потім `vitest.config.js` у корені репозиторію.
|
|
18
|
+
2. Якщо конфігураційний файл відсутній, виконується пропуск перевірки, і повертається код успіху.
|
|
19
|
+
3. Якщо конфігураційний файл знайдено, його вміст зчитується.
|
|
20
|
+
4. Перевіряється, чи містить вміст конфігураційного файлу рядок, що вказує на використання `pool: 'forks'`.
|
|
21
|
+
5. Якщо рядок знайдено, фіксується успіх (test.mdc).
|
|
22
|
+
6. Якщо рядок не знайдено, фіксується помилка (test.mdc), оскільки це необхідно для захисту від гонки у `process.cwd` між паралельними тестовими файлами.
|
|
23
|
+
7. Функція `check` повертає код виходу, що відображає результат перевірки (0 для успіху/пропуску, 1 для помилки).
|
|
21
24
|
|
|
22
25
|
## Публічний API
|
|
23
26
|
|
|
24
|
-
check —
|
|
27
|
+
check — перевіряє наявність конфігурації `pool: 'forks'` у файлі `vitest.config.{mjs,js}`. (test.mdc)
|
|
25
28
|
|
|
26
29
|
## Гарантії поведінки
|
|
27
30
|
|
|
28
|
-
- Read-only:
|
|
29
|
-
- Не звертається до мережі.
|
|
31
|
+
- Read-only: не виконує операцій запису (ФС/БД).
|
package/schemas/v8r-catalog.json
CHANGED
|
@@ -28,14 +28,14 @@
|
|
|
28
28
|
},
|
|
29
29
|
{
|
|
30
30
|
"name": "n-cursor skill meta",
|
|
31
|
-
"description": "Маніфест skill-пакета n-cursor (npm/skills/<id>/
|
|
32
|
-
"fileMatch": ["npm/skills/*/
|
|
31
|
+
"description": "Маніфест skill-пакета n-cursor (npm/skills/<id>/main.json) — назва, тригери, дозволи",
|
|
32
|
+
"fileMatch": ["npm/skills/*/main.json"],
|
|
33
33
|
"url": "https://unpkg.com/@nitra/cursor/schemas/skill-meta.json"
|
|
34
34
|
},
|
|
35
35
|
{
|
|
36
36
|
"name": "n-cursor rule meta",
|
|
37
|
-
"description": "Маніфест rule-пакета n-cursor (npm/rules/<id>/
|
|
38
|
-
"fileMatch": ["npm/rules/*/
|
|
37
|
+
"description": "Маніфест rule-пакета n-cursor (npm/rules/<id>/main.json) — назва, опис, версія правила",
|
|
38
|
+
"fileMatch": ["npm/rules/*/main.json"],
|
|
39
39
|
"url": "https://unpkg.com/@nitra/cursor/schemas/rule-meta.json"
|
|
40
40
|
}
|
|
41
41
|
]
|
package/scripts/docs/index.md
CHANGED
|
@@ -6,20 +6,20 @@ resource: npm/scripts/
|
|
|
6
6
|
|
|
7
7
|
# npm/scripts
|
|
8
8
|
|
|
9
|
-
| Файл
|
|
10
|
-
|
|
11
|
-
| [auto-rules.mjs](auto-rules.md)
|
|
12
|
-
| [auto-skills.mjs](auto-skills.md)
|
|
13
|
-
| [build-agents-commands.mjs](build-agents-commands.md)
|
|
14
|
-
| [cli-entry.mjs](cli-entry.md)
|
|
15
|
-
| [coverage-fix-extract.mjs](coverage-fix-extract.md)
|
|
16
|
-
| [coverage-fix.mjs](coverage-fix.md)
|
|
9
|
+
| Файл | Тип |
|
|
10
|
+
|---|---|
|
|
11
|
+
| [auto-rules.mjs](auto-rules.md) | JS Module |
|
|
12
|
+
| [auto-skills.mjs](auto-skills.md) | JS Module |
|
|
13
|
+
| [build-agents-commands.mjs](build-agents-commands.md) | JS Module |
|
|
14
|
+
| [cli-entry.mjs](cli-entry.md) | JS Module |
|
|
15
|
+
| [coverage-fix-extract.mjs](coverage-fix-extract.md) | JS Module |
|
|
16
|
+
| [coverage-fix.mjs](coverage-fix.md) | JS Module |
|
|
17
17
|
| [ensure-nitra-cursor-dev-dependencies.mjs](ensure-nitra-cursor-dev-dependencies.md) | JS Module |
|
|
18
|
-
| [post-tool-use-check.mjs](post-tool-use-check.md)
|
|
19
|
-
| [post-tool-use-fix.mjs](post-tool-use-fix.md)
|
|
20
|
-
| [rename-yaml-extensions.mjs](rename-yaml-extensions.md)
|
|
21
|
-
| [skills-cli.mjs](skills-cli.md)
|
|
22
|
-
| [sync-claude-config.mjs](sync-claude-config.md)
|
|
23
|
-
| [sync-setup-bun-deps-action.mjs](sync-setup-bun-deps-action.md)
|
|
24
|
-
| [upgrade-nitra-cursor-and-install.mjs](upgrade-nitra-cursor-and-install.md)
|
|
25
|
-
| [worktree-cli.mjs](worktree-cli.md)
|
|
18
|
+
| [post-tool-use-check.mjs](post-tool-use-check.md) | JS Module |
|
|
19
|
+
| [post-tool-use-fix.mjs](post-tool-use-fix.md) | JS Module |
|
|
20
|
+
| [rename-yaml-extensions.mjs](rename-yaml-extensions.md) | JS Module |
|
|
21
|
+
| [skills-cli.mjs](skills-cli.md) | JS Module |
|
|
22
|
+
| [sync-claude-config.mjs](sync-claude-config.md) | JS Module |
|
|
23
|
+
| [sync-setup-bun-deps-action.mjs](sync-setup-bun-deps-action.md) | JS Module |
|
|
24
|
+
| [upgrade-nitra-cursor-and-install.mjs](upgrade-nitra-cursor-and-install.md) | JS Module |
|
|
25
|
+
| [worktree-cli.mjs](worktree-cli.md) | JS Module |
|
|
@@ -3,28 +3,27 @@ type: JS Module
|
|
|
3
3
|
title: sync-setup-bun-deps-action.mjs
|
|
4
4
|
resource: npm/scripts/sync-setup-bun-deps-action.mjs
|
|
5
5
|
docgen:
|
|
6
|
-
crc:
|
|
6
|
+
crc: 327991b2
|
|
7
|
+
model: omlx/gemma-4-e4b-it-OptiQ-4bit
|
|
8
|
+
score: 100
|
|
7
9
|
---
|
|
8
10
|
|
|
9
|
-
|
|
11
|
+
## Огляд
|
|
12
|
+
|
|
13
|
+
Копіює composite GitHub Action `setup-bun-deps` з каталогу `github-actions/setup-bun-deps/` у цільовий репозиторій (`.github/actions/setup-bun-deps/`). Це забезпечує можливість робочим процесам з правил `ga`, `js` та `text` викликати локально розміщений action (`uses: ./.github/actions/setup-bun-deps`) одразу після виконання `actions/checkout@v6`, використовуючи CLI `npx \@nitra/cursor`.
|
|
10
14
|
|
|
11
15
|
## Поведінка
|
|
12
16
|
|
|
13
|
-
1.
|
|
14
|
-
2.
|
|
15
|
-
3.
|
|
16
|
-
4.
|
|
17
|
-
5.
|
|
18
|
-
6. Повертає об'єкт, що містить інформацію про успішність запису та повний шлях до створеного файлу.
|
|
17
|
+
1. Перевіряє наявність шаблону composite action у корені встановленого пакету `@nitra/cursor`.
|
|
18
|
+
2. Створює необхідну директорію для composite action у корені цільового репозиторію, ігноруючи шляхи `.github` та `.git`.
|
|
19
|
+
3. Зчитує вміст шаблону composite action.
|
|
20
|
+
4. Записує вміст шаблону у цільовий шлях composite action у корені цільового репозиторію, гарантуючи наявність завершального символу нового рядка.
|
|
21
|
+
5. Повертає підтвердження успішного запису та повний шлях до файлу.
|
|
19
22
|
|
|
20
23
|
## Публічний API
|
|
21
24
|
|
|
22
|
-
syncSetupBunDepsAction —
|
|
25
|
+
syncSetupBunDepsAction — фіксує в `projectRoot` композитну дію з коренем встановленого `@nitra/cursor`.
|
|
23
26
|
|
|
24
27
|
## Гарантії поведінки
|
|
25
28
|
|
|
26
|
-
-
|
|
27
|
-
- Забезпечує доступність action `setup-bun-deps` для workflow, що використовує `actions/checkout@v6`.
|
|
28
|
-
- Використовує `npx @nitra/cursor` для ініціалізації action.
|
|
29
|
-
- Не враховує наявність checkout runner.
|
|
30
|
-
- Не має кешування.
|
|
29
|
+
- Свідомо пропускає шляхи: `.github`, `.git`.
|
|
@@ -45,8 +45,8 @@ async function collectFiles(dir) {
|
|
|
45
45
|
* @param {string} ruleId basename правила (напр. "security")
|
|
46
46
|
* @returns {Promise<string[]>} відносні шляхи template-файлів без посилань у .mdc
|
|
47
47
|
*/
|
|
48
|
-
export async function findMissingMdcRefs(ruleDir
|
|
49
|
-
const mdcPath = join(ruleDir,
|
|
48
|
+
export async function findMissingMdcRefs(ruleDir) {
|
|
49
|
+
const mdcPath = join(ruleDir, 'main.mdc')
|
|
50
50
|
if (!existsSync(mdcPath)) return []
|
|
51
51
|
const mdc = await readFile(mdcPath, 'utf8')
|
|
52
52
|
const allFiles = await walkTemplateDirs(ruleDir)
|