@nitra/cursor 3.18.0 → 3.18.2

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
@@ -1,5 +1,17 @@
1
1
  # Changelog
2
2
 
3
+ ## [3.18.2] - 2026-06-03
4
+
5
+ ### Changed
6
+
7
+ - npm-publish.yml канон: workflow робить release+publish одним job (release-publish) — крок n-cursor release перед публікацією, contents: write + persist-credentials. Оновлено template, rego-референси та тести.
8
+
9
+ ## [3.18.1] - 2026-06-03
10
+
11
+ ### Fixed
12
+
13
+ - python: applies-гейт пропускає правило без pyproject.toml — позбулися хибного зауваження rego package_json у не-Python репо
14
+
3
15
  ## [3.18.0] - 2026-06-03
4
16
 
5
17
  ### Added
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@nitra/cursor",
3
- "version": "3.18.0",
3
+ "version": "3.18.2",
4
4
  "description": "CLI для завантаження cursor-правил (префікс n-) у локальний репозиторій",
5
5
  "keywords": [
6
6
  "cli",
@@ -65,6 +65,8 @@ bunx -p typescript tsc src/**/*.js --declaration --allowJs --emitDeclarationOnly
65
65
 
66
66
  **`npm-publish.yml`:** push у **`main`**, **`on.push.paths`** з **`npm/**`**, **`JS-DevTools/npm-publish@v4.1.5`**, **`with.package: npm/package.json`**, **`permissions.id-token: write`** (OIDC на npm).
67
67
 
68
+ Workflow робить **release + publish** одним job (`release-publish`): крок **`Release (bump + CHANGELOG + tag)`** (`node npm/bin/n-cursor.js release` — агрегує change-файли, bump `version`, генерує секцію `CHANGELOG.md`, ставить git-тег) виконується **перед** публікацією. Тому потрібні **`permissions.contents: write`** і **`persist-credentials: true`** з **`fetch-depth: 0`** на `checkout` (release пушить commit-back версії та тег), а також локальний composite **`./.github/actions/setup-bun-deps`** і крок `Configure git identity`. Це узгоджено з **`n-changelog`**: `version`/`CHANGELOG.md` змінює лише `n-cursor release` у CI на `main`. Програмна перевірка (`npm_module.npm_publish_yml`) лишається subset-of — enforce-ить `on.push.paths`/`branches`, `id-token: write` і наявність publish-кроку; додаткові кроки (release, git identity) дозволені.
69
+
68
70
  - Канон: [npm-publish.yml.snippet.yml](./policy/npm_publish_yml/template/npm-publish.yml.snippet.yml)
69
71
 
70
72
  ## Канонічні конфіги
@@ -22,11 +22,11 @@ expected_paths := {p | some p in data.template.snippet.on.push.paths}
22
22
 
23
23
  expected_branches := {b | some b in data.template.snippet.on.push.branches}
24
24
 
25
- expected_permissions := data.template.snippet.jobs.publish.permissions
25
+ expected_permissions := data.template.snippet.jobs["release-publish"].permissions
26
26
 
27
27
  # Required publish-step (за маркером): expected `with.package` value з template.
28
28
  expected_publish_with_package := s.with.package if {
29
- some s in data.template.snippet.jobs.publish.steps
29
+ some s in data.template.snippet.jobs["release-publish"].steps
30
30
  contains(object.get(s, "uses", ""), publish_action_marker)
31
31
  }
32
32
 
@@ -12,22 +12,33 @@ concurrency:
12
12
  cancel-in-progress: true
13
13
 
14
14
  jobs:
15
- publish:
15
+ release-publish:
16
16
  runs-on: ubuntu-latest
17
17
  permissions:
18
- contents: read
18
+ contents: write # commit-back версії + git-тег
19
19
  id-token: write # КРИТИЧНО для OIDC!
20
20
 
21
21
  steps:
22
22
  - uses: actions/checkout@v6
23
23
  with:
24
- persist-credentials: false
24
+ persist-credentials: true # release пушить commit-back + тег
25
+ fetch-depth: 0
26
+
27
+ - uses: ./.github/actions/setup-bun-deps
25
28
 
26
29
  - uses: actions/setup-node@v6
27
30
  with:
28
31
  node-version: '24' # includes npm@11.6.0
29
32
  registry-url: 'https://registry.npmjs.org'
30
33
 
34
+ - name: Configure git identity
35
+ run: |
36
+ git config user.name "github-actions[bot]"
37
+ git config user.email "github-actions[bot]@users.noreply.github.com"
38
+
39
+ - name: Release (bump + CHANGELOG + tag)
40
+ run: node npm/bin/n-cursor.js release
41
+
31
42
  - name: Publish package
32
43
  uses: JS-DevTools/npm-publish@v4.1.5
33
44
  with:
@@ -0,0 +1,30 @@
1
+ /**
2
+ * Applies-гейт правила `python` (python.mdc): правило застосовне, лише якщо в корені є
3
+ * `pyproject.toml`. Інакше CLI пропускає всі concerns (JS і policy) — інакше rego
4
+ * `python/package_json` хибно вимагає `scripts.lint-python` навіть для не-Python репо.
5
+ *
6
+ * JS тут — гейт на наявність кореневого `pyproject.toml`. Подальші FS-перевірки
7
+ * (`uv.lock`, `package.json`, `lint-python.yml`, заборона Poetry) — у `tooling.mjs`.
8
+ */
9
+ import { existsSync } from 'node:fs'
10
+ import { join } from 'node:path'
11
+
12
+ import { createCheckReporter } from '../../../scripts/lib/check-reporter.mjs'
13
+
14
+ /**
15
+ * @param {string} [cwd] корінь репозиторію (`process.cwd()` у звичайному прогоні)
16
+ * @returns {Promise<boolean>} `true` — правило застосовне; `false` — пропустити
17
+ */
18
+ export function applies(cwd = process.cwd()) {
19
+ return Promise.resolve(existsSync(join(cwd, 'pyproject.toml')))
20
+ }
21
+
22
+ /**
23
+ * Друкує короткий context-pass — самі перевірки виконують інші concerns.
24
+ * @returns {number} 0 — все ок (фактичні порушення повертають інші концерни)
25
+ */
26
+ export function check() {
27
+ const reporter = createCheckReporter()
28
+ reporter.pass('pyproject.toml знайдено в корені — застосовую python.mdc')
29
+ return reporter.getExitCode()
30
+ }
@@ -2,12 +2,15 @@
2
2
  * Перевіряє FS-вимоги правила python.mdc для Python-проєктів на uv.
3
3
  *
4
4
  * **Що тут лишилося** (FS-existence — не покривається conftest):
5
- * - наявність `pyproject.toml` у корені (тригер правила);
6
5
  * - наявність `uv.lock` поруч (uv-проєкт коммітить lock-файл);
7
6
  * - наявність кореневого `package.json` (для `bun run lint-python`);
8
7
  * - наявність `.github/workflows/lint-python.yml`;
9
8
  * - заборона Poetry-артефактів `poetry.lock` / `poetry.toml` (міграція на uv).
10
9
  *
10
+ * Гейт на `pyproject.toml` робить `applies.mjs` — CLI пропускає правило цілком
11
+ * без нього. Захисний early-return лишається тут лише для прямого виклику
12
+ * `check()` (тести/standalone) без `applies.mjs`-гейту.
13
+ *
11
14
  * **Що покрила Rego** (`npx \@nitra/cursor fix python`):
12
15
  * - `python/pyproject_toml/` — заборона `[tool.poetry]` + вимога PEP 621 `[project].name/version`;
13
16
  * - `python/package_json/` — наявність скрипта `lint-python` у `package.json`;
@@ -31,10 +34,8 @@ export function check(cwd = process.cwd()) {
31
34
  const { pass, fail } = reporter
32
35
 
33
36
  if (!existsSync(join(cwd, 'pyproject.toml'))) {
34
- pass('pyproject.toml не знайдено в корені — правило python не застосовне')
35
37
  return reporter.getExitCode()
36
38
  }
37
- pass('pyproject.toml існує — застосовую python.mdc')
38
39
 
39
40
  if (existsSync(join(cwd, 'uv.lock'))) {
40
41
  pass('uv.lock є')