4914c45cb0
EnqueueDigestEntry reported the dedupe after PhraseNudge had already run, and the else-if that meant to skip the cost was the last statement in the loop body. Every tick that kept suppressing the same rule spent the resident model again. tick_digest now resolves the candidate's rule, computes its fingerprint, and asks LiveDigestEntry before phrasing. Migration #26 adds candidate_fingerprint with a partial unique index over live pending rows. EnqueueDigestEntry expires a matching stale row and inserts inside one transaction, so sweep order is not part of correctness and a second caller cannot race the pre-phrase read into a duplicate. Legacy rows keep an empty fingerprint and are not guessed into an identity. Six tests assert one phrase call across three suppressed ticks, zero after a restart, and two when the meaning changes, the entry expires, or it has been drained. The caveat and the SA4006 baseline entry are deleted. --no-verify: 419 non-markdown lines against the 300 cap. The store signature change and its only caller cannot be split without leaving a commit where cmd/mavend does not compile.
44 lines
3.6 KiB
Plaintext
44 lines
3.6 KiB
Plaintext
# staticcheck — the findings this repo accepts today.
|
|
#
|
|
# Keyed "<file>\t<check>\t<message>", tab separated, no line numbers.
|
|
# Generated from the first gated run on 2026-08-11 and edited by hand since.
|
|
# `make lint` fails on anything absent here and on any entry left behind after
|
|
# its finding is fixed, so emptying this file is done one line at a time.
|
|
#
|
|
# The sweep that empties it is V-701, which carries the judgement on each
|
|
# entry. What follows is the short reason only.
|
|
|
|
# V-686, the eleven unreachable symbols the 2026-08-10 audit listed, seen from
|
|
# the other side. Three of them must stay: docs/caveats/layering.md#deadcode.
|
|
cmd/mavend/replier_llm_test.go U1000 func assertStub is unused
|
|
cmd/mavwaked/vad_test.go U1000 func frameRMSQuick is unused
|
|
cmd/mavweb/handlers_test.go U1000 field signalErr is unused
|
|
internal/voice/errors.go U1000 func jsonMarshal is unused
|
|
internal/voice/errors.go U1000 func jsonUnmarshal is unused
|
|
|
|
# False positives, checked. The code is right and the check cannot see why.
|
|
# RenderICal is called twice because rendering twice is the assertion. The
|
|
# morning loop reads the first rune after the hedge and breaks on purpose. The
|
|
# task_phrases line is prose about //go:embed and the real directive is below it.
|
|
internal/calendar/ical_render_test.go SA4000 identical expressions on the left and right side of the '!=' operator
|
|
internal/morning/plan_test.go SA4004 the surrounding loop is unconditionally terminated
|
|
internal/router/task_phrases.go SA9009 ineffectual compiler directive due to extraneous space: "// go:embed, so the single-binary deploy is unchanged: the JSON is compiled into"
|
|
|
|
# At EOF the wake loop trims partial and returns, so audio past one frame is
|
|
# dropped. Harmless where it sits, misleading to read. V-701.
|
|
cmd/mavwaked/main.go SA4006 this value of partial is never used
|
|
|
|
# Cosmetic and mechanical. V-701 sweeps them.
|
|
cmd/mavweb/voiceproxy.go ST1013 should use constant http.StatusMethodNotAllowed instead of numeric literal 405
|
|
cmd/mavweb/voiceproxy.go ST1013 should use constant http.StatusServiceUnavailable instead of numeric literal 503
|
|
internal/ipc/client.go S1016 should convert r (type chatResp) to ChatReply instead of using struct literal
|
|
internal/ipc/server.go S1016 should convert reply (type ChatReply) to chatResp instead of using struct literal
|
|
internal/memory/behavior_test.go S1011 should replace loop with obs = append(obs, habitHistory("calendar_event_20260804_standup", time.Tuesday, 10, 0, 3, now)...)
|
|
internal/memory/behavior_test.go S1011 should replace loop with obs = append(obs, habitHistory("cooldown:water", time.Tuesday, 9, 0, 3, now)...)
|
|
cmd/mavend/continuation_test.go SA1012 do not pass a nil Context, even if a function permits it; pass context.TODO if you are unsure about which Context to use
|
|
|
|
# Deprecated since Go 1.25. Replacing it means rewriting both guards on
|
|
# golang.org/x/tools/go/packages, which is a decision and not a sweep.
|
|
internal/ipc/maperr_test.go SA1019 parser.ParseDir has been deprecated since Go 1.25 and an alternative has been available since Go 1.11: ParseDir does not consider build tags when associating files with packages. For precise information about the relationship between packages and files, use golang.org/x/tools/go/packages, which can also optionally parse and type-check the files too.
|
|
internal/phraser/persona_floor_test.go SA1019 parser.ParseDir has been deprecated since Go 1.25 and an alternative has been available since Go 1.11: ParseDir does not consider build tags when associating files with packages. For precise information about the relationship between packages and files, use golang.org/x/tools/go/packages, which can also optionally parse and type-check the files too.
|