#!/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(', ')}]`,
  };
}
