# Результаты 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/` получает 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.