#!/usr/bin/env node /** * domain-skill-discipline — дисциплина РЕАЛЬНОГО вызова доменного навыка (дизайн * 2026-06-05 §4 #3): лучший ловец доменных следствий — сам домен-эксперт * (frontend-design про мобильный знает по природе). Поэтому в фазе артефакта * доменный навык надо РЕАЛЬНО вызвать (журнал-проверяемо, принцип K2), а не * пересказывать «что бы он сказал». Чистый ($0): сверяет рекомендованные * доменные навыки с фактически вызванными (по журналу М1, инъекция). */ /** * Какие доменные навыки рекомендованы, но РЕАЛЬНО не вызваны (по журналу). * recommendedDomainSkills — из роутера; invokedSkills — факт журнала (K2). */ export function uncalledDomainSkills({ recommendedDomainSkills = [], invokedSkills = [] } = {}) { const invoked = new Set(invokedSkills); return recommendedDomainSkills.filter((s) => !invoked.has(s)); } /** Решение дисциплины: все рекомендованные доменные навыки реально вызваны? */ export function domainCallDiscipline({ recommendedDomainSkills = [], invokedSkills = [] } = {}) { const uncalled = uncalledDomainSkills({ recommendedDomainSkills, invokedSkills }); return { ok: uncalled.length === 0, uncalled, reason: uncalled.length === 0 ? 'все доменные навыки реально вызваны (журнал)' : `доменный навык не вызван (пересказ вместо вызова, K2): [${uncalled.join(', ')}]`, }; }