Finance analyst (FP&A) who writes code. Most of my open-source time goes to Bitcoin and Lightning payments, AI inference infrastructure, and the Python tooling in between. I like bugs that only show up on one platform, after a restart, or halfway through a message.
Proof of Work, a 15-second motion study drawn frame by frame in canvas code. Watch it render live · 1080p60 with sound
| Project | Change | What was hard about it |
|---|---|---|
| OpenAI Python SDK | Publicly export type_to_response_format_param |
Callers can use openai.lib instead of private parsing modules. Resolves an upstream feature request; merged October 2, 2026. |
| NSA Ghidra | PyGhidra: keep bean properties out of script globals iteration | With no program open, JPype bean properties like firstFunction throw on read, so iterating script globals (and interpreter completion) broke. Took a second round after maintainer review to cover the no-program case. |
| vLLM | ROCm fixes, incl. a cu_seqlens_q off-by-one in AITER speculative decode (#39120) and config registration before tokenizer init (#40299) |
Six merged. Most were found by reading AMD kernel paths against the backend they were supposed to match. |
| Mesh-LLM | Owner keystore and signed+encrypted message primitives (#156), then a run of Windows fixes | Nine merged in a fast-moving Rust distributed-inference project; I mostly own Windows breakage there now. |
| rust-lightning | Expose current dust exposure in ChannelDetails |
Operators can now watch how close a channel is to its dust limit, counting commitment fees as well as dust HTLCs. |
| rust-bitcoin | From<Infallible> for 31 public error types |
Small idea, wide surface: units, primitives and consensus_encoding all had to line up so generic ? code compiles. |
| HoloViz Panel | Fix nested Plotly array loss across clients | Reusing a figure dropped nested array data for the second client. Binary serialization was mutating containers that shallow copies still shared. |
| LiveKit Agents | Forward provider events through session restarts | Provider-specific realtime events were lost every time the fallback wrapper swapped its child session. |
| ordinals/ord | Warn when exporting addresses without the address index | Replaced a hard error with a warning, following maintainer direction from an earlier PR. |
- Bitcoin Core #36190: tests that the
bitcoinwrapper reports child exit status correctly on Windows. Code-review ACKed; waiting on a dependency. - x402 #1873: request-bound Lightning upfront payments for the Python SDK, with replay protection that holds across restarts.
- NEAR near-sdk-rs #1638: ABI generation failed to link on Windows MSVC hosts for about two years.
- x402 + Lightning in Python. Payment verification, settlement and replay handling. Notes: x402-work.md.
- Bitcoin research. What a private-payment wallet has to keep so it can still recover and spend after a service disappears. Reproducible experiments and their limits: bitcoin-research.
- Wallet policy kit. Try the Python-only checks for coin-pool separation, or reproduce payments and saved-wallet restarts on regtest. Report a trial or wallet use case.
- Mesh-LLM on Windows.
- bitcoin-mcp: MCP server that gives agents Bitcoin node, mempool and fee context. 50 tools, 180 tests.
- Satoshi API: self-hostable fee-intelligence API behind bitcoin-mcp, with optional x402 payments. The public hosted instance is paused.
- qlib-options: options snapshot and factor pipeline for Microsoft qlib.
The day job is FP&A. The overlap shows up in OpenBB and qlib work, variance-commentary tooling, and a lot of Python that turns messy finance data into something a person can sign off on. Case studies.
240 merged pull requests to 160 public repositories outside my account, verified October 2, 2026. Merges in every month from March through October. Dated list and search method · raw JSON · portfolio




