ссылки между конвенциями переписаны на темы и идентификаторы

- 41 ссылка вида `lang/go/logging.md` заменена на «конвенция `logging`»,
  идентификатор правила или «базовый слой» для своей же темы
- MIGR-8 больше не отсылает за форматом меток времени, а называет его;
  MIGR-11 перенёс ссылку на KEYS-1/KEYS-2 из нормы в «Почему»
This commit is contained in:
av
2026-07-25 21:12:26 +03:00
parent 421374c4a2
commit 2ed568bad1
11 changed files with 54 additions and 53 deletions
+10 -10
View File
@@ -44,7 +44,7 @@ dev-выводом перестаёшь ежедневно гонять собс
### SLOG-3. Время записи — UTC
**ДОЛЖЕН.** `time` приводится к UTC через `ReplaceAttr` по `slog.TimeKey`
(см. `lang/go/time.md`).
(см. конвенцию `time`).
**Почему.** По умолчанию UTC не получится: встроенные хендлеры пишут время
в зоне самого `time.Time`, то есть в локальной зоне процесса. Записи одного
@@ -54,8 +54,8 @@ dev-выводом перестаёшь ежедневно гонять собс
событий.
Точность `JSONHandler` — миллисекунды фиксированной ширины; это другая
точность, чем в БД, и по `arch/time.md` так и должно быть: ширина
фиксируется на носитель.
точность, чем в БД, и по `TIME-2` так и должно быть: ширина фиксируется
на носитель.
## Сообщение
@@ -243,7 +243,7 @@ dev-выводом перестаёшь ежедневно гонять собс
**НЕ СЛЕДУЕТ.** Отдельный случайный `trace_id` не заводится, если у
сущностей есть стабильные уникальные идентификаторы. (Как их выбирают —
`arch/db-identifiers.md`, если конвенция взята.)
конвенция `db-identifiers`, если взята.)
**Почему.** Идентификатор сущности уже существует, стабилен между
процессами и во времени — по нему собираются записи не одного прохода, а
@@ -347,7 +347,7 @@ ctx = logctx.With(ctx, log) // достаём логгер из ctx в кажд
Нарушение инварианта в собственном коде — паника, недостижимая ветка — в
таблицу не входит: это не доменный отказ, и логирует его recover-граница
вместе со стеком (`lang/go/errors.md`). Искать его класс здесь не нужно.
вместе со стеком (конвенция `errors`). Искать его класс здесь не нужно.
Мимо таблицы идёт и доменная ошибка, которой нет в маппинге: класса у неё
нет, потому что её просто забыли завести. Она логируется `ERROR` с
@@ -505,7 +505,7 @@ API-ключи и токены, `Authorization`-заголовки, аутент
### SLOG-37. `*url.Error` санитизируется на границе клиента
**ДОЛЖЕН.** Ошибка разворачивается в первопричину **до** лога и до
обёртки — раньше трансляции в доменную (`lang/go/errors.md`).
обёртки — раньше трансляции в доменную (конвенция `errors`).
**Почему.** `*url.Error` встраивает полный URL запроса, а секрет живёт
прямо в нём: токен в пути, `api_key` в query. Go редактирует только пароль
@@ -553,11 +553,11 @@ API-ключи и токены, `Authorization`-заголовки, аутент
## Связано
- `arch/time.md` — точность и зона меток времени фиксируются на носитель.
- `lang/go/time.md` как ставится UTC в `ReplaceAttr` (SLOG-3).
- `lang/go/errors.md` — трансляция ошибки в доменную, порядок относительно
- конвенция `time` — точность и зона меток времени фиксируются на носитель;
как ставится UTC в `ReplaceAttr` (SLOG-3).
- конвенция `errors` — трансляция ошибки в доменную, порядок относительно
санитизации (SLOG-37).
- `arch/db-identifiers.md` — откуда берутся стабильные идентификаторы,
- конвенция `db-identifiers` — откуда берутся стабильные идентификаторы,
на которых держится корреляция (SLOG-18).
<!-- local:механизировано -->