#!/usr/bin/env node
/**
 * judge-verdict-slots (§9.2) — ОТДЕЛЬНЫЙ валидатор формы вердикта (не сам судья,
 * как A0: подсудный не судит себя). Вердикт обязан нести слот на КАЖДУЮ требуемую
 * для гейта линзу; пустой/тривиальный слот → невалидно → ГО не выдаётся. Тут проверяем
 * только ФОРМУ (наличие+нетривиальность); качество мысли внутри слота — не сюда
 * (часть честного потолка ~0.5%, добивают премортем/оценщик/владелец).
 */
const DEFAULT_MIN_LEN = 8; // тривиальным считаем слот короче порога (после trim)

export function validateVerdictSlots(verdict, requiredLenses = [], { minLen = DEFAULT_MIN_LEN } = {}) {
  const slots = (verdict && typeof verdict === 'object' && verdict.slots) || {};
  const missing = [];
  const trivial = [];
  for (const lens of requiredLenses) {
    const raw = slots[lens];
    if (raw === undefined || raw === null) { missing.push(lens); continue; }
    // Аудит M1-M4 (свежий объектив): слот обязан быть СТРОКОЙ. Раньше String(raw) скрывал
    // не-строки — `{}` давал '[object Object]' (длина 15) и проходил как содержательный,
    // т.е. мусорный объект/массив штамповал слот. Теперь не-строка → тривиально (форма невалидна).
    if (typeof raw !== 'string' || raw.trim().length < minLen) trivial.push(lens);
  }
  return { valid: missing.length === 0 && trivial.length === 0, missing, trivial };
}
