Add compact session state handoff
CI / test (push) Has been cancelled Details

This commit is contained in:
MpakobecEx 2026-10-21 18:01:18 +05:00
parent 6ed0998078
commit 8975b2de44
3 changed files with 166 additions and 17 deletions

View File

@ -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).
## Статус
| Блок | Состояние |

View File

@ -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`: сервер должен зависеть от него, а не наоборот.

135
docs/SESSION-STATE.md Normal file
View File

@ -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`.