@nitra/cursor 1.13.43 → 1.13.44

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 CHANGED
@@ -4,6 +4,13 @@
4
4
 
5
5
  Формат — [Keep a Changelog](https://keepachangelog.com/uk/1.1.0/), нумерація — [SemVer](https://semver.org/lang/uk/).
6
6
 
7
+ ## [1.13.44] - 2026-05-18
8
+
9
+ ### Added
10
+
11
+ - `abie` rule: новий policy-концерн `abie.package_json_docs` — у кореневому `package.json` `devDependencies` має містити `@nitra/abie-docs` (presence-only, версію не фіксуємо). Реалізація: `npm/rules/abie/policy/package_json_docs/` (target.json + .rego + _test.rego). Bump `abie.mdc` `1.20` → `1.21`.
12
+ - `efes` rule: перший policy-концерн `efes.package_json_docs` — у кореневому `package.json` `devDependencies` має містити `@nitra/efes-docs` (узгоджено з `graphql.mdc`, де схема береться з `node_modules/@nitra/efes-docs/schema/maya.graphql`). Реалізація: `npm/rules/efes/policy/package_json_docs/`. Bump `efes.mdc` `1.0` → `1.1`.
13
+
7
14
  ## [1.13.43] - 2026-05-18
8
15
 
9
16
  ### Removed
@@ -14,7 +21,7 @@
14
21
 
15
22
  ### Added
16
23
 
17
- - `efes` rule: новий (поки що порожній) пакет правил для проєктів **github.com/efes-cloud/***. Автодетект у `auto-rules.mjs` через `EFES_REPOSITORY_URL_MARKER` (`https://github.com/efes-cloud/`) — аналогічно до `abie`. Додано `npm/rules/efes/efes.mdc` + `auto.md`, прописано порядок в `AUTO_RULE_ORDER` і покрито тестами в `auto-rules.test.mjs`.
24
+ - `efes` rule: новий (поки що порожній) пакет правил для проєктів **github.com/efes-cloud/\***. Автодетект у `auto-rules.mjs` через `EFES_REPOSITORY_URL_MARKER` (`https://github.com/efes-cloud/`) — аналогічно до `abie`. Додано `npm/rules/efes/efes.mdc` + `auto.md`, прописано порядок в `AUTO_RULE_ORDER` і покрито тестами в `auto-rules.test.mjs`.
18
25
  - `efes-create-env` skill: повʼязано з правилом `efes` через `skills/efes-create-env/auto.md` (`[efes]`) — активується автоматично, коли репозиторій відповідає efes-маркеру. Тести в `auto-skills.test.mjs` фіксують позитивний і негативний випадки.
19
26
 
20
27
  ## [1.13.41] - 2026-05-18
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@nitra/cursor",
3
- "version": "1.13.43",
3
+ "version": "1.13.44",
4
4
  "description": "CLI для завантаження cursor-правил (префікс n-) у локальний репозиторій",
5
5
  "keywords": [
6
6
  "cli",
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  description: Правила для проєктів AbInBev Efes
3
3
  alwaysApply: true
4
- version: '1.20'
4
+ version: '1.21'
5
5
  ---
6
6
 
7
7
  Правило **abie** для споживачів **@nitra/cursor**: **k8s** (Deployment + **HealthCheckPolicy** у **`hc.yaml`**, overlay **ua** — **nodeSelector**, **HTTPRoute** (будь-який непорожній **`target.name`**, для спільних сервісів **`auth-run-hl`** / **`file-link-hl`** — **`namespace: dev`** у base та patch **`…/backendRefs/…/namespace`** у **ua**)), гілки **dev**, **ua** у **clean-merged-branch**, а також заборона тримати артефакти **Firebase Hosting** у **підкаталогах першого рівня** (безпосередні діти кореня репозиторію; у самому корені ці імена не вимагаються до видалення).
@@ -140,6 +140,14 @@ KVCMS_URL=http://kvcms-hl.ua-apruv.svc.abie-ua.internal:8080
140
140
 
141
141
  Загальне правило про **внутрішній** URL (не публічний домен) для `HASURA_GRAPHQL_ENDPOINT` лишається у **`hasura.mdc`** (для nitra і abie) — `check-hasura.mjs` приймає кластерний DNS-формат `<cluster>.internal`.
142
142
 
143
+ ## `@nitra/abie-docs` у `devDependencies`
144
+
145
+ У кореневому **`package.json`** abie-проєкту в **`devDependencies`** має бути **`@nitra/abie-docs`** — пакет з канонічними контрактами/схемами abie-сервісів (наприклад, шляхи `node_modules/@nitra/abie-docs/...` для імпорту схем). Версію правило не фіксує — лише presence. Додати:
146
+
147
+ ```bash
148
+ bun add -d @nitra/abie-docs
149
+ ```
150
+
143
151
  ## Firebase Hosting
144
152
 
145
153
  У **кожному** підкаталозі, що лежить **безпосередньо** в корені репозиторію, не тримати конфіг і кеш **Firebase Hosting**: у таких каталогах не повинно бути **`.firebaserc`**, **`firebase.json`** та каталогу **`.firebase/`** (у **самому** корені репозиторію ці імена перевіркою abie **не** розглядаються; `node_modules` / `.git` зі скану вилучаються).
@@ -160,5 +168,6 @@ KVCMS_URL=http://kvcms-hl.ua-apruv.svc.abie-ua.internal:8080
160
168
  - **`health_check_policy/`** → `abie.health_check_policy` — структура HealthCheckPolicy: `apiVersion: networking.gke.io/v1`, `metadata.name`, `spec.default.config.type: HTTP`, `httpHealthCheck.requestPath` починається з `/`, `port: 8080`, `targetRef.kind: Service`, `targetRef.name` має суфікс `-hl`. **Цільові файли:** `…/k8s/.../hc.yaml`.
161
169
  - **`base_deployment_preem/`** → `abie.base_deployment_preem` — Deployment у base/ має `spec.template.spec.nodeSelector.preem` зі значенням `true` (boolean або рядок). **Цільові файли:** ресурсні YAML під `…/k8s/.../base/...`.
162
170
  - **`clean_merged_ignore_branches/`** → `abie.clean_merged_ignore_branches` — у workflow `.github/workflows/clean-merged-branch.yml` крок з `uses: phpdocker-io/github-actions-delete-abandoned-branches` має `with.ignore_branches`, що містить токени `dev,ua` (case-insensitive). **Цільові файли:** `.github/workflows/clean-merged-branch.yml`.
171
+ - **`package_json_docs/`** → `abie.package_json_docs` — у кореневому `package.json` `devDependencies` має містити `@nitra/abie-docs` (presence-only, версію не фіксуємо). **Цільові файли:** `package.json`.
163
172
 
164
173
  Cross-file логіка (парність HCP↔Deployment у каталозі, обчислений `<deployment.name>-hl` для `targetRef.name`, валідація ua-overlay JSON6902 patches на HTTPRoute, env→cluster DNS, аналіз cross-namespace backendRefs у пакетах) лишається у **`check-abie.mjs`** — Rego не читає файлову систему й не робить cross-document резолюцію.
@@ -0,0 +1,16 @@
1
+ # Перевірка кореневого `package.json` abie-проєкту: у `devDependencies` має бути
2
+ # `@nitra/abie-docs` (контракти/схеми abie-сервісів — наприклад
3
+ # `node_modules/@nitra/abie-docs/...`). Версію не фіксуємо — лише presence.
4
+ #
5
+ # Inverse-presence перевірка — лишається inline у rego (як `@nitra/cspell-dict`
6
+ # у `text.package_json`), бо у template/ зберігаємо позитивні snippet/deny канони,
7
+ # а не одиничний required-ключ.
8
+ package abie.package_json_docs
9
+
10
+ import rego.v1
11
+
12
+ deny contains msg if {
13
+ dev := object.get(input, "devDependencies", {})
14
+ not "@nitra/abie-docs" in object.keys(dev)
15
+ msg := "package.json: devDependencies має містити @nitra/abie-docs — bun add -d @nitra/abie-docs (abie.mdc)"
16
+ }
@@ -0,0 +1,5 @@
1
+ {
2
+ "$schema": "https://unpkg.com/@nitra/cursor/schemas/target.json",
3
+ "files": { "single": "package.json", "required": true },
4
+ "missingMessage": "package.json не існує — створи його, додай devDependencies['@nitra/abie-docs'] (abie.mdc)"
5
+ }
@@ -1,7 +1,23 @@
1
1
  ---
2
2
  description: Правила для проєктів Efes (репозиторії під github.com/efes-cloud)
3
3
  alwaysApply: true
4
- version: '1.0'
4
+ version: '1.1'
5
5
  ---
6
6
 
7
- Правило **efes** для споживачів **@nitra/cursor** у репозиторіях під **`github.com/efes-cloud/*`**. Поки що зміст правила порожній — додавайте сюди вимоги, специфічні для efes-проєктів, у міру їх появи.
7
+ Правило **efes** для споживачів **@nitra/cursor** у репозиторіях під **`github.com/efes-cloud/*`**.
8
+
9
+ ## `@nitra/efes-docs` у `devDependencies`
10
+
11
+ У кореневому **`package.json`** efes-проєкту в **`devDependencies`** має бути **`@nitra/efes-docs`** — пакет з канонічними контрактами/схемами efes-сервісів (зокрема використовується у `graphql.mdc` як `node_modules/@nitra/efes-docs/schema/maya.graphql`). Версію правило не фіксує — лише presence. Додати:
12
+
13
+ ```bash
14
+ bun add -d @nitra/efes-docs
15
+ ```
16
+
17
+ ## Швидкий gate через conftest (Rego)
18
+
19
+ Пер-документні перевірки efes — rego-полісі у **`npm/rules/efes/policy/`** (запускається через **`npx @nitra/cursor check efes`**; синтаксичний lint — через **`bun run lint-rego`**). Деталі шаблону — у **conftest.mdc** / **n-rego.mdc**.
20
+
21
+ Пакети (директорія в **`npm/rules/efes/policy/`** → namespace → що перевіряє):
22
+
23
+ - **`package_json_docs/`** → `efes.package_json_docs` — у кореневому `package.json` `devDependencies` має містити `@nitra/efes-docs` (presence-only, версію не фіксуємо). **Цільові файли:** `package.json`.
@@ -0,0 +1,16 @@
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
+ }
@@ -0,0 +1,5 @@
1
+ {
2
+ "$schema": "https://unpkg.com/@nitra/cursor/schemas/target.json",
3
+ "files": { "single": "package.json", "required": true },
4
+ "missingMessage": "package.json не існує — створи його, додай devDependencies['@nitra/efes-docs'] (efes.mdc)"
5
+ }
@@ -81,10 +81,7 @@ const CONFTEST_PREFLIGHT = {
81
81
  'Без нього не запускається пер-документна валідація через rego-полісі (npm/rules/*/policy/)',
82
82
  'у кроці check-ga — `runConftestBatch` завершується hard-fail.'
83
83
  ].join('\n '),
84
- install: [
85
- 'macOS: brew install conftest',
86
- 'Universal: https://www.conftest.dev/install/'
87
- ],
84
+ install: ['macOS: brew install conftest', 'Universal: https://www.conftest.dev/install/'],
88
85
  successMsg: '✅ conftest знайдено в PATH — check-ga виконає rego-полісі через runConftestBatch'
89
86
  }
90
87
 
@@ -51,13 +51,10 @@ const SHELLCHECK_PREFLIGHT = {
51
51
  /** @type {PreflightDep} */
52
52
  const PATCH_PREFLIGHT = {
53
53
  bin: 'patch',
54
- explanation: [
55
- 'Без `patch` не застосуються авто-виправлення shellcheck (`shellcheck -f diff` + `patch -p1`).'
56
- ].join('\n '),
57
- install: [
58
- 'macOS: зазвичай уже є в системі',
59
- 'Debian/Ubuntu: sudo apt-get install -y patch'
60
- ],
54
+ explanation: ['Без `patch` не застосуються авто-виправлення shellcheck (`shellcheck -f diff` + `patch -p1`).'].join(
55
+ '\n '
56
+ ),
57
+ install: ['macOS: зазвичай уже є в системі', 'Debian/Ubuntu: sudo apt-get install -y patch'],
61
58
  successMsg: '✅ patch знайдено в PATH — shellcheck auto-fix працюватиме'
62
59
  }
63
60