f2365caf4b
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>
25 lines
1.4 KiB
JavaScript
25 lines
1.4 KiB
JavaScript
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');
|
||
});
|
||
});
|