@7n/rules 1.49.0 → 1.49.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,21 @@
1
1
  # Changelog
2
2
 
3
+ ## [1.49.2] - 2026-07-26
4
+
5
+ ### Fixed
6
+
7
+ - @7n/rules синхронізує точну версію @7n/llm-lib під час спільного release.
8
+
9
+ ## [1.49.1] - 2026-07-25
10
+
11
+ ### Added
12
+
13
+ - Додано JS-оркестрований skill `n-git-reconcile` для аналізу гілок, worktree та stash і перенесення корисних змін у готові PR. CI smoke-check використовує завантажений Linux native addon до release, тому перевіряє native-залежні CLI-модулі в тому самому runtime, що й publish.
14
+
15
+ ### Fixed
16
+
17
+ - Виправлено profile генерації тестів для survived Stryker-мутантів
18
+
3
19
  ## [1.49.0] - 2026-07-25
4
20
 
5
21
  ### Added
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@7n/rules",
3
- "version": "1.49.0",
3
+ "version": "1.49.2",
4
4
  "description": "CLI еталонних правил і skills (префікс n-): синк у репозиторій, дельта-lint, конформність",
5
5
  "keywords": [
6
6
  "cli",
@@ -65,7 +65,7 @@
65
65
  "rename-yaml-extensions": "bun ./bin/n-rules.js rename-yaml-extensions"
66
66
  },
67
67
  "dependencies": {
68
- "@7n/llm-lib": "^2.8.2",
68
+ "@7n/llm-lib": "2.9.2",
69
69
  "@7n/mt": "^0.5.1",
70
70
  "@zed-industries/agent-client-protocol": "^0.4.5",
71
71
  "ajv": "^8.20.0",
@@ -3,23 +3,27 @@ type: JS Module
3
3
  title: release.mjs
4
4
  resource: npm/rules/release/release.mjs
5
5
  docgen:
6
- crc: 3ac9ee4c
6
+ crc: 8042a5fb
7
+ model: openai-codex/gpt-5.4-mini
8
+ tier: cloud-min
9
+ score: 100
10
+ judgeModel: openai-codex/gpt-5.4-mini
7
11
  ---
8
12
 
9
- Файл автоматизує процес випуску версій. Він агрегує зміна-файли для всіх робочих просторів у `version-bump` та `CHANGELOG`, комітить зміни, ставить тег `<name>@<version>` та видаляє використані зміна-файли. Цей процес виконується у CI на гілці `main` (n-rules-release-design, варіант A). Публічні функції, що надає модуль, — `release` та `runReleaseCli`.
13
+ ## Огляд
10
14
 
11
- ## Поведінка
15
+ Файл агрегує per-workspace change-файли у version-bump і `CHANGELOG`, комітить, ставить тег `<name>@<version>` та видаляє використані change-файли. Запускається у CI на `main` за дизайном `n-rules-release-design`, варіант A, і сам нічого не публікує. Публічні функції: `release`, `runReleaseCli`.
12
16
 
13
- release агрегує change-файли для всіх робочих просторів, оновлює версії в маніфестах, додає секції до `CHANGELOG.md`, видаляє використані change-файли, створює коміт та анотовані теги для всіх зібраних релізів, а потім намагається пушити їх у апстрім з повторними спробами.
17
+ ## Поведінка
14
18
 
15
- Обчислений bump обрізається зверху стелею `package.json#release.maxBump` робочого простору: наприклад, `major`-change-файл при стелі `minor` дає лише minor-реліз. Коли стеля реально спрацювала, у консоль друкується попередження з початковим bump, стелею та фінальною версією.
19
+ `release` бере корінь репозиторію та дату, читає `package.json` як джерело workspace-метаданих і далі проходить по кожному workspace у порядку, заданому маніфестом. Для кожного workspace він збирає зміни, оновлює версію, дописує відповідний блок до CHANGELOG і прибирає використані change-файли; якщо для workspace немає релевантних змін, він не входить до списку релізу. Після цього `release` синхронізує точний runtime-пін `@7n/rules` із одночасно випущеним `@7n/llm-lib`, щоб transport не лишався на старій транзитивній версії, а потім формує коміт, анотовані теги `<name>@<version>` і, за увімкненого push, доводить release-коміт до апстріму з ретраями на випадок паралельних push у ту саму гілку. Поверненням є лише перелік фактично зрелізованих пакетів; самі артефакти публікації тут не виконуються.
16
20
 
17
- runReleaseCli виконує процес релізу, викликаючи функцію release, та виводить відповідний статус у консоль.
21
+ `runReleaseCli` є тонкою CLI-обгорткою над `release`: запускає той самий потік з дефолтними параметрами, а в тестах дозволяє підмінити корінь, дату, git-раннер і режим push. Якщо release завершується без помилки, CLI повертає успішний exit-код; якщо ні — не приховує збій.
18
22
 
19
23
  ## Публічний API
20
24
 
21
- release — агрегує change-файли для кожного робочого простору у version-bump та CHANGELOG, комітить зміни, ставить тег `<name>@<version>` та видаляє використані change-файли.
22
- runReleaseCli — виконує команди командного інтерфейсу для запуску процесу випуску.
25
+ - release — агрегує per-workspace change-файли у version-bump і CHANGELOG, створює commit, ставить тег `<name>@<version>` та видаляє use-up change-файли; спирається на налаштування з package.json.
26
+ - runReleaseCli — CLI-entry для запуску `release`, щоб виконати той самий release-сценарій з командного рядка без окремого ручного складання кроків.
23
27
 
24
28
  ## Гарантії поведінки
25
29
 
@@ -14,6 +14,7 @@ import { CHANGES_DIR, readChangeFiles } from './lib/change-file.mjs'
14
14
  import { defaultRunGit, synthesizeChangeFromCommits } from './lib/fallback.mjs'
15
15
 
16
16
  const SEMVER_LINE_RE = /("version"\s*:\s*")[^"]*(")/
17
+ const LLM_LIB_DEPENDENCY_LINE_RE = /("@7n\/llm-lib"\s*:\s*")[^"]*(")/
17
18
  const PY_VERSION_LINE_RE = /^(version\s*=\s*")[^"]*(")/m
18
19
 
19
20
  /**
@@ -36,6 +37,28 @@ async function writeManifestVersion(cwd, manifest, newVersion) {
36
37
  await writeFile(path, replaced)
37
38
  }
38
39
 
40
+ /**
41
+ * Синхронізує точну runtime-залежність `@7n/rules` з одночасно випущеним
42
+ * `@7n/llm-lib`. Точний pin змушує consumer lockfile оновити transport разом
43
+ * з rules, а не зберегти стару сумісну транзитивну версію.
44
+ * @param {string} cwd корінь монорепо
45
+ * @param {Array<{ ws: string, name: string | null, newVersion: string }>} released щойно випущені workspace-и
46
+ * @returns {Promise<void>} результат
47
+ */
48
+ async function synchronizeRulesLlmLibDependency(cwd, released) {
49
+ const llmLib = released.find(entry => entry.name === '@7n/llm-lib')
50
+ const rules = released.find(entry => entry.name === '@7n/rules')
51
+ if (!llmLib || !rules) return
52
+
53
+ const path = join(cwd, rules.ws, 'package.json')
54
+ const text = await readFile(path, 'utf8')
55
+ const replaced = text.replace(LLM_LIB_DEPENDENCY_LINE_RE, (_match, p1, p2) => `${p1}${llmLib.newVersion}${p2}`)
56
+ if (replaced === text) {
57
+ throw new Error(`release: не вдалося синхронізувати @7n/llm-lib у ${rules.ws}/package.json`)
58
+ }
59
+ await writeFile(path, replaced)
60
+ }
61
+
39
62
  /**
40
63
  * @param {string} cwd корінь
41
64
  * @param {string} ws workspace
@@ -196,6 +219,7 @@ export async function release(opts = {}) {
196
219
  }
197
220
 
198
221
  if (released.length > 0) {
222
+ await synchronizeRulesLlmLibDependency(cwd, released)
199
223
  await commitAndPushRelease(released, tags, runGit, push)
200
224
  }
201
225
  return released