I'm studying CS at Carnegie Mellon (SCS '29). Mostly I find the same bug over and over: an operation that returns success while quietly doing the wrong thing. A cache that hands back the wrong asset. A copy that copies a file onto itself. A risk statistic that returns a plausible number where the math is undefined. Six of them so far, in codebases I didn't write.
The research version of the same question is whether a system's reported score still tracks what it was built to measure. I build agent evaluation benchmarks, advised by Prof. Amarnath Gupta at UCSD, and I'm a Fall 2026 SPAR fellow working on deception in language models.
Day to day I'm a software engineering intern at Twinly, building agent features for a desktop assistant in C#/.NET 9, and backend & database lead at ScottyLabs, where I own 85 RPC functions across ~19,000 lines of SQL. Published at AMIA 2024 (1st author) and ACM CHI 2024.
copy_object took a source and a destination but built both paths from the destination, so every copy in the GCS backend copied an object onto itself and returned Ok(()). The compiler had been flagging the unused source parameter the whole time.
DataFrame::aggregate hardcodes implicit group-by expansion, widening the group key and displacing aggregate outputs by position. Rebuilt the aggregate and DISTINCT paths through LogicalPlanBuilder.
A transpiler regex rewrote a leading ! inside string literals into not. Two shipped WebSocket subscriptions had been silently wrong since the rule was written.
SortinoRatio built a downside deviation from a single daily observation where SharpeRatio returns NaN, so it reported a finite, plausible number for an undefined quantity.
The minimize persistent cache keyed entries on an 8-byte hash and stored no identity on the value, so recovery could emit one asset carrying another's minimized body and raise no error. A stronger hash can't close it; the association is what's wrong.
K-means init drew batch vectors with replacement, so an 8-quantizer RVQ initialised on 800 vectors collapsed quantizers 4 through 8 to two distinct codes. Found while measuring codebook utilization on my own codec.
Do LLM agents run controlled experiments? A benchmark for whether an agent probing a stochastic simulator holds the seed fixed across single-parameter changes or reads noise as a finding. Scripted baselines confabulate 6 of 15 findings at 200 tool calls.
Dead-parameter injection perturbs the evaluator's score in train mode only, with the framework's own test mode held out. Control gap 0.000 across three runs, injected +0.089; true quality peaked at iteration 8 while reported quality kept climbing.
What does an adversarial loss actually buy a low-bitrate speech codec? Trained from scratch on 9 hours of LibriTTS-R. Transparent to ASR from 2 kbps. The regression at 0.5 kbps that looked adversarial traces to the fine-tune itself, and was invisible to mel distance.
Proved the paper's open even-monomial conjecture for k = 3 through 7 in all dimensions, previously known only for 2×2 at k = 3. Invited to co-lead the write-up.