Skip to content
This repository was archived by the owner on Sep 11, 2026. It is now read-only.

fix(lang-js): stylelint — задекларована залежність плагіна, не мовчазний no-op - #162

Merged
vitaliytv merged 1 commit into
mainfrom
claude/stylelint-declared-dep
Jul 20, 2026
Merged

vitaliytv merged 1 commit into
mainfrom
claude/stylelint-declared-dep

Conversation

@vitaliytv

Copy link
Copy Markdown
Member

Контекст

За запитом користувача провів аудит трьох мовних плагінів (lang-js/lang-rust/lang-python) після завершення фази 5: два незалежні агенти — один структурний (маніфести, main.json/main.mdc/concern↔main.mjs контракт, залишкові посилання на старі шляхи), другий живий (реальний lint --full, resolvePlugins → rulesDirs → buildDetectPlan introspection, перевірка резолву knip/eslint/stylelint).

Структура — чиста: усі 13 rule-сімей коректно discoverable/dispatchable, cargo_mutants_config (rust) активується правильно, package.json files/contributes.rules без гапів, жодних монорепо-relative імпортів, які зламались би для реального npm-консюмера.

Знайдений реальний баг

style/lint резолвив stylelint лише через node_modules/.bin або PATH, але сам пакет не був задекларований залежністю @7n/rules-lang-js. У цьому монорепо все працювало — випадково, транзитивно через @nitra/stylelint-config кореня. Для незалежного консюмера без власного stylelint-конфіга детектор мовчки no-op'ився: 0 violations, що виглядає як «все чисто», хоча CSS/SCSS/Vue-стилі взагалі не перевірялись — найнебезпечніший тип регресії (зелений, але брехливий).

Фікс

  • stylelint — задекларована залежність плагіна (як eslint/knip/jscpd/oxlint).
  • Відсутність тула (edge case — побитий install) тепер дає видимий warn-diagnostic замість тихого return.
  • +3 тести: filterStyleFiles, resolveStylelint без PATH, lint() diagnostic-контракт (з vi.mock на resolveCmd, бо в цьому репо PATH реально знаходить stylelint — без мока тест не ізольований від хоста).

Попутні косметичні фікси (з першого агента)

  • Stale JSDoc-типи в 7 файлах style/* (../../../scripts/… → @7n/rules/scripts/… — не впливало на runtime, лише на IDE/tsc).
  • Stale прозові посилання на старий шлях ядра в js-bun-redis/redis-imports.md і cargo_mutants_config docs.
  • Фабрикаційний "Огляд" у fix-cargo_mutants_config.md (LLM-рефузал з попереднього generation-run — CRC був узгоджений, тому check це не ловив).
  • T0-pattern id test-cargo-mutants-config-create → rust-cargo-mutants-config-create (узгоджено з фактичним власником після переїзду концерну в правило rust).

Верифікація

  • Ядро 2099 ✅, lang-js 603 ✅ (+7 новий тест-файл), lang-rust 64 ✅.
  • lint --base origin/main — exit 0.
  • doc-files --no-fix — exit 0.

🤖 Generated with Claude Code

…ний no-op

Аудит трьох мовних плагінів (lang-js/lang-rust/lang-python) після фази 5:
структура/wiring чисті (manifest→resolvePlugins→rulesDirs, concern↔main.mjs
контракт, cargo_mutants_config activation — усе коректно), але живий прогін
знайшов реальний гап.

`style/lint` резолвив stylelint лише через node_modules/.bin або PATH, а
залежності на нього в @7n/rules-lang-js не було — у цьому монорепо працювало
випадково (транзитивно через @nitra/stylelint-config кореня), а для
незалежного консюмера без своєї конфігурації stylelint style/lint мовчки
no-op'ився: 0 violations, які виглядають як «все чисто», а насправді нічого
не перевірено.

- stylelint тепер задекларована залежність плагіна (як eslint/knip/jscpd/oxlint)
- відсутність тула (edge case — побитий install) дає видимий warn-diagnostic
  замість тихого return
- +тест на обидва шляхи (filterStyleFiles, resolveStylelint без PATH, lint()
  diagnostic-контракт)

Попутно: stale JSDoc-типи в style/* (7 файлів, ../../../scripts/… замість
@7n/rules/scripts/…), stale прозові посилання на старий шлях ядра в
js-bun-redis/redis-imports.md і cargo_mutants_config docs, фабрикаційний
Огляд у fix-cargo_mutants_config.md (LLM-рефузал з попереднього generation-run,
CRC був узгоджений — check не тригерився), T0-pattern id
test-cargo-mutants-config-create → rust-cargo-mutants-config-create
(узгоджено з фактичним власником після переїзду).

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
@vitaliytv
vitaliytv merged commit 73572ce into main Jul 20, 2026
4 of 7 checks passed
@vitaliytv
vitaliytv deleted the claude/stylelint-declared-dep branch July 25, 2026 05:03
Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant