fix(installer): harden admin smoke and rollback cleanup

This commit is contained in:
2026-09-07 22:39:30 +05:00
parent bf10810cfc
commit 079094591b
15 changed files with 1095 additions and 261 deletions
@@ -0,0 +1,50 @@
# Результаты runtime-проверки v1.0.0-rc3
Дата проверки: 2026-09-07.
RC3 проверялся на чистом Debian после успешной проверки целостности
опубликованного артефакта. Hysteria, ACME, firewall, диагностика и основной
authentication backend отработали штатно. Кандидат отклонён из-за несовместимости
installer smoke с HTTP middleware и ложного отчёта rollback cleanup.
## Сводка
| ID | Наблюдение | Итог |
| --------------- | ---------------------------------------------------------------------------------------------- | ------------------------------------------------------- |
| RC3-LOGIN-01 | стандартный `curl/<version>` получает HTTP 403 от scanner middleware | исправлено для RC4 явным UA установщика |
| RC3-LOGIN-02 | запрос с полем `password` не проходит DTO: требуется `pass` | ожидаемое поведение wire-контракта, добавлена регрессия |
| RC3-LOGIN-03 | `{username, pass}` с неверным паролем доходит до auth logic и возвращает `invalid_credentials` | backend исправен |
| RC3-LOGIN-04 | positive и negative smoke имели две независимые curl-команды | исправлено общим request helper'ом |
| RC3-ROLLBACK-01 | `reset-failed` для уже выгруженного юнита создавал ложное `manual recovery may be required` | исправлено проверкой postcondition |
## Что доказала диагностика login
Последовательность запросов отделила middleware, DTO и authentication logic:
| Запрос | Результат |
| ---------------------------------------- | -------------------------------------------------------- |
| стандартный curl UA + `password` | HTTP 403 до разбора тела |
| допустимый UA + `password` | validation envelope: требуется поле `pass` |
| допустимый UA + `pass` и неверный пароль | operation envelope с `errors[].code=invalid_credentials` |
Следовательно, паника старого `validateStr` не вернулась. Дефект RC3 находился
между smoke-клиентом и scanner middleware, а не в проверке пароля.
## Контракт RC4
- positive и negative login используют один helper;
- helper отправляет JSON `{username, pass}` и `User-Agent: HY2XS-Installer/1.0`;
- success требует `code=20000` и непустой `data.accessToken`;
- rejection требует `code=50000`, причину `invalid_credentials` внутри
`errors[]` и отсутствие выданного токена;
- envelope разбирается как JSON, поэтому совпадение текста внутри `message` не
считается доказательством;
- стандартный curl UA продолжает получать 403: scanner middleware в RC4 не
удаляется;
- уже выгруженный systemd-юнит считается успешным конечным состоянием cleanup
только после наблюдения `LoadState` и `ActiveState`;
- недоступный systemd или сохранившийся `ActiveState=failed` остаются настоящим
rollback failure.
Пересмотр необходимости scanner middleware для loopback-only панели остаётся
отдельной задачей после v1.0.0 и не расширяет change surface RC4.
+2
View File
@@ -26,6 +26,7 @@
| --- | --- | --- | --- | --- |
| 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-04 | `1.0.0-rc2` | `82e5ca40` | clean install + runtime, Debian 13 | [RUNTIME REJECTED — вход в панель недоступен](2026-09-04-v1.0.0-rc2-runtime-findings.md) |
| 2026-09-07 | `1.0.0-rc3` | `bf10810c` | clean install + failure rollback, Debian 13 | [RUNTIME REJECTED — installer smoke блокируется middleware](2026-09-07-v1.0.0-rc3-runtime-findings.md) |
## Открытые дефекты приёмки
@@ -33,6 +34,7 @@
| --- | --- |
| 2026-09-01, `1.0.0-rc1` | [UX-01…UX-05 и найденное сверх отчёта](2026-09-01-v1.0.0-rc1-ux-findings.md) |
| 2026-09-04, `1.0.0-rc2` | [LOGIN-01…LOGIN-08](2026-09-04-v1.0.0-rc2-runtime-findings.md) — все закрыты |
| 2026-09-07, `1.0.0-rc3` | [RC3-LOGIN-01…04, RC3-ROLLBACK-01](2026-09-07-v1.0.0-rc3-runtime-findings.md) — исправления подготовлены для RC4 |
## Разборы кода между прогонами