@nitra/cursor 12.11.1 → 12.11.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (63) hide show
  1. package/CHANGELOG.md +6 -0
  2. package/package.json +1 -1
  3. package/rules/adr/js/docs/hooks.md +0 -2
  4. package/rules/bun/js/docs/fix-layout.md +25 -0
  5. package/rules/bun/js/fix-layout.mjs +55 -0
  6. package/rules/changelog/js/docs/fix-consistency.md +27 -0
  7. package/rules/changelog/js/docs/index.md +2 -2
  8. package/rules/changelog/js/fix-consistency.mjs +50 -0
  9. package/rules/ci4/policy/vscode_extensions/docs/fix-vscode_extensions.md +21 -0
  10. package/rules/ci4/policy/vscode_extensions/fix-vscode_extensions.mjs +1 -0
  11. package/rules/ga/policy/vscode_extensions/docs/fix-vscode_extensions.md +22 -0
  12. package/rules/ga/policy/vscode_extensions/fix-vscode_extensions.mjs +1 -0
  13. package/rules/graphql/policy/vscode_extensions/docs/fix-vscode_extensions.md +21 -0
  14. package/rules/graphql/policy/vscode_extensions/fix-vscode_extensions.mjs +1 -0
  15. package/rules/js/js/docs/dep-policy.md +12 -10
  16. package/rules/js/policy/vscode_extensions/docs/fix-vscode_extensions.md +22 -0
  17. package/rules/js/policy/vscode_extensions/fix-vscode_extensions.mjs +1 -0
  18. package/rules/js-run/js/docs/fix-runtime.md +25 -0
  19. package/rules/js-run/js/fix-runtime.mjs +41 -0
  20. package/rules/nginx-default-tpl/policy/vscode_extensions/docs/fix-vscode_extensions.md +21 -0
  21. package/rules/nginx-default-tpl/policy/vscode_extensions/fix-vscode_extensions.mjs +1 -0
  22. package/rules/rego/policy/vscode_extensions/docs/fix-vscode_extensions.md +22 -0
  23. package/rules/rego/policy/vscode_extensions/fix-vscode_extensions.mjs +1 -0
  24. package/rules/rust/policy/vscode_extensions/docs/fix-vscode_extensions.md +22 -0
  25. package/rules/rust/policy/vscode_extensions/fix-vscode_extensions.mjs +1 -0
  26. package/rules/style/js/docs/fix-tooling.md +29 -0
  27. package/rules/style/js/fix-tooling.mjs +46 -0
  28. package/rules/style/policy/vscode_extensions/docs/fix-vscode_extensions.md +21 -0
  29. package/rules/style/policy/vscode_extensions/fix-vscode_extensions.mjs +1 -0
  30. package/rules/tauri/policy/vscode_extensions/docs/fix-vscode_extensions.md +21 -0
  31. package/rules/tauri/policy/vscode_extensions/fix-vscode_extensions.mjs +1 -0
  32. package/rules/text/policy/vscode_extensions/docs/fix-vscode_extensions.md +21 -0
  33. package/rules/text/policy/vscode_extensions/fix-vscode_extensions.mjs +1 -0
  34. package/rules/vue/js/docs/packages.md +0 -2
  35. package/scripts/docs/index.md +0 -2
  36. package/scripts/lib/discover-checkable-rules.mjs +1 -0
  37. package/scripts/lib/docs/discover-checkable-rules.md +13 -155
  38. package/scripts/lib/fix/discover-t0-patterns.mjs +83 -0
  39. package/scripts/lib/fix/docs/discover-t0-patterns.md +37 -0
  40. package/scripts/lib/fix/docs/llm-fix-apply.md +12 -10
  41. package/scripts/lib/fix/docs/llm-worker.md +6 -14
  42. package/scripts/lib/fix/docs/orchestrator.md +0 -2
  43. package/scripts/lib/fix/docs/t0.md +11 -10
  44. package/scripts/lib/fix/docs/vscode-ext-add.md +29 -0
  45. package/scripts/lib/fix/t0.mjs +8 -234
  46. package/scripts/lib/fix/vscode-ext-add.mjs +45 -0
  47. package/rules/test/coverage/coverage.mjs +0 -317
  48. package/scripts/coverage-classify/apply.mjs +0 -67
  49. package/scripts/coverage-classify/cache.mjs +0 -77
  50. package/scripts/coverage-classify/docs/apply.md +0 -206
  51. package/scripts/coverage-classify/docs/cache.md +0 -207
  52. package/scripts/coverage-classify/docs/index.md +0 -14
  53. package/scripts/coverage-classify/docs/prompt.md +0 -136
  54. package/scripts/coverage-classify/docs/verdict-schema.md +0 -28
  55. package/scripts/coverage-classify/index.mjs +0 -114
  56. package/scripts/coverage-classify/prompt.mjs +0 -126
  57. package/scripts/coverage-classify/verdict-schema.mjs +0 -35
  58. package/scripts/coverage-fix-extract.mjs +0 -122
  59. package/scripts/coverage-fix.mjs +0 -119
  60. package/scripts/docs/coverage-fix-extract.md +0 -36
  61. package/scripts/docs/coverage-fix.md +0 -181
  62. package/skills/coverage-fix/SKILL.md +0 -131
  63. package/skills/coverage-fix/main.json +0 -1
package/CHANGELOG.md CHANGED
@@ -1,5 +1,11 @@
1
1
  # Changelog
2
2
 
3
+ ## [12.11.2] - 2026-06-25
4
+
5
+ ### Changed
6
+
7
+ - docs: файлова документація для fix-<concern>.mjs та суміжних файлів; feat(fix): розкладаємо T0-паттерни по правилах — fix-<concern>.mjs конвенція
8
+
3
9
  ## [12.11.1] - 2026-06-25
4
10
 
5
11
  ### Changed
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@nitra/cursor",
3
- "version": "12.11.1",
3
+ "version": "12.11.2",
4
4
  "description": "CLI для завантаження cursor-правил (префікс n-) у локальний репозиторій",
5
5
  "keywords": [
6
6
  "cli",
@@ -8,8 +8,6 @@ docgen:
8
8
  score: 100
9
9
  ---
10
10
 
11
- ## Огляд
12
-
13
11
  Модуль перевіряє стан проєкту, валідуючи конфігураційні файли (`settings.json`, `hooks.json`, `settings.local.json`) та перевіряючи наявність структур для документації (adr.mdc). Перевірка включає перевірку наявності необхідних елементів, при цьому шляхи `.git` свідомо ігноруються.
14
12
 
15
13
  ## Поведінка
@@ -0,0 +1,25 @@
1
+ ---
2
+ type: JS Module
3
+ title: fix-layout.mjs
4
+ resource: npm/rules/bun/js/fix-layout.mjs
5
+ docgen:
6
+ crc: 168821f1
7
+ model: omlx/gemma-4-e4b-it-OptiQ-4bit
8
+ score: 100
9
+ ---
10
+
11
+ ## Огляд
12
+
13
+ Файл T0-autofix паттерни для `bun/js/layout.mjs` детермінують FS-виправлення, які видаляють заборонені файли залежностей (наприклад, package-lock.json), створюють відсутній bunfig.toml та рекурсивно видаляють каталог .yarn. Ці виправлення спираються на конфіги, зокрема package-lock.json.
14
+
15
+ ## Поведінка
16
+
17
+ patterns
18
+
19
+ 1. Перевіряє вивід на наявність повідомлення про знайдений заборонений файл. Якщо знайдено, ідентифікує всі заборонені файли. Для кожного ідентифікованого файлу, якщо він існує, видаляє його. Повертає результат, що вказує на успішне видалення файлів або відсутність відповідності.
20
+ 2. Перевіряє вивід на наявність повідомлення про відсутність `bunfig.toml`. Якщо повідомлення знайдено, і якщо файл `bunfig.toml` не існує, створює його з базовим вмістом. Повертає результат, що вказує на успішне створення файлу або на те, що він вже існує.
21
+ 3. Перевіряє вивід на наявність повідомлення про знайдену директорію `.yarn`. Якщо повідомлення знайдено, і якщо директорія `.yarn` існує, рекурсивно видаляє її. Повертає результат, що вказує на успішне видалення директорії або на її відсутність.
22
+
23
+ ## Гарантії поведінки
24
+
25
+ - (специфічних машинно-виведених гарантій немає)
@@ -0,0 +1,55 @@
1
+ /**
2
+ * T0-autofix паттерни для `bun/js/layout.mjs` — детерміновані FS-виправлення
3
+ * заборонених файлів (package-lock.json, yarn.lock тощо), відсутнього bunfig.toml
4
+ * та каталогу .yarn без звернення до LLM.
5
+ */
6
+ import { existsSync, rmSync, writeFileSync } from 'node:fs'
7
+ import { join } from 'node:path'
8
+
9
+ const FORBIDDEN_FILE_RE = /Знайдено заборонений файл: \S+/
10
+ const FORBIDDEN_FILE_MATCH_ALL_RE = /Знайдено заборонений файл: (\S+)/g
11
+
12
+ /** @type {import('../../../scripts/lib/fix/discover-t0-patterns.mjs').T0Pattern[]} */
13
+ export const patterns = [
14
+ {
15
+ id: 'rm-forbidden-file',
16
+ test: out => FORBIDDEN_FILE_RE.test(out),
17
+ apply: (out, cwd) => {
18
+ const matches = [...out.matchAll(FORBIDDEN_FILE_MATCH_ALL_RE)]
19
+ if (matches.length === 0) return { ok: false, action: 'no match' }
20
+
21
+ const removed = []
22
+ for (const m of matches) {
23
+ const filePath = join(cwd, m[1])
24
+ if (existsSync(filePath)) {
25
+ rmSync(filePath, { force: true })
26
+ removed.push(m[1])
27
+ }
28
+ }
29
+ if (removed.length === 0) return { ok: false, action: 'файлів не знайдено' }
30
+ return { ok: true, action: `видалено: ${removed.join(', ')}` }
31
+ }
32
+ },
33
+
34
+ {
35
+ id: 'bun-bunfig-create',
36
+ test: out => /Відсутній bunfig\.toml/.test(out),
37
+ apply: (_out, cwd) => {
38
+ const target = join(cwd, 'bunfig.toml')
39
+ if (existsSync(target)) return { ok: false, action: 'bunfig.toml вже існує' }
40
+ writeFileSync(target, '[install]\nlinker = "hoisted"\n', 'utf8')
41
+ return { ok: true, action: 'створено bunfig.toml' }
42
+ }
43
+ },
44
+
45
+ {
46
+ id: 'bun-yarn-dir-remove',
47
+ test: out => /Знайдено директорію \.yarn/.test(out),
48
+ apply: (_out, cwd) => {
49
+ const target = join(cwd, '.yarn')
50
+ if (!existsSync(target)) return { ok: false, action: '.yarn не знайдено' }
51
+ rmSync(target, { recursive: true, force: true })
52
+ return { ok: true, action: 'видалено .yarn/' }
53
+ }
54
+ }
55
+ ]
@@ -0,0 +1,27 @@
1
+ ---
2
+ type: JS Module
3
+ title: fix-consistency.mjs
4
+ resource: npm/rules/changelog/js/fix-consistency.mjs
5
+ docgen:
6
+ crc: f8727498
7
+ model: omlx/gemma-4-e4b-it-OptiQ-4bit
8
+ score: 100
9
+ ---
10
+
11
+ ## Огляд
12
+
13
+ Створює change-файл для воркспейсів у `changelog/js/consistency.mjs`, коли відсутній відповідний файл. Опис change-файлу береться з суб'єкта останнього git-коміту, а рівень зміни (`bump`) завжди встановлюється як `patch`.
14
+
15
+ ## Поведінка
16
+
17
+ 1. Визначає шаблони для автоматичного виправлення.
18
+ 2. `patterns` містить один шаблон, який перевіряє наявність повідомлення про відсутність change-файлу.
19
+ 3. Якщо шаблон спрацьовує, він виявляє всі воркспейси, які потребують створення change-файлу.
20
+ 4. Визначає опис для change-файлу на основі суб'єкта останнього git-коміту в корені репозиторію. Якщо суб'єкт відсутній, використовується зарезервоване повідомлення.
21
+ 5. Для кожного виявленого воркспейсу створюється change-файл з рівнем `patch` та розділом `Changed`, використовуючи визначений опис.
22
+ 6. Повертає результат, що вказує на успішне створення change-файлів для відповідних воркспейсів.
23
+
24
+ ## Гарантії поведінки
25
+
26
+ - Read-only: не виконує операцій запису (ФС/БД).
27
+ - Перехоплює помилки і не пропускає винятків назовні (fail-safe).
@@ -6,6 +6,6 @@ resource: npm/rules/changelog/js/
6
6
 
7
7
  # npm/rules/changelog/js
8
8
 
9
- | Файл | Тип |
10
- |---|---|
9
+ | Файл | Тип |
10
+ | --------------------------------- | --------- |
11
11
  | [consistency.mjs](consistency.md) | JS Module |
@@ -0,0 +1,50 @@
1
+ /**
2
+ * T0-autofix для `changelog/js/consistency.mjs` — детерміноване створення
3
+ * change-файлу для воркспейсів з релевантними змінами без change-файлу.
4
+ * Subject останнього git-коміту стає описом; bump завжди `patch`.
5
+ */
6
+ import { spawnSync } from 'node:child_process'
7
+ import { join } from 'node:path'
8
+
9
+ import { writeChange } from '../../release/change.mjs'
10
+
11
+ const MISSING_CHANGE_RE = /є релевантні зміни, але немає change-файлу/
12
+ const MISSING_CHANGE_MATCH_ALL_RE = /(?:^|\s)([\w./@-]+): є релевантні зміни, але немає change-файлу/gm
13
+
14
+ const CHANGE_BUMP = 'patch'
15
+ const CHANGE_SECTION = 'Changed'
16
+ const CHANGE_FALLBACK_MESSAGE = 'оновлення'
17
+
18
+ /**
19
+ * @param {string} cwd корінь репозиторію
20
+ * @returns {string} непорожній опис
21
+ */
22
+ function autoChangeMessage(cwd) {
23
+ const r = spawnSync('git', ['log', '-1', '--format=%s'], { cwd, encoding: 'utf8' })
24
+ const subject = r.status === 0 ? (r.stdout ?? '').trim() : ''
25
+ return subject || CHANGE_FALLBACK_MESSAGE
26
+ }
27
+
28
+ /** @type {import('../../../scripts/lib/fix/discover-t0-patterns.mjs').T0Pattern[]} */
29
+ export const patterns = [
30
+ {
31
+ id: 'changelog-create-change-file',
32
+ test: out => MISSING_CHANGE_RE.test(out),
33
+ apply: async (out, cwd) => {
34
+ const workspaces = Array.from(out.matchAll(MISSING_CHANGE_MATCH_ALL_RE), m => m[1])
35
+ if (workspaces.length === 0) return { ok: false, action: 'no match' }
36
+
37
+ const message = autoChangeMessage(cwd)
38
+ const created = []
39
+ for (const ws of workspaces) {
40
+ try {
41
+ const rel = await writeChange({ bump: CHANGE_BUMP, section: CHANGE_SECTION, message, ws, cwd })
42
+ created.push(ws === '.' ? rel : join(ws, rel))
43
+ } catch (error) {
44
+ return { ok: false, action: `writeChange ${ws}: ${error.message}` }
45
+ }
46
+ }
47
+ return { ok: true, action: `створено change-файл (${CHANGE_BUMP}/${CHANGE_SECTION}): ${created.join(', ')}` }
48
+ }
49
+ }
50
+ ]
@@ -0,0 +1,21 @@
1
+ ---
2
+ type: JS Module
3
+ title: fix-vscode_extensions.mjs
4
+ resource: npm/rules/ci4/policy/vscode_extensions/fix-vscode_extensions.mjs
5
+ docgen:
6
+ crc: 319883fc
7
+ model: omlx/gemma-4-e4b-it-OptiQ-4bit
8
+ score: 100
9
+ ---
10
+
11
+ ## Огляд
12
+
13
+ Цей файл відповідає за завантаження шаблонів, необхідних для функціонування розширення VS Code.
14
+
15
+ ## Поведінка
16
+
17
+ 1. Імпортує шаблони для виправлення розширень VS Code з іншого скрипта.
18
+
19
+ ## Гарантії поведінки
20
+
21
+ - Read-only: не виконує операцій запису (ФС/БД).
@@ -0,0 +1 @@
1
+ export { patterns } from '../../../../scripts/lib/fix/vscode-ext-add.mjs'
@@ -0,0 +1,22 @@
1
+ ---
2
+ type: JS Module
3
+ title: fix-vscode_extensions.mjs
4
+ resource: npm/rules/ga/policy/vscode_extensions/fix-vscode_extensions.mjs
5
+ docgen:
6
+ crc: 319883fc
7
+ model: omlx/gemma-4-e4b-it-OptiQ-4bit
8
+ score: 100
9
+ ---
10
+
11
+ ## Огляд
12
+
13
+ Цей файл реалізує застосування шаблонів для форматування розширень VS Code. Він застосовує правила форматування, використовуючи імпортовані шаблони.
14
+
15
+ ## Поведінка
16
+
17
+ 1. Імпортує шаблони для виправлення розширень VS Code.
18
+ 2. Використовує імпортовані шаблони для виконання логіки виправлення розширень VS Code.
19
+
20
+ ## Гарантії поведінки
21
+
22
+ - Read-only: не виконує операцій запису (ФС/БД).
@@ -0,0 +1 @@
1
+ export { patterns } from '../../../../scripts/lib/fix/vscode-ext-add.mjs'
@@ -0,0 +1,21 @@
1
+ ---
2
+ type: JS Module
3
+ title: fix-vscode_extensions.mjs
4
+ resource: npm/rules/graphql/policy/vscode_extensions/fix-vscode_extensions.mjs
5
+ docgen:
6
+ crc: 319883fc
7
+ model: omlx/gemma-4-e4b-it-OptiQ-4bit
8
+ score: 100
9
+ ---
10
+
11
+ ## Огляд
12
+
13
+ Завантажує шаблони, необхідні для функціонування розширення VS Code.
14
+
15
+ ## Поведінка
16
+
17
+ 1. Імпортує шаблони для виправлення розширень VS Code з іншого скрипта.
18
+
19
+ ## Гарантії поведінки
20
+
21
+ - Read-only: не виконує операцій запису (ФС/БД).
@@ -0,0 +1 @@
1
+ export { patterns } from '../../../../scripts/lib/fix/vscode-ext-add.mjs'
@@ -3,26 +3,28 @@ type: JS Module
3
3
  title: dep-policy.mjs
4
4
  resource: npm/rules/js/js/dep-policy.mjs
5
5
  docgen:
6
- crc: 020620cb
6
+ crc: a2417b44
7
7
  model: omlx/gemma-4-e4b-it-OptiQ-4bit
8
8
  score: 100
9
9
  ---
10
10
 
11
- Модуль сканує файли з розширеннями JS/TS у проєкті. Він перевіряє, чи не містять ці файли імпортів, заборонених відповідно до політики (dep-policy.mdc). Модуль виконує перевірку у режимі лише для читання. У разі виявлення порушень, він реєструє їх у звіті. Модуль перехоплює всі можливі помилки (fail-safe) і не генерує винятків назовні. Результат роботи відображається через код виходу, що інформує про статус перевірки (js.mdc).
11
+ ## Огляд
12
+
13
+ Модуль аналізує вміст файлів з розширеннями JS/TS у проєкті. Він перевіряє, чи містять ці файли імпорти, які заборонені відповідно до політики, визначеної в (dep-policy.mdc). При виявленні заборонених специфікаторів, модуль реєструє помилку у звіті та надає рекомендацію щодо заміни, згідно з (js.mdc). Модуль перехоплює всі внутрішні помилки під час сканування, забезпечуючи безпечну роботу.
12
14
 
13
15
  ## Поведінка
14
16
 
15
17
  1. Ініціалізує звітність.
16
18
  2. Визначає кореневу директорію проєкту.
17
- 3. Завантажує списки шляхів, які слід ігнорувати.
18
- 4. Збирає список усіх файлів з розширеннями JS/TS у кореневій директорії, ігноруючи визначені шляхи.
19
- 5. Для кожного зібраного файлу:
19
+ 3. Зчитує списки шляхів, які слід ігнорувати.
20
+ 4. Знаходить усі файли з розширеннями JS/TS у кореневій директорії, дотримуючись списку ігнорування.
21
+ 5. Для кожного знайденого файлу:
20
22
  а. Зчитує вміст файлу.
21
- б. Витягує з вмісту всі імпортовані специфікатори (статичні, динамічні та через `require`).
22
- в. Для кожного витягнутого специфікатора перевіряє, чи він є забороненим відповідно до політики (dep-policy.mdc).
23
- г. Якщо специфікатор заборонений, реєструє помилку у звіті, вказуючи шлях до файлу та заборонений імпорт. Збільшує лічильник порушень.
24
- 6. Якщо порушень не знайдено, реєструє повідомлення про успішну перевірку (js.mdc).
25
- 7. Повертає код виходу звіту.
23
+ б. Витягує всі імпортовані специфікатори з файлу.
24
+ в. Перевіряє кожен витягнутий специфікатор на наявність у списку заборонених специфікаторів (dep-policy.mdc).
25
+ г. Якщо специфікатор заборонений, реєструє помилку у звіті, вказуючи відносний шлях до файлу та підказку про заміну (js.mdc).
26
+ 6. Якщо жодних порушень не знайдено, реєструє успішне повідомлення про перевірку.
27
+ 7. Повертає код виходу з репортера.
26
28
 
27
29
  ## Публічний API
28
30
 
@@ -0,0 +1,22 @@
1
+ ---
2
+ type: JS Module
3
+ title: fix-vscode_extensions.mjs
4
+ resource: npm/rules/js/policy/vscode_extensions/fix-vscode_extensions.mjs
5
+ docgen:
6
+ crc: 319883fc
7
+ model: omlx/gemma-4-e4b-it-OptiQ-4bit
8
+ score: 100
9
+ ---
10
+
11
+ ## Огляд
12
+
13
+ Файл застосовує шаблони для виправлення розширень VS Code. Він виконує заміну рядків у розширеннях відповідно до імпортованих шаблонів.
14
+
15
+ ## Поведінка
16
+
17
+ 1. Імпортує шаблони для виправлення розширень VS Code.
18
+ 2. Використовує імпортовані шаблони для виконання логіки виправлення розширень VS Code.
19
+
20
+ ## Гарантії поведінки
21
+
22
+ - Read-only: не виконує операцій запису (ФС/БД).
@@ -0,0 +1 @@
1
+ export { patterns } from '../../../../scripts/lib/fix/vscode-ext-add.mjs'
@@ -0,0 +1,25 @@
1
+ ---
2
+ type: JS Module
3
+ title: fix-runtime.mjs
4
+ resource: npm/rules/js-run/js/fix-runtime.mjs
5
+ docgen:
6
+ crc: d3b1824f
7
+ model: omlx/gemma-4-e4b-it-OptiQ-4bit
8
+ score: 100
9
+ ---
10
+
11
+ ## Огляд
12
+
13
+ Детерміновано створює канонічний `jsconfig.json` у каталогах `src/` бекенд-пакетів, якщо він відсутній. Конфігурація береться з `jsconfig.json.snippet.json` (єдине джерело істини) і застосовується через публічні функції `patterns`.
14
+
15
+ ## Поведінка
16
+
17
+ 1. `patterns` надає набір правил для автоматичного виправлення.
18
+ 2. Кожне правило перевіряє, чи відсутній `jsconfig.json` у каталогах `src/` бекенд-пакетів, якщо вони існують.
19
+ 3. Якщо правило спрацьовує, воно зчитує канонічне вміст `jsconfig.json` з `policy/jsconfig/template/jsconfig.json.snippet.json`.
20
+ 4. Для кожного знайденого каталогу `src/`, якщо `jsconfig.json` відсутній, він створюється з канонічним вмістом.
21
+ 5. `patterns` повертає результат, що вказує на успішне створення файлів або на відсутність необхідних змін.
22
+
23
+ ## Гарантії поведінки
24
+
25
+ - (специфічних машинно-виведених гарантій немає)
@@ -0,0 +1,41 @@
1
+ /**
2
+ * T0-autofix для `js-run/js/runtime.mjs` — детерміноване створення канонічного
3
+ * `jsconfig.json` у backend-пакетах із `src/` де він відсутній. Канон читається
4
+ * з `policy/jsconfig/template/jsconfig.json.snippet.json` (єдине джерело істини).
5
+ */
6
+ import { existsSync, readFileSync, writeFileSync } from 'node:fs'
7
+ import { join } from 'node:path'
8
+ import { fileURLToPath } from 'node:url'
9
+
10
+ const JSCONFIG_MISSING_RE = /є каталог src\/, але немає jsconfig\.json/
11
+ const JSCONFIG_MISSING_MATCH_ALL_RE = /\[([^\]]+)\] є каталог src\/, але немає jsconfig\.json/gu
12
+
13
+ const JSCONFIG_CONTENT =
14
+ readFileSync(
15
+ fileURLToPath(new URL('../policy/jsconfig/template/jsconfig.json.snippet.json', import.meta.url)),
16
+ 'utf8'
17
+ ).trimEnd() + '\n'
18
+
19
+ /** @type {import('../../../scripts/lib/fix/discover-t0-patterns.mjs').T0Pattern[]} */
20
+ export const patterns = [
21
+ {
22
+ id: 'js-run-jsconfig-create',
23
+ test: out => JSCONFIG_MISSING_RE.test(out),
24
+ apply: (out, cwd) => {
25
+ const matches = [...out.matchAll(JSCONFIG_MISSING_MATCH_ALL_RE)]
26
+ if (matches.length === 0) return { ok: false, action: 'no match' }
27
+
28
+ const created = []
29
+ for (const m of matches) {
30
+ const ws = m[1]
31
+ const target = join(cwd, ws, 'jsconfig.json')
32
+ if (!existsSync(target)) {
33
+ writeFileSync(target, JSCONFIG_CONTENT, 'utf8')
34
+ created.push(ws)
35
+ }
36
+ }
37
+ if (created.length === 0) return { ok: false, action: 'jsconfig.json вже існує в усіх воркспейсах' }
38
+ return { ok: true, action: `створено jsconfig.json: ${created.join(', ')}` }
39
+ }
40
+ }
41
+ ]
@@ -0,0 +1,21 @@
1
+ ---
2
+ type: JS Module
3
+ title: fix-vscode_extensions.mjs
4
+ resource: npm/rules/nginx-default-tpl/policy/vscode_extensions/fix-vscode_extensions.mjs
5
+ docgen:
6
+ crc: 319883fc
7
+ model: omlx/gemma-4-e4b-it-OptiQ-4bit
8
+ score: 100
9
+ ---
10
+
11
+ ## Огляд
12
+
13
+ Цей файл імпортує шаблони, необхідні для функціонування розширення VS Code.
14
+
15
+ ## Поведінка
16
+
17
+ 1. Імпортує шаблони для виправлення розширень VS Code з іншого скрипта.
18
+
19
+ ## Гарантії поведінки
20
+
21
+ - Read-only: не виконує операцій запису (ФС/БД).
@@ -0,0 +1 @@
1
+ export { patterns } from '../../../../scripts/lib/fix/vscode-ext-add.mjs'
@@ -0,0 +1,22 @@
1
+ ---
2
+ type: JS Module
3
+ title: fix-vscode_extensions.mjs
4
+ resource: npm/rules/rego/policy/vscode_extensions/fix-vscode_extensions.mjs
5
+ docgen:
6
+ crc: 319883fc
7
+ model: omlx/gemma-4-e4b-it-OptiQ-4bit
8
+ score: 100
9
+ ---
10
+
11
+ ## Огляд
12
+
13
+ Цей файл імпортує визначення шаблонів з іншого модуля. Це забезпечує доступ до необхідних шаблонів для роботи системних компонентів.
14
+
15
+ ## Поведінка
16
+
17
+ 1. Імпортує визначення шаблонів з іншого модуля.
18
+ 2. Надає доступ до цих шаблонів для використання в системі.
19
+
20
+ ## Гарантії поведінки
21
+
22
+ - Read-only: не виконує операцій запису (ФС/БД).
@@ -0,0 +1 @@
1
+ export { patterns } from '../../../../scripts/lib/fix/vscode-ext-add.mjs'
@@ -0,0 +1,22 @@
1
+ ---
2
+ type: JS Module
3
+ title: fix-vscode_extensions.mjs
4
+ resource: npm/rules/rust/policy/vscode_extensions/fix-vscode_extensions.mjs
5
+ docgen:
6
+ crc: 319883fc
7
+ model: omlx/gemma-4-e4b-it-OptiQ-4bit
8
+ score: 100
9
+ ---
10
+
11
+ ## Огляд
12
+
13
+ Цей файл імпортує визначені шаблони з іншого скрипта та надає їх для використання в інших компонентах системи.
14
+
15
+ ## Поведінка
16
+
17
+ 1. Імпортує шаблони з іншого скрипта.
18
+ 2. Експортує ці шаблони.
19
+
20
+ ## Гарантії поведінки
21
+
22
+ - Read-only: не виконує операцій запису (ФС/БД).
@@ -0,0 +1 @@
1
+ export { patterns } from '../../../../scripts/lib/fix/vscode-ext-add.mjs'
@@ -0,0 +1,29 @@
1
+ ---
2
+ type: JS Module
3
+ title: fix-tooling.mjs
4
+ resource: npm/rules/style/js/fix-tooling.mjs
5
+ docgen:
6
+ crc: d9c7a757
7
+ model: omlx/gemma-4-e4b-it-OptiQ-4bit
8
+ score: 100
9
+ ---
10
+
11
+ ## Огляд
12
+
13
+ Модуль T0-autofix впроваджує детерміновані виправлення файлової системи для `style/js/tooling.mjs`. Він створює або доповнює `.stylelintignore` для ігнорування директорії `dist/` та додає `stylelint` до `package.json`, спираючись на `package.json`.
14
+
15
+ ## Поведінка
16
+
17
+ Поведінка
18
+
19
+ 1. `patterns` виконує детерміновані виправлення файлової системи для конфігурації стилізації.
20
+ 2. Перший елемент у `patterns` створює файл `.stylelintignore` у корені робочого каталогу, якщо він не існує. Це робиться для ігнорування директорії `dist/` у процесі стилізації.
21
+ 3. Другий елемент у `patterns` додає рядок `dist/` до файлу `.stylelintignore`, якщо він вже існує, але не містить цього шляху. Це забезпечує ігнорування директорії `dist/`.
22
+ 4. Третій елемент у `patterns` перевіряє, чи містить конфігурація `package.json` запис про `stylelint`.
23
+ 5. Якщо `package.json` не знайдено або є невалідним JSON, виправлення не виконується.
24
+ 6. Якщо `stylelint` вже присутній у `package.json`, виправлення не виконується.
25
+ 7. Якщо `stylelint` відсутній, він додається до `package.json` із конфігурацією, що посилається на `@nitra/stylelint-config`.
26
+
27
+ ## Гарантії поведінки
28
+
29
+ - Перехоплює помилки і не пропускає винятків назовні (fail-safe).
@@ -0,0 +1,46 @@
1
+ /**
2
+ * T0-autofix паттерни для `style/js/tooling.mjs` — детерміновані FS-виправлення:
3
+ * створення або доповнення `.stylelintignore` та додавання `stylelint` до `package.json`.
4
+ */
5
+ import { appendFileSync, existsSync, readFileSync, writeFileSync } from 'node:fs'
6
+ import { join } from 'node:path'
7
+
8
+ /** @type {import('../../../scripts/lib/fix/discover-t0-patterns.mjs').T0Pattern[]} */
9
+ export const patterns = [
10
+ {
11
+ id: 'style-stylelintignore-create',
12
+ test: out => /\.stylelintignore не існує/.test(out),
13
+ apply: (_out, cwd) => {
14
+ writeFileSync(join(cwd, '.stylelintignore'), 'dist/\n', 'utf8')
15
+ return { ok: true, action: 'створено .stylelintignore' }
16
+ }
17
+ },
18
+
19
+ {
20
+ id: 'style-stylelintignore-dist-add',
21
+ test: out => /\.stylelintignore не містить рядка dist\//.test(out),
22
+ apply: (_out, cwd) => {
23
+ appendFileSync(join(cwd, '.stylelintignore'), '\ndist/\n', 'utf8')
24
+ return { ok: true, action: 'додано dist/ до .stylelintignore' }
25
+ }
26
+ },
27
+
28
+ {
29
+ id: 'style-pkg-stylelint-add',
30
+ test: out => /Немає конфігу stylelint/.test(out),
31
+ apply: (_out, cwd) => {
32
+ const pkgPath = join(cwd, 'package.json')
33
+ if (!existsSync(pkgPath)) return { ok: false, action: 'package.json не знайдено' }
34
+ let pkg
35
+ try {
36
+ pkg = JSON.parse(readFileSync(pkgPath, 'utf8'))
37
+ } catch {
38
+ return { ok: false, action: 'package.json: невалідний JSON' }
39
+ }
40
+ if (pkg.stylelint) return { ok: false, action: 'stylelint вже є в package.json' }
41
+ pkg.stylelint = { extends: '@nitra/stylelint-config' }
42
+ writeFileSync(pkgPath, JSON.stringify(pkg, null, 2) + '\n', 'utf8')
43
+ return { ok: true, action: 'додано stylelint до package.json' }
44
+ }
45
+ }
46
+ ]
@@ -0,0 +1,21 @@
1
+ ---
2
+ type: JS Module
3
+ title: fix-vscode_extensions.mjs
4
+ resource: npm/rules/style/policy/vscode_extensions/fix-vscode_extensions.mjs
5
+ docgen:
6
+ crc: 319883fc
7
+ model: omlx/gemma-4-e4b-it-OptiQ-4bit
8
+ score: 100
9
+ ---
10
+
11
+ ## Огляд
12
+
13
+ Завантажує шаблони для виправлення розширень VS Code.
14
+
15
+ ## Поведінка
16
+
17
+ 1. Імпортує шаблони для виправлення розширень VS Code з файлу `../../../../scripts/lib/fix/vscode-ext-add.mjs`.
18
+
19
+ ## Гарантії поведінки
20
+
21
+ - Read-only: не виконує операцій запису (ФС/БД).
@@ -0,0 +1 @@
1
+ export { patterns } from '../../../../scripts/lib/fix/vscode-ext-add.mjs'
@@ -0,0 +1,21 @@
1
+ ---
2
+ type: JS Module
3
+ title: fix-vscode_extensions.mjs
4
+ resource: npm/rules/tauri/policy/vscode_extensions/fix-vscode_extensions.mjs
5
+ docgen:
6
+ crc: 319883fc
7
+ model: omlx/gemma-4-e4b-it-OptiQ-4bit
8
+ score: 100
9
+ ---
10
+
11
+ ## Огляд
12
+
13
+ Цей файл імпортує шаблони, необхідні для модифікації розширень VS Code. Він надає механізм для застосування визначених змін до розширень VS Code.
14
+
15
+ ## Поведінка
16
+
17
+ 1. Імпортує шаблони для виправлення розширень VS Code з файлу `../../../../scripts/lib/fix/vscode-ext-add.mjs`.
18
+
19
+ ## Гарантії поведінки
20
+
21
+ - Read-only: не виконує операцій запису (ФС/БД).
@@ -0,0 +1 @@
1
+ export { patterns } from '../../../../scripts/lib/fix/vscode-ext-add.mjs'