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