# Go lint tooling decision

## Decision

TiPoC replaces the deprecated `golint` command with Revive `v1.14.0` and keeps
staticcheck `v0.8.1`, `go vet`, and gofmt as mandatory zero-finding checks.
Revive `v1.14.0` is pinned because it is compatible with the repository's Go
1.24 directive; later Revive releases require newer Go toolchains.

The replacement uses an explicit safety-oriented rule allowlist in
`tools/revive.toml`. Every enabled rule fails the guard on the first finding;
there is no wildcard exclusion, finding baseline, path exclusion, or severity
downgrade.

## Why golint findings are not migrated

The removed golint baseline contained 194 historical findings, primarily
exported-symbol comment wording, package-name stutter suggestions, and context
parameter ordering. Golint is unmaintained, and applying its naming advice
would force public API churn without improving runtime correctness. Issue #155
explicitly permits replacing golint through a reviewed tooling decision rather
than renaming APIs only to satisfy deprecated advice.

Revive's `exported`, `package-comments`, `var-naming`, and
`context-as-argument` rules are therefore not enabled in this zero-debt safety
profile. Exported API documentation remains a code-review responsibility.

## Enforced replacement scope

The Revive profile retains low-noise golint-compatible checks for imports,
errors, receiver names, range forms, and variable declarations. It adds
maintained safety checks for atomic operations, context key types, data races,
struct tags, suspicious integer-to-string conversions, unconditional
recursion, unreachable code, and WaitGroup values.

The complete guard contract is:

1. gofmt reports no files.
2. `go vet ./...` exits successfully.
3. `staticcheck ./...` exits successfully with no baseline.
4. Revive exits successfully under `tools/revive.toml` with no baseline.

Any future rule addition or removal changes this policy and requires an
explicitly reviewed PR.
