diff --git a/docs/registry/nodes.yaml b/docs/registry/nodes.yaml index 9ca32374..51397e5f 100644 --- a/docs/registry/nodes.yaml +++ b/docs/registry/nodes.yaml @@ -30,7 +30,7 @@ nodes: - {keyword: "commits", weight: 1.0} - {keyword: "открытые вопросы", weight: 1.0} boundaries: [] - chain_membership: [] + chain_membership: ["L9"] attributes: tooling_section: "§2.4 #3" @@ -110,7 +110,7 @@ nodes: - {keyword: "секреты в diff", weight: 1.0} - {keyword: "pre-commit hook", weight: 1.0} boundaries: [] - chain_membership: [] + chain_membership: ["L15"] attributes: tooling_section: "§2.4 #8" @@ -145,7 +145,7 @@ nodes: - {keyword: "roster auto-detect", weight: 1.0} boundaries: - {pair: "#1", relation: "replaces"} - chain_membership: [] + chain_membership: ["L7", "L13"] attributes: tooling_section: "§3.5 #10" install: "composer require laravel/boost --dev" @@ -177,7 +177,7 @@ nodes: - {keyword: "статанализ php", weight: 1.0} - {keyword: "типы", weight: 1.0} boundaries: [] - chain_membership: [] + chain_membership: ["L14"] attributes: tooling_section: "§3.5 #12" install: "composer stan" @@ -274,7 +274,7 @@ nodes: boundaries: - {adr: "ADR-011", role: "hard-floor source"} - {pair: "#30", relation: "paired stack"} - chain_membership: ["L1", "L8"] + chain_membership: [] attributes: tooling_section: "§3.3 #19" install: "marketplace plugin, enabled in ~/.claude/settings.json" @@ -292,7 +292,7 @@ nodes: - {keyword: "тест", weight: 1.0} - {file_pattern: "tests/**/*.php", weight: 1.0} boundaries: [] - chain_membership: ["L8"] + chain_membership: ["L13"] attributes: tooling_section: "§3.2 #18" install: "composer require pestphp/pest --dev" @@ -402,7 +402,7 @@ nodes: - {keyword: "security static analysis", weight: 1.0} boundaries: - {relation: "связка binary+mcp"} - chain_membership: [] + chain_membership: ["L6", "L15"] attributes: tooling_section: "§5.1 #25" install: "npm run sast" @@ -531,7 +531,7 @@ nodes: - {keyword: "обязательный канал", weight: 1.0} boundaries: - {relation: "CLAUDE.md §5 п.10 + PSR_v1 R10.1"} - chain_membership: [] + chain_membership: ["L12"] attributes: tooling_section: "§4.7 #33" install: "enabledPlugins.claude-md-management@claude-plugins-official в ~/.claude/settings.json" @@ -546,7 +546,7 @@ nodes: triggers: - {keyword: "отладка production runtime errors", weight: 1.0} boundaries: [] - chain_membership: [] + chain_membership: ["L8", "L13"] attributes: tooling_section: "§4.8 #34" @@ -563,7 +563,7 @@ nodes: - {keyword: "pest-race", weight: 1.0} boundaries: - {relation: "read-only"} - chain_membership: [] + chain_membership: ["L8", "L13"] attributes: tooling_section: "§4.9 #35" @@ -580,7 +580,7 @@ nodes: - {keyword: "enforcement", weight: 1.0} boundaries: - {relation: "adr-judge lefthook job 9"} - chain_membership: [] + chain_membership: ["L4", "L5"] attributes: tooling_section: "§4.11 #36" install: "claude plugin install adr-kit@rvdbreemen-adr-kit" @@ -596,7 +596,7 @@ nodes: - {keyword: "c4", weight: 1.0} - {keyword: "architecture-диаграммы", weight: 1.0} boundaries: [] - chain_membership: [] + chain_membership: ["L4"] attributes: tooling_section: "§4.12 #37" install: "vendored в .claude/skills/mermaid/" @@ -611,7 +611,7 @@ nodes: triggers: - {keyword: "справочник архитектурных паттернов", weight: 1.0} boundaries: [] - chain_membership: [] + chain_membership: ["L5"] attributes: tooling_section: "§4.13 #38" install: "claude plugin install architecture-patterns@claude-skills" @@ -628,7 +628,7 @@ nodes: - {keyword: "diff", weight: 1.0} - {keyword: "supply-chain", weight: 1.0} boundaries: [] - chain_membership: [] + chain_membership: ["L6", "L15"] attributes: tooling_section: "§4.14 #39" install: "enabledPlugins subsets из trailofbits/skills" @@ -644,7 +644,7 @@ nodes: - {keyword: "inline-блокировка уязвимых паттернов", weight: 1.0} boundaries: - {relation: "блокирующий PreToolUse (sys.exit 2)"} - chain_membership: [] + chain_membership: ["L6"] attributes: tooling_section: "§4.15 #40" install: "claude plugin install security-guidance@claude-plugins-official" @@ -660,7 +660,7 @@ nodes: - {keyword: "prd эпик issue код", weight: 1.0} - {keyword: "dev-проекты", weight: 1.0} boundaries: [] - chain_membership: [] + chain_membership: ["L9"] attributes: tooling_section: "§4.16 #41" install: "vendored в .claude/skills/ccpm/" @@ -678,7 +678,7 @@ nodes: - {keyword: "метрики", weight: 1.0} - {keyword: "продуктовые церемонии", weight: 1.0} boundaries: [] - chain_membership: [] + chain_membership: ["L9"] attributes: tooling_section: "§4.17 #42" install: "claude plugin install product-management@knowledge-work-plugins" @@ -695,7 +695,7 @@ nodes: - {keyword: "границы слоёв", weight: 1.0} boundaries: - {relation: "lefthook job 10"} - chain_membership: [] + chain_membership: ["L5", "L14"] attributes: tooling_section: "§4.18 #43" install: "composer require --dev deptrac/deptrac" @@ -759,7 +759,7 @@ nodes: - {keyword: "introspection openapi/rest-спек", weight: 1.0} boundaries: - {relation: "read-only"} - chain_membership: [] + chain_membership: ["L7"] attributes: tooling_section: "§4.22 #47" install: "npm install @ivotoby/openapi-mcp-server (в .mcp.json)" @@ -776,7 +776,7 @@ nodes: - {keyword: "eval", weight: 1.0} boundaries: - {relation: "только вручную/CI, никогда в хук"} - chain_membership: [] + chain_membership: ["L10"] attributes: tooling_section: "§4.23 #48" install: "npm install --save-dev promptfoo" @@ -791,7 +791,7 @@ nodes: triggers: - {keyword: "классический ml-воркфлоу", weight: 1.0} boundaries: [] - chain_membership: [] + chain_membership: ["L10"] attributes: tooling_section: "§4.24 #49" install: "vendored в .claude/skills/data-scientist/" @@ -820,7 +820,7 @@ nodes: triggers: - {keyword: "документирование/оптимизация бизнес-процессов", weight: 1.0} boundaries: [] - chain_membership: [] + chain_membership: ["L4"] attributes: tooling_section: "§4.26 #51" install: "claude plugin install operations@knowledge-work-plugins" @@ -837,7 +837,7 @@ nodes: - {keyword: "bpmn 2.0", weight: 1.0} boundaries: - {relation: "self-authored project skill"} - chain_membership: [] + chain_membership: ["L3", "L4"] attributes: tooling_section: "§4.27 #52" @@ -853,7 +853,7 @@ nodes: - {keyword: "discovery из кода", weight: 1.0} boundaries: - {relation: "self-authored project skill; ADR-009 граница с #55"} - chain_membership: [] + chain_membership: ["L3"] attributes: tooling_section: "§4.28 #53" @@ -884,7 +884,7 @@ nodes: - {keyword: "feature system режим", weight: 1.0} boundaries: - {adr: "ADR-009", role: "граница с #53 process-analysis: discovery-interview = интервью человека; process-analysis = discovery из кода"} - chain_membership: [] + chain_membership: ["L1", "L2"] attributes: tooling_section: "§4.30 #55" @@ -899,7 +899,7 @@ nodes: - {keyword: "создание standalone-скилов", weight: 1.0} - {keyword: "eval", weight: 1.0} boundaries: [] - chain_membership: [] + chain_membership: ["L11"] attributes: tooling_section: "§4.31 #56" @@ -913,7 +913,7 @@ nodes: triggers: - {keyword: "разработка claude-плагинов", weight: 1.0} boundaries: [] - chain_membership: [] + chain_membership: ["L11"] attributes: tooling_section: "§4.32 #57" @@ -928,7 +928,7 @@ nodes: - {keyword: "генерация хуков (только по явному /hookify)", weight: 1.0} boundaries: - {adr: "ADR-010", role: "HK1 pre-check коллизии с существующими хуками перед генерацией"} - chain_membership: [] + chain_membership: ["L11"] attributes: tooling_section: "§4.33 #58" @@ -996,7 +996,7 @@ nodes: - {keyword: "дрейф reconcile", weight: 1.0} boundaries: - {adr: "ADR-012", role: "граница с process-*/D3/ru-tax; аудит кода биллинга, не налогов и не процесса"} - chain_membership: [] + chain_membership: ["L13"] attributes: tooling_section: "§4.37 #62" @@ -1015,7 +1015,7 @@ nodes: - {keyword: "выгрузка бухгалтеру", weight: 1.0} boundaries: - {adr: "ADR-012", role: "закрывает РФ-gap US-GAAP-плагина #61; ≠ billing-audit #62 (корректность кода), ≠ D1/D2"} - chain_membership: [] + chain_membership: ["L13"] attributes: tooling_section: "§4.38 #63" @@ -1032,7 +1032,7 @@ nodes: - {keyword: "удаление мёртвого кода", weight: 1.0} boundaries: - {adr: "ADR-013", role: "BT1 vs Pint (трансформация vs форматирование); BT2 vs Larastan (комплементарны); BT3 vs deptrac"} - chain_membership: [] + chain_membership: ["L14"] attributes: tooling_section: "§4.39 #64" install: "composer require rector/rector --dev" @@ -1048,7 +1048,7 @@ nodes: - {keyword: "метрики качества/сложности/архитектуры php-кода", weight: 1.0} boundaries: - {adr: "ADR-013", role: "BT4 vs Pint/Larastan; уникум — оси complexity + architecture"} - chain_membership: [] + chain_membership: ["L14"] attributes: tooling_section: "§4.40 #65" install: "composer require nunomaduro/phpinsights --dev" @@ -1100,7 +1100,7 @@ nodes: - {keyword: "xss", weight: 1.0} boundaries: - {adr: "ADR-014", role: "IS1 ≠ Semgrep #25 (динамика vs статика); IS2 ≠ Nuclei #69 (глубина vs широта)"} - chain_membership: [] + chain_membership: ["L15"] attributes: tooling_section: "§4.43 #68" @@ -1115,7 +1115,7 @@ nodes: - {keyword: "известные уязвимости/экспозиция/слабый tls снаружи", weight: 1.0} boundaries: - {adr: "ADR-014", role: "IS2 ≠ ZAP #68 (широта vs глубина — комплементарны)"} - chain_membership: [] + chain_membership: ["L15"] attributes: tooling_section: "§4.44 #69" @@ -1131,7 +1131,7 @@ nodes: - {keyword: ".env/config/заголовки/cookie/secrets/deps", weight: 1.0} boundaries: - {adr: "ADR-014", role: "IS3 ≠ Larastan #12/Semgrep #25; заменил Enlightn (abandoned/L13)"} - chain_membership: [] + chain_membership: ["L15"] attributes: tooling_section: "§4.45 #70" @@ -1146,7 +1146,7 @@ nodes: - {keyword: "аудит пдн / соответствие 152-фз", weight: 1.0} boundaries: - {adr: "ADR-014", role: "IS4 ≠ pg_anonymizer #29 (аудит vs инструмент маскирования); IS5 ≠ D2 (техника vs юридическое оформление)"} - chain_membership: [] + chain_membership: ["L15"] attributes: tooling_section: "§4.46 #71" @@ -1163,7 +1163,7 @@ nodes: - {keyword: "что защищать первым", weight: 1.0} boundaries: - {adr: "ADR-014", role: "IS6 ≠ Trail of Bits #39 (портал+STRIDE+going-public vs generic deep code-audit)"} - chain_membership: [] + chain_membership: ["L15"] attributes: tooling_section: "§4.47 #72" @@ -1179,7 +1179,7 @@ nodes: - {keyword: "go/no-go", weight: 1.0} boundaries: - {adr: "ADR-014", role: "IS7 ≠ audit-portal (только безопасность + go-live-вердикт vs полный 14-фазный аудит)"} - chain_membership: [] + chain_membership: ["L15"] attributes: tooling_section: "§4.48 #73" @@ -1199,7 +1199,7 @@ nodes: - {keyword: "performance-report", weight: 1.0} boundaries: - {adr: "ADR-015", role: "MKT1 vs C2/C3; MKT2 vs product-management #42; MKT3 vs marketingskills #75 (решатель, не материал)"} - chain_membership: [] + chain_membership: ["L16"] attributes: tooling_section: "§4.49 #74" install: "claude plugin install marketing@knowledge-work-plugins" @@ -1260,7 +1260,7 @@ nodes: - {keyword: "маркетинг 152-фз согласия на рассылки", weight: 1.0} boundaries: - {adr: "ADR-015", role: "MKT9 — 152-ФЗ cross-ref #71; закрывает РФ-специфику маркетинга"} - chain_membership: [] + chain_membership: ["L16"] attributes: tooling_section: "§4.52 #77" @@ -1280,7 +1280,7 @@ nodes: - {keyword: "поведение", weight: 1.0} boundaries: - {adr: "ADR-015", role: "MKT8 READ-ONLY; активация при живом лендинге (Б-1)"} - chain_membership: [] + chain_membership: ["L16"] attributes: tooling_section: "§4.53 #78" @@ -1296,7 +1296,7 @@ nodes: - {keyword: "частотность запросов рф", weight: 1.0} boundaries: - {adr: "ADR-015", role: "MKT8 — Direct-мутации НЕ активированы; только Wordstat-модуль (5 read-only tools)"} - chain_membership: [] + chain_membership: ["L16"] attributes: tooling_section: "§4.54 #79" @@ -1313,7 +1313,7 @@ nodes: - {keyword: "получение аналитики канала", weight: 1.0} boundaries: - {adr: "ADR-015", role: "MKT8 — SESSION_STRING только .env; выделенный аккаунт"} - chain_membership: [] + chain_membership: ["L16"] attributes: tooling_section: "§4.55 #80" @@ -1329,7 +1329,7 @@ nodes: - {keyword: "контент-календарь", weight: 1.0} boundaries: - {adr: "ADR-015", role: "MKT7 AGPL self-host без дистрибуции; покрывает VK-постинг"} - chain_membership: [] + chain_membership: ["L16"] attributes: tooling_section: "§4.56 #81" @@ -1368,20 +1368,133 @@ nodes: chains: L1: - name: "Brainstorming chain" + name: "feature discovery & implementation chain" sequence: + - "#55" - "superpowers:brainstorming" - "superpowers:writing-plans" - - "superpowers:executing-plans" + - "superpowers:subagent-driven-development" triggers: - {classification: "feature"} - {classification: "planning"} - L8: - name: "TDD chain" + L2: + name: "system orientation chain" sequence: - - "superpowers:test-driven-development" - - "#18" + - "#55" + - "audit-portal" + + L3: + name: "as-is ↔ to-be process chain" + sequence: + - "#53" + - "#52" + + L4: + name: "diagram rendering chain" + sequence: + - "#36" + - "#37" + - "#51" + - "#52" + + L5: + name: "architecture triangle chain" + sequence: + - "#36" + - "#38" + - "#43" + + L6: + name: "security layered chain" + sequence: + - "#40" + - "#25" + - "#39" + - "/security-review" + + L7: + name: "integration development chain" + sequence: + - "#47" + - "api-docs" + - "#10" + + L8: + name: "runtime debug chain" + sequence: + - "superpowers:systematic-debugging" + - "#34" + - "#35" triggers: - {classification: "bugfix"} - - {keyword: "tdd"} + - {keyword: "runtime bug"} + + L9: + name: "project management chain" + sequence: + - "#41" + - "#42" + - "#3" + + L10: + name: "LLM feature chain" + sequence: + - "#48" + - "#49" + - "claude-api" + + L11: + name: "Claude infra extension chain" + sequence: + - "#56" + - "#58" + - "#57" + + L12: + name: "CLAUDE.md capture chain" + sequence: + - "#33" + - "claude-md-management:revise-claude-md" + + L13: + name: "finance chain" + sequence: + - "#62" + - "#18" + - "#10" + - "#34" + - "#35" + - "#63" + + L14: + name: "backend-quality chain" + sequence: + - "#64" + - "#65" + - "#12" + - "#43" + + L15: + name: "security go-live chain" + sequence: + - "#73" + - "#8" + - "#25" + - "#70" + - "#39" + - "#71" + - "#72" + - "#69" + - "#68" + + L16: + name: "marketing chain" + sequence: + - "superpowers:brainstorming" + - "#74" + - "#77" + - "#78" + - "#79" + - "#80" + - "#81" diff --git a/tools/registry-load.test.mjs b/tools/registry-load.test.mjs index 5af5fff8..0ee4293b 100644 --- a/tools/registry-load.test.mjs +++ b/tools/registry-load.test.mjs @@ -56,8 +56,9 @@ describe('registry-load', () => { it('findChainsByNode returns chain membership', () => { const r = loadRegistry(); - const tddChains = findChainsByNode(r, 'superpowers:test-driven-development'); - expect(tddChains.map(c => c.chainId)).toContain('L8'); + // L8 = runtime debug chain: systematic-debugging + Sentry (#34) + Redis (#35) + const sentryChains = findChainsByNode(r, '#34'); + expect(sentryChains.map(c => c.chainId)).toContain('L8'); }); it('caches across calls in same process', () => {