#!/usr/bin/env node
/** Парсер объявленных в плане скилов (мерж роутер↔наставник). Зеркало parseVerifiedContext:
 *  ищет fenced-блок ```skills-json со списком строк. Нет/битый → []. */
export function parsePlanSkills(content) {
  const m = String(content ?? '').match(/```skills-json\s*\n([\s\S]*?)\n```/i);
  if (!m) return [];
  let arr;
  try { arr = JSON.parse(m[1]); } catch { return []; }
  if (!Array.isArray(arr)) return [];
  return arr.filter((s) => typeof s === 'string' && s.trim());
}

/** Цель плана для classify(): секция ## Цель / ## Goal (до след. заголовка) или первый
 *  непустой не-заголовок абзац. Зеркало extractGoal судьи (enforce-judge-gate.mjs:174). */
export function extractPlanGoal(content) {
  const text = String(content ?? '');
  const m = text.match(/^##\s*(?:Цель|Goal)[^\n]*\n([\s\S]*?)(?:\n##\s|$)/im);
  if (m && m[1].trim()) return m[1].trim();
  const para = text.split(/\n\s*\n/).map((s) => s.trim()).find((s) => s && !s.startsWith('#'));
  return para || '';
}
