Skip to content

fix(package): везти NOTICE в тарболе + clean-consumer гейт перед публикацией - #3

Merged
alexnikolskiy merged 1 commit into
mainfrom
fix/package-notice-and-consumer-gate
Jul 26, 2026
Merged

fix(package): везти NOTICE в тарболе + clean-consumer гейт перед публикацией#3
alexnikolskiy merged 1 commit into
mainfrom
fix/package-notice-and-consumer-gate

Conversation

@alexnikolskiy

Copy link
Copy Markdown
Contributor

Пробный pnpm pack перед выпуском показал две вещи, которых зелёный набор тестов увидеть не мог.

1. NOTICE не попадал в тарбол

files: ["dist"] авто-добавляет только LICENSE и README. Apache-2.0 §4(d) требует распространять NOTICE вместе с работой — то есть это дефект соответствия лицензии, и он уехал бы в самом первом выпуске.

2. Тесты импортируют src/, а потребитель получает тарбол

Они расходятся при любом дрейфе files, exports или вывода сборки: пакет может быть полностью зелёным в репо и всё равно устанавливаться в сломанный импорт.

Добавлен clean-consumer гейт — порт проверки, которую карточка прямо называет в «Environment / operations prerequisites». Он пакует настоящий артефакт, ставит его в одноразовый проект вне workspace (без хойстинга и workspace-линков, которые замазали бы пропущенную зависимость), импортирует через публичный вход и прогоняет реальный simulate() — импорт, который резолвится, но бросает на первом вызове, это тоже сломанный релиз.

Гейт заведён и в обычный CI, и в release-workflow до publish: npm иммутабелен по версии, ловить такое после публикации уже нечем.

Проверено от обратного

Без NOTICE в files гейт падает с exit 1 и называет пропавший файл — то есть это проверка, а не декорация. С правкой: clean consumer: import + simulate() OK, typecheck чист, 100 тестов зелёные.

🤖 Generated with Claude Code

…икацией

Пробный pack перед выпуском показал две вещи, которые нельзя было увидеть из
зелёного набора тестов.

1. NOTICE не попадал в тарбол. `files: ["dist"]` авто-добавляет только LICENSE и
   README, а Apache-2.0 §4(d) требует распространять NOTICE вместе с работой.
   Формально — дефект соответствия лицензии в самом первом выпуске.

2. Набор тестов импортирует src/, а потребитель получает ТАРБОЛ. Они расходятся
   при любом дрейфе `files`, `exports` или вывода сборки: пакет может быть
   полностью зелёным в репо и всё равно устанавливаться в сломанный импорт.

Поэтому добавлен clean-consumer гейт (порт проверки, которую карточка прямо
называет в prerequisites): пакует настоящий артефакт, ставит его в одноразовый
проект ВНЕ workspace — без хойстинга и workspace-линков, которые замазали бы
пропущенную зависимость, — импортирует через публичный вход и прогоняет реальный
simulate(). Импорт, который резолвится, но бросает на первом же вызове, — это
тоже сломанный релиз.

Гейт заведён и в CI, и в release-workflow ДО publish: npm иммутабелен по версии,
и ловить такое после публикации уже нечем. Проверен от обратного — без NOTICE
падает с exit 1 и называет пропавший файл.
@alexnikolskiy
alexnikolskiy merged commit 7f8b46b into main Jul 26, 2026
4 checks passed
@alexnikolskiy
alexnikolskiy deleted the fix/package-notice-and-consumer-gate branch July 26, 2026 17:40
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant