| 1 |
🔴 P0 |
orchestration/runner.go:658-671 |
O(N²) stop-on-error scan — re-scans all outcomes each iteration |
| 2 |
🔴 P0 |
orchestration/runner.go:1167+ |
Graders recreated per run × test × grader (+ config reload) |
| 3 |
🔴 P0 |
orchestration/runner.go:1081-1140 |
Fixture files re-read per run (redundant I/O) |
| 4 |
🟡 P1 |
cmd/waza/cmd_run.go:607 |
context.Background() — no signal cancellation, Ctrl+C broken |
| 5 |
🟡 P1 |
graders/inline_script_grader.go:142-160 |
Temp script file created/deleted per Grade() call |
| 6 |
🟡 P1 |
graders/program_grader.go:47-55 |
.waza.yaml loaded per grader construction |
| 7 |
🟡 P1 |
webapi/store.go:258-299 |
Summaries recomputed per request (no caching) |
| 8 |
�� P1 |
webapi/store.go:47-128 |
Full reload under write lock / race on first load |
| 9 |
🟡 P1 |
cache/cache.go:110-153 |
Global mutex held during disk I/O |
| 10 |
🟡 P1 |
tokens/bpe/tokenizer.go:201-332 |
Regex + slice churn in hot encode paths |
| 11 |
🟡 P1 |
tokens/bpe/tokenizer.go:605 |
Decode buffer starts at zero capacity |
| 12 |
✅ Fixed |
cmd/waza/dev/links.go:336-351 |
HTTP response body not drained — breaks keep-alive (Fixed: body now properly closed) |
| 13 |
🟡 P1 |
cmd/waza/dev/links.go:191 |
goldmark.New() recreated per file |
| 14 |
🟡 P1 |
jsonrpc/handlers.go:260-281 |
h.runs map never pruned — memory leak |
| 15 |
🟢 P2 |
execution/session_events_collector.go:54-118 |
Shared state mutation without synchronization |
| 16 |
🟢 P2 |
trigger/runner.go:56-64 |
Goroutines dont check ctx.Done() before semaphore |
| 17 |
🟢 P2 |
spinner/spinner.go:19-30 |
time.After in loop leaks timers |
| 18 |
🟢 P2 |
checks/token_limits.go:73-79 |
Double string allocation on file content |
| 19 |
🟢 P2 |
jsonrpc/transport.go:44-67 |
Marshal + append newline per message |
Go Performance Audit — Dual-Model Expert Review
Audited by: Turk (Go Performance Specialist)
Models used: GPT-5.3-Codex (28 findings) + Claude Opus 4.6 (23 findings)
Codebase: 239 Go files, ~53K LOC
Summary
30 unique findings across 8 categories. 19 findings overlap between both models (highest confidence), 7 unique to Codex, 4 unique to Opus. 3 severity disagreements resolved below.
Agreement — Both Models Found These (highest confidence)
orchestration/runner.go:658-671orchestration/runner.go:1167+orchestration/runner.go:1081-1140cmd/waza/cmd_run.go:607context.Background()— no signal cancellation, Ctrl+C brokengraders/inline_script_grader.go:142-160Grade()callgraders/program_grader.go:47-55.waza.yamlloaded per grader constructionwebapi/store.go:258-299webapi/store.go:47-128cache/cache.go:110-153tokens/bpe/tokenizer.go:201-332tokens/bpe/tokenizer.go:605cmd/waza/dev/links.go:336-351HTTP response body not drained — breaks keep-alive(Fixed: body now properly closed)cmd/waza/dev/links.go:191goldmark.New()recreated per filejsonrpc/handlers.go:260-281h.runsmap never pruned — memory leakexecution/session_events_collector.go:54-118trigger/runner.go:56-64ctx.Done()before semaphorespinner/spinner.go:19-30time.Afterin loop leaks timerschecks/token_limits.go:73-79jsonrpc/transport.go:44-67Unique to GPT-5.3-Codex
webserver/server.go:46-50execution/copilot.go:266-283orchestration/runner.go:174-178tokens/bpe/tokenizer.go:475-589EncodeTrimPrefixgrowing progress mapcmd/waza/cmd_run.go:994-1000cmd/waza/dev/links.go:55-63jsonrpc/handlers.go:266-267Unique to Claude Opus 4.6
orchestration/runner.go:533-547spec.Inputsmap per CSV rowcache/cache.go:64-88json.Marshalcalls for cache keywebapi/handlers.go:119json.Encoder.Encode()error silently ignoredexecution/copilot.go:186Shutdownaccepts ctx but ignores it —RemoveAllcould hangSeverity Disagreements (Resolved)
orchestration/runner.go:658jsonrpc/handlers.go:260orchestration/runner.go:1081🏆 Prioritized Action List
P0 — Fix Now (biggest impact)
anyFailedonce. Fixes This repo is missing a LICENSE file #1.signal.NotifyContext— one-line fix incmd_run.go. Fixes chore(deps): Bump go.opentelemetry.io/otel/sdk from 1.38.0 to 1.40.0 #4.P1 — Fix Soon
RunSummaryin store — compute on load, invalidate on reload. Fixes Generate a task.yaml from a copilot session log #7.make([]int, 0, len/4)heuristic. Fixes [E1] Decouple ExecutionResponse from Copilot SDK + Multi-Agent Engine Support #10, Bring Your Own Model — Ollama, OpenAI, Anthropic, OpenCode engines #11.Drain HTTP response bodies— ✅ Fixed. Design discussion: logging Copilot sessions #12 resolved.h.runsalongsideh.cancelFuncs. Fixes feat: Map OpenAI Evals YAML format → waza graders #14.P2 — When Convenient