# Research: adversarial rule and privacy enforcement ## Baseline До shared vertical-slice implementation в репозитории не было executable corpus и state-preservation harness. Historical RED сохранён как `E-004`. Текущий candidate использует central corpus/runner и тонкий study wrapper. ## Метод 1. Загрузить versioned corpus и проверить число/уникальность categories. 2. Для rejected/clarification cases сравнить state hash и event-log size. 3. Для projection cases искать forbidden fact/NPC identifiers. 4. Для duplicate/concurrent cases проверить один commit и stale rejection. 5. fast-check с seed `20260725` выполнить 200 invalid-target cases и 200 valid replay sequences. 6. Запустить central tests и strict typecheck. ## Реестр доказательств | ID | Тип | Описание | Источник, путь или команда | Дата или версия | |---|---|---|---|---| | E-001 | Fact | PRD требует 0 split-party leaks и 0 canonical replay defects | `RnD/docs/prd/2026-07-22-global-party-ai-rpg.md` | 2026-07-24 | | E-002 | Fact | Session brief перечисляет adversarial категории | attached `pasted-text.txt` | 2026-07-25 | | E-003 | Fact | fast-check поддерживает fixed seed/path replay | https://fast-check.dev/docs/ | accessed 2026-07-25; 4.9.0 | | E-004 | Measurement | RED suite до shared implementation не нашла adversarial/property harness | исторический `npm run test:technical` | 2026-07-25T01:20+07:00 | | E-005 | Fact | Corpus 1.0.0 содержит 16 cases и 16 уникальных categories: impossible, resource, RNG, map, turn, injection, privacy, hidden-entity authorization, split-party, stale, duplicate и concurrent threats | `../2026-07-25-ai-gm-vertical-slice/prototype/fixtures/adversarial-corpus.json` | working tree at `68582c97…` | | E-006 | Measurement | Wrapper: 16 cases, 0 failures, invalid transition rate `0`, private leakage rate `0`, duplicate commit count `0` | `node RnD/technical/2026-07-25-adversarial-rules-privacy/prototype/verify.ts` | 2026-07-25T01:36+07:00 | | E-007 | Measurement | Wrapper: 200 invalid-target runs + 200 replay-sequence runs, seed `20260725`, pass | та же команда | fast-check 4.9.0; 2026-07-25 | | E-008 | Measurement | Central vertical-slice suite: 10 tests passed, включая обе 200-run properties | `node --test RnD/technical/2026-07-25-ai-gm-vertical-slice/prototype/tests/*.test.ts` | Node 24.14.0; 2026-07-25 | | E-009 | Measurement | Strict root typecheck завершился без diagnostics | `npm run typecheck` | TypeScript 7.0.2; 2026-07-25 | | E-010 | Measurement | Integrated demo включил adversarial corpus: 16 cases, 0 failures | `npm run technical:demo` | 2026-07-25T01:41+07:00 | | E-011 | Measurement | Expanded technical suite: 41 tests passed, 0 failed | `npm run test:technical` | Node 24.14.0; 2026-07-25 | ## Журнал экспериментов | Время | Изменение или попытка | Наблюдение | Artifact или evidence ID | Вывод | |---|---|---|---|---| | 2026-07-25T01:20:00+07:00 | Pre-implementation suite | `adversarial.ts` и `property-harness.ts` отсутствуют | `E-004` | RED подтверждён | | 2026-07-25T01:31:00+07:00 | Strengthened wrapper run | Corpus, rates, duplicate guard и 400 total property cases прошли | `E-005`–`E-007` | H-01 подтверждена для зафиксированного input space | | 2026-07-25T01:40:00+07:00 | Central suite + typecheck | 10/10 tests; typecheck exit 0 | `E-008`, `E-009` | Wrapper согласован с shared code | | 2026-07-25T01:41:00+07:00 | Integrated demo | Adversarial 16/0, private projection leakage false | `E-010` | Corpus включён в end-to-end CLI | | 2026-07-25T01:44:00+07:00 | Expanded technical suite | 41/41 pass | `E-011` | Corpus/properties совместимы со всеми study tests | ## Выводы - **Measurement:** named corpus покрыл 16 обязательных threat classes без failure, invalid mutation, privacy leak или duplicate commit. Основание: `E-005`, `E-006`. - **Measurement:** generated identifier и replay-sequence invariants прошли 200 runs каждый при fixed seed. Основание: `E-007`, `E-008`. - **Inference:** schema/rules/version/projection layers сохраняют исследованные invariants независимо от fixture intent text, но не от ещё не смоделированных network/provider boundaries. Основание: `E-006`–`E-009`. ## Рассмотренные альтернативы | Подход | Что проверили | Почему не выбран | Evidence | |---|---|---|---| | Только curated examples | Coverage review | Не исследует форму входных данных | `E-002` | | Только property-based data | Threat review | Не гарантирует business-specific attacks | `E-002` | | Named corpus + properties | 16 categories + два 200-run properties | Выбран: объединяет business attacks и generated shapes | `E-005`–`E-008` | ## Неизвестные - **Unknown:** атаки, которые появятся после подключения STT, network storage и реальных model providers. - **Unknown:** race behavior при настоящих concurrent writers; текущая проверка детерминированно моделирует stale expected version в одном процессе.