Bake first-parent git log at Server build and remember the SHA in a browser cookie. Co-authored-by: Cursor <cursoragent@cursor.com>
43 lines
2.7 KiB
Markdown
43 lines
2.7 KiB
Markdown
# Фаза 54. Что нового
|
||
|
||
## Зависимости
|
||
|
||
Нет. Сессия (фаза 38) уже ставит куку входа; это отдельная кука и отдельное окно.
|
||
|
||
## Зачем
|
||
|
||
После наката игрок не обязан читать git. Окно один раз показывает, что изменилось с прошлого
|
||
захода в этот браузер.
|
||
|
||
## Задачи
|
||
|
||
- [x] Сборка Server вшивает SHA и `git log --first-parent` (не вызов git в рантайме)
|
||
- [x] `GET /api/changelog?since=` с сессией: текущий SHA и коммиты строго после `since`
|
||
- [x] Нет `since`, неизвестный SHA, `since` = текущий — `commits` пустой
|
||
- [x] Subject `Mark phase N…` в окне нет; в цепочке якоря они остаются
|
||
- [x] Кука `hschool.seen-rev` (не HttpOnly, не сессионная): первый заход молча запоминает HEAD
|
||
- [x] Модалка только после `ensureSession` (вход и повторный вход после logout), не с меню школы
|
||
- [x] [`protocol.md`](../protocol.md) HTTP, версию сокета не бампить
|
||
|
||
## Тесты, без которых фаза не закрыта
|
||
|
||
- [x] Срез после известного SHA — видимые коммиты старше→новее, без `Mark phase`
|
||
- [x] Якорь на `Mark phase` — следующие видимые всё равно отдаются
|
||
- [x] Нет `since` / неизвестный SHA / `since` = текущий — пустой список
|
||
- [x] `GET /api/changelog` без сессии — `401`
|
||
- [x] С сессией без `since` — 40 hex в `current`, `commits` пустой
|
||
- [x] Нет куки — запрос без `since`, кука = `current`, диалога нет
|
||
- [x] Кука старше, сервер вернул коммиты — диалог, по закрытию кука = `current`
|
||
|
||
## Критерий готовности
|
||
|
||
- Первый заход после деплоя с новой сборкой Server показывает окно; повторный заход в том же
|
||
браузере — нет
|
||
- `run-aspire` без `--rebuild` после коммита только в доках может показать старый SHA: вшито
|
||
на сборке, не HEAD рабочего дерева
|
||
|
||
## Стоп
|
||
|
||
Не писать last-seen в `users.json`. Не бампить сокет. Не вызывать git из бегущего сервера.
|
||
Не показывать окно при возврате из школы на меню.
|