84de110fee
Новый резолвер режима судьи М4 в judge-gate-config: inert ($0, нет флага/ключа) / shadow (active, логирует не блокирует — D28 «сперва тихо») / live-block (active + ROUTER_MENTOR_JUDGE_ MODE=block, блокирует на NO-GO). Рубильник judgeActive важнее режима: MODE=block без флага/ключа → всё равно inert. Default при активации — shadow (рекомендуемая обкатка §11). 9/9 GREEN.
35 lines
1.8 KiB
JavaScript
35 lines
1.8 KiB
JavaScript
#!/usr/bin/env node
|
||
/**
|
||
* judge-gate-config — рубильник судьи (как resolveJudgeConfig у llm-judge v4).
|
||
* Судья АКТИВЕН только если владелец включил флаг ROUTER_MENTOR_JUDGE_ENABLED=1 И
|
||
* ключ судьи доступен. Без флага/ключа — инертен, $0, ничего не блокирует (режим D28
|
||
* «сперва тихо»). Регистрация хука в settings.json + флаг + ключ — шаг ВЛАДЕЛЬЦА.
|
||
*/
|
||
import { resolveJudgeKey } from './judge-key-config.mjs';
|
||
|
||
const ENABLED_ENV = 'ROUTER_MENTOR_JUDGE_ENABLED';
|
||
|
||
export function resolveJudgeEnabled({ env = process.env } = {}) {
|
||
return env[ENABLED_ENV] === '1';
|
||
}
|
||
|
||
export function judgeActive({ env = process.env, keychainGet } = {}) {
|
||
if (!resolveJudgeEnabled({ env })) return false;
|
||
return !!resolveJudgeKey({ env, keychainGet });
|
||
}
|
||
|
||
const MODE_ENV = 'ROUTER_MENTOR_JUDGE_MODE'; // 'shadow' (default) | 'block'
|
||
|
||
/**
|
||
* Режим судьи: inert ($0, нет флага/ключа) / shadow (active, логирует, НЕ блокирует — D28
|
||
* «сперва тихо») / live-block (active + MODE=block, блокирует на NO-GO). Рубильник (judgeActive)
|
||
* важнее режима: MODE=block без флага/ключа → всё равно inert. Default при активации — shadow
|
||
* (рекомендуемая обкатка §11; владелец переводит в block отдельным шагом).
|
||
*/
|
||
export function judgeGateMode({ env = process.env, keychainGet } = {}) {
|
||
if (!judgeActive({ env, keychainGet })) return 'inert';
|
||
return env[MODE_ENV] === 'block' ? 'live-block' : 'shadow';
|
||
}
|
||
|
||
export const _internals = { ENABLED_ENV, MODE_ENV };
|