b65066f17c
Прогон security-go-live на main, локальная цель 127.0.0.1:8000 — вердикт NO-GO. Блокеры: pg_anonymizer не установлен (ПДн в дампах), F-P1 (телефоны лидов не вычищаются по сроку), P0 из STRIDE (SAAS_ADMIN_TEST_BYPASS / SSRF webhooks-test / открытые ручки). Nuclei чисто (1 info php). Semgrep/ZAP — PENDING. Гайд стены: новый раздел уроков — читать контекст до печати плана, запасной канал вставки в чат, недетерминизм судьи и рассинхрон указателя F-J. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
63 lines
5.0 KiB
Markdown
63 lines
5.0 KiB
Markdown
# Спека — уроки прогона аудита в операционный гайд
|
|
|
|
## Цель
|
|
|
|
Добавить в операционный гайд `docs/superpowers/router-mentor-wall-GUIDE.md`
|
|
короткий раздел с уроками, выявленными на живом многошаговом прогоне (go-live
|
|
security gate 17.06.2026): порядок сбора контекста перед многошаговой работой,
|
|
особенности чтения вывода инструментов и наблюдаемые дефекты проверяющего/
|
|
указателя. Цель — чтобы следующая сессия не повторяла те же грабли.
|
|
|
|
## Урок 1 — весь контекст до печати плана {#G1}
|
|
|
|
**Контракт.** В режиме реализации (под опечатанным планом) чтение вне пути
|
|
текущего шага блокируется — нельзя прочитать ни исходники для анализа, ни даже
|
|
собственный вывод инструмента (temp-файл сканера). Поэтому всю разведку (схема,
|
|
роуты, конфиги, reference-файлы навыков, вывод сканеров) собирают ДО печати плана,
|
|
в разговорном режиме, где чтение свободно.
|
|
|
|
**Edge-case / обход.** Если контекст всё же понадобился в режиме реализации —
|
|
владелец вставляет содержимое файла прямо в чат: это контекст разговора, а не
|
|
вызов Read-инструмента, поэтому дисциплина чтения его не трогает.
|
|
|
|
**Конвенция.** Для аудита/разведки: сперва читаешь всё нужное, формулируешь
|
|
находки, и только потом печатаешь спеку→план, где шаги уже не требуют новых чтений.
|
|
|
|
**Критерий.** В гайде есть пункт, явно предписывающий собрать чтения до печати
|
|
плана и называющий приём «вставка в чат» как запасной канал.
|
|
|
|
## Урок 2 — наблюдаемые дефекты проверяющего и указателя {#G2}
|
|
|
|
**Контракт.** На прогоне зафиксированы два дефекта машинерии, о которых сессия
|
|
должна знать заранее: (1) проверяющий план может выдать разный вердикт на
|
|
байт-идентичном тексте между кругами (наблюдалось NO-GO с пометкой fatal на одной
|
|
строке цели, затем GO на том же тексте); (2) рассинхрон указателя — ранний хук в
|
|
цепочке сдвигает указатель шага, а более поздний хук роняет само действие, из-за
|
|
чего шаг считается пройденным, хотя инструмент не выполнился (на прогоне так был
|
|
пропущен первый шаг).
|
|
|
|
**Edge-case.** Перепечатка плана байт-в-байт не сбрасывает указатель (тот же
|
|
идентификатор плана) — для сброса нужен план с другим именем/содержимым.
|
|
|
|
**Конвенция.** При недетерминированном вердикте — повторить печать (это уже
|
|
описано как async-повтор); при рассинхроне указателя — новый план с другим именем
|
|
либо завершить застрявший план резерв-меткой.
|
|
|
|
**Критерий.** В гайде есть пункт, называющий оба дефекта и отсылающий к уже
|
|
описанным средствам восстановления (новый план / резерв-метка завершения).
|
|
|
|
## Куда вписать {#G3}
|
|
|
|
**Контракт.** Новый раздел добавляется в существующий гайд как отдельная секция
|
|
(заголовок второго уровня) рядом с разделом «Частые ошибки», не ломая остальную
|
|
структуру и оглавление.
|
|
|
|
**Критерий.** Раздел присутствует в файле гайда; прежний текст не повреждён.
|
|
|
|
```verified-context-json
|
|
[
|
|
{"id":"vc1","kind":"EXTRACTED","ref":"docs/superpowers/router-mentor-wall-GUIDE.md","anchor":"Читать ПЕРЕД работой под стеной"},
|
|
{"id":"vc2","kind":"EXTRACTED","ref":"docs/security/2026-06-17-go-live-security-report.md","anchor":"SECURITY GO-LIVE REPORT"}
|
|
]
|
|
```
|