From 5a7c5c255c6a81aa33226e910ce08ba43558b374 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=94=D0=BC=D0=B8=D1=82=D1=80=D0=B8=D0=B9?= Date: Thu, 18 Jun 2026 22:53:20 +0300 Subject: [PATCH] =?UTF-8?q?feat:=20=D1=80=D0=B0=D0=B7=D0=B2=D0=BE=D1=80?= =?UTF-8?q?=D0=B0=D1=87=D0=B8=D0=B2=D0=B0=D0=BD=D0=B8=D0=B5=20=D0=BA=D0=BE?= =?UTF-8?q?=D0=BC=D0=BA=D0=B0=20superpowers=20=E2=80=94=2014=20=D0=BD?= =?UTF-8?q?=D0=B0=D0=B2=D1=8B=D0=BA=D0=BE=D0=B2=20(=D1=80=D0=BE=D1=83?= =?UTF-8?q?=D1=82=D0=B5=D1=80-=D1=80=D0=B5=D0=B5=D1=81=D1=82=D1=80)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Эпик роутер-реестр, спека v2 §2, этап 1. Зонтик superpowers (14 meta-skills одной карточкой) развёрнут в 14 отдельных карточек-навыков + 14 под-узлов ради точного подбора роутером. - 14 карточек superpowers__<навык>.contract.json (skill = superpowers:навык) - nodes.yaml: узел #19 развёрнут в #19a..#19n; классификации-триггеры распределены: feature в brainstorming, planning в writing-plans, tdd в TDD, debug в debugging - writing-plans приведён к конвенции (был own без префикса/узла → external + узел) - зонтик superpowers убран (карточка + узел) - тесты: registry-load 103 узла/95 active; m3a/m3c образцы own/external - splitting-inventory: прогресс + доп-каскады для крупных комков Регрессия свода: 4361 passed, 0 failed. Co-Authored-By: Claude Opus 4.8 (1M context) --- .../contracts/superpowers.contract.json | 11 - .../superpowers__brainstorming.contract.json | 29 +++ ..._dispatching-parallel-agents.contract.json | 29 +++ ...superpowers__executing-plans.contract.json | 29 +++ ...nishing-a-development-branch.contract.json | 29 +++ ...owers__receiving-code-review.contract.json | 29 +++ ...wers__requesting-code-review.contract.json | 29 +++ ..._subagent-driven-development.contract.json | 29 +++ ...powers__systematic-debugging.contract.json | 29 +++ ...ers__test-driven-development.contract.json | 29 +++ ...rpowers__using-git-worktrees.contract.json | 29 +++ ...perpowers__using-superpowers.contract.json | 29 +++ ...rification-before-completion.contract.json | 29 +++ .../superpowers__writing-plans.contract.json | 29 +++ .../superpowers__writing-skills.contract.json | 29 +++ .../contracts/writing-plans.contract.json | 11 - docs/registry/nodes.yaml | 211 +++++++++++++++++- docs/registry/splitting-inventory.md | 28 ++- tools/m3a-contract-invariants.test.mjs | 5 +- tools/m3c-coverage-invariants.test.mjs | 9 +- tools/registry-load.test.mjs | 14 +- 21 files changed, 651 insertions(+), 44 deletions(-) delete mode 100644 docs/registry/contracts/superpowers.contract.json create mode 100644 docs/registry/contracts/superpowers__brainstorming.contract.json create mode 100644 docs/registry/contracts/superpowers__dispatching-parallel-agents.contract.json create mode 100644 docs/registry/contracts/superpowers__executing-plans.contract.json create mode 100644 docs/registry/contracts/superpowers__finishing-a-development-branch.contract.json create mode 100644 docs/registry/contracts/superpowers__receiving-code-review.contract.json create mode 100644 docs/registry/contracts/superpowers__requesting-code-review.contract.json create mode 100644 docs/registry/contracts/superpowers__subagent-driven-development.contract.json create mode 100644 docs/registry/contracts/superpowers__systematic-debugging.contract.json create mode 100644 docs/registry/contracts/superpowers__test-driven-development.contract.json create mode 100644 docs/registry/contracts/superpowers__using-git-worktrees.contract.json create mode 100644 docs/registry/contracts/superpowers__using-superpowers.contract.json create mode 100644 docs/registry/contracts/superpowers__verification-before-completion.contract.json create mode 100644 docs/registry/contracts/superpowers__writing-plans.contract.json create mode 100644 docs/registry/contracts/superpowers__writing-skills.contract.json delete mode 100644 docs/registry/contracts/writing-plans.contract.json diff --git a/docs/registry/contracts/superpowers.contract.json b/docs/registry/contracts/superpowers.contract.json deleted file mode 100644 index 5a16ecd..0000000 --- a/docs/registry/contracts/superpowers.contract.json +++ /dev/null @@ -1,11 +0,0 @@ -{ - "skill": "superpowers", - "kind": "own", - "needs": ["задача разработки, требующая процесса (TDD/debug/plan/review/brainstorm/worktree)"], - "produces": ["дисциплинированный процесс: тест-первый, план, ревью, верификация"], - "constraints": ["мета-процесс (зонтик 14 sub-skills), не доменный решатель", "hard-floor источник (ADR-011)", "paired со #30 Frontend Design"], - "preview-form": "outline", - "defaults": ["skill инвоцируется ПЕРВЫМ для подходящей задачи"], - "key-decisions": ["какой sub-skill под задачу (tdd/debugging/writing-plans/brainstorming/...)"], - "acceptance-criteria": ["процесс-скил применён ДО реализации, дисциплина соблюдена"] -} diff --git a/docs/registry/contracts/superpowers__brainstorming.contract.json b/docs/registry/contracts/superpowers__brainstorming.contract.json new file mode 100644 index 0000000..cd9114b --- /dev/null +++ b/docs/registry/contracts/superpowers__brainstorming.contract.json @@ -0,0 +1,29 @@ +{ + "skill": "superpowers:brainstorming", + "kind": "external", + "needs": [ + "идея фичи/компонента/изменения поведения до реализации" + ], + "produces": [ + "согласованный дизайн и требования (что и зачем) до кода" + ], + "constraints": [ + "под-навык зонтика superpowers (процессный мета-скил)", + "hard-floor источник дисциплины (ADR-011)" + ], + "preview-form": "outline", + "defaults": [ + "обязателен ПЕРЕД любой творческой работой" + ], + "key-decisions": [ + "intent и границы фичи" + ], + "acceptance-criteria": [ + "дизайн согласован до реализации" + ], + "source": { + "version": "n/a", + "hash": "0000000000000000000000000000000000000000000000000000000000000000", + "path": "" + } +} diff --git a/docs/registry/contracts/superpowers__dispatching-parallel-agents.contract.json b/docs/registry/contracts/superpowers__dispatching-parallel-agents.contract.json new file mode 100644 index 0000000..e54004d --- /dev/null +++ b/docs/registry/contracts/superpowers__dispatching-parallel-agents.contract.json @@ -0,0 +1,29 @@ +{ + "skill": "superpowers:dispatching-parallel-agents", + "kind": "external", + "needs": [ + "2+ независимые задачи без общего состояния и последовательных зависимостей" + ], + "produces": [ + "параллельная раздача задач субагентам" + ], + "constraints": [ + "под-навык зонтика superpowers (процессный мета-скил)", + "hard-floor источник дисциплины (ADR-011)" + ], + "preview-form": "outline", + "defaults": [ + "веер только для независимых задач" + ], + "key-decisions": [ + "какие задачи независимы" + ], + "acceptance-criteria": [ + "задачи раздаются без гонок за общее состояние" + ], + "source": { + "version": "n/a", + "hash": "0000000000000000000000000000000000000000000000000000000000000000", + "path": "" + } +} diff --git a/docs/registry/contracts/superpowers__executing-plans.contract.json b/docs/registry/contracts/superpowers__executing-plans.contract.json new file mode 100644 index 0000000..b16ce94 --- /dev/null +++ b/docs/registry/contracts/superpowers__executing-plans.contract.json @@ -0,0 +1,29 @@ +{ + "skill": "superpowers:executing-plans", + "kind": "external", + "needs": [ + "написанный план для исполнения с чекпойнтами ревью" + ], + "produces": [ + "пакетное исполнение задач плана с чекпойнтами" + ], + "constraints": [ + "под-навык зонтика superpowers (процессный мета-скил)", + "hard-floor источник дисциплины (ADR-011)" + ], + "preview-form": "outline", + "defaults": [ + "исполнять по задачам с ревью-чекпойнтами" + ], + "key-decisions": [ + "границы пакетов исполнения" + ], + "acceptance-criteria": [ + "задачи исполнены, чекпойнты пройдены" + ], + "source": { + "version": "n/a", + "hash": "0000000000000000000000000000000000000000000000000000000000000000", + "path": "" + } +} diff --git a/docs/registry/contracts/superpowers__finishing-a-development-branch.contract.json b/docs/registry/contracts/superpowers__finishing-a-development-branch.contract.json new file mode 100644 index 0000000..0b20cd2 --- /dev/null +++ b/docs/registry/contracts/superpowers__finishing-a-development-branch.contract.json @@ -0,0 +1,29 @@ +{ + "skill": "superpowers:finishing-a-development-branch", + "kind": "external", + "needs": [ + "реализация завершена, тесты зелёные" + ], + "produces": [ + "решение интеграции: merge / PR / cleanup" + ], + "constraints": [ + "под-навык зонтика superpowers (процессный мета-скил)", + "hard-floor источник дисциплины (ADR-011)" + ], + "preview-form": "outline", + "defaults": [ + "структурный выбор завершения ветки" + ], + "key-decisions": [ + "merge vs PR vs cleanup" + ], + "acceptance-criteria": [ + "работа интегрирована выбранным путём" + ], + "source": { + "version": "n/a", + "hash": "0000000000000000000000000000000000000000000000000000000000000000", + "path": "" + } +} diff --git a/docs/registry/contracts/superpowers__receiving-code-review.contract.json b/docs/registry/contracts/superpowers__receiving-code-review.contract.json new file mode 100644 index 0000000..bfd8608 --- /dev/null +++ b/docs/registry/contracts/superpowers__receiving-code-review.contract.json @@ -0,0 +1,29 @@ +{ + "skill": "superpowers:receiving-code-review", + "kind": "external", + "needs": [ + "полученная обратная связь код-ревью до внедрения правок" + ], + "produces": [ + "техническая проверка фидбэка (не слепое согласие)" + ], + "constraints": [ + "под-навык зонтика superpowers (процессный мета-скил)", + "hard-floor источник дисциплины (ADR-011)" + ], + "preview-form": "outline", + "defaults": [ + "проверять, а не performative-соглашаться" + ], + "key-decisions": [ + "обоснованность каждого замечания" + ], + "acceptance-criteria": [ + "правки внедрены по существу, спорное оспорено доказательно" + ], + "source": { + "version": "n/a", + "hash": "0000000000000000000000000000000000000000000000000000000000000000", + "path": "" + } +} diff --git a/docs/registry/contracts/superpowers__requesting-code-review.contract.json b/docs/registry/contracts/superpowers__requesting-code-review.contract.json new file mode 100644 index 0000000..936e62d --- /dev/null +++ b/docs/registry/contracts/superpowers__requesting-code-review.contract.json @@ -0,0 +1,29 @@ +{ + "skill": "superpowers:requesting-code-review", + "kind": "external", + "needs": [ + "завершённая задача/фича до мержа" + ], + "produces": [ + "запрос ревью, ловящий дефекты до каскада" + ], + "constraints": [ + "под-навык зонтика superpowers (процессный мета-скил)", + "hard-floor источник дисциплины (ADR-011)" + ], + "preview-form": "outline", + "defaults": [ + "ревью перед мержем крупного" + ], + "key-decisions": [ + "что вынести на ревью" + ], + "acceptance-criteria": [ + "работа сверена с требованиями до мержа" + ], + "source": { + "version": "n/a", + "hash": "0000000000000000000000000000000000000000000000000000000000000000", + "path": "" + } +} diff --git a/docs/registry/contracts/superpowers__subagent-driven-development.contract.json b/docs/registry/contracts/superpowers__subagent-driven-development.contract.json new file mode 100644 index 0000000..ca0ef67 --- /dev/null +++ b/docs/registry/contracts/superpowers__subagent-driven-development.contract.json @@ -0,0 +1,29 @@ +{ + "skill": "superpowers:subagent-driven-development", + "kind": "external", + "needs": [ + "план с независимыми задачами для исполнения в текущей сессии" + ], + "produces": [ + "исполнение задач плана свежими субагентами + двухстадийное ревью" + ], + "constraints": [ + "под-навык зонтика superpowers (процессный мета-скил)", + "hard-floor источник дисциплины (ADR-011)" + ], + "preview-form": "outline", + "defaults": [ + "свежий субагент на задачу + ревью между" + ], + "key-decisions": [ + "разбивка плана на задачи субагентам" + ], + "acceptance-criteria": [ + "каждая задача исполнена и отревьюена" + ], + "source": { + "version": "n/a", + "hash": "0000000000000000000000000000000000000000000000000000000000000000", + "path": "" + } +} diff --git a/docs/registry/contracts/superpowers__systematic-debugging.contract.json b/docs/registry/contracts/superpowers__systematic-debugging.contract.json new file mode 100644 index 0000000..722beaf --- /dev/null +++ b/docs/registry/contracts/superpowers__systematic-debugging.contract.json @@ -0,0 +1,29 @@ +{ + "skill": "superpowers:systematic-debugging", + "kind": "external", + "needs": [ + "баг, упавший тест или неожиданное поведение" + ], + "produces": [ + "корневая причина, найденная ДО предложения фикса" + ], + "constraints": [ + "под-навык зонтика superpowers (процессный мета-скил)", + "hard-floor источник дисциплины (ADR-011)" + ], + "preview-form": "outline", + "defaults": [ + "сначала причина, потом фикс" + ], + "key-decisions": [ + "гипотеза и способ её проверки" + ], + "acceptance-criteria": [ + "корневая причина доказана до правки" + ], + "source": { + "version": "n/a", + "hash": "0000000000000000000000000000000000000000000000000000000000000000", + "path": "" + } +} diff --git a/docs/registry/contracts/superpowers__test-driven-development.contract.json b/docs/registry/contracts/superpowers__test-driven-development.contract.json new file mode 100644 index 0000000..85ce7b9 --- /dev/null +++ b/docs/registry/contracts/superpowers__test-driven-development.contract.json @@ -0,0 +1,29 @@ +{ + "skill": "superpowers:test-driven-development", + "kind": "external", + "needs": [ + "фича или багфикс до написания кода" + ], + "produces": [ + "цикл тест-первый: RED → минимальный код → GREEN → рефактор" + ], + "constraints": [ + "под-навык зонтика superpowers (процессный мета-скил)", + "hard-floor источник дисциплины (ADR-011)" + ], + "preview-form": "outline", + "defaults": [ + "тест ДО реализации; один цикл за раз" + ], + "key-decisions": [ + "что тестировать, контур поведения" + ], + "acceptance-criteria": [ + "тест написан и провален ДО кода; затем зелёный" + ], + "source": { + "version": "n/a", + "hash": "0000000000000000000000000000000000000000000000000000000000000000", + "path": "" + } +} diff --git a/docs/registry/contracts/superpowers__using-git-worktrees.contract.json b/docs/registry/contracts/superpowers__using-git-worktrees.contract.json new file mode 100644 index 0000000..d529f4e --- /dev/null +++ b/docs/registry/contracts/superpowers__using-git-worktrees.contract.json @@ -0,0 +1,29 @@ +{ + "skill": "superpowers:using-git-worktrees", + "kind": "external", + "needs": [ + "нужна изоляция рабочего пространства под фичу" + ], + "produces": [ + "изолированный worktree (native или git-fallback)" + ], + "constraints": [ + "под-навык зонтика superpowers (процессный мета-скил)", + "hard-floor источник дисциплины (ADR-011)" + ], + "preview-form": "outline", + "defaults": [ + "изоляция перед исполнением плана" + ], + "key-decisions": [ + "native vs git worktree" + ], + "acceptance-criteria": [ + "изолированное пространство существует" + ], + "source": { + "version": "n/a", + "hash": "0000000000000000000000000000000000000000000000000000000000000000", + "path": "" + } +} diff --git a/docs/registry/contracts/superpowers__using-superpowers.contract.json b/docs/registry/contracts/superpowers__using-superpowers.contract.json new file mode 100644 index 0000000..472077f --- /dev/null +++ b/docs/registry/contracts/superpowers__using-superpowers.contract.json @@ -0,0 +1,29 @@ +{ + "skill": "superpowers:using-superpowers", + "kind": "external", + "needs": [ + "начало любой задачи/разговора" + ], + "produces": [ + "дисциплина поиска и вызова релевантных навыков ПЕРВЫМ делом" + ], + "constraints": [ + "под-навык зонтика superpowers (процессный мета-скил)", + "hard-floor источник дисциплины (ADR-011)" + ], + "preview-form": "outline", + "defaults": [ + "проверка навыков до действия" + ], + "key-decisions": [ + "какой навык применим" + ], + "acceptance-criteria": [ + "релевантный навык вызван до работы" + ], + "source": { + "version": "n/a", + "hash": "0000000000000000000000000000000000000000000000000000000000000000", + "path": "" + } +} diff --git a/docs/registry/contracts/superpowers__verification-before-completion.contract.json b/docs/registry/contracts/superpowers__verification-before-completion.contract.json new file mode 100644 index 0000000..fffe877 --- /dev/null +++ b/docs/registry/contracts/superpowers__verification-before-completion.contract.json @@ -0,0 +1,29 @@ +{ + "skill": "superpowers:verification-before-completion", + "kind": "external", + "needs": [ + "заявление о готовности/успехе до коммита или PR" + ], + "produces": [ + "доказательство (прогон команд) ДО любого утверждения об успехе" + ], + "constraints": [ + "под-навык зонтика superpowers (процессный мета-скил)", + "hard-floor источник дисциплины (ADR-011)" + ], + "preview-form": "outline", + "defaults": [ + "доказательства до утверждений — всегда" + ], + "key-decisions": [ + "какой прогон доказывает готовность" + ], + "acceptance-criteria": [ + "успех заявлен только после подтверждённого вывода" + ], + "source": { + "version": "n/a", + "hash": "0000000000000000000000000000000000000000000000000000000000000000", + "path": "" + } +} diff --git a/docs/registry/contracts/superpowers__writing-plans.contract.json b/docs/registry/contracts/superpowers__writing-plans.contract.json new file mode 100644 index 0000000..317cbef --- /dev/null +++ b/docs/registry/contracts/superpowers__writing-plans.contract.json @@ -0,0 +1,29 @@ +{ + "skill": "superpowers:writing-plans", + "kind": "external", + "needs": [ + "спека или требования для многошаговой задачи" + ], + "produces": [ + "план реализации из bite-sized TDD-задач без плейсхолдеров" + ], + "constraints": [ + "под-навык зонтика superpowers (процессный мета-скил)", + "hard-floor источник дисциплины (ADR-011)" + ], + "preview-form": "outline", + "defaults": [ + "один шаг = одно действие (2-5 мин); test→RED→code→GREEN→commit" + ], + "key-decisions": [ + "структура файлов и декомпозиция; гранулярность задач" + ], + "acceptance-criteria": [ + "у каждого шага конкретный контент; типы согласованы между задачами" + ], + "source": { + "version": "n/a", + "hash": "0000000000000000000000000000000000000000000000000000000000000000", + "path": "" + } +} diff --git a/docs/registry/contracts/superpowers__writing-skills.contract.json b/docs/registry/contracts/superpowers__writing-skills.contract.json new file mode 100644 index 0000000..32b74a4 --- /dev/null +++ b/docs/registry/contracts/superpowers__writing-skills.contract.json @@ -0,0 +1,29 @@ +{ + "skill": "superpowers:writing-skills", + "kind": "external", + "needs": [ + "создание или правка навыка" + ], + "produces": [ + "навык, построенный TDD-процессом для процесс-документов" + ], + "constraints": [ + "под-навык зонтика superpowers (процессный мета-скил)", + "hard-floor источник дисциплины (ADR-011)" + ], + "preview-form": "outline", + "defaults": [ + "TDD применён к процесс-докам" + ], + "key-decisions": [ + "scope и триггеры навыка" + ], + "acceptance-criteria": [ + "навык оформлен и проверен" + ], + "source": { + "version": "n/a", + "hash": "0000000000000000000000000000000000000000000000000000000000000000", + "path": "" + } +} diff --git a/docs/registry/contracts/writing-plans.contract.json b/docs/registry/contracts/writing-plans.contract.json deleted file mode 100644 index d28fe1e..0000000 --- a/docs/registry/contracts/writing-plans.contract.json +++ /dev/null @@ -1,11 +0,0 @@ -{ - "skill": "writing-plans", - "kind": "own", - "needs": ["spec or requirements", "file structure decisions"], - "produces": ["implementation-plan with bite-sized TDD tasks"], - "constraints": ["only writes the plan file", "no code, no reads beyond plan authoring"], - "preview-form": "outline", - "defaults": ["one action per step (2-5 min)", "test->RED->code->GREEN->commit"], - "key-decisions": ["file structure / decomposition", "task granularity"], - "acceptance-criteria": ["every step has concrete content (no placeholders)", "types consistent across tasks"] -} diff --git a/docs/registry/nodes.yaml b/docs/registry/nodes.yaml index a73c832..3ff2d22 100644 --- a/docs/registry/nodes.yaml +++ b/docs/registry/nodes.yaml @@ -277,28 +277,223 @@ nodes: attributes: tooling_section: "§3.5 #17" - - id: "#19" - name: "Superpowers v5.1.0" - slug: "superpowers" + - id: "#19a" + name: "brainstorming" + slug: "superpowers:brainstorming" category: "phase-2" subcategory: null status: "active" dormancy_reason: null - capabilities: "Набор из 14 meta-skills для организации процесса разработки: TDD, отладка, brainstorming, writing-plans, параллельные агенты, code review, verify-before-completion, worktrees, finishing branch, subagent-driven development." + capabilities: "Согласованный дизайн и требования (что и зачем) до кода. Обязателен ПЕРЕД любой творческой работой/новой фичей." triggers: - {classification: "feature", weight: 1.0} - - {classification: "planning", weight: 1.0} - - {classification: "bugfix", weight: 0.8} - - {classification: "refactor", weight: 0.8} - - {keyword: "tdd", weight: 1.0} - {keyword: "brainstorm", weight: 1.0} + boundaries: + - {adr: "ADR-011", role: "hard-floor source"} + chain_membership: [] + attributes: + tooling_section: "§3.3 #19" + + - id: "#19b" + name: "test-driven-development" + slug: "superpowers:test-driven-development" + category: "phase-2" + subcategory: null + status: "active" + dormancy_reason: null + capabilities: "Цикл тест-первый: RED → минимальный код → GREEN → рефактор. Перед реализацией любой фичи/багфикса." + triggers: + - {keyword: "tdd", weight: 1.0} + - {classification: "refactor", weight: 0.8} + boundaries: + - {adr: "ADR-011", role: "hard-floor source"} + chain_membership: [] + attributes: + tooling_section: "§3.3 #19" + + - id: "#19c" + name: "writing-plans" + slug: "superpowers:writing-plans" + category: "phase-2" + subcategory: null + status: "active" + dormancy_reason: null + capabilities: "План реализации из bite-sized TDD-задач без плейсхолдеров. Для многошаговой задачи по спеке/требованиям." + triggers: + - {classification: "planning", weight: 1.0} + boundaries: + - {adr: "ADR-011", role: "hard-floor source"} + chain_membership: [] + attributes: + tooling_section: "§3.3 #19" + + - id: "#19d" + name: "systematic-debugging" + slug: "superpowers:systematic-debugging" + category: "phase-2" + subcategory: null + status: "active" + dormancy_reason: null + capabilities: "Корневая причина бага/упавшего теста, найденная ДО предложения фикса." + triggers: - {keyword: "debug", weight: 0.8} + - {classification: "bugfix", weight: 0.8} + boundaries: + - {adr: "ADR-011", role: "hard-floor source"} + chain_membership: [] + attributes: + tooling_section: "§3.3 #19" + + - id: "#19e" + name: "dispatching-parallel-agents" + slug: "superpowers:dispatching-parallel-agents" + category: "phase-2" + subcategory: null + status: "active" + dormancy_reason: null + capabilities: "Параллельная раздача 2+ независимых задач субагентам (без общего состояния)." + triggers: [] + boundaries: + - {adr: "ADR-011", role: "hard-floor source"} + chain_membership: [] + attributes: + tooling_section: "§3.3 #19" + + - id: "#19f" + name: "subagent-driven-development" + slug: "superpowers:subagent-driven-development" + category: "phase-2" + subcategory: null + status: "active" + dormancy_reason: null + capabilities: "Исполнение задач плана свежими субагентами + двухстадийное ревью между задачами." + triggers: [] + boundaries: + - {adr: "ADR-011", role: "hard-floor source"} + chain_membership: [] + attributes: + tooling_section: "§3.3 #19" + + - id: "#19g" + name: "receiving-code-review" + slug: "superpowers:receiving-code-review" + category: "phase-2" + subcategory: null + status: "active" + dormancy_reason: null + capabilities: "Техническая проверка фидбэка код-ревью (не слепое согласие) до внедрения правок." + triggers: [] + boundaries: + - {adr: "ADR-011", role: "hard-floor source"} + chain_membership: [] + attributes: + tooling_section: "§3.3 #19" + + - id: "#19h" + name: "requesting-code-review" + slug: "superpowers:requesting-code-review" + category: "phase-2" + subcategory: null + status: "active" + dormancy_reason: null + capabilities: "Запрос код-ревью, ловящий дефекты до каскада. Перед мержем крупного." + triggers: [] + boundaries: + - {adr: "ADR-011", role: "hard-floor source"} + chain_membership: [] + attributes: + tooling_section: "§3.3 #19" + + - id: "#19i" + name: "verification-before-completion" + slug: "superpowers:verification-before-completion" + category: "phase-2" + subcategory: null + status: "active" + dormancy_reason: null + capabilities: "Доказательство (прогон команд) ДО любого утверждения о готовности/успехе." + triggers: [] + boundaries: + - {adr: "ADR-011", role: "hard-floor source"} + chain_membership: [] + attributes: + tooling_section: "§3.3 #19" + + - id: "#19j" + name: "using-git-worktrees" + slug: "superpowers:using-git-worktrees" + category: "phase-2" + subcategory: null + status: "active" + dormancy_reason: null + capabilities: "Изолированный worktree (native или git-fallback) под фичу перед исполнением плана." + triggers: [] + boundaries: + - {adr: "ADR-011", role: "hard-floor source"} + chain_membership: [] + attributes: + tooling_section: "§3.3 #19" + + - id: "#19k" + name: "executing-plans" + slug: "superpowers:executing-plans" + category: "phase-2" + subcategory: null + status: "active" + dormancy_reason: null + capabilities: "Пакетное исполнение задач написанного плана с чекпойнтами ревью." + triggers: [] + boundaries: + - {adr: "ADR-011", role: "hard-floor source"} + chain_membership: [] + attributes: + tooling_section: "§3.3 #19" + + - id: "#19l" + name: "finishing-a-development-branch" + slug: "superpowers:finishing-a-development-branch" + category: "phase-2" + subcategory: null + status: "active" + dormancy_reason: null + capabilities: "Решение интеграции завершённой работы: merge / PR / cleanup ветки." + triggers: [] + boundaries: + - {adr: "ADR-011", role: "hard-floor source"} + chain_membership: [] + attributes: + tooling_section: "§3.3 #19" + + - id: "#19m" + name: "using-superpowers" + slug: "superpowers:using-superpowers" + category: "phase-2" + subcategory: null + status: "active" + dormancy_reason: null + capabilities: "Дисциплина поиска и вызова релевантных навыков ПЕРВЫМ делом в начале задачи." + triggers: [] boundaries: - {adr: "ADR-011", role: "hard-floor source"} - {pair: "#30", relation: "paired stack"} chain_membership: [] attributes: tooling_section: "§3.3 #19" + + - id: "#19n" + name: "writing-skills" + slug: "superpowers:writing-skills" + category: "phase-2" + subcategory: null + status: "active" + dormancy_reason: null + capabilities: "Навык, построенный TDD-процессом для процесс-документов (создание/правка навыка)." + triggers: [] + boundaries: + - {adr: "ADR-011", role: "hard-floor source"} + chain_membership: [] + attributes: + tooling_section: "§3.3 #19" install: "marketplace plugin, enabled in ~/.claude/settings.json" - id: "#18" diff --git a/docs/registry/splitting-inventory.md b/docs/registry/splitting-inventory.md index b29305d..892be30 100644 --- a/docs/registry/splitting-inventory.md +++ b/docs/registry/splitting-inventory.md @@ -104,4 +104,30 @@ 6. **Счётчик узлов:** `tools/registry-load.test.mjs` хардкодит число узлов (`toHaveLength(N)`) и активных — обновлять на каждый комок (разворачивание `#NN`→k под-узлов даёт +(k−1) узлов и активных). 7. **Инвариант-сторож** `tools/m3e-card-coverage-invariants.test.mjs` ловит рассинхрон «узел↔карточка» — НЕ глушить, а синхронизировать оба места. -**Артефакты пилота:** план `docs/superpowers/plans/2026-06-18-split-pilot-claude-md-management.md`, тест `tools/split-pilot-claude-md.test.mjs`. Контракты: `claude-md-management__claude-md-improver`, `claude-md-management__revise-claude-md`. Узлы: `#33a`, `#33b`. **Не закоммичено** (коммит — терминал владельца). +**Артефакты пилота:** план `docs/superpowers/plans/2026-06-18-split-pilot-claude-md-management.md`, тест `tools/split-pilot-claude-md.test.mjs`. Контракты: `claude-md-management__claude-md-improver`, `claude-md-management__revise-claude-md`. Узлы: `#33a`, `#33b`. Закоммичено + запушено: `e98ba1e` (gitea/main). + +## Прогресс разворачивания + +| Комок | Статус | Коммит | +|---|---|---| +| claude-md-management (2) | ✅ DONE | e98ba1e (pushed) | +| superpowers (14) | ✅ DONE (не закоммичено) | — | +| plugin-dev (7) | ⬜ | | +| adr-kit (2: adr, judge) | ⬜ | | +| hookify (1–2) | ⬜ | | +| product-management (8) | ⬜ | | +| design-plugin (7) | ⬜ | | +| marketing-plugin (8) | ⬜ | | +| operations (8) | ⬜ | | +| finance-plugin (7–8) | ⬜ | | +| brand-voice (3) | ⬜ | | +| ui-ux-pro-max (7, +правка PSR) | ⬜ | | + +### Доп-каскады, выявленные на superpowers (учесть для крупных комков) + +- **Классификации-триггеры зонтика** (`classification: feature/planning/bugfix/refactor` + `keyword`) надо РАСПРЕДЕЛИТЬ по под-узлам, иначе роутер теряет подбор по классу. На superpowers: feature→brainstorming(#19a), planning→writing-plans(#19c), tdd→TDD(#19b), debug/bugfix→debugging(#19d), refactor→TDD. Каскад на `registry-load.test` (`findByClassification('feature')[0].node.id`) + потенциально `router-classifier.test`. +- **Хардкод-образцы в тестах.** `m3a-contract-invariants` (own-образец) и `m3c-coverage-invariants` (контракты 3-A) читали `writing-plans.contract.json` по имени → миграция сломала; обновлены на `marketing-ru` (own) и `superpowers__writing-plans`. При разворачивании других комков — грепать имя контракта по тестам ПЕРЕД удалением. +- **Частично-вынесенные карточки** (как `writing-plans` без префикса/узла, kind own) — привести к конвенции: skill `<плагин>:<навык>`, файл `<плагин>__<навык>`, kind external, завести узел. +- **Генератор карточек** (`tools/_gen-<плагин>.mjs`, самоудаляемый, данные внутри) — рабочий приём для комков с многими навыками: пишет N JSON + удаляет зонтик/кривые карточки. Узлы YAML — отдельным Edit-блоком. + +**Артефакты superpowers:** 14 карточек `superpowers__*.contract.json`, узлы `#19a..#19n`, схема (id-паттерн уже расширен пилотом). Тесты обновлены: `registry-load.test` (103 узла/95 active, feature→#19a), `m3a`/`m3c` (образцы). Регрессия: 4361 passed, 0 failed. **Не закоммичено.** diff --git a/tools/m3a-contract-invariants.test.mjs b/tools/m3a-contract-invariants.test.mjs index eb01a3d..26d8ac7 100644 --- a/tools/m3a-contract-invariants.test.mjs +++ b/tools/m3a-contract-invariants.test.mjs @@ -9,8 +9,9 @@ const here = dirname(fileURLToPath(import.meta.url)); const contractsDir = join(here, '..', 'docs', 'registry', 'contracts'); describe('Машина 3-A — инварианты контрактов', () => { - it('образец own (writing-plans) валиден по форме', () => { - const c = JSON.parse(readFileSync(join(contractsDir, 'writing-plans.contract.json'), 'utf8')); + it('образец own (marketing-ru) валиден по форме', () => { + // writing-plans мигрирован в superpowers__writing-plans (external) при разворачивании superpowers + const c = JSON.parse(readFileSync(join(contractsDir, 'marketing-ru.contract.json'), 'utf8')); expect(validateContract(c)).toEqual({ ok: true, errors: [] }); }); it('образец external (operations:process-doc) валиден по форме', () => { diff --git a/tools/m3c-coverage-invariants.test.mjs b/tools/m3c-coverage-invariants.test.mjs index 98b2ead..318cb5f 100644 --- a/tools/m3c-coverage-invariants.test.mjs +++ b/tools/m3c-coverage-invariants.test.mjs @@ -10,16 +10,17 @@ const cdir = join(here, '..', 'docs', 'registry', 'contracts'); describe('Машина 3-C — охват на реальных контрактах 3-A', () => { it('контракты 3-A загружаются и прогоняются через машину охвата', () => { - const wp = JSON.parse(readFileSync(join(cdir, 'writing-plans.contract.json'), 'utf8')); + // writing-plans мигрирован в superpowers__writing-plans (external) при разворачивании superpowers + const wp = JSON.parse(readFileSync(join(cdir, 'superpowers__writing-plans.contract.json'), 'utf8')); const pd = JSON.parse(readFileSync(join(cdir, 'operations-process-doc.contract.json'), 'utf8')); - const { contracts } = buildRegistry([{ contract: wp }, { contract: pd, currentContent: '' }]); - const r = readinessChecklist({ contracts, requests: ['implementation-plan'] }); + const { contracts } = buildRegistry([{ contract: wp, currentContent: '' }, { contract: pd, currentContent: '' }]); + const r = readinessChecklist({ contracts, requests: ['план реализации из bite-sized TDD-задач без плейсхолдеров'] }); expect(Array.isArray(r.items)).toBe(true); expect(r.items).toHaveLength(4); expect(r.items.find((i) => /просьб/i.test(i.label)).ok).toBe(true); }); it('findHoles на контракте с непокрытой нуждой ловит дыру', () => { - const wp = JSON.parse(readFileSync(join(cdir, 'writing-plans.contract.json'), 'utf8')); + const wp = JSON.parse(readFileSync(join(cdir, 'superpowers__writing-plans.contract.json'), 'utf8')); const holes = findHoles([wp]); expect(holes.length).toBeGreaterThan(0); }); diff --git a/tools/registry-load.test.mjs b/tools/registry-load.test.mjs index 97c7e47..37f9f01 100644 --- a/tools/registry-load.test.mjs +++ b/tools/registry-load.test.mjs @@ -5,9 +5,9 @@ import { loadRegistry, clearCache, findByClassification, findByKeyword, findActi describe('registry-load', () => { beforeEach(() => clearCache()); - it('loads registry (90 nodes: 89 + разворачивание #33 → #33a/#33b 18.06.2026)', () => { + it('loads registry (103 nodes: 90 + разворачивание #19 superpowers в 14 под-узлов 18.06.2026)', () => { const r = loadRegistry(); - expect(r.nodes).toHaveLength(90); + expect(r.nodes).toHaveLength(103); expect(r.version).toBe('0.1.0'); }); @@ -15,7 +15,7 @@ describe('registry-load', () => { const r = loadRegistry(); const features = findByClassification(r, 'feature'); expect(features).toHaveLength(1); - expect(features[0].node.id).toBe('#19'); + expect(features[0].node.id).toBe('#19a'); // feature → superpowers:brainstorming после разворачивания #19 expect(features[0].weight).toBe(1.0); }); @@ -46,11 +46,11 @@ describe('registry-load', () => { it('findActiveNodes excludes non-active (nodes.yaml registry)', () => { const r = loadRegistry(); const active = findActiveNodes(r); - // 90 nodes total; #1 historic, #17 dormant, #44/#50/#54/#67/#82/#83 deferred, - // #84/#85/#86 + #87/#88/#89 active; #33 (1 active) развёрнут в #33a/#33b (2 active) → +1 → 82 active - expect(active).toHaveLength(82); + // 103 nodes total; #1 historic, #17 dormant, #44/#50/#54/#67/#82/#83 deferred; + // #33→#33a/#33b (+1 active) и #19→#19a..#19n (14 active вместо 1, +13) → 82 + 13 = 95 active + expect(active).toHaveLength(95); expect(active.map(n => n.id)).toContain('#18'); - expect(active.map(n => n.id)).toContain('#19'); + expect(active.map(n => n.id)).toContain('#19a'); expect(active.map(n => n.id)).not.toContain('#1'); expect(active.map(n => n.id)).not.toContain('#17'); });