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. |
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. |
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 | in review | 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



