последние штрихи версии два
Последние дни были про большие функции, роли и языки. А это метла, которая идёт следом: мелочи, которые как следует закрывают версию два.

Главная страница на китайском с тёмной темой. Всё тот же остров.
Список изменений пуст впервые с лета. Каждый кусок версии два выпущен, проверен и разложен по полкам: спецификации, описывающие, как всё должно себя вести, теперь живут в одной библиотеке, девятнадцать способностей глубиной, так что в следующий раз, когда я задумаюсь «стоп, а что я решил насчёт сроков хранения», ответ будет записан, а не жить у меня в голове.
И одно исправление, которое заслуживает отдельного абзаца, потому что оно бесило меня неделями, прежде чем я его понял: сайт постоянно меня разлогинивал. Примерно каждые пятнадцать минут: вылет, входи заново. Токен обновления, который должен держать сессию живой тридцать дней, всё это время был на месте, в куке, ограниченной путём /auth, а значит браузер отправлял её только на auth-запросы. Обычные заходы на страницы её не несли, так что тихому продлению, которое выполняется при каждой загрузке страницы, просто нечем было продлевать. Исправление по сути в одну строку:
return &http.Cookie{
Name: "refresh_token",
Value: rawToken,
Path: "/", // was "/auth", which the browser never sent on page visits
HttpOnly: true,
Secure: s.CookieSecure,
SameSite: http.SameSiteStrictMode,
}Одна строка, а дальше классический второй акт: первая версия исправления уронила мой тестовый сервер. Когда кука стала видна повсюду, логика продления срабатывала и при обработке самих auth-запросов, что запускало ещё одно продление, и ещё одно. Бесконечный цикл, память кончилась, сервер умер. Защита от этого тоже на месте, и я специально проверил тот самый сценарий: истёкший токен сессии, загрузка страницы, всё ещё в системе.
Так что если сайт раньше разлогинивал вас посреди комментария: больше не должен. Войдите один раз, и это надолго.