Files
brain/tools/judge-surface-reason.test.mjs
T
Дмитрий d669a6bcb5 fix: возражения судьи доходят до показа вердикта (visibility-gap)
Контроллер видел голое «NO-GO [judge]» без претензий: показ вердикта берёт поле reason, а
pushVerdict писал reason = verdict.reason || recommendation — у судьи recommendation пуст (суть в
objections[]), и возражения терялись. Хотя они есть в системе (карточка арбитража / память кругов
через formatJudgeObjection) — просто не в показ. Новая judgeSurfaceReason(verdict): reason/
recommendation, иначе formatJudgeObjection(verdict.verdict) — дословные возражения. runJudgeTurn
использует её для pushVerdict + writeStage. Поймано вживую: судья дал delivery=internal[heavy] +
позиция-без-якорей[light], а контроллеру пришло пусто. Свод 4374 зелёный.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-18 21:29:04 +03:00

27 lines
1.5 KiB
JavaScript

import { describe, it, expect } from 'vitest';
import { judgeSurfaceReason } from './enforce-judge-gate.mjs';
describe('judgeSurfaceReason — возражения судьи доходят до показа вердикта', () => {
it('NO-GO без reason/recommendation → дословные возражения (formatJudgeObjection)', () => {
const verdict = { decision: 'NO-GO', verdict: { objections: [
{ anchor: { ref: 'delivery=internal при пользовательском результате' }, severity: 'heavy' },
{ anchor: { ref: 'позиция вставки без строк-якорей' }, severity: 'light' },
] } };
const r = judgeSurfaceReason(verdict);
expect(r).toContain('delivery=internal');
expect(r).toContain('[heavy]');
expect(r).toContain('позиция вставки');
});
it('явный reason имеет приоритет', () => {
expect(judgeSurfaceReason({ reason: 'прямая причина', verdict: { objections: [{ anchor: { ref: 'x' }, severity: 'light' }] } }))
.toBe('прямая причина');
});
it('recommendation (если есть) используется как причина', () => {
expect(judgeSurfaceReason({ verdict: { recommendation: 'делай Y' } })).toBe('делай Y');
});
it('нет ни reason, ни возражений → пустая строка (без падения)', () => {
expect(judgeSurfaceReason({ verdict: {} })).toBe('');
expect(judgeSurfaceReason(null)).toBe('');
});
});