@nitra/cursor 1.13.42 → 1.13.43

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,12 @@
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.43] - 2026-05-18
8
+
9
+ ### Removed
10
+
11
+ - `npm/CLAUDE.md` як path-scoped нагадування для роботи в `npm/` повністю прибрано — фінальне завершення міграції з `1.13.42` (де вже прибрали `syncNpmClaudeMd` + Rego-first STOP перенесли у `scripts.mdc`): видалено сам `npm/CLAUDE.md`, темплейт `npm/.claude-template/npm-CLAUDE.md`, останні згадки в `bin/n-cursor.js` (повідомлення про `npm/CLAUDE.md` після sync; JSDoc) і опис у `schemas/n-cursor.json` `claude-config`. Реліз-правила (PR-bump + CHANGELOG) і так живуть у `n-changelog.mdc`/`n-npm-module.mdc` (alwaysApply).
12
+
7
13
  ## [1.13.42] - 2026-05-18
8
14
 
9
15
  ### Added
package/bin/n-cursor.js CHANGED
@@ -23,7 +23,7 @@
23
23
  * Agent інтеграція: під час синку, окрім `.cursor/rules` і `.claude/commands` (з skills), CLI ще раз
24
24
  * синхронізує `.claude/settings.json` (hooks + permissions; merge — користувацькі поля зберігаються),
25
25
  * `.cursor/hooks.json` (Cursor Agent hooks; merge — користувацькі hooks зберігаються),
26
- * `npm/CLAUDE.md` (path-scoped нагадування для роботи в `npm/`) і slash-команди checks (`/n-check`).
26
+ * і slash-команди checks (`/n-check`).
27
27
  * Опт-аут — поле `claude-config: false` у `.n-cursor.json`.
28
28
  *
29
29
  * Якщо у корені репозиторію немає .n-cursor.json, спочатку перейменовується за наявності nitra-cursor.json;
@@ -1315,7 +1315,6 @@ async function runSync() {
1315
1315
  const parts = []
1316
1316
  if (result.settings) parts.push('.claude/settings.json')
1317
1317
  if (result.cursorHooks) parts.push('.cursor/hooks.json')
1318
- if (result.npmClaudeMd) parts.push('npm/CLAUDE.md')
1319
1318
  if (result.commands.length > 0) parts.push(`${result.commands.length} slash-commands`)
1320
1319
  if (result.adrHook) parts.push('.claude/hooks/capture-decisions.sh')
1321
1320
  if (result.adrNormalizeHook) parts.push('.claude/hooks/normalize-decisions.sh')
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@nitra/cursor",
3
- "version": "1.13.42",
3
+ "version": "1.13.43",
4
4
  "description": "CLI для завантаження cursor-правил (префікс n-) у локальний репозиторій",
5
5
  "keywords": [
6
6
  "cli",
@@ -130,7 +130,7 @@ egress_has_internet_http_https(spec) if {
130
130
  is_object(peer)
131
131
  ipb := object.get(peer, "ipBlock", null)
132
132
  is_object(ipb)
133
- object.get(ipb, "cidr", "") == "0.0.0.0/0"
133
+ ipb.cidr == "0.0.0.0/0"
134
134
  ports := object.get(rule, "ports", null)
135
135
  is_array(ports)
136
136
  egress_ports_include(ports, 80)
@@ -140,7 +140,7 @@ egress_has_internet_http_https(spec) if {
140
140
  egress_ports_include(ports, want) if {
141
141
  some p in ports
142
142
  is_object(p)
143
- object.get(p, "port", null) == want
143
+ p.port == want
144
144
  }
145
145
 
146
146
  egress_has_cluster_namespace_selector(spec) if {
@@ -78,8 +78,9 @@ const DOTENV_LINTER_PREFLIGHT = {
78
78
  }
79
79
 
80
80
  /**
81
- * @param {PreflightDep} dep
82
- * @returns {string | null}
81
+ * Шукає шлях до бінарника `dep.bin` у `PATH`; на Windows додатково перебирає `dep.winBins`.
82
+ * @param {PreflightDep} dep опис залежності з canon-списку preflight-перевірок
83
+ * @returns {string | null} абсолютний шлях до знайденого бінарника або `null`, якщо не знайдено
83
84
  */
84
85
  function resolvePreflightBin(dep) {
85
86
  if (platform === 'win32' && dep.winBins) {
@@ -92,8 +93,9 @@ function resolvePreflightBin(dep) {
92
93
  }
93
94
 
94
95
  /**
95
- * @param {PreflightDep} dep
96
- * @returns {void}
96
+ * Друкує stderr-повідомлення про відсутній бінарник з install-hint'ами і посиланням на правило.
97
+ * @param {PreflightDep} dep опис залежності — джерело пояснення й install-команд
98
+ * @returns {void} нічого не повертає; виводить рядки в `console.error`
97
99
  */
98
100
  function printPreflightMissingMessage(dep) {
99
101
  console.error(`❌ ${dep.bin} не знайдено в PATH.`)
@@ -106,8 +108,10 @@ function printPreflightMissingMessage(dep) {
106
108
  }
107
109
 
108
110
  /**
109
- * @param {PreflightDep} dep
110
- * @returns {boolean}
111
+ * Виконує preflight-перевірку: повертає `true` і друкує `successMsg`, якщо бінарник знайдено,
112
+ * інакше друкує install-hint у stderr і повертає `false`.
113
+ * @param {PreflightDep} dep опис залежності для перевірки наявності в `PATH`
114
+ * @returns {boolean} `true` — бінарник знайдено, `false` — відсутній
111
115
  */
112
116
  function preflight(dep) {
113
117
  if (resolvePreflightBin(dep)) {
@@ -57,7 +57,7 @@
57
57
  },
58
58
  "claude-config": {
59
59
  "type": "boolean",
60
- "description": "Чи синхронізувати `.claude/settings.json` (hooks + permissions, merge зі збереженням користувацьких полів), `npm/CLAUDE.md` (path-scoped нагадування для роботи в `npm/`) і slash-команди checks. За замовчуванням true.",
60
+ "description": "Чи синхронізувати `.claude/settings.json` (hooks + permissions, merge зі збереженням користувацьких полів) і slash-команди checks. За замовчуванням true.",
61
61
  "default": true
62
62
  }
63
63
  },
@@ -136,7 +136,7 @@ cp site/k8s/$BASE/kustomization.yaml site/k8s/$ENV/kustomization.yaml
136
136
  У секцію `"scripts"` додай рядок (зберігай порядок поряд із сусідніми `start-remote-*`):
137
137
 
138
138
  ```json
139
- "start-remote-$ENV": "vite dev --mode remote-$ENV",
139
+ { "scripts": { "start-remote-$ENV": "vite dev --mode remote-$ENV" } }
140
140
  ```
141
141
 
142
142
  ### 4. Зареєструвати `$ENV` у CI/CD branch-списках
@@ -1,40 +0,0 @@
1
- <!-- Файл генерується автоматично через `npx @nitra/cursor`. Не редагуй вручну. -->
2
-
3
- # Робота в `npm/`
4
-
5
- Path-scoped нагадування для агента: підвантажується автоматично, коли редагуємо файли під `npm/`.
6
-
7
- ## Перед PR з коміт-релевантними змінами в `npm/`
8
-
9
- 1. Підвищ `version` у `npm/package.json` (build-bump, не більше одного кроку відносно `HEAD`).
10
- 2. Додай запис у `npm/CHANGELOG.md` форматом Keep a Changelog: `## [версія] - YYYY-MM-DD` + секції `### Added/Changed/Fixed/Removed`.
11
- 3. Переконайся, що `"CHANGELOG.md"` є в масиві `files` у `npm/package.json` (правило `changelog`).
12
-
13
- Логіка PR-scoped: bump і запис достатньо зробити **один раз — як суму по всьому PR** (порівняння йде з гілкою `dev`), а не на кожен коміт.
14
-
15
- Без оновленого CHANGELOG `npx @nitra/cursor check changelog` падає, а `Stop` hook блокує завершення ходу.
16
-
17
- ## Перевірка локально
18
-
19
- ```bash
20
- npx @nitra/cursor check changelog
21
- npx @nitra/cursor check npm-module
22
- ```
23
-
24
- ## Перш ніж писати / розширювати `check-*.mjs`
25
-
26
- **STOP — спершу пройди алгоритм Rego-first** (`.cursor/rules/conftest.mdc`, alwaysApply). Це стосується **і нової** перевірки, **і додавання нового deny у вже існуючий** `check-<rule>.mjs`: подивись `npm/policy/<rule>/`, чи задача не лягає у вже існуючий rego-пакет як ще одне `deny contains`.
27
-
28
- Швидкий self-check для нової перевірки (порядок важливий):
29
-
30
- 1. **Це пер-документна перевірка одного JSON/YAML?** (наявність / форма поля, regex по значенню, перелік дозволених літералів). → **Rego, без JS-коду.** Пиши у `npm/policy/<rule>/<name>/<name>.rego` + `<name>_test.rego`.
31
- 2. Потрібен `readdir`, `stat`, парність файлів, AST-парсинг JS/TS, autofix, modeline до YAML-body? → **JS** у `check-<rule>.mjs`. Per-document частина (якщо є) усе одно лишається у rego — JS викликає її через `runConftestBatch`.
32
- 3. Не впевнений? Подивись референс **`npm/policy/k8s/*`** ↔ **`npm/scripts/check-k8s.mjs`** (Plan B: Rego-authoritative + JS-orchestrator) і список «що Rego об'єктивно не вміє» у `conftest.mdc`.
33
-
34
- **Червоний прапор:** дописуєш `if (pkg.<field>) fail(…)` у JS — майже завжди це варто було робити як `deny contains msg if { … }` у відповідному rego-пакеті. Перевір `npm/policy/<rule>/` **перед** редагуванням `check-<rule>.mjs`.
35
-
36
- ## Джерело правил
37
-
38
- - `.cursor/rules/n-changelog.mdc` — правило про CHANGELOG (PR-scoped, для всіх воркспейсів)
39
- - `.cursor/rules/n-npm-module.mdc` — правило публікації пакета (типи, hk, npm-publish workflow)
40
- - `npm/scripts/check-changelog.mjs`, `npm/scripts/check-npm-module.mjs` — алгоритми перевірки