feat: разворачивание комка operations — 9 навыков (роутер-реестр)

Эпик роутер-реестр, спека v2 §2, этап 1. Зонтик operations развёрнут в
9 под-узлов #51a..#51i. process-doc уже был вынесен карточкой
(operations-process-doc.contract.json) — ей заведён узел #51d.

- 8 новых карточек: capacity-plan, change-request, compliance-tracking,
  process-optimization, risk-assessment, runbook, status-report, vendor-review
- process-doc — узел #51d на существующую карточку operations:process-doc
- nodes.yaml: узел #51 → #51a..#51i; триггеры распределены; ссылка L4 → operations:runbook
- зонтик убран; registry-load.test: 138 узлов / 130 active

Регрессия (без 5 pre-existing node:test файлов): 4365 passed, exit 0.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
Дмитрий
2026-06-18 23:37:05 +03:00
parent 08c951a4b8
commit 65224b268c
12 changed files with 351 additions and 27 deletions
@@ -1,12 +0,0 @@
{
"skill": "operations",
"kind": "external",
"needs": ["задача по бизнес-процессу (документ/runbook/риск/capacity)"],
"produces": ["процессный артефакт (process-doc/runbook/risk/capacity/...)"],
"constraints": ["зонтик 9 скилов, 0 lifecycle-хуков", "process-doc → Mermaid-исходник рендерит mermaid (#37)", "НЕ as-is анализ из кода (process-analysis)"],
"preview-form": "outline",
"defaults": ["скил под тип артефакта"],
"key-decisions": ["какой из 9 скилов под задачу"],
"acceptance-criteria": ["процессный артефакт полон (шаги/владельцы)"],
"source": { "version": "n/a", "hash": "0000000000000000000000000000000000000000000000000000000000000000", "path": "" }
}
@@ -0,0 +1,28 @@
{
"skill": "operations:capacity-plan",
"kind": "external",
"needs": [
"workload/ресурсы для анализа ёмкости"
],
"produces": [
"прогноз utilization + рекомендации hire/deprioritize"
],
"constraints": [
"под-навык зонтика operations (бизнес-процессы)"
],
"preview-form": "outline",
"defaults": [
"capacity-plan — планирование ёмкости ресурсов"
],
"key-decisions": [
"узкие места по ресурсам"
],
"acceptance-criteria": [
"ёмкость спрогнозирована"
],
"source": {
"version": "n/a",
"hash": "0000000000000000000000000000000000000000000000000000000000000000",
"path": ""
}
}
@@ -0,0 +1,28 @@
{
"skill": "operations:change-request",
"kind": "external",
"needs": [
"предлагаемое изменение системы/процесса"
],
"produces": [
"change request: impact-анализ + rollback-план"
],
"constraints": [
"под-навык зонтика operations (бизнес-процессы)"
],
"preview-form": "outline",
"defaults": [
"change-request — управление изменениями (CAB)"
],
"key-decisions": [
"риск и rollback"
],
"acceptance-criteria": [
"change задокументирован с rollback"
],
"source": {
"version": "n/a",
"hash": "0000000000000000000000000000000000000000000000000000000000000000",
"path": ""
}
}
@@ -0,0 +1,28 @@
{
"skill": "operations:compliance-tracking",
"kind": "external",
"needs": [
"требование комплаенса для отслеживания"
],
"produces": [
"трекинг комплаенса + audit-readiness (SOC2/ISO/GDPR)"
],
"constraints": [
"под-навык зонтика operations (бизнес-процессы)"
],
"preview-form": "outline",
"defaults": [
"compliance-tracking — отслеживание требований"
],
"key-decisions": [
"какие требования и сроки"
],
"acceptance-criteria": [
"комплаенс отслеживается"
],
"source": {
"version": "n/a",
"hash": "0000000000000000000000000000000000000000000000000000000000000000",
"path": ""
}
}
@@ -0,0 +1,28 @@
{
"skill": "operations:process-optimization",
"kind": "external",
"needs": [
"неэффективный процесс для улучшения"
],
"produces": [
"оптимизация: устранение узких мест/лишних шагов"
],
"constraints": [
"под-навык зонтика operations (бизнес-процессы)"
],
"preview-form": "outline",
"defaults": [
"process-optimization — улучшение процессов"
],
"key-decisions": [
"где bottleneck"
],
"acceptance-criteria": [
"процесс оптимизирован"
],
"source": {
"version": "n/a",
"hash": "0000000000000000000000000000000000000000000000000000000000000000",
"path": ""
}
}
@@ -0,0 +1,28 @@
{
"skill": "operations:risk-assessment",
"kind": "external",
"needs": [
"проект/вендор/процесс для оценки рисков"
],
"produces": [
"risk register: идентификация, оценка, митигация"
],
"constraints": [
"под-навык зонтика operations (бизнес-процессы)"
],
"preview-form": "outline",
"defaults": [
"risk-assessment — оценка операционных рисков"
],
"key-decisions": [
"какие риски критичны"
],
"acceptance-criteria": [
"риски оценены и митигированы"
],
"source": {
"version": "n/a",
"hash": "0000000000000000000000000000000000000000000000000000000000000000",
"path": ""
}
}
@@ -0,0 +1,28 @@
{
"skill": "operations:runbook",
"kind": "external",
"needs": [
"повторяемая операционная задача"
],
"produces": [
"runbook: пошаговые команды, troubleshooting, rollback, эскалация"
],
"constraints": [
"под-навык зонтика operations (бизнес-процессы)"
],
"preview-form": "outline",
"defaults": [
"runbook — операционный пошаговый гайд"
],
"key-decisions": [
"шаги и эскалация"
],
"acceptance-criteria": [
"runbook повторяемо исполним"
],
"source": {
"version": "n/a",
"hash": "0000000000000000000000000000000000000000000000000000000000000000",
"path": ""
}
}
@@ -0,0 +1,28 @@
{
"skill": "operations:status-report",
"kind": "external",
"needs": [
"данные проекта для статус-отчёта"
],
"produces": [
"статус: KPI, риски, action items (green/yellow/red)"
],
"constraints": [
"под-навык зонтика operations (бизнес-процессы)"
],
"preview-form": "outline",
"defaults": [
"status-report — отчёт о статусе"
],
"key-decisions": [
"что эскалировать"
],
"acceptance-criteria": [
"статус-отчёт читаем и actionable"
],
"source": {
"version": "n/a",
"hash": "0000000000000000000000000000000000000000000000000000000000000000",
"path": ""
}
}
@@ -0,0 +1,28 @@
{
"skill": "operations:vendor-review",
"kind": "external",
"needs": [
"вендор для оценки"
],
"produces": [
"оценка вендора: TCO, риски, рекомендация"
],
"constraints": [
"под-навык зонтика operations (бизнес-процессы)"
],
"preview-form": "outline",
"defaults": [
"vendor-review — оценка вендора"
],
"key-decisions": [
"renew vs replace"
],
"acceptance-criteria": [
"вендор оценён с TCO"
],
"source": {
"version": "n/a",
"hash": "0000000000000000000000000000000000000000000000000000000000000000",
"path": ""
}
}
+120 -8
View File
@@ -1327,26 +1327,138 @@ nodes:
attributes:
tooling_section: "§4.25 #50"
- id: "#51"
name: "operations"
slug: "operations"
- id: "#51a"
name: "operations-capacity-plan"
slug: "operations:capacity-plan"
category: "off-phase"
subcategory: "business-process"
status: "active"
dormancy_reason: null
capabilities: "Плагин с 9 скилами для документирования и оптимизации бизнес-процессов: process-doc, runbook, capacity-plan, risk-assessment, compliance-tracking, change-request, vendor-review, status-report."
capabilities: "Анализ ёмкости ресурсов + прогноз utilization (hire/deprioritize)."
triggers:
- {keyword: "capacity plan", weight: 1.0}
boundaries: []
chain_membership: []
attributes:
tooling_section: "§4.26 #51"
- id: "#51b"
name: "operations-change-request"
slug: "operations:change-request"
category: "off-phase"
subcategory: "business-process"
status: "active"
dormancy_reason: null
capabilities: "Change request: impact-анализ + rollback-план (CAB)."
triggers: []
boundaries: []
chain_membership: []
attributes:
tooling_section: "§4.26 #51"
- id: "#51c"
name: "operations-compliance-tracking"
slug: "operations:compliance-tracking"
category: "off-phase"
subcategory: "business-process"
status: "active"
dormancy_reason: null
capabilities: "Отслеживание комплаенса + audit-readiness (SOC2/ISO/GDPR)."
triggers: []
boundaries: []
chain_membership: []
attributes:
tooling_section: "§4.26 #51"
- id: "#51d"
name: "operations-process-doc"
slug: "operations:process-doc"
category: "off-phase"
subcategory: "business-process"
status: "active"
dormancy_reason: null
capabilities: "Структурированная документация бизнес-процесса (flowchart, RACI, SOP)."
triggers:
- {keyword: "бизнес-процесс документ", weight: 1.0}
boundaries: []
chain_membership: []
attributes:
tooling_section: "§4.26 #51"
- id: "#51e"
name: "operations-process-optimization"
slug: "operations:process-optimization"
category: "off-phase"
subcategory: "business-process"
status: "active"
dormancy_reason: null
capabilities: "Оптимизация процесса: устранение узких мест и лишних шагов."
triggers:
- {keyword: "документирование/оптимизация бизнес-процессов", weight: 1.0}
- {keyword: "бизнес-процесс документ", weight: 1.0}
- {keyword: "runbook", weight: 1.0}
- {keyword: "capacity plan", weight: 1.0}
boundaries: []
chain_membership: []
attributes:
tooling_section: "§4.26 #51"
- id: "#51f"
name: "operations-risk-assessment"
slug: "operations:risk-assessment"
category: "off-phase"
subcategory: "business-process"
status: "active"
dormancy_reason: null
capabilities: "Оценка операционных рисков: risk register (идентификация, оценка, митигация)."
triggers:
- {keyword: "risk assessment", weight: 1.0}
boundaries: []
chain_membership: []
attributes:
tooling_section: "§4.26 #51"
- id: "#51g"
name: "operations-runbook"
slug: "operations:runbook"
category: "off-phase"
subcategory: "business-process"
status: "active"
dormancy_reason: null
capabilities: "Операционный runbook: пошаговые команды, troubleshooting, rollback, эскалация."
triggers:
- {keyword: "runbook", weight: 1.0}
boundaries: []
chain_membership: ["L4"]
attributes:
tooling_section: "§4.26 #51"
install: "claude plugin install operations@knowledge-work-plugins"
- id: "#51h"
name: "operations-status-report"
slug: "operations:status-report"
category: "off-phase"
subcategory: "business-process"
status: "active"
dormancy_reason: null
capabilities: "Статус-отчёт: KPI, риски, action items (green/yellow/red)."
triggers: []
boundaries: []
chain_membership: []
attributes:
tooling_section: "§4.26 #51"
- id: "#51i"
name: "operations-vendor-review"
slug: "operations:vendor-review"
category: "off-phase"
subcategory: "business-process"
status: "active"
dormancy_reason: null
capabilities: "Оценка вендора: TCO, риски, рекомендация (renew vs replace)."
triggers: []
boundaries: []
chain_membership: []
attributes:
tooling_section: "§4.26 #51"
- id: "#52"
name: "process-modeling"
slug: "process-modeling"
@@ -2408,7 +2520,7 @@ chains:
sequence:
- "adr-kit:adr"
- "#37"
- "#51"
- "operations:runbook"
- "#52"
L5:
+2 -2
View File
@@ -117,8 +117,8 @@
| hookify (1–2) | ⏸ развилка владельцу (slug hookify:hookify кривой) | |
| product-management (8) | ✅ DONE | 0258b9d (pushed) |
| design-plugin (7) | ✅ DONE | bf3d557 (committed, push deferred — observer-race) |
| marketing-plugin (8) | ✅ DONE | этот коммит (push deferred) |
| operations (8) | ⬜ | |
| marketing-plugin (8) | ✅ DONE | committed (push deferred) |
| operations (9: +process-doc узел) | ✅ DONE | этот коммит (push deferred) |
| finance-plugin (78) | ⬜ | |
| brand-voice (3) | ⬜ | |
| ui-ux-pro-max (7, +правка PSR) | ⬜ | |
+5 -5
View File
@@ -5,9 +5,9 @@ import { loadRegistry, clearCache, findByClassification, findByKeyword, findActi
describe('registry-load', () => {
beforeEach(() => clearCache());
it('loads registry (130 nodes: разворачивание #33/#19/#57/#36/#42/#46/#74 комков 18.06.2026)', () => {
it('loads registry (138 nodes: разворачивание #33/#19/#57/#36/#42/#46/#74/#51 комков 18.06.2026)', () => {
const r = loadRegistry();
expect(r.nodes).toHaveLength(130);
expect(r.nodes).toHaveLength(138);
expect(r.version).toBe('0.1.0');
});
@@ -46,9 +46,9 @@ describe('registry-load', () => {
it('findActiveNodes excludes non-active (nodes.yaml registry)', () => {
const r = loadRegistry();
const active = findActiveNodes(r);
// 130 nodes total; #1 historic, #17 dormant, #44/#50/#54/#67/#82/#83 deferred;
// развёрнуты: #33→2, #19→14, #57→7, #36→2, #42→8, #46→7, #74 marketing→8 (+7) → 122 active
expect(active).toHaveLength(122);
// 138 nodes total; #1 historic, #17 dormant, #44/#50/#54/#67/#82/#83 deferred;
// развёрнуты: #33→2,#19→14,#57→7,#36→2,#42→8,#46→7,#74→8,#51 operations→9 (+8) → 130 active
expect(active).toHaveLength(130);
expect(active.map(n => n.id)).toContain('#18');
expect(active.map(n => n.id)).toContain('#19a');
expect(active.map(n => n.id)).not.toContain('#1');