feat: разворачивание комка adr-kit — adr + judge (роутер-реестр)
Эпик роутер-реестр, спека v2 §2, этап 1. Зонтик adr-kit развёрнут в 2 содержательные карточки (служебные init/setup/upgrade/lint/migrate/ install-hooks в реестр не входят — решение владельца 18.06). - 2 карточки: adr-kit__adr (ведение ADR) + adr-kit__judge (сверка vs Accepted ADR) - nodes.yaml: узел #36 → #36a/#36b; триггеры (adr→#36a, enforcement→#36b); ссылки L4/L5 обновлены на adr-kit:adr - зонтик adr-kit убран (карточка + узел) - registry-load.test: 110 узлов / 102 active - m3b-node-graph: резолв известного узла #36 → #36a Регрессия (без 5 pre-existing node:test файлов): 4361 passed, exit 0. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -1,12 +0,0 @@
|
||||
{
|
||||
"skill": "adr-kit",
|
||||
"kind": "external",
|
||||
"needs": ["архитектурное решение для фиксации/проверки"],
|
||||
"produces": ["ADR в docs/adr/ + enforcement через adr-judge"],
|
||||
"constraints": ["ADR + adr-judge lefthook job 9 (без LLM)", "НЕ диаграммы (mermaid)", "НЕ справочник паттернов (architecture-patterns)"],
|
||||
"preview-form": "outline",
|
||||
"defaults": ["adr-judge декларативно, без --llm"],
|
||||
"key-decisions": ["что фиксировать как ADR; статус решения"],
|
||||
"acceptance-criteria": ["решение зафиксировано ADR, adr-judge проходит"],
|
||||
"source": { "version": "n/a", "hash": "0000000000000000000000000000000000000000000000000000000000000000", "path": "" }
|
||||
}
|
||||
@@ -0,0 +1,29 @@
|
||||
{
|
||||
"skill": "adr-kit:adr",
|
||||
"kind": "external",
|
||||
"needs": [
|
||||
"намерение принять/записать архитектурное решение"
|
||||
],
|
||||
"produces": [
|
||||
"ADR-файл в docs/adr/ + enforcement-гейт"
|
||||
],
|
||||
"constraints": [
|
||||
"содержательный навык плагина adr-kit",
|
||||
"служебные навыки (init/install-hooks/lint/migrate/setup/upgrade) в реестр не входят"
|
||||
],
|
||||
"preview-form": "outline",
|
||||
"defaults": [
|
||||
"adr — для записи и ведения архитектурных решений"
|
||||
],
|
||||
"key-decisions": [
|
||||
"какое решение фиксировать"
|
||||
],
|
||||
"acceptance-criteria": [
|
||||
"ADR оформлен и enforce-ится"
|
||||
],
|
||||
"source": {
|
||||
"version": "n/a",
|
||||
"hash": "0000000000000000000000000000000000000000000000000000000000000000",
|
||||
"path": ""
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,29 @@
|
||||
{
|
||||
"skill": "adr-kit:judge",
|
||||
"kind": "external",
|
||||
"needs": [
|
||||
"staged diff для сверки против принятых ADR"
|
||||
],
|
||||
"produces": [
|
||||
"вердикт соответствия + пути разрешения нарушения"
|
||||
],
|
||||
"constraints": [
|
||||
"содержательный навык плагина adr-kit",
|
||||
"служебные навыки (init/install-hooks/lint/migrate/setup/upgrade) в реестр не входят"
|
||||
],
|
||||
"preview-form": "outline",
|
||||
"defaults": [
|
||||
"judge — сверка кода против Accepted ADR (lefthook job 9)"
|
||||
],
|
||||
"key-decisions": [
|
||||
"что нарушает ADR"
|
||||
],
|
||||
"acceptance-criteria": [
|
||||
"дифф сверён с ADR до коммита"
|
||||
],
|
||||
"source": {
|
||||
"version": "n/a",
|
||||
"hash": "0000000000000000000000000000000000000000000000000000000000000000",
|
||||
"path": ""
|
||||
}
|
||||
}
|
||||
@@ -838,23 +838,38 @@ nodes:
|
||||
attributes:
|
||||
tooling_section: "§4.9 #35"
|
||||
|
||||
- id: "#36"
|
||||
name: "adr-kit"
|
||||
slug: "adr-kit"
|
||||
- id: "#36a"
|
||||
name: "adr-kit-adr"
|
||||
slug: "adr-kit:adr"
|
||||
category: "off-phase"
|
||||
subcategory: "architecture-tooling"
|
||||
status: "active"
|
||||
dormancy_reason: null
|
||||
capabilities: "Создаёт и хранит Architecture Decision Records (ADR) в `docs/adr/`; `adr-judge` проверяет соответствие кода решениям в lefthook pre-commit job 9 (без LLM-вызовов)."
|
||||
capabilities: "Создаёт и ведёт Architecture Decision Records (ADR) в docs/adr/ + enforcement-гейт."
|
||||
triggers:
|
||||
- {keyword: "архитектурные решения", weight: 1.0}
|
||||
- {keyword: "adr", weight: 1.0}
|
||||
- {keyword: "enforcement", weight: 1.0}
|
||||
- {keyword: "architecture decision record", weight: 1.0}
|
||||
- {keyword: "архитектурное решение", weight: 1.0}
|
||||
boundaries: []
|
||||
chain_membership: ["L4", "L5"]
|
||||
attributes:
|
||||
tooling_section: "§4.11 #36"
|
||||
install: "claude plugin install adr-kit@rvdbreemen-adr-kit"
|
||||
|
||||
- id: "#36b"
|
||||
name: "adr-kit-judge"
|
||||
slug: "adr-kit:judge"
|
||||
category: "off-phase"
|
||||
subcategory: "architecture-tooling"
|
||||
status: "active"
|
||||
dormancy_reason: null
|
||||
capabilities: "Сверяет staged diff против принятых ADR (lefthook pre-commit job 9, без LLM); вердикт + пути разрешения."
|
||||
triggers:
|
||||
- {keyword: "enforcement", weight: 1.0}
|
||||
boundaries:
|
||||
- {relation: "adr-judge lefthook job 9"}
|
||||
chain_membership: ["L4", "L5"]
|
||||
chain_membership: []
|
||||
attributes:
|
||||
tooling_section: "§4.11 #36"
|
||||
install: "claude plugin install adr-kit@rvdbreemen-adr-kit"
|
||||
@@ -2111,7 +2126,7 @@ chains:
|
||||
L4:
|
||||
name: "diagram rendering chain"
|
||||
sequence:
|
||||
- "#36"
|
||||
- "adr-kit:adr"
|
||||
- "#37"
|
||||
- "#51"
|
||||
- "#52"
|
||||
@@ -2119,7 +2134,7 @@ chains:
|
||||
L5:
|
||||
name: "architecture triangle chain"
|
||||
sequence:
|
||||
- "#36"
|
||||
- "adr-kit:adr"
|
||||
- "#38"
|
||||
- "#43"
|
||||
|
||||
|
||||
@@ -112,8 +112,8 @@
|
||||
|---|---|---|
|
||||
| claude-md-management (2) | ✅ DONE | e98ba1e (pushed) |
|
||||
| superpowers (14) | ✅ DONE | 5a7c5c2 (pushed) |
|
||||
| plugin-dev (7) | ✅ DONE | этот коммит |
|
||||
| adr-kit (2: adr, judge) | ⬜ | |
|
||||
| plugin-dev (7) | ✅ DONE | ded5372 (pushed) |
|
||||
| adr-kit (2: adr, judge) | ✅ DONE | этот коммит |
|
||||
| hookify (1–2) | ⬜ | |
|
||||
| product-management (8) | ⬜ | |
|
||||
| design-plugin (7) | ⬜ | |
|
||||
|
||||
@@ -14,7 +14,7 @@ describe('Машина 3-B — граф на реальном реестре', (
|
||||
const reg = loadRegistry({ registryPath, useCache: false });
|
||||
const g = buildNodeGraph(reg);
|
||||
expect(g.nodes.length).toBeGreaterThan(50);
|
||||
expect(resolveNode(g, '#36')).not.toBe(null); // adr-kit by id
|
||||
expect(resolveNode(g, '#36a')).not.toBe(null); // adr-kit:adr by id (#36 развёрнут в #36a/#36b)
|
||||
expect(resolveNode(g, 'mermaid')).not.toBe(null); // by slug
|
||||
expect(resolveNode(g, 'totally-made-up-skill')).toBe(null); // выдумка
|
||||
});
|
||||
|
||||
@@ -5,9 +5,9 @@ import { loadRegistry, clearCache, findByClassification, findByKeyword, findActi
|
||||
describe('registry-load', () => {
|
||||
beforeEach(() => clearCache());
|
||||
|
||||
it('loads registry (109 nodes: разворачивание #33/#19/#57 комков 18.06.2026)', () => {
|
||||
it('loads registry (110 nodes: разворачивание #33/#19/#57/#36 комков 18.06.2026)', () => {
|
||||
const r = loadRegistry();
|
||||
expect(r.nodes).toHaveLength(109);
|
||||
expect(r.nodes).toHaveLength(110);
|
||||
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);
|
||||
// 109 nodes total; #1 historic, #17 dormant, #44/#50/#54/#67/#82/#83 deferred;
|
||||
// развёрнуты комки: #33→2, #19→14, #57 plugin-dev→7 (active +1+13+6) → 82+13+6 = 101 active
|
||||
expect(active).toHaveLength(101);
|
||||
// 110 nodes total; #1 historic, #17 dormant, #44/#50/#54/#67/#82/#83 deferred;
|
||||
// развёрнуты комки: #33→2, #19→14, #57→7, #36 adr-kit→2 (active +1+13+6+1) → 102 active
|
||||
expect(active).toHaveLength(102);
|
||||
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');
|
||||
|
||||
Reference in New Issue
Block a user