about
A little context behind the work.
I like software that is easy to use, hard to break, and still understandable after the first rush of shipping is over.
story
I study computer engineering, but most of my learning has come from projects that stopped being simple the moment someone else had to depend on them. I like that turn: when a neat idea becomes a tired student trying to find the right paper, a protocol mismatch that needs a replayable fixture, or a small kernel fix that has to survive people who know the subsystem better than I do.
The work I care about has to be clear at the surface and honest underneath. A tool should feel direct to the person using it, but the internals should leave a trail too: named failure modes, careful boundaries, and decisions that still make sense after the first rush of shipping is gone.
That is why upstream work matters to me. It removes some of the private mythology around a patch: the reasoning either survives public review, or it shows me exactly where it has to get sharper.
- work I choose Product software, protocol tooling, and verification-heavy systems where correctness changes the result.
- working style Start with the real use case, name the failure modes, and keep the implementation small enough to inspect.
- looking for Developer infrastructure, product systems, and correctness-heavy software with real users and real constraints.
principles
- Name the failure mode before decorating the solution.
- If a system asks for trust, make the boundary inspectable.
- Prefer small, reviewable changes over clever machinery.
- Choose work that teaches judgment, not just speed.
What I want to work on
- Systems where the engineering has to be solid because people actually rely on it.
- Tools that get out of the way and make a hard workflow feel simple.
- Environments that force me to understand the layers beneath the code I write.
recognition
Recognition belongs here only when it points back to the work: a real problem, a constrained build, and enough public evidence to inspect what happened.
selected recognition
HackForUHC / 2026
1st place at HackForUHC 2026.
As team CLAIM∅, we won 1st place at HackForUHC 2026, held June 18-19, 2026. Following the win, we were invited to participate and presented our solution at the 10th anniversary openIMIS Community Meeting in Kathmandu (June 23-25, 2026).
- Certificate June 18-19, 2026
- HackForUHC 2026 event listing June 18-19, 2026
- Health Informatics Lab event announcement June 2026
- Presented our solution at the 10th anniversary openIMIS Community Meeting June 23-25, 2026
- result 1st place, overall hackathon
- team CLAIM∅
- presentation 10th anniversary openIMIS Community Meeting, Kathmandu
selected recognition
JunctionX Kathmandu / 2026
JunctionX Kathmandu 2026 with Team Pikachu.
As team Pikachu, we worked on a constrained build around a local energy problem at JunctionX Kathmandu 2026. The result opened the next round of work in Finland, but what belongs here just as much is the support around it: the mentors, organizers, teammates, and KU community who made the work possible.
- JunctionX Kathmandu event page May 29-31, 2026
- Overall winner certificate Issued June 1, 2026
- Hydropower track winner certificate Issued June 1, 2026
- result Overall Winner + Hydropower & Sustainable Energy Track Winner
- team Pikachu
- next Golden Ticket to the global Junction stage in Finland
selected recognition
Google TMT Hackathon / 2026
1st place in the File Translation Tool Track with SANAD.
As team SPAN, a two-person team, we built SANAD for the Google TMT Hackathon 2026 under KU ILPRL's Google-supported Trilingual Machine Translation project. The product turns public-service documents into a reviewable translation workflow with protected-entity checks, scoped memory, risk flags, human review, and export-ready output.
- Official Google TMT Hackathon 2026 results May 8, 2026
- SANAD source repository May 2026
- Google TMT project context KU ILPRL
- result Winner, File Translation Tool Track
- team SPAN, two-person team
- scope English / Nepali / Tamang public-service document translation
upstream
I care about upstream work because it is one of the cleanest ways to test whether an idea survives outside my own repository. The contributions below are small on purpose: concrete enough to inspect, strict enough to review, and real enough to affect behavior that other people depend on.
selected contributions
Linux / Kernel / 2026
Linux kernel contributions across Bluetooth memory safety, DRM/PCI controller fixes, KUnit, and core library paths.
The work spans 13 commits verified in mainline Linux: Bluetooth memory-safety work, AMD XDNA debug BO sync, PowerVR userspace array stride handling, PCI/DWC/Meson teardown and error-path fixes, KUnit tooling fixes, cmdline next_arg() coverage, printf IPv6 tests, seq_buf export/KUnit coverage, and IIO DMA and PowerVR fixes tagged for stable. Related accepted upstream work includes an OpenVPN keepalive peer-lifetime fix and a FUSE/io-uring request-lifetime race report.
- fix Bluetooth SSP passkey-handler UAF later tracked as CVE-2026-46056 April 13, 2026
- add Meson PCIe remove callback for host-bridge deinit and PHY power-off June 9, 2026
- guard DesignWare RAS DES debugfs teardown when state was not allocated June 9, 2026
- propagate devm_add_action_or_reset() failure in Meson PCIe clock setup June 9, 2026
- use caller client for AMD XDNA debug BO sync June 16, 2026
- fix PowerVR userspace array stride handling in pvr_set_uobj_array(), tagged for stable July 2, 2026
- reported FUSE/io-uring commit_fetch error-path race fixed in mainline June 15, 2026
- hold OpenVPN peer before scheduling keepalive work May 28, 2026
- copy caller args in run_kernel to prevent mutation February 26, 2026
- skip stty when stdin is not a tty February 27, 2026
- add IPv6 address format tests for printf coverage April 2026
- extend cmdline KUnit with next_arg() regression tests March 2026
- export seq_buf_putmem_hex() April 8, 2026
- add seq_buf KUnit coverage May 22, 2026
- zero-initialize NXP SAR ADC DMA config, tagged for stable consideration May 15, 2026
- status 13 commits verified in mainline Linux; plus accepted OpenVPN and FUSE/io-uring upstream reports not counted as mainline commits here
- scope Bluetooth memory safety / AMD XDNA debug BO sync / PowerVR userspace array stride handling / PCI controller teardown and error paths / OpenVPN peer lifetime / FUSE io_uring request lifetime / KUnit tooling / cmdline and seq_buf tests / printf IPv6 coverage / IIO DMA fix
- through Maintainer-reviewed upstream workflow
also selected
Cilium Tetragon / eBPF / 2026
Kprobe return-path validation and schema clarification in Tetragon.
Merged in cilium/tetragon#4601, this series rejects unsupported returnArgAction values on kprobe return paths, adds regression coverage, and carries the clarified semantics through CRDs, docs, vendored schema copies, and examples. An earlier Helm template cleanup also merged in #4631.
- pull request #4601: returnArgAction validation, docs, and CRD sync April 29, 2026
- pull request #4631: Helm template extension cleanup February 24, 2026
- status 2 merged pull requests in cilium/tetragon
- scope Kprobe return-path validation / tracing-policy docs and CRDs / Helm packaging cleanup
- evidence Regression coverage plus maintainer-reviewed upstream workflow
also selected
Pyrefly / Type checker / 2026
Stub descriptor semantics in Pyrefly.
Merged in facebook/pyrefly#3151, this fix makes stub and interface declarations use descriptor protocol lookup instead of exposing raw descriptor types. It closes #3045, adds regression coverage for inherited .pyi descriptors, and the mypy_primer run reported fewer real-world false positives.
- merged fix for stub/interface descriptor semantics April 28, 2026
- pull request #3151 with maintainer approval and mypy_primer signal April 28, 2026
- status Merged into facebook/pyrefly
- scope Descriptor protocol / .pyi stubs / type inference
- evidence Regression test plus mypy_primer signal across real projects
also selected
Bitcoin Core / LLVM compiler-rt / 2026
TSAN and glibc fortify investigation for a Bitcoin Core timeout.
Investigated an intermittent Bitcoin Core TSAN timeout and traced the failing path to glibc fortify emitting __read_chk for TokenPipeEnd::TokenRead(), which did not go through TSAN's normal intercepted read path. The public issue thread records the diagnosis; a Bitcoin maintainer later linked the issue to an LLVM compiler-rt fix for fortified read/pread interceptors.
- status Public upstream investigation; not counted as a merged LLVM code contribution
- scope Bitcoin Core functional test timeout / glibc _FORTIFY_SOURCE / TSAN signal handling / compiler-rt interceptors
- evidence Issue-thread diagnosis, maintainer follow-up, and merged LLVM PR addressing the same missing fortified read/pread interceptor path
also selected
Dify / Agentic workflow platform / 2026
OpenTelemetry decorator typing cleanup in Dify.
Merged in langgenius/dify#32163, this refactor tightens OpenTelemetry decorator typing in the API service while preserving runtime behavior. A separate prompt-template typing cleanup remains open and is not counted here.
- pull request #32163: tighten OTel decorator typing February 9, 2026
- merged commit in langgenius/dify main February 9, 2026
- status 1 merged pull request in langgenius/dify
- scope Python typing / OpenTelemetry decorator ergonomics
- evidence Merge commit verified reachable from langgenius/dify main