d221ba499d
Аудит М6 (audit-context-building + sharp-edges + корректность; комплекс М1–М6), 4 практичных фикса (TDD): - FIX-1: enforce-mcp-classification печатает точный FLOOR-ESCAPE токен в egress/verdict-блоке (G-5 для egress). - FIX-2: escape-grant.findOpenGrant — единый предикат свежести для open и consume (гасит ИМЕННО открывший грант; чинит утечку one-shot при дублях/future-ts). - FIX-3: enforce-supreme-gate.runGate — best-effort журнал escape (escape:true), указатель не двигается, сбой журнала не блокирует. - FIX-4: enforce-snapshot — уникальный дефолтный id снимка (ts-pid-счётчик) против ms-коллизии refs/floor-snapshots. Регрессия tools-only 2843 passed + 2 skip (+9, 0 регрессий). FIX-5 (подпись гранта) сознательно не делали (нулевая защита без ключа; protected-path уже гарантирует).
24 lines
1.4 KiB
JavaScript
24 lines
1.4 KiB
JavaScript
import { describe, it, expect } from 'vitest';
|
|
import { consumeDecision } from './floor-escape-consume.mjs';
|
|
describe('floor-escape-consume', () => {
|
|
const now = 1000;
|
|
it('исполненное действие с непогашенным пропуском → отметка', () => {
|
|
const r = consumeDecision({ action: 'bash:reset --hard',
|
|
grants: [{ action: 'bash:reset --hard', ts: now - 5 }], consumed: [], now });
|
|
expect(r).toEqual({ action: 'bash:reset --hard', ts: now - 5 });
|
|
});
|
|
it('уже погашено → null', () => {
|
|
const r = consumeDecision({ action: 'bash:x', grants: [{ action: 'bash:x', ts: 1 }], consumed: [{ action: 'bash:x', ts: 1 }], now });
|
|
expect(r).toBe(null);
|
|
});
|
|
it('нет совпадающего пропуска → null', () => {
|
|
expect(consumeDecision({ action: 'bash:y', grants: [{ action: 'bash:x', ts: 1 }], consumed: [], now })).toBe(null);
|
|
});
|
|
// floor-escape-consume.mjs FIX-2: гасить ИМЕННО открывший грант (единый findOpenGrant)
|
|
it('при дублях гасит свежий открывший грант, не future-ts', () => {
|
|
const r = consumeDecision({ action: 'bash:x',
|
|
grants: [{ action: 'bash:x', ts: now + 1000 }, { action: 'bash:x', ts: now - 5 }], consumed: [], now });
|
|
expect(r).toEqual({ action: 'bash:x', ts: now - 5 });
|
|
});
|
|
});
|