b739d5adad
Болезни B (роутер в пустоту) + A (наставник не заворачивал) — лечение Р7/Р8 (Подход 1): наставник — единый мозг-рецензент, зовёт classify() как функцию (3 слоя + граф nodes.yaml + карточки — код не тронут, новый вызыватель), судит спеку+план+выбор скилов, заворачивает NO-GO. - validateMentorVerdict + промпты (план/спека): явное decision GO|NO-GO (поглощённый Р7) - plan-skills.mjs: parsePlanSkills (skills-json) + extractPlanGoal (зеркало extractGoal судьи) - mentor-seam: renderSkillContext; onPlanWrite зовёт classifyImpl (fail-safe: сбой → без скил-сверки) - decideMentorObjection: заворот на decision=NO-GO ИЛИ сломанный вердикт; mentor-GO только на чистом GO - formatMentorObjection доносит суть (recommendation + reasoning + plan_points), GO -> пусто - enforce-mentor main: loadRegistry + classify; счётчик L1 decision-aware (Р7/§3.4) - скил-сверка — только план (gate2); спека (gate1) — по сути + decision - включает redesign согласования L1->L2 (Фазы 0-6, способ B: наставник->судья->печать) - регрессия tools-only 3901 passed + 2 skip (база 3877, +24 теста, 0 регрессий) Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
19 lines
1.3 KiB
JavaScript
19 lines
1.3 KiB
JavaScript
#!/usr/bin/env node
|
|
/** Сборка текста замечания для доставки контроллеру (полный текст, не обрезаем). */
|
|
export function buildObjectionFeedback({ side, text } = {}) {
|
|
const who = side === 'judge' ? 'судья' : 'наставник';
|
|
const body = (typeof text === 'string' && text.trim()) ? text.trim() : '(текст замечания пуст)';
|
|
return `[${who}] замечание (нужно учесть и переписать):\n${body}`;
|
|
}
|
|
|
|
/**
|
|
* Спека §9: degraded ИИ (наставник/судья упал/таймаут/нет ключа) → контроллер НЕ молчит,
|
|
* а получает «не смог дозвониться» + причину. Печати нет — это не одобрение и не возражение.
|
|
*/
|
|
export function buildDegradedFeedback({ side, reason } = {}) {
|
|
const who = side === 'judge' ? 'судья' : 'наставник';
|
|
const why = (typeof reason === 'string' && reason.trim()) ? reason.trim() : '(причина не указана)';
|
|
return `[${who}] не смог дозвониться (ИИ недоступен): ${why}.\n`
|
|
+ 'Печати нет — это НЕ одобрение и НЕ возражение. Повтори попытку позже или сообщи владельцу.';
|
|
}
|