From 8975b2de44fdd90ba18882b93e464bbbb2b33992 Mon Sep 17 00:00:00 2001 From: MpakobecEx Date: Wed, 21 Oct 2026 18:01:18 +0500 Subject: [PATCH] Add compact session state handoff --- README.md | 2 + docs/HANDOFF.md | 46 ++++++++------ docs/SESSION-STATE.md | 135 ++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 166 insertions(+), 17 deletions(-) create mode 100644 docs/SESSION-STATE.md diff --git a/README.md b/README.md index 812a5fa..18ca541 100644 --- a/README.md +++ b/README.md @@ -4,6 +4,8 @@ > Fan-made project. Not affiliated with Bushiroad. All card names and art belong to their respective owners. +> Текущая оперативная сводка — [`docs/SESSION-STATE.md`](docs/SESSION-STATE.md). + ## Статус | Блок | Состояние | diff --git a/docs/HANDOFF.md b/docs/HANDOFF.md index b7eade0..46b225c 100644 --- a/docs/HANDOFF.md +++ b/docs/HANDOFF.md @@ -1,7 +1,8 @@ # Передача сессии Состояние проекта на **21 октября 2026**. Документ нужен, чтобы новая сессия -продолжила работу без повторного разбора истории. +продолжила работу без повторного разбора истории. Краткая оперативная +сводка — `docs/SESSION-STATE.md`; этот файл хранит подробную историю. --- @@ -13,16 +14,16 @@ MVP: бустер **BT01** + триал-деки **TD01/TD02** — 94 карты Стек: - сервер — **.NET 10**, **Orleans** (опционально), PostgreSQL, Redis; -- клиент — **Unity 6** (ещё не начат); +- клиент — **Unity 6000.6.6f1**, URP, 3D-сцены (каркас готов); - лаунчер — **WPF** (ещё не начат); - контент — YAML + C#-скрипты карт; -- транспорт — WebSocket/TCP + MessagePack (решение зафиксировано, кода ещё нет). +- транспорт — **WebSocket + MessagePack** (реализован в сервере и клиенте). Репозиторий: - ветка `master`; - remote `ssh://git@192.168.31.158:2222/mpakobecex/VanguardReMaster.git`; -- последний коммит на момент передачи — **`99532b6`**; +- актуальный HEAD смотреть через `git log -1` (на момент записи — `6ed0998`); - рабочее дерево чистое. Главные принципы: @@ -38,15 +39,16 @@ MVP: бустер **BT01** + триал-деки **TD01/TD02** — 94 карты | Проверка | Результат | |---|---| -| Тесты | **175/175** (131 правила/контракты + 44 сервер) | +| Тесты сервера | **175/175** (131 правила/контракты + 44 сервер) | | `validate` | 0 ошибок, 0 предупреждений | | `translations check` | 94/94 | | `stress 1000` | 1000/1000 партий, 0 ошибок | | Карты | **94/94** (66 с текстом + 28 ванильных) | | Протокол и контракты | `docs/protocol.md`, `Vanguard.Shared` готовы | -| Сервер | сеть, матчмейкинг, PostgreSQL + Redis, Docker | +| Сервер | сеть, матчмейкинг, PostgreSQL + Redis, Orleans, Docker | | Мета-API | JWT, коллекция, колоды, магазин, экономика, история, реплеи | -| Клиент / лаунчер | не начаты | +| Клиент | Unity 6.6, 3D-сцены Login/Lobby/Collection/DeckBuilder/Battle, логин/коллекция/колоды/очередь/gray-box бой | +| Лаунчер | не начат | Блок «Игровое ядро» из `IMPLEMENTATION_CHECKLIST.md` закрыт по его критериям: боты доигрывают 1000 партий, инварианты держатся, реплей воспроизводится @@ -77,6 +79,18 @@ OK: ошибок 0, предупреждений 0 Партий: 1000, завершено: 1000, ошибок: 0 ``` +Клиент (Unity): + +```powershell +& 'C:\Program Files\Unity\Hub\Editor\6000.6.6f1\Editor\Unity.exe' ` + -batchmode -nographics -projectPath client ` + -runTests -testPlatform EditMode -testResults client\TestResults.xml + +& 'C:\Program Files\Unity\Hub\Editor\6000.6.6f1\Editor\Unity.exe' ` + -batchmode -nographics -projectPath client ` + -executeMethod Vanguard.Editor.SceneSmoke.Run +``` + Сервер локально: ```powershell @@ -510,7 +524,7 @@ CI подключён и проходит; серверный блок закр Addressables, Localization, Newtonsoft.Json, VContainer (OpenUPM); - визуальное направление зафиксировано: **3D**, отдельные сцены-экраны Login/Lobby/Collection/DeckBuilder/Battle (`docs/client-visual-direction.md`); - текущий единый Canvas — временный gray-box; + сцены и `SceneFlow` уже созданы, UI пока code-generated gray-box; - сцена `Boot` + runtime-инициализатор, поэтому клиент стартует и в пустой сцене; - composition root на VContainer: `AppConfig`, `TokenStore`, `ApiClient`, @@ -559,7 +573,7 @@ CI подключён и проходит; серверный блок закр **Зафиксированное визуальное направление** — `docs/client-visual-direction.md`: 3D-клиент на URP, отдельные сцены-экраны Login / Lobby / Collection / DeckBuilder / Battle; Boot и общие сервисы остаются персистентными. -Текущий единый Canvas — временный gray-box, его разносим по сценам. +Сцены и `SceneFlow` уже созданы; UI пока code-generated gray-box. - Unity 6 LTS, URP, Addressables, Input System, Localization, DOTween. - VContainer, `ApiClient`, `GameConnection`, `SceneFlow`. @@ -586,16 +600,14 @@ DeckBuilder / Battle; Boot и общие сервисы остаются пер ## 8. Порядок действий в новой сессии -1. Прочитать `docs/HANDOFF.md`, `IMPLEMENTATION_CHECKLIST.md`, `README.md`. +1. Прочитать `docs/SESSION-STATE.md`, `docs/HANDOFF.md`, + `IMPLEMENTATION_CHECKLIST.md`, `README.md`. 2. Прогнать проверки из раздела 3. -3. Следующий блок — **клиент** (Unity): 3D-сцены `Login`, `Lobby`, - `Collection`, `DeckBuilder`, `Battle`; `Boot` — служебная сцена. - `ApiClient`, `GameConnection`, логин, коллекция, декбилдер, магазин, - очередь, история и реплей. Визуальное решение — - `docs/client-visual-direction.md`. Сервер и мета-API готовы: - `docs/protocol.md`, `docs/server-api.md`, `Vanguard.Shared`. -4. CI и Orleans закрыты; следующий блок — клиент. Перед началом: проверить +3. Следующий блок — клиент: магазин/бустеры в Lobby и история/реплей, + затем полный декбилдер и 3D-наполнение сцен. Сервер и мета-API готовы: `docs/protocol.md`, `docs/server-api.md`, `Vanguard.Shared`. +4. Перед началом сверить `docs/client-visual-direction.md`: 3D-сцены, + `Boot` и общие сервисы персистентны. 5. После каждого блока: тесты, `validate`, `translations check`, коммит, push. 6. Не ломать `Vanguard.Rules`: сервер должен зависеть от него, а не наоборот. diff --git a/docs/SESSION-STATE.md b/docs/SESSION-STATE.md new file mode 100644 index 0000000..9f0f630 --- /dev/null +++ b/docs/SESSION-STATE.md @@ -0,0 +1,135 @@ +# Vanguard ReMaster — состояние сессии + +**Дата:** 2026-10-21 +**HEAD:** `6ed0998` (клиент переведён на 3D-сцены) +**Коротко:** сервер готов, клиент — рабочий каркас с 3D-сценами. + +## Сервер + +- .NET 10 / ASP.NET Core, EF Core, PostgreSQL, Redis, опциональный Orleans. +- Реализовано: auth/JWT, онбординг, коллекция, колоды, магазин, экономика, + матчмейкинг, WebSocket-матч, история, реплеи. +- Orleans включается `Orleans:Enabled`; в compose включён. Один silo, + in-process реестр соединений. +- Тесты: **131** правил + **44** серверных, CI зелёный. +- Стенд: `http://192.168.31.158:18080`, `/health` → ok. +- Документация: `docs/server-api.md`, `docs/protocol.md`, + `docs/HANDOFF.md`. + +## Клиент + +- **Unity 6000.6.6f1**, URP; проект в `client/`. +- Пакеты: URP, Input System, Addressables, Localization, Newtonsoft.Json, + VContainer (OpenUPM). +- Визуальное направление: **3D**, отдельные сцены-экраны: + `Login`, `Lobby`, `Collection`, `DeckBuilder`, `Battle`. + `Boot` — стартовая служебная сцена; `VanguardApp` персистентный. +- Переходы — `SceneFlow`; очередь/онбординг — оверлеи **Lobby**. +- 3D-окружение сейчас из примитивов (`SceneEnvironment`): камера, свет, + пол, тематические кубы. UI — code-generated uGUI, пока gray-box. +- Сервисы: `ApiClient`, `AuthService`, `MetaService`, `TokenStore`, + `PlayerState`, `GameConnection`. +- Работает: логин/регистрация/refresh, онбординг, коллекция с разбором, + список/удаление/автосборка колоды, очередь, WebSocket-матч (snapshot, + интенты, маллиган, сдача, `GameFinished`), таймер, результат. +- Не готово: полноценный декбилдер, магазин/бустеры, история/реплей в UI, + арты/модели/анимации, локализация RU/EN, настройки, DOTween. + +## Запуск + +Сервер (на `ssh home`): + +```bash +cd ~/VanguardReMaster +docker compose up -d --build +curl http://127.0.0.1:18080/health +``` + +Клиент: + +1. Unity Hub → `client`, редактор **6000.6.6f1**. +2. Открыть `Assets/Scenes/Boot.unity`, Play. +3. Стенд по умолчанию — `http://192.168.31.158:18080`. + +## Проверки клиента + +```powershell +# EditMode +& 'C:\Program Files\Unity\Hub\Editor\6000.6.6f1\Editor\Unity.exe' ` + -batchmode -nographics -projectPath client ` + -runTests -testPlatform EditMode -testResults client\TestResults.xml + +# Boot → Login + 3D environment +& 'C:\Program Files\Unity\Hub\Editor\6000.6.6f1\Editor\Unity.exe' ` + -batchmode -nographics -projectPath client ` + -executeMethod Vanguard.Editor.SceneSmoke.Run +``` + +`SceneSmoke` заменяет PlayMode-тест загрузки сцен: Single-загрузка сцены +ломает стандартный PlayMode test runner. `SceneBuilder` пересобирает сцены: + +```powershell +& '...\Unity.exe' -batchmode -nographics -projectPath client ` + -executeMethod Vanguard.Editor.SceneBuilder.BuildAll +``` + +## Ключевые файлы клиента + +``` +client/Assets/Vanguard/Runtime/App/ + VanguardApp.cs composition root, персистентный + SceneFlow.cs переходы Login/Lobby/Collection/DeckBuilder/Battle + SceneEnvironment.cs 3D-фон сцен + SceneControllerBase.cs + LoginSceneController.cs + LobbySceneController.cs + CollectionSceneController.cs + DeckBuilderSceneController.cs + BattleSceneController.cs +client/Assets/Vanguard/Runtime/UI/ + LoginView.cs MetaView.cs OnboardingView.cs + CollectionView.cs DecksView.cs QueueView.cs BattleView.cs + UiKit.cs +client/Assets/Vanguard/Runtime/Battle/GameConnection.cs +client/Assets/Vanguard/Runtime/Api/ApiClient.cs + ApiContracts.cs +client/Assets/Vanguard/Editor/SceneBuilder.cs + SceneSmoke.cs +client/Assets/Vanguard/Scenes/*.unity +client/Assets/Plugins/Vanguard.Shared + MessagePack +``` + +## Решения + +- 3D-визуал, отдельные сцены; подробно — `docs/client-visual-direction.md`. +- `Boot` не показывается; `VanguardApp`/сервисы не пересоздаются. +- Очередь — оверлей Lobby; DeckBuilder «В бой» возвращает в Lobby с + выбранной колодой в `SceneFlow.PendingQueueDeck`. +- Токены в `PlayerPrefs` — dev; для релиза защищённое хранилище. +- HTTP разрешён только для dev (`insecureHttpOption: 2`); для релиза HTTPS. +- `GameConnection` использует `System.Net.WebSockets.ClientWebSocket` + (Windows/десктоп first); WebGL потребует другого транспорта. +- Сервер авторитарный; клиент отправляет только интенты, скрытые данные + не покидают сервер. + +## Следующие шаги + +1. Магазин в Lobby: `GET /api/store`, бустер за Gold/токен, показ 5 карт, + покупка второй триал-деки; балансы через `MetaService`. +2. История матчей и реплей: `GET /api/matches`, `GET /api/replays/{id}`. +3. Полный декбилдер: фильтры, счётчики, валидация. +4. 3D-наполнение: модели/арт, prefab-экраны, камера/анимации боя. +5. Локализация RU/EN, настройки, DOTween. +6. Лаунчер WPF. + +## Подводные камни + +- Не запускать `dotnet`/Docker на рабочем ПК; сервер проверяется на `ssh home`. +- В Unity нельзя открыть два экземпляра одного проекта: для batch-проверок + делать копию проекта (без `Library`) или закрывать редактор. +- Сцены ссылаются на скрипты по GUID; при копировании сцен копировать и + `.meta` контроллеров. +- `Vanguard.Shared.dll` — netstandard2.1 + MessagePack 3.1.12; при изменении + протокола пересобрать DLL и заменить в `client/Assets/Plugins`. +- `UiKit.CreateCanvas` по умолчанию **не** персистентный: Canvas принадлежит + сцене; EventSystem остаётся персистентным. +- Сцена `Boot` должна быть первой в Build Settings; сейчас там + `Boot`, `Login`, `Lobby`, `Collection`, `DeckBuilder`, `Battle`.