- Раскладка docs/ приведена к канону 2: заведены passport/architecture/ database/security/review и research; docs/specs, drafts, backlog, review/ и BRIEF.md разобраны и удалены, беклог переехал в docs/tasks (34 задачи, 6 целей, слаги на английский). - Нарративы specs удалены как дубли openspec-спек после поимённой сверки; остаток заведён задачами (редактор маппинга ревью, крайние случаи именования), отказ от сущности title промоутнут в ADR. - Проектные копии агентов и скиллов ревью/пайплайна удалены в пользу плагинов av-dev-pm и av-dev-pipeline; в task gate добавлен шаг canon вместо er-schema.
93 lines
4.3 KiB
YAML
93 lines
4.3 KiB
YAML
# Конфиг golangci-lint (схема v2; устанавливается через `task setup`).
|
||
#
|
||
# Базовый набор v2 (`default: standard`) — errcheck, govet, ineffassign,
|
||
# staticcheck, unused. Сверх него включены линтеры, которые механизируют
|
||
# конвенции из docs/conventions/*: то, что проверяет правило, не должно
|
||
# оставаться прозой в конвенциях и в промптах ревью (процедура промоута —
|
||
# references/promote.md скилла av-dev-pipeline:review-pipeline; перечень уже
|
||
# механизированного — docs/conventions/README.md).
|
||
version: "2"
|
||
|
||
linters:
|
||
enable:
|
||
- misspell
|
||
# docs/conventions/logging.md: msg — константная категория, данные — в
|
||
# полях, единый стиль ключ-значение.
|
||
- sloglint
|
||
# docs/conventions/logging.md (без fmt.Println), config.md (конфиг только
|
||
# из TOML, env не используем), database.md (время — только store.Now()).
|
||
- forbidigo
|
||
# docs/conventions/errors.md: сравнение ошибок через errors.Is/As, а не
|
||
# `err == ErrX` и не приведением типа.
|
||
- errorlint
|
||
# docs/conventions/errors.md: ошибки — только stdlib.
|
||
- depguard
|
||
|
||
settings:
|
||
sloglint:
|
||
no-mixed-args: true # не мешать пары «ключ-значение» с slog.Attr
|
||
kv-only: true # принятый в проекте стиль вызова
|
||
static-msg: true # msg — константа, без fmt.Sprintf и интерполяции
|
||
# key-naming-case НЕ включаем: словарь полей намеренно смешанный —
|
||
# доменные поля snake_case, системные домены с точкой (`http.method`,
|
||
# `ext.service`, адаптация OpenTelemetry). См. logging.md, «Поля».
|
||
|
||
forbidigo:
|
||
forbid:
|
||
- pattern: ^fmt\.Print.*$
|
||
msg: логируем через slog, в stdout напрямую не пишем (docs/conventions/logging.md)
|
||
- pattern: ^os\.Getenv$
|
||
msg: конфигурация только из TOML, env для конфига не используем (docs/conventions/config.md)
|
||
- pattern: ^time\.Now$
|
||
msg: время генерирует store.Now() (UTC, единая точка) — docs/conventions/database.md
|
||
|
||
errorlint:
|
||
# Обёртка вида fmt.Errorf("%w: %v", ErrSentinel, err) осознанна: sentinel
|
||
# раскрываем для errors.Is, причину — намеренно нет (errors.md, «%w vs %v»).
|
||
errorf: false
|
||
asserts: true
|
||
comparison: true
|
||
|
||
depguard:
|
||
rules:
|
||
main:
|
||
deny:
|
||
- pkg: github.com/pkg/errors
|
||
desc: ошибки — только stdlib errors + fmt.Errorf (docs/conventions/errors.md)
|
||
- pkg: github.com/cockroachdb/errors
|
||
desc: стек-трейсы избыточны, контекст несёт slog (docs/conventions/errors.md)
|
||
|
||
exclusions:
|
||
generated: lax
|
||
presets:
|
||
- comments
|
||
- common-false-positives
|
||
- legacy
|
||
- std-error-handling
|
||
paths:
|
||
- third_party$
|
||
- builtin$
|
||
- examples$
|
||
rules:
|
||
# CLI — другая поверхность: печатает результат в stdout и меряет
|
||
# длительность своей работы, это не логирование и не время в БД.
|
||
- path: ^cmd/
|
||
linters: [forbidigo]
|
||
# Интеграционные тесты берут креды внешних сервисов из окружения —
|
||
# это не конфигурация приложения.
|
||
- path: _test\.go$
|
||
text: os.Getenv
|
||
linters: [forbidigo]
|
||
# Единые точки генерации id и времени — им time.Now по определению можно.
|
||
- path: ^internal/(ident|store)/
|
||
text: time.Now
|
||
linters: [forbidigo]
|
||
|
||
formatters:
|
||
exclusions:
|
||
generated: lax
|
||
paths:
|
||
- third_party$
|
||
- builtin$
|
||
- examples$
|