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

feat(plugins): фаза 5c lang-плагінів — JS-сімʼя lint-правил у @7n/rules-lang-js - #145

Merged
vitaliytv merged 1 commit into
mainfrom
claude/lang-plugins-phase5c
Jul 19, 2026
Merged

vitaliytv merged 1 commit into
mainfrom
claude/lang-plugins-phase5c

Conversation

@vitaliytv

Copy link
Copy Markdown
Member

Що зроблено (фаза 5c spec lang-plugins-extraction)

Фінальний великий інкремент фази 5: JS-сімʼя lint-правил їде з ядра у @7n/rules-lang-js. Після 5a (taze) і 5b (doc-files) це закриває lint-поверхню.

Переїхали 9 правил (~14k рядків, 326 файлів)

js, bun, vue, js-run, js-bun-db, js-bun-redis, js-mssql, npm-module, tool-surface → plugins/lang-js/rules/. Плагін тепер contributes.rules: true; дзеркала .cursor/rules/n-js.mdc тощо генеруються з плагінного джерела без зміни контенту (діф дзеркал порожній).

Рушій ядра без імпортів із правил (інверсія залежностей)

auto-rules.mjs імпортував три хелпери з js-правил. Тепер вони в ядрі, а плагін імпортує їх назад через @7n/rules/scripts/… і ре-експортує (публічний API правил не змінився):

  • scripts/lib/glob-to-regex.mjs — globToRegex (спільний для auto.glob-матчингу і перевірки files);
  • scripts/lib/js-source-signals.mjs — textHasBunSqlImport, extractVueScriptBlocks, contentForVueImportScan (fact-збір авто-детекту).

Реєстр предикатів (jsBunDbSignal, depInAnyPackageJson, …) лишився в ядрі свідомо — це диспетчер рушія, декларації main.json:auto.predicate плагінних правил резолвляться ним же.

Залежності

  • З ядра у плагін: eslint, knip, jscpd, oxlint (у ядрі нуль споживачів).
  • Власні deps плагіна: oxc-parser, globby, ignore (спільні з ядром, але імпортуються напряму).
  • peer @7n/rules >=1.27.0.

Дрібне

  • js-run/jsconfig rego тепер із policyDirAbs від модуля плагіна (патерн ci-github).
  • Фікстури service_deploy у ci-github/ci-azure симлінкують реальний lang-js — домен js для relevantDomains приходить із плагіна.
  • Контракт-тест: 25 правил ядра, ownership js-сімʼї за lang-js.
  • Стейл-коментарі/доки оновлені; import-only зміни — чесний CRC-restamp.

Верифікація

  • Сюїти: ядро 2210 ✅, lang-js 462 ✅ (було 28), lang-rust 55 ✅, lang-python 43 ✅, ci-github 42 ✅, ci-azure 6 ✅.
  • lint --base origin/main — exit 0 (лише non-blocking v8r-нотиси про *-canonical.json data-файли, схеми в них ніколи не було).
  • Dogfood: PostToolUse hook цього репо весь час прогону ганяв js/eslint/cspell уже з плагінних правил.
  • Попутно виправлено латентний бите з 5b: doc-files/tests/extractors.test.mjs імпортував неіснуючий ../main.mjs (vitest include його тоді не підхопив).

Behavior note

У репо без установленого lang-js JS-правила не активні (як і решта мовних правил без своїх плагінів) — автодетект за package.json ставить плагін першим запуском npx @7n/rules.

Що лишилось у ядрі свідомо (хвіст, окремі рішення)

  • test — змішане правило (vitest/stryker + cargo-mutants): чекає рішення Д (плагін-до-плагіна композиція) зі спеки.
  • style — CSS/stylelint, не JS-мова.
  • cspell-словники правил — відкладені ще з фази 3.

🤖 Generated with Claude Code

…es-lang-js

- переїзд 9 правил з ядра: js, bun, vue, js-run, js-bun-db, js-bun-redis, js-mssql, npm-module, tool-surface (lang-js тепер contributes.rules)
- рушій auto-rules без імпортів із правил: globToRegex і js-source-signals (textHasBunSqlImport, contentForVueImportScan) винесені в scripts/lib ядра, плагін імпортує їх назад через @7n/rules/scripts і ре-експортує для сумісності API
- залежності інструментів (eslint, knip, jscpd, oxlint) переїхали з ядра у плагін; oxc-parser/globby/ignore — власні deps плагіна
- js-run/jsconfig rego резолвиться через policyDirAbs від модуля плагіна (як у ci-github)
- тести: contract 25 правил ядра + ownership js-сімʼї; auto-rules з RULES_DIRS усіх lang-плагінів; фікстури service_deploy у ci-github/ci-azure лінкують реальний lang-js

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
@vitaliytv
vitaliytv force-pushed the claude/lang-plugins-phase5c branch from c33c6cf to 53af080 Compare July 19, 2026 12:46
@vitaliytv
vitaliytv merged commit e815607 into main Jul 19, 2026
4 of 7 checks passed
@vitaliytv
vitaliytv deleted the claude/lang-plugins-phase5c 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