{"slug": "how-i-shipped-15-green-mrs-to-gitlab-in-one-day-inside-our-modern-contributor", "title": "How I Shipped 15 Green MRs to GitLab in One Day: Inside Our Modern Contributor Tech Stack", "summary": "An engineering team shipped 15 fully green merge requests across three upstream GitLab repositories in a single day, reaching 4,197 contributor points toward GitLab's Level 4 milestone of 7,500. The work spanned Ruby, TypeScript, and Python and centered on GitLab Core's native Model Context Protocol support in Rails, including nine MCP tool endpoints such as list_pipeline_schedules, create_merge_request_pipeline, and save_work_item with optimistic locking and targeted description edits.", "body_md": "Contributing to one of the largest open-source platforms in the world is usually described as slow, deliberate, and fraught with complex CI pipelines.\n\nToday, across three distinct upstream GitLab repositories, our engineering pipeline achieved a landmark milestone: **15 out of 15 Merge Requests 100% Green in CI, 100% assigned to maintainers and domain reviewers**, and officially crossing **4,197 live contributor points** on track to the prestigious **Level 4 Contributor milestone (7,500 pts)**.\n\nHow do you tackle 15 upstream issues across **Ruby**, **TypeScript**, and **Python** in a single sprint without breaking pipelines or getting bogged down in review cycles?\n\nHere is an architectural breakdown of the **modern tech stack** we use every day to solve GitLab issues at enterprise velocity.\n\nGitLab is no longer just a monolithic Ruby on Rails application. Modern AI-assisted software delivery requires a distributed ecosystem:\n\n```\n┌────────────────────────────────────────────────────────────────────────┐\n│                        Developer / Agentic Client                      │\n│                  (Claude Desktop, Cline, Cursor, Antigravity)          │\n└───────────────────────────────────┬────────────────────────────────────┘\n                                    │ Model Context Protocol (JSON-RPC)\n                                    ▼\n┌────────────────────────────────────────────────────────────────────────┐\n│                   GitLab Core MCP Server (Ruby on Rails)               │\n│                  lib/api/mcp/handlers & JSON-RPC Router                │\n│                                                                        │\n│   • list_pipeline_schedules   • create_merge_request_pipeline          │\n│   • list_work_items (filter)  • save_work_item (description_edits)     │\n│   • list_user_events          • get_pipeline (poll hints)              │\n└───────────────────┬────────────────────────────────┬───────────────────┘\n                    │                                │\n                    ▼                                ▼\n┌──────────────────────────────────────┐  ┌──────────────────────────────┐\n│  GitLab LSP (TypeScript / Node.js)   │  │  AI Gateway (Python / FastAPI│\n│  editor-extensions/gitlab-lsp        │  │  modelops/.../ai-assist      │\n│                                      │  │                              │\n│   • Virtual Workspace File Indexing  │  │   • Agent Platform Guard     │\n│   • WebSocket Lifecycle & Leak Fix   │  │   • Duo Workflow Service     │\n│   • Multibyte UTF-8 Chunk Decoder    │  │   • APIStatusError Handling  │\n│   • CLI Slash Command Wake Queue     │  │   • Tool Execution Loop      │\n└──────────────────────────────────────┘  └──────────────────────────────┘\n```\n\nGitLab Core is pioneering native support for Anthropic's **Model Context Protocol (MCP)** directly within its Rails application (`lib/api/mcp/`). This allows AI agents to interface directly with GitLab issues, pipelines, notes, and work items via structured JSON-RPC.\n\n`rspec:predictive`)\nWe implemented and polished **9 distinct MCP tool endpoints**:\n\n`list_pipeline_schedules``!264856`): Exposing CI schedule discovery to AI agents.` create_merge_request_pipeline``!264858`): Giving agents the ability to trigger targeted MR pipeline runs.`save_work_item` with `description_edits` & `expected_updated_at``!264862`): Adding optimistic locking and targeted string replacement diffs to prevent concurrent edit collisions.`list_work_items` with `parent_id` hierarchy filter`!264859`): Allowing recursive task tree traversal.` get_pipeline` with `poll_after_seconds` hint`!264863`): Teaching AI agents how long to sleep before polling pipeline status.`list_user_events``!264864`): Activity feed telemetry tool for AI agents.`!264852`): Transparently accepting `query` and `search_term`.`!264853`): Reporting unknown parameter names with suggestions.` save_note` updating`!264854`): Allowing AI agents to update existing issue notes.\nIn GitLab Rails helpers, never declare unmemoized instance variables (`@variable`). RuboCop will flag this under `Gitlab/PredicateMemoization` or helper encapsulation rules. Clean encapsulation in service classes keeps CI 100% green on the first push!\n\nThe `gitlab-lsp` powers language intelligence and Duo AI features inside VS Code, WebIDE, and JetBrains.\n\n`ws`)`!4537`, `#3364`)` NodeJS.Timeout`) was not cleared. Over time, reconnect attempts created zombie timers that leaked memory.\n\n```\n   // Explicit cleanup on upgrade rejection\n   this.ws.on('unexpected-response', (_req, res) => {\n     this.clearHeartbeat();\n     this.emit('error', new UpgradeError(res.statusCode));\n   });\n```\n\n`!4538`, `#3350`)` StringDecoder('utf8')` guarantees chunk boundary safety.`!4536`, `#2381`)\nThe `ai-assist` repository runs the GitLab AI Gateway—the engine orchestrating large language models and multi-agent execution loops.\n\n`!7641`, `#3394`)`!7642`, `#3345`)` status_code` from client `APIStatusError` exceptions rather than letting unhandled errors cascade into generic HTTP 500 crashes.\n| Metric | Standing | Impact | \n|---|---|---|\n| **Current Live Score** | **4,197 points** | Verified Level 3 Contributor | \n| **Points Added Today** | **+327 points** | Verified through Contributor API | \n| **Active Merge Requests** | **15 MRs** | 9 in Core, 4 in LSP, 2 in AI Gateway | \n| **CI Success Rate** | **15 / 15 (100% Green)** | Zero test failures | \n| **Reviewer Coverage** | **15 / 15 Assigned** | Zero unassigned MRs | \n| **Unresolved Threads** | **0 Blockers** | Sub-30-minute review SLA readiness | \n| **Projected Total Upon Merge** | **7,545+ points** | **Surpasses Level 4 Target (`7,500 pts`)** | \n\n*Follow our daily engineering journey across GitHub ([@hrlpavan](https://github.com/hrlpavan)) and GitLab ([@hrlpavan](https://gitlab.com/hrlpavan)).*", "url": "https://wpnews.pro/news/how-i-shipped-15-green-mrs-to-gitlab-in-one-day-inside-our-modern-contributor", "canonical_source": "https://dev.to/hrlpavan/how-i-shipped-15-green-mrs-to-gitlab-in-one-day-inside-our-modern-contributor-tech-stack-3lbd", "published_at": "2026-10-25 17:07:34+00:00", "updated_at": "2026-10-25 17:13:36.887383+00:00", "lang": "en", "topics": ["ai-agents", "agent-protocols", "developer-tools", "ai-tools"], "entities": ["GitLab", "Anthropic", "Model Context Protocol", "Claude Desktop", "Cline", "Cursor", "Ruby on Rails", "FastAPI"], "also_reported_by": [], "alternates": {"html": "https://wpnews.pro/news/how-i-shipped-15-green-mrs-to-gitlab-in-one-day-inside-our-modern-contributor", "markdown": "https://wpnews.pro/news/how-i-shipped-15-green-mrs-to-gitlab-in-one-day-inside-our-modern-contributor.md", "text": "https://wpnews.pro/news/how-i-shipped-15-green-mrs-to-gitlab-in-one-day-inside-our-modern-contributor.txt", "jsonld": "https://wpnews.pro/news/how-i-shipped-15-green-mrs-to-gitlab-in-one-day-inside-our-modern-contributor.jsonld"}}