Развести номера ADR: 064/065/066 этой ветки → 073/074/075
Ветка отведена от 522ba89, где последним был ADR-063, и заняла
064–072. Тем временем в main через #3 и #4 пришли свои 064
(строка ввода — div вместо form), 065 (стороны сообщений)
и 066 (серверного перца нет).
Переезжают три ADR этой ветки, 067–072 остаются на месте:
их номера свободны, а внутренние ссылки менять незачем.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01QR8uS3zGkybzWRW4GEY1oz
This commit is contained in:
@@ -17,7 +17,7 @@ import (
|
||||
//
|
||||
// version и commitAt отвечают на вопрос «какой код сейчас работает»:
|
||||
// короткая ревизия сборки и время коммита, а не момент компиляции
|
||||
// (ADR-065). Отдельного эндпоинта им не заводится — конфигурацию клиент
|
||||
// (ADR-074). Отдельного эндпоинта им не заводится — конфигурацию клиент
|
||||
// читает до входа и так.
|
||||
func (s *server) config(w http.ResponseWriter, r *http.Request) {
|
||||
info := build.Current()
|
||||
|
||||
@@ -112,7 +112,7 @@ func TestConfig(t *testing.T) {
|
||||
t.Errorf("maxMessageChars: получено %d, ожидалось 4000", got.MaxMessageChars)
|
||||
}
|
||||
// Версия — то же самое, что печатает `bare version`: одно место,
|
||||
// один формат (ADR-065). Тестовому бинарю vcs.* не проставляются,
|
||||
// один формат (ADR-074). Тестовому бинарю vcs.* не проставляются,
|
||||
// поэтому здесь проверяется в том числе поведение без build info —
|
||||
// «unknown» и 0.
|
||||
if !validVersion(got.Version) {
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
// Package build отвечает на вопрос «какой код сейчас работает»: ревизия
|
||||
// и время коммита, которые git оставляет в бинаре при сборке (ADR-065).
|
||||
// и время коммита, которые git оставляет в бинаре при сборке (ADR-074).
|
||||
// Момента компиляции здесь нет и не будет: штамп времени сборки делал бы
|
||||
// каждую пересборку одного коммита новым файлом, а подлинность бинаря
|
||||
// проверяется сравнением хеша со сборкой из тега (ADR-022).
|
||||
|
||||
@@ -9,7 +9,7 @@ import (
|
||||
const hash = "9f2c1ab7d3e4c5061728394a5b6c7d8e9f001122"
|
||||
|
||||
// Формат версии: семь символов ревизии, «+dirty» у изменённого дерева,
|
||||
// «unknown» без ревизии (ADR-057, ADR-065).
|
||||
// «unknown» без ревизии (ADR-057, ADR-074).
|
||||
func TestVersion(t *testing.T) {
|
||||
cases := []struct {
|
||||
info Info
|
||||
|
||||
@@ -70,7 +70,7 @@ const (
|
||||
dropEvery = time.Minute
|
||||
)
|
||||
|
||||
// Чтение тела ответа push-сервиса ради кода причины (ADR-064).
|
||||
// Чтение тела ответа push-сервиса ради кода причины (ADR-073).
|
||||
const (
|
||||
// maxReasonBody — сколько байт тела читаем. Код причины стоит в начале
|
||||
// ответа; остальное дочитывается в никуда, ради переиспользования
|
||||
@@ -331,7 +331,7 @@ func (s *Sender) deliver(j job) {
|
||||
return
|
||||
}
|
||||
defer resp.Body.Close()
|
||||
// Начало тела нужно ради кода причины (ADR-064), остаток дочитывается
|
||||
// Начало тела нужно ради кода причины (ADR-073), остаток дочитывается
|
||||
// в никуда: иначе соединение не переиспользуется.
|
||||
head, _ := io.ReadAll(io.LimitReader(resp.Body, maxReasonBody))
|
||||
io.Copy(io.Discard, resp.Body)
|
||||
@@ -432,7 +432,7 @@ func (s *Sender) report(format string, args ...any) {
|
||||
}
|
||||
|
||||
// status — ответ push-сервиса для журнала: код и, если он разобран,
|
||||
// короткий код причины из тела (ADR-064).
|
||||
// короткий код причины из тела (ADR-073).
|
||||
func status(code int, body []byte) string {
|
||||
if r := serviceReason(body); r != "" {
|
||||
return fmt.Sprintf("%d (%s)", code, r)
|
||||
@@ -443,7 +443,7 @@ func status(code int, body []byte) string {
|
||||
// serviceReason достаёт из тела ответа короткий код причины: APNs отвечает
|
||||
// {"reason":"BadJwtToken"}, Mozilla — {"errno":…,"error":"Not Found"}.
|
||||
// Код — диагностика вендора, а не данные пользователя, и без него отказ
|
||||
// не читается: голый «403» сутки выглядел как «что-то с пушами» (ADR-064).
|
||||
// не читается: голый «403» сутки выглядел как «что-то с пушами» (ADR-073).
|
||||
//
|
||||
// Тело всё же приходит снаружи, поэтому в журнал идёт не оно, а то, что
|
||||
// прошло safeReason.
|
||||
|
||||
@@ -193,7 +193,7 @@ func TestVAPIDSubjectInToken(t *testing.T) {
|
||||
}
|
||||
|
||||
// Отказ push-сервиса читается по журналу: статус и код причины из тела
|
||||
// (ADR-064). Без кода 403 от APNs неотличим от любого другого отказа.
|
||||
// (ADR-073). Без кода 403 от APNs неотличим от любого другого отказа.
|
||||
func TestServiceStatusInLog(t *testing.T) {
|
||||
srv := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
|
||||
io.Copy(io.Discard, r.Body)
|
||||
@@ -225,7 +225,7 @@ func TestServiceStatusInLog(t *testing.T) {
|
||||
|
||||
// Код причины берётся из тела ответа, но телом распоряжается чужая
|
||||
// сторона: всё, что на короткий код не похоже, в журнал не идёт вовсе
|
||||
// (ADR-064, docs/deploy.md, «Логи»).
|
||||
// (ADR-073, docs/deploy.md, «Логи»).
|
||||
func TestServiceReason(t *testing.T) {
|
||||
const endpoint = "web.push.apple.com"
|
||||
cases := []struct{ body, want string }{
|
||||
|
||||
Reference in New Issue
Block a user