@7n/rules 1.3.1 → 1.4.0

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 (95) hide show
  1. package/.pi-template/extensions/docs/index.md +9 -0
  2. package/.pi-template/extensions/docs/rtk.md +33 -0
  3. package/.pi-template/extensions/rtk.ts +102 -0
  4. package/CHANGELOG.md +12 -0
  5. package/bin/n-rules.js +1 -0
  6. package/docs/index.md +0 -2
  7. package/docs/vitest.config.md +1 -1
  8. package/package.json +1 -1
  9. package/rules/abie/clean_merged_ignore_branches/docs/fix-clean_merged_ignore_branches.md +31 -0
  10. package/rules/abie/clean_merged_ignore_branches/docs/index.md +9 -0
  11. package/rules/abie/clean_merged_ignore_branches/fix-clean_merged_ignore_branches.mjs +6 -1
  12. package/rules/docker/lint_docker_yml/docs/fix-lint_docker_yml.md +31 -0
  13. package/rules/docker/lint_docker_yml/docs/index.md +9 -0
  14. package/rules/docker/lint_docker_yml/fix-lint_docker_yml.mjs +3 -1
  15. package/rules/ga/clean_ga_workflows/docs/fix-clean_ga_workflows.md +33 -0
  16. package/rules/ga/clean_ga_workflows/docs/index.md +9 -0
  17. package/rules/ga/clean_ga_workflows/fix-clean_ga_workflows.mjs +6 -1
  18. package/rules/ga/clean_merged_branch/docs/fix-clean_merged_branch.md +27 -0
  19. package/rules/ga/clean_merged_branch/docs/index.md +9 -0
  20. package/rules/ga/clean_merged_branch/fix-clean_merged_branch.mjs +6 -1
  21. package/rules/ga/git_ai/docs/fix-git_ai.md +30 -0
  22. package/rules/ga/git_ai/docs/index.md +9 -0
  23. package/rules/ga/git_ai/fix-git_ai.mjs +3 -1
  24. package/rules/ga/lint_ga/docs/fix-lint_ga.md +32 -0
  25. package/rules/ga/lint_ga/docs/index.md +9 -0
  26. package/rules/ga/lint_ga/fix-lint_ga.mjs +3 -1
  27. package/rules/ga/vscode_settings/docs/fix-vscode_settings.md +26 -0
  28. package/rules/ga/vscode_settings/docs/index.md +9 -0
  29. package/rules/ga/vscode_settings/fix-vscode_settings.mjs +3 -1
  30. package/rules/ga/zizmor_yml/docs/fix-zizmor_yml.md +28 -0
  31. package/rules/ga/zizmor_yml/docs/index.md +9 -0
  32. package/rules/js/jscpd_config/docs/fix-jscpd_config.md +26 -0
  33. package/rules/js/jscpd_config/docs/index.md +9 -0
  34. package/rules/js/lint_js_yml/docs/fix-lint_js_yml.md +28 -0
  35. package/rules/js/lint_js_yml/docs/index.md +9 -0
  36. package/rules/js/package_json/docs/fix-package_json.md +26 -0
  37. package/rules/js/package_json/docs/index.md +9 -0
  38. package/rules/js/tooling/data/tooling/knip-canonical.json +1 -0
  39. package/rules/k8s/lint_k8s_yml/docs/fix-lint_k8s_yml.md +30 -0
  40. package/rules/k8s/lint_k8s_yml/docs/index.md +9 -0
  41. package/rules/k8s/lint_k8s_yml/fix-lint_k8s_yml.mjs +3 -1
  42. package/rules/local-ai/main.json +1 -0
  43. package/rules/local-ai/main.mdc +85 -0
  44. package/rules/npm-module/emit_types_config/docs/fix-emit_types_config.md +25 -0
  45. package/rules/npm-module/emit_types_config/docs/index.md +9 -0
  46. package/rules/npm-module/emit_types_config/fix-emit_types_config.mjs +3 -1
  47. package/rules/npm-module/npm_package_json/docs/fix-npm_package_json.md +27 -0
  48. package/rules/npm-module/npm_package_json/docs/index.md +9 -0
  49. package/rules/npm-module/npm_package_json/fix-npm_package_json.mjs +3 -1
  50. package/rules/npm-module/npm_publish_yml/docs/fix-npm_publish_yml.md +28 -0
  51. package/rules/npm-module/npm_publish_yml/docs/index.md +9 -0
  52. package/rules/npm-module/npm_publish_yml/fix-npm_publish_yml.mjs +4 -1
  53. package/rules/npm-module/root_package_json/docs/fix-root_package_json.md +26 -0
  54. package/rules/npm-module/root_package_json/docs/index.md +9 -0
  55. package/rules/npm-module/root_package_json/fix-root_package_json.mjs +3 -1
  56. package/rules/php/lint_php_yml/docs/fix-lint_php_yml.md +28 -0
  57. package/rules/php/lint_php_yml/docs/index.md +9 -0
  58. package/rules/php/lint_php_yml/fix-lint_php_yml.mjs +3 -1
  59. package/rules/python/lint_python_yml/docs/fix-lint_python_yml.md +27 -0
  60. package/rules/python/lint_python_yml/docs/index.md +9 -0
  61. package/rules/python/lint_python_yml/fix-lint_python_yml.mjs +3 -1
  62. package/rules/rego/vscode_settings/docs/fix-vscode_settings.md +27 -0
  63. package/rules/rego/vscode_settings/docs/index.md +9 -0
  64. package/rules/rego/vscode_settings/fix-vscode_settings.mjs +3 -1
  65. package/rules/rust/lint_rust_yml/docs/fix-lint_rust_yml.md +28 -0
  66. package/rules/rust/lint_rust_yml/docs/index.md +9 -0
  67. package/rules/security/lint_security_yml/docs/fix-lint_security_yml.md +31 -0
  68. package/rules/security/lint_security_yml/docs/index.md +9 -0
  69. package/rules/security/lint_security_yml/fix-lint_security_yml.mjs +6 -1
  70. package/rules/style/lint_style_yml/docs/fix-lint_style_yml.md +31 -0
  71. package/rules/style/lint_style_yml/docs/index.md +9 -0
  72. package/rules/style/lint_style_yml/fix-lint_style_yml.mjs +3 -1
  73. package/rules/style/package_json/docs/fix-package_json.md +27 -0
  74. package/rules/style/package_json/docs/index.md +9 -0
  75. package/rules/style/vscode_settings/docs/fix-vscode_settings.md +27 -0
  76. package/rules/style/vscode_settings/docs/index.md +9 -0
  77. package/rules/style/vscode_settings/fix-vscode_settings.mjs +3 -1
  78. package/rules/text/lint_text/docs/fix-lint_text.md +28 -0
  79. package/rules/text/lint_text/docs/index.md +9 -0
  80. package/rules/text/oxfmtrc/docs/fix-oxfmtrc.md +26 -0
  81. package/rules/text/oxfmtrc/docs/index.md +9 -0
  82. package/rules/text/vscode_settings/docs/fix-vscode_settings.md +27 -0
  83. package/rules/text/vscode_settings/docs/index.md +9 -0
  84. package/rules/text/vscode_settings/fix-vscode_settings.mjs +3 -1
  85. package/rules/worktree/vscode_settings/docs/fix-vscode_settings.md +28 -0
  86. package/rules/worktree/vscode_settings/docs/index.md +9 -0
  87. package/rules/worktree/zed_settings/docs/fix-zed_settings.md +28 -0
  88. package/rules/worktree/zed_settings/docs/index.md +9 -0
  89. package/rules/worktree/zed_settings/fix-zed_settings.mjs +3 -1
  90. package/scripts/docs/skills-cli.md +1 -1
  91. package/scripts/docs/sync-claude-config.md +9 -4
  92. package/scripts/lib/fix/docs/index.md +4 -5
  93. package/scripts/lib/fix/docs/template-deep-merge.md +35 -0
  94. package/scripts/skills-cli.mjs +15 -4
  95. package/scripts/sync-claude-config.mjs +145 -36
@@ -0,0 +1,9 @@
1
+ ---
2
+ type: Directory Index
3
+ title: npm/.pi-template/extensions
4
+ resource: npm/.pi-template/extensions/
5
+ ---
6
+
7
+ | Файл | Тип |
8
+ | ---------------- | --------- |
9
+ | [rtk.ts](rtk.md) | TS Module |
@@ -0,0 +1,33 @@
1
+ ---
2
+ type: TS Module
3
+ title: rtk.ts
4
+ resource: npm/.pi-template/extensions/rtk.ts
5
+ docgen:
6
+ crc: f00b429f
7
+ ---
8
+
9
+ ## Огляд
10
+
11
+ Pi.dev-extension для rtk (Rust Token Killer): прозоро переписує bash-команди агента на
12
+ rtk-еквіваленти, щоб стискати вивід CLI-команд і економити токени. Vendored із rtk
13
+ (`rtk init --agent pi`), адаптований під конвенції репо; доставляється sync-ом пакета
14
+ `@7n/rules` у `.pi/extensions/rtk.ts` проєктів-споживачів, коли увімкнене правило
15
+ `local-ai`. Шлях збігається зі шляхом установки самого rtk, тож ручний
16
+ `rtk init --agent pi` поверх — ідемпотентний.
17
+
18
+ ## Поведінка
19
+
20
+ - Тонкий делегат: рішення про переписування ухвалює `rtk rewrite <cmd>` (exit 0 або 3 +
21
+ stdout → команда мутується через `event.input.command`; exit 1 — passthrough).
22
+ - При завантаженні пробує `rtk --version`: без бінарника в PATH або з rtk < 0.23.0
23
+ extension сам вимикається з `console.warn` (fail-open) — установка конфігу безпечна
24
+ до `brew install rtk-ai/tap/rtk`.
25
+ - Пропускає без змін: не-bash tool_call, порожні команди, команди, що вже починаються
26
+ з `rtk `, і будь-що при `RTK_DISABLED=1` в env.
27
+ - Виклики rtk обмежені таймаутом 2 с і сигналом скасування контексту; будь-яка
28
+ неочікувана помилка в обробнику лише логується — команда виконується без переписування.
29
+
30
+ ## Гарантії поведінки
31
+
32
+ - Fail-open: жоден збій rtk/extension не блокує виконання команди агента.
33
+ - Мутує лише `event.input.command` у pi tool_call — жодних записів у ФС чи мережевих викликів.
@@ -0,0 +1,102 @@
1
+ // RTK Pi extension — переписує bash-команди на rtk-еквіваленти для економії токенів.
2
+ // Vendored з rtk (`rtk init --agent pi`, rtk 0.43.0), адаптований під конвенції репо:
3
+ // без імпортів з '@earendil-works/pi-coding-agent' (пакет резолвиться лише в runtime pi,
4
+ // а knip/TS-server проєктів-споживачів його не бачать) — типи описані локально, як у
5
+ // n-rules-adr. Шлях установки `.pi/extensions/rtk.ts` збігається зі шляхом самого rtk —
6
+ // повторний `rtk init --agent pi` ідемпотентний. Потребує rtk >= 0.23.0 у PATH; без
7
+ // нього extension сам вимикається (fail-open).
8
+ //
9
+ // Тонкий делегат: уся rewrite-логіка живе в `rtk rewrite` (єдине джерело правди).
10
+ //
11
+ // Контракт exit-кодів `rtk rewrite`:
12
+ // 0 + stdout rewrite знайдено → мутуємо команду
13
+ // 1 rtk-еквівалента немає → passthrough
14
+ // 3 + stdout rewrite (advisory) → мутуємо команду
15
+
16
+ import { env } from 'node:process'
17
+
18
+ interface PiToolCallEvent {
19
+ toolName?: string
20
+ input: { command?: unknown }
21
+ }
22
+
23
+ interface PiContext {
24
+ signal?: AbortSignal
25
+ }
26
+
27
+ interface PiExecResult {
28
+ code: number
29
+ stdout: string
30
+ killed?: boolean
31
+ }
32
+
33
+ interface PiApi {
34
+ exec: (cmd: string, args: string[], opts?: { timeout?: number; signal?: AbortSignal }) => Promise<PiExecResult>
35
+ on: (event: string, handler: (event: PiToolCallEvent, ctx: PiContext) => Promise<void> | void) => void
36
+ }
37
+
38
+ const REWRITE_TIMEOUT_MS = 2_000
39
+ const MIN_SUPPORTED_RTK_MINOR = 23
40
+
41
+ const SEMVER_RE = /(\d+)\.(\d+)\.(\d+)/
42
+ const RTK_VERSION_PREFIX_RE = /^rtk\s+/
43
+
44
+ // Парсить "X.Y.Z" semver → [major, minor, patch] або null.
45
+ function parseSemver(raw: string): [number, number, number] | null {
46
+ const m = raw.trim().match(SEMVER_RE)
47
+ if (!m) return null
48
+ return [parseInt(m[1], 10), parseInt(m[2], 10), parseInt(m[3], 10)]
49
+ }
50
+
51
+ // Викликає `rtk rewrite`; повертає переписану команду або null (passthrough).
52
+ async function rewriteCommand(pi: PiApi, cmd: string, signal?: AbortSignal): Promise<string | null> {
53
+ const result = await pi.exec('rtk', ['rewrite', cmd], {
54
+ timeout: REWRITE_TIMEOUT_MS,
55
+ signal
56
+ })
57
+ if (result.killed) return null
58
+ if (result.code !== 0 && result.code !== 3) return null
59
+ return result.stdout.trim() || null
60
+ }
61
+
62
+ export default async function (pi: PiApi) {
63
+ // Проба rtk при завантаженні; без бінарника (або із застарим) extension вимикається.
64
+ const ver = await pi.exec('rtk', ['--version'], { timeout: REWRITE_TIMEOUT_MS })
65
+ if (ver.code !== 0) {
66
+ console.warn('[rtk] rtk binary not found in PATH — extension disabled')
67
+ return
68
+ }
69
+
70
+ // `rtk rewrite` з'явився у 0.23.0 — старіші версії не підтримуються.
71
+ const parsed = parseSemver(ver.stdout.replace(RTK_VERSION_PREFIX_RE, ''))
72
+ if (parsed) {
73
+ const [major, minor] = parsed
74
+ if (major === 0 && minor < MIN_SUPPORTED_RTK_MINOR) {
75
+ console.warn(`[rtk] rtk ${ver.stdout.trim()} is too old (need >= 0.23.0) — extension disabled`)
76
+ return
77
+ }
78
+ }
79
+
80
+ pi.on('tool_call', async (event, ctx) => {
81
+ try {
82
+ // В upstream це isToolCallEventType('bash', event) — просте порівняння toolName.
83
+ if (event?.toolName !== 'bash') return
84
+
85
+ const cmd = event.input.command
86
+ if (typeof cmd !== 'string' || cmd.trim() === '') return
87
+
88
+ if (cmd.startsWith('rtk ')) return
89
+ if (env.RTK_DISABLED === '1') return
90
+
91
+ // Делегуємо rewrite-рішення rtk.
92
+ const rewritten = await rewriteCommand(pi, cmd, ctx.signal)
93
+ if (rewritten && rewritten !== cmd) {
94
+ event.input.command = rewritten
95
+ }
96
+ } catch (error) {
97
+ // Fail open: ніколи не блокуємо виконання через неочікувану помилку.
98
+ console.warn('[rtk] unexpected error in tool_call handler; passing through command', error)
99
+ return
100
+ }
101
+ })
102
+ }
package/CHANGELOG.md CHANGED
@@ -1,5 +1,17 @@
1
1
  # Changelog
2
2
 
3
+ ## [1.4.0] - 2026-07-15
4
+
5
+ ### Added
6
+
7
+ - Нове правило `local-ai` (auto: завжди): інтеграція rtk (Rust Token Killer) для стискання виводу CLI-команд агентів. Sync вставляє fail-open PreToolUse hook у `.claude/settings.json` (`rtk hook claude`), preToolUse у `.cursor/hooks.json` (`rtk hook cursor`) та vendored pi-extension `.pi/extensions/rtk.ts`; від користувача потрібен лише `brew install rtk-ai/tap/rtk`. Вимкнення — `disable-rules: ["local-ai"]`.
8
+
9
+ ## [1.3.2] - 2026-07-15
10
+
11
+ ### Fixed
12
+
13
+ - template-deep-merge: eslint (cognitive-complexity, no-negated-array-predicate) і cspell-фікси після PR #66
14
+
3
15
  ## [1.3.1] - 2026-07-14
4
16
 
5
17
  ### Changed
package/bin/n-rules.js CHANGED
@@ -1458,6 +1458,7 @@ async function runSync() {
1458
1458
  }
1459
1459
  if (result.gitignoreAdr) parts.push('.gitignore (adr fragment)')
1460
1460
  if (result.piExtension) parts.push('.pi/extensions/n-rules-adr/')
1461
+ if (result.rtkPiExtension) parts.push('.pi/extensions/rtk.ts')
1461
1462
  if (parts.length > 0) {
1462
1463
  console.log(`🤖 Claude-конфіг: ${parts.join(', ')}`)
1463
1464
  }
package/docs/index.md CHANGED
@@ -4,8 +4,6 @@ title: npm
4
4
  resource: npm/
5
5
  ---
6
6
 
7
- # npm
8
-
9
7
  | Файл | Тип |
10
8
  | --------------------------------------- | --------- |
11
9
  | [stryker.config.mjs](stryker.config.md) | JS Module |
@@ -3,7 +3,7 @@ type: JS Module
3
3
  title: vitest.config.js
4
4
  resource: npm/vitest.config.js
5
5
  docgen:
6
- crc: 01d03a02
6
+ crc: 2c54e477
7
7
  model: omlx/gemma-4-e4b-it-OptiQ-4bit
8
8
  score: 100
9
9
  issues: judge:inaccurate:0.99
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@7n/rules",
3
- "version": "1.3.1",
3
+ "version": "1.4.0",
4
4
  "description": "CLI еталонних правил і skills (префікс n-): синк у репозиторій, дельта-lint, конформність",
5
5
  "keywords": [
6
6
  "cli",
@@ -0,0 +1,31 @@
1
+ ---
2
+ type: JS Module
3
+ title: fix-clean_merged_ignore_branches.mjs
4
+ resource: npm/rules/abie/clean_merged_ignore_branches/fix-clean_merged_ignore_branches.mjs
5
+ docgen:
6
+ crc: 9fe2cc60
7
+ model: openai-codex/gpt-5.5
8
+ tier: cloud-avg
9
+ score: 100
10
+ issues: judge:inaccurate:0.99
11
+ judgeModel: openai-codex/gpt-5.4-mini
12
+ ---
13
+
14
+ ## Огляд
15
+
16
+ `patterns` визначає набір шляхів репозиторію, які правило має враховувати під час перевірки. Воно свідомо не охоплює `.git` і `.github`, щоб не аналізувати службові дані Git та конфігурацію GitHub. Правило працює read-only: лише повідомляє про невідповідність очікуваній структурі, не змінюючи файли чи зовнішні сховища.
17
+
18
+ ## Поведінка
19
+
20
+ 1. `patterns` визначає правило виправлення, яке забезпечує наявність workflow для очищення merged branches.
21
+
22
+ 2. Правило орієнтується на шаблонний стан файлу `.github/workflows/clean-merged-branch.yml`, щоб уніфікувати поведінку репозиторіїв щодо прибирання вже злитих гілок.
23
+
24
+ 3. Під час перевірки свідомо не обходить службові шляхи `.github` і `.git`, окрім цільового workflow-файлу, який є предметом виправлення.
25
+
26
+ 4. `patterns` лише описує очікуване виправлення й не виконує самостійного запису у файлову систему чи інші сховища.
27
+
28
+ ## Гарантії поведінки
29
+
30
+ - Read-only: не виконує операцій запису (ФС/БД).
31
+ - Свідомо пропускає шляхи: `.github`, `.git`.
@@ -0,0 +1,9 @@
1
+ ---
2
+ type: Directory Index
3
+ title: npm/rules/abie/clean_merged_ignore_branches
4
+ resource: npm/rules/abie/clean_merged_ignore_branches/
5
+ ---
6
+
7
+ | Файл | Тип |
8
+ | --------------------------------------------------------------------------- | --------- |
9
+ | [fix-clean_merged_ignore_branches.mjs](fix-clean_merged_ignore_branches.md) | JS Module |
@@ -1,3 +1,8 @@
1
1
  import { createTemplateFixPattern } from '../../../scripts/lib/fix/template-deep-merge.mjs'
2
2
 
3
- export const patterns = [createTemplateFixPattern({ id: 'abie-clean_merged_ignore_branches-template', targetPath: '.github/workflows/clean-merged-branch.yml' })]
3
+ export const patterns = [
4
+ createTemplateFixPattern({
5
+ id: 'abie-clean_merged_ignore_branches-template',
6
+ targetPath: '.github/workflows/clean-merged-branch.yml'
7
+ })
8
+ ]
@@ -0,0 +1,31 @@
1
+ ---
2
+ type: JS Module
3
+ title: fix-lint_docker_yml.mjs
4
+ resource: npm/rules/docker/lint_docker_yml/fix-lint_docker_yml.mjs
5
+ docgen:
6
+ crc: 551913c9
7
+ model: openai-codex/gpt-5.5
8
+ tier: cloud-avg
9
+ score: 100
10
+ issues: judge:inaccurate:0.98
11
+ judgeModel: openai-codex/gpt-5.4-mini
12
+ ---
13
+
14
+ ## Огляд
15
+
16
+ `patterns` визначає поведінку правила для обходу проєкту без змін у файловій системі чи зовнішніх сховищах. Службові директорії `.github` і `.git` свідомо не входять до перевірюваних шляхів, щоб правило працювало лише з релевантним кодом проєкту.
17
+
18
+ ## Поведінка
19
+
20
+ 1. `patterns` визначає правило автоматичного виправлення для workflow перевірки Docker.
21
+
22
+ 2. `patterns` забезпечує наявність стандартного файлу `.github/workflows/lint-docker.yml`, щоб проєкт мав єдиний CI-контроль Docker-конфігурації.
23
+
24
+ 3. `patterns` працює як read-only опис виправлення: сам модуль не змінює файлову систему чи зовнішні сховища.
25
+
26
+ 4. Під час супровідного обходу шляхів свідомо не аналізуються `.github` і `.git`, щоб не змішувати службові директорії з основним кодом проєкту.
27
+
28
+ ## Гарантії поведінки
29
+
30
+ - Read-only: не виконує операцій запису (ФС/БД).
31
+ - Свідомо пропускає шляхи: `.github`, `.git`.
@@ -0,0 +1,9 @@
1
+ ---
2
+ type: Directory Index
3
+ title: npm/rules/docker/lint_docker_yml
4
+ resource: npm/rules/docker/lint_docker_yml/
5
+ ---
6
+
7
+ | Файл | Тип |
8
+ | ------------------------------------------------- | --------- |
9
+ | [fix-lint_docker_yml.mjs](fix-lint_docker_yml.md) | JS Module |
@@ -1,3 +1,5 @@
1
1
  import { createTemplateFixPattern } from '../../../scripts/lib/fix/template-deep-merge.mjs'
2
2
 
3
- export const patterns = [createTemplateFixPattern({ id: 'docker-lint_docker_yml-template', targetPath: '.github/workflows/lint-docker.yml' })]
3
+ export const patterns = [
4
+ createTemplateFixPattern({ id: 'docker-lint_docker_yml-template', targetPath: '.github/workflows/lint-docker.yml' })
5
+ ]
@@ -0,0 +1,33 @@
1
+ ---
2
+ type: JS Module
3
+ title: fix-clean_ga_workflows.mjs
4
+ resource: npm/rules/ga/clean_ga_workflows/fix-clean_ga_workflows.mjs
5
+ docgen:
6
+ crc: e09e62cc
7
+ model: openai-codex/gpt-5.5
8
+ tier: cloud-avg
9
+ score: 100
10
+ issues: judge:inaccurate:0.99
11
+ judgeModel: openai-codex/gpt-5.4-mini
12
+ ---
13
+
14
+ ## Огляд
15
+
16
+ `patterns` визначає, які шляхи правило свідомо не розглядає як цільові для перевірки: `.github` і `.git` пропускаються, щоб службові каталоги репозиторію не змішувалися з робочим кодом.
17
+
18
+ Правило працює read-only: не записує у файлову систему чи бази даних.
19
+
20
+ ## Поведінка
21
+
22
+ 1. `patterns` визначає правило автоматичного виправлення для workflow очищення GitHub Actions.
23
+
24
+ 2. Правило гарантує наявність очікуваного файлу `.github/workflows/clean-ga-workflows.yml` на основі затвердженого шаблону.
25
+
26
+ 3. Виправлення працює як read-only опис дії: саме по собі не записує зміни у файлову систему чи зовнішні сховища.
27
+
28
+ 4. Під час застосування загальних перевірок свідомо не розглядаються службові шляхи `.github` і `.git`, щоб не аналізувати інфраструктурні каталоги як звичайний код.
29
+
30
+ ## Гарантії поведінки
31
+
32
+ - Read-only: не виконує операцій запису (ФС/БД).
33
+ - Свідомо пропускає шляхи: `.github`, `.git`.
@@ -0,0 +1,9 @@
1
+ ---
2
+ type: Directory Index
3
+ title: npm/rules/ga/clean_ga_workflows
4
+ resource: npm/rules/ga/clean_ga_workflows/
5
+ ---
6
+
7
+ | Файл | Тип |
8
+ | ------------------------------------------------------- | --------- |
9
+ | [fix-clean_ga_workflows.mjs](fix-clean_ga_workflows.md) | JS Module |
@@ -1,3 +1,8 @@
1
1
  import { createTemplateFixPattern } from '../../../scripts/lib/fix/template-deep-merge.mjs'
2
2
 
3
- export const patterns = [createTemplateFixPattern({ id: 'ga-clean_ga_workflows-template', targetPath: '.github/workflows/clean-ga-workflows.yml' })]
3
+ export const patterns = [
4
+ createTemplateFixPattern({
5
+ id: 'ga-clean_ga_workflows-template',
6
+ targetPath: '.github/workflows/clean-ga-workflows.yml'
7
+ })
8
+ ]
@@ -0,0 +1,27 @@
1
+ ---
2
+ type: JS Module
3
+ title: fix-clean_merged_branch.mjs
4
+ resource: npm/rules/ga/clean_merged_branch/fix-clean_merged_branch.mjs
5
+ docgen:
6
+ crc: c38d9d28
7
+ model: openai-codex/gpt-5.4-mini
8
+ score: 100
9
+ issues: judge:inaccurate:0.98
10
+ judgeModel: openai-codex/gpt-5.4-mini
11
+ ---
12
+
13
+ ## Огляд
14
+
15
+ `patterns` звіряє шаблонну конфігурацію з відповідними файлами репозиторію, щоб підтримувати узгодженість між шаблоном і робочим станом. Працює лише на читання, не торкається `.github` і `.git`, і не змінює файлову систему чи базу даних.
16
+
17
+ ## Поведінка
18
+
19
+ 1. `patterns` формує набір правил для узгодження шаблонної конфігурації з цільовим workflow-файлом `.github/workflows/clean-merged-branch.yml`.
20
+ 2. `patterns` використовує це правило як частину автоматизованого вирівнювання між шаблоном і робочим репозиторієм, щоб підтримувати однакову поведінку в потрібному workflow.
21
+ 3. `patterns` свідомо не охоплює шляхи `.github` і `.git`, щоб не зачіпати службові та внутрішні дані репозиторію.
22
+ 4. `patterns` працює read-only: лише описує, що треба зіставити, і не записує зміни у файлову систему чи базу даних.
23
+
24
+ ## Гарантії поведінки
25
+
26
+ - Read-only: не виконує операцій запису (ФС/БД).
27
+ - Свідомо пропускає шляхи: `.github`, `.git`.
@@ -0,0 +1,9 @@
1
+ ---
2
+ type: Directory Index
3
+ title: npm/rules/ga/clean_merged_branch
4
+ resource: npm/rules/ga/clean_merged_branch/
5
+ ---
6
+
7
+ | Файл | Тип |
8
+ | --------------------------------------------------------- | --------- |
9
+ | [fix-clean_merged_branch.mjs](fix-clean_merged_branch.md) | JS Module |
@@ -1,3 +1,8 @@
1
1
  import { createTemplateFixPattern } from '../../../scripts/lib/fix/template-deep-merge.mjs'
2
2
 
3
- export const patterns = [createTemplateFixPattern({ id: 'ga-clean_merged_branch-template', targetPath: '.github/workflows/clean-merged-branch.yml' })]
3
+ export const patterns = [
4
+ createTemplateFixPattern({
5
+ id: 'ga-clean_merged_branch-template',
6
+ targetPath: '.github/workflows/clean-merged-branch.yml'
7
+ })
8
+ ]
@@ -0,0 +1,30 @@
1
+ ---
2
+ type: JS Module
3
+ title: fix-git_ai.mjs
4
+ resource: npm/rules/ga/git_ai/fix-git_ai.mjs
5
+ docgen:
6
+ crc: 58c702af
7
+ model: openai-codex/gpt-5.5
8
+ score: 100
9
+ issues: judge:inaccurate:0.98
10
+ judgeModel: openai-codex/gpt-5.4-mini
11
+ ---
12
+
13
+ ## Огляд
14
+
15
+ `patterns` визначає шаблони пошуку для перевірки проєктних файлів і свідомо не охоплює службові шляхи `.github` та `.git`.
16
+
17
+ Модуль має read-only поведінку без запису у файлову систему чи базу даних, щоб перевірка лише виявляла релевантні збіги й не змінювала стан репозиторію.
18
+
19
+ ## Поведінка
20
+
21
+ 1. `patterns` визначає автоматичне виправлення для підтримки стандартного workflow Git AI у репозиторії.
22
+
23
+ 2. `patterns` забезпечує наявність очікуваного файлу `.github/workflows/git-ai.yml`, щоб перевірка правила могла запропонувати єдиний канонічний варіант налаштування.
24
+
25
+ 3. Під час пошуку цільових файлів свідомо пропускаються службові шляхи `.github` і `.git`, щоб не аналізувати технічні директорії як звичайний проєктний код.
26
+
27
+ ## Гарантії поведінки
28
+
29
+ - Read-only: не виконує операцій запису (ФС/БД).
30
+ - Свідомо пропускає шляхи: `.github`, `.git`.
@@ -0,0 +1,9 @@
1
+ ---
2
+ type: Directory Index
3
+ title: npm/rules/ga/git_ai
4
+ resource: npm/rules/ga/git_ai/
5
+ ---
6
+
7
+ | Файл | Тип |
8
+ | ------------------------------- | --------- |
9
+ | [fix-git_ai.mjs](fix-git_ai.md) | JS Module |
@@ -1,3 +1,5 @@
1
1
  import { createTemplateFixPattern } from '../../../scripts/lib/fix/template-deep-merge.mjs'
2
2
 
3
- export const patterns = [createTemplateFixPattern({ id: 'ga-git_ai-template', targetPath: '.github/workflows/git-ai.yml' })]
3
+ export const patterns = [
4
+ createTemplateFixPattern({ id: 'ga-git_ai-template', targetPath: '.github/workflows/git-ai.yml' })
5
+ ]
@@ -0,0 +1,32 @@
1
+ ---
2
+ type: JS Module
3
+ title: fix-lint_ga.mjs
4
+ resource: npm/rules/ga/lint_ga/fix-lint_ga.mjs
5
+ docgen:
6
+ crc: fd87bb0c
7
+ model: openai-codex/gpt-5.5
8
+ score: 100
9
+ issues: judge:inaccurate:0.98
10
+ judgeModel: openai-codex/gpt-5.4-mini
11
+ ---
12
+
13
+ ## Огляд
14
+
15
+ `patterns` описує перевірку очікуваного вмісту для `.github/workflows/lint-ga.yml`, щоб lint workflow для Google Analytics залишався узгодженим із шаблоном.
16
+
17
+ Секція має read-only призначення: вона фіксує очікувану поведінку без запису у файлову систему чи базу даних. Під час загального обходу свідомо не враховуються службові шляхи `.github` і `.git`.
18
+
19
+ ## Поведінка
20
+
21
+ 1. `patterns` оголошує правило автоматичного виправлення для workflow lint-перевірки Google Analytics.
22
+
23
+ 2. `patterns` забезпечує приведення `.github/workflows/lint-ga.yml` до очікуваного шаблонного стану, щоб CI мав стабільну перевірку GA-правил.
24
+
25
+ 3. `patterns` не виконує запис самостійно: воно лише описує доступне виправлення для зовнішнього механізму застосування.
26
+
27
+ 4. `patterns` свідомо не охоплює службові шляхи `.github` і `.git` як вхідні області для загального обходу, окрім цільового workflow-файлу, який має бути синхронізований із шаблоном.
28
+
29
+ ## Гарантії поведінки
30
+
31
+ - Read-only: не виконує операцій запису (ФС/БД).
32
+ - Свідомо пропускає шляхи: `.github`, `.git`.
@@ -0,0 +1,9 @@
1
+ ---
2
+ type: Directory Index
3
+ title: npm/rules/ga/lint_ga
4
+ resource: npm/rules/ga/lint_ga/
5
+ ---
6
+
7
+ | Файл | Тип |
8
+ | --------------------------------- | --------- |
9
+ | [fix-lint_ga.mjs](fix-lint_ga.md) | JS Module |
@@ -1,3 +1,5 @@
1
1
  import { createTemplateFixPattern } from '../../../scripts/lib/fix/template-deep-merge.mjs'
2
2
 
3
- export const patterns = [createTemplateFixPattern({ id: 'ga-lint_ga-template', targetPath: '.github/workflows/lint-ga.yml' })]
3
+ export const patterns = [
4
+ createTemplateFixPattern({ id: 'ga-lint_ga-template', targetPath: '.github/workflows/lint-ga.yml' })
5
+ ]
@@ -0,0 +1,26 @@
1
+ ---
2
+ type: JS Module
3
+ title: fix-vscode_settings.mjs
4
+ resource: npm/rules/ga/vscode_settings/fix-vscode_settings.mjs
5
+ docgen:
6
+ crc: f3ea1fe1
7
+ model: openai-codex/gpt-5.4-mini
8
+ score: 100
9
+ issues: judge:inaccurate:0.97
10
+ judgeModel: openai-codex/gpt-5.4-mini
11
+ ---
12
+
13
+ ## Огляд
14
+
15
+ `patterns` перевіряє та впорядковує `.vscode/settings.json` на відповідність очікуваному проєктному формату, спираючись на `settings.json`. Це потрібно, щоб редакторні налаштування залишалися в передбачуваному стані без ручних правок.
16
+
17
+ ## Поведінка
18
+
19
+ 1. `patterns` визначає набір правил для узгодження `.vscode/settings.json` з очікуваним шаблоном проєкту.
20
+ 2. `patterns` потрібен, щоб автоматично тримати налаштування редактора в погодженому стані без ручного редагування кожного разу.
21
+ 3. `patterns` працює лише з конфігурацією `.vscode/settings.json`; інших шляхів або файлів у межах цього модуля не охоплює.
22
+ 4. `patterns` не виконує записів у файлову систему чи базу даних і не покладається на кешування.
23
+
24
+ ## Гарантії поведінки
25
+
26
+ - Read-only: не виконує операцій запису (ФС/БД).
@@ -0,0 +1,9 @@
1
+ ---
2
+ type: Directory Index
3
+ title: npm/rules/ga/vscode_settings
4
+ resource: npm/rules/ga/vscode_settings/
5
+ ---
6
+
7
+ | Файл | Тип |
8
+ | ------------------------------------------------- | --------- |
9
+ | [fix-vscode_settings.mjs](fix-vscode_settings.md) | JS Module |
@@ -1,3 +1,5 @@
1
1
  import { createTemplateFixPattern } from '../../../scripts/lib/fix/template-deep-merge.mjs'
2
2
 
3
- export const patterns = [createTemplateFixPattern({ id: 'ga-vscode_settings-template', targetPath: '.vscode/settings.json' })]
3
+ export const patterns = [
4
+ createTemplateFixPattern({ id: 'ga-vscode_settings-template', targetPath: '.vscode/settings.json' })
5
+ ]
@@ -0,0 +1,28 @@
1
+ ---
2
+ type: JS Module
3
+ title: fix-zizmor_yml.mjs
4
+ resource: npm/rules/ga/zizmor_yml/fix-zizmor_yml.mjs
5
+ docgen:
6
+ crc: e1cfb71f
7
+ model: openai-codex/gpt-5.4-mini
8
+ tier: cloud-min
9
+ score: 100
10
+ issues: judge:inaccurate:0.98
11
+ judgeModel: openai-codex/gpt-5.4-mini
12
+ ---
13
+
14
+ ## Огляд
15
+
16
+ `patterns` описує, як привести цільові файли репозиторію до потрібного вигляду з урахуванням свідомо пропущених шляхів `.github` і `.git`. Функція працює read-only і не пише у ФС чи БД.
17
+
18
+ ## Поведінка
19
+
20
+ 1. `patterns` задає набір правил для автоматичного виправлення конфігурації `zizmor` у репозиторії.
21
+ 2. Воно орієнтується на файл `.github/zizmor.yml` і застосовується лише до цього цільового місця.
22
+ 3. Під час роботи свідомо не зачіпає шляхи `.github` і `.git` поза визначеним цільовим файлом, щоб не втручатися в службові та інфраструктурні області.
23
+ 4. Працює у режимі read-only: саме значення `patterns` лише описує поведінку, без запису в файлову систему чи базу даних.
24
+
25
+ ## Гарантії поведінки
26
+
27
+ - Read-only: не виконує операцій запису (ФС/БД).
28
+ - Свідомо пропускає шляхи: `.github`, `.git`.
@@ -0,0 +1,9 @@
1
+ ---
2
+ type: Directory Index
3
+ title: npm/rules/ga/zizmor_yml
4
+ resource: npm/rules/ga/zizmor_yml/
5
+ ---
6
+
7
+ | Файл | Тип |
8
+ | --------------------------------------- | --------- |
9
+ | [fix-zizmor_yml.mjs](fix-zizmor_yml.md) | JS Module |
@@ -0,0 +1,26 @@
1
+ ---
2
+ type: JS Module
3
+ title: fix-jscpd_config.mjs
4
+ resource: npm/rules/js/jscpd_config/fix-jscpd_config.mjs
5
+ docgen:
6
+ crc: 93258f26
7
+ model: openai-codex/gpt-5.4-mini
8
+ tier: cloud-min
9
+ score: 100
10
+ judgeModel: openai-codex/gpt-5.4-mini
11
+ ---
12
+
13
+ ## Огляд
14
+
15
+ `patterns` визначає узгоджені з правилами проєкту зміни для `.jscpd.json` і слугує централізованим орієнтиром для того, що саме має бути виправлено в цьому конфігу.
16
+
17
+ ## Поведінка
18
+
19
+ 1. `patterns` формує перелік правил для уніфікації шаблонного конфіга проєкту.
20
+ 2. Кожне правило орієнтується на конфіг `.jscpd.json`, щоб тримати його в узгодженому, очікуваному форматі.
21
+ 3. `patterns` потрібен для централізованого опису того, що саме має бути виправлено в `.jscpd.json`, без ручного втручання в інші файли чи артефакти.
22
+ 4. `patterns` не змінює файлову систему або базу даних і працює лише як опис набору правок для цього конфіга.
23
+
24
+ ## Гарантії поведінки
25
+
26
+ - Read-only: не виконує операцій запису (ФС/БД).