Files
brain/tools/askuser-cosmetic-escape-exempt.test.mjs
T
Дмитрий f2365caf4b fix: escape-окошки мимо anti-cosmetic-стража (escape-flow unblock)
Anti-cosmetic-детектор (>2 простых AskUser за сессию → hard-block, требует brainstorming) глушил
ЛЕГИТИМНЫЙ поток escape-окошек: владелец даёт разрешение FLOOR-ESCAPE через AskUser, и после >2
таких окошек стена их блокировала — нормативку под стеной нельзя было довести (баг найден живым
прогоном 18.06). Фикс по аналогии с git-approval exemption (Calibration 5): isEscapeAuthQuestion
(вопрос несёт метку FLOOR-ESCAPE) освобождается в decide() — не косметика, не считаем, не блокируем.
Не абьюзится: метка сигналит авторизацию владельца, а не подмену идеации. Свод 4383 зелёный.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-18 23:20:01 +03:00

25 lines
1.4 KiB
JavaScript
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
import { describe, it, expect } from 'vitest';
import { isEscapeAuthQuestion, decide } from './askuser-cosmetic-detector.mjs';
const escQ = [{ question: 'Разрешение: FLOOR-ESCAPE: write:c:/x.md — авторизуешь?', options: [{ label: 'Отмена' }, { label: 'Не получается' }] }];
const plainQ = [{ question: 'Какой вариант?', options: [{ label: 'A' }, { label: 'B' }] }];
describe('escape-окошки освобождены от cosmetic-счётчика (FLOOR-ESCAPE в вопросе)', () => {
it('isEscapeAuthQuestion: вопрос с FLOOR-ESCAPE → true', () => {
expect(isEscapeAuthQuestion(escQ)).toBe(true);
});
it('isEscapeAuthQuestion: обычный вопрос → false; не массив → false', () => {
expect(isEscapeAuthQuestion(plainQ)).toBe(false);
expect(isEscapeAuthQuestion(null)).toBe(false);
});
it('decide: escape-окошко при >2 простых за сессию → allow (не hard_block)', () => {
const r = decide({ questions: escQ, simpleCountSession: 3, brainstormingInvoked: false });
expect(r.action).toBe('allow');
expect(r.block).toBe(false);
});
it('decide: обычное простое окошко при >2 → hard_block (без регрессии)', () => {
const r = decide({ questions: plainQ, simpleCountSession: 3, brainstormingInvoked: false });
expect(r.action).toBe('hard_block');
});
});