конвенции: перенести механизируемое в golangci-lint и internal/archrules
Правило, которое проверяет машина, не должно оставаться прозой: файл конвенций на сотни строк размазывает внимание по тривиальному — модель добросовестно проверит именование полей лога и не дойдёт до формы решения. Включены sloglint (константный msg, стиль ключ-значение), forbidigo (fmt.Print*, os.Getenv, time.Now мимо store.Now), errorlint (сравнение ошибок), depguard (сторонние пакеты ошибок). internal/archrules — сканеры на то, что линтером не выражается: направление зависимостей ядро↔транспорты, AUTOINCREMENT и серверное время в новых миграциях, матчинг ошибки по тексту. Код приведён к правилам: logging.StartCall как единая точка отсчёта длительности внешних вызовов, store.Now вместо time.Now в httpapi и часах воркера, slog.DiscardHandler в тестах. Перенесённое вычеркнуто из docs/conventions/* и openspec/config.yaml — прозой осталось только то, что правилом не выражается. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -26,6 +26,14 @@ type ExtCall struct {
|
||||
Attempt int // номер попытки; >0 — пишем поле retry (поле и метод Retry конфликтовали бы)
|
||||
}
|
||||
|
||||
// StartCall заводит запись о начинающемся вызове внешнего сервиса, засекая
|
||||
// время. Единая точка отсчёта длительности: клиентам не нужен собственный
|
||||
// time.Now, а конвенция «время генерирует store.Now()» остаётся без исключений
|
||||
// (здесь это не метка времени, а измерение — см. docs/conventions/logging.md).
|
||||
func StartCall(service, operation string) ExtCall {
|
||||
return ExtCall{Service: service, Operation: operation, Start: time.Now()} //nolint:forbidigo // единственная точка отсчёта длительности внешних вызовов
|
||||
}
|
||||
|
||||
func (c ExtCall) attrs(extra ...any) []any {
|
||||
a := make([]any, 0, 10+len(extra))
|
||||
a = append(a,
|
||||
|
||||
Reference in New Issue
Block a user