8dcb50a07c
Предыдущий проход сделал правильным порядок «сначала долговременная запись, потом разрыв сессии» и правильно запретил откат при неудаче разрыва. Способа прийти к согласованному состоянию ПОТОМ он не дал: у двух операций повтор не работал вовсе. Импорт, заменивший auth_id: после неудавшегося /kick старое значение не хранится нигде, повтор того же файла читает из базы уже новое и рвёт его, а cron пропускал незнакомый authID молча — dao.ListPeer просто не возвращала строку. Живая сессия оставалась навсегда. Снижение maxDevices: повтор формы даёт 1 < 1 -> false, разрыва больше нет. Лимит устройств в политику доступа не входит и входить не должен — это свойство сессий, — поэтому механизма схождения у него не было. enforcePeerAccess стал сверкой живых сессий: обход идёт по каждому authID из /online. Нет строки в базе -> kick; peerAccessDenied -> kick; непригодный maxDevices -> kick; устройств больше разрешённого -> kick. Отказ базы при этом не рвёт ничего. Ни таблицы отложенных операций, ни очереди retry: список живых сессий уже есть, и это /online. Отдельно закрыт второй TOCTOU лимита устройств. Учёт выданных разрешений закрыл сравнение двух одинаковых снимков, но сетевой запрос выполнялся вне блокировки, поэтому снимки приходили в резервацию в произвольном порядке и устаревший откатывал lastOnline назад, возвращая уже занятое место. Это не data race — память защищена мьютексом, и -race здесь молчит принципиально. Последовательность «прочитать /online -> занять место» выполняется под замком по authId; глобальный замок не годится, внутри идёт сетевой запрос. Учёт разрешений больше не растёт бесконечно: запись снималась только на ветке отказа, поэтому в карте копились удалённые пиры и переписанные импортом идентификаторы. Уборка идёт по фактической картине подключений. Гейты приёмки доращены под все три инварианта и проверены в обе стороны. Go 1.26.7 -> 1.26.8. Документация приведена в соответствие в двух местах, где описывала снятую архитектуру. Разбор: docs/acceptance/2026-09-02-v1.0.0-rc3-preflight-findings.md
45 lines
3.1 KiB
Markdown
45 lines
3.1 KiB
Markdown
# Реестр прогонов приёмки
|
||
|
||
Здесь лежат отчёты о ФАКТИЧЕСКИХ прогонах приёмки: какая сборка, на каком
|
||
хосте, что прошло и что нет. Описание самих проверок — в
|
||
[docs/testing/](../testing/README.md).
|
||
|
||
Разделение намеренное. Документ проверок переживает релизы и правится по мере
|
||
развития продукта; отчёт о прогоне относится к одному артефакту и одному хосту
|
||
и после публикации релиза не редактируется — иначе он перестаёт быть
|
||
свидетельством.
|
||
|
||
## Правила ведения
|
||
|
||
1. Один прогон — один файл `ГГГГ-ММ-ДД-<версия>-<вид>.md`.
|
||
2. Отчёт фиксирует только то, что действительно выполнялось. Отложенная
|
||
проверка отмечается как `DEFERRED` с причиной, а не опускается.
|
||
3. Реальные секреты, ключи и клиентские ссылки в отчёт не переносятся.
|
||
Публичные IP-адреса тестовых хостов обезличиваются; доменное имя и номер
|
||
порта SSH остаются, потому что без них шаги прогона невоспроизводимы.
|
||
4. Найденные дефекты живут в отдельном файле рядом с отчётом и закрываются
|
||
ссылками на коммиты, а не правкой самого отчёта.
|
||
|
||
## Прогоны
|
||
|
||
| Дата | Версия | Коммит источника | Вид | Вердикт |
|
||
| --- | --- | --- | --- | --- |
|
||
| 2026-09-01 | `1.0.0-rc1` | `a1f0db22` | build + host acceptance, Debian 13 | [RC ACCEPTED WITH RELEASE-REQUIRED UX FIXES](2026-09-01-v1.0.0-rc1-host-acceptance.md) |
|
||
|
||
## Открытые дефекты приёмки
|
||
|
||
| Прогон | Дефекты |
|
||
| --- | --- |
|
||
| 2026-09-01, `1.0.0-rc1` | [UX-01…UX-05 и найденное сверх отчёта](2026-09-01-v1.0.0-rc1-ux-findings.md) |
|
||
|
||
## Разборы кода между прогонами
|
||
|
||
Отдельно от отчётов о прогонах: дефекты, найденные чтением дерева и сверкой с
|
||
официальной документацией, а не наблюдением на хосте. Провенанс у них другой, и
|
||
приписывать их хостовому прогону нельзя — он их не показывал.
|
||
|
||
| Дата | Основание | Находки |
|
||
| --- | --- | --- |
|
||
| 2026-09-01 | коммит `c0a43ae9`, сверка с Hysteria 2 и Element Plus | [UX-06…UX-10, LOG-01…LOG-05, AUTH-01/02, CORE-01/02, TYPE-01](2026-09-01-v1.0.0-rc2-preflight-findings.md) |
|
||
| 2026-09-02 | коммит `6d1686b8`, повторная сверка с Hysteria 2 | [ADMIT-04/05, RECON-01/02, GATE-02, DOC-02, VER-01](2026-09-02-v1.0.0-rc3-preflight-findings.md) |
|