Phase 2 Task 8 of LLM-first router overhaul.
- tools/router-config.mjs: 4 constants (CLASSIFIER_MODEL='claude-sonnet-4-6',
REVIEWER_MODEL='claude-opus-4-7', INHERITANCE_MAX_AGE_MIN=30,
REVIEWER_MAX_NEIGHBOR_EPISODES=10). Sonnet 4.6 ID resolved via ProxyAPI
/v1/models 2026-05-25 — only alias 'claude-sonnet-4-6' is exposed (no dated
YYYYMMDD form on this reseller); alias is canonical here.
- docs/registry/nodes.yaml: capabilities: line added to all 85 nodes
(1-2 sentences describing what each node DOES, not when to choose it —
classifier infers selection from capabilities + user prompt). Generated
by Sonnet subagent from CLAUDE.md §3.x + Tooling §4.X attribute blocks
+ spec §18.3 format. Spot-checked + verified no forbidden 'use when' framing.
- docs/registry/schema.json: +capabilities top-level node property
(type:string minLength:1). G12 'permissive' note in plan was stale —
schema had additionalProperties:false; explicit extension is the
cleanest compliant path.
Verify (plan Step 2): nodes=85 caps=85, exit 0.
Tests: tools/router-config.test.mjs 4/4 PASS + tools/registry-load.test.mjs
11/11 PASS (Ajv schema-validate on amended schema GREEN).
I-1: weight range 0-1 added to classification + file_pattern trigger
variants (раньше было только на keyword) — иначе weight=50 silent
ranking-bug в Task 3 indexByTrigger.
I-2: additionalProperties:false на 3 trigger-variant объекты — ясная
ajv-ошибка при mixed-key (keyword+classification одновременно).
I-3: additionalProperties:false на definitions.node и definitions.chain
— typo ("categori" / "keywrod") теперь reject'ится, не silently
accepted.
Smoke-проверка: 3 теста — weight=50 reject, typo categori reject, valid
accept. ajv compile OK.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Schema поддерживает: id/name/slug/category/status, триггеры трёх видов
(keyword/classification/file_pattern), границы (adr/pair), членство в
цепочках L1-L16, dormancy/deferred-статус.
README — заглушка, наполнится в Task 13.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>