Show unseen Server commits after login.

Bake first-parent git log at Server build and remember the SHA in a browser cookie.

Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
Leonid Pershin
2026-08-20 11:43:36 +03:00
co-authored by Cursor
parent 1e7014cabd
commit 449be4e0ea
20 changed files with 751 additions and 1 deletions
+25
View File
@@ -118,3 +118,28 @@
Голый `dotnet run --project src/HSchool.AppHost` по-прежнему собирает — так удобнее агентам с
грязным деревом. Linux-обёртки нет: точка входа Windows — `.cmd`. Протокол, HTTP и сейв не
трогаем.
## Что нового после входа
### Зачем
Альфа обновляется часто. Игрок не смотрит git: если с прошлого захода в этот браузер накатили
другую сборку Server, один раз показать, что вошло в неё.
### Было / Стало / Почему
**Было.** Нет версии сборки на экране. Сессионная кука HttpOnly и про вход.
**Стало.** Сборка Server вшивает `HEAD` и `git log --first-parent`. `GET /api/changelog?since=`
отдаёт текущий SHA и коммиты после якоря. Клиент держит `hschool.seen-rev` (год, `Path=/`,
`SameSite=Lax`, не HttpOnly). Первый заход без куки окно не показывает — только запоминает
текущий SHA. Окно — после входа, не при возврате из школы.
**Почему.** «Накатанный» — то, что в dll, а не грязный HEAD при `--no-build`. First-parent после
`--no-ff` — это слитые фазы, не внутренняя нарезка ветки. `Mark phase N` оставляем в цепочке
якорем, в список не рисуем: иначе кука на таком HEAD потеряла бы следующее слияние.
### Что не входит
Ручной `CHANGELOG.md`. Запись на пользователе в `users.json`. Вызов git из бегущего процесса.
Бамп версии сокета. Окно внутри открытой школы.