@nitra/cursor 12.9.0 → 12.10.0

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.
Files changed (168) hide show
  1. package/.claude-template/settings.template.json +1 -23
  2. package/CHANGELOG.md +6 -0
  3. package/bin/n-cursor.js +8 -43
  4. package/docs/stryker.config.md +0 -2
  5. package/lib/docs/llm.md +16 -21
  6. package/lib/docs/omlx.md +20 -25
  7. package/lib/llm.mjs +25 -7
  8. package/lib/omlx.mjs +10 -3
  9. package/package.json +1 -1
  10. package/rules/abie/docs/main.md +0 -2
  11. package/rules/abie/lib/docs/http-route.md +0 -2
  12. package/rules/abie/main.mdc +0 -22
  13. package/rules/adr/docs/main.md +0 -2
  14. package/rules/adr/main.mdc +0 -9
  15. package/rules/bun/docs/main.md +0 -2
  16. package/rules/bun/main.mdc +1 -15
  17. package/rules/capacitor/docs/main.md +0 -2
  18. package/rules/capacitor/main.mdc +0 -6
  19. package/rules/changelog/docs/main.md +0 -2
  20. package/rules/changelog/js/agent-workflow.mdc +1 -1
  21. package/rules/changelog/js/consistency.mjs +3 -3
  22. package/rules/changelog/js/docs/consistency.md +18 -23
  23. package/rules/changelog/main.mdc +0 -5
  24. package/rules/ci4/docs/main.md +0 -2
  25. package/rules/ci4/main.mdc +0 -5
  26. package/rules/doc-files/docs/main.md +0 -2
  27. package/rules/doc-files/js/docs/docgen-crc.md +0 -2
  28. package/rules/doc-files/js/docs/docgen-extract.md +0 -2
  29. package/rules/doc-files/js/docs/docgen-files-batch.md +0 -2
  30. package/rules/doc-files/js/docs/docgen-gen.md +0 -2
  31. package/rules/doc-files/js/docs/docgen-judge-measure.md +0 -2
  32. package/rules/doc-files/js/docs/docgen-judge.md +0 -2
  33. package/rules/doc-files/js/docs/docgen-scan.md +0 -2
  34. package/rules/doc-files/js/docs/run-lint.md +0 -2
  35. package/rules/docker/docs/main.md +0 -2
  36. package/rules/docker/js/docs/lint.md +0 -2
  37. package/rules/docker/lib/docs/docker-hadolint.md +0 -2
  38. package/rules/docker/main.mdc +1 -21
  39. package/rules/efes/docs/main.md +0 -2
  40. package/rules/efes/main.mdc +0 -1
  41. package/rules/feedback/docs/main.md +0 -2
  42. package/rules/ga/docs/main.md +0 -2
  43. package/rules/ga/js/docs/index.md +0 -1
  44. package/rules/ga/main.mdc +1 -31
  45. package/rules/graphql/docs/main.md +0 -2
  46. package/rules/graphql/main.mdc +0 -5
  47. package/rules/hasura/docs/main.md +0 -2
  48. package/rules/hasura/js/docs/index.md +3 -3
  49. package/rules/hasura/js/docs/migrations.md +0 -2
  50. package/rules/hasura/main.mdc +1 -11
  51. package/rules/image-avif/docs/main.md +0 -2
  52. package/rules/image-avif/main.mdc +1 -9
  53. package/rules/image-compress/docs/main.md +0 -2
  54. package/rules/image-compress/js/docs/index.md +0 -1
  55. package/rules/image-compress/main.mdc +1 -9
  56. package/rules/js/docs/main.md +0 -2
  57. package/rules/js/js/dep-policy.mjs +8 -4
  58. package/rules/js/js/docs/check.md +0 -2
  59. package/rules/js/js/docs/dep-policy.md +10 -12
  60. package/rules/js/js/docs/index.md +5 -5
  61. package/rules/js/js/docs/tooling.md +0 -2
  62. package/rules/js/js/docs/utils_imports.md +0 -2
  63. package/rules/js/main.mdc +0 -31
  64. package/rules/js-bun-db/docs/main.md +0 -2
  65. package/rules/js-bun-db/js/docs/safety.md +18 -23
  66. package/rules/js-bun-db/js/safety.mjs +31 -3
  67. package/rules/js-bun-db/lib/bun-sql-scan.mjs +123 -0
  68. package/rules/js-bun-db/lib/docs/bun-sql-scan.md +37 -331
  69. package/rules/js-bun-db/main.mdc +1 -23
  70. package/rules/js-bun-redis/docs/main.md +0 -2
  71. package/rules/js-bun-redis/main.mdc +0 -5
  72. package/rules/js-mssql/docs/main.md +0 -2
  73. package/rules/js-mssql/main.mdc +0 -12
  74. package/rules/js-run/docs/main.md +0 -2
  75. package/rules/js-run/js/docs/runtime.md +15 -13
  76. package/rules/js-run/js/runtime.mjs +48 -4
  77. package/rules/js-run/main.mdc +0 -25
  78. package/rules/k8s/docs/main.md +0 -2
  79. package/rules/k8s/main.mdc +0 -45
  80. package/rules/nginx-default-tpl/docs/main.md +0 -2
  81. package/rules/nginx-default-tpl/main.mdc +0 -13
  82. package/rules/npm-module/docs/main.md +0 -2
  83. package/rules/npm-module/js/docs/header_doc_pointer.md +0 -2
  84. package/rules/npm-module/js/docs/rule_meta.md +0 -2
  85. package/rules/npm-module/js/docs/skill_meta.md +0 -2
  86. package/rules/npm-module/main.mdc +1 -15
  87. package/rules/php/docs/main.md +0 -2
  88. package/rules/php/js/docs/index.md +0 -1
  89. package/rules/php/main.mdc +1 -9
  90. package/rules/python/docs/main.md +0 -2
  91. package/rules/python/js/docs/index.md +0 -1
  92. package/rules/python/main.mdc +1 -13
  93. package/rules/rego/docs/main.md +0 -2
  94. package/rules/rego/js/docs/index.md +2 -2
  95. package/rules/rego/js/docs/tooling.md +0 -2
  96. package/rules/rego/js/tooling.mdc +14 -0
  97. package/rules/rego/main.mdc +0 -9
  98. package/rules/rego/policy/package_json/package_json.mdc +12 -0
  99. package/rules/release/docs/main.md +0 -2
  100. package/rules/release/main.mdc +2 -2
  101. package/rules/rust/docs/main.md +0 -2
  102. package/rules/rust/js/docs/index.md +0 -1
  103. package/rules/rust/main.mdc +1 -11
  104. package/rules/rust/policy/package_json/package_json.mdc +12 -0
  105. package/rules/security/docs/main.md +0 -2
  106. package/rules/security/js/docs/index.md +0 -1
  107. package/rules/security/main.mdc +0 -13
  108. package/rules/style/docs/main.md +0 -2
  109. package/rules/style/js/docs/index.md +2 -2
  110. package/rules/style/js/docs/tooling.md +0 -2
  111. package/rules/style/main.mdc +1 -23
  112. package/rules/tauri/docs/main.md +0 -2
  113. package/rules/tauri/main.mdc +1 -11
  114. package/rules/test/docs/main.md +0 -2
  115. package/rules/test/js/docs/no-console-store-restore.md +0 -2
  116. package/rules/test/js/docs/sandbox-aware-test.md +0 -2
  117. package/rules/test/js/docs/stryker_config.md +0 -2
  118. package/rules/test/js/docs/vitest-config-pool-forks.md +0 -2
  119. package/rules/test/main.mdc +1 -21
  120. package/rules/text/docs/main.md +0 -2
  121. package/rules/text/js/docs/cspell-fix.md +0 -2
  122. package/rules/text/js/docs/run-dotenv-linter.md +0 -2
  123. package/rules/text/js/docs/run-shellcheck.md +0 -2
  124. package/rules/text/js/docs/run-v8r.md +0 -2
  125. package/rules/text/main.mdc +0 -33
  126. package/rules/tool-surface/docs/main.md +0 -2
  127. package/rules/vue/docs/main.md +0 -2
  128. package/rules/vue/main.mdc +0 -22
  129. package/rules/worktree/docs/main.md +0 -2
  130. package/scripts/docs/auto-rules.md +0 -2
  131. package/scripts/docs/auto-skills.md +0 -2
  132. package/scripts/docs/hook.md +13 -12
  133. package/scripts/docs/post-tool-use-check.md +0 -2
  134. package/scripts/docs/sync-claude-config.md +1 -3
  135. package/scripts/docs/sync-setup-bun-deps-action.md +0 -2
  136. package/scripts/hook.mjs +3 -4
  137. package/scripts/lib/docs/check-mdc-template-refs.md +0 -2
  138. package/scripts/lib/docs/index.md +35 -35
  139. package/scripts/lib/docs/inline-template-links.md +6 -8
  140. package/scripts/lib/docs/list-project-rules-mdc.md +0 -2
  141. package/scripts/lib/docs/list-rule-ids.md +0 -2
  142. package/scripts/lib/docs/mirror-parity.md +8 -10
  143. package/scripts/lib/docs/read-n-cursor-config-lite.md +0 -2
  144. package/scripts/lib/docs/rule-meta.md +0 -2
  145. package/scripts/lib/docs/run-lint.md +0 -2
  146. package/scripts/lib/docs/run-rule-cli.md +0 -2
  147. package/scripts/lib/docs/run-rule.md +0 -2
  148. package/scripts/lib/docs/run-standard-lint.md +0 -2
  149. package/scripts/lib/docs/run-standard-rule.md +0 -2
  150. package/scripts/lib/docs/skill-meta.md +0 -2
  151. package/scripts/lib/docs/timing-summary.md +0 -2
  152. package/scripts/lib/docs/worktree-notice.md +0 -2
  153. package/scripts/lib/fix/docs/analyze-escalation.md +0 -2
  154. package/scripts/lib/fix/docs/index.md +10 -9
  155. package/scripts/lib/fix/docs/llm-worker.md +18 -8
  156. package/scripts/lib/fix/docs/orchestrator.md +44 -20
  157. package/scripts/lib/fix/docs/run-conformance-check.md +0 -2
  158. package/scripts/lib/fix/docs/t0.md +0 -2
  159. package/scripts/lib/fix/docs/verbose-block.md +27 -0
  160. package/scripts/lib/fix/llm-worker.mjs +75 -22
  161. package/scripts/lib/fix/orchestrator.mjs +13 -3
  162. package/scripts/lib/fix/verbose-block.mjs +82 -0
  163. package/scripts/lib/inline-template-links.mjs +32 -22
  164. package/scripts/lib/mirror-parity.mjs +2 -2
  165. package/scripts/sync-claude-config.mjs +7 -4
  166. package/scripts/utils/docs/resolve-js-root.md +0 -2
  167. package/skills/doc-files/SKILL.md +9 -24
  168. package/skills/llm-patch/SKILL.md +4 -4
@@ -1,10 +1,9 @@
1
1
  import { existsSync } from 'node:fs'
2
- import { readFile } from 'node:fs/promises'
2
+ import { readFile, readdir } from 'node:fs/promises'
3
3
  import { basename, extname, join } from 'node:path'
4
4
 
5
5
  const MD_LINK_RE = /\[([^\]]{1,200})\]\((\.\/[^)]{1,500})\)/g
6
6
  const TEMPLATE_SEGMENT_RE = /\/templates?\//
7
- const MDC_EXT_RE = /\.mdc$/
8
7
  /** Статичні regexp-літерали `^(.+)\.<slot>\.<ext>$` — без `RegExp(variable)`. */
9
8
  const SLOT_SUFFIX_RES = [/^(.+)\.snippet\.[^.]+$/, /^(.+)\.deny\.[^.]+$/, /^(.+)\.contains\.[^.]+$/]
10
9
 
@@ -69,31 +68,42 @@ export async function inlineTemplateLinks(text, ruleDir) {
69
68
  }
70
69
 
71
70
  /**
72
- * Finds markdown links whose href ends with `.mdc` (and is not a /template/ path) and
73
- * replaces them with the raw markdown content of the linked file (no fencing).
74
- * Intended for per-concern section files living alongside their .mjs implementations.
75
- * Throws Error if a matched link target doesn't exist (fail loud).
76
- * @param {string} text .mdc file contents (after inlineTemplateLinks)
71
+ * Appends all *.mdc files auto-discovered in js/ and policy/<concern>/ subdirectories.
72
+ * js/ direct files come first (alphabetically), then policy concern directories
73
+ * (alphabetically by concern name, then by file name within each concern).
74
+ * @param {string} text rule content (after inlineTemplateLinks)
77
75
  * @param {string} ruleDir absolute path to the rule directory
78
- * @returns {Promise<string>} transformed text
76
+ * @returns {Promise<string>} text with discovered concern docs appended
79
77
  */
80
- export async function inlineMarkdownIncludes(text, ruleDir) {
81
- const matches = [...text.matchAll(MD_LINK_RE)].filter(m => MDC_EXT_RE.test(m[2]) && !TEMPLATE_SEGMENT_RE.test(m[2]))
82
- if (matches.length === 0) return text
78
+ export async function appendDiscoveredMdcFiles(text, ruleDir) {
79
+ const sections = []
83
80
 
84
- let result = text
85
- for (const match of matches) {
86
- const [fullMatch, , href] = match
87
- const relPath = href.slice(2) // strip leading ./
88
- const absPath = join(ruleDir, relPath)
89
-
90
- if (!existsSync(absPath)) {
91
- throw new Error(`inlineMarkdownIncludes: file not found: ${absPath} (referenced from .mdc)`)
81
+ const jsDir = join(ruleDir, 'js')
82
+ if (existsSync(jsDir)) {
83
+ const entries = await readdir(jsDir, { withFileTypes: true })
84
+ for (const e of entries.sort((a, b) => a.name.localeCompare(b.name))) {
85
+ if (e.isFile() && e.name.endsWith('.mdc')) {
86
+ sections.push((await readFile(join(jsDir, e.name), 'utf8')).trim())
87
+ }
92
88
  }
89
+ }
93
90
 
94
- const raw = await readFile(absPath, 'utf8')
95
- result = result.replace(fullMatch, () => raw.trim())
91
+ const policyDir = join(ruleDir, 'policy')
92
+ if (existsSync(policyDir)) {
93
+ const concerns = (await readdir(policyDir, { withFileTypes: true }))
94
+ .filter(e => e.isDirectory())
95
+ .sort((a, b) => a.name.localeCompare(b.name))
96
+ for (const concern of concerns) {
97
+ const concernDir = join(policyDir, concern.name)
98
+ const files = (await readdir(concernDir, { withFileTypes: true }))
99
+ .filter(e => e.isFile() && e.name.endsWith('.mdc'))
100
+ .sort((a, b) => a.name.localeCompare(b.name))
101
+ for (const f of files) {
102
+ sections.push((await readFile(join(concernDir, f.name), 'utf8')).trim())
103
+ }
104
+ }
96
105
  }
97
106
 
98
- return result
107
+ if (sections.length === 0) return text
108
+ return text.trimEnd() + '\n\n' + sections.join('\n\n') + '\n'
99
109
  }
@@ -9,7 +9,7 @@
9
9
  import { existsSync, readdirSync, readFileSync } from 'node:fs'
10
10
  import { dirname, join } from 'node:path'
11
11
 
12
- import { inlineMarkdownIncludes, inlineTemplateLinks } from './inline-template-links.mjs'
12
+ import { appendDiscoveredMdcFiles, inlineTemplateLinks } from './inline-template-links.mjs'
13
13
 
14
14
  const MIRROR_PREFIX = 'n-'
15
15
  const MDC_EXT = '.mdc'
@@ -44,7 +44,7 @@ export function listManagedMirrors(repoRoot) {
44
44
  export async function expectedMirrorContent(canonicalPath) {
45
45
  const dir = dirname(canonicalPath)
46
46
  const withTemplates = await inlineTemplateLinks(readFileSync(canonicalPath, 'utf8'), dir)
47
- return inlineMarkdownIncludes(withTemplates, dir)
47
+ return appendDiscoveredMdcFiles(withTemplates, dir)
48
48
  }
49
49
 
50
50
  /**
@@ -30,11 +30,13 @@ import { existsSync } from 'node:fs'
30
30
  import { chmod, mkdir, readFile, readdir, rm, writeFile } from 'node:fs/promises'
31
31
  import { join } from 'node:path'
32
32
 
33
- /** Маркер PostToolUse fix-hook (`npx --no \@nitra/cursor post-tool-use-check`). */
34
- export const MANAGED_HOOK_COMMAND_MARKER = '@nitra/cursor post-tool-use-check'
35
- /** Маркер doc-files staleness-hook'ів (PostToolUse `--hook` і Stop-гейт `--git`). */
33
+ /** Маркер hook-ів пакета (`hook --post-tool-use`, `hook --stop`). */
34
+ export const MANAGED_HOOK_COMMAND_MARKER = '@nitra/cursor hook'
35
+ /** @deprecated замінено на `hook --post-tool-use`; маркер лишається для cleanup наявних конфігів при ресинку. */
36
+ export const LEGACY_POST_TOOL_USE_HOOK_COMMAND_MARKER = '@nitra/cursor post-tool-use-check'
37
+ /** @deprecated — doc-files hook перенесено до `hook --post-tool-use`; маркер лишається для cleanup наявних конфігів при ресинку. */
36
38
  export const DOC_FILES_HOOK_COMMAND_MARKER = '@nitra/cursor lint-doc-files'
37
- /** Legacy-маркер старих doc-files hook'ів (`doc-files check`) — cleanup при ресинку наявних інсталяцій. */
39
+ /** @deprecated — ще старіший legacy-маркер doc-files hook'ів (`doc-files check`) — cleanup при ресинку. */
38
40
  export const LEGACY_DOC_FILES_HOOK_COMMAND_MARKER = '@nitra/cursor doc-files check'
39
41
  /** Legacy-маркер старого Stop-hook'а — лишаємо для cleanup-у при оновленні існуючих інсталяцій. */
40
42
  export const LEGACY_STOP_HOOK_COMMAND_MARKER = '@nitra/cursor stop-hook'
@@ -52,6 +54,7 @@ export const CURSOR_ADR_NORMALIZE_HOOK_COMMAND_MARKER = '.claude/hooks/normalize
52
54
  */
53
55
  export const MANAGED_HOOK_COMMAND_MARKERS = Object.freeze([
54
56
  MANAGED_HOOK_COMMAND_MARKER,
57
+ LEGACY_POST_TOOL_USE_HOOK_COMMAND_MARKER,
55
58
  DOC_FILES_HOOK_COMMAND_MARKER,
56
59
  LEGACY_DOC_FILES_HOOK_COMMAND_MARKER,
57
60
  LEGACY_STOP_HOOK_COMMAND_MARKER,
@@ -8,8 +8,6 @@ docgen:
8
8
  score: 100
9
9
  ---
10
10
 
11
- ## Огляд
12
-
13
11
  Визначає корінь JS-коду в проєкті, відповідно до логіки для workspace-projects (перший workspace з підтримкою glob-патернів `cf/*`) або single-package (корінь cwd). Ця утиліта є спільною для coverage-провайдера JS та test-концерну `stryker_config` (DRY). Публічні функції дозволяють отримати один або повний список шляхів до всіх JS-коренів, при цьому свідомо виключаються каталоги `.git` та `node_modules`. Код спирається на конфігураційні файли `package.json` та `.n-cursor.json`.
14
12
 
15
13
  ## Поведінка
@@ -31,8 +31,8 @@ docgen:
31
31
 
32
32
  ## Оркестрацію веде JS, не модель; конвеєр — local-only
33
33
 
34
- Уся важка робота — черга, батчинг, виклики LLM і штамп CRC — живе в JS-команді
35
- `fix-doc-files`. **Ти не диспатчиш субагентів і не тримаєш сотні файлів у контексті**
34
+ Уся важка робота — черга, батчинг, виклики LLM і штамп CRC — живе у JS-оркестрації
35
+ `lint doc-files`. **Ти не диспатчиш субагентів і не тримаєш сотні файлів у контексті**
36
36
  — тому навіть масовий перший прогін усього репо не «заморює». Цей скіл **тонкий**: твоє завдання —
37
37
  запустити генерацію і прочитати підсумок.
38
38
 
@@ -51,34 +51,20 @@ docgen:
51
51
  ### Крок 1: Генерація застарілих/відсутніх док
52
52
 
53
53
  ```bash
54
- npx @nitra/cursor fix-doc-files
54
+ npx @nitra/cursor lint doc-files
55
55
  ```
56
56
 
57
- Команда сама: перевіряє omlx (preflight: «сервер лежить» / «модель не влазить у пам'ять
58
- зайнятої машини» / «потрібен API-ключ» одна зрозуміла зупинка замість лавини «✗») →
59
- сканує проєктфільтрує застарілі (`stale`) генерує локальною моделлю пише доку зі
60
- **свіжим CRC** (і degraded-маркером, якщо не дотягнула)друкує прогрес і підсумок.
61
-
62
- - Для дуже великого прогону можна порціями: `--from N --limit M`.
63
- - Перегенерувати **всі** доки (не лише застарілі): `--overwrite`.
64
- - Перегенерувати лише degraded (свіжі за CRC, score < порогу): `--retry-degraded`.
57
+ Команда запускає doc-files лінтер у fix-режимі (весь репо): перевіряє omlx
58
+ (preflight: «сервер лежить» / «модель не влазить у пам'ять зайнятої машини» /
59
+ «потрібен API-ключ»одна зрозуміла зупинка замість лавини «✗»)фільтрує застарілі
60
+ (`stale`) генерує локальною моделлюпише доку зі **свіжим CRC** (і degraded-маркером,
61
+ якщо не дотягнула) → друкує прогрес і підсумок.
65
62
 
66
63
  ### Крок 2: Підтвердження
67
64
 
68
65
  Дочекайся підсумку `✓ OK: <N> ⚠ degraded: <D> ✗ Err: <E>`. Якщо є помилки — перелічи
69
66
  проблемні файли. Exit-код `1` означає, що хоча б один файл не згенерувався (або не пройшов
70
- preflight). Degraded — не помилка: дока існує, борг видно у `lint-doc-files --degraded`.
71
-
72
- ### Крок 3 (за потреби): перевірка перед завершенням
73
-
74
- ```bash
75
- npx @nitra/cursor lint-doc-files --git
76
- ```
77
-
78
- Перевіряє змінені у задачі джерела (`git diff --name-only HEAD`) проти CRC їхніх док.
79
- Цю ж перевірку виконує **Stop-hook** як твердий гейт: завершити задачу зі застарілими
80
- доками не можна (виняток — масовий прогін понад поріг `N_CURSOR_DOC_FILES_GATE_MAX`, дефолт 50).
81
- Degraded-доки гейт **не** блокує (CRC свіжий); їх список — `lint-doc-files --degraded`.
67
+ preflight). Degraded — не помилка: дока існує, CRC свіжий.
82
68
 
83
69
  ## Правила стилю документа (за adr/ci4)
84
70
 
@@ -98,4 +84,3 @@ Degraded-доки гейт **не** блокує (CRC свіжий); їх спи
98
84
  усі теки `docs/`, а також `*.test.*` / `*.spec.*` / `*.d.ts`. Кореневий repo `docs/` —
99
85
  system-wide only: file-level docs туди не пишуться. Список glob-ів — `docgen-ignore.mjs`.
100
86
  - Агрегуюча документація (module-summary, доменні доки) — окремий скіл `doc-aggregate`, за запитом.
101
- - Для наявних док без CRC одноразово: `npx @nitra/cursor fix-doc-files --stamp` (штампує frontmatter без LLM).
@@ -74,12 +74,12 @@ version: '1.0'
74
74
  inflight-міграції, breaking-change політика, зовнішні залежності.
75
75
  - **Change-file flow,** якщо завдання змінює файли у пакетному workspace (код,
76
76
  правила, скіли, конфіги, тести — не лише `docs/`): промпт має вимагати
77
- `npx @nitra/cursor change --bump <major|minor|patch> --section <Added|Changed|Fixed|Removed> --message "<опис>" [--ws <шлях>]`
77
+ `npx @7n/n ch [--bump <major|minor|patch>] [--section <Added|Changed|Fixed|Removed>] [--message "<опис>"]`
78
78
  і `npx @nitra/cursor fix changelog`. **Ніколи** не інструктуй ручне редагування
79
79
  `CHANGELOG.md` чи bump `version` — це робить release flow / CI (деталь —
80
80
  `.cursor/rules/n-changelog.mdc`, не дублюй її текст). Якщо потрібна реліз-нота —
81
81
  це change-файл `<ws>/.changes/<timestamp>-<rand>.md` з `bump:` і `section:`,
82
- який створює саме `change` CLI, а не редагування файлу вручну.
82
+ який створює `@7n/n ch`, а не редагування файлу вручну.
83
83
  - **Як перевірити** — конкретні команди й специфічні до завдання сигнали
84
84
  успіху.
85
85
 
@@ -197,7 +197,7 @@ version: '1.0'
197
197
  - **Без ручного changelog/version у промпті:** не формулюй у виводі інструкції
198
198
  на кшталт "додати запис у `CHANGELOG.md`", "bump `version` вручну" чи
199
199
  "оновити `package.json#version`". Зміни у workspace фіксуються винятково
200
- через change-file flow (`npx @nitra/cursor change …` → `npx @nitra/cursor fix changelog`);
200
+ через change-file flow (`npx @7n/n ch` → `npx @nitra/cursor fix changelog`);
201
201
  `version`/`CHANGELOG.md` формує CI.
202
202
  - **Не вмикай у промпт:** секрети, `.env`, `node_modules`, бінарні файли,
203
203
  довгі логи, дампи `tree`, повні JSON конфігів, цитати існуючих
@@ -239,7 +239,7 @@ version: '1.0'
239
239
  - Підняти `engines.node` до `>=25`; якщо peer `eslint ^9` несумісний —
240
240
  підняти range.
241
241
  - Зафіксувати зміну change-файлом (НЕ редагувати `CHANGELOG.md` чи `version`
242
- вручну): `npx @nitra/cursor change --bump minor --section Changed --message "engines.node >=25"`.
242
+ вручну): `npx @7n/n ch --bump minor --section Changed --message "engines.node >=25"`.
243
243
 
244
244
  # Обмеження
245
245