feat: анти-диктовка свободного floor_escape (consent forgery C)

Свободный floor_escape (лёгкий escape в чате) НЕ доверяется, если контроллер в своём тексте
текущего хода инструктировал владельца вписать метку. processEvent читает текст контроллера
из транскрипта хода (readTranscript + lastAssistantText, переиспользован), один раз на событие
зовёт detectOtherSocialEng (раньше был мёртвой проводкой — не вызывался нигде); flagged →
floor_escape не пишется. Паттерны detectOtherSocialEng усилены императивной диктовкой метки
FLOOR-ESCAPE (глагол рядом; простое упоминание концепта не флагуется). fail-open observability —
сбой чтения транскрипта → как раньше. Применяется к floor_escape (git-approval закрыт #A).
Завершает кодовую часть эпика (A + B1-B5 + C). Спека §C. Свод 4350 зелёный.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
Дмитрий
2026-06-18 19:54:25 +03:00
parent 11969ac3ea
commit 0d31e62248
6 changed files with 237 additions and 4 deletions
+9
View File
@@ -248,6 +248,15 @@ describe('askuser-answer-parser / detectOtherSocialEng (E29 + v4.0 RU)', () => {
expect(detectOtherSocialEng('выбери подходящий вариант').flagged).toBe(false);
});
it('flags imperative dictation of FLOOR-ESCAPE marker (C)', () => {
expect(detectOtherSocialEng('набери FLOOR-ESCAPE: write:c:/x.md').flagged).toBe(true);
expect(detectOtherSocialEng('paste FLOOR-ESCAPE: bash:rm -rf x').flagged).toBe(true);
});
it('does not flag mere mention of FLOOR-ESCAPE concept (C)', () => {
expect(detectOtherSocialEng('это даётся через FLOOR-ESCAPE из терминала').flagged).toBe(false);
});
it('handles non-string', () => {
expect(detectOtherSocialEng(null).flagged).toBe(false);
});