# Спека — доведение аудита + трекер открытых вопросов

## Цель

Довести go-live security gate до конца в пределах того, что запускается без
доустановки: перезапустить статические проверки gitleaks и Ward правильными
командами, проверить готовность ZAP (наличие Java), обновить отчёт реальными
результатами, и зафиксировать все открытые вопросы сессии в отдельный файл-трекер.
Цель — текущая ветка `main`, локальный контур; код/схема/git не правятся.

## A1 — перезапуск статики gitleaks + Ward {#A1}

**Контракт.** gitleaks — полный скан истории на секреты; Ward — скан `app/`
позиционной командой (`./bin/ward.exe scan app/`, не устаревший `--path`).
Каждый результат заносится в отчёт по severity.

**Edge-case.** Если gitleaks уезжает в фоновый запуск и его вывод недоступен на
чтение — результат помечается как «получить из вывода» и не выдаётся за «чисто».
Учебная фикстура секрет-сканера — в allowlist gitleaks, не утечка.

**Конвенция.** Реальная утечка gitleaks = NO-GO (critical). Ward critical = NO-GO;
`APP_DEBUG`/`APP_ENV=local` на dev-`.env` — info (ожидаемо), на боевом — проверить.

**Критерий.** Оба инструмента отработали, результат разнесён по severity в отчёт.

## A2 — готовность ZAP {#A2}

**Контракт.** Проверить наличие Java (`java -version`) — ZAP требует Java 17+ и
демона. Если Java нет — ZAP остаётся `PENDING` с явной причиной, без ложного «ок».

**Критерий.** В отчёте — статус ZAP (PENDING + причина либо результат).

## A3 — обновление отчёта {#A3}

**Контракт.** Существующий отчёт `docs/security/2026-06-17-go-live-security-report.md`
обновляется реальными результатами gitleaks/Ward/ZAP-готовности; вердикт и списки
блокеров/предупреждений/PENDING пересобираются с учётом новых данных.

**Edge-case.** Semgrep остаётся PENDING (не установлен; установка под стеной
блокируется как floor-опасная) — фиксируется как требующий доустановки в терминале.

**Критерий.** Отчёт содержит обновлённые строки Шага 1 и пересобранный вердикт.

## A4 — трекер открытых вопросов {#A4}

**Контракт.** Новый файл `docs/security/2026-06-17-open-items.md` со всеми открытыми
вопросами сессии по категориям: блокеры безопасности (F-P1, pg_anonymizer, P0/P1
угрозы), незавершённые инструменты аудита (Semgrep, ZAP, и итог gitleaks/Ward),
находки осмотра портала (F3/F4/F5 — статус), баги машинерии стены (чтение/десинк/
недетерминизм судьи), хозяйственное (незакоммиченное, непушенное, нормативные хвосты).

**Конвенция.** Каждый пункт — приоритет, краткая суть, где правится, и пересекается
ли с зоной параллельной сессии (фронтенд `app/`).

**Критерий.** Файл существует, разбит по категориям, каждый пункт с приоритетом и
зоной правки.

```verified-context-json
[
  {"id":"vc1","kind":"EXTRACTED","ref":"docs/security/2026-06-17-go-live-security-report.md","anchor":"SECURITY GO-LIVE REPORT"},
  {"id":"vc2","kind":"EXTRACTED","ref":"docs/superpowers/2026-06-17-wall-read-block-bug.md","anchor":"чтение под стеной"}
]
```
