feat: разворачивание комка superpowers — 14 навыков (роутер-реестр)
Эпик роутер-реестр, спека 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) <noreply@anthropic.com>
This commit is contained in:
@@ -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": ["процесс-скил применён ДО реализации, дисциплина соблюдена"]
|
||||
}
|
||||
@@ -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": ""
|
||||
}
|
||||
}
|
||||
@@ -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": ""
|
||||
}
|
||||
}
|
||||
@@ -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": ""
|
||||
}
|
||||
}
|
||||
@@ -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": ""
|
||||
}
|
||||
}
|
||||
@@ -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": ""
|
||||
}
|
||||
}
|
||||
@@ -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": ""
|
||||
}
|
||||
}
|
||||
@@ -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": ""
|
||||
}
|
||||
}
|
||||
@@ -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": ""
|
||||
}
|
||||
}
|
||||
@@ -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": ""
|
||||
}
|
||||
}
|
||||
@@ -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": ""
|
||||
}
|
||||
}
|
||||
@@ -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": ""
|
||||
}
|
||||
}
|
||||
@@ -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": ""
|
||||
}
|
||||
}
|
||||
@@ -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": ""
|
||||
}
|
||||
}
|
||||
@@ -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": ""
|
||||
}
|
||||
}
|
||||
@@ -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"]
|
||||
}
|
||||
+203
-8
@@ -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"
|
||||
|
||||
@@ -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. **Не закоммичено.**
|
||||
|
||||
@@ -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) валиден по форме', () => {
|
||||
|
||||
@@ -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);
|
||||
});
|
||||
|
||||
@@ -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');
|
||||
});
|
||||
|
||||
Reference in New Issue
Block a user