import type { ScoreJson } from './types.js'; export interface GateResult { passed: boolean; reasons: string[]; } /** * 门禁判定:total 为有效有限数且 ≥PASS_LINE、且无硬否决 → passed。 * 直接判 score.total < PASS_LINE(而非聚合 score.pass),以区分"总分不足"与"硬否决"两种 fail 原因。 * NaN/Infinity total → fail-closed(A4:防 aggregate 计算异常时 NaN