rework for c9s & blagorost
This commit is contained in:
@@ -22,6 +22,7 @@ claude-code-bmad-skills/
|
||||
│ ├── hooks/ # Session/tool hooks
|
||||
│ └── examples/ # Example project templates
|
||||
├── bmad-v6/ # Legacy/source BMAD implementation
|
||||
├── bmad-c9s/ # Coopenomics: Capital/GitHub results, RU, .c9s/ (см. bmad-c9s/CLAUDE.md). Ревью: `on_review` только по явной команде оператора — скилл `c9s-submit-for-review`, см. bmad-c9s/docs/TASKS-DOCUMENTS-TIME-POLICY.md §2
|
||||
├── docs/ # GitHub Pages documentation site
|
||||
└── install-v6.sh/ps1 # Installation scripts
|
||||
```
|
||||
|
||||
@@ -0,0 +1,101 @@
|
||||
# BMAD-c9s (Coopenomics) — руководство для проекта
|
||||
|
||||
Пакет **bmad-c9s** — адаптация идей **BMAD v6** под:
|
||||
|
||||
- **русский язык** общения и артефактов (по желанию команды — см. `default_language` в конфиге);
|
||||
- **репозиторий результатов Capital**, синхронизируемый с БД через GitHub (`project` / `issue` / `story` в канонических путях);
|
||||
- **разделение канона Capital и операционки BMAD**: в **`{base}/.c9s/`** — только статусы воркфлоу и служебные YAML; **вся** продуктовая проза (бриф, PRD, исследования, техспека, UX) — как **требования (story)** в **`{base}/requirements/*.md`** (см. FORMAT).
|
||||
|
||||
Источник методологии v6 (англ.): каталог `bmad-v6/` в этом репозитории — **не править** как эталон; для c9s используйте скиллы из `bmad-c9s/skills/`.
|
||||
|
||||
---
|
||||
|
||||
## Как подключать скиллы (Cursor / Claude Code)
|
||||
|
||||
Копируйте или симлинкуйте нужные `SKILL.md` в каталог скиллов редактора (см. документацию Cursor Skills). Минимальный набор:
|
||||
|
||||
| Скилл | Когда включать |
|
||||
|--------|----------------|
|
||||
| `bmad-master-c9s` | Старт сессии, маршрутизация по фазам, инициализация `.c9s/` |
|
||||
| `c9s-master-review` | Только роль «мастер»: перевод задачи `on_review` → `done` |
|
||||
| `c9s-submit-for-review` | **Только по команде оператора:** задача → `on_review` + commit/push в results |
|
||||
| `c9s-results-push` | **Опционально:** явный commit/push; **базово** — автофиксация по [GIT-COMMITS-POLICY](docs/GIT-COMMITS-POLICY.md) |
|
||||
| `c9s-monorepo-component-git` | Монорепо: ветки `component/…` от `dev`, merge в `dev` по команде; хэш в `results_commits.yaml` **в results** (`.c9s/`, см. GIT-COMMITS-POLICY §2.4) |
|
||||
| Роли BMM / CIS / builder | По фазе задачи (см. таблицу ниже) |
|
||||
|
||||
Полные пути:
|
||||
|
||||
- `bmad-c9s/skills/core/bmad-master-c9s/SKILL.md`
|
||||
- `bmad-c9s/skills/core/c9s-master-review/SKILL.md`
|
||||
- `bmad-c9s/skills/core/c9s-submit-for-review/SKILL.md`
|
||||
- `bmad-c9s/skills/core/c9s-results-push/SKILL.md`
|
||||
- `bmad-c9s/skills/core/c9s-monorepo-component-git/SKILL.md`
|
||||
- `bmad-c9s/skills/bmm/*/SKILL.md`
|
||||
- `bmad-c9s/skills/cis/creative-intelligence/SKILL.md`
|
||||
- `bmad-c9s/skills/bmb/builder/SKILL.md`
|
||||
|
||||
---
|
||||
|
||||
## Жёсткое правило: хранилище — файлы, не чат
|
||||
|
||||
1. **Канон Capital** (проект, компонент, задача, требование) — только **`.md`** под `results_root`, пути из [docs/FORMAT-CAPITAL-GITHUB.md](docs/FORMAT-CAPITAL-GITHUB.md).
|
||||
2. **Бриф, PRD, исследование, техспека, мозговой штурм, UX на уровне продукта** — **story** в **`{base}/requirements/{slug}.md`** (`type: story`, `content_format`, `status`). Агент **ведёт** эти файлы при проработке сверху вниз.
|
||||
3. **Задача** (`issues/{slug}.md`) — отдельная **dev-единица** после планирования: в **теле** файла весь контекст для **одного** сеанса выполнения (вводный промпт, краткое исследование, критерии, ссылки на `requirements/*.md` при необходимости). Подпапок `issues/…-requirements/` и отдельных story «на задачу» **нет**.
|
||||
4. **`{base}/.c9s/`** — **не** для содержательных документов: только `workflow-status.yaml`, при необходимости `sprint-status.yaml` и т.п.
|
||||
5. Длинные списки **не** оставлять только в чате — в **`requirements/`** или в **теле** нужного **`issues/*.md`**.
|
||||
6. **Наименование требований (`requirements/*.md`) — обязательно:** поле **`title`** в frontmatter задаётся **только на русском языке**. Заголовок должен быть **чётким и понятным** (по нему сразу ясно, о чём документ). Не использовать английский как «замену смысла»: вместо голых `PRD`, `Tech spec`, `UX doc` — русские формулировки («Описание требований к …», «Техническое задание на …», «Сценарии и макеты …» и т.п.). Техническое имя файла (`storySlug`) — транслит от русского заголовка по правилам Capital (см. FORMAT).
|
||||
7. **Документы и крупные шаги — только через задачи (`issues/*.md`), строго:** PRD, техспека, архитектурный документ, бриф, исследование, пакет UX и любой аналогичный шаг **не начинать** без создания **задачи** в момент старта работы; содержание — в **`requirements/*.md`** (story), процесс и критерии — в теле задачи. Подробно: [docs/TASKS-DOCUMENTS-TIME-POLICY.md](docs/TASKS-DOCUMENTS-TIME-POLICY.md).
|
||||
8. **Учёт времени и `estimate`:** в задачах **`estimate: 0`**, если пользователь **явно** не указал иное. Задачу создаём и **пушим** при начале работы; в frontmatter новой задачи — **`created_by`**, **`submaster`**, **`creators`** по [TASKS-DOCUMENTS-TIME-POLICY.md](docs/TASKS-DOCUMENTS-TIME-POLICY.md) §1. Перевод в **`on_review`** — **только** по **явной команде оператора** (скилл **`c9s-submit-for-review`** или прямой запрос); агент **не** ставит **`on_review`** автоматически после своей работы. Тогда — **`updated_at`** + commit/push. Система считает фактическое время до **`on_review`**. Подробно: тот же документ §1–2.
|
||||
9. **Git — репозиторий результатов:** после значимых правок агент **сам** делает **commit** и **push** (сообщения на русском). Скилл **`c9s-results-push`** — для явных отдельных операций; см. [docs/GIT-COMMITS-POLICY.md](docs/GIT-COMMITS-POLICY.md).
|
||||
10. **Git — монорепозиторий кода:** без изменений — только скилл **`c9s-monorepo-component-git`**.
|
||||
|
||||
---
|
||||
|
||||
## Конфигурация
|
||||
|
||||
1. Скопируйте [config/c9s-config.template.yaml](config/c9s-config.template.yaml) в корень **активного** репозитория результатов как `c9s-config.yaml` (или задайте путь в глобальном конфиге редактора).
|
||||
2. Ключевые поля: `results_root`, `active_project_slug` (slug корневого проекта = имя папки под `results_root`), `coopname`, `username`.
|
||||
3. **Прод vs тест**: смените `results_root` на каталог с `results-test` или продовым `results`.
|
||||
|
||||
Подробности разрешения путей и обновления `updated_at`: [utils/helpers-ru.md](utils/helpers-ru.md).
|
||||
|
||||
---
|
||||
|
||||
## Фазы и роли (кратко)
|
||||
|
||||
| Фаза | Роли (скиллы) | Куда писать |
|
||||
|------|----------------|-------------|
|
||||
| 1 Анализ | analyst, creative-intelligence | Сначала **`issues/*.md`** на шаг, затем **`requirements/*.md`** (story); см. [TASKS-DOCUMENTS-TIME-POLICY](docs/TASKS-DOCUMENTS-TIME-POLICY.md); при необходимости — **`project.md`** / **`component.md`** + `updated_at` |
|
||||
| 2 Планирование | pm, ux-designer | **`requirements/*.md`** + задачи **`issues/*.md`** на каждый оформляемый шаг (PRD, техспека, …) |
|
||||
| 3 Архитектура | architect | Задача **`issues/*.md`**, затем **`requirements/*.md`** (story / диаграммы) |
|
||||
| 4 Реализация | scrum-master, developer | **`issues/*.md`** (всё для задачи в теле файла), код в **монорепе**, не в results |
|
||||
| Операционка | bmad-master-c9s, sm | **`.c9s/*.yaml`** (фазы, спринт), не смешивать с story |
|
||||
|
||||
---
|
||||
|
||||
## Статусы задач и роль мастера
|
||||
|
||||
- Обычные роли **не ставят** статус задачи **`done`**.
|
||||
- **`on_review`** — **не** автоматически после работы агента: только когда **оператор** явно командует передать задачу мастеру (**`c9s-submit-for-review`** / «отправь на ревью»). До этого задача остаётся в **`in_progress`** (или **`todo`**).
|
||||
- Скилл **`c9s-master-review`** может перевести **`on_review` → `done`** (и при необходимости откатить в `in_progress`).
|
||||
|
||||
Подробности и ограничения Capital при импорте: [docs/FORMAT-CAPITAL-GITHUB.md](docs/FORMAT-CAPITAL-GITHUB.md).
|
||||
|
||||
---
|
||||
|
||||
## Команды-обёртки
|
||||
|
||||
Каталог [commands/](commands/) — короткие сценарии на русском; полная логика в соответствующих скиллах и в `bmad-v6/commands/` (англ.) при необходимости детализации.
|
||||
|
||||
---
|
||||
|
||||
## Git (результаты и код)
|
||||
|
||||
- Коммиты/push, задачи и время: [docs/GIT-COMMITS-POLICY.md](docs/GIT-COMMITS-POLICY.md), [docs/TASKS-DOCUMENTS-TIME-POLICY.md](docs/TASKS-DOCUMENTS-TIME-POLICY.md)
|
||||
- Журнал merge → `dev` для взносов (ручной учёт для кооператива): шаблон [templates/results_commits.template.yaml](templates/results_commits.template.yaml) → **`results_commits.yaml` в репозитории результатов** (по умолчанию **`.c9s/results_commits.yaml`** у активного проекта или путь **`results_commits_log`** в `c9s-config.yaml`); **не** в монорепозитории кода — см. [docs/GIT-COMMITS-POLICY.md](docs/GIT-COMMITS-POLICY.md) §2.4
|
||||
|
||||
## Ссылки на код монорепозитория (Coopenomics)
|
||||
|
||||
- Форматы файлов: `monocoop/components/controller/.../file-format.service.ts`
|
||||
- Синхронизация GitHub: `github-sync.service.ts`
|
||||
- Подготовка markdown (content_format, issue): план `capital-md-sync-bmad-prep` в `.cursor/plans/`
|
||||
@@ -0,0 +1,169 @@
|
||||
# BMAD-c9s — как пользоваться
|
||||
|
||||
Пакет связывает **методологию BMAD** (фазы от анализа до кода) с **репозиторием результатов BLAGOROST** (Markdown + GitHub) и **русским** контекстом. Скиллы подсказывают агенту, *куда* писать файлы и *какую роль* играть, чтобы артефакты потом нормально импортировались в систему.
|
||||
|
||||
---
|
||||
|
||||
|
||||
## Классическая цепочка BMAD (концептуально)
|
||||
|
||||
В жизни проектов шаги **сжимают**, **переставляют** или **пропускают**; ниже — **идеальный скелет**: зачем каждая роль и **что именно** она передаёт следующей (всё в каноне c9s: сначала **`issues/*.md`** на шаг работы, затем текст — в **`requirements/*.md`** как **story**, плюс обновления **`project.md` / `component.md`** при уточнении видения).
|
||||
|
||||
**1. Аналитик (`analyst`) и при необходимости CIS (`creative-intelligence`)**
|
||||
*Зачем первыми:* до «что строим» нужно понять **проблему**, **пользователя**, **контекст**, **ограничения** и **гипотезы** — иначе PRD и архитектура будут про несуществующую задачу.
|
||||
*Что формируют:* задачи под шаг («исследование…», «бриф…») и **story** в `requirements/`: бриф, заметки интервью, исследование рынка/конкурентов, формулировка проблемы, гипотезы ценности. **CIS** добавляет **варианты идей**, SWOT, мозговой штурм — тоже через задачу и story, если это отдельная смысловая сессия.
|
||||
*Передача PM:* не «сырой чат», а **согласованный слой смысла** в файлах: кто страдает, от чего, что уже пробовали, какие допущения, какие открытые вопросы. PM опирается на это, чтобы не выдумывать требования в вакууме.
|
||||
|
||||
**2. PM (`pm`), параллельно или следом — UX (`ux-designer`)**
|
||||
*Что получает от аналитики:* проблему, контекст, гипотезы (и при необходимости — идеи из CIS).
|
||||
*Что формирует:* задачи «Подготовить PRD…», «Техспека…» и сами **story** в `requirements/`: **PRD** (цели, scope, приоритеты, риски в продуктовой логике), **техспека** на уровне «что система должна уметь» без привязки к конкретным сервисам. **UX** — задачи на сценарии, CJM, потоки (текст/diagram в story), критерии доступности; пересечение с PM: продуктовые формулировки и границы опыта.
|
||||
*Передача архитектору / см:* **что** должно получиться для пользователя и бизнеса, **в каком порядке важнее**, какие **нефункциональные ожидания** уже видны (без детальной внутренней схемы).
|
||||
|
||||
**3. Архитектор (`architect`)**
|
||||
*Что получает:* утверждённое или черновое видение из PRD/техспеки и UX (границы возможностей, интеграции на словах).
|
||||
*Что формирует:* задачу на архитектурный срез и **story** с **границами системы**, **компонентами**, **потоками данных**, **ADR**, схемами (MERMAID и т.д. по FORMAT). Здесь отвечают на «**как** это устроено внутри», сохраняя совместимость с тем, что уже решили PM/UX.
|
||||
*Передача см / разработке:* картина для **декомпозиции на работы** и оценки рисков реализации (что тянуть первым, где неопределённость).
|
||||
|
||||
**4. Scrum Master (`scrum-master`)**
|
||||
*Что получает:* бэклог смысла из предыдущих фаз (часто уже есть черновые **issues** от PM).
|
||||
*Что формирует:* цели спринта (в т.ч. через `.c9s/sprint-status.yaml`), **уточнение формулировок задач**, готовность к разработке (`todo` / `in_progress`, **`estimate: 0`** по политике c9s, если не оговорено иное).
|
||||
*Передача developer:* **issues** с полным телом под **один сеанс выполнения**, ссылки на нужные **`requirements/*.md`**.
|
||||
|
||||
**5. Developer (`developer`)**
|
||||
*Что получает:* конкретную **задачу** и связанные требования.
|
||||
*Что формирует:* код в **монорепозитории**, обновления в **`issues/*.md`** (итог в теле, **`in_progress`** до команды оператора); **`on_review`** — только после **`/c9s-submit-for-review`**; **не** дублирует продуктовую прозу в `.c9s/`.
|
||||
|
||||
**Связка цепочки:** `analyst` / CIS → **pm** (+ при необходимости **ux-designer**) → **architect** → **scrum-master** → **developer**. Переходы фиксируйте через **`/c9s-status`** и **`workflow-status.yaml`**, чтобы следующий сеанс знал фазу; при малом объёме несколько ролей может взять один сеанс, но **артефакты и задачи** лучше не смешивать без явной пометки в файлах.
|
||||
|
||||
---
|
||||
|
||||
|
||||
## С чего начать (минимум для теста)
|
||||
|
||||
1. **Установите скиллы и команды** из корня репозитория `claude-code-bmad-skills`:
|
||||
- macOS/Linux: `./install-v6.sh`
|
||||
- Windows: `.\install-v6.ps1`
|
||||
В `~/.claude/` появятся `skills/bmad/`, `commands/bmad/`, `config/bmad/` (копия из `bmad-c9s/`).
|
||||
|
||||
2. **Откройте в IDE репозиторий результатов** (тот, где лежит дерево `results/` или тестовый клон) — либо сам `claude-code-bmad-skills`, если гоняете только методологию на пустой заготовке.
|
||||
|
||||
3. **Скопируйте конфиг**
|
||||
`bmad-c9s/config/c9s-config.template.yaml` → в **корень репозитория результатов** как `c9s-config.yaml` и заполните:
|
||||
- `results_root` — абсолютный путь к корню клона с `results/`
|
||||
- `active_project_slug` — имя папки проекта первого уровня под `results/` (как в Capital)
|
||||
- `coopname`, **`username`** — для новых **`issues/*.md`** в frontmatter: **`created_by`**, **`submaster`**, **`creators`** (см. [TASKS-DOCUMENTS-TIME-POLICY.md](docs/TASKS-DOCUMENTS-TIME-POLICY.md) §1)
|
||||
|
||||
4. **Перезапустите Claude Code** (или Cursor с подключёнными скиллами), откройте проект с `c9s-config.yaml`.
|
||||
|
||||
5. **Первый запрос к агенту** (выберите формулировку):
|
||||
- Вызов команды: **`/c9s-init`**
|
||||
- или: «Инициализируй bmad-c9s по `c9s-config.yaml`»
|
||||
Агент должен опереться на скилл **`bmad-master-c9s`**, создать `{кореньАктивногоПроекта}/.c9s/` (операционка), стартовый `workflow-status.yaml` и при необходимости пустой **`requirements/`** для будущих story.
|
||||
|
||||
6. **Проверка состояния:** **`/c9s-status`** — должен показать пути, фазу и **какой скилл логично включить дальше**.
|
||||
|
||||
**Главная точка входа в методологию — скилл `bmad-master-c9s`.** Остальные скиллы — «роли» по фазам; без конфига и `.c9s/` оркестратору не за что зацепиться.
|
||||
|
||||
---
|
||||
|
||||
## Что вы получите после инициализации
|
||||
|
||||
| Что | Где | Зачем |
|
||||
|-----|-----|--------|
|
||||
| `c9s-config.yaml` | корень репозитория результатов | Пути к `results`, slug проекта, идентификаторы |
|
||||
| `.c9s/workflow-status.yaml` (и при необходимости другие YAML) | внутри папки активного Capital-проекта | **Только** операционка BMAD: фазы, спринт — **не** текст требований |
|
||||
| **`requirements/*.md`** | `{base}/requirements/` | **Все** содержательные артефакты: бриф, PRD, техспека, мозговой штурм, UX — как **story** (`type: story`, `content_format`, frontmatter по FORMAT) |
|
||||
| Задачи (dev-единица, контекст в теле) | `issues/*.md` | Канон Capital; без подпапок `*-requirements/` |
|
||||
| `project.md` / `component.md` | под `results_root` | Описание проекта/компонента |
|
||||
|
||||
**Правило:** агент **создаёт** story в `requirements/` и **ведёт** их до реализации (обновляет текст и `updated_at`); цикл «сформулировал требование → реализовал» идёт по этим же файлам и связанным `issues/`. Длинные списки — только в `.md`, не в чате.
|
||||
|
||||
---
|
||||
|
||||
## Скиллы и когда их звать
|
||||
|
||||
| Скилл (папка) | Когда использовать |
|
||||
|----------------|-------------------|
|
||||
| **bmad-master-c9s** | Старт, `/c9s-init`, `/c9s-status`, «с чего начать», смена фазы |
|
||||
| **c9s-master-review** | Только роль мастера: задача в **`on_review` → `done`** (исполнители **не** ставят `done`) |
|
||||
| **c9s-submit-for-review** | **Оператор:** явная команда → задача **`on_review`** + commit/push (агент **не** ставит ревью сам) |
|
||||
| **analyst** | Фаза 1: проблема, бриф, исследование |
|
||||
| **creative-intelligence** | Фаза 1: мозговой штурм, идеи, SWOT |
|
||||
| **pm** | Фаза 2: PRD, приоритеты, tech-spec в контексте плана |
|
||||
| **ux-designer** | Фаза 2: сценарии, UX, доступность |
|
||||
| **architect** | Фаза 3: архитектура, границы, схемы (mermaid и т.д. в разрешённых местах) |
|
||||
| **scrum-master** | Фаза 4: спринт, разбиение, истории |
|
||||
| **developer** | Фаза 4: реализация (код — в **монорепе**, не в `results`) |
|
||||
| **builder** | Мета: новые скиллы/шаблоны под c9s |
|
||||
|
||||
В Cursor можно явно написать: «Следуй скиллу bmad-master-c9s» или «Роль analyst из bmad-c9s».
|
||||
|
||||
---
|
||||
|
||||
## Сценарии использования
|
||||
|
||||
### Сценарий A — Первый прогон «с нуля»
|
||||
|
||||
1. Заполнить `c9s-config.yaml`.
|
||||
2. `/c9s-init`.
|
||||
3. `/c9s-status` — убедиться, что фаза и пути верные.
|
||||
4. Сформулировать цель (например: «Опиши проблему и гипотезы для фичи X») и работать через **analyst** / **creative-intelligence** по политике c9s: **сначала** задача **`issues/*.md`**, **затем** **story** в **`requirements/{slug}.md`** (не только проза в `requirements/` без issue).
|
||||
5. Дальше — **pm** / **architect** дополняют или дробят story и задачи по FORMAT; импорт в Capital проверяется по каноническим путям.
|
||||
|
||||
### Сценарий B — Уже есть проект в `results/`
|
||||
|
||||
1. Проверить, что `active_project_slug` совпадает с папкой проекта.
|
||||
2. `/c9s-init` (добавит `.c9s/` и при отсутствии — `requirements/`, не ломая существующие md).
|
||||
3. `/c9s-status` → дальше по рекомендованной фазе (часто **pm** или **architect**).
|
||||
|
||||
### Сценарий C — Только методология, без реального Capital-дерева
|
||||
|
||||
1. Временно задать `results_root` на любую папку и создать минимальную структуру вручную **или** завести **`requirements/`** и писать story даже без полного дерева Capital.
|
||||
2. Иметь в виду: без канонических путей импорт в Capital не проверить — это режим «отладка промптов и скиллов».
|
||||
|
||||
### Сценарий D — От агента к мастеру (два шага)
|
||||
|
||||
1. Агент закончил черновик — задача остаётся в **`in_progress`** (оператор читает PRD, правит вручную, просит доработки и т.д.).
|
||||
2. Когда оператор **готов** передать задачу мастеру: явная команда (**`/c9s-submit-for-review`**, «отправь задачу … на ревью») → агент ставит **`on_review`**, **`updated_at`**, commit/push в results ([TASKS-DOCUMENTS-TIME-POLICY.md](docs/TASKS-DOCUMENTS-TIME-POLICY.md) §2).
|
||||
3. Мастер вызывает **`c9s-master-review`**: **`done`** или возврат в **`in_progress`**.
|
||||
|
||||
## Команды (slash)
|
||||
|
||||
Файлы в [commands/](commands/) — короткие сценарии; полная логика в соответствующих **SKILL.md**.
|
||||
|
||||
| Команда | Скилл | Назначение |
|
||||
|---------|--------|------------|
|
||||
| `/c9s-init` | bmad-master-c9s | Конфиг, `.c9s/` (YAML), при необходимости каталог `requirements/` |
|
||||
| `/c9s-status` | bmad-master-c9s | Сводка и рекомендация следующего скилла |
|
||||
| `/c9s-submit-for-review` | c9s-submit-for-review | Оператор: задача → **`on_review`** + commit/push (не автоматически после агента) |
|
||||
| `/prd`, `/architecture`, `/create-story`, … | роли BMM и др. | Как в BMAD v6, но с опорой на c9s и русские обёртки |
|
||||
|
||||
Подробные англоязычные тексты команд — в `bmad-v6/commands/` (эталон, не менять в рамках c9s).
|
||||
|
||||
---
|
||||
|
||||
## Документация рядом
|
||||
|
||||
| Файл | Содержание |
|
||||
|------|------------|
|
||||
| [CLAUDE.md](CLAUDE.md) | Обзор пакета, таблица фаз, правила хранения |
|
||||
| [docs/FORMAT-CAPITAL-GITHUB.md](docs/FORMAT-CAPITAL-GITHUB.md) | Канон путей и frontmatter |
|
||||
| [utils/helpers-ru.md](utils/helpers-ru.md) | Разрешение корня проекта, `updated_at`, hash |
|
||||
| [commands/_README.md](commands/_README.md) | Общие шаги перед работой по командам |
|
||||
|
||||
---
|
||||
|
||||
## Частые вопросы
|
||||
|
||||
**Почему агент «не знает», куда писать?**
|
||||
Нет `c9s-config.yaml` в корне открытого проекта или не вызван `/c9s-init` — оркестратор не привязан к дереву.
|
||||
|
||||
**Можно ли обойтись одним скиллом?**
|
||||
Для навигации и инициализации — да, **`bmad-master-c9s`**. Для качественной роли (архитектор, PM) лучше явно переключать скилл фазы.
|
||||
|
||||
**Где эталон BMAD на английском?**
|
||||
Каталог `bmad-v6/` в родительском репозитории — только справка; рабочая логика для Coopenomics — в `bmad-c9s/`.
|
||||
|
||||
---
|
||||
|
||||
Удачного теста: **`/c9s-init`** → **`/c9s-status`** → одна короткая задача для **analyst** с новым файлом **`requirements/brief-*.md`** (полный frontmatter story по FORMAT).
|
||||
@@ -0,0 +1,11 @@
|
||||
# Команды bmad-c9s (русский)
|
||||
|
||||
Каждый файл — краткий сценарий. Полная методология: `bmad-v6/commands/*.md` (англ.).
|
||||
|
||||
Общие шаги перед работой:
|
||||
|
||||
1. Активируй соответствующий **скилл** из `bmad-c9s/skills/`.
|
||||
2. Прочитай [docs/FORMAT-CAPITAL-GITHUB.md](../docs/FORMAT-CAPITAL-GITHUB.md), [docs/GIT-COMMITS-POLICY.md](../docs/GIT-COMMITS-POLICY.md) и [utils/helpers-ru.md](../utils/helpers-ru.md).
|
||||
3. Пиши содержание в **файлы story** под **`requirements/`** (и `issues/` по канону); в **`.c9s/`** — только YAML/статусы воркфлоу, не брифы и не PRD.
|
||||
4. Git: [c9s-push-results.md](c9s-push-results.md), [c9s-monorepo-component-git.md](c9s-monorepo-component-git.md).
|
||||
5. Задачи и время: [tasks-documents-time.md](tasks-documents-time.md), передача на ревью мастеру: [c9s-submit-for-review.md](c9s-submit-for-review.md).
|
||||
@@ -0,0 +1,9 @@
|
||||
# /architecture (c9s)
|
||||
|
||||
**Скилл:** `c9s-bmm-architect`
|
||||
|
||||
**Фаза:** 3
|
||||
|
||||
**Выход:** `requirements/architecture-*.md` с явным `content_format` (MARKDOWN / MERMAID / …).
|
||||
|
||||
**Детали:** `bmad-v6/commands/architecture.md`
|
||||
@@ -0,0 +1,9 @@
|
||||
# /brainstorm (c9s)
|
||||
|
||||
**Скилл:** `c9s-creative-intelligence` (или `c9s-bmm-analyst`)
|
||||
|
||||
**Фаза:** 1
|
||||
|
||||
**Выход:** **`requirements/brainstorm-{slug}.md`** (story, `content_format: MARKDOWN`)
|
||||
|
||||
**Детали:** `bmad-v6/commands/brainstorm.md`
|
||||
@@ -0,0 +1,9 @@
|
||||
# /c9s-init
|
||||
|
||||
**Скилл:** `bmad-master-c9s`
|
||||
|
||||
**Цель:** создать `c9s-config.yaml` (из шаблона), каталог `.c9s/` (только YAML/операционка), начальный `workflow-status`, при отсутствии — **`requirements/`** для story.
|
||||
|
||||
**Шаги:** см. раздел `/c9s-init` в `skills/core/bmad-master-c9s/SKILL.md`.
|
||||
|
||||
**Шаблоны:** `config/c9s-config.template.yaml`, `templates/bmm-workflow-status.c9s.template.yaml`.
|
||||
@@ -0,0 +1,7 @@
|
||||
# /c9s-master-review
|
||||
|
||||
**Скилл:** `c9s-master-review`
|
||||
|
||||
**Цель:** ревью задач в `on_review`, перевод в `done` или откат в `in_progress`, обновление `updated_at` в `issues/*.md`.
|
||||
|
||||
**Ограничение:** импорт в Capital может отклонить смену статуса по правам — см. скилл.
|
||||
@@ -0,0 +1,9 @@
|
||||
# c9s-monorepo-component-git
|
||||
|
||||
Работа с **монорепозиторием кода**: создание ветки **`component/…`** от **`dev`**, коммиты только в ней, по команде — **merge в `dev`**, запись полного SHA merge в **`results_commits.yaml`** в **репозитории результатов** (по умолчанию **`.c9s/results_commits.yaml`** у проекта; см. GIT-COMMITS-POLICY §2.4), затем commit/push **results**.
|
||||
|
||||
Полная логика: скилл `bmad-c9s/skills/core/c9s-monorepo-component-git/SKILL.md`.
|
||||
|
||||
Политика: `bmad-c9s/docs/GIT-COMMITS-POLICY.md`.
|
||||
|
||||
Прямые коммиты в `dev` **запрещены**.
|
||||
@@ -0,0 +1,7 @@
|
||||
# c9s-push-results
|
||||
|
||||
**Опционально:** отдельный `commit`/`push` в **репозитории результатов** по явной просьбе (особое сообщение, повторный push).
|
||||
|
||||
По умолчанию агент **уже** коммитит и пушит после правок — см. `bmad-c9s/docs/GIT-COMMITS-POLICY.md` §1.
|
||||
|
||||
Скилл: `bmad-c9s/skills/core/c9s-results-push/SKILL.md`.
|
||||
@@ -0,0 +1,7 @@
|
||||
# /c9s-status
|
||||
|
||||
**Скилл:** `bmad-master-c9s`
|
||||
|
||||
**Цель:** показать активный `results_root`, фазу по `.c9s/workflow-status.yaml`, рекомендованный следующий скилл.
|
||||
|
||||
**Шаги:** раздел `/c9s-status` в `skills/core/bmad-master-c9s/SKILL.md`.
|
||||
@@ -0,0 +1,8 @@
|
||||
# c9s-submit-for-review
|
||||
|
||||
**Оператор** явно передаёт задачу мастеру: статус **`on_review`**, новый **`updated_at`**, **commit + push** в репозиторий результатов.
|
||||
|
||||
Не путать с «агент закончил черновик» — **`on_review`** только после **твоей** команды (прочитал PRD, проверил результат и т.д.).
|
||||
|
||||
Скилл: `bmad-c9s/skills/core/c9s-submit-for-review/SKILL.md`
|
||||
Политика: `bmad-c9s/docs/TASKS-DOCUMENTS-TIME-POLICY.md` §2.
|
||||
@@ -0,0 +1,7 @@
|
||||
# /create-agent (c9s)
|
||||
|
||||
**Скилл:** `c9s-bmb-builder`
|
||||
|
||||
**Цель:** описать нового агента/роль как скилл в `bmad-c9s/skills/` с русским `SKILL.md`.
|
||||
|
||||
**Детали:** `bmad-v6/commands/create-agent.md`
|
||||
@@ -0,0 +1,11 @@
|
||||
# /create-story (c9s)
|
||||
|
||||
**Скилл:** `c9s-bmm-scrum-master` или `c9s-bmm-pm`
|
||||
|
||||
**Фаза:** 2–4
|
||||
|
||||
**Выход:** новый файл `requirements/{slug}.md` или `issues/{issue}-requirements/{slug}.md` по [FORMAT](../docs/FORMAT-CAPITAL-GITHUB.md); шаблон `templates/story.template.md`.
|
||||
|
||||
**Обязательно:** `content_format`, `hash`, `updated_at`.
|
||||
|
||||
**Детали:** `bmad-v6/commands/create-story.md`
|
||||
@@ -0,0 +1,9 @@
|
||||
# /create-ux-design (c9s)
|
||||
|
||||
**Скилл:** `c9s-bmm-ux-designer`
|
||||
|
||||
**Фаза:** 2–3
|
||||
|
||||
**Выход:** `requirements/ux-*.md` (MARKDOWN/MERMAID), ссылки на мокапы вне results при необходимости.
|
||||
|
||||
**Детали:** `bmad-v6/commands/create-ux-design.md`
|
||||
@@ -0,0 +1,7 @@
|
||||
# /create-workflow (c9s)
|
||||
|
||||
**Скилл:** `c9s-bmb-builder`
|
||||
|
||||
**Цель:** добавить или изменить воркфлоу в пакете `bmad-c9s` (команда + скилл + ссылка на FORMAT).
|
||||
|
||||
**Детали:** `bmad-v6/commands/create-workflow.md`
|
||||
@@ -0,0 +1,9 @@
|
||||
# /dev-story (c9s)
|
||||
|
||||
**Скилл:** `c9s-bmm-developer`
|
||||
|
||||
**Фаза:** 4
|
||||
|
||||
**Цель:** реализация в **монорепозитории**; в results — обновление связанного **`issues/*.md`** (тело, **`updated_at`**, статус **`in_progress`** при активной работе). Статус **`on_review`** агент **не** выставляет — только по команде оператора (**`/c9s-submit-for-review`**, см. `commands/c9s-submit-for-review.md` и [TASKS-DOCUMENTS-TIME-POLICY.md](../docs/TASKS-DOCUMENTS-TIME-POLICY.md) §2). **`done`** — только скилл **`c9s-master-review`**.
|
||||
|
||||
**Детали:** `bmad-v6/commands/dev-story.md` (канон BMAD); для статусов и времени — bmad-c9s выше.
|
||||
@@ -0,0 +1,9 @@
|
||||
# /prd (c9s)
|
||||
|
||||
**Скилл:** `c9s-bmm-pm`
|
||||
|
||||
**Фаза:** 2
|
||||
|
||||
**Выход:** PRD как **требования (story)** в **`requirements/*.md`** (`type: story`, `content_format: MARKDOWN`); при росте — несколько связанных story; затем декомпозиция в **`issues/*.md`** при необходимости. Не использовать `.c9s/` для текста PRD.
|
||||
|
||||
**Детали:** `bmad-v6/commands/prd.md`, шаблон логики `bmad-v6/templates/prd.md`
|
||||
@@ -0,0 +1,9 @@
|
||||
# /product-brief (c9s)
|
||||
|
||||
**Скилл:** `c9s-bmm-analyst`
|
||||
|
||||
**Фаза:** 1
|
||||
|
||||
**Выход:** **`requirements/product-brief-{slug}.md`** (story, `content_format: MARKDOWN`); при необходимости — ключевые тезисы дублировать/сжать в теле **`project.md`** + `updated_at`.
|
||||
|
||||
**Детали:** `bmad-v6/commands/product-brief.md`
|
||||
@@ -0,0 +1,9 @@
|
||||
# /research (c9s)
|
||||
|
||||
**Скилл:** `c9s-bmm-analyst`
|
||||
|
||||
**Фаза:** 1
|
||||
|
||||
**Выход:** **`requirements/research-{slug}.md`** (story, `content_format: MARKDOWN`)
|
||||
|
||||
**Детали:** `bmad-v6/commands/research.md`
|
||||
@@ -0,0 +1,9 @@
|
||||
# /solutioning-gate-check (c9s)
|
||||
|
||||
**Скилл:** `c9s-bmm-architect` + `c9s-bmm-pm`
|
||||
|
||||
**Фаза:** 3
|
||||
|
||||
**Выход:** чек-лист как **story** в **`requirements/gate-check-{slug}.md`** (`content_format: MARKDOWN`) со ссылками на существующие story/issues.
|
||||
|
||||
**Детали:** `bmad-v6/commands/solutioning-gate-check.md`
|
||||
@@ -0,0 +1,9 @@
|
||||
# /sprint-planning (c9s)
|
||||
|
||||
**Скилл:** `c9s-bmm-scrum-master`
|
||||
|
||||
**Фаза:** 4
|
||||
|
||||
**Выход:** `.c9s/sprint-status.yaml` (шаблон `templates/sprint-status.c9s.template.yaml`), обновления `issues/*.md` (`estimate`, `status`, `updated_at`).
|
||||
|
||||
**Детали:** `bmad-v6/commands/sprint-planning.md`
|
||||
@@ -0,0 +1,9 @@
|
||||
# Задачи под документы и учёт времени
|
||||
|
||||
Строгое правило: PRD, архитектура, бриф, UX-пакет и т.п. — **сначала** `issues/*.md`, **затем** `requirements/*.md`.
|
||||
|
||||
`estimate: 0` по умолчанию; старт — push задачи. **`on_review`** — **только** по команде оператора: **`/c9s-submit-for-review`** или явная формулировка (см. `commands/c9s-submit-for-review.md`).
|
||||
|
||||
Новая задача **`issues/*.md`:** в frontmatter — **`created_by`**, **`submaster`**, **`creators`** = **`username`** из конфига ([§1](../docs/TASKS-DOCUMENTS-TIME-POLICY.md)).
|
||||
|
||||
Полный текст: `bmad-c9s/docs/TASKS-DOCUMENTS-TIME-POLICY.md`.
|
||||
@@ -0,0 +1,9 @@
|
||||
# /tech-spec (c9s)
|
||||
|
||||
**Скилл:** `c9s-bmm-pm`
|
||||
|
||||
**Фаза:** 2
|
||||
|
||||
**Выход:** **`requirements/tech-spec-*.md`** (story, `content_format: MARKDOWN`); уточнения и версии — правки того же или новых story, не `.c9s/`.
|
||||
|
||||
**Детали:** `bmad-v6/commands/tech-spec.md`
|
||||
@@ -0,0 +1,9 @@
|
||||
# /workflow-init (c9s)
|
||||
|
||||
**Эквивалент:** `/c9s-init`
|
||||
|
||||
**Скилл:** `bmad-master-c9s`
|
||||
|
||||
Инициализация bmad-c9s в репозитории результатов: конфиг, `.c9s/`, статус воркфлоу.
|
||||
|
||||
См. `commands/c9s-init.md`.
|
||||
@@ -0,0 +1,7 @@
|
||||
# /workflow-status (c9s)
|
||||
|
||||
**Эквивалент:** `/c9s-status`
|
||||
|
||||
**Скилл:** `bmad-master-c9s`
|
||||
|
||||
См. `commands/c9s-status.md`.
|
||||
@@ -0,0 +1,37 @@
|
||||
# Скопируйте в корень репозитория результатов как c9s-config.yaml
|
||||
# или укажите путь к этому файлу в настройках агента.
|
||||
|
||||
# Абсолютный путь к каталогу-корню клона репозитория результатов
|
||||
results_root: /Users/USER/dacom-code/foundation/results
|
||||
|
||||
# Slug активного корневого проекта = имя папки первого уровня под results_root
|
||||
# (совпадает с generateSlug(title) корневого project.md)
|
||||
active_project_slug: my-project-slug
|
||||
|
||||
# Идентификация в frontmatter задач/требований
|
||||
coopname: your-coop
|
||||
# Аккаунт в кооперативе (blockchain username). Должен совпадать с тем, что в каждой новой issues/*.md:
|
||||
# created_by: <username>
|
||||
# submaster: <username>
|
||||
# creators: [<username>]
|
||||
# Без этих трёх полей с корректным username учёт времени в Capital не работает.
|
||||
# То же значение — в results_commits.yaml → username при учёте merge в dev.
|
||||
username: your-username
|
||||
|
||||
# Язык артефактов и общения по умолчанию
|
||||
default_language: ru
|
||||
|
||||
# Опционально: относительный путь к вложенному компоненту от корня проекта
|
||||
# Пример: components/backend-api
|
||||
# active_component_path: ""
|
||||
|
||||
# --- Монорепозиторий кода (скилл c9s-monorepo-component-git) ---
|
||||
# Абсолютный путь к корню git монорепозитория (монорепо кода; журнал merge НЕ здесь)
|
||||
# monorepo_root: /Users/USER/dacom-code/foundation/monocoop
|
||||
# Имя каталога компонента под components/ (desktop, controller, sdk, …)
|
||||
# active_component_git_slug: desktop
|
||||
# Журнал merge → dev для ручной подачи взносов: YAML в репозитории результатов.
|
||||
# Относительно {results_root}/{active_project_slug} или абсолютный путь. По умолчанию — .c9s/results_commits.yaml
|
||||
# results_commits_log: .c9s/results_commits.yaml
|
||||
# Последний зафиксированный SHA merge (дубль; канон — файл results_commits_log)
|
||||
# last_merge_to_dev_commit_hash: ""
|
||||
@@ -0,0 +1,164 @@
|
||||
# Спецификация markdown для Capital ↔ GitHub (bmad-c9s)
|
||||
|
||||
Документ фиксирует **канон путей и frontmatter** для репозитория результатов, согласованный с импортом в контроллере Coopenomics (расширение **capital**). Реализация: `FileFormatService`, `GitHubSyncService` в монорепозитории.
|
||||
|
||||
**Связанная подготовка controller:** план `capital-md-sync-bmad-prep` — явный `content_format` у story, расширенный набор полей при создании/обновлении issue/story из Git, политика **без поля `id` в markdown задачи** (канон идентификации в Git — **`hash`**; человекочитаемый `id` задачи живёт в БД и может появиться в файле после цикла DB→Git, если экспорт изменится).
|
||||
|
||||
---
|
||||
|
||||
## 1. Корень репозитория и slug
|
||||
|
||||
- **`results_root`** — абсолютный путь к клону репозитория результатов (прод или тест), задаётся в `c9s-config.yaml`.
|
||||
- **`parentSlug`** — slug от **названия** корневого проекта (транслитерация кириллицы, как в `generateSlug` на бэкенде). Совпадает с именем каталога первого уровня: `{results_root}/{parentSlug}/`.
|
||||
- **`componentSlug`** — slug дочернего проекта-компонента.
|
||||
|
||||
Смена **`title`** у сущности меняет slug и **путь файла**; синхронизация использует индекс файлов для переименований.
|
||||
|
||||
---
|
||||
|
||||
## 2. Дерево путей (канон)
|
||||
|
||||
| Сущность | Путь относительно `results_root` |
|
||||
|----------|-----------------------------------|
|
||||
| Корневой проект | `{parentSlug}/project.md` |
|
||||
| Компонент | `{parentSlug}/components/{componentSlug}/component.md` |
|
||||
| Задачи | только под проектом/компонентом: `{base}/issues/{issueSlug}.md` |
|
||||
| Требования уровня проекта/компонента | `{base}/requirements/{storySlug}.md` |
|
||||
|
||||
Здесь **`base`** = `{parentSlug}` для корня или `{parentSlug}/components/{componentSlug}` для компонента.
|
||||
|
||||
**`project_hash` в задаче и требовании** для компонента — hash **проекта компонента** (не корневого проекта), в соответствии с данными Capital.
|
||||
|
||||
**bmad-c9s:** отдельных файлов «требований к задаче» и путей вида `issues/{issueSlug}-requirements/` **нет**. Сама задача — единица декомпозиции на **один** сеанс выполнения (один промпт разработчика): весь контекст для реализации, краткое исследование перед работой, критерии приёмки и ссылки на продуктовые **`requirements/*.md`** (если нужно) — **в теле** `{base}/issues/{issueSlug}.md` под frontmatter.
|
||||
|
||||
### 2.1. Требования (story) как носитель продуктовой прозы уровня выше задачи
|
||||
|
||||
В методологии **bmad-c9s** бриф, PRD, исследование, архитектурные срезы, UX на уровне продукта — это **story** в **`{base}/requirements/{storySlug}.md`** (`type: story`, **`content_format`**, статус **`pending`** / **`completed`** / **`cancelled`**). Это **не** дублируется отдельными story на каждую задачу: задача ссылается на них при необходимости, но **описание работ** живёт в **`issues/*.md`**.
|
||||
|
||||
### 2.2. Язык и заголовки требований (bmad-c9s, обязательно)
|
||||
|
||||
Для **всех** файлов **`{base}/requirements/{storySlug}.md`**: в frontmatter поле **`title`** — **только на русском языке**. Это основное **человекочитаемое наименование** документа; формулировка **чёткая и понятная** (краткий предметный заголовок, по которому без догадок понятно содержание). Имя файла (`storySlug`) при ручном создании — транслитерация русского заголовка по правилам slug (как на бэкенде); не задавать **`title`** на английском ради «удобного» slug.
|
||||
|
||||
---
|
||||
|
||||
## 3. Что не импортируется из Git в БД как project/issue/story
|
||||
|
||||
Каталоги вроде **`results/`**, **`meetings/`**, **`messages/`** и прочие произвольные папки **не проходят** тот же импорт, что канонические markdown сущностей. Их содержимое не следует считать «автоматически в Capital».
|
||||
|
||||
**Операционные файлы bmad-c9s** (статусы фаз BMAD, служебные YAML) — в **`{base}/.c9s/`**. Они **не** импортируются как story/issue. Содержательные документы уровня продукта — в **`requirements/`**; контекст выполнения задачи — в **теле** **`issues/*.md`**, а не в `.c9s/` и не в подпапках у `issues/`.
|
||||
|
||||
---
|
||||
|
||||
## 4. Обязательность `updated_at`
|
||||
|
||||
При **любом** осмысленном редактировании файла, который должен затянуться в БД при импорте Git→Capital, выставляйте **`updated_at`** в frontmatter в **новое** значение **ISO 8601** (как в примерах: `2026-03-27T13:32:02.225Z`).
|
||||
|
||||
Логика на бэкенде: обновление сущности выполняется, если `updated_at` в файле **строго новее**, чем в БД.
|
||||
|
||||
---
|
||||
|
||||
## 5. Статусы и приоритеты (строго эти строки)
|
||||
|
||||
**Задача (`issue`):** `backlog`, `todo`, `in_progress`, `on_review`, `done`, `canceled`.
|
||||
|
||||
**Требование (`story`):** `pending`, `completed`, `cancelled`.
|
||||
|
||||
**Приоритет задачи:** `urgent`, `high`, `medium`, `low`.
|
||||
|
||||
---
|
||||
|
||||
## 6. Поля frontmatter (построчный формат)
|
||||
|
||||
Парсер на бэкенде — **простой построчный** `key: value`. Массивы в одной строке: `creators: [user1, user2]`. Избегайте многострочного YAML в frontmatter.
|
||||
|
||||
### 6.1. Проект / компонент (`project.md` / `component.md`)
|
||||
|
||||
| Поле | Обязательность |
|
||||
|------|----------------|
|
||||
| `type` | `project` |
|
||||
| `title` | да |
|
||||
| `hash` | да |
|
||||
| `coopname` | да |
|
||||
| `parent_hash` | да (у корня — нулевой hash из практики команды) |
|
||||
| `created_at`, `updated_at` | рекомендованы |
|
||||
| Тело | описание проекта/компонента (markdown) |
|
||||
|
||||
Статусы проекта в смысле blockchain **в этих файлах через текущий `projectToMarkdown` не сериализуются**; менять жизненный цикл проекта в Capital — через UI/API, если иначе не согласовано.
|
||||
|
||||
### 6.2. Задача (`issue`)
|
||||
|
||||
| Поле | Примечание |
|
||||
|------|------------|
|
||||
| `type` | `issue` |
|
||||
| `title` | да |
|
||||
| `hash` | да, стабильный идентификатор в Git |
|
||||
| `project_hash` | hash проекта (компонента), к которому относится задача |
|
||||
| `status`, `priority`, `estimate` | да |
|
||||
| `created_by` | строка (username) |
|
||||
| `submaster` | строка (username). **bmad-c9s:** обязательна в каждой новой задаче — вместе с `created_by` и `creators` нужна Capital для учёта времени |
|
||||
| `creators` | массив username в одну строку, **непустой**; **bmad-c9s:** минимум `["<username>"]` — тот же аккаунт, что `c9s-config.yaml` → `username` (если команда не задала иное). Пустой список в мутацию не передавать, если DTO требует непустой массив |
|
||||
| `labels` | массив строк |
|
||||
| `sort_order` | число |
|
||||
| `cycle_id` | опционально |
|
||||
| `created_at`, `updated_at` | рекомендованы |
|
||||
|
||||
**Поле `id` в markdown:** по политике bmad-c9s **не добавлять** в новые файлы; опираться на `hash`. После синхронизации DB→Git состав frontmatter может расшириться со стороны экспорта.
|
||||
|
||||
**Тело задачи (bmad-c9s):** одна **простая** dev-задача после планирования — заголовок + в **markdown-теле**: исходный запрос/промпт, минимальное исследование/выводы перед кодом, чёткие критерии приёмки, при необходимости ссылки на **`requirements/*.md`**. Не создавать подкаталоги `*-requirements/` и не выносить «требования к задаче» в отдельные story-файлы.
|
||||
|
||||
### 6.3. Требование (`story`)
|
||||
|
||||
| Поле | Примечание |
|
||||
|------|------------|
|
||||
| `type` | `story` |
|
||||
| `title` | да |
|
||||
| `hash` | да |
|
||||
| **`content_format`** | **`MARKDOWN`**, **`BPMN`**, **`DRAWIO`**, **`MERMAID`** — для всех новых требований указывать явно |
|
||||
| `status` | `pending` / `completed` / `cancelled` |
|
||||
| `created_by` | username |
|
||||
| `sort_order` | число |
|
||||
| `project_hash` | да |
|
||||
| `issue_hash` | в **bmad-c9s** для новых story под **`requirements/`** **не заполнять**; привязка задачи к продуктовому контексту — ссылками из тела **`issues/*.md`**. Поле может встречаться только в **legacy**-данных из экспорта Capital. |
|
||||
| `created_at`, `updated_at` | рекомендованы |
|
||||
|
||||
Если `content_format` отсутствует в старом файле, импорт трактует как **MARKDOWN** (совместимость).
|
||||
|
||||
---
|
||||
|
||||
## 7. Жизненный цикл задачи (договор команды)
|
||||
|
||||
| Действие | Статус |
|
||||
|----------|--------|
|
||||
| Новая задача от аналитика/PM/архитектора | `backlog` или `todo` |
|
||||
| Активная работа | `in_progress` |
|
||||
| Работа завершена с точки зрения оператора, нужно ревью мастеру | **`on_review`** (в bmad-c9s — **только** после команды оператора, не автоматически агентом; см. TASKS-POLICY §2) |
|
||||
| Принято мастером | **`done`** (только скилл мастера) |
|
||||
| Отмена | `canceled` |
|
||||
|
||||
Роли **кроме** `c9s-master-review` **не** выставляют `done`.
|
||||
|
||||
### 7.1. bmad-c9s: задачи под документы, `estimate` и время
|
||||
|
||||
- Любой существенный продуктовый шаг (PRD, техспека, архитектурный документ, бриф, исследование, UX-пакет и т.п.) ведётся **только** при наличии **задачи** `issues/*.md`, созданной **в начале** работы; текст артефакта — в **`requirements/*.md`**. Детали: [TASKS-DOCUMENTS-TIME-POLICY.md](TASKS-DOCUMENTS-TIME-POLICY.md).
|
||||
- Во **всех** задачах **`estimate: 0`**, если пользователь **явно** не задал другое значение. Фактическое время система учитывает до перехода в **`on_review`** (конкретика на стороне Capital).
|
||||
- **`on_review`** — **только** по **явной команде оператора** (скилл **`c9s-submit-for-review`**); агент **не** переводит задачу в ревью автоматически. В момент команды — **`updated_at`**, commit/push в репозиторий результатов. См. [TASKS-DOCUMENTS-TIME-POLICY.md](TASKS-DOCUMENTS-TIME-POLICY.md) §2.
|
||||
|
||||
---
|
||||
|
||||
## 8. Права и отказ импорта
|
||||
|
||||
В Git можно записать любой статус. При импорте Capital применяет **бизнес-правила** (роли, мастер проекта и т.д.) — обновление статуса задачи может быть **отклонено**. Скилл мастера должен предупреждать об этом; при расхождении смотреть логи контроллера и править файл или проходить шаги через рабочий стол.
|
||||
|
||||
---
|
||||
|
||||
## 9. Генерация нового `hash`
|
||||
|
||||
Для новых сущностей в Git используйте криптографически стойкую случайную строку в формате, совместимом с остальными hash в системе (как правило **64 hex-символа**). Практический способ: см. [utils/helpers-ru.md](../utils/helpers-ru.md).
|
||||
|
||||
---
|
||||
|
||||
## 10. Код и планы
|
||||
|
||||
- Монорепозиторий: `monocoop/components/controller/src/extensions/capital/`
|
||||
- Подготовка: `.cursor/plans/capital-md-sync-bmad-prep.plan.md`
|
||||
- Этот пакет: `claude-code-bmad-skills/bmad-c9s/`
|
||||
@@ -0,0 +1,75 @@
|
||||
# Политика Git: репозиторий результатов и монорепозиторий кода (bmad-c9s)
|
||||
|
||||
Фоновый документ для агентов и людей. **Скиллы** с исполняемыми правилами:
|
||||
|
||||
- [c9s-results-push](../skills/core/c9s-results-push/SKILL.md) — **опционально:** явный `commit`/`push` с особым сообщением; **базовый** режим — автоматика (§1).
|
||||
- [c9s-monorepo-component-git](../skills/core/c9s-monorepo-component-git/SKILL.md) — работа с **монорепозиторием кода**: только **ветки компонентов**, merge в `dev` только по команде; в **`results_commits.yaml`** (репозиторий результатов, не монорепо) — SHA, **`username`**, **`merge_title`**, дата и пр. по §2.4.
|
||||
|
||||
Задачи, документы и время: [TASKS-DOCUMENTS-TIME-POLICY.md](TASKS-DOCUMENTS-TIME-POLICY.md).
|
||||
|
||||
---
|
||||
|
||||
## 1. Репозиторий результатов (`results_root`)
|
||||
|
||||
- Агент **самостоятельно** фиксирует изменения в Git: после **значимых** правок канонических `.md` (и связанных файлов в `results_root`) выполнять **`git add`** (по релевантным путям, без мусора и секретов), **`git commit`** с **кратким сообщением на русском** (что изменено: проект, задачи, требования, `.c9s/`) и **`git push`** в настроенный `remote`.
|
||||
- Частота: по завершении логического шага сессии или серии согласованных правок; **обязательно** push после создания/обновления задачи, если от этого зависит учёт времени (см. TASKS-DOCUMENTS-TIME-POLICY).
|
||||
- Пользователь **мониторит** историю и логи; при необходимости откатывает или правит вне агента.
|
||||
- Скилл **`c9s-results-push`** — для случая, когда пользователь **явно** просит отдельный коммит/сообщение или повторный push; он **не** отменяет обычную обязанность агента коммитить и пушить по §1.
|
||||
|
||||
---
|
||||
|
||||
## 2. Монорепозиторий кода (Coopenomics и аналоги)
|
||||
|
||||
Правила **строгие, без исключений**.
|
||||
|
||||
### 2.1. Запреты
|
||||
|
||||
- **Запрещены** прямые коммиты в **`dev`**.
|
||||
- **Запрещены** коммиты в **любую** долгоживущую ветку, кроме **ветки компонента**, созданной по правилам ниже (включая `main`, `master`, чужие `release/*`, если не оговорено иначе отдельным решением команды).
|
||||
- **Запрещено** «быстро поправить в dev» — только через ветку компонента и merge по команде.
|
||||
|
||||
### 2.2. Ветка компонента
|
||||
|
||||
1. **Имя компонента** — каталог под `components/<slug>/` (например `desktop`, `controller`) или согласованный с командой идентификатор пакета; в конфиге — `active_component_git_slug` (см. шаблон `c9s-config.template.yaml`).
|
||||
2. **Имя ветки** формируется из **человекочитаемого названия работы** (например `title` задачи или компонента в Capital): взять смысл → **slug** (транслит/латиница, дефисы, нижний регистр, как в `generateSlug` репозитория).
|
||||
Канонический префикс: **`component/<component_slug>-<work_slug>`**
|
||||
Пример: `component/desktop-ispravlenie-platezha`, `component/controller-api-agenda`.
|
||||
3. **Начало работы:**
|
||||
- `git fetch`;
|
||||
- перейти на **`dev`**, подтянуть актуальное состояние (`pull` / `merge` по политике команды);
|
||||
- создать ветку **`component/...`** от **актуального `dev`**;
|
||||
- все коммиты — **только** в этой ветке.
|
||||
|
||||
### 2.3. Завершение: merge в `dev`
|
||||
|
||||
- Выполняется **только** по **явной команде** пользователя (в рамках скилла `c9s-monorepo-component-git`), после того как работа признана готовой.
|
||||
- После успешного merge в `dev` зафиксировать **полный SHA merge-коммита** (тот коммит, который появился на `dev` при merge; при fast-forward — SHA последнего коммита ветки, но скилл описывает проверку через `git log`).
|
||||
|
||||
### 2.4. Файл `results_commits.yaml`
|
||||
|
||||
- **Не хранить** в **монорепозитории кода** — там ему не место (чужой репозиторий, другая политика коммитов).
|
||||
- **Хранить** в **репозитории результатов Capital**, рядом с метаданными c9s и спринтами: личный журнал оператора для **ручной** подачи коммитов в кооператив как результатов интеллектуальной деятельности (автоматизация учёта возможна позже).
|
||||
- **Разрешённые места** (по приоритету):
|
||||
1. Путь из **`results_commits_log`** в `c9s-config.yaml` — относительно корня активного проекта (`{results_root}/{active_project_slug}`) или **абсолютный** путь, если так удобнее.
|
||||
2. Если поле не задано: **`{projectRoot}/.c9s/results_commits.yaml`**.
|
||||
3. Допустимо вести отдельный файл на уровне вложенного компонента, например **`{componentRoot}/.c9s/results_commits.yaml`**, если журнал разнесён по компонентам — тогда явно задайте **`results_commits_log`** (например `components/my-api/.c9s/results_commits.yaml`).
|
||||
- Назначение записей: связь **компонент ↔ хэш merge в `dev`** монорепо + **кто** зафиксировал (**`username`**) + **что** смерджено (**`merge_title`**) + дата (**`recorded_at_utc`**) — чтобы в общем репозитории результатов строки журнала оставались различимыми по людям и смыслу.
|
||||
- **Новые записи** — **в начало** массива `commits`.
|
||||
- Поля записи: `status` (`pending` до взноса, `contributed` после ручной отметки), **`username`** (из `c9s-config.yaml` → `username`, иначе уточнить у оператора), **`merge_title`** (краткое человекочитаемое описание содержания merge; по умолчанию первая строка merge-коммита, например `git log -1 --format=%s` на `dev` после merge), `component`, `merge_commit_hash`, `recorded_at_utc`, опционально `note`.
|
||||
- После добавления записи агент **фиксирует** изменение в git **репозитория результатов** (commit + push), чтобы журнал версионировался вместе с артефактами.
|
||||
- Шаблон: [templates/results_commits.template.yaml](../templates/results_commits.template.yaml).
|
||||
|
||||
### 2.5. Дублирование в конфиг (опционально)
|
||||
|
||||
В `c9s-config.yaml` хранят `monorepo_root`, `active_component_git_slug`, опционально **`last_merge_to_dev_commit_hash`** — см. шаблон. **Канонический журнал** merge → `dev` для взносов — файл **`results_commits.yaml`** по правилам §2.4; поле в конфиге — дубль для удобства, не замена файла.
|
||||
|
||||
---
|
||||
|
||||
## 3. Сводка
|
||||
|
||||
| Репозиторий | Коммиты / push | Скилл |
|
||||
|-------------|----------------|--------|
|
||||
| Результаты Capital | **Авто** commit+push агентом после правок; опционально явный шаг — `c9s-results-push` | `c9s-results-push` (доп.) |
|
||||
| Монорепо кода | Только ветка `component/...` от `dev`; merge в `dev` по команде; хэш в `results_commits.yaml` **в results** (`.c9s/` проекта, см. §2.4) | `c9s-monorepo-component-git` |
|
||||
|
||||
Остальные скиллы bmad-c9s **не отменяют** эту политику.
|
||||
@@ -0,0 +1,81 @@
|
||||
# Задачи, документы и учёт времени (bmad-c9s)
|
||||
|
||||
Дополняет [FORMAT-CAPITAL-GITHUB.md](FORMAT-CAPITAL-GITHUB.md) и [GIT-COMMITS-POLICY.md](GIT-COMMITS-POLICY.md). Правила **обязательны** для агентов bmad-c9s.
|
||||
|
||||
---
|
||||
|
||||
## 1. Любой продуктовый документ — только через задачу (issue)
|
||||
|
||||
**Строго:** нельзя «тихо» вести крупный артефакт только в **`requirements/*.md`** или в чате, **не оформив** под это **задачу** **`issues/{slug}.md`**.
|
||||
|
||||
Подпадает, в частности:
|
||||
|
||||
- PRD, техспека, архитектурный документ (текст или диаграммы в story);
|
||||
- бриф, исследование, гипотезы, мозговой штурм (если оформляются как отдельный смысловой шаг);
|
||||
- пакет UX (сценарии, CJM, чек-листы уровня продукта);
|
||||
- любой **аналогичный** шаг: сначала явная **задача**, в теле — цель, критерии, ссылки; затем правки **`requirements/*.md`** (story) как результат работы по задаче.
|
||||
|
||||
**Поток (старт и работа):**
|
||||
|
||||
1. В **момент начала** работы над таким шагом — создать **`issues/*.md`** с понятным **`title`** (русский), **`hash`**, **`project_hash`**, **`estimate: 0`** (если не оговорено иное), статус **`in_progress`** (или **`todo`** / **`backlog`**, если в очереди; при активной работе — **`in_progress`**). В frontmatter **обязательно** задать учётные поля для Capital (все три — один и тот же **`username`** из **`c9s-config.yaml`**, если команда не оговорила иное): **`created_by`**, **`submaster`**, **`creators: [<username>]`** (непустой массив в одну строку, см. [FORMAT §6.2](FORMAT-CAPITAL-GITHUB.md)). **Без этих полей учёт времени не запускается.**
|
||||
2. **Сразу** закоммитить и **запушить** в репозиторий результатов (см. GIT-COMMITS-POLICY) — чтобы задача попала в систему и мог **начаться** учёт времени.
|
||||
3. Вести содержание документа в **`requirements/*.md`** по канону; в теле задачи — ссылки на соответствующие story, критерии, ход работы. После значимых правок — commit/push по политике Git.
|
||||
|
||||
**Поток (завершение с точки зрения агента):** по окончании **своей** итерации агент **не** считает задачу принятой оператором. Статус **`on_review`** агент **не выставляет сам** — см. §2.
|
||||
|
||||
Исключения из правила «сначала задача» — **только** по **явному** указанию пользователя (краткая правка, черновик вне процесса и т.п.).
|
||||
|
||||
---
|
||||
|
||||
## 2. Оператор и передача в ревью (`on_review`) — только явная команда
|
||||
|
||||
**Смысл:** факт, что агент закончил черновик (PRD, код под задачу, архитектуру и т.д.), **не означает**, что **оператор** (владелец процесса) принял результат. PRD нужно **прочитать и при необходимости поправить** (возможно несколько итераций с агентом при **`in_progress`**). То же для **технических** задач: пока оператор не проверил — задача **не** «выполнена» для цепочки до мастера.
|
||||
|
||||
**Правила:**
|
||||
|
||||
1. Агент **запрещено** переводить задачу в **`on_review` автоматически** по факту «я закончил работу».
|
||||
2. Перевод в **`on_review`** выполняется **только** когда **оператор** явно даёт команду (например: «отправь задачу на ревью мастеру», **`/c9s-submit-for-review`**, «переведи issue X в on_review»). В этот момент агент (по скиллу [c9s-submit-for-review](../skills/core/c9s-submit-for-review/SKILL.md) или явной инструкции) выставляет **`status: on_review`**, обновляет **`updated_at`**, делает **commit + push** в репозиторий результатов.
|
||||
3. До этой команды задача остаётся в **`in_progress`** (или **`todo`**, если работа приостановлена) — даже если артефакты уже лежат в `requirements/` или код сдан в ветку.
|
||||
4. Мастер проекта (может совпадать с оператором или нет) далее работает со статусом **`on_review` → `done`** через **`c9s-master-review`**, как прежде.
|
||||
|
||||
**Учёт времени:** граница «остановки» таймера на стороне системы привязана к переходу в **`on_review`** — поэтому этот переход должен совпадать с **осознанным решением оператора**, а не с окончанием генерации агента.
|
||||
|
||||
---
|
||||
|
||||
## 3. Поле `estimate` и фактическое время
|
||||
|
||||
- Во **всех** новых и правимых задачах **`issues/*.md`** выставляй **`estimate: 0`**, **если пользователь явно не задал другое значение**.
|
||||
- **Фактическое** время система считает по жизненному циклу задачи (от появления в репозитории после push до **`on_review`** по команде оператора — детали на стороне Capital/UI).
|
||||
- Не использовать произвольные большие **`estimate`** без запроса пользователя.
|
||||
|
||||
---
|
||||
|
||||
## 4. Статусы (напоминание)
|
||||
|
||||
| Этап | Кто / когда |
|
||||
|------|-------------|
|
||||
| Старт работы | Задача создана, **`in_progress`** (или `todo`), **commit + push** — агент |
|
||||
| Итерации | Правки story/issue/кода при **`in_progress`**, commit/push по политике |
|
||||
| Готово с точки зрения оператора | **`on_review`** + **`updated_at`** + commit/push — **только по явной команде оператора** ([c9s-submit-for-review](../skills/core/c9s-submit-for-review/SKILL.md)) |
|
||||
| Принято мастером | **`done`** — только **`c9s-master-review`** |
|
||||
|
||||
Поле в Capital: **`on_review`**.
|
||||
|
||||
---
|
||||
|
||||
## 5. Связь с story в `requirements/`
|
||||
|
||||
- **Story** — носитель **текста** PRD/архитектуры/UX и т.д.
|
||||
- **Issue** — носитель **процесса**; без issue такой шаг **не начинать** (см. §1).
|
||||
|
||||
---
|
||||
|
||||
## 6. Сводка
|
||||
|
||||
| Тема | Правило |
|
||||
|------|---------|
|
||||
| PRD / архитектура / бриф / и т.п. | Сначала **`issues/*.md`**, потом работа и **`requirements/*.md`** |
|
||||
| `estimate` | **`0`**, пока пользователь явно не указал иное |
|
||||
| Старт учёта | Push задачи при старте работы; в issue — **`created_by`**, **`submaster`**, **`creators`** = `username` из конфига |
|
||||
| **`on_review`** | **Только** по команде оператора + commit/push |
|
||||
| Git results | [GIT-COMMITS-POLICY.md](GIT-COMMITS-POLICY.md) §1 |
|
||||
@@ -0,0 +1,39 @@
|
||||
---
|
||||
name: c9s-bmb-builder
|
||||
description: |
|
||||
Конструктор расширений bmad-c9s: новые скиллы, шаблоны, команды под Coopenomics. Русский язык.
|
||||
Новые артефакты — в bmad-c9s/, не в канон Capital без явного запроса.
|
||||
allowed-tools: Read, Write, Edit, Glob, Grep, TodoWrite
|
||||
---
|
||||
|
||||
# Builder (bmad-c9s)
|
||||
|
||||
**Назначение:** расширять пакет **bmad-c9s** — скиллы, шаблоны, команды.
|
||||
|
||||
**Источник:** `bmad-v6/skills/bmb/builder/SKILL.md`, `bmad-skills/builder/` при наличии.
|
||||
|
||||
---
|
||||
|
||||
## Правила
|
||||
|
||||
1. Новый скилл: каталог `bmad-c9s/skills/.../SKILL.md` с YAML frontmatter (`name`, `description`, `allowed-tools`).
|
||||
2. Текст **на русском**, если не оговорено иное.
|
||||
3. Каждый скилл bmad-c9s, работающий с Capital, **должен ссылаться** на [FORMAT-CAPITAL-GITHUB.md](../../../docs/FORMAT-CAPITAL-GITHUB.md).
|
||||
4. Скиллы, которые создают или правят **`issues/*.md`**, дополнительно ссылаются на [TASKS-DOCUMENTS-TIME-POLICY.md](../../../docs/TASKS-DOCUMENTS-TIME-POLICY.md) **§1–2**: сначала issue, затем story в **`requirements/`**; поля **`created_by`**, **`submaster`**, **`creators`**; **`on_review`** только по команде оператора (**`c9s-submit-for-review`**).
|
||||
5. Не дублировать полные главы из v6 — дай ссылку на `bmad-v6/`.
|
||||
|
||||
---
|
||||
|
||||
## Структура SKILL.md (напоминание)
|
||||
|
||||
- Триггеры в `description`.
|
||||
- Роль, фаза, запреты (например **не done**).
|
||||
- Таблица выходов и путей.
|
||||
- «Заметки для LLM».
|
||||
|
||||
---
|
||||
|
||||
## Заметки для LLM
|
||||
|
||||
- Перед добавлением команды проверь, нет ли дубля в `bmad-c9s/commands/`.
|
||||
- Шаблоны frontmatter для issue/story — совместимость с парсером controller и с [issue.template.md](../../../templates/issue.template.md) / **TASKS §1** (три поля учёта в новых задачах).
|
||||
@@ -0,0 +1,57 @@
|
||||
---
|
||||
name: c9s-bmm-analyst
|
||||
description: |
|
||||
Аналитик bmad-c9s (фаза 1): открытие проблемы, бриф, исследование. Всё содержание — как story (MARKDOWN)
|
||||
в requirements/*.md; при необходимости обновляет project.md/component.md. Русский язык. Не ставит done задачам.
|
||||
allowed-tools: Read, Write, Edit, Glob, Grep, TodoWrite
|
||||
---
|
||||
|
||||
# Аналитик (bmad-c9s)
|
||||
|
||||
**Фаза:** 1 — Анализ.
|
||||
|
||||
**Источник методологии:** `bmad-v6/skills/bmm/analyst/SKILL.md` (англ., детали).
|
||||
|
||||
---
|
||||
|
||||
## Документы
|
||||
|
||||
- Канон Capital: [FORMAT-CAPITAL-GITHUB.md](../../../docs/FORMAT-CAPITAL-GITHUB.md)
|
||||
- [TASKS-DOCUMENTS-TIME-POLICY.md](../../../docs/TASKS-DOCUMENTS-TIME-POLICY.md)
|
||||
- Пути: [helpers-ru.md](../../../utils/helpers-ru.md)
|
||||
|
||||
---
|
||||
|
||||
## Выходы
|
||||
|
||||
| Артефакт | Куда |
|
||||
|----------|------|
|
||||
| Бриф, интервью, исследование, гипотезы | **Сначала** **`issues/*.md`** на этот шаг (frontmatter: **`created_by`**, **`submaster`**, **`creators`** = `username` из конфига — иначе нет учёта времени, см. [TASKS §1](../../../docs/TASKS-DOCUMENTS-TIME-POLICY.md)), **затем** **`requirements/{slug}.md`** — `type: story`, **`content_format: MARKDOWN`**, обычно `status: pending` на время проработки |
|
||||
| Уточнение видения продукта | обновление тела **`project.md`** / **`component.md`** + **`updated_at`** |
|
||||
| Дополнительные срезы одной темы | отдельные story в **`requirements/`** (осмысленный slug), не папка `.c9s/` |
|
||||
|
||||
**`title`** в frontmatter каждого story — **только русский**, **чёткий понятный заголовок** ([FORMAT §2.2](../../../docs/FORMAT-CAPITAL-GITHUB.md)).
|
||||
|
||||
Декомпозицию **dev-задач на код** не задавать без PM/плана; **аналитические** задачи под бриф/исследование создаёшь **сам** в начале работы ([TASKS-DOCUMENTS-TIME-POLICY.md](../../../docs/TASKS-DOCUMENTS-TIME-POLICY.md)).
|
||||
|
||||
---
|
||||
|
||||
## Принципы
|
||||
|
||||
1. Сначала проблема и контекст, потом решение.
|
||||
2. Явно помечать предположения.
|
||||
3. Все важные договорённости — в файлы, не только в чат.
|
||||
|
||||
---
|
||||
|
||||
## Статусы задач
|
||||
|
||||
Аналитик может предлагать новые задачи в **`backlog`/`todo`**, но **не** переводит в **`done`** и **не** подменяет скилл **`c9s-master-review`** для **`on_review` → `done`**.
|
||||
|
||||
---
|
||||
|
||||
## Заметки для LLM
|
||||
|
||||
- TodoWrite для многошаговых сессий.
|
||||
- Перед записью в канон Capital — сверить frontmatter с FORMAT.
|
||||
- Для глубоких техник интервью см. оригинал analyst v6.
|
||||
@@ -0,0 +1,55 @@
|
||||
---
|
||||
name: c9s-bmm-architect
|
||||
description: |
|
||||
Архитектор bmad-c9s (фаза 3): границы систем, C4-уровни, NFR, контракты. Артефакты — story с MARKDOWN
|
||||
или диаграммы (MERMAID/BPMN/DRAWIO) в requirements. Русский язык. Не ставит done.
|
||||
allowed-tools: Read, Write, Edit, Glob, Grep, TodoWrite
|
||||
---
|
||||
|
||||
# Архитектор (bmad-c9s)
|
||||
|
||||
**Фаза:** 3 — Проектирование решения.
|
||||
|
||||
**Источник:** `bmad-v6/skills/bmm/architect/SKILL.md`, `commands/architecture.md`.
|
||||
|
||||
---
|
||||
|
||||
## Документы
|
||||
|
||||
- [FORMAT-CAPITAL-GITHUB.md](../../../docs/FORMAT-CAPITAL-GITHUB.md) — обязательно **`content_format`** для каждого нового story
|
||||
- [TASKS-DOCUMENTS-TIME-POLICY.md](../../../docs/TASKS-DOCUMENTS-TIME-POLICY.md)
|
||||
- [helpers-ru.md](../../../utils/helpers-ru.md)
|
||||
|
||||
---
|
||||
|
||||
## Выходы
|
||||
|
||||
| Содержание | Формат файла |
|
||||
|------------|----------------|
|
||||
| Текстовая архитектура, ADR | **Сначала** задача **`issues/*.md`** («Архитектура…») с полями учёта (**`created_by`**, **`submaster`**, **`creators`**, см. [TASKS §1](../../../docs/TASKS-DOCUMENTS-TIME-POLICY.md)), **затем** `requirements/*.md`, `type: story`, **`content_format: MARKDOWN`** |
|
||||
| Диаграммы компонентов / потоков | та же **задача** **`issues/*.md`** (поля учёта — [TASKS §1](../../../docs/TASKS-DOCUMENTS-TIME-POLICY.md)) или отдельная на срез, затем **`requirements/*.md`** с **`content_format: MERMAID`** / **DRAWIO** / **BPMN** |
|
||||
| Уточнение границ и рисков | новые или обновлённые **`issues/*.md`** (статус `todo`/`in_progress`) |
|
||||
|
||||
**`title`** у story в **`requirements/*.md`** — **только русский**, **чёткий заголовок** ([FORMAT §2.2](../../../docs/FORMAT-CAPITAL-GITHUB.md)).
|
||||
|
||||
Тело диаграмм — в markdown под frontmatter; для BPMN/DRAWIO — XML/текст согласно ожиданиям Capital (как на рабочем столе).
|
||||
|
||||
---
|
||||
|
||||
## Связь с кодом
|
||||
|
||||
**Исходный код** — только в **монорепозитории** Coopenomics; в `results` — описания и решения, не копии всего репозитория.
|
||||
|
||||
---
|
||||
|
||||
## Ограничения
|
||||
|
||||
- **Не** `done`, **не** финальное ревью мастера.
|
||||
- Не сериализуй blockchain-статус проекта через `project.md` — см. FORMAT.
|
||||
|
||||
---
|
||||
|
||||
## Заметки для LLM
|
||||
|
||||
- Одна тема — один или несколько связанных файлов с явными `hash`.
|
||||
- Обновляй **`updated_at`** при каждом сохранении.
|
||||
@@ -0,0 +1,62 @@
|
||||
---
|
||||
name: c9s-bmm-developer
|
||||
description: |
|
||||
Разработчик bmad-c9s (фаза 4): реализация по задаче в монорепозитории, тесты, заметки в issue/story.
|
||||
Русский язык. on_review не ставит сам — только оператор (c9s-submit-for-review). done — мастер.
|
||||
allowed-tools: Read, Write, Edit, Glob, Grep, TodoWrite, Task
|
||||
---
|
||||
|
||||
# Разработчик (bmad-c9s)
|
||||
|
||||
**Фаза:** 4 — Реализация.
|
||||
|
||||
**Источник:** `bmad-v6/skills/bmm/developer/SKILL.md`, `commands/dev-story.md`.
|
||||
|
||||
---
|
||||
|
||||
## Граница ответственности
|
||||
|
||||
| Где | Что |
|
||||
|-----|-----|
|
||||
| **Монорепозиторий** (`monocoop/`, и т.д.) | Код, тесты, конфиги, миграции |
|
||||
| **results** | Обновление **`issues/*.md`** (статус, дополнения в теле), **`updated_at`**; продуктовые **story** в **`requirements/`** — только если поручено отдельно |
|
||||
|
||||
---
|
||||
|
||||
## Документы
|
||||
|
||||
- [FORMAT-CAPITAL-GITHUB.md](../../../docs/FORMAT-CAPITAL-GITHUB.md)
|
||||
- [helpers-ru.md](../../../utils/helpers-ru.md)
|
||||
- [GIT-COMMITS-POLICY.md](../../../docs/GIT-COMMITS-POLICY.md)
|
||||
- Скиллы: [c9s-results-push](../../core/c9s-results-push/SKILL.md), [c9s-monorepo-component-git](../../core/c9s-monorepo-component-git/SKILL.md), [c9s-submit-for-review](../../core/c9s-submit-for-review/SKILL.md)
|
||||
|
||||
---
|
||||
|
||||
## Git (обязательно)
|
||||
|
||||
- **Репозиторий результатов:** после правок — **commit + push** по [GIT-COMMITS-POLICY.md](../../../docs/GIT-COMMITS-POLICY.md); скилл **`c9s-results-push`** — если пользователь просит отдельную операцию.
|
||||
- **Монорепозиторий кода:** **только** скилл **`c9s-monorepo-component-git`**: ветка **`component/<slug>-<work>`** от **`dev`**, без коммитов в **`dev`** до команды на merge; после merge — запись в **`results_commits.yaml`** в **репозитории результатов** (`.c9s/` проекта), не в монорепо.
|
||||
- **Задачи и время:** [TASKS-DOCUMENTS-TIME-POLICY.md](../../../docs/TASKS-DOCUMENTS-TIME-POLICY.md) — **`estimate: 0`**; **`on_review`** только по команде оператора (**`c9s-submit-for-review`**). После своей итерации оставляй **`in_progress`**, не ревью.
|
||||
|
||||
---
|
||||
|
||||
## Завершение работы по задаче
|
||||
|
||||
1. Код — в **ветке компонента** по политике выше; merge в `dev` — только по команде пользователя (скилл `c9s-monorepo-component-git`).
|
||||
2. В **results**: дописать в теле задачи, что сделано, ссылки на коммиты/MR; **`updated_at`** при правках; статус оставить **`in_progress`**, пока оператор не даст команду на ревью.
|
||||
3. **`on_review`** — **только** когда оператор явно попросил (**`c9s-submit-for-review`** / «отправь на ревью»); тогда же commit+push в results.
|
||||
4. **`done`** — только **`c9s-master-review`**.
|
||||
|
||||
---
|
||||
|
||||
## Ограничения
|
||||
|
||||
- Не выдумывать `hash` — для новых сущностей см. helpers. Если создаёшь **новую** **`issues/*.md`** — сразу заполни **`created_by`**, **`submaster`**, **`creators`** из **`c9s-config.yaml` → `username`** (как в [issue.template.md](../../../templates/issue.template.md)).
|
||||
- Не смешивать большие логи в чат — переносить в тело **`issues/*.md`** (задача = один промпт, контекст уже там). Фиксируемые продуктовые выводы уровня проекта — отдельным **story** в **`requirements/`**, не в `.c9s/`. Если создаёте story — **`title`** только **русский**, **чёткий заголовок** ([FORMAT §2.2](../../../docs/FORMAT-CAPITAL-GITHUB.md)).
|
||||
|
||||
---
|
||||
|
||||
## Заметки для LLM
|
||||
|
||||
- При большом объёме кода используй **Task** / субагентов с узким контекстом.
|
||||
- Соблюдай FSD и правила монорепы из AGENTS.md целевого компонента.
|
||||
@@ -0,0 +1,56 @@
|
||||
---
|
||||
name: c9s-bmm-pm
|
||||
description: |
|
||||
PM bmad-c9s (фаза 2): PRD, tech spec, приоритизация, декомпозиция в issues и requirements.
|
||||
PRD/техспека — story в requirements/; в .c9s/ только операционка при необходимости. Русский язык. Не ставит done.
|
||||
allowed-tools: Read, Write, Edit, Glob, Grep, TodoWrite
|
||||
---
|
||||
|
||||
# Product Manager (bmad-c9s)
|
||||
|
||||
**Фаза:** 2 — Планирование.
|
||||
|
||||
**Источник:** `bmad-v6/skills/bmm/pm/SKILL.md`, команды `prd.md`, `tech-spec.md`.
|
||||
|
||||
---
|
||||
|
||||
## Документы
|
||||
|
||||
- [FORMAT-CAPITAL-GITHUB.md](../../../docs/FORMAT-CAPITAL-GITHUB.md)
|
||||
- [TASKS-DOCUMENTS-TIME-POLICY.md](../../../docs/TASKS-DOCUMENTS-TIME-POLICY.md)
|
||||
- [helpers-ru.md](../../../utils/helpers-ru.md)
|
||||
- Шаблоны: [templates/](../../../templates/)
|
||||
|
||||
---
|
||||
|
||||
## Выходы
|
||||
|
||||
| Артефакт | Куда |
|
||||
|----------|------|
|
||||
| PRD / tech spec (любая стадия зрелости) | **Сначала** задача **`issues/*.md`** («Подготовить PRD…», «Техспека…»), **затем** **`requirements/*.md`** (story); без задачи шаг **не начинать** |
|
||||
| Эпики → задачи | **`issues/{slug}.md`** — **простая** декомпозиция: одна задача = один сеанс выполнения; в теле — промпт/вводные, краткое исследование, критерии, ссылки на **`requirements/*.md`** при необходимости; корректный `project_hash`, `hash`, **`created_by`**, **`submaster`**, **`creators`**, **`estimate: 0`** (если не оговорено иное), статус **`backlog`**/**`todo`**/**`in_progress`**, без **`id`** |
|
||||
| Критерии приёмки | **только** в теле **`issues/*.md`**, отдельные story «на задачу» не создавать |
|
||||
|
||||
У каждого story в **`requirements/*.md`** поле **`title`** — **только русский язык**, **чёткий понятный заголовок** (обязательно — [FORMAT §2.2](../../../docs/FORMAT-CAPITAL-GITHUB.md)).
|
||||
|
||||
Каждая **новая** **`issues/*.md`**: в frontmatter **обязательно** **`created_by`**, **`submaster`**, **`creators: [<username>]`** — тот же **`username`**, что в **`c9s-config.yaml`** (иначе учёт времени в Capital не пойдёт). Плюс **`updated_at`**, **`status`**, **`priority`**, **`estimate: 0`** по умолчанию. Старт задачи — **commit + push**. **`on_review`** — **только** по команде оператора ([TASKS-DOCUMENTS-TIME-POLICY.md](../../../docs/TASKS-DOCUMENTS-TIME-POLICY.md) §2, [c9s-submit-for-review](../../core/c9s-submit-for-review/SKILL.md)).
|
||||
|
||||
---
|
||||
|
||||
## Приоритизация
|
||||
|
||||
Используй MoSCoW / RICE / Kano словами в документе; таблицы — в markdown **story** в **`requirements/`** (или в теле **`issues/`**, где уместно).
|
||||
|
||||
---
|
||||
|
||||
## Ограничения
|
||||
|
||||
- **Не** `done`, **не** `c9s-master-review`.
|
||||
- Не клади PRD целиком в одну задачу — PRD в **`requirements/`**; задачи — короткие, с отсылками при необходимости.
|
||||
|
||||
---
|
||||
|
||||
## Заметки для LLM
|
||||
|
||||
- Сверяйся с `project.md` для `coopname`, `hash` проекта.
|
||||
- Для длинных сценариев PRD см. `bmad-v6/commands/prd.md`.
|
||||
@@ -0,0 +1,46 @@
|
||||
---
|
||||
name: c9s-bmm-scrum-master
|
||||
description: |
|
||||
Scrum Master bmad-c9s (фаза 4): планирование спринта, уточнение issues, оценки, зависимости.
|
||||
Русский язык. Не переводит задачи в done.
|
||||
allowed-tools: Read, Write, Edit, Glob, Grep, TodoWrite
|
||||
---
|
||||
|
||||
# Scrum Master (bmad-c9s)
|
||||
|
||||
**Фаза:** 4 — Поставка итерациями.
|
||||
|
||||
**Источник:** `bmad-v6/skills/bmm/scrum-master/SKILL.md`, `commands/sprint-planning.md`, `create-story.md`.
|
||||
|
||||
---
|
||||
|
||||
## Документы
|
||||
|
||||
- [FORMAT-CAPITAL-GITHUB.md](../../../docs/FORMAT-CAPITAL-GITHUB.md)
|
||||
- [TASKS-DOCUMENTS-TIME-POLICY.md](../../../docs/TASKS-DOCUMENTS-TIME-POLICY.md)
|
||||
- [helpers-ru.md](../../../utils/helpers-ru.md)
|
||||
- Шаблон: [templates/sprint-status.c9s.template.yaml](../../../templates/sprint-status.c9s.template.yaml) → копировать в **`.c9s/sprint-status.yaml`**
|
||||
|
||||
---
|
||||
|
||||
## Выходы
|
||||
|
||||
| Действие | Где |
|
||||
|----------|-----|
|
||||
| Состав спринта, цели | **`.c9s/sprint-status.yaml`**; при необходимости сопроводительный **story** в **`requirements/sprint-goal-{slug}.md`** |
|
||||
| Уточнение состава спринта / формулировок задач | правки **тел** **`issues/*.md`** и при необходимости продуктовых **`requirements/*.md`** |
|
||||
| Готовность к разработке | задачи в **`in_progress`/`todo`** с **`estimate: 0`** (если не оговорено иное), **`updated_at`**; при создании/правке issue не снимать **`created_by`**, **`submaster`**, **`creators`** — три поля нужны для учёта времени (см. [TASKS-DOCUMENTS-TIME-POLICY §1](../../../docs/TASKS-DOCUMENTS-TIME-POLICY.md)) |
|
||||
|
||||
---
|
||||
|
||||
## Статусы
|
||||
|
||||
- Разрешено: `backlog` → `todo` → `in_progress`. **`on_review`** в bmad-c9s — **только** по **явной команде оператора** ([c9s-submit-for-review](../../core/c9s-submit-for-review/SKILL.md)), не «по готовности агента».
|
||||
- **Запрещено:** **`done`** без скилла **`c9s-master-review`**.
|
||||
|
||||
---
|
||||
|
||||
## Заметки для LLM
|
||||
|
||||
- Не дублировать весь бэклог в чат — держать в файлах.
|
||||
- Детальные игры планирования см. v6 `sprint-planning.md`.
|
||||
@@ -0,0 +1,55 @@
|
||||
---
|
||||
name: c9s-bmm-ux-designer
|
||||
description: |
|
||||
UX-дизайнер bmad-c9s (фазы 2–3): сценарии, потоки, доступность. Артефакты — story (MARKDOWN/MERMAID)
|
||||
в requirements/*.md. Русский язык.
|
||||
allowed-tools: Read, Write, Edit, Glob, Grep, TodoWrite
|
||||
---
|
||||
|
||||
# UX Designer (bmad-c9s)
|
||||
|
||||
**Фазы:** 2–3 (планирование и проектирование опыта).
|
||||
|
||||
**Источник:** `bmad-v6/skills/bmm/ux-designer/SKILL.md`, `commands/create-ux-design.md`.
|
||||
|
||||
---
|
||||
|
||||
## Документы
|
||||
|
||||
- [FORMAT-CAPITAL-GITHUB.md](../../../docs/FORMAT-CAPITAL-GITHUB.md)
|
||||
- [TASKS-DOCUMENTS-TIME-POLICY.md](../../../docs/TASKS-DOCUMENTS-TIME-POLICY.md)
|
||||
- [helpers-ru.md](../../../utils/helpers-ru.md)
|
||||
|
||||
---
|
||||
|
||||
## Выходы
|
||||
|
||||
| Артефакт | Рекомендуемое размещение |
|
||||
|----------|---------------------------|
|
||||
| Персоны, сценарии, CJM (текст) | **Сначала** **`issues/*.md`** (поля **`created_by`**, **`submaster`**, **`creators`** — [TASKS §1](../../../docs/TASKS-DOCUMENTS-TIME-POLICY.md)), затем **`requirements/ux-*.md`**, **`content_format: MARKDOWN`** |
|
||||
| Потоки (diagram) | **`content_format: MERMAID`** в **`requirements/ux-flow-*.md`** (story) |
|
||||
| Чек-листы WCAG, токены | отдельные **`requirements/ux-*.md`** (story, MARKDOWN) |
|
||||
|
||||
**`title`** у каждого story — **только русский**, **чёткий понятный заголовок**; имя файла — транслит от этого заголовка ([FORMAT §2.2](../../../docs/FORMAT-CAPITAL-GITHUB.md)).
|
||||
|
||||
Изображения-мокапы: бинарные файлы **не синхронизируются** в Capital как story/issue; хранить вне `results` или в артефактах команды (Figma, репозиторий дизайна), в markdown — ссылки.
|
||||
|
||||
---
|
||||
|
||||
## Связь с задачами
|
||||
|
||||
Критерии приёмки UX для **конкретной** задачи — **в теле** соответствующего **`issues/*.md`**. Продуктовые UX-артефакты — в **`requirements/ux-*.md`**.
|
||||
|
||||
---
|
||||
|
||||
## Ограничения
|
||||
|
||||
- **Не** `done` для задач.
|
||||
- Любое изменение канонического `.md` — **`updated_at`**.
|
||||
|
||||
---
|
||||
|
||||
## Заметки для LLM
|
||||
|
||||
- Ресурсы v6: `bmad-skills/ux-designer/resources/` (если установлен полный пакет bmad-skills).
|
||||
- Пиши кратко для разработчика: что измеримо и как проверить.
|
||||
@@ -0,0 +1,50 @@
|
||||
---
|
||||
name: c9s-creative-intelligence
|
||||
description: |
|
||||
Креативное мышление bmad-c9s: SWOT, SCAMPER, исследовательские вопросы. Результаты — story MARKDOWN
|
||||
в requirements/*.md. Русский язык. Не меняет статусы задач на done.
|
||||
allowed-tools: Read, Write, Edit, Glob, Grep, TodoWrite
|
||||
---
|
||||
|
||||
# Creative Intelligence (bmad-c9s)
|
||||
|
||||
**Фаза:** 1 (и ретроспективы в 4 по запросу).
|
||||
|
||||
**Источник:** `bmad-v6/skills/cis/creative-intelligence/SKILL.md`.
|
||||
|
||||
---
|
||||
|
||||
## Документы
|
||||
|
||||
- [FORMAT-CAPITAL-GITHUB.md](../../../docs/FORMAT-CAPITAL-GITHUB.md)
|
||||
- [TASKS-DOCUMENTS-TIME-POLICY.md](../../../docs/TASKS-DOCUMENTS-TIME-POLICY.md)
|
||||
- [helpers-ru.md](../../../utils/helpers-ru.md)
|
||||
|
||||
---
|
||||
|
||||
## Выходы
|
||||
|
||||
| Сессия | Куда писать |
|
||||
|--------|-------------|
|
||||
| Мозговой штурм, SWOT, варианты решений | **Сначала** **`issues/*.md`** на сессию (например «Мозговой штурм по …») с полями **`created_by`**, **`submaster`**, **`creators`** ([TASKS §1](../../../docs/TASKS-DOCUMENTS-TIME-POLICY.md)), **затем** **`requirements/…md`** — `type: story`, **`content_format: MARKDOWN`** |
|
||||
| Отобранные идеи как отдельные требования | при необходимости отдельная **задача** (те же поля учёта) + **`requirements/idea-*.md`** |
|
||||
|
||||
Не начинать оформленную сессию **только** story без **issue** — см. [TASKS-DOCUMENTS-TIME-POLICY.md](../../../docs/TASKS-DOCUMENTS-TIME-POLICY.md).
|
||||
|
||||
**`title`** у каждого story — **только русский**, **чёткий заголовок**; имя файла — транслит от заголовка ([FORMAT §2.2](../../../docs/FORMAT-CAPITAL-GITHUB.md)), а не голые префиксы `brainstorm-`/`idea-` без смысла в **`title`**.
|
||||
|
||||
---
|
||||
|
||||
## Методы (кратко)
|
||||
|
||||
- **SCAMPER** — по пунктам в markdown-списках.
|
||||
- **SWOT** — четыре квадранта заголовками `##`.
|
||||
- **Six Thinking Hats** — роли по подзаголовкам.
|
||||
|
||||
---
|
||||
|
||||
## Заметки для LLM
|
||||
|
||||
- **`on_review`** и **`done`** этим скиллом **не** выставлять; ревью — **`c9s-submit-for-review`** (оператор), завершение — **`c9s-master-review`**.
|
||||
- Избегай «воды»; каждая идея — проверяемое утверждение или вопрос.
|
||||
- Скрипты из v6 (`scamper-prompts.sh` и т.д.) — опционально, если пользователь установил bmad-skills.
|
||||
@@ -0,0 +1,95 @@
|
||||
---
|
||||
name: bmad-master-c9s
|
||||
description: |
|
||||
Оркестратор BMAD-c9s для Coopenomics: русский язык, репозиторий results, маршрутизация по фазам,
|
||||
инициализация .c9s/, запрет хранить итоги только в чате. Активируй при /c9s-status, /c9s-init,
|
||||
«статус bmad», «с чего начать coopenomics results», настройке пакета bmad-c9s.
|
||||
allowed-tools: Read, Write, Edit, Bash, Glob, Grep, TodoWrite
|
||||
---
|
||||
|
||||
# BMAD Master c9s
|
||||
|
||||
**Роль:** точка входа в методологию **bmad-c9s** (адаптация BMAD v6 под Capital/GitHub и русский язык).
|
||||
|
||||
**Не делать:** создавать **новый корневой проект Capital** из скилла — корневой проект и репозиторий результатов задаёт пользователь. Скилл **инициализирует только** операционные файлы **`.c9s/`** и помогает с конфигом.
|
||||
|
||||
---
|
||||
|
||||
## Обязательные ссылки
|
||||
|
||||
- [CLAUDE.md](../../../CLAUDE.md) — обзор пакета
|
||||
- [docs/FORMAT-CAPITAL-GITHUB.md](../../../docs/FORMAT-CAPITAL-GITHUB.md) — канон путей и frontmatter
|
||||
- [utils/helpers-ru.md](../../../utils/helpers-ru.md) — пути, `updated_at`, hash
|
||||
- [docs/GIT-COMMITS-POLICY.md](../../../docs/GIT-COMMITS-POLICY.md) — commit/push results и монорепо
|
||||
- [docs/TASKS-DOCUMENTS-TIME-POLICY.md](../../../docs/TASKS-DOCUMENTS-TIME-POLICY.md) — задачи под документы, `estimate`, `on_review` только по команде оператора
|
||||
- Эталон v6 (англ.): `bmad-v6/skills/core/bmad-master/SKILL.md`
|
||||
|
||||
---
|
||||
|
||||
## Жёсткие правила
|
||||
|
||||
1. Итоги в **`results_root`** — только файлы `.md` в разрешённых путях (project/issue/story).
|
||||
2. Продуктовый уровень (бриф, PRD, исследование, техспека, UX) — **story** в **`{base}/requirements/*.md`**. Контекст **конкретной** dev-задачи — **в теле** **`{base}/issues/*.md`** (без подпапок `*-requirements/`). В **`{base}/.c9s/`** — лишь **операционка** (например `workflow-status.yaml`, `sprint-status.yaml`).
|
||||
3. Обычные роли **не** ставят задаче статус **`done`**. **`on_review`** — **только** по **явной команде оператора** ([c9s-submit-for-review](../c9s-submit-for-review/SKILL.md)); агент **не** переводит в ревью автоматически после своей работы.
|
||||
4. Каждое изменение канонического файла — **новый `updated_at`** (см. FORMAT).
|
||||
5. У **story** в **`requirements/*.md`** поле **`title`** — **только русский**, формулировка **чёткая и понятная** (см. [CLAUDE.md](../../../CLAUDE.md), [FORMAT §2.2](../../../docs/FORMAT-CAPITAL-GITHUB.md)).
|
||||
6. **Репозиторий результатов:** после правок канонических файлов — **`git commit`** и **`git push`** (сообщения на русском), см. [GIT-COMMITS-POLICY.md](../../../docs/GIT-COMMITS-POLICY.md) §1. Скилл [c9s-results-push](../c9s-results-push/SKILL.md) — только для **явной** отдельной команды пользователя.
|
||||
7. **Монорепозиторий кода:** не нарушать [c9s-monorepo-component-git](../c9s-monorepo-component-git/SKILL.md) — только ветки **`component/…`** от **`dev`**, merge по команде; журнал merge — **`results_commits.yaml` в репозитории результатов** (`.c9s/`), не в монорепо.
|
||||
8. **Документы (PRD, архитектура, бриф, …):** сначала **`issues/*.md`**, затем **`requirements/*.md`** — [TASKS-DOCUMENTS-TIME-POLICY.md](../../../docs/TASKS-DOCUMENTS-TIME-POLICY.md).
|
||||
9. **Задачи:** **`estimate: 0`** по умолчанию; в каждой новой **`issues/*.md`** — **`created_by`**, **`submaster`**, **`creators`** = **`username`** из **`c9s-config.yaml`** (без этого учёт времени в Capital не работает); старт — задача + push; **`on_review`** — только по команде оператора + push ([c9s-submit-for-review](../c9s-submit-for-review/SKILL.md)).
|
||||
|
||||
---
|
||||
|
||||
## /c9s-init (или «инициализируй bmad-c9s»)
|
||||
|
||||
1. Прочитать или предложить создать `c9s-config.yaml` из [config/c9s-config.template.yaml](../../../config/c9s-config.template.yaml).
|
||||
2. Разрешить `base` по [helpers-ru.md](../../../utils/helpers-ru.md#Разрешение-корня-активного-проекта-capital).
|
||||
3. Создать при отсутствии:
|
||||
- `{base}/.c9s/workflow-status.yaml` — из шаблона [templates/bmm-workflow-status.c9s.template.yaml](../../../templates/bmm-workflow-status.c9s.template.yaml) (заполнить метаданные).
|
||||
- `{base}/requirements/` — пустой каталог, если ещё нет (сюда пойдут все story: брифы, PRD и т.д.).
|
||||
- опционально `{base}/.c9s/README.txt` — одна строка: артефакты bmad-c9s — в `requirements/`, в `.c9s/` только YAML.
|
||||
4. Кратко сообщить пользователю следующий шаг по фазе (см. таблицу ниже).
|
||||
|
||||
**Не создавать** `project.md`, если пользователь явно не просит задокументировать новый корень — это граница Capital.
|
||||
|
||||
---
|
||||
|
||||
## /c9s-status
|
||||
|
||||
1. Загрузить `c9s-config.yaml` и `project.md` (и `component.md`, если есть компонент).
|
||||
2. Прочитать `.c9s/workflow-status.yaml`, если есть.
|
||||
3. Вывести: активный `results_root`, slug проекта, фаза, что сделано / что дальше.
|
||||
4. Рекомендовать **конкретный скилл** (analyst, pm, architect, …).
|
||||
|
||||
---
|
||||
|
||||
## Маршрутизация по фазам
|
||||
|
||||
| Фаза | Скилл | Триггеры |
|
||||
|------|--------|----------|
|
||||
| 1 Анализ | `c9s-bmm-analyst` | бриф, исследование, проблема |
|
||||
| 1 Идеи | `c9s-creative-intelligence` | мозговой штурм, SWOT |
|
||||
| 2 План | `c9s-bmm-pm` | PRD, tech spec, приоритеты |
|
||||
| 2 UX | `c9s-bmm-ux-designer` | сценарии, доступность |
|
||||
| 3 Архитектура | `c9s-bmm-architect` | архитектура, границы сервисов |
|
||||
| 4 Спринт | `c9s-bmm-scrum-master` | истории, спринт |
|
||||
| 4 Код | `c9s-bmm-developer` | реализация в монорепе |
|
||||
| Мета | `c9s-bmb-builder` | новый скилл/шаблон |
|
||||
| Ревью задач | `c9s-master-review` | только мастер, on_review → done |
|
||||
| На ревью мастеру | `c9s-submit-for-review` | только по команде оператора → on_review + commit/push |
|
||||
| Push results (явный) | `c9s-results-push` | опционально; базово — авто commit/push по GIT-COMMITS-POLICY |
|
||||
| Git монорепо | `c9s-monorepo-component-git` | ветка компонента, merge в dev, хэш в results_commits.yaml (в results, .c9s/) |
|
||||
|
||||
---
|
||||
|
||||
## Подагенты
|
||||
|
||||
Для тяжёлых задач разбивай работу на параллельные подзадачи; продуктовый смысл — в **`requirements/*.md`**; каждая dev-задача — отдельный **`issues/*.md`** с полным телом на один сеанс выполнения. Не в чате и не в `.c9s/` (там только операционка).
|
||||
|
||||
---
|
||||
|
||||
## Заметки для LLM
|
||||
|
||||
- Используй **TodoWrite** для многошаговых сценариев.
|
||||
- При сомнении в пути — перечитай **FORMAT-CAPITAL-GITHUB.md**.
|
||||
- Не смешивай канон Capital: **story** уровня проекта — в `requirements/`; **задача** — один файл `issues/*.md` с полным описанием; **операционка BMAD** — в `.c9s/*.yaml`.
|
||||
@@ -0,0 +1,58 @@
|
||||
---
|
||||
name: c9s-master-review
|
||||
description: |
|
||||
Мастер ревью bmad-c9s: перевод задач Capital on_review → done (и при необходимости откат в in_progress),
|
||||
обновление updated_at в issue.md. Только эта роль завершает задачи. Активируй по запросу мастера,
|
||||
«прими ревью», «закрой задачу после ревью», on_review.
|
||||
allowed-tools: Read, Write, Edit, Glob, Grep, TodoWrite
|
||||
---
|
||||
|
||||
# c9s Master Review
|
||||
|
||||
**Роль:** единственная роль, которая может перевести задачу в статус **`done`** после ревью.
|
||||
|
||||
Задача попадает в **`on_review`** **до** мастера только после команды **оператора** ([c9s-submit-for-review](../c9s-submit-for-review/SKILL.md)); мастер работает с уже переданными в очередь ревью задачами.
|
||||
|
||||
**Ограничение:** скилл описывает **изменения в Git** (markdown). При импорте Capital может отказать в смене статуса из‑за **прав** (`validateIssueStatusPermission` и связанная логика в controller). Если импорт не прошёл — сообщи пользователю: проверить роль мастера проекта, логи контроллера, либо выполнить переход через рабочий стол Capital.
|
||||
|
||||
---
|
||||
|
||||
## Ссылки
|
||||
|
||||
- [FORMAT-CAPITAL-GITHUB.md](../../../docs/FORMAT-CAPITAL-GITHUB.md) — статусы, поля issue
|
||||
- [helpers-ru.md](../../../utils/helpers-ru.md) — пути к `issues/*.md`
|
||||
|
||||
---
|
||||
|
||||
## Алгоритм
|
||||
|
||||
1. Загрузить `c9s-config.yaml`, разрешить `base` (корень или компонент).
|
||||
2. Найти задачи в статусе **`on_review`**:
|
||||
- `grep` / поиск по `{base}/issues/*.md` и при необходимости вложенных путей компонентов.
|
||||
3. Для каждой выбранной задачи:
|
||||
- Прочитать **тело** задачи: вводные, критерии приёмки, ссылки на **`requirements/*.md`**; отдельных story-файлов «на задачу» нет.
|
||||
- Принять решение: **принять** → `done`, **доработка** → `in_progress` (краткий комментарий — в теле **`issues/*.md`**; при необходимости аудита как артефакта — отдельный **story** `requirements/review-summary-{slug}.md`).
|
||||
4. Обновить frontmatter:
|
||||
- `status: done` или `status: in_progress`
|
||||
- **`updated_at`** — новый ISO timestamp UTC (обязательно).
|
||||
5. Не изменять **`hash`** и **`project_hash`** без явной необходимости.
|
||||
|
||||
---
|
||||
|
||||
## Что не входит в скилл
|
||||
|
||||
- Смена статусов **проекта** blockchain-уровня — в `project.md` они не сериализуются текущим экспортом; используй UI/API Capital.
|
||||
- Ревью **кода** в монорепозитории — отдельный процесс (MR, `c9s-bmm-developer`).
|
||||
|
||||
---
|
||||
|
||||
## Предупреждение в ответе пользователю
|
||||
|
||||
Всегда кратко напоминай: *«Git-файл обновлён; синхронизация в БД произойдёт при следующем импорте; при ошибке прав статус в UI может не совпасть с файлом»*.
|
||||
|
||||
---
|
||||
|
||||
## Заметки для LLM
|
||||
|
||||
- Не ставь **`done`** в других скиллах — если пользователь просит, перенаправь на этот скилл или на человека-мастера.
|
||||
- Используй **TodoWrite**, если задач несколько.
|
||||
@@ -0,0 +1,107 @@
|
||||
---
|
||||
name: c9s-monorepo-component-git
|
||||
description: |
|
||||
Монорепозиторий кода: только ветки component/ от dev, коммиты только в них.
|
||||
По команде — merge в dev и запись в results_commits.yaml (SHA, username, merge_title, дата) в репозитории результатов (.c9s/ проекта, см. GIT-COMMITS-POLICY §2.4), не в монорепо.
|
||||
Прямые коммиты в dev и прочие ветки запрещены. Активируй при старте работы над компонентом
|
||||
или при «смерджи компонент в dev», «зафиксируй merge для взноса».
|
||||
allowed-tools: Read, Write, Edit, Bash, Glob, Grep, TodoWrite
|
||||
---
|
||||
|
||||
# Git монорепозитория: ветки компонентов и учёт merge (c9s-monorepo-component-git)
|
||||
|
||||
## Назначение
|
||||
|
||||
**Единственный** скилл, который задаёт **обязательные** правила `git` для **монорепозитория кода** (например Coopenomics `monocoop`).
|
||||
|
||||
### Жёсткие правила (без исключений)
|
||||
|
||||
1. **Запрещены** коммиты **напрямую в `dev`** и в **любую** ветку, кроме **ветки компонента** по соглашению ниже.
|
||||
2. **Разрешены** коммиты **только** в ветке вида **`component/<component_slug>-<work_slug>`**, созданной от **актуального `dev`**.
|
||||
3. **`component_slug`** — имя каталога компонента под `components/` (например `desktop`, `controller`), либо значение **`active_component_git_slug`** из `c9s-config.yaml`.
|
||||
4. **`work_slug`** — краткий slug от **русского или рабочего названия** задачи/результата (транслит, дефисы, нижний регистр); если одна долгая линия работы на компонент — допустимо **`component/<component_slug>`** без суффикса **только** если так согласовано с пользователем.
|
||||
5. **Merge в `dev`** — **только** по **явной команде** пользователя в конце работы (не по собственной инициативе агента).
|
||||
6. После успешного merge — записать в **`results_commits.yaml`** (путь по [GIT-COMMITS-POLICY §2.4](../../../docs/GIT-COMMITS-POLICY.md)) **полный SHA**, **`username`** и **`merge_title`** (первая строка merge-коммита), плюс остальные поля по шаблону. Новая запись — **в начало** `commits`. Затем **commit + push** в **git репозитория результатов** для этого файла. При необходимости обновить **`last_merge_to_dev_commit_hash`** в `c9s-config.yaml`.
|
||||
|
||||
Остальные скиллы (developer, bmad-master-c9s и т.д.) **не отменяют** эти правила.
|
||||
|
||||
---
|
||||
|
||||
## Обязательные ссылки
|
||||
|
||||
- [docs/GIT-COMMITS-POLICY.md](../../../docs/GIT-COMMITS-POLICY.md)
|
||||
- [templates/results_commits.template.yaml](../../../templates/results_commits.template.yaml)
|
||||
- [config/c9s-config.template.yaml](../../../config/c9s-config.template.yaml) — поля `monorepo_root`, `active_component_git_slug`, `results_commits_log`
|
||||
|
||||
---
|
||||
|
||||
## Сценарий A: начало работы над компонентом
|
||||
|
||||
1. Определить **`monorepo_root`** (корень git монорепозитория) — из `c9s-config.yaml` или путь от пользователя.
|
||||
2. **`git fetch`**.
|
||||
3. **`git checkout dev`** → **`git pull`** (или эквивалент обновления `dev`).
|
||||
4. Согласовать с пользователем **`component_slug`** и краткое **название работы** для **`work_slug`**.
|
||||
5. **`git checkout -b component/<component_slug>-<work_slug>`** от текущего `dev`.
|
||||
6. Дальнейшие коммиты **только** в этой ветке (осмысленные сообщения; по желанию команды — на русском).
|
||||
|
||||
Если ветка уже существует локально — можно `checkout` и продолжить, не нарушая запрет на коммиты в `dev`.
|
||||
|
||||
---
|
||||
|
||||
## Сценарий B: промежуточные коммиты
|
||||
|
||||
- Выполнять **`git add` / `git commit`** **только** на **ветке компонента**.
|
||||
- **Не** переключаться на `dev` для коммита правок.
|
||||
|
||||
---
|
||||
|
||||
## Сценарий C: завершение — merge в `dev` и учёт хэша
|
||||
|
||||
Только по команде пользователя («смерджи ветку компонента в dev», «зафиксируй merge для паевого взноса» и т.п.):
|
||||
|
||||
1. Убедиться, что нет незакоммиченных изменений (или закоммитить их **в ветке компонента**).
|
||||
2. **`git checkout dev`** → **`git pull`**.
|
||||
3. **`git merge`** ветку компонента (предпочтительно **`--no-ff`**, чтобы на `dev` появился **отдельный merge-коммит** — его SHA проще однозначно использовать для взноса; если политика команды — только FF, зафиксировать SHA того коммита, на который указывает `dev` после merge).
|
||||
4. Получить SHA и заголовок merge: **`git rev-parse HEAD`**; первая строка сообщения коммита — **`git log -1 --format=%s HEAD`** (для поля **`merge_title`** в журнале).
|
||||
5. **`git push origin dev`** — если пользователь просил отправить (и это разрешено политикой).
|
||||
|
||||
### Запись в `results_commits.yaml`
|
||||
|
||||
1. Прочитать `c9s-config.yaml`: **`results_root`**, **`active_project_slug`**, **`username`** (для записи в журнале), опционально **`active_component_path`**, **`results_commits_log`**. Если **`username`** пуст — **уточнить у оператора**, не подставлять выдуманное значение.
|
||||
2. Вычислить **`projectRoot`** = `{results_root}/{active_project_slug}`. Путь к журналу:
|
||||
- если задан **`results_commits_log`**: при абсолютном пути — как есть; иначе **`{projectRoot}/{results_commits_log}`**;
|
||||
- иначе **`{projectRoot}/.c9s/results_commits.yaml`**.
|
||||
3. Убедиться, что каталог (например `.c9s/`) существует; если файла нет — создать из [templates/results_commits.template.yaml](../../../templates/results_commits.template.yaml).
|
||||
4. Добавить **в начало** массива **`commits`** элемент:
|
||||
|
||||
```yaml
|
||||
- status: pending
|
||||
username: "<из c9s-config.yaml username>"
|
||||
merge_title: "<первая строка merge-коммита: git log -1 --format=%s; при необходимости кратко по-русски по смыслу>"
|
||||
component: "<component_slug>"
|
||||
merge_commit_hash: "<полный SHA>"
|
||||
recorded_at_utc: "<ISO 8601 Z>"
|
||||
note: ""
|
||||
```
|
||||
|
||||
- **`status: pending`** — пока оператор не отметит паевой взнос; затем вручную сменить на **`contributed`**.
|
||||
5. Сохранить YAML (существующие записи не удалять).
|
||||
6. В **корне git репозитория результатов** (`results_root` — корень клона): `git add` на путь к `results_commits.yaml` → `git commit` (кратко, по-русски: учёт merge компонента в dev) → `git push`, если удалённый репозиторий настроен.
|
||||
|
||||
### Опционально: `c9s-config.yaml`
|
||||
|
||||
Если есть **`last_merge_to_dev_commit_hash`** — обновить тем же SHA (дубль; канон — `results_commits.yaml`).
|
||||
|
||||
---
|
||||
|
||||
## Сценарий D: репозиторий результатов
|
||||
|
||||
- **Не использовать** этот скилл для `git` в **results_root** — только [c9s-results-push](../c9s-results-push/SKILL.md).
|
||||
|
||||
---
|
||||
|
||||
## Заметки для LLM
|
||||
|
||||
- При любой неоднозначности (имя ветки, FF vs merge commit) — **спросить пользователя**, не нарушая запрет на коммиты в `dev`.
|
||||
- Не выполнять `git push --force` на общие ветки без явного указания.
|
||||
- Путь к монорепо может отличаться от `results_root`; не путать каталоги.
|
||||
@@ -0,0 +1,47 @@
|
||||
---
|
||||
name: c9s-results-push
|
||||
description: |
|
||||
Репозиторий результатов Capital: базовый режим — агент сам commit/push после правок (GIT-COMMITS-POLICY).
|
||||
Этот скилл — для явной команды пользователя с особым сообщением коммита или повторного push.
|
||||
Монорепо кода не трогать — только c9s-monorepo-component-git.
|
||||
allowed-tools: Read, Write, Edit, Bash, Glob, Grep, TodoWrite
|
||||
---
|
||||
|
||||
# Push результатов в Git (c9s-results-push)
|
||||
|
||||
## Назначение
|
||||
|
||||
**По умолчанию** агент **уже** выполняет **`git commit`** и **`git push`** в репозитории результатов после значимых правок — см. [docs/GIT-COMMITS-POLICY.md](../../../docs/GIT-COMMITS-POLICY.md) §1.
|
||||
|
||||
Этот скилл нужен, когда пользователь **явно** просит:
|
||||
|
||||
- отдельный коммит с **заданным** текстом сообщения;
|
||||
- повторный **`git push`**;
|
||||
- «запушь results» / `c9s-push-results` как **отдельную** операцию.
|
||||
|
||||
**Не** использовать как оправдание **не** коммитить после обычной работы — автофиксация по политике обязательна.
|
||||
|
||||
---
|
||||
|
||||
## Обязательные ссылки
|
||||
|
||||
- [docs/GIT-COMMITS-POLICY.md](../../../docs/GIT-COMMITS-POLICY.md)
|
||||
- [docs/TASKS-DOCUMENTS-TIME-POLICY.md](../../../docs/TASKS-DOCUMENTS-TIME-POLICY.md)
|
||||
- [CLAUDE.md](../../../CLAUDE.md)
|
||||
- [helpers-ru.md](../../../utils/helpers-ru.md)
|
||||
|
||||
---
|
||||
|
||||
## Алгоритм (явный вызов)
|
||||
|
||||
1. Прочитать `c9s-config.yaml`, корень git-репозитория результатов (`results_root`).
|
||||
2. `git status` — показать изменения.
|
||||
3. Сообщение коммита: **русский**, по указанию пользователя или по смыслу изменений.
|
||||
4. `git add` → `git commit` → при необходимости `git push`.
|
||||
5. Без `force-push` на общие ветки без прямого указания пользователя.
|
||||
|
||||
---
|
||||
|
||||
## Запреты
|
||||
|
||||
- Не применять к **монорепозиторию кода** — только [c9s-monorepo-component-git](../c9s-monorepo-component-git/SKILL.md).
|
||||
@@ -0,0 +1,41 @@
|
||||
---
|
||||
name: c9s-submit-for-review
|
||||
description: |
|
||||
Перевод задачи Capital в on_review по ЯВНОЙ команде оператора (не автоматически после работы агента).
|
||||
Обновить updated_at, commit и push в репозиторий результатов. Триггеры: /c9s-submit-for-review,
|
||||
«отправь задачу на ревью», «переведи issue … в on_review».
|
||||
allowed-tools: Read, Write, Edit, Bash, Glob, Grep, TodoWrite
|
||||
---
|
||||
|
||||
# Передача задачи на ревью мастеру (c9s-submit-for-review)
|
||||
|
||||
## Назначение
|
||||
|
||||
Выполнять **только** после **явного** указания **оператора** (человека): он прочитал/проверил результат (PRD, правки, код в контексте задачи и т.д.) и **сознательно** готов передать задачу мастеру в очередь ревью.
|
||||
|
||||
**Запрещено:** переводить в **`on_review`** «потому что агент закончил черновик» — см. [docs/TASKS-DOCUMENTS-TIME-POLICY.md](../../../docs/TASKS-DOCUMENTS-TIME-POLICY.md) §2.
|
||||
|
||||
---
|
||||
|
||||
## Обязательные ссылки
|
||||
|
||||
- [TASKS-DOCUMENTS-TIME-POLICY.md](../../../docs/TASKS-DOCUMENTS-TIME-POLICY.md)
|
||||
- [FORMAT-CAPITAL-GITHUB.md](../../../docs/FORMAT-CAPITAL-GITHUB.md)
|
||||
- [GIT-COMMITS-POLICY.md](../../../docs/GIT-COMMITS-POLICY.md)
|
||||
|
||||
---
|
||||
|
||||
## Алгоритм
|
||||
|
||||
1. Убедиться, что пользователь **явно** попросил перевести **конкретную** задачу (или все перечисленные) в ревью.
|
||||
2. Найти **`{base}/issues/{slug}.md`**. Если нет **`created_by`**, **`submaster`** или пустой **`creators`** — предупредить оператора: учёт времени в Capital мог не работать; при согласии — добавить поля из **`c9s-config.yaml` → `username`** и только затем ревью. Выставить **`status: on_review`**, новый **`updated_at`** (ISO UTC).
|
||||
3. При необходимости кратко дополнить **тело** задачи (что сдано на ревью), без подмены решения мастера.
|
||||
4. **Commit + push** в репозиторий результатов (сообщение на русском, например: «Задача … передана на ревью»).
|
||||
5. **Не** ставить **`done`** — это **`c9s-master-review`**.
|
||||
|
||||
---
|
||||
|
||||
## Заметки для LLM
|
||||
|
||||
- Если пользователь не формулировал команду как «на ревью», а только «закончи задачу» — **уточнить**: оставить **`in_progress`** до проверки или уже **`on_review`**.
|
||||
- По умолчанию «закончи» = довести артефакт до состояния **`in_progress`**, **без** `on_review`, пока оператор не скажет иначе.
|
||||
@@ -0,0 +1,53 @@
|
||||
# BMAD-c9s — статус воркфлоу (хранить в {base}/.c9s/workflow-status.yaml)
|
||||
# Сгенерировано: {{TIMESTAMP}}
|
||||
# Проект: {{PROJECT_NAME}}
|
||||
|
||||
project_name: "{{PROJECT_NAME}}"
|
||||
project_type: "{{PROJECT_TYPE}}"
|
||||
project_level: {{PROJECT_LEVEL}}
|
||||
communication_language: "ru"
|
||||
output_language: "ru"
|
||||
last_updated: "{{TIMESTAMP}}"
|
||||
|
||||
# Статусы: required | optional | recommended | conditional | skipped | путь-к-файлу
|
||||
|
||||
workflow_status:
|
||||
- name: product-brief
|
||||
phase: 1
|
||||
status: "optional"
|
||||
description: "Продуктовый бриф"
|
||||
|
||||
- name: brainstorm-project
|
||||
phase: 1
|
||||
status: "optional"
|
||||
description: "Мозговой штурм"
|
||||
|
||||
- name: research
|
||||
phase: 1
|
||||
status: "optional"
|
||||
description: "Исследование рынка"
|
||||
|
||||
- name: prd
|
||||
phase: 2
|
||||
status: "{{PRD_STATUS}}"
|
||||
description: "PRD"
|
||||
|
||||
- name: tech-spec
|
||||
phase: 2
|
||||
status: "{{TECH_SPEC_STATUS}}"
|
||||
description: "Техническое задание"
|
||||
|
||||
- name: create-ux-design
|
||||
phase: 2
|
||||
status: "optional"
|
||||
description: "UX/UI"
|
||||
|
||||
- name: architecture
|
||||
phase: 3
|
||||
status: "{{ARCHITECTURE_STATUS}}"
|
||||
description: "Архитектура"
|
||||
|
||||
- name: solutioning-gate-check
|
||||
phase: 3
|
||||
status: "optional"
|
||||
description: "Проверка архитектуры"
|
||||
@@ -0,0 +1,26 @@
|
||||
---
|
||||
type: issue
|
||||
title: "{{TITLE}}"
|
||||
hash: "{{ISSUE_HASH}}"
|
||||
project_hash: "{{PROJECT_HASH}}"
|
||||
status: backlog
|
||||
priority: medium
|
||||
estimate: 0 # bmad-c9s: 0, пока оператор явно не задал иначе; фактическое время до on_review (on_review — только по команде оператора)
|
||||
created_by: "{{USERNAME}}"
|
||||
submaster: "{{USERNAME}}"
|
||||
creators: ["{{USERNAME}}"]
|
||||
labels: []
|
||||
sort_order: 0
|
||||
created_at: "{{ISO_TIMESTAMP}}"
|
||||
updated_at: "{{ISO_TIMESTAMP}}"
|
||||
---
|
||||
|
||||
## Описание
|
||||
|
||||
## Критерии приёмки
|
||||
|
||||
## Связи
|
||||
|
||||
- При необходимости ссылки на продуктовые **`requirements/*.md`** (пути от корня `base`). Всё для выполнения этой задачи — в разделах выше (одна dev-задача, один промпт).
|
||||
|
||||
**bmad-c9s:** подставь **`{{USERNAME}}`** из **`c9s-config.yaml` → `username`** во все три поля (`created_by`, `submaster`, `creators`) — иначе учёт времени в Capital не запустится. В **начале** работы — создать задачу и **push**. **`on_review`** агент **не ставит** сам: только после **явной команды оператора** (**`/c9s-submit-for-review`**, «отправь на ревью») — тогда **`on_review`**, **`updated_at`**, commit/push. До команды — **`in_progress`** (или **`todo`**). См. [docs/TASKS-DOCUMENTS-TIME-POLICY.md](../docs/TASKS-DOCUMENTS-TIME-POLICY.md) §1–2.
|
||||
@@ -0,0 +1,16 @@
|
||||
# Учёт merge-коммитов: ветка компонента → ветка dev (монорепозиторий кода).
|
||||
# Файл НЕ в монорепо кода. Хранить в репозитории результатов Capital, рядом с .c9s:
|
||||
# по умолчанию {projectRoot}/.c9s/results_commits.yaml или путь из results_commits_log в c9s-config.yaml.
|
||||
# Имя файла обычно: results_commits.yaml
|
||||
# Новые элементы добавляются в НАЧАЛО списка commits (первый = самый новый).
|
||||
#
|
||||
# status:
|
||||
# pending — merge зафиксирован, паевой взнос ещё не отмечен
|
||||
# contributed — вручную сменить после внесения взноса в кооператив
|
||||
#
|
||||
# merge_commit_hash — полный SHA коммита merge на dev (или эквивалент при FF — см. скилл c9s-monorepo-component-git)
|
||||
#
|
||||
# username — аккаунт оператора (из c9s-config.yaml username); в общем репозитории по нему видно, чья запись
|
||||
# merge_title — человекочитаемое краткое название содержания merge (обычно git log -1 --format=%s после merge на dev)
|
||||
|
||||
commits: []
|
||||
@@ -0,0 +1,14 @@
|
||||
# Спринт bmad-c9s — {base}/.c9s/sprint-status.yaml
|
||||
# Не синхронизируется с Capital как issue/story.
|
||||
|
||||
sprint_name: "{{SPRINT_NAME}}"
|
||||
start_date: "{{START_DATE}}"
|
||||
end_date: "{{END_DATE}}"
|
||||
last_updated: "{{TIMESTAMP}}"
|
||||
|
||||
goal: "{{SPRINT_GOAL}}"
|
||||
|
||||
# issue_hash или пути к issues/*.md для человекочитаемости
|
||||
committed_issues: []
|
||||
|
||||
notes: ""
|
||||
@@ -0,0 +1,22 @@
|
||||
---
|
||||
type: story
|
||||
title: "{{TITLE}}"
|
||||
hash: "{{STORY_HASH}}"
|
||||
content_format: MARKDOWN
|
||||
status: pending
|
||||
created_by: "{{USERNAME}}"
|
||||
sort_order: 0
|
||||
project_hash: "{{PROJECT_HASH}}"
|
||||
created_at: "{{ISO_TIMESTAMP}}"
|
||||
updated_at: "{{ISO_TIMESTAMP}}"
|
||||
---
|
||||
|
||||
Файл только под **`requirements/`** (продуктовый уровень). Для задач отдельные story не создавать — контекст выполнения в теле **`issues/*.md`**.
|
||||
|
||||
**`title` в frontmatter выше:** только **русский язык**, **чёткий понятный заголовок** (обязательное правило — см. `CLAUDE.md`, `docs/FORMAT-CAPITAL-GITHUB.md` §2.2).
|
||||
|
||||
## Контекст
|
||||
|
||||
## Критерии готовности
|
||||
|
||||
## Заметки
|
||||
@@ -0,0 +1,140 @@
|
||||
# Утилиты bmad-c9s (справка для агента)
|
||||
|
||||
Сокращённые инструкции без исполняемых скриптов: агент выполняет шаги через чтение/запись файлов.
|
||||
|
||||
Полная спецификация путей и полей: [../docs/FORMAT-CAPITAL-GITHUB.md](../docs/FORMAT-CAPITAL-GITHUB.md).
|
||||
|
||||
Git (results / монорепо): [../docs/GIT-COMMITS-POLICY.md](../docs/GIT-COMMITS-POLICY.md). Задачи, документы, `estimate`, `on_review`: [../docs/TASKS-DOCUMENTS-TIME-POLICY.md](../docs/TASKS-DOCUMENTS-TIME-POLICY.md).
|
||||
|
||||
---
|
||||
|
||||
## Загрузка конфигурации
|
||||
|
||||
1. Найти `c9s-config.yaml`:
|
||||
- сначала в **корне активного репозитория результатов** (рядом с `project.md` или корневой папкой проекта);
|
||||
- при отсутствии — путь из подсказки пользователя или из глобальных настроек.
|
||||
2. Прочитать YAML и извлечь:
|
||||
- `results_root` (обязательно)
|
||||
- `active_project_slug`
|
||||
- `coopname`, `username`
|
||||
- `active_component_path` (опционально)
|
||||
- `default_language`
|
||||
- опционально для git монорепо: `monorepo_root`, `active_component_git_slug`, `results_commits_log`, `last_merge_to_dev_commit_hash`
|
||||
|
||||
---
|
||||
|
||||
## Путь к `results_commits.yaml` (журнал merge → dev для взносов)
|
||||
|
||||
Файл **только** в **репозитории результатов**, не в монорепозитории кода.
|
||||
|
||||
1. `projectRoot = {results_root}/{active_project_slug}`.
|
||||
2. Если в конфиге задан **`results_commits_log`**: абсолютный путь — использовать как есть; иначе **`{projectRoot}/{results_commits_log}`**.
|
||||
3. Иначе: **`{projectRoot}/.c9s/results_commits.yaml`**.
|
||||
|
||||
См. [docs/GIT-COMMITS-POLICY.md](../docs/GIT-COMMITS-POLICY.md) §2.4.
|
||||
|
||||
---
|
||||
|
||||
## Разрешение корня активного проекта Capital
|
||||
|
||||
```
|
||||
projectRoot = {results_root}/{active_project_slug}
|
||||
```
|
||||
|
||||
Файл корневого проекта:
|
||||
|
||||
```
|
||||
{projectRoot}/project.md
|
||||
```
|
||||
|
||||
Если задан `active_component_path` (например `components/my-comp`):
|
||||
|
||||
```
|
||||
componentRoot = {projectRoot}/{active_component_path}
|
||||
```
|
||||
|
||||
Файл компонента:
|
||||
|
||||
```
|
||||
{componentRoot}/component.md
|
||||
```
|
||||
|
||||
**База для задач и требований** (`base`):
|
||||
|
||||
- без компонента: `base = projectRoot`
|
||||
- с компонентом: `base = componentRoot`
|
||||
|
||||
Пути:
|
||||
|
||||
- задачи: `{base}/issues/{issueSlug}.md` — в **теле** задачи весь контекст для реализации (bmad-c9s: без подпапок `*-requirements/`). В frontmatter новой задачи **обязательно**: **`created_by`**, **`submaster`**, **`creators: ["<username>"]`** — тот же **`username`**, что в **`c9s-config.yaml`**; иначе **не будет учёта времени** в Capital (см. [TASKS-DOCUMENTS-TIME-POLICY §1](../docs/TASKS-DOCUMENTS-TIME-POLICY.md)).
|
||||
- требования уровня проекта: `{base}/requirements/{storySlug}.md`
|
||||
|
||||
**Наименование требований:** в каждом `{base}/requirements/*.md` поле **`title`** в frontmatter — **только русский язык**, заголовок **чёткий и понятный** (см. [FORMAT §2.2](../docs/FORMAT-CAPITAL-GITHUB.md)).
|
||||
|
||||
---
|
||||
|
||||
## Чтение `hash` из `project.md` / `component.md`
|
||||
|
||||
1. Прочитать файл.
|
||||
2. Распарсить frontmatter (строки между `---`).
|
||||
3. Взять значение `hash` — использовать как `project_hash` для новых задач и для story в **`requirements/`**.
|
||||
|
||||
Новые story в **`requirements/`** не привязывать к задаче через **`issue_hash`** и не класть рядом с `issues/` в отдельные каталоги — связь задачи с продуктовым контекстом только **ссылками в markdown-теле** `issues/*.md`.
|
||||
|
||||
---
|
||||
|
||||
## Генерация нового hash (64 hex)
|
||||
|
||||
Подойдёт любой способ **32 байта случайных → hex**. Примеры для пользователя (выполняет человек или среда, если разрешено):
|
||||
|
||||
```bash
|
||||
openssl rand -hex 32
|
||||
```
|
||||
|
||||
Агент **не выдумывает** предсказуемые строки; для демо в тесте можно использовать уже сгенерированную hex-строку.
|
||||
|
||||
---
|
||||
|
||||
## Обновление `updated_at`
|
||||
|
||||
При каждом сохранении файла, который должен импортироваться в Capital:
|
||||
|
||||
1. Установить `updated_at` в текущее время UTC в формате ISO 8601 с миллисекундами и суффиксом `Z`, например: `2026-03-27T15:04:05.123Z`.
|
||||
2. Не откатывать `updated_at` на более старое значение при редактировании.
|
||||
|
||||
---
|
||||
|
||||
## Slug заголовка
|
||||
|
||||
Правило должно совпадать с бэкендом: транслитерация кириллицы в латиницу, пробелы и спецсимволы — в дефисы, нижний регистр, схлопывание повторяющихся дефисов (как `generateSlug` в `FileFormatService`). При сомнении — ориентироваться на **уже существующие имена папок** в репозитории.
|
||||
|
||||
---
|
||||
|
||||
## Операционная папка `.c9s/`
|
||||
|
||||
Здесь **только** то, что не является сущностью Capital (project/issue/story): статусы воркфлоу BMAD, служебные YAML, напоминания. **Не** хранить здесь брифы, PRD, заметки аналитика — это всё оформляется как **требования (story)** в `{base}/requirements/*.md` по FORMAT.
|
||||
|
||||
Создавать при инициализации (пример):
|
||||
|
||||
```
|
||||
{base}/.c9s/
|
||||
workflow-status.yaml # статус фаз BMAD
|
||||
sprint-status.yaml # опционально (спринт), см. scrum-master
|
||||
README.txt # кратко: «.c9s — только операционка; артефакты — requirements/*.md»
|
||||
```
|
||||
|
||||
При первой выдаче требований **создать** каталог `{base}/requirements/`, если его ещё нет.
|
||||
|
||||
Интеллектуальная продукция **уровня проекта** (бриф, PRD, исследование, техспека, мозговой штурм, UX и т.д.) — **story** под `{base}/requirements/`. То, что относится **к конкретной задаче**, — в **теле** соответствующего **`issues/{issueSlug}.md`**, без отдельных story-файлов «на задачу».
|
||||
|
||||
---
|
||||
|
||||
## Статусы воркфлоу (YAML)
|
||||
|
||||
Можно использовать упрощённый файл по мотивам `bmad-v6/templates/bmm-workflow-status.template.yaml`, но хранить его в **`.c9s/workflow-status.yaml`**, а не смешивать с Capital markdown сущностями.
|
||||
|
||||
---
|
||||
|
||||
## Ссылка на helpers v6 (англ.)
|
||||
|
||||
Детальные паттерны BMAD v6: `bmad-v6/utils/helpers.md` — для углублённых сценариев на английском.
|
||||
+138
-169
@@ -1,8 +1,8 @@
|
||||
###############################################################################
|
||||
# BMAD Method v6 for Claude Code - PowerShell Installation Script
|
||||
# BMAD-c9s (Coopenomics) for Claude Code — PowerShell installer
|
||||
#
|
||||
# Installs BMAD Method v6 using only Claude Code native features
|
||||
# No npx, no external dependencies, pure Claude Code
|
||||
# Устанавливает скиллы и команды из bmad-c9s/. Каталог bmad-v6/ в репозитории
|
||||
# не изменяется; при наличии копируется helpers.md как helpers-bmad-v6-en.md.
|
||||
#
|
||||
# Supports: PowerShell 5.1+ (Windows default) and PowerShell 6+ (Core)
|
||||
#
|
||||
@@ -11,20 +11,20 @@
|
||||
# .\install-v6.ps1 -Verbose # Detailed diagnostic output
|
||||
# .\install-v6.ps1 -WhatIf # Dry-run (show what would be installed)
|
||||
# .\install-v6.ps1 -Force # Force reinstall over existing
|
||||
# .\install-v6.ps1 -Uninstall # Remove BMAD Method v6
|
||||
# .\install-v6.ps1 -Uninstall # Remove BMAD-c9s from ~/.claude/.../bmad
|
||||
###############################################################################
|
||||
|
||||
<#
|
||||
.SYNOPSIS
|
||||
Installs BMAD Method v6 for Claude Code.
|
||||
Installs BMAD-c9s (Coopenomics) for Claude Code.
|
||||
|
||||
.DESCRIPTION
|
||||
This script installs the BMAD Method v6 framework to the Claude Code
|
||||
configuration directory (~/.claude/). It includes:
|
||||
- Core orchestration skills
|
||||
- BMM (BMAD Method Management) skills
|
||||
- BMB (BMAD Method Baseline) skills (optional)
|
||||
- CIS (Contribution Integration System) skills (optional)
|
||||
Installs skills and slash commands from bmad-c9s/ into the Claude Code
|
||||
directory (~/.claude/). It includes:
|
||||
- Core orchestration (bmad-master-c9s, c9s-master-review)
|
||||
- BMM role skills (analyst, pm, architect, scrum-master, developer, ux-designer)
|
||||
- BMB builder skill
|
||||
- CIS creative-intelligence skill
|
||||
- Configuration templates
|
||||
- Utility helpers
|
||||
|
||||
@@ -41,20 +41,20 @@
|
||||
Show what would be installed without actually installing (dry-run).
|
||||
|
||||
.PARAMETER Force
|
||||
Force reinstallation even if BMAD v6 is already installed.
|
||||
Force reinstallation even if BMAD-c9s is already installed.
|
||||
|
||||
.PARAMETER Uninstall
|
||||
Remove BMAD Method v6 from the system.
|
||||
Remove BMAD-c9s installation from ~/.claude/skills/bmad, commands/bmad, config/bmad.
|
||||
|
||||
.EXAMPLE
|
||||
.\install-v6.ps1
|
||||
|
||||
Installs BMAD Method v6 with standard output.
|
||||
Installs BMAD-c9s with standard output.
|
||||
|
||||
.EXAMPLE
|
||||
.\install-v6.ps1 -Verbose
|
||||
|
||||
Installs BMAD Method v6 with detailed diagnostic output.
|
||||
Installs BMAD-c9s with detailed diagnostic output.
|
||||
|
||||
.EXAMPLE
|
||||
.\install-v6.ps1 -WhatIf
|
||||
@@ -64,12 +64,12 @@
|
||||
.EXAMPLE
|
||||
.\install-v6.ps1 -Uninstall
|
||||
|
||||
Removes BMAD Method v6 from the system.
|
||||
Removes BMAD-c9s from ~/.claude/.../bmad.
|
||||
|
||||
.NOTES
|
||||
Version: 6.0.3
|
||||
Version: 1.0.0 (BMAD-c9s)
|
||||
Requires: PowerShell 5.1+
|
||||
Updated: 2025-11-14
|
||||
Updated: 2025-03-27
|
||||
Changes: Fixed PowerShell function scoping issues for WSL compatibility by making all
|
||||
functions globally scoped. This resolves "Write-Success is not recognized" errors
|
||||
when running in WSL PowerShell environments.
|
||||
@@ -89,7 +89,7 @@ $ErrorActionPreference = "Stop"
|
||||
# Configuration
|
||||
###############################################################################
|
||||
|
||||
$BmadVersion = "6.0.3"
|
||||
$BmadVersion = "1.0.0"
|
||||
|
||||
# PowerShell version detection
|
||||
$PSVersion = $PSVersionTable.PSVersion.Major
|
||||
@@ -240,13 +240,15 @@ $BmadSkillsDir = Join-PathCompat $ClaudeDir "skills" "bmad"
|
||||
$BmadCommandsDir = Join-PathCompat $ClaudeDir "commands" "bmad"
|
||||
$ScriptDir = $PSScriptRoot
|
||||
|
||||
# Source directories
|
||||
# Source directories (primary: bmad-c9s; bmad-v6 only for optional EN helpers)
|
||||
$SourceBmadC9sDir = Join-Path $ScriptDir "bmad-c9s"
|
||||
$SourceBmadV6Dir = Join-Path $ScriptDir "bmad-v6"
|
||||
$SourceSkillsDir = Join-PathCompat $SourceBmadV6Dir "skills"
|
||||
$SourceConfigDir = Join-PathCompat $SourceBmadV6Dir "config"
|
||||
$SourceTemplatesDir = Join-PathCompat $SourceBmadV6Dir "templates"
|
||||
$SourceUtilsDir = Join-PathCompat $SourceBmadV6Dir "utils"
|
||||
$SourceCommandsDir = Join-PathCompat $SourceBmadV6Dir "commands"
|
||||
$SourceSkillsDir = Join-PathCompat $SourceBmadC9sDir "skills"
|
||||
$SourceConfigDir = Join-PathCompat $SourceBmadC9sDir "config"
|
||||
$SourceTemplatesDir = Join-PathCompat $SourceBmadC9sDir "templates"
|
||||
$SourceUtilsDir = Join-PathCompat $SourceBmadC9sDir "utils"
|
||||
$SourceCommandsDir = Join-PathCompat $SourceBmadC9sDir "commands"
|
||||
$SourceC9sDocsDir = Join-PathCompat $SourceBmadC9sDir "docs"
|
||||
|
||||
###############################################################################
|
||||
# Pre-Flight Validation
|
||||
@@ -276,12 +278,12 @@ function global:Test-Prerequisites {
|
||||
$errors += "Script directory not found: $ScriptDir"
|
||||
}
|
||||
|
||||
# Check if bmad-v6 source directory exists
|
||||
if (-not (Test-Path $SourceBmadV6Dir)) {
|
||||
$errors += "Source directory not found: $SourceBmadV6Dir"
|
||||
$errors += "Make sure you're running this script from the repository root"
|
||||
# Check if bmad-c9s source directory exists
|
||||
if (-not (Test-Path $SourceBmadC9sDir)) {
|
||||
$errors += "Source directory not found: $SourceBmadC9sDir"
|
||||
$errors += "Run this script from the claude-code-bmad-skills repository root"
|
||||
} else {
|
||||
Write-Success "Found source directory: $SourceBmadV6Dir"
|
||||
Write-Success "Found source directory: $SourceBmadC9sDir"
|
||||
}
|
||||
|
||||
# Check required source subdirectories
|
||||
@@ -315,9 +317,9 @@ function global:Test-Prerequisites {
|
||||
}
|
||||
|
||||
# Check if already installed
|
||||
$bmadMasterPath = Join-PathCompat $BmadSkillsDir "core" "bmad-master" "SKILL.md"
|
||||
$bmadMasterPath = Join-PathCompat $BmadSkillsDir "core" "bmad-master-c9s" "SKILL.md"
|
||||
if ((Test-Path $bmadMasterPath) -and -not $Force) {
|
||||
Write-Warning "BMAD Method v6 is already installed at: $BmadSkillsDir"
|
||||
Write-Warning "BMAD-c9s is already installed at: $BmadSkillsDir"
|
||||
Write-Host ""
|
||||
Write-Host "Options:" -ForegroundColor Yellow
|
||||
Write-Host " 1. Run with -Force to reinstall"
|
||||
@@ -354,9 +356,9 @@ function global:Test-Prerequisites {
|
||||
###############################################################################
|
||||
|
||||
function global:Uninstall-BmadV6 {
|
||||
Write-Header "BMAD Method v$BmadVersion Uninstaller"
|
||||
Write-Header "BMAD-c9s v$BmadVersion — удаление"
|
||||
|
||||
Write-Info "Checking for BMAD Method v6 installation..."
|
||||
Write-Info "Checking for BMAD-c9s installation..."
|
||||
|
||||
$dirsToRemove = @(
|
||||
$BmadSkillsDir,
|
||||
@@ -373,13 +375,13 @@ function global:Uninstall-BmadV6 {
|
||||
}
|
||||
|
||||
if (-not $found) {
|
||||
Write-Warning "BMAD Method v6 is not installed"
|
||||
Write-Warning "BMAD-c9s is not installed under ~/.claude/.../bmad"
|
||||
Write-Host "Nothing to uninstall."
|
||||
exit 0
|
||||
}
|
||||
|
||||
Write-Host ""
|
||||
Write-Warning "This will remove BMAD Method v6 from your system:"
|
||||
Write-Warning "This will remove BMAD-c9s from your system:"
|
||||
foreach ($dir in $dirsToRemove) {
|
||||
if (Test-Path $dir) {
|
||||
Write-Host " - $dir" -ForegroundColor Yellow
|
||||
@@ -395,7 +397,7 @@ function global:Uninstall-BmadV6 {
|
||||
}
|
||||
}
|
||||
|
||||
Write-Info "Uninstalling BMAD Method v6..."
|
||||
Write-Info "Uninstalling BMAD-c9s..."
|
||||
|
||||
try {
|
||||
foreach ($dir in $dirsToRemove) {
|
||||
@@ -408,7 +410,7 @@ function global:Uninstall-BmadV6 {
|
||||
}
|
||||
|
||||
Write-Host ""
|
||||
Write-Success "BMAD Method v6 has been uninstalled successfully!"
|
||||
Write-Success "BMAD-c9s has been uninstalled successfully!"
|
||||
Write-Host ""
|
||||
exit 0
|
||||
}
|
||||
@@ -423,7 +425,7 @@ function global:Uninstall-BmadV6 {
|
||||
###############################################################################
|
||||
|
||||
function global:New-Directories {
|
||||
Write-Progress -Activity "Installing BMAD Method v6" -Status "Creating directory structure..." -PercentComplete 0
|
||||
Write-Progress -Activity "Installing BMAD-c9s" -Status "Creating directory structure..." -PercentComplete 0
|
||||
Write-Info "Creating directory structure..."
|
||||
|
||||
try {
|
||||
@@ -457,8 +459,8 @@ function global:New-Directories {
|
||||
}
|
||||
|
||||
function global:Install-Skills {
|
||||
Write-Progress -Activity "Installing BMAD Method v6" -Status "Installing BMAD skills..." -PercentComplete 20
|
||||
Write-Info "Installing BMAD skills..."
|
||||
Write-Progress -Activity "Installing BMAD-c9s" -Status "Installing skills..." -PercentComplete 20
|
||||
Write-Info "Installing BMAD-c9s skills..."
|
||||
|
||||
$skillComponents = @(
|
||||
@{
|
||||
@@ -525,53 +527,23 @@ function global:Install-Skills {
|
||||
}
|
||||
|
||||
function global:Install-Config {
|
||||
Write-Progress -Activity "Installing BMAD Method v6" -Status "Installing configuration..." -PercentComplete 40
|
||||
Write-Info "Installing configuration..."
|
||||
Write-Progress -Activity "Installing BMAD-c9s" -Status "Installing configuration..." -PercentComplete 40
|
||||
Write-Info "Installing BMAD-c9s configuration template..."
|
||||
|
||||
try {
|
||||
# Install config template
|
||||
$ConfigTemplatePath = Join-PathCompat $SourceConfigDir "config.template.yaml"
|
||||
$ConfigPath = Join-Path $BmadConfigDir "config.yaml"
|
||||
$C9sConfigTemplatePath = Join-PathCompat $SourceConfigDir "c9s-config.template.yaml"
|
||||
$C9sConfigDestPath = Join-Path $BmadConfigDir "c9s-config.template.yaml"
|
||||
|
||||
Write-Verbose "Config template: $ConfigTemplatePath"
|
||||
Write-Verbose "Config destination: $ConfigPath"
|
||||
Write-Verbose "Config template: $C9sConfigTemplatePath"
|
||||
Write-Verbose "Config destination: $C9sConfigDestPath"
|
||||
|
||||
if (Test-Path $ConfigTemplatePath) {
|
||||
if (-not (Test-Path $ConfigPath) -or $Force) {
|
||||
if ($PSCmdlet.ShouldProcess($ConfigPath, "Create configuration")) {
|
||||
# Create config from template, substituting variables
|
||||
Write-Verbose "Creating config from template"
|
||||
$configContent = Get-Content $ConfigTemplatePath -Raw -ErrorAction Stop
|
||||
|
||||
# Get username (cross-platform)
|
||||
$userName = if ($env:USERNAME) { $env:USERNAME } else { $env:USER }
|
||||
$configContent = $configContent -replace '{{USER_NAME}}', $userName
|
||||
|
||||
Set-Content -Path $ConfigPath -Value $configContent -Encoding UTF8 -ErrorAction Stop
|
||||
Write-Success "Configuration created"
|
||||
Write-Verbose " User: $userName"
|
||||
}
|
||||
} else {
|
||||
Write-Info "Configuration already exists, preserving"
|
||||
Write-Verbose " Existing config: $ConfigPath"
|
||||
if (Test-Path $C9sConfigTemplatePath) {
|
||||
if ($PSCmdlet.ShouldProcess($C9sConfigDestPath, "Copy c9s config template")) {
|
||||
Copy-ItemSafe -SourcePath $C9sConfigTemplatePath -DestinationPath $C9sConfigDestPath -Force -ErrorContext "c9s config template"
|
||||
Write-Success "c9s-config.template.yaml installed (copy to your results repo as c9s-config.yaml)"
|
||||
}
|
||||
} else {
|
||||
Write-Warning "Config template not found at: $ConfigTemplatePath"
|
||||
}
|
||||
|
||||
# Copy project config template
|
||||
$ProjectConfigTemplatePath = Join-PathCompat $SourceConfigDir "project-config.template.yaml"
|
||||
$ProjectConfigDestPath = Join-Path $BmadConfigDir "project-config.template.yaml"
|
||||
|
||||
Write-Verbose "Project config template: $ProjectConfigTemplatePath"
|
||||
|
||||
if (Test-Path $ProjectConfigTemplatePath) {
|
||||
if ($PSCmdlet.ShouldProcess($ProjectConfigDestPath, "Copy project config template")) {
|
||||
Copy-ItemSafe -SourcePath $ProjectConfigTemplatePath -DestinationPath $ProjectConfigDestPath -Force -ErrorContext "project config template"
|
||||
Write-Verbose " Project config template installed"
|
||||
}
|
||||
} else {
|
||||
Write-Verbose "Project config template not found (skipping)"
|
||||
Write-Warning "c9s-config.template.yaml not found at: $C9sConfigTemplatePath"
|
||||
}
|
||||
}
|
||||
catch {
|
||||
@@ -581,7 +553,7 @@ function global:Install-Config {
|
||||
}
|
||||
|
||||
function global:Install-Templates {
|
||||
Write-Progress -Activity "Installing BMAD Method v6" -Status "Installing templates..." -PercentComplete 60
|
||||
Write-Progress -Activity "Installing BMAD-c9s" -Status "Installing templates..." -PercentComplete 60
|
||||
Write-Info "Installing templates..."
|
||||
|
||||
try {
|
||||
@@ -608,35 +580,59 @@ function global:Install-Templates {
|
||||
}
|
||||
|
||||
function global:Install-Utils {
|
||||
Write-Progress -Activity "Installing BMAD Method v6" -Status "Installing utility helpers..." -PercentComplete 70
|
||||
Write-Info "Installing utility helpers..."
|
||||
Write-Progress -Activity "Installing BMAD-c9s" -Status "Installing docs and helpers..." -PercentComplete 70
|
||||
Write-Info "Installing docs and helpers (c9s)..."
|
||||
|
||||
try {
|
||||
$HelpersPath = Join-PathCompat $SourceUtilsDir "helpers.md"
|
||||
$HelpersDestPath = Join-Path $BmadConfigDir "helpers.md"
|
||||
|
||||
Write-Verbose "Helpers source: $HelpersPath"
|
||||
Write-Verbose "Helpers destination: $HelpersDestPath"
|
||||
|
||||
if (Test-Path $HelpersPath) {
|
||||
if ($PSCmdlet.ShouldProcess($HelpersDestPath, "Copy helpers")) {
|
||||
Copy-ItemSafe -SourcePath $HelpersPath -DestinationPath $HelpersDestPath -Force -ErrorContext "utility helpers"
|
||||
Write-Success "Utility helpers installed"
|
||||
Write-Verbose " Copied to: $HelpersDestPath"
|
||||
$HelpersRuPath = Join-PathCompat $SourceUtilsDir "helpers-ru.md"
|
||||
$HelpersRuDest = Join-Path $BmadConfigDir "helpers-ru.md"
|
||||
if (Test-Path $HelpersRuPath) {
|
||||
if ($PSCmdlet.ShouldProcess($HelpersRuDest, "Copy helpers-ru.md")) {
|
||||
Copy-ItemSafe -SourcePath $HelpersRuPath -DestinationPath $HelpersRuDest -Force -ErrorContext "helpers-ru"
|
||||
Write-Success "helpers-ru.md installed"
|
||||
}
|
||||
} else {
|
||||
Write-Warning "Helpers not found at: $HelpersPath"
|
||||
Write-Warning "helpers-ru.md not found at: $HelpersRuPath"
|
||||
}
|
||||
|
||||
$FormatPath = Join-PathCompat $SourceC9sDocsDir "FORMAT-CAPITAL-GITHUB.md"
|
||||
$FormatDest = Join-Path $BmadConfigDir "FORMAT-CAPITAL-GITHUB.md"
|
||||
if (Test-Path $FormatPath) {
|
||||
if ($PSCmdlet.ShouldProcess($FormatDest, "Copy FORMAT-CAPITAL-GITHUB.md")) {
|
||||
Copy-ItemSafe -SourcePath $FormatPath -DestinationPath $FormatDest -Force -ErrorContext "FORMAT doc"
|
||||
Write-Success "FORMAT-CAPITAL-GITHUB.md installed"
|
||||
}
|
||||
}
|
||||
|
||||
$ClaudeSrc = Join-Path $SourceBmadC9sDir "CLAUDE.md"
|
||||
$ClaudeDest = Join-Path $BmadConfigDir "CLAUDE-bmad-c9s.md"
|
||||
if (Test-Path $ClaudeSrc) {
|
||||
if ($PSCmdlet.ShouldProcess($ClaudeDest, "Copy CLAUDE-bmad-c9s.md")) {
|
||||
Copy-ItemSafe -SourcePath $ClaudeSrc -DestinationPath $ClaudeDest -Force -ErrorContext "CLAUDE overview"
|
||||
Write-Success "CLAUDE-bmad-c9s.md installed"
|
||||
}
|
||||
}
|
||||
|
||||
$V6Helpers = Join-PathCompat $SourceBmadV6Dir "utils" "helpers.md"
|
||||
$V6HelpersDest = Join-Path $BmadConfigDir "helpers-bmad-v6-en.md"
|
||||
if (Test-Path $V6Helpers) {
|
||||
if ($PSCmdlet.ShouldProcess($V6HelpersDest, "Copy BMAD v6 EN helpers (reference)")) {
|
||||
Copy-ItemSafe -SourcePath $V6Helpers -DestinationPath $V6HelpersDest -Force -ErrorContext "v6 helpers EN"
|
||||
Write-Success "helpers-bmad-v6-en.md (BMAD v6 reference) installed"
|
||||
}
|
||||
} else {
|
||||
Write-Verbose "bmad-v6/utils/helpers.md not found — skipping EN reference"
|
||||
}
|
||||
}
|
||||
catch {
|
||||
Write-ErrorMsg "Failed to install utility helpers"
|
||||
Write-ErrorMsg "Failed to install docs/helpers"
|
||||
throw
|
||||
}
|
||||
}
|
||||
|
||||
function global:Install-Commands {
|
||||
Write-Progress -Activity "Installing BMAD Method v6" -Status "Installing slash commands..." -PercentComplete 80
|
||||
Write-Info "Installing slash commands..."
|
||||
Write-Progress -Activity "Installing BMAD-c9s" -Status "Installing slash commands..." -PercentComplete 80
|
||||
Write-Info "Installing slash commands from bmad-c9s/commands..."
|
||||
|
||||
try {
|
||||
Write-Verbose "Commands source: $SourceCommandsDir"
|
||||
@@ -672,26 +668,26 @@ function global:Install-Commands {
|
||||
}
|
||||
|
||||
function global:Test-Installation {
|
||||
Write-Progress -Activity "Installing BMAD Method v6" -Status "Verifying installation..." -PercentComplete 90
|
||||
Write-Progress -Activity "Installing BMAD-c9s" -Status "Verifying installation..." -PercentComplete 90
|
||||
Write-Info "Verifying installation..."
|
||||
|
||||
$errors = 0
|
||||
$checks = @(
|
||||
@{
|
||||
Name = "BMad Master skill"
|
||||
Path = Join-PathCompat $BmadSkillsDir "core" "bmad-master" "SKILL.md"
|
||||
Name = "bmad-master-c9s skill"
|
||||
Path = Join-PathCompat $BmadSkillsDir "core" "bmad-master-c9s" "SKILL.md"
|
||||
},
|
||||
@{
|
||||
Name = "Configuration"
|
||||
Path = Join-Path $BmadConfigDir "config.yaml"
|
||||
Name = "c9s config template"
|
||||
Path = Join-Path $BmadConfigDir "c9s-config.template.yaml"
|
||||
},
|
||||
@{
|
||||
Name = "Helpers"
|
||||
Path = Join-Path $BmadConfigDir "helpers.md"
|
||||
Name = "helpers-ru"
|
||||
Path = Join-Path $BmadConfigDir "helpers-ru.md"
|
||||
},
|
||||
@{
|
||||
Name = "Slash commands"
|
||||
Path = Join-Path $BmadCommandsDir "workflow-init.md"
|
||||
Name = "Slash command c9s-init"
|
||||
Path = Join-Path $BmadCommandsDir "c9s-init.md"
|
||||
}
|
||||
)
|
||||
|
||||
@@ -726,84 +722,57 @@ function global:Test-Installation {
|
||||
}
|
||||
|
||||
function global:Show-NextSteps {
|
||||
Write-Header "Installation Complete!"
|
||||
Write-Header "BMAD-c9s — установка завершена"
|
||||
|
||||
Write-Host "[SUCCESS] BMAD Method v$BmadVersion installed successfully!" -ForegroundColor Green
|
||||
Write-Host "[SUCCESS] BMAD-c9s v$BmadVersion (Coopenomics) установлен." -ForegroundColor Green
|
||||
Write-Host ""
|
||||
Write-Host "Installation location:"
|
||||
Write-Host "Каталоги:"
|
||||
Write-Host " Skills: $BmadSkillsDir"
|
||||
Write-Host " Commands: $BmadCommandsDir"
|
||||
Write-Host " Config: $BmadConfigDir"
|
||||
Write-Host ""
|
||||
Write-Host "[OK] 9 Specialized Skills"
|
||||
Write-Host " - Core orchestrator (BMad Master)"
|
||||
Write-Host " - Agile agents (Analyst, PM, Architect, SM, Developer, UX)"
|
||||
Write-Host " - Builder module (custom agents and workflows)"
|
||||
Write-Host " - Creative Intelligence (brainstorming and research)"
|
||||
Write-Host "Источник: bmad-c9s/ (bmad-v6/ в репозитории не изменяется)."
|
||||
Write-Host ""
|
||||
Write-Host "[OK] 15 Workflow Commands"
|
||||
Write-Host " - /workflow-init, /workflow-status"
|
||||
Write-Host " - /product-brief, /prd, /tech-spec"
|
||||
Write-Host " - /architecture, /solutioning-gate-check"
|
||||
Write-Host " - /sprint-planning, /create-story, /dev-story"
|
||||
Write-Host " - /brainstorm, /research"
|
||||
Write-Host " - /create-agent, /create-workflow, /create-ux-design"
|
||||
Write-Host "Дальше:"
|
||||
Write-Host " 1. Перезапустите Claude Code"
|
||||
Write-Host " 2. Скопируйте c9s-config.template.yaml в репозиторий результатов как c9s-config.yaml"
|
||||
Write-Host " 3. Инициализация: /c9s-init (скилл bmad-master-c9s)"
|
||||
Write-Host " 4. Статус: /c9s-status"
|
||||
Write-Host ""
|
||||
Write-Host "[OK] Configuration system"
|
||||
Write-Host "[OK] Template engine"
|
||||
Write-Host "[OK] Status tracking utilities"
|
||||
Write-Host "Документация после установки:"
|
||||
Write-Host " $BmadConfigDir\CLAUDE-bmad-c9s.md"
|
||||
Write-Host " $BmadConfigDir\FORMAT-CAPITAL-GITHUB.md"
|
||||
Write-Host " $BmadConfigDir\helpers-ru.md"
|
||||
Write-Host ""
|
||||
Write-Host "Next Steps:"
|
||||
Write-Host ""
|
||||
Write-Host "1. " -NoNewline
|
||||
Write-Host "Restart Claude Code" -ForegroundColor Blue
|
||||
Write-Host " Skills will be loaded in new sessions"
|
||||
Write-Host ""
|
||||
Write-Host "2. " -NoNewline
|
||||
Write-Host "Open your project" -ForegroundColor Blue
|
||||
Write-Host " Navigate to the project you want to use BMAD with"
|
||||
Write-Host ""
|
||||
Write-Host "3. " -NoNewline
|
||||
Write-Host "Initialize BMAD" -ForegroundColor Blue
|
||||
Write-Host " Run: /workflow-init"
|
||||
Write-Host " This sets up BMAD structure in your project"
|
||||
Write-Host ""
|
||||
Write-Host "4. " -NoNewline
|
||||
Write-Host "Check status" -ForegroundColor Blue
|
||||
Write-Host " Run: /workflow-status"
|
||||
Write-Host " See your project status and get recommendations"
|
||||
Write-Host ""
|
||||
Write-Host "Verification Commands:"
|
||||
Write-Host "Проверка:"
|
||||
|
||||
if ($IsWindows -or $env:OS -match "Windows" -or (-not (Test-Path variable:IsWindows))) {
|
||||
Write-Host " dir `"$BmadSkillsDir\core\bmad-master\SKILL.md`""
|
||||
Write-Host " dir `"$BmadSkillsDir\core\bmad-master-c9s\SKILL.md`""
|
||||
Write-Host " dir `"$BmadCommandsDir\c9s-init.md`""
|
||||
} else {
|
||||
Write-Host " ls -la ~/.claude/skills/bmad/core/bmad-master/SKILL.md"
|
||||
Write-Host " ls -la ~/.claude/skills/bmad/core/bmad-master-c9s/SKILL.md"
|
||||
Write-Host " ls -la ~/.claude/commands/bmad/c9s-init.md"
|
||||
}
|
||||
|
||||
Write-Host ""
|
||||
Write-Host "Documentation:"
|
||||
Write-Host " README: $ScriptDir\README.md"
|
||||
Write-Host "Исходники пакета: $SourceBmadC9sDir"
|
||||
Write-Host ""
|
||||
Write-Host "[OK] BMAD Method v6 is ready!" -ForegroundColor Green
|
||||
Write-Host ""
|
||||
Write-Host "Need help? Visit: https://github.com/aj-geddes/claude-code-bmad-skills/issues"
|
||||
Write-Host "[OK] BMAD-c9s готов." -ForegroundColor Green
|
||||
}
|
||||
|
||||
function global:Show-WhatIfSummary {
|
||||
Write-Header "Installation Summary (Dry-Run)"
|
||||
Write-Header "Installation Summary (Dry-Run) — BMAD-c9s"
|
||||
|
||||
Write-Host "Would install BMAD Method v$BmadVersion to:"
|
||||
Write-Host "Would install BMAD-c9s v$BmadVersion from: $SourceBmadC9sDir"
|
||||
Write-Host " Skills: $BmadSkillsDir"
|
||||
Write-Host " Commands: $BmadCommandsDir"
|
||||
Write-Host " Config: $BmadConfigDir"
|
||||
Write-Host ""
|
||||
Write-Host "Components:"
|
||||
Write-Host " [*] 9 specialized skills (Core, BMM, BMB, CIS)"
|
||||
Write-Host " [*] 15 workflow slash commands"
|
||||
Write-Host " [*] Configuration templates"
|
||||
Write-Host " [*] Utility helpers"
|
||||
Write-Host " [*] Status tracking system"
|
||||
Write-Host " [*] Skills (core/bmm/bmb/cis) from bmad-c9s/skills"
|
||||
Write-Host " [*] Slash commands from bmad-c9s/commands"
|
||||
Write-Host " [*] c9s-config.template.yaml, templates, helpers-ru, docs"
|
||||
Write-Host " [*] Optional: helpers-bmad-v6-en.md if bmad-v6/utils/helpers.md exists"
|
||||
Write-Host ""
|
||||
Write-Host "To perform actual installation, run without -WhatIf"
|
||||
}
|
||||
@@ -825,7 +794,7 @@ function global:Main {
|
||||
return
|
||||
}
|
||||
|
||||
Write-Header "BMAD Method v$BmadVersion Installer"
|
||||
Write-Header "BMAD-c9s v$BmadVersion — installer"
|
||||
|
||||
# Show version info
|
||||
if ($IsPowerShell5) {
|
||||
@@ -866,10 +835,10 @@ function global:Main {
|
||||
# Verify
|
||||
Write-Host ""
|
||||
if (Test-Installation) {
|
||||
Write-Progress -Activity "Installing BMAD Method v6" -Status "Complete!" -PercentComplete 100
|
||||
Write-Progress -Activity "Installing BMAD-c9s" -Status "Complete!" -PercentComplete 100
|
||||
Write-Host ""
|
||||
Show-NextSteps
|
||||
Write-Progress -Activity "Installing BMAD Method v6" -Completed
|
||||
Write-Progress -Activity "Installing BMAD-c9s" -Completed
|
||||
Write-Verbose "Installation completed successfully at: $(Get-Date)"
|
||||
exit 0
|
||||
} else {
|
||||
@@ -878,14 +847,14 @@ function global:Main {
|
||||
Write-Host "Troubleshooting:" -ForegroundColor Yellow
|
||||
Write-Host " 1. Run with -Verbose flag for detailed diagnostics"
|
||||
Write-Host " 2. Check file permissions on: $ClaudeDir"
|
||||
Write-Host " 3. Verify source files exist in: $SourceBmadV6Dir"
|
||||
Write-Host " 3. Verify source files exist in: $SourceBmadC9sDir"
|
||||
Write-Host " 4. Try running with -Force to reinstall"
|
||||
Write-Host ""
|
||||
exit 1
|
||||
}
|
||||
}
|
||||
catch {
|
||||
Write-Progress -Activity "Installing BMAD Method v6" -Completed
|
||||
Write-Progress -Activity "Installing BMAD-c9s" -Completed
|
||||
Write-Host ""
|
||||
Write-Host "===============================================" -ForegroundColor Red
|
||||
Write-Host " Installation Failed" -ForegroundColor Red
|
||||
@@ -897,8 +866,8 @@ function global:Main {
|
||||
Write-Host " 1. Run with -Verbose flag for detailed diagnostics:"
|
||||
Write-Host " .\install-v6.ps1 -Verbose"
|
||||
Write-Host ""
|
||||
Write-Host " 2. Check if bmad-v6/ directory exists:"
|
||||
Write-Host " dir bmad-v6\"
|
||||
Write-Host " 2. Check if bmad-c9s/ directory exists:"
|
||||
Write-Host " dir bmad-c9s\"
|
||||
Write-Host ""
|
||||
Write-Host " 3. Verify write permissions:"
|
||||
Write-Host " Test writing to $ClaudeDir"
|
||||
|
||||
+120
-121
@@ -1,9 +1,10 @@
|
||||
#!/usr/bin/env bash
|
||||
###############################################################################
|
||||
# BMAD Method v6 for Claude Code - Installation Script
|
||||
# BMAD-c9s (Coopenomics) — установка скиллов и команд для Claude Code
|
||||
#
|
||||
# Installs BMAD Method v6 using only Claude Code native features
|
||||
# No npx, no external dependencies, pure Claude Code
|
||||
# Источник: каталог bmad-c9s/ (русские скиллы, Capital/GitHub results).
|
||||
# Каталог bmad-v6/ в репозитории не изменяется; при наличии v6 копируется
|
||||
# helpers.md как опциональный англоязычный справочник (helpers-bmad-v6-en.md).
|
||||
#
|
||||
# Usage: ./install-v6.sh
|
||||
###############################################################################
|
||||
@@ -11,12 +12,14 @@
|
||||
set -euo pipefail
|
||||
|
||||
# Configuration
|
||||
BMAD_VERSION="6.0.2"
|
||||
C9S_VERSION="1.0.0"
|
||||
CLAUDE_DIR="${HOME}/.claude"
|
||||
BMAD_CONFIG_DIR="${CLAUDE_DIR}/config/bmad"
|
||||
BMAD_SKILLS_DIR="${CLAUDE_DIR}/skills/bmad"
|
||||
BMAD_COMMANDS_DIR="${CLAUDE_DIR}/commands/bmad"
|
||||
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
||||
BMAD_C9S_DIR="${SCRIPT_DIR}/bmad-c9s"
|
||||
BMAD_V6_DIR="${SCRIPT_DIR}/bmad-v6"
|
||||
|
||||
# Colors
|
||||
GREEN='\033[0;32m'
|
||||
@@ -47,7 +50,6 @@ log_header() {
|
||||
create_directories() {
|
||||
log_info "Creating directory structure..."
|
||||
|
||||
# Claude Code directories
|
||||
mkdir -p "${BMAD_SKILLS_DIR}"/{core,bmm,bmb,cis}
|
||||
mkdir -p "${BMAD_COMMANDS_DIR}"
|
||||
mkdir -p "${BMAD_CONFIG_DIR}"/{agents,templates}
|
||||
@@ -56,92 +58,103 @@ create_directories() {
|
||||
}
|
||||
|
||||
install_skills() {
|
||||
log_info "Installing BMAD skills..."
|
||||
log_info "Installing BMAD-c9s skills from ${BMAD_C9S_DIR}/skills..."
|
||||
|
||||
# Install core skills
|
||||
if [ -d "${SCRIPT_DIR}/bmad-v6/skills/core" ]; then
|
||||
cp -r "${SCRIPT_DIR}/bmad-v6/skills/core"/* "${BMAD_SKILLS_DIR}/core/"
|
||||
log_success "Core skills installed"
|
||||
if [ ! -d "${BMAD_C9S_DIR}/skills" ]; then
|
||||
echo "✗ Directory not found: ${BMAD_C9S_DIR}/skills"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# Install BMM skills (will add more in later phases)
|
||||
if [ -d "${SCRIPT_DIR}/bmad-v6/skills/bmm" ]; then
|
||||
cp -r "${SCRIPT_DIR}/bmad-v6/skills/bmm"/* "${BMAD_SKILLS_DIR}/bmm/" 2>/dev/null || true
|
||||
log_success "BMM skills installed"
|
||||
if [ -d "${BMAD_C9S_DIR}/skills/core" ]; then
|
||||
cp -r "${BMAD_C9S_DIR}/skills/core"/* "${BMAD_SKILLS_DIR}/core/"
|
||||
log_success "Core skills (c9s) installed"
|
||||
fi
|
||||
|
||||
# Install BMB skills (optional)
|
||||
if [ -d "${SCRIPT_DIR}/bmad-v6/skills/bmb" ]; then
|
||||
cp -r "${SCRIPT_DIR}/bmad-v6/skills/bmb"/* "${BMAD_SKILLS_DIR}/bmb/" 2>/dev/null || true
|
||||
if [ -d "${BMAD_C9S_DIR}/skills/bmm" ]; then
|
||||
cp -r "${BMAD_C9S_DIR}/skills/bmm"/* "${BMAD_SKILLS_DIR}/bmm/" 2>/dev/null || true
|
||||
log_success "BMM skills (c9s) installed"
|
||||
fi
|
||||
|
||||
# Install CIS skills (optional)
|
||||
if [ -d "${SCRIPT_DIR}/bmad-v6/skills/cis" ]; then
|
||||
cp -r "${SCRIPT_DIR}/bmad-v6/skills/cis"/* "${BMAD_SKILLS_DIR}/cis/" 2>/dev/null || true
|
||||
if [ -d "${BMAD_C9S_DIR}/skills/bmb" ]; then
|
||||
cp -r "${BMAD_C9S_DIR}/skills/bmb"/* "${BMAD_SKILLS_DIR}/bmb/" 2>/dev/null || true
|
||||
log_success "BMB skills (c9s) installed"
|
||||
fi
|
||||
|
||||
if [ -d "${BMAD_C9S_DIR}/skills/cis" ]; then
|
||||
cp -r "${BMAD_C9S_DIR}/skills/cis"/* "${BMAD_SKILLS_DIR}/cis/" 2>/dev/null || true
|
||||
log_success "CIS skills (c9s) installed"
|
||||
fi
|
||||
}
|
||||
|
||||
install_config() {
|
||||
log_info "Installing configuration..."
|
||||
log_info "Installing BMAD-c9s configuration template..."
|
||||
|
||||
# Install config template
|
||||
if [ -f "${SCRIPT_DIR}/bmad-v6/config/config.template.yaml" ]; then
|
||||
if [ ! -f "${BMAD_CONFIG_DIR}/config.yaml" ]; then
|
||||
# Create config from template, substituting variables
|
||||
sed "s/{{USER_NAME}}/${USER}/g" \
|
||||
"${SCRIPT_DIR}/bmad-v6/config/config.template.yaml" \
|
||||
> "${BMAD_CONFIG_DIR}/config.yaml"
|
||||
log_success "Configuration created"
|
||||
else
|
||||
log_info "Configuration already exists, skipping"
|
||||
fi
|
||||
fi
|
||||
|
||||
# Copy project config template
|
||||
if [ -f "${SCRIPT_DIR}/bmad-v6/config/project-config.template.yaml" ]; then
|
||||
cp "${SCRIPT_DIR}/bmad-v6/config/project-config.template.yaml" \
|
||||
"${BMAD_CONFIG_DIR}/project-config.template.yaml"
|
||||
if [ -f "${BMAD_C9S_DIR}/config/c9s-config.template.yaml" ]; then
|
||||
cp "${BMAD_C9S_DIR}/config/c9s-config.template.yaml" \
|
||||
"${BMAD_CONFIG_DIR}/c9s-config.template.yaml"
|
||||
log_success "c9s-config.template.yaml installed (copy to your results repo as c9s-config.yaml)"
|
||||
else
|
||||
echo "⚠ c9s-config.template.yaml not found"
|
||||
fi
|
||||
}
|
||||
|
||||
install_templates() {
|
||||
log_info "Installing templates..."
|
||||
log_info "Installing BMAD-c9s templates..."
|
||||
|
||||
# Install all template files
|
||||
if [ -d "${SCRIPT_DIR}/bmad-v6/templates" ]; then
|
||||
cp "${SCRIPT_DIR}/bmad-v6/templates"/* \
|
||||
if [ -d "${BMAD_C9S_DIR}/templates" ]; then
|
||||
cp "${BMAD_C9S_DIR}/templates"/* \
|
||||
"${BMAD_CONFIG_DIR}/templates/" 2>/dev/null || true
|
||||
log_success "Templates installed"
|
||||
log_success "Templates (c9s) installed"
|
||||
fi
|
||||
}
|
||||
|
||||
install_utils() {
|
||||
log_info "Installing utility helpers..."
|
||||
install_docs_and_helpers() {
|
||||
log_info "Installing docs and helpers (c9s)..."
|
||||
|
||||
# Copy helpers.md to config directory for reference
|
||||
if [ -f "${SCRIPT_DIR}/bmad-v6/utils/helpers.md" ]; then
|
||||
cp "${SCRIPT_DIR}/bmad-v6/utils/helpers.md" \
|
||||
"${BMAD_CONFIG_DIR}/helpers.md"
|
||||
log_success "Utility helpers installed"
|
||||
if [ -f "${BMAD_C9S_DIR}/utils/helpers-ru.md" ]; then
|
||||
cp "${BMAD_C9S_DIR}/utils/helpers-ru.md" \
|
||||
"${BMAD_CONFIG_DIR}/helpers-ru.md"
|
||||
log_success "helpers-ru.md installed → ${BMAD_CONFIG_DIR}/helpers-ru.md"
|
||||
fi
|
||||
|
||||
if [ -f "${BMAD_C9S_DIR}/docs/FORMAT-CAPITAL-GITHUB.md" ]; then
|
||||
cp "${BMAD_C9S_DIR}/docs/FORMAT-CAPITAL-GITHUB.md" \
|
||||
"${BMAD_CONFIG_DIR}/FORMAT-CAPITAL-GITHUB.md"
|
||||
log_success "FORMAT-CAPITAL-GITHUB.md installed"
|
||||
fi
|
||||
|
||||
if [ -f "${BMAD_C9S_DIR}/CLAUDE.md" ]; then
|
||||
cp "${BMAD_C9S_DIR}/CLAUDE.md" \
|
||||
"${BMAD_CONFIG_DIR}/CLAUDE-bmad-c9s.md"
|
||||
log_success "CLAUDE-bmad-c9s.md installed (обзор пакета)"
|
||||
fi
|
||||
|
||||
# Опционально: англ. helpers из неизменяемого bmad-v6 (справка)
|
||||
if [ -f "${BMAD_V6_DIR}/utils/helpers.md" ]; then
|
||||
cp "${BMAD_V6_DIR}/utils/helpers.md" \
|
||||
"${BMAD_CONFIG_DIR}/helpers-bmad-v6-en.md"
|
||||
log_success "helpers-bmad-v6-en.md (справка BMAD v6, EN) установлен"
|
||||
else
|
||||
log_info "bmad-v6/utils/helpers.md не найден — пропуск англ. справки"
|
||||
fi
|
||||
}
|
||||
|
||||
install_commands() {
|
||||
log_info "Installing slash commands..."
|
||||
log_info "Installing slash commands (c9s)..."
|
||||
|
||||
# Install all command files
|
||||
if [ -d "${SCRIPT_DIR}/bmad-v6/commands" ]; then
|
||||
local command_count=$(find "${SCRIPT_DIR}/bmad-v6/commands" -name "*.md" 2>/dev/null | wc -l)
|
||||
if [ -d "${BMAD_C9S_DIR}/commands" ]; then
|
||||
local command_count
|
||||
command_count=$(find "${BMAD_C9S_DIR}/commands" -maxdepth 1 -name "*.md" 2>/dev/null | wc -l | tr -d ' ')
|
||||
|
||||
if [ "$command_count" -gt 0 ]; then
|
||||
cp "${SCRIPT_DIR}/bmad-v6/commands"/*.md \
|
||||
if [ "${command_count}" -gt 0 ]; then
|
||||
cp "${BMAD_C9S_DIR}/commands"/*.md \
|
||||
"${BMAD_COMMANDS_DIR}/" 2>/dev/null || true
|
||||
log_success "Slash commands installed ($command_count commands)"
|
||||
log_success "Slash commands installed (${command_count} files)"
|
||||
else
|
||||
echo "⚠ No command files found"
|
||||
echo "⚠ No command files found in bmad-c9s/commands"
|
||||
fi
|
||||
else
|
||||
echo "⚠ Commands directory not found"
|
||||
echo "⚠ Commands directory not found: ${BMAD_C9S_DIR}/commands"
|
||||
fi
|
||||
}
|
||||
|
||||
@@ -150,35 +163,31 @@ verify_installation() {
|
||||
|
||||
local errors=0
|
||||
|
||||
# Check for BMad Master skill
|
||||
if [ -f "${BMAD_SKILLS_DIR}/core/bmad-master/SKILL.md" ]; then
|
||||
log_success "BMad Master skill verified"
|
||||
if [ -f "${BMAD_SKILLS_DIR}/core/bmad-master-c9s/SKILL.md" ]; then
|
||||
log_success "bmad-master-c9s skill verified"
|
||||
else
|
||||
echo "✗ BMad Master skill missing"
|
||||
echo "✗ bmad-master-c9s skill missing"
|
||||
errors=$((errors + 1))
|
||||
fi
|
||||
|
||||
# Check for config
|
||||
if [ -f "${BMAD_CONFIG_DIR}/config.yaml" ]; then
|
||||
log_success "Configuration verified"
|
||||
if [ -f "${BMAD_CONFIG_DIR}/c9s-config.template.yaml" ]; then
|
||||
log_success "c9s config template verified"
|
||||
else
|
||||
echo "✗ Configuration missing"
|
||||
echo "✗ c9s-config.template.yaml missing"
|
||||
errors=$((errors + 1))
|
||||
fi
|
||||
|
||||
# Check for helpers
|
||||
if [ -f "${BMAD_CONFIG_DIR}/helpers.md" ]; then
|
||||
log_success "Helpers verified"
|
||||
if [ -f "${BMAD_CONFIG_DIR}/helpers-ru.md" ]; then
|
||||
log_success "helpers-ru.md verified"
|
||||
else
|
||||
echo "✗ Helpers missing"
|
||||
echo "✗ helpers-ru.md missing"
|
||||
errors=$((errors + 1))
|
||||
fi
|
||||
|
||||
# Check for commands
|
||||
if [ -f "${BMAD_COMMANDS_DIR}/workflow-init.md" ]; then
|
||||
log_success "Slash commands verified"
|
||||
if [ -f "${BMAD_COMMANDS_DIR}/c9s-init.md" ]; then
|
||||
log_success "Slash commands (c9s-init) verified"
|
||||
else
|
||||
echo "✗ Slash commands missing"
|
||||
echo "✗ c9s-init.md missing"
|
||||
errors=$((errors + 1))
|
||||
fi
|
||||
|
||||
@@ -192,60 +201,48 @@ verify_installation() {
|
||||
}
|
||||
|
||||
print_next_steps() {
|
||||
log_header "Installation Complete!"
|
||||
log_header "Установка завершена"
|
||||
|
||||
cat << EOF
|
||||
📦 BMAD Method v${BMAD_VERSION} installed successfully!
|
||||
📦 BMAD-c9s v${C9S_VERSION} (Coopenomics) установлен.
|
||||
|
||||
Installation location:
|
||||
Skills: ${BMAD_SKILLS_DIR}
|
||||
Commands: ${BMAD_COMMANDS_DIR}
|
||||
Config: ${BMAD_CONFIG_DIR}
|
||||
Каталоги:
|
||||
Скиллы: ${BMAD_SKILLS_DIR}
|
||||
Команды: ${BMAD_COMMANDS_DIR}
|
||||
Конфиг: ${BMAD_CONFIG_DIR}
|
||||
|
||||
✓ 9 Specialized Skills
|
||||
- Core orchestrator (BMad Master)
|
||||
- Agile agents (Analyst, PM, Architect, SM, Developer, UX)
|
||||
- Builder module (custom agents and workflows)
|
||||
- Creative Intelligence (brainstorming and research)
|
||||
Что установлено:
|
||||
• Скиллы из bmad-c9s/ (оркестратор bmad-master-c9s, роли BMM, CIS, builder, c9s-master-review)
|
||||
• Команды из bmad-c9s/commands/ (/c9s-init, /c9s-status, /prd, …)
|
||||
• Шаблон c9s-config.template.yaml, helpers-ru.md, FORMAT-CAPITAL-GITHUB.md, CLAUDE-bmad-c9s.md
|
||||
• При наличии репозитория: helpers-bmad-v6-en.md (оригинал BMAD v6, только справка)
|
||||
|
||||
✓ 15 Workflow Commands
|
||||
- /workflow-init, /workflow-status
|
||||
- /product-brief, /prd, /tech-spec
|
||||
- /architecture, /solutioning-gate-check
|
||||
- /sprint-planning, /create-story, /dev-story
|
||||
- /brainstorm, /research
|
||||
- /create-agent, /create-workflow, /create-ux-design
|
||||
Исходники v6 (bmad-v6/) в репозитории не изменяются и не копируются как основные скиллы.
|
||||
|
||||
✓ Configuration system
|
||||
✓ Template engine
|
||||
✓ Status tracking utilities
|
||||
📋 Дальше:
|
||||
|
||||
📋 Next Steps:
|
||||
1️⃣ ${BLUE}Перезапустите Claude Code${NC}
|
||||
|
||||
1️⃣ ${BLUE}Restart Claude Code${NC}
|
||||
Skills will be loaded in new sessions
|
||||
2️⃣ ${BLUE}Скопируйте${NC} ${BMAD_CONFIG_DIR}/c9s-config.template.yaml
|
||||
в корень репозитория результатов как c9s-config.yaml и заполните пути.
|
||||
|
||||
2️⃣ ${BLUE}Open your project${NC}
|
||||
Navigate to the project you want to use BMAD with
|
||||
3️⃣ ${BLUE}Инициализация:${NC} /c9s-init (скилл bmad-master-c9s)
|
||||
|
||||
3️⃣ ${BLUE}Initialize BMAD${NC}
|
||||
Run: /workflow-init
|
||||
This sets up BMAD structure in your project
|
||||
4️⃣ ${BLUE}Статус:${NC} /c9s-status
|
||||
|
||||
4️⃣ ${BLUE}Check status${NC}
|
||||
Run: /workflow-status
|
||||
See your project status and get recommendations
|
||||
📚 Документация после установки:
|
||||
${BMAD_CONFIG_DIR}/CLAUDE-bmad-c9s.md
|
||||
${BMAD_CONFIG_DIR}/FORMAT-CAPITAL-GITHUB.md
|
||||
${BMAD_CONFIG_DIR}/helpers-ru.md
|
||||
|
||||
📚 Verification:
|
||||
ls -la ~/.claude/skills/bmad/core/bmad-master/SKILL.md
|
||||
ls -la ~/.claude/commands/bmad/workflow-init.md
|
||||
📚 Исходники пакета в репозитории:
|
||||
${BMAD_C9S_DIR}/
|
||||
|
||||
📚 Documentation:
|
||||
README: ${SCRIPT_DIR}/README.md
|
||||
Проверка:
|
||||
ls -la ~/.claude/skills/bmad/core/bmad-master-c9s/SKILL.md
|
||||
ls -la ~/.claude/commands/bmad/c9s-init.md
|
||||
|
||||
${GREEN}✓ BMAD Method v6 is ready!${NC}
|
||||
|
||||
Need help? Visit: https://github.com/aj-geddes/claude-code-bmad-skills/issues
|
||||
${GREEN}✓ BMAD-c9s готов.${NC}
|
||||
EOF
|
||||
}
|
||||
|
||||
@@ -254,23 +251,26 @@ EOF
|
||||
###############################################################################
|
||||
|
||||
main() {
|
||||
log_header "BMAD Method v${BMAD_VERSION} Installer"
|
||||
log_header "BMAD-c9s v${C9S_VERSION} — установщик"
|
||||
|
||||
if [ ! -d "${BMAD_C9S_DIR}" ]; then
|
||||
echo "✗ Каталог bmad-c9s не найден: ${BMAD_C9S_DIR}"
|
||||
echo " Запускайте скрипт из корня репозитория claude-code-bmad-skills."
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# Check if Claude directory exists
|
||||
if [ ! -d "${CLAUDE_DIR}" ]; then
|
||||
log_info "Creating Claude Code directory: ${CLAUDE_DIR}"
|
||||
mkdir -p "${CLAUDE_DIR}"
|
||||
fi
|
||||
|
||||
# Perform installation
|
||||
create_directories
|
||||
install_skills
|
||||
install_config
|
||||
install_templates
|
||||
install_utils
|
||||
install_docs_and_helpers
|
||||
install_commands
|
||||
|
||||
# Verify
|
||||
if verify_installation; then
|
||||
print_next_steps
|
||||
exit 0
|
||||
@@ -280,5 +280,4 @@ main() {
|
||||
fi
|
||||
}
|
||||
|
||||
# Run installation
|
||||
main "$@"
|
||||
|
||||
Reference in New Issue
Block a user