Skip to content

ci: re-enable staticcheck (pinned standalone) + fix the 5 non-ST1005 findings - #302

Merged
LukasWodka merged 3 commits into
developfrom
ci/279-staticcheck-pinned
Jul 14, 2026
Merged

ci: re-enable staticcheck (pinned standalone) + fix the 5 non-ST1005 findings#302
LukasWodka merged 3 commits into
developfrom
ci/279-staticcheck-pinned

Conversation

@LukasWodka

@LukasWodkaLukasWodka commented Jul 14, 2026

Copy link
Copy Markdown
Contributor

Summary

WS-A.2 of epic tracebloc/backend#1106: re-enable staticcheck as a pinned standalone tool (staticcheck@2025.1.1, -checks all,-ST1005) in both the Makefile lint target and build.yml's lint job, mirroring the existing errcheck/ineffassign/misspell pin pattern — and fix the full set of 5 non-ST1005 findings so the gate lands blocking and green.

The original disable story (golangci-lint's SSA analysis OOM/time-budgeting the runner on this module's k8s.io-heavy dep tree) is stale for the standalone binary: a full cold go run …staticcheck@2025.1.1 -checks all,-ST1005 ./... is a few seconds wall locally (~3s warm via make lint). The stale build.yml comment about "going back to the action when #6 has a strategy" is deleted.

Findings fixed (verified by running the pinned tool — exactly the 5 the ticket predicted)

CheckLocationFix
ST1008internal/cli/resources_set_test.go:45runSet now returns (string, error) — error last (all ~20 call sites swapped)
ST1003internal/push/preflight.go:518CheckMaskIdColumnCheckMaskIDColumn (exported; call sites + comments in push package updated, incl. TestCheckMaskIDColumn)
ST1003internal/schema/validate.go:267errors_aserrorsAs (+ coverage-test references)
ST1003internal/cli/ingest_test.go:250io_eof_or_similarioEOFOrSimilar
ST1020internal/resources/set.go:168CoreFloorText doc comment now starts with the function name

All renames are identifier-only — no behavior change.

Deliberately NOT in this PR (follow-up)

ST1005 (error-string style) stays excluded: it flags ~58 findings, most of them customer-visible error strings whose wording deserves a deliberate review, not a mechanical sweep. Noted in both the Makefile and build.yml comments; needs its own ticket/PR.

Test plan (ran locally on this branch)

  • go run honnef.co/go/tools/cmd/staticcheck@2025.1.1 -checks all,-ST1005 ./...0 findings (was 5)
  • go build ./...
  • go test -race ./internal/cli/... ./internal/push/... ./internal/schema/... ./internal/resources/... — all green
  • make lint end-to-end (errcheck + ineffassign + misspell + staticcheck) — green, ~3s warm
  • gofmt -s -l . clean; build.yml YAML-parses
  • Not run locally: full 8-platform build matrix, installer harness, e2e — CI covers these

Coordination note

Expected trivial rebase vs sibling PRs touching build.yml's lint job / the Makefile (WS-A.3 #280 and WS-A.4 #281 stack on this branch) — merge order: this PR → #280's PR → #281's PR, but each is a surgical edit so any order rebases trivially.

Fixes#279

🤖 Generated with Claude Code


Note

Low Risk
Changes are mostly CI/Makefile gates and mechanical renames with no runtime behavior change; risk is low aside from new PR failures if future code adds unreachable symbols outside the allowlist.

Overview
Re-enables staticcheck as a pinned standalone gate (staticcheck@2025.1.1, -checks all,-ST1005) in Makefilelint and build.yml, aligned with the existing errcheck/ineffassign/misspell pin pattern. ST1005 stays off until customer-facing error strings get a deliberate pass.

Fixes the five findings that blocked a green gate: runSet returns (string, error) (ST1008), CheckMaskIDColumn / errorsAs / ioEOFOrSimilar naming (ST1003), and CoreFloorText doc comment (ST1020). Renames are identifier-only.

The same diff also tightens hygiene: goimports -local in CI and make fmt / fmt-check, Dependabot for gomod (grouped k8s / golang.org/x) and github-actions, blocking deadcode via scripts/deadcode-check.sh plus an allowlist for four known false positives, and removal or relocation of unreachable helpers (clearAll, isSubmitError, allCategoryIDs) so the binary stays free of test-only entrypoints. Import grouping tweaks in split data_ingest_* files are formatting-only.

Reviewed by Cursor Bugbot for commit 5a49f44. Bugbot is set up for automated code reviews on this repo. Configure here.

@LukasWodka
LukasWodka requested a review from saadqbalJuly 14, 2026 12:19
@LukasWodka

Copy link
Copy Markdown
ContributorAuthor

👋 Heads-up — Code review queue is at 39 / 30

Above the WIP limit. The team convention is to review existing PRs before opening new work.

Open PRs currently in Code review (oldest first):

  • averaging-service#181 — feat(weights): normalize-on-read — mixed cycles average instead of rejecting (SEC-03 §8 step 2) · author: @shujaatTracebloc · no reviewer assigned
  • averaging-service#182 — feat(weights): averaging writes SafeTensors (TF + PyTorch) — SEC-03 §8 step 4 · author: @shujaatTracebloc · no reviewer assigned
  • backend#1079 — feat(global_meta): edge dataset_meta exposure + attributes contract at ingest (#924 G4a) · author: @divyasinghds · no reviewer assigned
  • backend#1086 — docs(rfc): SafeTensors weight-format migration — SEC-03 Phase 1 (RFC 0004) · author: @shujaatTracebloc · no reviewer assigned
  • backend#1093 — chore(deps): bump django from 5.2.14 to 5.2.15 · author: @dependabot · no reviewer assigned
  • backend#1095 — feat(experiment): configurable preprocessing knobs incl. tabular scaler — RFC 0003 L1 + L1b (#1094) · author: @LukasWodka · no reviewer assigned
  • backend#1100 — fix(boot): pin SDK install to tracebloc==0.11.2, drop 404 dev line (#1098) · author: @LukasWodka · reviewer: @saqlainsyed007
  • backend#1105 — perf(api): query micro-fixes — notifications N+1, cached data_scientist, composite index, sampling (#975) · author: @aptracebloc · no reviewer assigned
  • cli#266 — main - > enhance CLI features and tests · author: @saadqbal · no reviewer assigned
  • cli#278 — fix(deps): toolchain go1.26.5 + x/net v0.57.0 — clear 6 reachable vulns; govulncheck CI gate · author: @LukasWodka · reviewer: @saadqbal

Pull from review before opening new work. (This is a nudge from the kanban WIP check, not a block.)

@LukasWodka

Copy link
Copy Markdown
ContributorAuthor

@BugBot run

@cursorcursorBot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

✅ Bugbot reviewed your changes and found no new issues!

Comment @cursor review or bugbot run to trigger another review on this PR

Reviewed by Cursor Bugbot for commit 88626ef. Configure here.

saadqbal
saadqbal previously approved these changes Jul 14, 2026

@saadqbalsaadqbal left a comment

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

👍 The 5 fixes are all mechanical initialism/underscore renames (behavior-preserving) — verified no stale names linger and all builds/Lint/Test are green with staticcheck now running all,-ST1005. Sensible to exclude ST1005 given the user-facing sentence-style error strings.

@saadqbal

Copy link
Copy Markdown
Collaborator

Status (merge batch): approved, but blocked on a rebase — conflicts with develop on build.yml/Makefile (the lint/govulncheck version block collided with #301, now merged). Rebase onto develop + re-request review. Your #304#313 stack lands after this one.

LukasWodkaand others added 3 commits July 14, 2026 19:17
…findings
Pinned staticcheck@2025.1.1 joins the standalone lint set in both the
Makefile lint target and build.yml's lint job (-checks all,-ST1005),
mirroring the errcheck/ineffassign pin pattern. The golangci-lint OOM
story that originally disabled it is stale for the standalone binary:
a full run is ~12s wall locally.
Findings fixed (the full non-ST1005 set):
- ST1008: runSet (resources_set_test) returns (string, error), error last
- ST1003: CheckMaskIdColumn -> CheckMaskIDColumn (+ call sites/comments)
- ST1003: errors_as -> errorsAs, io_eof_or_similar -> ioEOFOrSimilar
- ST1020: CoreFloorText doc comment starts with the function name
ST1005 stays excluded: it flags ~58 customer-visible error strings that
need a wording review, not a mechanical sweep — separate follow-up.
Rebased onto develop: union-merged the lint job with develop's govulncheck
job (#278), coverage-floor step (#301) and deadcode advisory gate; kept the
audit comment #286 added above CheckMaskID*Column. The 'going back to the
action' comment in build.yml is KEPT (not deleted) — #6 is still open on
develop, so golangci-lint-action stays disabled and that rationale still
holds. Detached the four data_ingest_*.go header comments (#303 split) plus
exitcodes.go's (#284, which develop merged after this branch was cut) from
the package clause so the newly-enabled staticcheck gate is ST1000-clean.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
…monthly) (#304)
* ci: goimports -local gate + Dependabot config (gomod weekly, actions monthly)
goimports -local github.com/tracebloc/cli now blocks in both loops:
build.yml's lint job (pinned goimports@v0.48.0, same x/tools version as
the deadcode pin) and the Makefile's fmt-check target, with make fmt
extended to auto-fix. .golangci.yml already declared this grouping via
local-prefixes but nothing enforced it — 4 files had drifted (data.go,
data_test.go, ingestion_run_test.go, resources_set_test.go), fixed here
with import-grouping-only diffs.
.github/dependabot.yml extends the org's backend-only Dependabot pilot:
gomod weekly (k8s.io/* + sigs.k8s.io/* grouped, golang.org/x/* grouped),
github-actions monthly. Unlike backend's security-only config, the CLI
takes real version updates — customers install this binary, so staying
current is security posture (see #276). Org-wide rollout decision
flagged to Asad on the PR.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
* ci: canonicalize import grouping in data_test.go for the goimports gate
Regroups imports into the layout goimports -local github.com/tracebloc/cli
emits (stdlib / third-party / tracebloc-local). gofmt and goimports only
sort within existing blank-line groups, so the manual groups passed
fmt-check as-is but were not the canonical single-block output; Bugbot and
our precheck both flagged the divergence. Verified idempotent under the
pinned goimports v0.48.0 and green on make fmt-check + go build ./...
Rebased onto ci/279 (post-#303 data.go split): data.go's import block is
already canonical from the #303 split, so its canonicalization here is a
no-op and dropped — this commit now regroups data_test.go only.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
---------
Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
…313)
* ci: goimports -local gate + Dependabot config (gomod weekly, actions monthly)
goimports -local github.com/tracebloc/cli now blocks in both loops:
build.yml's lint job (pinned goimports@v0.48.0, same x/tools version as
the deadcode pin) and the Makefile's fmt-check target, with make fmt
extended to auto-fix. .golangci.yml already declared this grouping via
local-prefixes but nothing enforced it — 4 files had drifted (data.go,
data_test.go, ingestion_run_test.go, resources_set_test.go), fixed here
with import-grouping-only diffs.
.github/dependabot.yml extends the org's backend-only Dependabot pilot:
gomod weekly (k8s.io/* + sigs.k8s.io/* grouped, golang.org/x/* grouped),
github-actions monthly. Unlike backend's security-only config, the CLI
takes real version updates — customers install this binary, so staying
current is security posture (see #276). Org-wide rollout decision
flagged to Asad on the PR.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
* ci: canonicalize import grouping in data_test.go for the goimports gate
Regroups imports into the layout goimports -local github.com/tracebloc/cli
emits (stdlib / third-party / tracebloc-local). gofmt and goimports only
sort within existing blank-line groups, so the manual groups passed
fmt-check as-is but were not the canonical single-block output; Bugbot and
our precheck both flagged the divergence. Verified idempotent under the
pinned goimports v0.48.0 and green on make fmt-check + go build ./...
Rebased onto ci/279 (post-#303 data.go split): data.go's import block is
already canonical from the #303 split, so its canonicalization here is a
no-op and dropped — this commit now regroups data_test.go only.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
* ci: flip deadcode gate to blocking; delete the 3 dead #127 leftovers
The deadcode CI step loses continue-on-error (and the Makefile target
its '|| true'): both now run scripts/deadcode-check.sh, which fails on
any function unreachable from ./cmd/tracebloc that isn't declared in
scripts/deadcode-allowlist.txt. The tool itself always exits 0, so the
old advisory step never could have blocked — the gate keys on output.
Deleted (verified still dead with the pinned deadcode@v0.48.0):
- config.clearAll + its three dedicated tests (TestClearAll,
TestClearAll_HomeError, TestClear) — logout uses Save, nothing else
ever called it
- push.allCategoryIDs — moved verbatim into category_registry_test.go
(the registry-pinning tests legitimately iterate every id; the
shipped binary shouldn't carry the helper)
- submit.isSubmitError — moved into client_test.go as the test-local
assertion helper it always was (orphaned 'errors' import dropped)
Allowlisted with reasons (the 4 legit findings): Status.String +
JobOutcome.String (fmt-reflection Stringers) and ReadLabelValues +
inferColumnType (di#349 test-only parity harnesses). Stale allowlist
entries warn without failing; line numbers are stripped so edits that
shift code don't red the gate.
Coverage floors still clear after the test deletions (cli 82.9% >= 68,
submit 80.3% >= 72).
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
---------
Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
@LukasWodka
LukasWodkaforce-pushed the ci/279-staticcheck-pinned branch from 8397831 to 5a49f44CompareJuly 14, 2026 17:17
@LukasWodka
LukasWodka merged commit f725f76 into developJul 14, 2026
20 checks passed
@LukasWodka
LukasWodka deleted the ci/279-staticcheck-pinned branch July 14, 2026 17:22
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants

@LukasWodka@saadqbal