Software engineer @ 9D Technologies in Lahore, Pk. I write Python and FastAPI services, the CI/CD that ships them, and the telemetry that explains them when they break. Most of my open source work lands in large, long-lived codebases: container images, build systems, CI, and the accessibility bugs everyone had learned to live with. Lately, LLM agents that are only allowed to do what they can prove.
Website Β· RΓ©sumΓ© Β· LinkedIn Β· X Β· Medium Β· Email
I debug systems by reading traces, so this is my history the way Jaeger would draw it. Each role is a span; the live ones keep growing.
Open any span on the interactive version.
Every one of these is running or merged somewhere you can check.
|
Env var substitution in the Jenkins image Β Opt-in substitution for reference config in containerized Jenkins, closing a request open since 2017. I followed it with Windows parity in PowerShell: π’ Shipped in Weekly 2.565 and LTS 2.568.1 Β· #2250 β Β· #2365 β |
FOSSology microservices Β Revived a branch frozen since 2021 and ran the scheduler, database and agents as 10+ services on Kubernetes, with a Kustomize base across 26 manifests. Moving from Make to CMake cut build time by 40%. The hard part was a scheduler crash loop, traced through schema limits, container networking and init ordering. βΈοΈ 10+ services Β· β40% build time Β· Final report β |
|
SigNoz AI SRE Β A self-healing loop driven by SigNoz alerts. Rules fix known failures. Unknown ones go to an LLM with two read-only tools, a three-key action allowlist and a 10-second timeout, and its proposals pass the same safety check a human's would. Every model call is a traced span. π€ Gemini Β· Claude Β· GPT behind one interface Β· Watch it run β |
PoS-OTel Β Jenkins exports traces to an OpenTelemetry Collector that keeps every failed build, every build over 30 seconds and 20% of the rest. Traces go to Jaeger; span metrics feed Prometheus and Grafana. I built it after an afternoon of correlating container logs by hand during GSoC. π β81% trace data across 9 pipeline runs Β· Source β Β· Simulator β |
|
Ezvor Β A career platform that scores readiness only from work a judge has verified. It combines a 3,977-problem graded DSA arena with live GSoC, LFX and Outreachy status. The score is a pure function of the evidence, with no model and no network calls, so it can't be gamed. π’ Live Β· App β Β· Source β |
PDF Scanner Web Β The web side of PDF Scanner, an Android app with 50M+ installs. It has 31 document tools, including merge, compress, OCR, sign and redact, and every one runs in the browser. Files never leave the device, so there's no conversion server to run. π’ Live Β· 31 tools Β· 0 uploads Β· App β Β· Source β |
Also: this portfolio, an Astro site with a working terminal and in-browser BM25 "ask my rΓ©sumΓ©" Β· Stremo, public-domain cinema from the Internet Archive Β· RevealX, a password-reveal extension that survives React re-renders Β· AutoAccept, a one-click friend-request extension. Every repo β
Counts come from the GitHub API and refresh daily, so nothing here is typed by hand.
| Project | Merged | What I did | |
|---|---|---|---|
| Jenkins | 5 | Opt-in env var substitution for the official Docker image, closing a 2017 request, then Windows parity in PowerShell with Pester tests. Both ship in Weekly 2.565 and LTS 2.568.1. Keyboard-navigation and ARIA fixes in core. | |
| FOSSology | 19 | GSoC 2025: a monolith split into 10+ services on Kubernetes, and a Make β CMake move that cut build time 40%. Fixes in the copyright, nomos and cp2foss agents, plus all 14 weekly reports. | |
| OWASPΒ Nest | 1 | Collaborator since Jan 2026. Focus-visible accessibility reports, the GSoC 2026 mentor list, and a security issue disclosed privately. | |
| FailureTwin | 1 | Put a live LLM analysis path in front of the deterministic engine and kept the engine as the fallback, with no secrets in the client bundle. | |
| sktime | 1 | Sporadic optimization bracket errors in BoxCoxBiasAdjustedForecaster. |
|
| NumFOCUS | 1 | Edits to the DISCOVER Cookbook, the guide for inclusive conferences. | |
| TYPO3 | 1 | Reworked the testing framework docs and removed deprecated Nimut references. |
Plus 1 more in meshery/meshery.
| Change | PR | |
|---|---|---|
| π’ | Opt-in env var substitution for containerized Jenkins, open since 2017 | docker#2250 |
| π’ | Windows parity: Invoke-EnvVarSubstitution for .xml, .conf, .properties, .groovy, with 3 Pester tests |
docker#2365 |
| β | Keyboard navigation scrolling in dropdowns, where off-screen items lost visual feedback. Reported in #26357 | jenkins#26358 |
| β | Theme picker keyboard navigation via event delegation on dynamic elements, requested by the maintainer | theme-manager-plugin#350 |
| β | Broken GitHub profile link on jenkins.io, fixed after confirming with the affected contributors |
jenkins.io#8629 |
| π‘ | Double-clicking the search placeholder no longer blocks input. Reported in #26389 | jenkins#26418 |
| π‘ | ARIA roles for screen readers on dropdown menus | jenkins#26321 |
Issues I opened: #26357 dropdown keyboard navigation, with a video repro (fixed in #26358) Β· #26389 search placeholder (fix in #26418) Β· #26390 breadcrumb dropdown on small viewports (I reviewed the fix, #26391) Β· docker#2350 Windows parity (fixed in #2365)
Reviews and discussions: review on #26391 Β· theme-manager-plugin #354 Β· plugin-site-api #107 Β· Matrix accessibility thread Β· GSoC 2026: OpenTelemetry scaling strategies
π’ shipped in a release Β· β merged Β· π‘ in review Β· full history β
I spent a summer building a complete microservices infrastructure for FOSSology: scheduler, database and agents running in Docker and Kubernetes. It taught me distributed systems and configuration management, but mostly what happens when you don't have observability. That is the reason I later built PoS-OTel.
Weekly reports Β· Repository Β· Final report Β· Working branch OmarAbdelSamea/GSoC/Microservices
| Commit | Date | |
|---|---|---|
1af934a |
feat(core) microservices infrastructure |
2025-06-26 |
440f907 |
fix(scheduler) CrashLoopBackOff and web deployment connectivity |
2025-07-02 |
4fd4787 |
build Make β CMake, missing agent Dockerfiles and deployments, rebased on master |
2025-08-26 |
| Merged fix | PR | |
|---|---|---|
| β | fix invalid characters in the copyright agent URL regex |
#3212 |
| β | fix(agent-tests) PHPUnit tests modernized for the CMake migration |
#3037 |
| β | feat(debug) debug logging for version control commands |
#2958 |
| β | fix URL and email false positives on example domains and specific TLDs |
#2955 |
| β | fix nomos CLI no longer connects to the DB when it isn't needed |
#2947 |
| βͺ | fix(cli) cp2foss stops silently queueing jobs for unreachable URLs (closed) |
#3314 |
| Week | Report | What happened |
|---|---|---|
| Bonding | #300 | Kickoff, 1:1s with mentors Soham and Avinal, closed out #1299, local environment ready by May 31. |
| 1 | #314 | Docker, Minikube and kubectl on Ubuntu 24.04. Rebased Omar's 2021 branch. Build failures, a stale etcd image, and the web UI serving Debian's default Apache page. |
| 2 | #319 | Tried bookworm-slim, rolled back to buster-slim, fixed file paths, built every base image. Then db-0 stuck in Init. |
| 3 | #327 | Missing libcurl in the scheduler build, web starting before PostgreSQL, a schema crash. First working UI. |
| 4 | #330 | Minikube β Kind for a faster loop. First implementation up for review. Scheduler still in CrashLoopBackOff. |
| 5 | #340 | Crash loop fixed for good. Next: the web pod resolving PostgreSQL via localhost instead of the service. |
| 6 | #346 | PHP config and DB connectivity from pod logs. Agreed the Make β CMake move with mentors. |
| 7 | #349 | Most components building under CMake, the scheduler the last failing image. Passed the midterm. |
| 8 | #355 | CMake on Bookworm, back to Minikube, synced with master. Manifests for four missing agents. |
| 9 | #364 | Missing DB columns for the web agent, a curl health check for the scheduler, a clean Dockerfile.ojo. |
| 10 | #365 | Scheduler partially functional. Kustomize restructure started. Consulted the original 2021 contributor. |
| 11 | #371 | A Kustomize base with dev and prod overlays across 26 manifests. |
| 12 | #372 | Remaining instability traced to install path mismatches. Rebuild versus incremental fix, weighed. |
| 13 | #373 | Legacy vs modern scheduler compared, last failures traced to upstream migrations. Final report. |
Issues: #3374 email notification docs for modern Debian/Ubuntu Β· #2996 panel synchronization button Β· all FOSSology PRs β
- OWASP Nest, collaborator since January 2026. The GSoC 2026 mentor entry. Reported clipped focus-visible outlines (#3561) and selectable search hints (#5602). Disclosed a security issue privately.
- sktime. Sporadic bracket errors in
BoxCoxBiasAdjustedForecaster, #10316. - aeon-toolkit.
RDSTRegressorandRISTRegressortests after Ubuntu CI verification (#2599), and a notebook on aeon distances with sklearn clusterers (#2511). Both closed. - Dragonfly.
LMPOPwith unit tests in C++, #3925 (closed). - NumFOCUS DISCOVER Cookbook (#73) and TYPO3 tea (#1480): documentation.
- Infomaniak kDrive. Reported the sign-up flow sticking on first launch, #1117.
Every PR outside my own repos β
Deterministic first. Known failures take a plain if/else. The model only sees what the rules can't explain.
Guardrails live outside the model. A small action allowlist, read-only tools and a hard timeout. Safety comes from a small action space, not from trusting the output.
Every model call is a span. The model, token counts and each tool call are traced next to the infra they investigated, so cost is a query.
Fallbacks are part of the contract. No key, a timeout or a bad answer resolves to "needs a human". In a live run, my agent found no evidence and declined to act.
From SigNoz AI SRE and failuretwin-ai#12.
$ git log --oneline --graph -8
* 06ddd58 2026-09 feat PDF Scanner Web: 31 document tools, all in the browser, for 9D Technologies
* 094c45c 2026-08-09 merge Live LLM analysis path with the deterministic engine kept as fallback
* 61edd8f 2026-08 chore Joined 9D Technologies as a Backend Software Engineer
* 8f79334 2026-07-20 feat SigNoz AI SRE: self-healing loop with a guarded LLM tier
* f4e7e8b 2026-07-07 feat Ezvor: career platform scored only on judge-verified work
* d35f0f2 2026-06-10 merge Env var substitution for Windows containers, shipped in LTS 2.568.1
* 580fdd9 2026-05-18 merge Closed a 2017 issue: env var substitution in the official Jenkins image
* 1c5c477 2026-03-17 feat PoS-OTel: OpenTelemetry pipeline for Jenkins CI, 81% less trace data
Synced daily from the full changelog.
- π Google Summer of Code 2025, FOSSology. Under 5% acceptance, one of a small number of Pakistani contributors that year.
- βΈοΈ Linux Foundation LiFT Scholar 2025, a full scholarship for Kubernetes for Developers (LFD259) and its exam.
- π₯ Byte & Battle Hackathon 2025, 1st place university-wide and 3rd at district level, in speed programming.
- π PEEF Scholarship, an 80% fee scholarship from the Government of Punjab for academic merit.
- π€ Dev Weekends, mentor for developers getting into open source and GSoC.
- Closing a 2017 issue in the official Jenkins Docker image
- Cutting CI trace volume by 81% with tail sampling
- GSoC 2025 at FOSSology, week by week
- My Google Summer of Code 2025 journey on Medium
AI: tool-calling agents, Vercel AI SDK, Gemini Β· Claude Β· GPT, LangChain, RAG, embeddings, BM25, OpenTelemetry gen_ai.* tracing, NumPy, pandas, Hugging Face Transformers.
Also: OpenTelemetry, Jaeger, SigNoz, Kustomize, CMake, JWT, Socket.io, PowerShell, HTML5.
This week in code
Say hello: Email Β· LinkedIn Β· X Β· Website Β· or run sudo hire salman in the terminal there



