@7n/rules 1.33.0 → 1.34.1
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 +16 -0
- package/bin/n-rules.js +16 -8
- package/package.json +1 -1
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,21 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
|
|
3
|
+
## [1.34.1] - 2026-07-20
|
|
4
|
+
|
|
5
|
+
### Fixed
|
|
6
|
+
|
|
7
|
+
- reexecIfPackageVersionChanged порівнював шлях effectivePackageRoot з BUNDLED_PACKAGE_ROOT замість версії — коли npx резолвиться в локальний node_modules/@7n/rules, шлях до і після self-upgrade однаковий, re-exec пропускався, і процес доводив сесію до кінця зі старим кодом у пам'яті V8
|
|
8
|
+
|
|
9
|
+
## [1.34.0] - 2026-07-20
|
|
10
|
+
|
|
11
|
+
### Added
|
|
12
|
+
|
|
13
|
+
- doc-files: Vue SFC-екстрактор (`<script setup>`) — extractFactsVue/extractUnitsVue через optional peer vue/compiler-sfc; props/emits/expose/слоти як публічний контракт, юніти зі span-корекцією (ADR 260719-2155)
|
|
14
|
+
|
|
15
|
+
### Changed
|
|
16
|
+
|
|
17
|
+
- release: @7n/llm-lib@2.8.3, @7n/rules@1.29.2
|
|
18
|
+
|
|
3
19
|
## [1.33.0] - 2026-07-20
|
|
4
20
|
|
|
5
21
|
### Added
|
package/bin/n-rules.js
CHANGED
|
@@ -1397,20 +1397,26 @@ async function readBundledVersionAt(packageRoot) {
|
|
|
1397
1397
|
* версії через `spawnSync` і завершує поточний процес із успадкованим exit-кодом. Re-exec потрібен,
|
|
1398
1398
|
* бо ES-модулі вже завантажені у V8 (RULE_MIGRATIONS, detectAutoRules тощо) і нова логіка
|
|
1399
1399
|
* без повної заміни процесу не підхопиться. Захист від нескінченного циклу — env `NITRA_CURSOR_REEXEC=1`.
|
|
1400
|
+
*
|
|
1401
|
+
* Порівнює версії, **не** шляхи: коли `npx` резолвиться в локальний
|
|
1402
|
+
* `<projectRoot>/node_modules/@7n/rules` (проєкт уже має пакет у devDependencies),
|
|
1403
|
+
* `effectivePackageRoot` до і після `upgradeNRulesToLatestAndBunInstall` — той самий шлях,
|
|
1404
|
+
* `bun i` лише перезаписує файли за ним in-place. Читати "поточну" версію з цього шляху
|
|
1405
|
+
* ПІСЛЯ апгрейду означало б читати вже НОВУ версію — порівняння завжди збігалося б і
|
|
1406
|
+
* re-exec ніколи не спрацьовував би, попри те що в памʼяті процесу лишається старий код.
|
|
1407
|
+
* Тому `startVersion` фіксується викликачем ДО апгрейду.
|
|
1400
1408
|
* @param {string} effectivePackageRoot шлях, повернутий `upgradeNRulesToLatestAndBunInstall`
|
|
1409
|
+
* @param {string | null} startVersion версія `@7n/rules`, з якою стартував процес (прочитана
|
|
1410
|
+
* з `BUNDLED_PACKAGE_ROOT` до виклику `upgradeNRulesToLatestAndBunInstall`)
|
|
1401
1411
|
* @returns {Promise<void>} повертається лише якщо re-exec не потрібен; інакше кидає `ReexecHandoff`,
|
|
1402
1412
|
* який ловить top-level catch і прокидає exit-код у `process.exitCode`
|
|
1403
1413
|
*/
|
|
1404
|
-
async function reexecIfPackageVersionChanged(effectivePackageRoot) {
|
|
1414
|
+
async function reexecIfPackageVersionChanged(effectivePackageRoot, startVersion) {
|
|
1405
1415
|
if (env.NITRA_CURSOR_REEXEC === '1') {
|
|
1406
1416
|
return
|
|
1407
1417
|
}
|
|
1408
|
-
if (effectivePackageRoot === BUNDLED_PACKAGE_ROOT) {
|
|
1409
|
-
return
|
|
1410
|
-
}
|
|
1411
|
-
const currentVersion = await readBundledVersionAt(BUNDLED_PACKAGE_ROOT)
|
|
1412
1418
|
const installedVersion = await readBundledVersionAt(effectivePackageRoot)
|
|
1413
|
-
if (!
|
|
1419
|
+
if (!startVersion || !installedVersion || startVersion === installedVersion) {
|
|
1414
1420
|
return
|
|
1415
1421
|
}
|
|
1416
1422
|
const newBinPath = join(effectivePackageRoot, 'bin', 'n-rules.js')
|
|
@@ -1418,7 +1424,7 @@ async function reexecIfPackageVersionChanged(effectivePackageRoot) {
|
|
|
1418
1424
|
return
|
|
1419
1425
|
}
|
|
1420
1426
|
console.log(
|
|
1421
|
-
`🔁 Перезапуск ${PACKAGE_NAME}: процес стартував на ${
|
|
1427
|
+
`🔁 Перезапуск ${PACKAGE_NAME}: процес стартував на ${startVersion}, ` +
|
|
1422
1428
|
`після self-upgrade встановлено ${installedVersion}.\n` +
|
|
1423
1429
|
` Re-exec свіжого бінаря, щоб підхопити нову логіку (RULE_MIGRATIONS, auto-detect тощо).\n`
|
|
1424
1430
|
)
|
|
@@ -1456,11 +1462,13 @@ async function runSync() {
|
|
|
1456
1462
|
console.log(`\n🔧 ${PACKAGE_NAME} — завантаження cursor-правил\n`)
|
|
1457
1463
|
|
|
1458
1464
|
const projectRoot = cwd()
|
|
1465
|
+
// Фіксуємо ДО апгрейду — див. коментар над reexecIfPackageVersionChanged.
|
|
1466
|
+
const startVersion = await readBundledVersionAt(BUNDLED_PACKAGE_ROOT)
|
|
1459
1467
|
const effectivePackageRoot = await runSyncStep(`❌ Не вдалося оновити ${PACKAGE_NAME} або виконати bun i: `, () =>
|
|
1460
1468
|
upgradeNRulesToLatestAndBunInstall(projectRoot, BUNDLED_PACKAGE_ROOT)
|
|
1461
1469
|
)
|
|
1462
1470
|
|
|
1463
|
-
await reexecIfPackageVersionChanged(effectivePackageRoot)
|
|
1471
|
+
await reexecIfPackageVersionChanged(effectivePackageRoot, startVersion)
|
|
1464
1472
|
|
|
1465
1473
|
const bundledRulesDir = join(effectivePackageRoot, 'rules')
|
|
1466
1474
|
const bundledSkillsDir = join(effectivePackageRoot, 'skills')
|