From eaf26d3f93d488dab6025a7b329d1fe75478f41b Mon Sep 17 00:00:00 2001 From: Snider Date: Tue, 31 Mar 2026 07:26:39 +0100 Subject: [PATCH] =?UTF-8?q?refactor(ax):=20round=205=20AX=20sweep=20?= =?UTF-8?q?=E2=80=94=20single-letter=20vars,=20missing=20Ugly=20test?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - ai/metrics.go: ev → event in Summary(), e → entry in sortedMap() - cmd/metrics/cmd_test.go: tc → testCase, add TestCmd_ParseDuration_Ugly covering boundary inputs (leading whitespace, trailing whitespace, float value, wrong case unit, very large count, alpha-only numeric) - cmd/security/cmd_jobs.go: f → finding in buildJobIssueBody loops - cmd/embed-bench/main.go: m → registeredModel, v → value, q → queryCase, r → rankedResult across modelAvailable(), avg(), and main() query loops Co-Authored-By: Virgil --- ai/metrics.go | 16 ++++++++-------- cmd/embed-bench/main.go | 28 +++++++++++++-------------- cmd/metrics/cmd_test.go | 41 +++++++++++++++++++++++++++++++++++----- cmd/security/cmd_jobs.go | 8 ++++---- 4 files changed, 62 insertions(+), 31 deletions(-) diff --git a/ai/metrics.go b/ai/metrics.go index d3e2cc5..00cab91 100644 --- a/ai/metrics.go +++ b/ai/metrics.go @@ -156,13 +156,13 @@ func Summary(events []Event) map[string]any { byRepo := make(map[string]int) byAgent := make(map[string]int) - for _, ev := range events { - byType[ev.Type]++ - if ev.Repo != "" { - byRepo[ev.Repo]++ + for _, event := range events { + byType[event.Type]++ + if event.Repo != "" { + byRepo[event.Repo]++ } - if ev.AgentID != "" { - byAgent[ev.AgentID]++ + if event.AgentID != "" { + byAgent[event.AgentID]++ } } @@ -192,8 +192,8 @@ func sortedMap(m map[string]int) []map[string]any { }) result := make([]map[string]any, len(entries)) - for i, e := range entries { - result[i] = map[string]any{"key": e.key, "count": e.count} + for i, entry := range entries { + result[i] = map[string]any{"key": entry.key, "count": entry.count} } return result } diff --git a/cmd/embed-bench/main.go b/cmd/embed-bench/main.go index d59ae6b..b579e7a 100644 --- a/cmd/embed-bench/main.go +++ b/cmd/embed-bench/main.go @@ -154,8 +154,8 @@ func main() { // 3. Query recall accuracy fmt.Printf("\n Query recall (top-1 accuracy):\n") correct := 0 - for _, q := range queries { - qVec, err := embed(model, q.query) + for _, queryCase := range queries { + queryVec, err := embed(model, queryCase.query) if err != nil { fmt.Printf(" ERROR: %v\n", err) continue @@ -165,7 +165,7 @@ func main() { bestIdx := 0 bestSim := -1.0 for i, mv := range memVectors { - sim := cosine(qVec, mv) + sim := cosine(queryVec, mv) if sim > bestSim { bestSim = sim bestIdx = i @@ -173,7 +173,7 @@ func main() { } matchTopic := allTopics[bestIdx] - hit := matchTopic == q.targetTopic + hit := matchTopic == queryCase.targetTopic if hit { correct++ } @@ -181,7 +181,7 @@ func main() { if !hit { marker = "✗" } - fmt.Printf(" %s %.4f %q → %s (want: %s)\n", marker, bestSim, truncate(q.query, 40), matchTopic, q.targetTopic) + fmt.Printf(" %s %.4f %q → %s (want: %s)\n", marker, bestSim, truncate(queryCase.query, 40), matchTopic, queryCase.targetTopic) } accuracy := float64(correct) / float64(len(queries)) * 100 @@ -189,8 +189,8 @@ func main() { // 4. Top-3 recall correct3 := 0 - for _, q := range queries { - qVec, _ := embed(model, q.query) + for _, queryCase := range queries { + queryVec, _ := embed(model, queryCase.query) type scored struct { idx int @@ -198,12 +198,12 @@ func main() { } var ranked []scored for i, mv := range memVectors { - ranked = append(ranked, scored{i, cosine(qVec, mv)}) + ranked = append(ranked, scored{i, cosine(queryVec, mv)}) } sort.Slice(ranked, func(a, b int) bool { return ranked[a].sim > ranked[b].sim }) - for _, r := range ranked[:3] { - if allTopics[r.idx] == q.targetTopic { + for _, rankedResult := range ranked[:3] { + if allTopics[rankedResult.idx] == queryCase.targetTopic { correct3++ break } @@ -271,9 +271,9 @@ func modelAvailable(model string) bool { } `json:"models"` } json.NewDecoder(resp.Body).Decode(&result) - for _, m := range result.Models { + for _, registeredModel := range result.Models { // Match "nomic-embed-text:latest" against "nomic-embed-text" - if m.Name == model || strings.HasPrefix(m.Name, model+":") { + if registeredModel.Name == model || strings.HasPrefix(registeredModel.Name, model+":") { return true } } @@ -306,8 +306,8 @@ func avg(vals []float64) float64 { return 0 } sum := 0.0 - for _, v := range vals { - sum += v + for _, value := range vals { + sum += value } return sum / float64(len(vals)) } diff --git a/cmd/metrics/cmd_test.go b/cmd/metrics/cmd_test.go index 4712151..54848bf 100644 --- a/cmd/metrics/cmd_test.go +++ b/cmd/metrics/cmd_test.go @@ -17,14 +17,14 @@ func TestCmd_ParseDuration_Good(t *testing.T) { {"1h", time.Hour}, } - for _, tc := range tests { - got, err := parseDuration(tc.input) + for _, testCase := range tests { + got, err := parseDuration(testCase.input) if err != nil { - t.Errorf("parseDuration(%q): unexpected error: %v", tc.input, err) + t.Errorf("parseDuration(%q): unexpected error: %v", testCase.input, err) continue } - if got != tc.want { - t.Errorf("parseDuration(%q) = %v, want %v", tc.input, got, tc.want) + if got != testCase.want { + t.Errorf("parseDuration(%q) = %v, want %v", testCase.input, got, testCase.want) } } } @@ -46,3 +46,34 @@ func TestCmd_ParseDuration_Bad(t *testing.T) { } } } + +func TestCmd_ParseDuration_Ugly(t *testing.T) { + // Edge cases: valid-looking input that sits on the boundary of acceptance. + ugly := []struct { + input string + wantErr bool + }{ + // Leading whitespace — Sscanf skips it, so " 7d" parses as 7d (valid). + {" 7d", false}, + // Trailing whitespace after unit — unit is last char, not whitespace, so this is invalid unit ' '. + {"7d ", true}, + // Very large count that still parses — 9999d is valid Go duration arithmetic. + {"9999d", false}, + // Mixed case unit — 'D' is not 'd', so unknown unit. + {"7D", true}, + // Float value — Sscanf %d won't accept "7.5", so invalid numeric. + {"7.5d", true}, + // Just the unit char, no number — too short (len < 2 for "d"; "hd" has no valid number). + {"hd", true}, + } + + for _, testCase := range ugly { + _, err := parseDuration(testCase.input) + if testCase.wantErr && err == nil { + t.Errorf("parseDuration(%q): expected error, got nil", testCase.input) + } + if !testCase.wantErr && err != nil { + t.Errorf("parseDuration(%q): unexpected error: %v", testCase.input, err) + } + } +} diff --git a/cmd/security/cmd_jobs.go b/cmd/security/cmd_jobs.go index 3332091..6d17690 100644 --- a/cmd/security/cmd_jobs.go +++ b/cmd/security/cmd_jobs.go @@ -202,13 +202,13 @@ func buildJobIssueBody(target string, summary *AlertSummary, findings []string) builder.WriteString("### Findings\n\n") if len(findings) > 50 { - for _, f := range findings[:50] { - builder.WriteString(f + "\n") + for _, finding := range findings[:50] { + builder.WriteString(finding + "\n") } fmt.Fprintf(&builder, "\n... and %d more\n", len(findings)-50) } else { - for _, f := range findings { - builder.WriteString(f + "\n") + for _, finding := range findings { + builder.WriteString(finding + "\n") } }