diff --git a/.agents/skills/source-command-n-brainstorming/SKILL.md b/.agents/skills/source-command-n-brainstorming/SKILL.md new file mode 100644 index 0000000..fb60f7e --- /dev/null +++ b/.agents/skills/source-command-n-brainstorming/SKILL.md @@ -0,0 +1,15 @@ +--- +name: 'source-command-n-brainstorming' +description: >- + Фасилітація структурованої генерації ідей для будь-якої теми — продуктові фічі, архітектурні рішення, бізнес-стратегія, назви, маркетинг, вирішення проблем. ОБОВ'ЯЗКОВО використовуй цей skill, коли користувач каже "давай побрейнштормимо", "накидай ідей", "хочу подумати над X", "які є варіанти для...", просить допомогти придумати щось з нуля, або коли задача явно на стадії "ще не зрозуміло що робити" (на відміну від "вже зрозуміло що робити, допоможи зробити"). Не використовуй для чистого уточнення вимог до вже визначеної фічі (це просто уточнюючі питання, без техніки генерації) і не використовуй, якщо користувач вже приніс готове рішення і просить його реалізувати. +--- + +# source-command-n-brainstorming + +Use this skill when the user asks to run the migrated source command `n-brainstorming`. + +## Command Template + +# n-brainstorming + +Виконай інструкції зі скілу `.cursor/skills/n-brainstorming/SKILL.md`. diff --git a/.agents/skills/source-command-n-coverage-fix/SKILL.md b/.agents/skills/source-command-n-coverage-fix/SKILL.md deleted file mode 100644 index cf1122b..0000000 --- a/.agents/skills/source-command-n-coverage-fix/SKILL.md +++ /dev/null @@ -1,14 +0,0 @@ ---- -name: 'source-command-n-coverage-fix' -description: 'Автономна команда: запускає n-cursor coverage → читає вцілілих мутантів → ітеративно пише тести до конвергенції (max 3 ітерації)' ---- - -# source-command-n-coverage-fix - -Use this skill when the user asks to run the migrated source command `n-coverage-fix`. - -## Command Template - -# n-coverage-fix - -Виконай інструкції зі скілу `.cursor/skills/n-coverage-fix/SKILL.md`. diff --git a/.agents/skills/source-command-n-fix-tests/SKILL.md b/.agents/skills/source-command-n-fix-tests/SKILL.md deleted file mode 100644 index 5cb177a..0000000 --- a/.agents/skills/source-command-n-fix-tests/SKILL.md +++ /dev/null @@ -1,14 +0,0 @@ ---- -name: 'source-command-n-fix-tests' -description: 'Ітеративно дописати тести щоб підвищити mutation score — читає вцілілі мутанти з COVERAGE.md і запускає агент до конвергенції' ---- - -# source-command-n-fix-tests - -Use this skill when the user asks to run the migrated source command `n-fix-tests`. - -## Command Template - -# n-fix-tests - -Виконай інструкції зі скілу `.cursor/skills/n-fix-tests/SKILL.md`. diff --git a/.agents/skills/source-command-n-fix/SKILL.md b/.agents/skills/source-command-n-fix/SKILL.md deleted file mode 100644 index 61aa6f5..0000000 --- a/.agents/skills/source-command-n-fix/SKILL.md +++ /dev/null @@ -1,14 +0,0 @@ ---- -name: 'source-command-n-fix' -description: 'Виправити проєкт відповідно до всіх правил в .cursor/rules/' ---- - -# source-command-n-fix - -Use this skill when the user asks to run the migrated source command `n-fix`. - -## Command Template - -# n-fix - -Виконай інструкції зі скілу `.cursor/skills/n-fix/SKILL.md`. diff --git a/.agents/skills/source-command-n-start-check/SKILL.md b/.agents/skills/source-command-n-start-check/SKILL.md deleted file mode 100644 index 28db289..0000000 --- a/.agents/skills/source-command-n-start-check/SKILL.md +++ /dev/null @@ -1,14 +0,0 @@ ---- -name: 'source-command-n-start-check' -description: 'Smoke-перевірка bun-монорепо: зайти в кожен воркспейс зі `start`-скриптом, прогнати `start` і зафіксувати, чи проєкт взагалі запускається без негайного краху' ---- - -# source-command-n-start-check - -Use this skill when the user asks to run the migrated source command `n-start-check`. - -## Command Template - -# n-start-check - -Виконай інструкції зі скілу `.cursor/skills/n-start-check/SKILL.md`. diff --git a/.agents/skills/source-command-n-worktree/SKILL.md b/.agents/skills/source-command-n-worktree/SKILL.md deleted file mode 100644 index 5b30497..0000000 --- a/.agents/skills/source-command-n-worktree/SKILL.md +++ /dev/null @@ -1,14 +0,0 @@ ---- -name: 'source-command-n-worktree' -description: 'Створення та керування git-worktree через n-cursor worktree CLI: ізольований workspace у .worktrees// з інвентарним файлом-описом' ---- - -# source-command-n-worktree - -Use this skill when the user asks to run the migrated source command `n-worktree`. - -## Command Template - -# n-worktree - -Виконай інструкції зі скілу `.cursor/skills/n-worktree/SKILL.md`. diff --git a/.changes/260722-1638.md b/.changes/260722-1638.md new file mode 100644 index 0000000..0edcaa0 --- /dev/null +++ b/.changes/260722-1638.md @@ -0,0 +1,5 @@ +--- +bump: patch +section: Removed +--- +Дочистка інфраструктури: прибрано мертві правила worktree/image-compress, застарілі дзеркала .agents/skills, чужі рантайм-логи .codex/hooks diff --git a/.codex/hooks/.normalize-state b/.codex/hooks/.normalize-state deleted file mode 100644 index d9ce67f..0000000 --- a/.codex/hooks/.normalize-state +++ /dev/null @@ -1 +0,0 @@ -1780930000 diff --git a/.codex/hooks/capture-decisions.log b/.codex/hooks/capture-decisions.log deleted file mode 100644 index 2789575..0000000 --- a/.codex/hooks/capture-decisions.log +++ /dev/null @@ -1,226 +0,0 @@ -2026-06-03T06:27:27+03:00 fired: ab3011c1-78a9-4cd9-a140-83733702e73e -2026-06-03T06:27:27+03:00 → using claude CLI (model: sonnet) -2026-06-03T06:27:46+03:00 → response length: 705, first 200: **Проблема:** ключ `"7"` в полі `bin` є невалідним ім'ям для CLI-команди за стандартами npm. - -Npm вимагає, щоб ім'я bin-команди відповідало правилам валідного shell-ідентифікатора або package-name. На -2026-06-03T06:27:46+03:00 → response missing '## ' header -2026-06-03T06:32:19+03:00 fired: ab3011c1-78a9-4cd9-a140-83733702e73e -2026-06-03T06:32:19+03:00 → using claude CLI (model: sonnet) -2026-06-03T06:32:40+03:00 → response length: 1863, first 200: --- - -## ADR Перейменування bin-entrypoint та усунення `./` у полі `bin` package.json - -## Context and Problem Statement - -При `npm publish` пакету `@7n/7` npm видаляв bin-запис із попередженням `"bin[7] -2026-06-03T06:32:40+03:00 wrote: /Users/vitaliytv/www/vitaliytv/7n/docs/adr/20260603-063240-перейменування-bin-entrypoint-та-усунення-у-полі-bin-package.md -2026-06-03T06:33:35+03:00 fired: ab3011c1-78a9-4cd9-a140-83733702e73e -2026-06-03T06:33:35+03:00 → using claude CLI (model: sonnet) -2026-06-03T06:34:20+03:00 → response length: 2764, first 200: ## ADR Формат шляху `bin` у `package.json` без префікса `./` - -## Context and Problem Statement -Під час `npm publish` з'являлося попередження `"bin[7n]" script name bin/cli.js was invalid and removed`, -2026-06-03T06:34:20+03:00 wrote: /Users/vitaliytv/www/vitaliytv/7n/docs/adr/20260603-063420-формат-шляху-bin-у-package-json-без-префікса.md -2026-06-03T06:34:55+03:00 fired: ab3011c1-78a9-4cd9-a140-83733702e73e -2026-06-03T06:34:56+03:00 → using claude CLI (model: sonnet) -2026-06-03T06:35:15+03:00 → response length: 1903, first 200: `publishConfig.access: "public"` збережено. Dry-run підтверджує **public access**. - -Тепер можна: `npm publish` ---- - -Готово. - -## ADR Перейменування bin-entrypoint та усунення у полі bin package.json - -# -2026-06-03T06:35:15+03:00 wrote: /Users/vitaliytv/www/vitaliytv/7n/docs/adr/20260603-063515-перейменування-bin-entrypoint-та-усунення-у-полі-bin-package.md -2026-06-03T06:37:07+03:00 fired: ab3011c1-78a9-4cd9-a140-83733702e73e -2026-06-03T06:37:07+03:00 → using claude CLI (model: sonnet) -2026-06-03T06:37:50+03:00 → response length: 3902, first 200: ## ADR Перейменування bin-entrypoint та усунення `./`-префікса у полі `bin` package.json - -## Context and Problem Statement -`npm publish` автоматично видаляв запис `bin` з `npm/package.json` із поперед -2026-06-03T06:37:50+03:00 wrote: /Users/vitaliytv/www/vitaliytv/7n/docs/adr/20260603-063750-перейменування-bin-entrypoint-та-усунення-префікса-у-полі-bi.md -2026-06-03T06:40:38+03:00 fired: ab3011c1-78a9-4cd9-a140-83733702e73e -2026-06-03T06:40:38+03:00 → using claude CLI (model: sonnet) -2026-06-03T06:41:26+03:00 → response length: 4885, first 200: ## ADR Перейменування bin-ентрипоінту та команди CLI - -## Context and Problem Statement -`npm publish` відхиляв bin-запис у `npm/package.json` з попередженням `"bin[7]" script name bin/7.js was invalid -2026-06-03T06:41:26+03:00 wrote: /Users/vitaliytv/www/vitaliytv/7n/docs/adr/20260603-064126-перейменування-bin-ентрипоінту-та-команди-cli.md -2026-06-03T06:41:31+03:00 fired: ab3011c1-78a9-4cd9-a140-83733702e73e -2026-06-03T06:41:31+03:00 → using claude CLI (model: sonnet) -2026-06-03T06:42:28+03:00 fired: ab3011c1-78a9-4cd9-a140-83733702e73e -2026-06-03T06:42:28+03:00 → using claude CLI (model: sonnet) -2026-06-03T06:42:31+03:00 → response length: 4645, first 200: ## ADR Перейменування bin-ентрипоінта та усунення префікса `./` у полі `bin` - -## Context and Problem Statement -`npm publish` видавав попередження `"bin[7]" script name bin/7.js was invalid and removed -2026-06-03T06:42:31+03:00 wrote: /Users/vitaliytv/www/vitaliytv/7n/docs/adr/20260603-064231-перейменування-bin-ентрипоінта-та-усунення-префікса-у-полі-b.md -2026-06-03T06:43:25+03:00 → response length: 5102, first 200: ## ADR Формат шляху `bin` у `package.json` — без префікса `./` - -## Context and Problem Statement -Під час `npm publish` пакета `@7n/n` npm видаляв увесь запис `bin` з попередженням `"script name bin/cl -2026-06-03T06:43:25+03:00 wrote: /Users/vitaliytv/www/vitaliytv/7n/docs/adr/20260603-064325-формат-шляху-bin-у-package-json-без-префікса.md -2026-06-03T06:46:10+03:00 fired: ab3011c1-78a9-4cd9-a140-83733702e73e -2026-06-03T06:46:10+03:00 → using claude CLI (model: sonnet) -2026-06-03T06:47:10+03:00 → response length: 4858, first 200: ## ADR Видалення префікса `./` у значенні `bin` у `package.json` - -## Context and Problem Statement -При виконанні `npm publish` реєстр npm автоматично прибирав запис `bin` з `package.json` і виводив по -2026-06-03T06:47:10+03:00 wrote: /Users/vitaliytv/www/vitaliytv/7n/docs/adr/20260603-064710-видалення-префікса-у-значенні-bin-у-package-json.md -2026-06-03T06:48:35+03:00 fired: ab3011c1-78a9-4cd9-a140-83733702e73e -2026-06-03T06:48:35+03:00 → using claude CLI (model: sonnet) -2026-06-03T06:49:16+03:00 → response length: 5294, first 200: Please provide the transcript for analysis. The message contained only partial transcript data — the section after "filename: 7n-n-0.1.0.tgz" appears cut off. - -Based on the transcript provided, here a -2026-06-03T06:49:16+03:00 wrote: /Users/vitaliytv/www/vitaliytv/7n/docs/adr/20260603-064916-назва-bin-файлу-n-js-замість-числового-7-js.md -2026-06-03T06:49:53+03:00 fired: ab3011c1-78a9-4cd9-a140-83733702e73e -2026-06-03T06:49:53+03:00 → using claude CLI (model: sonnet) -2026-06-03T06:50:29+03:00 → response length: 3797, first 200: ## ADR Вибір шляху до bin-ентрипоїнту в `package.json` без провідного `./` - -## Context and Problem Statement -При `npm publish` пакет `@7n/7` (тепер `@7n/n`) отримував попередження `"bin[7n]" script na -2026-06-03T06:50:29+03:00 wrote: /Users/vitaliytv/www/vitaliytv/7n/docs/adr/20260603-065029-вибір-шляху-до-bin-ентрипоїнту-в-package-json-без-провідного.md -2026-06-03T06:50:57+03:00 fired: ab3011c1-78a9-4cd9-a140-83733702e73e -2026-06-03T06:50:58+03:00 → using claude CLI (model: sonnet) -2026-06-03T06:51:26+03:00 → response length: 2685, first 200: ## ADR Назва npm-пакета та entrypoint bin для @7n/n - -## Context and Problem Statement -Пакет `@7n/7` не публікувався на npm через два послідовних блокери: спочатку неправильний формат bin-ентрипоінту в -2026-06-03T06:51:26+03:00 wrote: /Users/vitaliytv/www/vitaliytv/7n/docs/adr/20260603-065126-назва-npm-пакета-та-entrypoint-bin-для-7n-n.md -2026-06-03T19:12:31+03:00 fired: ac5d5ded-3dca-4d75-87e0-5bd3fac9a046 -2026-06-03T19:12:31+03:00 → using claude CLI (model: sonnet) -2026-06-03T19:12:55+03:00 → response length: 2625, first 200: ## ADR Виділення merge-ядра у `merge.js` та команда `getpull` - -## Context and Problem Statement -У `getw.js` існував механізм «інтелектуального» багатокрокового мерджу змін із git-worktree у поточну гі -2026-06-03T19:12:55+03:00 wrote: /Users/vitaliytv/www/vitaliytv/7n/docs/adr/20260603-191255-виділення-merge-ядра-у-merge-js-та-команда-getpull.md -2026-06-03T19:21:56+03:00 fired: ac5d5ded-3dca-4d75-87e0-5bd3fac9a046 -2026-06-03T19:21:56+03:00 → using claude CLI (model: sonnet) -2026-06-03T19:22:47+03:00 → response length: 3651, first 200: ## ADR Винесення ядра мерджу у спільний lib `merge.js` - -## Context and Problem Statement -У `npm/getw.js` містився механізм «інтелектуального» багатокрокового мерджу з git-worktree. Для нової команди ` -2026-06-03T19:22:47+03:00 wrote: /Users/vitaliytv/www/vitaliytv/7n/docs/adr/20260603-192247-винесення-ядра-мерджу-у-спільний-lib-merge-js.md -2026-06-03T19:31:34+03:00 fired: ac5d5ded-3dca-4d75-87e0-5bd3fac9a046 -2026-06-03T19:31:34+03:00 → using claude CLI (model: sonnet) -2026-06-03T19:32:29+03:00 → response length: 4150, first 200: ## ADR Виокремлення ядра delta-мерджу в `merge.js` та нова команда `getpull` - -## Context and Problem Statement -Командa `getw` у `npm/getw.js` містила вбудований механізм «інтелектуального» багатокроко -2026-06-03T19:32:29+03:00 wrote: /Users/vitaliytv/www/vitaliytv/7n/docs/adr/20260603-193229-виокремлення-ядра-delta-мерджу-в-merge-js-та-нова-команда-ge.md -2026-06-03T19:44:26+03:00 fired: ac5d5ded-3dca-4d75-87e0-5bd3fac9a046 -2026-06-03T19:44:26+03:00 → using claude CLI (model: sonnet) -2026-06-03T19:44:53+03:00 → response length: 4043, first 200: Env-кнопки нейтральні. Діаграма: - ---- - -``` -┌─────────────────────────────────────────────────────────────────┐ -│ n-7 CLI (index.js) │ -│ -2026-06-03T19:44:53+03:00 → response missing '## ' header -2026-06-03T19:47:03+03:00 fired: ac5d5ded-3dca-4d75-87e0-5bd3fac9a046 -2026-06-03T19:47:04+03:00 → using claude CLI (model: sonnet) -2026-06-03T19:50:58+03:00 → response length: 4861, first 200: ## ADR Винесення ядра delta-мерджу в спільний lib `merge.js` - -## Context and Problem Statement -Логіка багатокрокового «інтелектуального» мерджу (Tier 0–3: `git apply` → `git merge-file --diff3` → `mer -2026-06-03T19:50:58+03:00 wrote: /Users/vitaliytv/www/vitaliytv/7n/docs/adr/20260603-195058-винесення-ядра-delta-мерджу-в-спільний-lib-merge-js.md -2026-06-03T19:53:09+03:00 fired: ac5d5ded-3dca-4d75-87e0-5bd3fac9a046 -2026-06-03T19:53:09+03:00 → using claude CLI (model: sonnet) -2026-06-03T19:54:02+03:00 → response length: 4387, first 200: ## ADR Виокремлення ядра delta-мерджу в спільну бібліотеку `merge.js` - -## Context and Problem Statement -Механізм «інтелектуального» багатокрокового мерджу (Tier 0–3: `git apply` → `git merge-file --di -2026-06-03T19:54:02+03:00 wrote: /Users/vitaliytv/www/vitaliytv/7n/docs/adr/20260603-195402-виокремлення-ядра-delta-мерджу-в-спільну-бібліотеку-merge-js.md -2026-06-03T19:58:38+03:00 fired: ac5d5ded-3dca-4d75-87e0-5bd3fac9a046 -2026-06-03T19:58:38+03:00 → using claude CLI (model: sonnet) -2026-06-03T19:59:44+03:00 → response length: 4778, first 200: Here are the MADR decision records extracted from this session: - -## ADR Виділення спільного ядра дельта-мержу в `npm/merge.js` - -## Context and Problem Statement -Механізм «інтелектуального» багатокроко -2026-06-03T19:59:44+03:00 wrote: /Users/vitaliytv/www/vitaliytv/7n/docs/adr/20260603-195944-виділення-спільного-ядра-дельта-мержу-в-npm-merge-js.md -2026-06-03T20:00:49+03:00 fired: d261d410-e912-4f06-8fd5-2770efae874a -2026-06-03T20:00:49+03:00 → using claude CLI (model: sonnet) -2026-06-03T20:01:15+03:00 → response length: 1764, first 200: ## ADR Нова команда `push`: автогенерація commit-повідомлення та squash локальних комітів - -## Context and Problem Statement -У CLI `@7n/n` вже є команди `getw` і `getpull` для перенесення delta-змін мі -2026-06-03T20:01:15+03:00 wrote: /Users/vitaliytv/www/vitaliytv/7n/docs/adr/20260603-200115-нова-команда-push-автогенерація-commit-повідомлення-та-squas.md -2026-06-03T20:06:39+03:00 fired: ac5d5ded-3dca-4d75-87e0-5bd3fac9a046 -2026-06-03T20:06:39+03:00 → using claude CLI (model: sonnet) -2026-06-03T20:07:51+03:00 → response length: 7649, first 200: ## ADR Винесення спільного ядра delta-мерджу в `merge.js` - -## Context and Problem Statement -`getw.js` містив вбудований механізм «інтелектуального» багатокрокового мерджу (Tier 0–3: `git apply` → `git -2026-06-03T20:07:51+03:00 wrote: /Users/vitaliytv/www/vitaliytv/7n/docs/adr/20260603-200751-винесення-спільного-ядра-delta-мерджу-в-merge-js.md -2026-06-03T20:11:10+03:00 fired: ac5d5ded-3dca-4d75-87e0-5bd3fac9a046 -2026-06-03T20:11:10+03:00 → using claude CLI (model: sonnet) -2026-06-03T20:12:05+03:00 → response length: 5711, first 200: Based on this session transcript, I'll produce the MADR decision documentation. - ---- - -## ADR Виділення спільного ядра delta-мерджу в `merge.js` - -## Context and Problem Statement -`getw.js` містив механ -2026-06-03T20:12:05+03:00 wrote: /Users/vitaliytv/www/vitaliytv/7n/docs/adr/20260603-201205-виділення-спільного-ядра-delta-мерджу-в-merge-js.md -2026-06-03T20:12:25+03:00 fired: d261d410-e912-4f06-8fd5-2770efae874a -2026-06-03T20:12:25+03:00 → using claude CLI (model: sonnet) -2026-06-03T20:13:13+03:00 → response length: 4873, first 200: ## ADR Нова команда `push`: сквош локальних комітів з LLM-генерацією повідомлення - -## Context and Problem Statement -У CLI `@7n/n` вже є `getw` і `getpull` для отримання змін. Відсутня симетрична коман -2026-06-03T20:13:13+03:00 wrote: /Users/vitaliytv/www/vitaliytv/7n/docs/adr/20260603-201313-нова-команда-push-сквош-локальних-комітів-з-llm-генерацією-п.md -2026-06-03T20:17:20+03:00 fired: ac5d5ded-3dca-4d75-87e0-5bd3fac9a046 -2026-06-03T20:17:20+03:00 → using claude CLI (model: sonnet) -2026-06-03T20:18:49+03:00 → response length: 7071, first 200: ## ADR Виділення спільного ядра delta-мерджу у `npm/merge.js` - -## Context and Problem Statement -`getw` містив власну реалізацію багатокрокового merge-механізму. Для нової команди `pull` (колишня `getp -2026-06-03T20:18:49+03:00 wrote: /Users/vitaliytv/www/vitaliytv/7n/docs/adr/20260603-201849-виділення-спільного-ядра-delta-мерджу-у-npm-merge-js.md -2026-06-03T20:24:20+03:00 fired: d261d410-e912-4f06-8fd5-2770efae874a -2026-06-03T20:24:20+03:00 → using claude CLI (model: sonnet) -2026-06-03T20:25:14+03:00 → response length: 4719, first 200: ## ADR Команда `push`: squash локальних комітів і fast-forward push з авто-getpull - -## Context and Problem Statement -У репозиторії `@7n/n` вже існують команди `getw` і `getpull` для переносу дельти мі -2026-06-03T20:25:14+03:00 wrote: /Users/vitaliytv/www/vitaliytv/7n/docs/adr/20260603-202514-команда-push-squash-локальних-комітів-і-fast-forward-push-з.md -2026-06-03T20:28:49+03:00 fired: d261d410-e912-4f06-8fd5-2770efae874a -2026-06-03T20:28:49+03:00 → using claude CLI (model: sonnet) -2026-06-03T20:29:37+03:00 → response length: 4268, first 200: ## ADR Команда `push`: squash-коміт + автоматичний getpull при дивергенції - -## Context and Problem Statement -Проєкту потрібна команда, яка збирає всі локальні незапушені зміни (коміти + робоче дерево) -2026-06-03T20:29:37+03:00 wrote: /Users/vitaliytv/www/vitaliytv/7n/docs/adr/20260603-202937-команда-push-squash-коміт-автоматичний-getpull-при-дивергенц.md -2026-06-03T20:31:25+03:00 fired: d261d410-e912-4f06-8fd5-2770efae874a -2026-06-03T20:31:25+03:00 → using claude CLI (model: sonnet) -2026-06-03T20:32:08+03:00 → response length: 5204, first 200: Знайшов ADR, пов'язані з цим AI coding сесіоном. Проаналізую transcript і виведу MADR-рішення. - -## ADR Команда `push`: сквош локальних комітів і fast-forward push з авто-pull - -## Context and Problem S -2026-06-03T20:32:08+03:00 wrote: /Users/vitaliytv/www/vitaliytv/7n/docs/adr/20260603-203208-команда-push-сквош-локальних-комітів-і-fast-forward-push-з-а.md -2026-06-03T20:33:11+03:00 fired: d261d410-e912-4f06-8fd5-2770efae874a -2026-06-03T20:33:11+03:00 → using claude CLI (model: sonnet) -2026-06-03T20:35:26+03:00 → response length: 740, first 200: Створено 3 clean ADR-файли (без frontmatter, timestamp-префікс з чернетки збережено): - -1. **`20260603-203208-команда-push-сквош-…`** — дизайн команди `push`: назва, `git add -A`, без підтвердження, `- -2026-06-03T20:35:26+03:00 → response missing '## ' header -2026-06-03T20:36:27+03:00 fired: d261d410-e912-4f06-8fd5-2770efae874a -2026-06-03T20:36:27+03:00 → using claude CLI (model: sonnet) -2026-06-03T20:37:31+03:00 → response length: 5463, first 200: ## ADR Команда `n-7 push`: squash локальних комітів, авто-pull за дивергенції, push без підтвердження - -## Context and Problem Statement -Проєкт мав команди для перенесення змін із worktree (`getw`) та -2026-06-03T20:37:31+03:00 wrote: /Users/vitaliytv/www/vitaliytv/7n/docs/adr/20260603-203731-команда-n-7-push-squash-локальних-комітів-авто-pull-за-дивер.md -2026-06-03T21:12:13+03:00 fired: -2026-06-03T21:12:13+03:00 → no transcript path -2026-06-03T21:12:17+03:00 fired: -2026-06-03T21:12:17+03:00 → no transcript path -2026-06-08T17:46:38+03:00 fired: -2026-06-08T17:46:38+03:00 → no transcript path diff --git a/.codex/hooks/normalize-decisions.log b/.codex/hooks/normalize-decisions.log deleted file mode 100644 index 58138d8..0000000 --- a/.codex/hooks/normalize-decisions.log +++ /dev/null @@ -1,47 +0,0 @@ -2026-06-03T06:32:19+03:00 drafts found: 0 (threshold: 30) -2026-06-03T06:33:35+03:00 drafts found: 1 (threshold: 30) -2026-06-03T06:34:56+03:00 drafts found: 2 (threshold: 30) -2026-06-03T06:37:07+03:00 drafts found: 3 (threshold: 30) -2026-06-03T06:40:38+03:00 drafts found: 4 (threshold: 30) -2026-06-03T06:41:31+03:00 drafts found: 5 (threshold: 30) -2026-06-03T06:42:28+03:00 drafts found: 5 (threshold: 30) -2026-06-03T06:46:10+03:00 drafts found: 7 (threshold: 30) -2026-06-03T06:48:35+03:00 drafts found: 8 (threshold: 30) -2026-06-03T06:49:53+03:00 drafts found: 9 (threshold: 30) -2026-06-03T06:50:58+03:00 drafts found: 10 (threshold: 30) -2026-06-03T19:12:31+03:00 drafts found: 10 (threshold: 30) -2026-06-03T19:21:56+03:00 drafts found: 58 (threshold: 30) -2026-06-03T19:21:56+03:00 batch size: 10 -2026-06-03T19:21:56+03:00 using claude CLI (model: sonnet) -2026-06-03T19:24:34+03:00 operations parsed: 10 -2026-06-03T19:24:34+03:00 delete: 20260603-063240-перейменування-bin-entrypoint-та-усунення-у-полі-bin-package.md — Проміжний стан (cli.js, не фінальний n.js). Рішення про видалення ./ зафіксовано в 20260603-064710-npm-bin-без-провідного-слеша.md, рішення про перейменування — в 20260603-065029-bin-ентрипоінт-n.md. Жодного нового змісту. -2026-06-03T19:24:34+03:00 delete: 20260603-063420-формат-шляху-bin-у-package-json-без-префікса.md — Дублює DRAFT-001 — ті самі два рішення (видалення ./ і перейменування у cli), обидва вже покриті чистими ADR-ами. Нового змісту немає. -2026-06-03T19:24:34+03:00 delete: 20260603-063515-перейменування-bin-entrypoint-та-усунення-у-полі-bin-package.md — Проміжний стан з артефактами («publishConfig.access: public збережено. Тепер можна: npm publish. Готово.»). Всі рішення покриті чистими ADR-ами. Нового змісту немає. -2026-06-03T19:24:34+03:00 delete: 20260603-063750-перейменування-bin-entrypoint-та-усунення-префікса-у-полі-bi.md — Проміжний стан (команда cli, не n). Нюанс про scripts.start із ./ вже наявний у 20260603-064710-npm-bin-без-провідного-слеша.md (через DRAFT-008, що є джерелом цього clean-ADR). Решта рішень покрита. Нічого нового. -2026-06-03T19:24:34+03:00 delete: 20260603-064126-перейменування-bin-ентрипоінту-та-команди-cli.md — Проміжний стан: пакет @7n/cli (не фінальний @7n/n), команда cli. Всі чотири рішення (rename, ./, publishConfig, package name) вже покриті чотирма clean-ADR-ами. -2026-06-03T19:24:35+03:00 delete: 20260603-064231-перейменування-bin-ентрипоінта-та-усунення-префікса-у-полі-b.md — Проміжний стан із назвою пакета @7n/n (ще до фінального коміту). Всі три рішення (видалення ./, @7n/n, publishConfig) повністю покриті clean-ADR-ами. Нічого нового. -2026-06-03T19:24:35+03:00 delete: 20260603-064325-формат-шляху-bin-у-package-json-без-префікса.md — Це джерельний драфт, з якого вже створено clean-ADR 20260603-064325-publishconfig-access-public.md (збіг timestamp-префіксу 064325). Зміст перенесено. -2026-06-03T19:24:35+03:00 delete: 20260603-064710-видалення-префікса-у-значенні-bin-у-package-json.md — Це джерельний драфт, з якого вже створено clean-ADR 20260603-064710-npm-bin-без-провідного-слеша.md (збіг timestamp-префіксу 064710). Зміст, включно з нюансом scripts.start, вже там. -2026-06-03T19:24:35+03:00 delete: 20260603-064916-назва-bin-файлу-n-js-замість-числового-7-js.md — Це джерельний драфт, з якого вже створено clean-ADR 20260603-064916-npm-package-name-7n-n.md (збіг timestamp-префіксу 064916). Зміст перенесено. -2026-06-03T19:24:35+03:00 delete: 20260603-065029-вибір-шляху-до-bin-ентрипоїнту-в-package-json-без-провідного.md — Це джерельний драфт, з якого вже створено clean-ADR 20260603-065029-bin-ентрипоінт-n.md (збіг timestamp-префіксу 065029). Зміст, включно з примою про версію 0.1.0/0.1.1, вже там. -2026-06-03T19:24:35+03:00 done (applied 10, skipped 0) -2026-06-03T19:31:34+03:00 skip: only 578 s since last attempt (min 21600s) -2026-06-03T19:44:26+03:00 skip: only 1350 s since last attempt (min 21600s) -2026-06-03T19:47:03+03:00 skip: only 1507 s since last attempt (min 21600s) -2026-06-03T19:53:09+03:00 skip: only 1873 s since last attempt (min 21600s) -2026-06-03T19:58:38+03:00 skip: only 2202 s since last attempt (min 21600s) -2026-06-03T20:00:49+03:00 skip: only 2333 s since last attempt (min 21600s) -2026-06-03T20:06:39+03:00 skip: only 2683 s since last attempt (min 21600s) -2026-06-03T20:11:10+03:00 skip: only 2954 s since last attempt (min 21600s) -2026-06-03T20:12:25+03:00 skip: only 3029 s since last attempt (min 21600s) -2026-06-03T20:17:20+03:00 skip: only 3324 s since last attempt (min 21600s) -2026-06-03T20:24:20+03:00 skip: only 3744 s since last attempt (min 21600s) -2026-06-03T20:28:49+03:00 skip: only 4013 s since last attempt (min 21600s) -2026-06-03T20:31:25+03:00 skip: only 4169 s since last attempt (min 21600s) -2026-06-03T20:33:11+03:00 skip: only 4275 s since last attempt (min 21600s) -2026-06-03T20:36:27+03:00 skip: only 4471 s since last attempt (min 21600s) -2026-06-03T21:12:13+03:00 skip: only 6617 s since last attempt (min 21600s) -2026-06-03T21:12:17+03:00 skip: only 6621 s since last attempt (min 21600s) -2026-06-08T17:46:39+03:00 drafts found: 149 (threshold: 30) -2026-06-08T17:46:39+03:00 batch size: 10 -2026-06-08T17:46:40+03:00 using claude CLI (model: sonnet) diff --git a/.cursor/rules/n-image-compress.mdc b/.cursor/rules/n-image-compress.mdc deleted file mode 100644 index 545b7ba..0000000 --- a/.cursor/rules/n-image-compress.mdc +++ /dev/null @@ -1,38 +0,0 @@ ---- -description: Оптимізація raster/SVG через @nitra/minify-image у n-rules lint -version: '1.2' -globs: "**/*.{png,jpg,jpeg,gif,svg}" -alwaysApply: false ---- - -CLI [`@nitra/minify-image`](https://www.npmjs.com/package/@nitra/minify-image) (≥ **4.0.1**) запускається через `npx` і **не** додається в `dependencies` / `devDependencies`. Запуск — через **`n-rules lint image-compress`**: локально (fix) виконує `npx @nitra/minify-image --src=. --write`, у `--no-fix` виконує `npx @nitra/minify-image --src=. --json` і падає, якщо `summary.needsCompression > 0`. **AVIF-генерація (`--avif`) у `image-compress` не входить** — її виконує окреме правило `image-avif`. - -Окремий workflow `lint-image.yml` створювати не треба; якщо потрібен CI-gate для зображень, використовуй `n-rules lint image-compress --no-fix`. - -## Заборона `@nitra/minify-image` у залежностях (`package.json`) - -Rego-пакет: `image_compress.package_json` - -Цільовий файл: `package.json` (єдиний файл проєкту). - -Перевіряє поля `dependencies` та `devDependencies`: якщо там присутній пакет `@nitra/minify-image` — deny. Список заборонених пакетів надходить через `--data` з канонічного шаблону: - -[package.json.deny.json](./template/package.json.deny.json) - -✓ `{}` — порожній `package.json` без залежностей -✗ `{ "dependencies": { "@nitra/minify-image": "^4.0.1" } }` — заборонено, використовуй `npx` -✗ `{ "devDependencies": { "@nitra/minify-image": "^4.0.1" } }` — заборонено, використовуй `npx` - -## Кеш-файли: що зберігати в git - -**`.n-minify-image.tsv`** у корені сканованого каталогу — **має бути в git** (source of truth для sha1-перевірок і lifetime savings). У `.gitignore` його не додавай. - -**`node_modules/.cache/@nitra/minify-image/mtime.tsv`** — локальний fast-path; авто-gitignored через `node_modules/`. - -Застарілий **`.minify-image-cache.tsv`** у корені (з версій `@nitra/minify-image` < 3.2) — видали після міграції на split-cache: - -```sh -git rm --cached .minify-image-cache.tsv 2>/dev/null || true && rm -f .minify-image-cache.tsv -``` - -Також прибери відповідний рядок з `.gitignore`, якщо є. diff --git a/.cursor/rules/n-worktree.mdc b/.cursor/rules/n-worktree.mdc deleted file mode 100644 index 313c900..0000000 --- a/.cursor/rules/n-worktree.mdc +++ /dev/null @@ -1,126 +0,0 @@ ---- -description: Конвенція git-worktree у цьому репо — створення, інвентаризація та прибирання через `npx @7n/mt worktree`. -globs: -alwaysApply: true ---- - -# Worktree-конвенція - -Усі git-worktree створюй і прибирай через `npx @7n/mt worktree` — він кладе їх у -`.worktrees/` (gitignored, checkout `/`) і веде інвентарний файл-опис у `.worktrees/.meta/`. - -## Розташування - -``` -.worktrees/ - feat-skill-meta/ ← git worktree checkout - feat-skill-meta.md ← інвентарний опис поруч (gitignored через .worktrees/) -``` - -Слеш у гілці перетворюється на дефіс: `feat/skill-meta` → `.worktrees/feat-skill-meta/`. -Git-гілка лишається з оригінальним імʼям (`feat/skill-meta`). - -## Налаштування редакторів - -Worktree-каталоги — це вкладені копії всього дерева. Якщо редактор індексує їх, -пошук дає дублі, а file-watcher вантажить диск. Тому редактор має **виключити** -`.worktrees/` (а для Zed ще й приватний `.claude/worktrees/`) з пошуку та сканування. - -Канон перевіряється **лише** якщо файл налаштувань уже є — проєктам без VS Code / Zed -нічого не нав'язується. - -### VS Code - -У `.vscode/settings.json` обовʼязково виключи `**/.worktrees/**` з пошуку і з дерева -файлів. `node_modules` додавати не треба — VS Code виключає його з пошуку дефолтно. - -```json title=".vscode/settings.json" -{ - "search.exclude": { - "**/.worktrees/**": true - }, - "files.exclude": { - "**/.worktrees/**": true - } -} -``` - -Канон (subset — інші ключі дозволені): `settings.json`: - -```json -{ - "search.exclude": { - "**/.worktrees/**": true - }, - "files.exclude": { - "**/.worktrees/**": true - } -} -``` - -### Zed - -Zed **замінює** масив `file_scan_exclusions` цілком (не зливає з дефолтами), тому в -`.zed/settings.json` перелічуй і дефолти Zed, і `**/.worktrees`, і `**/.claude/worktrees`. -Перевірка вимагає **всі** записи канону (бо інакше дефолти губляться). - -```json title=".zed/settings.json" -{ - "file_scan_exclusions": [ - "**/.git", - "**/.svn", - "**/.hg", - "**/.DS_Store", - "**/Thumbs.db", - "**/node_modules", - "**/.worktrees", - "**/.claude/worktrees" - ] -} -``` - -Канон (усі елементи обовʼязкові, зайві дозволені): `settings.json`: - -```json -{ - "file_scan_exclusions": [ - "**/.git", - "**/.svn", - "**/.hg", - "**/.DS_Store", - "**/Thumbs.db", - "**/node_modules", - "**/.worktrees", - "**/.claude/worktrees" - ] -} -``` - -`.zed/settings.json` без стабільної схеми в Schema Store — додай його до `.v8rignore` (як `.vscode/*`, див. **text.mdc**). - -## Команди - -- **Створити** (опис обовʼязковий): `npx @7n/mt worktree create "<навіщо>"` -- **Інвентаризація**: `npx @7n/mt worktree list` (людино-) або `npx @7n/mt worktree inventory` (JSON) -- **Прибрати** (ефемерний — прибирає й git-гілку): `npx @7n/mt worktree remove ` -- **Прибрати осиротілі інвентарі**: `npx @7n/mt worktree prune` - -## Завершення гілки worktree - -Коли робота у worktree завершена і її треба влити в базову гілку — **за замовчуванням пропонуй -squash-merge** (уся гілка одним комітом), а не fast-forward чи merge-комітом. Worktree — це одна -логічна задача, тож в історії базової гілки їй відповідає **один** коміт; проміжні TDD-коміти -(«додав парсер», «видалив auto.md» тощо) у базовій гілці не потрібні. Реліз і `CHANGELOG` -агрегуються за change-файлом, не за кількістю комітів, тож squash нічого не ламає. - -```bash -git checkout && git merge --squash && git commit -``` - -Якщо користувач явно просить зберегти поетапну історію — лише тоді fast-forward / merge-коміт. - -## Заборони - -- Не клади worktree в `.claude/worktrees/` — це приватна директорія харнесу Claude Code. -- Не клади worktree в батьківський каталог `../cursor-` — ускладнює інвентаризацію. -- Не створюй worktree вручну (`git worktree add`) повз `npx @7n/mt worktree create` — інакше не буде інвентарного опису. diff --git a/.gitignore b/.gitignore index 6517b07..3fc1def 100644 --- a/.gitignore +++ b/.gitignore @@ -6,5 +6,8 @@ dist/ .claude/hooks/*.log .claude/hooks/.normalize-state .claude/hooks/.normalize.lock +.codex/hooks/*.log +.codex/hooks/.normalize-state +.codex/hooks/.normalize.lock .claude/worktrees/ .worktrees/ diff --git a/.n-rules.json b/.n-rules.json index 4add10a..0649dcb 100644 --- a/.n-rules.json +++ b/.n-rules.json @@ -6,9 +6,11 @@ "ci4", "feedback", "ga", - "image-compress", "security", - "text", + "text" + ], + "disable-rules": [ + "image-compress", "worktree" ], "ignore": [ diff --git a/AGENTS.md b/AGENTS.md index 881f5f6..ead3a44 100644 --- a/AGENTS.md +++ b/AGENTS.md @@ -13,10 +13,8 @@ The primary development rules are stored in the Cursor rules directory: - .cursor/rules/n-ci4.mdc - .cursor/rules/n-feedback.mdc - .cursor/rules/n-ga.mdc -- .cursor/rules/n-image-compress.mdc - .cursor/rules/n-security.mdc - .cursor/rules/n-text.mdc -- .cursor/rules/n-worktree.mdc ## Skills diff --git a/CLAUDE.md b/CLAUDE.md index 3923f85..89e59b2 100644 --- a/CLAUDE.md +++ b/CLAUDE.md @@ -11,10 +11,8 @@ @.cursor/rules/n-ci4.mdc @.cursor/rules/n-feedback.mdc @.cursor/rules/n-ga.mdc -@.cursor/rules/n-image-compress.mdc @.cursor/rules/n-security.mdc @.cursor/rules/n-text.mdc -@.cursor/rules/n-worktree.mdc ## Лінт і ESLint (паралелізм)