Skip to content

fix(doc-files): явна діагностика замість тихого "0 кандидатів" при невстановленому плагіні - #199

Merged
vitaliytv merged 1 commit into
mainfrom
claude/doc-files-missing-plugin-detection-cfa5c9
Jul 23, 2026
Merged

fix(doc-files): явна діагностика замість тихого "0 кандидатів" при невстановленому плагіні#199
vitaliytv merged 1 commit into
mainfrom
claude/doc-files-missing-plugin-detection-cfa5c9

Conversation

@vitaliytv

Copy link
Copy Markdown
Member

Summary

  • doc-files-детекція мовчки повертала 0 кандидатів для .js/.vue тощо, коли .n-rules.json явно декларує lang-плагін (напр. @7n/rules-lang-js), але він не встановлений у node_modules — типовий кейс щойно створеного git worktree без bun install. Симптом невідрізнимий від "усі доки актуальні".
  • getUnavailableDeclaredPlugins (resolve-plugins.mjs) і unavailableDocFilesPlugins (lang-extensions.mjs) — чистий предикат без побічних ефектів (не встановлює, не друкує), який рахує лише коли мапа doc-files-розширень порожня.
  • check/main.mjs's lint(ctx) тепер повертає diagnostics: [{level:'warn', message}] з підказкою запустити bun install, коли причина саме в цьому.
  • Сигнал зʼявляється лише на explicit CLI lint doc-files --no-fix --verbose (diagnostics рендеряться лише під --verbose) — у PostToolUse-хуку (без verbose) обчислюється дешево, але ніколи не друкується, щоб не спамити на кожен edit.
  • Не чіпав семантику quiet:true у getDocFilesExtensions — новий предикат живе окремо.

Чому не auto-bun install

Розглядали варіант одразу викликати bun install замість попередження — свідомо цього не зробили: той самий код-шлях виконується з PostToolUse-хука на кожен edit (auto-install у hot-path — набагато гірша регресія, ніж пропущене попередження), а lint doc-files --no-fix за дизайном read-only.

Test plan

  • Юніт-тести: getUnavailableDeclaredPlugins, unavailableDocFilesPlugins, diagnostics-сценарій у check/main.mjs — усі проходять
  • npx @7n/rules lint (delta, --no-fix --verbose) — exit 0, 0 порушень по всіх 23 concern-ах
  • Ручний репро у scratch git-worktree без node_modules: .n-rules.json з plugins: ["@7n/rules-lang-js"]lint doc-files --full --no-fix --verbose показує нове попередження замість тихого "0 знайдено"; після імітації встановлення плагіна те саме попередження зникає, з'являються реальні crc-mismatch порушення
  • hook --post-tool-use підтверджено мовчазним (exit 0, без stdout/stderr) навіть коли плагін не встановлено — без спаму на кожен edit
  • npx @7n/rules lint changelog — exit 0

🤖 Generated with Claude Code

…встановленому плагіні

Свіжий git worktree без bun install мовчки давав 0 doc-files-порушень,
коли .n-rules.json декларує lang-плагін (напр. @7n/rules-lang-js), якого
нема в node_modules — не можна відрізнити "усе актуально" від "плагін не
поставлено". getUnavailableDeclaredPlugins (resolve-plugins.mjs) і
unavailableDocFilesPlugins (lang-extensions.mjs) додають чистий предикат
без побічних ефектів; check/main.mjs повертає diagnostics-попередження,
яке рендериться лише під --verbose на explicit CLI lint doc-files
--no-fix — у PostToolUse-хуку (без verbose) обчислюється, але ніколи не
друкується, щоб не спамити на кожен edit.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
@vitaliytv
vitaliytv merged commit e84f7cb into main Jul 23, 2026
7 checks passed
@vitaliytv
vitaliytv deleted the claude/doc-files-missing-plugin-detection-cfa5c9 branch July 25, 2026 05:03
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