Hi, I'm spicysharkco.
AI research and infrastructure engineering: reliability and performance.
Go · Rust · Python · C++ · TypeScript
Making the AI stack faster and harder to break, one merged fix at a time. Receipts below.
More at Learn, Research and the open-source record.
My projects · Selected fixes · Research in progress · Contributions
- Failure:
syncPodFirewallChainscopied and scanned the whole iptables-save buffer once per local pod and IP family. - Fix: remove the check. The rule text it looked for is unique to one pod in one sync, so it could never match.
- Result:
BenchmarkSyncPodFirewallChains(80 pods, one family, 1 MiB of existing rules, median of 5 runs) went from 152,895,797 to 477,097 ns/op, about 320x, and from 90.5 MB to 0.2 MB allocated per op. Validation was unit tests and the benchmark; no Kubernetes integration test. - Why it matters: kube-router is a pod network, firewall and service proxy for Kubernetes, and its network-policy controller runs this sync on every node. On a node with 84 pods the removed copy cost about 175 ms of CPU and 100 MB of allocation per full sync (issue #2191).
- PR #2192, merged 2026-10-12 · post
- Failure: when both directions of a connection failed together, as on a TCP reset, the second goroutine blocked forever on an unbuffered error channel. It held a 32 KiB buffer and both connections. A plain bool flag was written by both goroutines.
- Fix: the channel has room for both errors, and the flag is gone, which removes the data race.
- Result: a new test runs
Proxy10,000 times on connections that always fail. The old code left 1029 goroutines behind and-racereported the race. With the fix,go test -race -count=20passed 20 of 20. The test catches the bug on multi-core runners; withGOMAXPROCS=1the old code can pass. - Why it matters: the leak is in the server's tunnel proxy, which the default egress-selector mode uses. On a server whose tunnel connections end in resets, for example traffic to an aggregated API service, the leaked goroutines only grow until a restart, each holding a 32 KiB buffer and two connections.
- PR #14811, merged 2026-10-15 · post
- Failure: a disparity outside the valid range made the computed index
x2negative or at leastcols, and the code used it to index a buffer unchecked, in both theCV_16SandCV_32Sbranches. - Fix: skip such pixels in both branches with one unsigned bounds check.
- Result: the new test has four cases. AddressSanitizer reports a heap-buffer-overflow in all four without the fix; all four pass with it. The 5.x port is #30344.
- Why it matters:
validateDisparityis the left-right check in stereo depth. Given a disparity map computed with other parameters, it wrote 32 bytes before its buffer. Without a sanitizer that left a bad pixel marked valid: a wrong depth value with no error. - PR #30316, merged 2026-10-16 · post
- Failure: with
autoTuneon, the approximate prefix cache sized each pod's LRU from the engine's block count. Each LRU entry is one router block of at least 64 tokens, and vLLM's default engine block is 16 tokens. So the index could track four times as many tokens as the engine's KV cache held, and up to 64 times with a block size of 1. - Fix: convert the capacity to router blocks,
CacheNumBlocks * CacheBlockSize / GetBlockSize(), rounded down and at least 1. It is unchanged when the two block sizes match or the engine does not report its block size. - Result: a new table test has six cases. On main three of them failed (31250 entries instead of 7812, 2 instead of 1, 1000 instead of 64000); with the fix all six pass under
go test -race. - Why it matters: llm-d-router picks the pod for each inference request, partly by how much of the prompt each pod already has cached. An index larger than the engine's cache keeps prefixes the engine has evicted, so the prefix-cache scorer can overestimate cache hits and send a request to a pod that no longer holds its prefix. The analysis and reproduction in issue #3139 pointed at the cause.
- PR #3476, merged 2026-10-20
- sharkline: a status line for Claude Code, in Rust. A warm render takes about 1.3 ms with no child process and no network; a Node process that does nothing takes about 30 ms on the same machine. Try:
cargo install --locked --git https://github.com/spicysharkco/sharkline. - sharkswap: a Claude Code account switcher in Rust. It swaps between saved accounts, shows each account's 5-hour and weekly usage, and can move the login when one runs out. One binary, no daemon. Try:
cargo install --locked --git https://github.com/spicysharkco/sharkswap, thensharkswap probe. - chess-sim2real-benchmark: a render generator and a 20,000-image benchmark for chess-position recognition (dataset). The README walks through rendering and scoring four frozen views locally.
- Quantization. GGUF files that give each tensor group its own quant type, chosen by measured sensitivity, inside a fixed file size (model card). At the same size as the upstream Q4_K_M (16.81 GB), mean KL divergence from BF16 fell from 0.0348 to 0.0195 on 30,690 held-out tokens. About two thirds of that gain comes from the importance matrix; the rest comes from the per-tensor mix. CPU prompt processing runs at 0.85x the upstream file's speed. Limit: the evaluation is text only, and no task benchmark was run.
- Chess benchmark. Changing which corner is light in the renderer moved per-square accuracy from 54.4% to 85.2%, and only 18 of 192 boards are exact after the fix. Limit: the public reproduction covers a bounded render and scoring path, not all 20,000 cells or the adaptation-training study.
| Project | What it is | Merged PRs | GitHub stars |
|---|---|---|---|
| OpenCV | Computer vision library | 2 | 91.3k |
| oh-my-openagent | Agent orchestration for OpenCode | 2 | 70.2k |
| oh-my-claudecode | Multi-agent orchestration for Claude Code | 7 | 40.1k |
| llmfit | Finds which LLMs run on your hardware | 4 | 38.6k |
| k9s | Terminal UI for Kubernetes clusters | 1 | 34.9k |
| k3s | Lightweight Kubernetes | 3 | 34.2k |
| oh-my-codex | Hooks and agent teams for Codex CLI | 4 | 33.6k |
| Dapr | Runtime for distributed applications | 1 | 26.2k |
| yfinance | Market data from Yahoo Finance in Python | 1 | 25.6k |
| urfave/cli | Framework for command-line apps in Go | 2 | 24.3k |
| Prefect | Workflow orchestration for data pipelines in Python | 3 | 24.0k |
| go-redis | Redis client for Go | 1 | 22.3k |
| ONNX | Open standard for machine learning models | 1 | 21.6k |
| mediamtx | Live media server (RTSP, WebRTC, SRT and more) | 9 | 20.5k |
| grpc-gateway | gRPC to JSON proxy generator | 1 | 20.0k |
| VictoriaMetrics | Time series database and monitoring | 1 | 18.0k |
| Litestream | Streaming replication for SQLite | 3 | 14.5k |
| pgx | PostgreSQL driver for Go | 1 | 14.3k |
| cert-manager | TLS certificate automation for Kubernetes | 1 | 14.1k |
| redis-py | Python client for Redis | 2 | 13.7k |
| txtai | AI framework for semantic search and LLM workflows | 1 | 13.1k |
| Kubescape | Kubernetes security scanner | 2 | 11.8k |
| Linkerd | Service mesh for Kubernetes | 1 | 11.5k |
| PCL | 3D point cloud processing in C++ | 1 | 11.2k |
| Xinference | Serving for open LLMs, speech and multimodal models | 6 | 9.6k |
| goja | JavaScript engine in pure Go | 13 | 7.2k |
| helmfile | Declarative Helm release management | 8 | 5.2k |
| AIBrix | Infrastructure for LLM inference on Kubernetes (vLLM project) | 13 | 5.2k |
| DNSControl | DNS configuration as code | 10 | 4.0k |
| NumPyro | Probabilistic programming on JAX | 5 | 2.8k |
| unpoller | UniFi metrics for Prometheus and InfluxDB | 7 | 2.7k |
| kube-router | Pod network, firewall and service proxy for Kubernetes | 2 | 2.5k |
| Kamaji | Hosted Kubernetes control planes | 13 | 2.1k |
| PyMdown Extensions | Extensions for Python Markdown | 6 | 1.1k |
| OjG | Fast JSON for Go | 25 | 956 |
| sql_exporter | SQL metrics for Prometheus | 22 | 601 |
| ColorAide | Color library for Python | 6 | 365 |
| oras-go | Go library for OCI artifacts | 18 | 295 |
| Soup Sieve | CSS selectors for Beautiful Soup | 8 | 271 |
| wcmatch | Wildcard and glob matching for Python | 7 | 169 |
Star counts as of 2026-10-20; the ten rows added later use counts from 2026-11-03.
Newest first, one per project.
| Project | Change | Result | Date |
|---|---|---|---|
| KubeAI | #766 the load balancer takes the new address of a Pod it already tracks, keeping its in-flight count | A ready Pod whose sandbox restarted with a new IP, with no unready state seen by reconcile, kept getting requests at the old IP; now they go to the new one | 2026-10-30 |
| K8sGPT | #1847 the HPA analyzer names the target with the HPA's namespace, not the -n filter |
Without -n it printed Deployment /example does not have resource configured.; now Deployment team-a/example |
2026-10-30 |
| txtai | #1441 Segmentation ends paragraphs and sections at blank lines that hold spaces or tabs |
Segmentation(paragraphs=True)("Para A.\n \nPara B.") gave one paragraph; now two, as with an empty blank line |
2026-10-29 |
| llmfit | #1188 search keeps a model when every word of the query matches, as the TUI does |
llmfit search "llama 8b", the example in docs/cli.md, found 0 models; now 368 |
2026-10-26 |
| Project | Change | Result | Date |
|---|---|---|---|
| Linkerd | #15734 pods inherit the deprecated config.beta.linkerd.io/proxy-enable-native-sidecar annotation from their namespace again |
A namespace set to "false" still got native sidecars on new pods; now they get none |
2026-11-03 |
| external-dns | #6819 regression tests for the Istio sources reading the ingress annotation under --annotation-prefix; the lookup fix is from #6465 by mwhittington21, carried forward |
With --annotation-prefix=custom.io/ and no service targets, a Gateway's custom.io/ingress target gave no endpoints, so sync could delete owned records; now it gives the Ingress targets |
2026-11-02 |
| nats.py | #1071 ordered consumers and ObjectStore.get() parse V2 ACK reply subjects |
With js_ack_fc_v2 on nats-server 2.15, an ordered consumer stopped reading at its first message and get() never returned; now both work |
2026-11-02 |
| mediamtx | #6386 MPEG-TS recordings write the Opus track's channel count instead of a constant 2 | A mono Opus stream recorded as MPEG-TS read back as 2 channels; now 1 (6 for 6) | 2026-11-01 |
The full list of merged pull requests, by area, with a write-up where there is one: spicyshark.co/open-source.


