a926383827
The 2026-08-10 audit asked for three analyzers. V-682 wired the first as `make vuln`. The other two were still absent: neither was installed on the box and no target ran them, so every reachability claim in the audit stood unchecked. `make lint` runs staticcheck v0.7.0 and `make deadcode` runs deadcode v0.48.0. Both are pinned in the Makefile beside GO_VERSION and installed into deps/bin the way govulncheck is, because a tool is not a dependency of the module. Both carry the CGO env `test` carries, or the four CGO daemons fail to load and the analyzer reports a build error instead of a finding. `make analyze` runs all three. None joins `make test`: they install over the network and `test` has to pass on a box with no route out. Neither reports zero, so neither fails on its own output. staticcheck finds 20 and deadcode finds 13, and the audit asked for an allowlist by name, because three of deadcode's eleven production symbols are deliberate and an unannotated list invites deleting them. The accepted set lives in scripts/analyzers/*.baseline, one line per finding with the reason it stays, and scripts/analyzer-gate.sh gives the verdict. A key holds file, check id and message, never a line number: a line number goes stale on the next edit above it, and a gate that reports moved findings as new ones teaches the reader to skip it. An entry whose finding is gone also fails, so a fix that leaves its line behind does not pass. deadcode runs with -test, because a test is a caller. Without the flag the report is 172 lines, most of internal/router/eval, and none of it is a mistake. With it, the 11 symbols the audit listed come back exactly, plus two test helpers it did not count. Three staticcheck findings were checked and are false positives, recorded as such: the iCal determinism test must call RenderICal twice, the morning hedge loop breaks after the first rune on purpose, and the SA9009 line is prose about //go:embed with the real directive below it. One is V-687 already. The remaining 17 are V-701 with the judgement on each. The analyzers caveat is deleted rather than edited. What replaces it is the limit that is now true: the gates are green against a baseline, not against zero.
33 lines
1.6 KiB
Plaintext
33 lines
1.6 KiB
Plaintext
# deadcode — the unreachable symbols this repo accepts today.
|
|
#
|
|
# Keyed "<file>\t unreachable \t<symbol>", tab separated, no line numbers.
|
|
# Generated from the first gated run on 2026-08-11 and edited by hand since.
|
|
# `make deadcode` fails on anything absent here and on any entry left behind
|
|
# after its symbol is deleted.
|
|
#
|
|
# The gate runs with -test, so a test file counts as a root. Without it the
|
|
# whole of internal/router/eval is unreachable and the report is 172 lines of
|
|
# fixtures nobody wrote by mistake.
|
|
#
|
|
# Eleven of these are V-686, from the 2026-08-10 audit. Three of the eleven
|
|
# must stay and the audit says why: HisGender is a documented seam tied to
|
|
# V-399, AudioDuration should call internal/audio rather than be deleted, and
|
|
# CountWord is a safe delete. Read docs/caveats/layering.md#deadcode before
|
|
# removing any of them.
|
|
cmd/mavwaked/vad.go unreachable AudioDuration
|
|
cmd/mavwaked/vad.go unreachable PCMToF32
|
|
internal/crawl/watch.go unreachable Watcher.Watches
|
|
internal/phraser/confirm.go unreachable IsC
|
|
internal/phraser/eval/checks.go unreachable HisGender
|
|
internal/phraser/plural.go unreachable CountWord
|
|
internal/update/update.go unreachable WithClock
|
|
internal/voice/errors.go unreachable jsonMarshal
|
|
internal/voice/errors.go unreachable jsonUnmarshal
|
|
internal/webauthn/cbor.go unreachable cborValue.At
|
|
internal/worker/server.go unreachable Server.SetSynthesizer
|
|
|
|
# Two test helpers the audit did not count, because it listed production
|
|
# symbols only. A helper no test calls is dead the same way.
|
|
cmd/mavend/replier_llm_test.go unreachable assertStub
|
|
cmd/mavwaked/vad_test.go unreachable frameRMSQuick
|