8.9 KiB
8.9 KiB
name, description, allowed-tools
| name | description | allowed-tools |
|---|---|---|
| c9s-monorepo-component-git | Монорепозиторий кода: только ветки component/ от dev, коммиты только в них. По команде — merge в dev и запись в results_commits.yaml (SHA, username, merge_title, дата) в репозитории результатов (.c9s/ проекта, см. GIT-COMMITS-POLICY §2.4), не в монорепо. Прямые коммиты в dev и прочие ветки запрещены. Активируй при старте работы над компонентом или при «смерджи компонент в dev», «зафиксируй merge для взноса». | Read, Write, Edit, Bash, Glob, Grep, TodoWrite |
Git монорепозитория: ветки компонентов и учёт merge (c9s-monorepo-component-git)
Назначение
Единственный скилл, который задаёт обязательные правила git для монорепозитория кода (например Coopenomics monocoop).
Жёсткие правила (без исключений)
- Запрещены коммиты напрямую в
devи в любую ветку, кроме ветки компонента по соглашению ниже. - Разрешены коммиты только в ветке вида
component/<component_slug>-<work_slug>, созданной от актуальногоdev. component_slug— имя каталога компонента подcomponents/(напримерdesktop,controller), либо значениеactive_component_git_slugизc9s-config.yaml.work_slug— краткий slug от русского или рабочего названия задачи/результата (транслит, дефисы, нижний регистр); если одна долгая линия работы на компонент — допустимоcomponent/<component_slug>без суффикса только если так согласовано с пользователем.- Merge в
dev— только по явной команде пользователя в конце работы (не по собственной инициативе агента). - После успешного merge — записать в
results_commits.yaml(путь по GIT-COMMITS-POLICY §2.4) полный SHA,usernameиmerge_title(первая строка merge-коммита), плюс остальные поля по шаблону. Новая запись — в началоcommits. Затем commit + push в git репозитория результатов для этого файла. При необходимости обновитьlast_merge_to_dev_commit_hashвc9s-config.yaml.
Остальные скиллы (developer, bmad-master-c9s и т.д.) не отменяют эти правила.
Обязательные ссылки
- GIT-COMMITS-POLICY.md
- templates/results_commits.template.yaml
- config/c9s-config.template.yaml — поля
monorepo_root,active_component_git_slug,results_commits_log
Сценарий A: начало работы над компонентом
- Определить
monorepo_root(корень git монорепозитория) — изc9s-config.yamlили путь от пользователя. git fetch.git checkout dev→git pull(или эквивалент обновленияdev).- Согласовать с пользователем
component_slugи краткое название работы дляwork_slug. git checkout -b component/<component_slug>-<work_slug>от текущегоdev.- Дальнейшие коммиты только в этой ветке (осмысленные сообщения; по желанию команды — на русском).
Если ветка уже существует локально — можно checkout и продолжить, не нарушая запрет на коммиты в dev.
Сценарий B: промежуточные коммиты
- Выполнять
git add/git commitтолько на ветке компонента. - Не переключаться на
devдля коммита правок.
Сценарий C: завершение — merge в dev и учёт хэша
Только по команде пользователя («смерджи ветку компонента в dev», «зафиксируй merge для паевого взноса» и т.п.):
- Убедиться, что нет незакоммиченных изменений (или закоммитить их в ветке компонента).
git checkout dev→git pull.git mergeветку компонента (предпочтительно--no-ff, чтобы наdevпоявился отдельный merge-коммит — его SHA проще однозначно использовать для взноса; если политика команды — только FF, зафиксировать SHA того коммита, на который указываетdevпосле merge).- Получить SHA и заголовок merge:
git rev-parse HEAD; первая строка сообщения коммита —git log -1 --format=%s HEAD(для поляmerge_titleв журнале). git push origin dev— если пользователь просил отправить (и это разрешено политикой).
Запись в results_commits.yaml
- Прочитать
c9s-config.yaml:results_root,active_project_slug,username(для записи в журнале), опциональноactive_component_path,results_commits_log. Еслиusernameпуст — уточнить у оператора, не подставлять выдуманное значение. - Вычислить
projectRoot={results_root}/{active_project_slug}. Путь к журналу:- если задан
results_commits_log: при абсолютном пути — как есть; иначе{projectRoot}/{results_commits_log}; - иначе
{projectRoot}/.c9s/results_commits.yaml.
- если задан
- Убедиться, что каталог (например
.c9s/) существует; если файла нет — создать из templates/results_commits.template.yaml. - Добавить в начало массива
commitsэлемент:
- 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.
- Сохранить YAML (существующие записи не удалять).
- В корне 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.
Заметки для LLM
- При любой неоднозначности (имя ветки, FF vs merge commit) — спросить пользователя, не нарушая запрет на коммиты в
dev. - Не выполнять
git push --forceна общие ветки без явного указания. - Путь к монорепо может отличаться от
results_root; не путать каталоги.