Files
portal/tools/door-coverage.mjs
T
2026-06-04 16:49:10 +03:00

24 lines
1.2 KiB
JavaScript

#!/usr/bin/env node
/**
* door-coverage — авто-аудит покрытия дверей (P15-b): инструмент, не покрытый
* matcher'ом верховного хука и не семя, = «забытая дверь» → флаг. Закрывает
* пропущенный канал как КЛАСС, а не точечно (урок F1: PowerShell мимо Bash).
*/
export function auditDoors({ tools = [], matcher = [], seeds = [] }) {
const star = matcher.includes('*');
const cover = new Set(matcher);
const seed = new Set(seeds);
const uncovered = star ? [] : tools.filter((t) => !cover.has(t) && !seed.has(t));
return { ok: uncovered.length === 0, uncovered };
}
/**
* Страховка к D (F): инструмент в «зелёном проходе» (seeds/observe), чья способность
* мутирующая, = опасное исключение → флаг. isMutating инъектируется (общий критерий
* способности с supreme-gate), чтобы не плодить зашитых списков.
*/
export function auditExempt({ exempt = [], isMutating }) {
const flagged = exempt.filter((t) => isMutating(t));
return { ok: flagged.length === 0, flagged };
}