@nitra/cursor 1.28.2 → 1.28.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 +14 -0
- package/package.json +1 -1
- package/rules/bun/bun.mdc +2 -2
- package/rules/bun/policy/package_json/package_json.rego +6 -3
- package/rules/efes/efes.mdc +5 -5
- package/rules/efes/policy/package_json_shared/package_json_shared.rego +16 -0
- package/rules/efes/policy/{package_json_docs → package_json_shared}/target.json +1 -1
- package/rules/graphql/graphql.mdc +1 -1
- package/rules/test/auto.md +1 -1
- package/scripts/auto-rules.mjs +2 -0
- package/rules/efes/policy/package_json_docs/package_json_docs.rego +0 -16
package/CHANGELOG.md
CHANGED
|
@@ -4,6 +4,20 @@
|
|
|
4
4
|
|
|
5
5
|
Формат — [Keep a Changelog](https://keepachangelog.com/uk/1.1.0/), нумерація — [SemVer](https://semver.org/lang/uk/).
|
|
6
6
|
|
|
7
|
+
## [1.28.4] - 2026-05-28
|
|
8
|
+
|
|
9
|
+
### Changed
|
|
10
|
+
|
|
11
|
+
- **`rules/test/auto.md` → `завжди`**, **`scripts/auto-rules.mjs`** — правило `test` тепер додається у `.n-cursor.json#rules` беззастережно (як `adr`/`security`/`text`), без вимоги наявності `*.test.mjs`. `AUTO_RULE_ORDER` отримало `test`; `addRule('test')` викликається з безумовного блоку. Тест `auto-rules.test.mjs` оновлено: `'test'` додано в `ALL_RULES` і в очікуваний результат «додає правила за ознаками проєкту». Мотивація — узгодження з `bun.mdc`-винятком на root-only Vitest/Stryker peer/tools: щоб умова «корінь єдине місце для `vitest`/`@vitest/coverage-v8`/`@stryker-mutator/vitest-runner`» була правдою у кожному споживачі `@nitra/cursor`, а не «лише у dog food-репо».
|
|
12
|
+
- **`rules/bun/bun.mdc`** (`version` 1.9 → 2.0) і дзеркало `.cursor/rules/n-bun.mdc` — переформульовано пункт про root-only Vitest/Stryker peer/tools: прибрано згадку «лише для dog food-репо `@nitra/cursor`», тепер виняток описано як **загальний** для будь-якого монорепо, що вмикає правило `test` і виконує `n-cursor coverage`. Структурна причина: published workspace-и за `npm-module.mdc` не мають `devDependencies`, а оркестратор coverage запускається з кореня. Збігається з фактичною поведінкою `policy/package_json/package_json.rego` (`allowed_root_test_deps` — глобальний whitelist, без перевірки імені репо).
|
|
13
|
+
- **`rules/bun/policy/package_json/package_json.rego`** — оновлено docstring модуля і коментар на `allowed_root_dev_dependency`: тепер посилаються на always-on `test/auto.md` + `npm-module.mdc`, без «dog food-прогонів». Логіка `allowed_root_test_deps` не змінилася — лише пояснення синхронізовано з `bun.mdc`.
|
|
14
|
+
|
|
15
|
+
## [1.28.3] - 2026-05-28
|
|
16
|
+
|
|
17
|
+
### Changed
|
|
18
|
+
|
|
19
|
+
- **`rules/efes/`** — слідом за перейменуванням `@nitra/efes-docs` → `@nitra/efes-shared` (репо `efes-cloud/docs` → `efes-cloud/shared`): rego-полісі `npm/rules/efes/policy/package_json_docs/` перейменовано на `package_json_shared/`, namespace `efes.package_json_docs` → `efes.package_json_shared`, перевірка тепер шукає `@nitra/efes-shared` у `devDependencies`. Оновлено `efes.mdc` (version `1.1` → `1.2`) та шлях до GraphQL-схеми у `graphql.mdc` (`node_modules/@nitra/efes-shared/schema/maya.graphql`). Споживачі efes-проєктів мають перейти на `@nitra/efes-shared`.
|
|
20
|
+
|
|
7
21
|
## [1.28.2] - 2026-05-28
|
|
8
22
|
|
|
9
23
|
### Changed
|
package/package.json
CHANGED
package/rules/bun/bun.mdc
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
description: Bun як єдиний package manager у монорепо
|
|
3
3
|
globs: "**/package.json,**/bunfig.toml,**/bun.lock,**/bun.lockb"
|
|
4
4
|
alwaysApply: false
|
|
5
|
-
version: '
|
|
5
|
+
version: '2.0'
|
|
6
6
|
---
|
|
7
7
|
|
|
8
8
|
Проект використовує тільки Bun для керування залежностями та запуску скриптів.
|
|
@@ -42,7 +42,7 @@ Lockfile у репозиторії: `bun.lock`.
|
|
|
42
42
|
- Якщо залежність потрібна лише одному пакету, додавати її в директорії цього пакета.
|
|
43
43
|
- У CI та локально запускати скрипти через `bun run`.
|
|
44
44
|
|
|
45
|
-
В кореневому
|
|
45
|
+
В кореневому `package.json` не повинно бути `dependencies`, а в `devDependencies` — тільки модулі `@nitra/*`. **Виняток (root-only)** — Vitest/Stryker peer/tools для `n-cursor coverage`: `vitest`, `@vitest/coverage-v8`, `@stryker-mutator/vitest-runner`. Тримати їх **у корені** доводиться у будь-якому монорепо-споживачі, бо правило `test` enabled завжди (`test/auto.md` = `завжди`), а класти ці пакети у workspace-и не можна: published пакети (`npm-module.mdc`) не мають мати `devDependencies`, а інші workspace-и однаково запускають coverage оркестратор з кореня. Якщо в package.json є поля `packageManager`, то прибрати їх, також прибрати всі директорії та файли для yarn.
|
|
46
46
|
|
|
47
47
|
- Заборонені top-level поля у root `package.json` (з причинами): [package.json.deny.json](./policy/package_json/template/package.json.deny.json)
|
|
48
48
|
|
|
@@ -5,7 +5,9 @@
|
|
|
5
5
|
# (top-level fields заборонені у root).
|
|
6
6
|
#
|
|
7
7
|
# Логіка, що ЛИШАЄТЬСЯ у rego (inverse-patterns, не виносяться у template):
|
|
8
|
-
# - `devDependencies` лише `@nitra/*` + root-only тестові peer/tools для
|
|
8
|
+
# - `devDependencies` лише `@nitra/*` + root-only тестові peer/tools для `n-cursor coverage`
|
|
9
|
+
# (правило `test` enabled завжди — див. `test/auto.md`; published workspace-и не мають
|
|
10
|
+
# `devDependencies` за `npm-module.mdc`)
|
|
9
11
|
# - Агрегований `lint` скрипт (cross-script aggregation logic)
|
|
10
12
|
#
|
|
11
13
|
# Перевірки, які ЗАЛИШИЛИСЬ у JS (потребують FS / cross-file):
|
|
@@ -71,8 +73,9 @@ allowed_root_test_deps := {"vitest", "@vitest/coverage-v8", "@stryker-mutator/vi
|
|
|
71
73
|
allowed_root_dev_dependency(name) if {
|
|
72
74
|
startswith(name, "@nitra/")
|
|
73
75
|
} else if {
|
|
74
|
-
#
|
|
75
|
-
#
|
|
76
|
+
# Vitest/Stryker peer/tools для `n-cursor coverage` живуть у корені будь-якого
|
|
77
|
+
# монорепо-споживача: правило `test` enabled завжди, а published workspace-и
|
|
78
|
+
# не мають `devDependencies` (`npm-module.mdc`).
|
|
76
79
|
name in allowed_root_test_deps
|
|
77
80
|
}
|
|
78
81
|
|
package/rules/efes/efes.mdc
CHANGED
|
@@ -1,17 +1,17 @@
|
|
|
1
1
|
---
|
|
2
2
|
description: Правила для проєктів Efes (репозиторії під github.com/efes-cloud)
|
|
3
3
|
alwaysApply: true
|
|
4
|
-
version: '1.
|
|
4
|
+
version: '1.2'
|
|
5
5
|
---
|
|
6
6
|
|
|
7
7
|
Правило **efes** для споживачів **@nitra/cursor** у репозиторіях під **`github.com/efes-cloud/*`**.
|
|
8
8
|
|
|
9
|
-
## `@nitra/efes-
|
|
9
|
+
## `@nitra/efes-shared` у `devDependencies`
|
|
10
10
|
|
|
11
|
-
У кореневому **`package.json`** efes-проєкту в **`devDependencies`** має бути **`@nitra/efes-
|
|
11
|
+
У кореневому **`package.json`** efes-проєкту в **`devDependencies`** має бути **`@nitra/efes-shared`** — пакет зі спільними efes-ресурсами (схеми, скіли, типи; зокрема використовується у `graphql.mdc` як `node_modules/@nitra/efes-shared/schema/maya.graphql`). Версію правило не фіксує — лише presence. Додати:
|
|
12
12
|
|
|
13
13
|
```bash
|
|
14
|
-
bun add -d @nitra/efes-
|
|
14
|
+
bun add -d @nitra/efes-shared
|
|
15
15
|
```
|
|
16
16
|
|
|
17
17
|
## Швидкий gate через conftest (Rego)
|
|
@@ -20,4 +20,4 @@ bun add -d @nitra/efes-docs
|
|
|
20
20
|
|
|
21
21
|
Пакети (директорія в **`npm/rules/efes/policy/`** → namespace → що перевіряє):
|
|
22
22
|
|
|
23
|
-
- **`
|
|
23
|
+
- **`package_json_shared/`** → `efes.package_json_shared` — у кореневому `package.json` `devDependencies` має містити `@nitra/efes-shared` (presence-only, версію не фіксуємо). **Цільові файли:** `package.json`.
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
# Перевірка кореневого `package.json` efes-проєкту: у `devDependencies` має бути
|
|
2
|
+
# `@nitra/efes-shared` (спільні efes-ресурси — схеми, скіли, типи; використовується,
|
|
3
|
+
# зокрема, у `graphql.mdc` як `node_modules/@nitra/efes-shared/schema/maya.graphql`).
|
|
4
|
+
# Версію не фіксуємо — лише presence.
|
|
5
|
+
#
|
|
6
|
+
# Inverse-presence перевірка лишається inline у rego (як `@nitra/cspell-dict`
|
|
7
|
+
# у `text.package_json`).
|
|
8
|
+
package efes.package_json_shared
|
|
9
|
+
|
|
10
|
+
import rego.v1
|
|
11
|
+
|
|
12
|
+
deny contains msg if {
|
|
13
|
+
dev := object.get(input, "devDependencies", {})
|
|
14
|
+
not "@nitra/efes-shared" in object.keys(dev)
|
|
15
|
+
msg := "package.json: devDependencies має містити @nitra/efes-shared — bun add -d @nitra/efes-shared (efes.mdc)"
|
|
16
|
+
}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
{
|
|
2
2
|
"$schema": "https://unpkg.com/@nitra/cursor/schemas/target.json",
|
|
3
3
|
"files": { "single": "package.json", "required": true },
|
|
4
|
-
"missingMessage": "package.json не існує — створи його, додай devDependencies['@nitra/efes-
|
|
4
|
+
"missingMessage": "package.json не існує — створи його, додай devDependencies['@nitra/efes-shared'] (efes.mdc)"
|
|
5
5
|
}
|
|
@@ -15,7 +15,7 @@ alwaysApply: false
|
|
|
15
15
|
Підстав свої шляхи до схеми та до файлів з операціями; приклад орієнтиру:
|
|
16
16
|
|
|
17
17
|
```yaml title=".graphqlrc.yml"
|
|
18
|
-
schema: node_modules/@nitra/efes-
|
|
18
|
+
schema: node_modules/@nitra/efes-shared/schema/maya.graphql
|
|
19
19
|
documents:
|
|
20
20
|
- '**/*.{vue,js,ts,tsx}'
|
|
21
21
|
```
|
package/rules/test/auto.md
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
|
|
1
|
+
завжди
|
package/scripts/auto-rules.mjs
CHANGED
|
@@ -51,6 +51,7 @@ export const AUTO_RULE_ORDER = Object.freeze([
|
|
|
51
51
|
'rust',
|
|
52
52
|
'security',
|
|
53
53
|
'style-lint',
|
|
54
|
+
'test',
|
|
54
55
|
'text',
|
|
55
56
|
'vue'
|
|
56
57
|
])
|
|
@@ -674,6 +675,7 @@ export async function detectAutoRules({
|
|
|
674
675
|
}
|
|
675
676
|
addRule('adr')
|
|
676
677
|
addRule('security')
|
|
678
|
+
addRule('test')
|
|
677
679
|
addRule('text')
|
|
678
680
|
if (facts.hasVueSource) {
|
|
679
681
|
addRule('vue')
|
|
@@ -1,16 +0,0 @@
|
|
|
1
|
-
# Перевірка кореневого `package.json` efes-проєкту: у `devDependencies` має бути
|
|
2
|
-
# `@nitra/efes-docs` (контракти/схеми efes-сервісів — використовується, зокрема,
|
|
3
|
-
# у `graphql.mdc` як `node_modules/@nitra/efes-docs/schema/maya.graphql`). Версію
|
|
4
|
-
# не фіксуємо — лише presence.
|
|
5
|
-
#
|
|
6
|
-
# Inverse-presence перевірка лишається inline у rego (як `@nitra/cspell-dict`
|
|
7
|
-
# у `text.package_json`).
|
|
8
|
-
package efes.package_json_docs
|
|
9
|
-
|
|
10
|
-
import rego.v1
|
|
11
|
-
|
|
12
|
-
deny contains msg if {
|
|
13
|
-
dev := object.get(input, "devDependencies", {})
|
|
14
|
-
not "@nitra/efes-docs" in object.keys(dev)
|
|
15
|
-
msg := "package.json: devDependencies має містити @nitra/efes-docs — bun add -d @nitra/efes-docs (efes.mdc)"
|
|
16
|
-
}
|