# 0.7.7 — офлайн-разбор тактики, без замены играющего сервера

Дата: 19.10.2026. Рабочий сервер остаётся на 0.7.6. Новые политики ниже имеют статус **LOCAL**, не LIVE. Это подготовка следующего испытания, не объявление альфы.

## Что разобрано

Повторно обработаны 500 профессиональных оригиналов из `ZTN_TOP500_MANIFEST_20261019.json`, каждый сверяется по SHA-256. Ошибок обработки: 0. Это существующая выборка восстановленного корпуса, а не ещё 500 новых скачиваний. Полный доступный корпус: 265 локальных и 900 архивных уникальных оригиналов; новые незавершённые записи текущих игр не читаем.

Вход: собственные POV-снимки позиции, скорости, viewangles, оружия, событий и obituary. Источник не содержит доказанного сырого WASD, координат движения мыши или полного подтверждения урона каждой пушкой конкретной цели. Проекции скорости на оси взгляда называем движением, а не нажатиями клавиш.

Окна обрываются на смерти, смене POV/сегмента, разрыве более 100 мс и скачке позиции более 128 юнитов. Переходы телепорта не становятся стрейфами или быстрым разворотом. Алгоритм и SHA: `tools/analyze_tactical_patterns.py`, агрегат: `docs/training/TACTICAL_PATTERNS_077.json`. Подробные 500 отчётов сохранены в `out/tactical-research/<archive_id>.json` и отдельной серверной резервной копии этапа.

## Стрельба и движение

| Оружие | Боковое движение в окнах стрельбы | На земле | Плавное направление взгляда ≤60°/с | Удержание прицела перед выстрелом |
|---|---:|---:|---:|---:|
| RL | 40,6% | 57,6% | 75,5% | 30,4% |
| LG | 46,6% | 76,6% | 72,3% | 32,7% |
| RG | 46,8% | 72,7% | 87,7% | 55,9% |

Движение измерено в интервале до 100 мс после собственного выстрела. Доли по земле и взгляду пересекаются с типами движения. Частые LG-выстрелы дают перекрывающиеся окна: это длительности наблюдений, не независимые бои и не точность попаданий. Полёт не доказывает нажатие jump.

В JSON историческое имя поля `yaw_span_p50` означает медиану максимального отклонения от yaw выстрела, а не полный диапазон max−min. Удержание: за 250 мс до выстрела максимальное отклонение от угла самого выстрела yaw ≤6°, pitch ≤4°. Из 67 391 удержанных LG-окон в 64 777 игрок продолжал двигаться (96,1%). Это поддерживает направление «плавный прицел + работа ногами». Не доказывает, что мышь совсем неподвижна или что траектория ног вызывает попадание. RG: 7 010 удержанных окон из 12 546, из них 6 052 с движением. Постоянный случайный шум прицела не нужен для имитации человека.

Дальнейшая правка LG должна связывать движение с дистанцией, стенами, отходом и давлением; текущий фильтр 0.7.6 сам по себе этого не обеспечивает. Не заменять штатные направления Xaero произвольным синусом или вечной восьмёркой.

## Комбо: что наблюдается и что добавлено в код

3 771 собственный фраг с наблюдаемой последовательностью стрельбы. В 1 938 окнах было несколько пушек: **51,4%**. Окно максимум 5 секунд, очищается после каждого собственного фрага, чтобы выстрелы по предыдущей жертве не переносились на следующую.

| Последовательность выстрелов перед фрагом | Наблюдения |
|---|---:|
| RL → LG | 389 |
| RL → RG | 238 |
| LG → RG | 129 |
| LG → RL | 126 |
| RG → LG | 70 |
| LG → RL → LG | 59 |

Это кандидаты: obituary подтверждает фраг, но не урон каждым предыдущим оружием той же цели. Запрошенные 65–70% остаются целью подходящих ситуаций, не квотой для искусственного переключения.

`adapter/native/psyz_combo_policy.h` — новая локальная политика. Требует видимости, известного стека, недавнего подтверждённого попадания ≤900 мс, дистанции и патронов. Поддерживает дальнее RG-добивание, LG при средней дистанции, LG→RL при сближении с запасом своего HP, безопасную месть перчаткой в пределах 64u и редкий ближний SG. Учитывает броню: 30 HP с большой бронёй не считается целью на один удар перчатки. При невалидных данных сохраняется штатный выбор оружия. Проверено 12 сценариями.

До LIVE нужны привязка подтверждённого hit к конкретному противнику, проверка LOS/геометрии и журнал реального переключения и исхода. Текущий Python minqlx не имеет damage hook. В восстановленном исходнике minqlx уже разрешается адрес `G_Damage` (`dllmain.c`), сигнатура находится в `quake_common.h`. Это основание исследовать нативный сенсор, а не утверждение, что сенсор уже внедрён. При реализации штатный обработчик должен вызываться ровно один раз; ABI, HP/armor до/после и идентичность цели проверяются отдельно. События трупа не смешивать с убивающим splash.

## Циклы и своевременный приход

Считаются последовательности подборов одной жизни и одного POV. События одного предмета в одном снимке дедуплицируются. Мелкие осколки выделены из стратегических цепочек, чтобы не получить ложный «цикл shard→shard→shard».

| Стратегическая цепочка | Наблюдения / демок | Медиана от первого до третьего подбора |
|---|---:|---:|
| RA → Mega → YA | 356 / 234 | 13,48 с |
| RA → YA → Mega | 327 / 213 | 18,18 с |
| LG → Mega → YA | 269 / 191 | 9,35 с |
| Mega → LG → YA | 250 / 190 | 7,82 с |

Это частоты наблюдаемых цепочек, не готовые оптимальные дебюты: отсутствуют сопоставимые альтернативы одного респауна, стек, риск и цена упущенного ресурса. Аптечки остаются в стратегической выборке; повторные health — реальные разные подборы, не ошибка дедупликации. Для выбора цикла требуются контекст режима cycle / anchor / recover, реальные часы и доступный маршрут.

`adapter/native/psyz_item_arrival.h` — локальный планировщик: выход = срок предмета − проверенный p90 времени пути − запас раннего прихода. Пока выходить рано, разрешает другие ресурсы, а не остановку. HOLD возможен только внутри реального объёма подбора и при безопасном ожидании; близость к красному под платформой недостаточна. Просроченный/неизвестный clock не подменяется выдуманным сроком. Проверено 10 сценариями, включая переполнение времени и опоздание.

Неподвижность за 2 секунды перед подбором сама по себе не доказывает stopwatch: точный срок появления не подтверждён. Для полноценной проверки раннего прихода нужны engine item clock, ETA по реально исполненному маршруту, время входа в объём и фактический pickup. Условие «второй красный обязателен для драки или штрафа» сохраняется; новый планировщик ещё не подключён к этому исполнителю.

## Прицел, позиции и 360°

Найдено 80 устойчивых кандидатов направления взгляда: ячейки 128×128×64u, минимум 8 выстрелов и 3 демки, круговая концентрация yaw ≥0,8. Каждый содержит координаты, оружие, yaw/pitch и проверяемые примеры с demo ID/временем/POV. Углы усредняются по окружности, поэтому +179° и −179° не превращаются в 0°.

Это позиции стрелка и направления взгляда, не координаты врага и не готовые точки прострела. Для исполнения нужны BSP/LOS, поверхность попадания, укрытие и причина prefire. `geometry_verified=false`, `ready_for_execution=false`. Координаты из демки не передаются живому трекеру соперника.

325 кандидатов поворота 350–410° в движении: длительность 0,25–2 с, скорость ≥150u/s, без стрельбы последние 2 с, без телепорта и с ограничением скорости вращения. Это не доказательство намеренного красивого трюка Agent/Rapha и не основание включать вращение в бою. Разгон 2–4 с и его прежние метрики сохранены отдельно; новый разбор не выдаёт реконструированный ввод за сырой.

## Проверки и дальнейший порядок

- Python: 118/118. CTest Debug: 17/17; новые две политики также собраны и выполнены отдельно GCC/Linux с `-Wall -Wextra -Werror`, без подключения к игре; среди них combo и arrival. Эти тесты проверяют контракты, не силу игры.
- Mind Map v7: 262 правила, сохранены все 252 ID v6; 15 веток, PNG/SVG/OPML/JSON/HTML.
- Сайт Tabler Dark: графики движения, удержания прицела, комбо, ресурсных цепочек и таблица позиций; LOCAL и LIVE разделены. Браузерная визуальная проверка сейчас недоступна; статическая проверка ссылок, фильтров, поиска и экранирования выполнена отдельно.
- Пока владелец играет, никаких рестартов, замены бинарника, cvar, добавления/удаления ботов. На сервер загружается только отдельный неизменяемый архив исходников и аналитики.
- Следующее испытание после завершения игр: связать новые политики с проверенными сенсорами; сравнить одну версию против Xaero при одинаковом cfg/карте/уровне, сохранить демо и полные итоги. Короткий smoke не считается победой или альфой.

## Резервная копия этапа

Исходники a0d67f1, история Git и 500 подробных отчётов загружены в отдельную research-releases на сервере. Все три архива сверены по SHA-256. [Квитанция с точными путями и хешами](training/RESEARCH_077_BACKUP_RECEIPT.json). Рабочий бинарник сохранил SHA 0.7.6; PID основного 415921 и тестового 419821 не изменились при проверке.
