Skip to content

Commit 7407704

Browse files
committed
engine: green the CI lint baseline — errcheck / ineffassign / staticcheck (HAL-117)
Completes the errcheck/ineffassign cleanup across the repo, including the renamed files (treewalk.go / answer_treewalk.go) the off-main pass couldn't reach: - errcheck: _, _ = fmt.Fprintf on the SSE writers; unchecked returns handled across cmd/benchmark, handlers, connecthandler, parser, storage, queue, db, ingest. - ineffassign: drop the ineffectual 'written += remaining' before break in treewalk_strategy. - staticcheck: real TLS-disabled assertion (was an empty branch) in config_test; De Morgan's rewrite in retrieval_test; drop embedded-field selector in decompose_test. - misspell: ignore-rule for 'strat' (our 'strategy' abbreviation) in .golangci.yml. - formatting normalized via the golangci formatters. golangci-lint run: 0 issues. go build + unit tests green. Closes HAL-117.
1 parent ab1c669 commit 7407704

41 files changed

Lines changed: 208 additions & 205 deletions

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

.golangci.yml

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,11 @@ linters:
3030
- (net/http.ResponseWriter).Write
3131
- (github.com/jackc/pgx/v5.Tx).Rollback
3232
- (github.com/hallelx2/vectorless-engine/pkg/queue.Queue).Close
33+
misspell:
34+
# "strat" is our abbreviation for "strategy" (variable + key names),
35+
# not a misspelling of "start".
36+
ignore-rules:
37+
- strat
3338
exclusions:
3439
rules:
3540
- path: _test\.go

cmd/benchmark/main.go

Lines changed: 16 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -77,7 +77,7 @@ func main() {
7777
ID string `json:"id"`
7878
} `json:"sections"`
7979
}
80-
json.Unmarshal(treeResp, &treeData)
80+
_ = json.Unmarshal(treeResp, &treeData) // benchmark best-effort parse
8181
sectionID := ""
8282
if len(treeData.Sections) > 1 {
8383
sectionID = treeData.Sections[1].ID // pick a child section
@@ -87,9 +87,9 @@ func main() {
8787
fmt.Printf("Using section ID: %s\n\n", sectionID)
8888

8989
type result struct {
90-
name string
91-
rest []time.Duration
92-
grpc []time.Duration
90+
name string
91+
rest []time.Duration
92+
grpc []time.Duration
9393
}
9494

9595
var results []result
@@ -101,12 +101,12 @@ func main() {
101101
fmt.Print(".")
102102
// REST
103103
start := time.Now()
104-
restGET(base + "/v1/health")
104+
_, _ = restGET(base + "/v1/health")
105105
r.rest = append(r.rest, time.Since(start))
106106

107107
// gRPC (Connect)
108108
start = time.Now()
109-
healthClient.Check(ctx, connect.NewRequest(&v1.HealthCheckRequest{}))
109+
_, _ = healthClient.Check(ctx, connect.NewRequest(&v1.HealthCheckRequest{}))
110110
r.grpc = append(r.grpc, time.Since(start))
111111
}
112112
fmt.Println(" done")
@@ -118,11 +118,11 @@ func main() {
118118
for i := 0; i < n; i++ {
119119
fmt.Print(".")
120120
start := time.Now()
121-
restGET(base + "/v1/documents")
121+
_, _ = restGET(base + "/v1/documents")
122122
r.rest = append(r.rest, time.Since(start))
123123

124124
start = time.Now()
125-
docsClient.ListDocuments(ctx, connect.NewRequest(&v1.ListDocumentsRequest{Limit: 10}))
125+
_, _ = docsClient.ListDocuments(ctx, connect.NewRequest(&v1.ListDocumentsRequest{Limit: 10}))
126126
r.grpc = append(r.grpc, time.Since(start))
127127
}
128128
fmt.Println(" done")
@@ -134,11 +134,11 @@ func main() {
134134
for i := 0; i < n; i++ {
135135
fmt.Print(".")
136136
start := time.Now()
137-
restGET(base + "/v1/documents/" + *docID + "/tree")
137+
_, _ = restGET(base + "/v1/documents/" + *docID + "/tree")
138138
r.rest = append(r.rest, time.Since(start))
139139

140140
start = time.Now()
141-
docsClient.GetDocumentTree(ctx, connect.NewRequest(&v1.GetDocumentTreeRequest{
141+
_, _ = docsClient.GetDocumentTree(ctx, connect.NewRequest(&v1.GetDocumentTreeRequest{
142142
DocumentId: *docID,
143143
}))
144144
r.grpc = append(r.grpc, time.Since(start))
@@ -153,11 +153,11 @@ func main() {
153153
for i := 0; i < n; i++ {
154154
fmt.Print(".")
155155
start := time.Now()
156-
restGET(base + "/v1/sections/" + sectionID)
156+
_, _ = restGET(base + "/v1/sections/" + sectionID)
157157
r.rest = append(r.rest, time.Since(start))
158158

159159
start = time.Now()
160-
docsClient.GetSection(ctx, connect.NewRequest(&v1.GetSectionRequest{
160+
_, _ = docsClient.GetSection(ctx, connect.NewRequest(&v1.GetSectionRequest{
161161
SectionId: sectionID,
162162
}))
163163
r.grpc = append(r.grpc, time.Since(start))
@@ -182,12 +182,12 @@ func main() {
182182
"query": q,
183183
})
184184
start := time.Now()
185-
restPOST(base+"/v1/query", body)
185+
_, _ = restPOST(base+"/v1/query", body)
186186
r.rest = append(r.rest, time.Since(start))
187187

188188
// gRPC (Connect)
189189
start = time.Now()
190-
queryClient.Query(ctx, connect.NewRequest(&v1.QueryRequest{
190+
_, _ = queryClient.Query(ctx, connect.NewRequest(&v1.QueryRequest{
191191
DocumentId: *docID,
192192
Query: q,
193193
}))
@@ -246,7 +246,7 @@ func restGET(url string) ([]byte, error) {
246246
if err != nil {
247247
return nil, err
248248
}
249-
defer resp.Body.Close()
249+
defer func() { _ = resp.Body.Close() }() // best-effort close
250250
return io.ReadAll(resp.Body)
251251
}
252252

@@ -255,7 +255,7 @@ func restPOST(url string, body []byte) ([]byte, error) {
255255
if err != nil {
256256
return nil, err
257257
}
258-
defer resp.Body.Close()
258+
defer func() { _ = resp.Body.Close() }() // best-effort close
259259
return io.ReadAll(resp.Body)
260260
}
261261

cmd/engine/main.go

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -90,7 +90,7 @@ func run() error {
9090
if err != nil {
9191
return fmt.Errorf("init queue: %w", err)
9292
}
93-
defer q.Close()
93+
defer func() { _ = q.Close() }() // best-effort close
9494

9595
llmClient, err := buildLLM(cfg.LLM)
9696
if err != nil {
@@ -439,7 +439,7 @@ func (sf storageFetcher) Get(ctx context.Context, ref string) ([]byte, error) {
439439
if err != nil {
440440
return nil, err
441441
}
442-
defer rc.Close()
442+
defer func() { _ = rc.Close() }() // best-effort close
443443
return io.ReadAll(rc)
444444
}
445445

@@ -456,7 +456,7 @@ func (l storagePageLoader) Load(ctx context.Context, ref string) ([]byte, error)
456456
if err != nil {
457457
return nil, err
458458
}
459-
defer rc.Close()
459+
defer func() { _ = rc.Close() }() // best-effort close
460460
return io.ReadAll(rc)
461461
}
462462

cmd/server/main.go

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -134,7 +134,7 @@ func run() error {
134134
if err != nil {
135135
return fmt.Errorf("init queue: %w", err)
136136
}
137-
defer q.Close()
137+
defer func() { _ = q.Close() }() // best-effort close
138138

139139
// ── LLM + retrieval strategy ──────────────────────────────────
140140
llmClient, err := buildLLM(cfg.Engine.LLM)
@@ -518,7 +518,7 @@ func (l storagePageLoader) Load(ctx context.Context, ref string) ([]byte, error)
518518
if err != nil {
519519
return nil, err
520520
}
521-
defer rc.Close()
521+
defer func() { _ = rc.Close() }() // best-effort close
522522
return io.ReadAll(rc)
523523
}
524524

@@ -559,7 +559,7 @@ func (sf storageFetcher) Get(ctx context.Context, ref string) ([]byte, error) {
559559
if err != nil {
560560
return nil, err
561561
}
562-
defer rc.Close()
562+
defer func() { _ = rc.Close() }() // best-effort close
563563
return io.ReadAll(rc)
564564
}
565565

internal/api/replay_test.go

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -52,7 +52,7 @@ func TestReplayByteExact(t *testing.T) {
5252
if err != nil {
5353
t.Fatal(err)
5454
}
55-
defer resp.Body.Close()
55+
defer func() { _ = resp.Body.Close() }() // best-effort close
5656
if resp.StatusCode != http.StatusOK {
5757
t.Fatalf("status = %d, want 200", resp.StatusCode)
5858
}
@@ -78,7 +78,7 @@ func TestReplayUnknownToken(t *testing.T) {
7878
if err != nil {
7979
t.Fatal(err)
8080
}
81-
defer resp.Body.Close()
81+
defer func() { _ = resp.Body.Close() }() // best-effort close
8282
if resp.StatusCode != http.StatusNotFound {
8383
t.Errorf("status = %d, want 404", resp.StatusCode)
8484
}
@@ -105,7 +105,7 @@ func TestReplayDocumentIDMismatch(t *testing.T) {
105105
if err != nil {
106106
t.Fatal(err)
107107
}
108-
defer resp.Body.Close()
108+
defer func() { _ = resp.Body.Close() }() // best-effort close
109109
if resp.StatusCode != http.StatusConflict {
110110
t.Fatalf("status = %d, want 409", resp.StatusCode)
111111
}
@@ -140,7 +140,7 @@ func TestReplayQueryMismatch(t *testing.T) {
140140
if err != nil {
141141
t.Fatal(err)
142142
}
143-
defer resp.Body.Close()
143+
defer func() { _ = resp.Body.Close() }() // best-effort close
144144
if resp.StatusCode != http.StatusConflict {
145145
t.Fatalf("status = %d, want 409", resp.StatusCode)
146146
}
@@ -168,7 +168,7 @@ func TestReplayDisabled(t *testing.T) {
168168
if err != nil {
169169
t.Fatal(err)
170170
}
171-
defer resp.Body.Close()
171+
defer func() { _ = resp.Body.Close() }() // best-effort close
172172
if resp.StatusCode != http.StatusNotImplemented {
173173
t.Errorf("status = %d, want 501", resp.StatusCode)
174174
}
@@ -196,7 +196,7 @@ func TestReplayRequiresFields(t *testing.T) {
196196
if err != nil {
197197
t.Fatalf("case %d: %v", i, err)
198198
}
199-
resp.Body.Close()
199+
_ = resp.Body.Close() // best-effort close
200200
if resp.StatusCode != http.StatusBadRequest {
201201
t.Errorf("case %d: status = %d, want 400", i, resp.StatusCode)
202202
}
@@ -214,7 +214,7 @@ func TestReplayBadJSON(t *testing.T) {
214214
if err != nil {
215215
t.Fatal(err)
216216
}
217-
defer resp.Body.Close()
217+
defer func() { _ = resp.Body.Close() }() // best-effort close
218218
if resp.StatusCode != http.StatusBadRequest {
219219
t.Errorf("status = %d, want 400", resp.StatusCode)
220220
}
@@ -289,7 +289,7 @@ func TestReplayEndToEndByteExact(t *testing.T) {
289289
if err != nil {
290290
t.Fatal(err)
291291
}
292-
defer got.Body.Close()
292+
defer func() { _ = got.Body.Close() }() // best-effort close
293293
if got.StatusCode != http.StatusOK {
294294
t.Fatalf("status = %d", got.StatusCode)
295295
}
@@ -328,7 +328,7 @@ func TestReplayPreservesUnicodeAndWhitespace(t *testing.T) {
328328
if err != nil {
329329
t.Fatal(err)
330330
}
331-
defer resp.Body.Close()
331+
defer func() { _ = resp.Body.Close() }() // best-effort close
332332
got, _ := io.ReadAll(resp.Body)
333333
if !bytes.Equal(got, want) {
334334
t.Errorf("byte drift:\n got %q\n want %q", got, want)

internal/api/server.go

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -242,7 +242,7 @@ func (d Deps) handleIngestDocument(w http.ResponseWriter, r *http.Request) {
242242
writeErr(w, http.StatusBadRequest, `missing form field "file"`)
243243
return
244244
}
245-
defer file.Close()
245+
defer func() { _ = file.Close() }() // best-effort close
246246
filename = header.Filename
247247
contentType = header.Header.Get("Content-Type")
248248
body = file
@@ -395,7 +395,7 @@ func (d Deps) handleGetSection(w http.ResponseWriter, r *http.Request) {
395395
rc, _, err := d.Storage.Get(r.Context(), sec.ContentRef)
396396
if err == nil {
397397
raw, _ := io.ReadAll(rc)
398-
rc.Close()
398+
_ = rc.Close() // best-effort close
399399
content = string(raw)
400400
}
401401
}
@@ -538,7 +538,7 @@ func (d Deps) handleQuery(w http.ResponseWriter, r *http.Request) {
538538
rc, _, err := d.Storage.Get(r.Context(), sec.ContentRef)
539539
if err == nil {
540540
raw, _ := io.ReadAll(rc)
541-
rc.Close()
541+
_ = rc.Close() // best-effort close
542542
content = string(raw)
543543
}
544544
}
@@ -835,7 +835,7 @@ func (d Deps) handleAnswer(w http.ResponseWriter, r *http.Request) {
835835
rc, _, err := d.Storage.Get(r.Context(), sec.ContentRef)
836836
if err == nil {
837837
raw, _ := io.ReadAll(rc)
838-
rc.Close()
838+
_ = rc.Close() // best-effort close
839839
content = string(raw)
840840
}
841841
}
@@ -1077,7 +1077,7 @@ func (d Deps) handleQueryMulti(w http.ResponseWriter, r *http.Request) {
10771077
rc, _, err := d.Storage.Get(r.Context(), sec.ContentRef)
10781078
if err == nil {
10791079
raw, _ := io.ReadAll(rc)
1080-
rc.Close()
1080+
_ = rc.Close() // best-effort close
10811081
content = string(raw)
10821082
}
10831083
}

internal/api/treewalk.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -239,7 +239,7 @@ func (d Deps) serveAnswerTreeWalkStream(w http.ResponseWriter, r *http.Request,
239239
}
240240
writeMu.Lock()
241241
defer writeMu.Unlock()
242-
fmt.Fprintf(w, "event: %s\ndata: %s\n\n", eventType, raw)
242+
_, _ = fmt.Fprintf(w, "event: %s\ndata: %s\n\n", eventType, raw)
243243
flusher.Flush()
244244
}
245245

internal/api/treewalk_test.go

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -123,14 +123,14 @@ func newTestDeps(t *testing.T, replies ...string) (Deps, *treeWalkScriptedLLM, *
123123
strat.PageLoader = pageStorageLoader{s: store}
124124

125125
deps := Deps{
126-
Logger: slog.Default(),
127-
Storage: store,
128-
LLM: llm,
129-
LLMModel: "test-model",
130-
Strategy: strat, // unrelated to /v1/answer/treewalk; populated for sanity
126+
Logger: slog.Default(),
127+
Storage: store,
128+
LLM: llm,
129+
LLMModel: "test-model",
130+
Strategy: strat, // unrelated to /v1/answer/treewalk; populated for sanity
131131
TreeWalkStrategy: strat,
132132
TreeWalk: config.TreeWalkBlock{Enabled: true, MaxHops: 8, PageContentLimit: 16000},
133-
AnswerSpan: config.AnswerSpanBlock{Enabled: false},
133+
AnswerSpan: config.AnswerSpanBlock{Enabled: false},
134134
Replay: retrieval.NewLRUReplayStore(retrieval.LRUReplayConfig{
135135
MaxEntries: 16,
136136
TTL: 5 * time.Minute,

internal/connecthandler/documents.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -284,7 +284,7 @@ func (s *DocumentsService) GetDocumentSource(
284284
if err != nil {
285285
return connect.NewError(connect.CodeInternal, fmt.Errorf("read source: %w", err))
286286
}
287-
defer rc.Close()
287+
defer func() { _ = rc.Close() }() // best-effort close
288288

289289
// Stream in 32 KiB chunks.
290290
buf := make([]byte, 32*1024)

internal/connecthandler/query.go

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -276,12 +276,12 @@ func (s *QueryService) QueryMultiStream(
276276
for mevt := range events {
277277
evt := mevt.Event
278278
protoEvt := &v1.QueryMultiStreamEvent{
279-
DocumentId: string(mevt.DocumentID),
280-
DocIndex: int32(mevt.DocIndex),
281-
Type: string(evt.Type),
282-
SliceIndex: int32(evt.SliceIndex),
279+
DocumentId: string(mevt.DocumentID),
280+
DocIndex: int32(mevt.DocIndex),
281+
Type: string(evt.Type),
282+
SliceIndex: int32(evt.SliceIndex),
283283
TotalSlices: int32(evt.TotalSlices),
284-
Message: evt.Message,
284+
Message: evt.Message,
285285
}
286286

287287
if evt.Type == retrieval.EventStarted {
@@ -309,6 +309,6 @@ func fetchContent(ctx context.Context, store storage.Storage, ref string) string
309309
return ""
310310
}
311311
raw, _ := io.ReadAll(rc)
312-
rc.Close()
312+
_ = rc.Close() // best-effort close
313313
return string(raw)
314314
}

0 commit comments

Comments
 (0)