This repository was archived by the owner on Sep 11, 2026. It is now read-only.
Repository navigation
fix(sync): reexecIfPackageVersionChanged порівнює версії, не шляхи - #163
Merged
Merged
Conversation
Коли npx резолвиться в локальний <projectRoot>/node_modules/@7n/rules (проєкт уже має пакет у devDependencies), effectivePackageRoot до і після upgradeNRulesToLatestAndBunInstall — той самий шлях, bun i лише перезаписує файли за ним in-place. Стара перевірка `effectivePackageRoot === BUNDLED_PACKAGE_ROOT` пропускала re-exec у цьому випадку, а читання "поточної" версії з того самого шляху ПІСЛЯ self-upgrade завжди повертало вже НОВУ версію — порівняння версій ніколи не відрізнялось, re-exec не спрацьовував, і решта сесії виконувалась зі старим кодом модулів у пам'яті V8 (RULE_MIGRATIONS, resolvePluginList тощо), попри свіжий файл на диску. startVersion тепер фіксується викликачем (runSync) ДО виклику upgradeNRulesToLatestAndBunInstall — порівняння версій відбувається незалежно від того, збігається шлях чи ні. Виявлено при верифікації #161 (per-категорійний автодетект плагінів): перший npx-прогін у projекті з уже встановленим @7n/rules не підхопив щойно опубліковану версію; другий (новий процес) — підхопив.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to subscribe to this conversation on GitHub.
Already have an account?
Sign in.
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
Виявлено при live-верифікації #161 (per-категорійний автодетект плагінів) на реальному проєкті: перший запуск
npx @7n/rulesпісля публікації нової версії не підхопив щойно опубліковані зміни, хочаbun iкоректно встановив нову версію вnode_modules. Другий запуск (новий процес) — підхопив.Причина:
reexecIfPackageVersionChanged()мала ранній вихідif (effectivePackageRoot === BUNDLED_PACKAGE_ROOT) return. Колиnpxрезолвиться в уже встановлений локально пакет (<projectRoot>/node_modules/@7n/rules— типовий випадок для проєкту, де@7n/rulesвже вdevDependencies),effectivePackageRoot(кудиupgradeNRulesToLatestAndBunInstallщойно доставив нову версію) іBUNDLED_PACKAGE_ROOT(звідки стартував поточний процес) — той самий шлях,bun iлише перезаписує файли за ним in-place. Функція виходила одразу, ніколи не читаючи версію — а якби й читала її з того самого шляху ПІСЛЯbun i, отримала б уже НОВУ версію, і порівнянняcurrentVersion === installedVersionтеж завжди збігалося б. У будь-якому разі re-exec не спрацьовував, і решта сесії (readConfig,resolvePluginList,RULE_MIGRATIONSтощо) виконувалась зі старим кодом модулів у пам'яті V8, попри свіжий файл на диску — саме той механізм, заради якого re-exec взагалі існує (див. докстрінг функції).Фікс:
startVersionтепер фіксується викликачем (runSync) до викликуupgradeNRulesToLatestAndBunInstall(тобто версія, з якою реально стартував процес) і порівнюється з версією, прочитаною зeffectivePackageRootпісля апгрейду — незалежно від того, збігаються шляхи чи ні.Test plan
bunx vitest runдляresolve-plugins/upgrade-n-rules-and-install/read-n-rules-config-lite— 69/69, без регресій (функція не експортована й не мала прямих юніт-тестів раніше).version: "1.29.0"уpackage.json, запущена напряму якnode_modules/@7n/rules/bin/n-rules.js(так само, як резолвитьсяnpx, коли пакет уже встановлено) — до фіксу re-exec не спрацьовував; після фіксу коректно друкує🔁 Перезапуск @7n/rules: процес стартував на 1.29.0, після self-upgrade встановлено 1.33.0і успадковує exit-код дочірнього процесу.npx @7n/rules lint(дельта, worktree-only skill) — 0 порушень з першого разу.🤖 Generated with Claude Code