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

- README, CLAUDE.md, docs: назначение и границы, архитектура, конвенции, план
- docs/local-research.md — 36 находок по формату Health Auto Export, снятых на
  живых данных; документация приложения местами расходится с тем, что оно шлёт
- Taskfile, .golangci.yml, самодокументируемый config.example.toml
This commit is contained in:
av
2026-08-01 12:37:03 +03:00
commit 5e2385ba6e
12 changed files with 2318 additions and 0 deletions
+88
View File
@@ -0,0 +1,88 @@
# Конфиг golangci-lint (схема v2; устанавливается через `task setup`).
#
# Базовый набор v2 (`default: standard`) — errcheck, govet, ineffassign,
# staticcheck, unused. Сверх него включены линтеры, механизирующие конвенции
# из docs/conventions.md: то, что проверяет правило, не остаётся прозой.
version: "2"
linters:
enable:
- misspell
# docs/conventions.md, «Логи»: msg — константная категория, данные — в
# полях, единый стиль ключ-значение.
- sloglint
# docs/conventions.md: без fmt.Print* (логируем через slog), конфиг только
# из TOML (env не используем), время — только store.Now().
- forbidigo
# docs/conventions.md, «Ошибки»: сравнение через errors.Is/As.
- errorlint
# docs/conventions.md, «Ошибки»: ошибки — только stdlib.
- depguard
settings:
sloglint:
no-mixed-args: true # не мешать пары «ключ-значение» с slog.Attr
kv-only: true # принятый в проекте стиль вызова
static-msg: true # msg — константа, без fmt.Sprintf и интерполяции
forbidigo:
forbid:
- pattern: ^fmt\.Print.*$
msg: логируем через slog, в stdout напрямую не пишем (docs/conventions.md)
- pattern: ^os\.Getenv$
msg: конфигурация только из TOML, env для конфига не используем (docs/conventions.md)
- pattern: ^time\.Now$
msg: время генерирует store.Now() (UTC, единая точка) — docs/conventions.md
errorlint:
# Обёртка вида fmt.Errorf("%w: %v", ErrSentinel, err) осознанна: sentinel
# раскрываем для errors.Is, причину — намеренно нет.
errorf: false
asserts: true
comparison: true
depguard:
rules:
main:
deny:
- pkg: github.com/pkg/errors
desc: ошибки — только stdlib errors + fmt.Errorf (docs/conventions.md)
- pkg: github.com/cockroachdb/errors
desc: стек-трейсы избыточны, контекст несёт slog (docs/conventions.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]
# Единая точка генерации id и времени — им time.Now по определению можно.
- path: ^internal/(ident|store)/
text: time.Now
linters: [forbidigo]
# Замер длительности запроса — не метка времени в БД: засекается на
# входе транспорта и никуда не сохраняется.
- path: ^internal/httpapi/
text: time.Now
linters: [forbidigo]
# В тестах время задаётся явно, чтобы не зависеть от часов машины.
- path: _test\.go$
text: time.Now
linters: [forbidigo]
formatters:
exclusions:
generated: lax
paths:
- third_party$
- builtin$
- examples$