<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: V K Adhithiya Kumar</title>
    <description>The latest articles on DEV Community by V K Adhithiya Kumar (@devadhithiya).</description>
    <link>https://dev.to/devadhithiya</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F3838791%2F93aaadc3-b3c7-483e-a0cf-098848dbbef9.png</url>
      <title>DEV Community: V K Adhithiya Kumar</title>
      <link>https://dev.to/devadhithiya</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/devadhithiya"/>
    <language>en</language>
    <item>
      <title>🚀 Everything You Need to Know About the GitLab Community Hackathon! 🦊</title>
      <dc:creator>V K Adhithiya Kumar</dc:creator>
      <pubDate>Sat, 10 Oct 2026 09:43:43 +0000</pubDate>
      <link>https://dev.to/devadhithiya/everything-you-need-to-know-about-the-gitlab-community-hackathon-3jb8</link>
      <guid>https://dev.to/devadhithiya/everything-you-need-to-know-about-the-gitlab-community-hackathon-3jb8</guid>
      <description>&lt;h1&gt;
  
  
  🚀 Welcome to the GitLab Community Hackathon Guide!
&lt;/h1&gt;

&lt;p&gt;Are you looking to get involved in open source, level up your skills, and earn some exclusive swag? The &lt;strong&gt;GitLab Community Hackathon&lt;/strong&gt; is a week-long virtual event where &lt;em&gt;anyone&lt;/em&gt; can contribute to GitLab projects[cite: 1]! &lt;/p&gt;

&lt;p&gt;Whether you're interested in coding, documentation, UI/UX design, or translation, there is a place for you[cite: 1]. &lt;/p&gt;

&lt;p&gt;Here is your comprehensive &lt;code&gt;README.md&lt;/code&gt; guide on how to jump in, start contributing, and win big. &lt;/p&gt;




&lt;h2&gt;
  
  
  🛠️ How to Join &amp;amp; Get Started
&lt;/h2&gt;

&lt;p&gt;Participating in the hackathon is completely remote and designed to be accessible. Here is how to get started:&lt;/p&gt;

&lt;h3&gt;
  
  
  1. Onboard &amp;amp; Setup
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Start Onboarding:&lt;/strong&gt; Head over to the &lt;a href="https://contributors.gitlab.com/hackathon" rel="noopener noreferrer"&gt;GitLab Contributor Platform&lt;/a&gt; and click "start onboarding"[cite: 1]. You'll receive a personal onboarding issue sent straight to your email[cite: 1].&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Prep Your Environment:&lt;/strong&gt; Follow the instructions in your onboarding issue to set up your local development environment[cite: 1]. &lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  2. Find an Issue
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Pick a Quick Win:&lt;/strong&gt; Look for "quick-win" issues to get the hang of the workflow[cite: 1].&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Get Assigned:&lt;/strong&gt; &lt;em&gt;Before&lt;/em&gt; you open a merge request (MR), make sure you are assigned to the issue[cite: 1]. You can assign yourself using the issue finder or simply ask in the issue thread[cite: 1].&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  3. Contribute!
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Accept the Rules:&lt;/strong&gt; You &lt;em&gt;must&lt;/em&gt; accept the hackathon rules (via the popup or button on the platform page) for your contributions to count[cite: 1].&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Submit Your MR:&lt;/strong&gt; Create a merge request anytime during the 7-day hackathon period[cite: 1]. &lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;The Magic Bot:&lt;/strong&gt; The &lt;code&gt;@gitlab-bot&lt;/code&gt; will automatically apply the &lt;code&gt;Hackathon&lt;/code&gt; label to your MR to denote that it qualifies[cite: 1]. &lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;The Deadline:&lt;/strong&gt; To score points for an MR, it must be merged within &lt;strong&gt;31 days&lt;/strong&gt; after the 7-day hackathon ends[cite: 1]. If no MRs are merged in that window, you won't earn any points[cite: 1]! &lt;/li&gt;
&lt;/ul&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;💡 Pro Tip:&lt;/strong&gt; You can also earn points for non-code contributions during the 7-day period! This includes opening issues, adding notes, sending Discord messages, creating forum posts, translating, and more[cite: 1].&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h2&gt;
  
  
  🏆 Prizes &amp;amp; Scoring
&lt;/h2&gt;

&lt;p&gt;The Community Hackathon rewards contributors with credits that can be redeemed in the &lt;strong&gt;Contributor Success store&lt;/strong&gt;[cite: 1]. &lt;/p&gt;

&lt;p&gt;Here is the prize breakdown[cite: 1]:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;🥇 First Place:&lt;/strong&gt; 200 credits to the individual with the most points[cite: 1].&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;🥈 Second Place:&lt;/strong&gt; 150 credits to the individual with the second most points[cite: 1].&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;🥉 Third Place:&lt;/strong&gt; 100 credits to the individual with the third most points[cite: 1].&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;🎉 Merged MR:&lt;/strong&gt; 50 credits to &lt;em&gt;everyone&lt;/em&gt; who successfully gets at least one MR merged[cite: 1]! &lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  🌍 Why Participate?
&lt;/h2&gt;

&lt;p&gt;Beyond the prizes, the GitLab Community Hackathon is an incredible way to:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Gain real-world, practical experience in a massive codebase[cite: 1].&lt;/li&gt;
&lt;li&gt;Collaborate with a globally diverse, welcoming open-source community[cite: 1].&lt;/li&gt;
&lt;li&gt;Unlock exclusive GitLab profile achievements to show off on your resume[cite: 1].&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Are you ready to make your first contribution? Head over to &lt;a href="https://contributors.gitlab.com/hackathon" rel="noopener noreferrer"&gt;contributors.gitlab.com/hackathon&lt;/a&gt; and sign up today! Happy hacking! 🦊💻&lt;/p&gt;

</description>
      <category>community</category>
      <category>devchallenge</category>
      <category>opensource</category>
    </item>
    <item>
      <title>19 Merged MRs in GitLab: What I Learned Contributing to GitLab Open Source</title>
      <dc:creator>V K Adhithiya Kumar</dc:creator>
      <pubDate>Sat, 10 Oct 2026 09:21:33 +0000</pubDate>
      <link>https://dev.to/devadhithiya/19-merged-mrs-in-gitlab-what-i-learned-contributing-to-gitlab-open-source-3l40</link>
      <guid>https://dev.to/devadhithiya/19-merged-mrs-in-gitlab-what-i-learned-contributing-to-gitlab-open-source-3l40</guid>
      <description>&lt;p&gt;Over the past few weeks I've been contributing to GitLab's open source projects: the main GitLab Rails app, the GitLab Development Kit (GDK), GitLab Runner and the GitLab Language Server. Here's every merge request that landed, with a short summary of each.&lt;/p&gt;

&lt;h2&gt;
  
  
  At a glance
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Project&lt;/th&gt;
&lt;th&gt;Merged MRs&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="https://gitlab.com/gitlab-org/gitlab" rel="noopener noreferrer"&gt;GitLab&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;9&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="https://gitlab.com/gitlab-org/gitlab-development-kit" rel="noopener noreferrer"&gt;GitLab Development Kit&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;7&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="https://gitlab.com/gitlab-org/editor-extensions/gitlab-lsp" rel="noopener noreferrer"&gt;GitLab Language Server&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;2&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="https://gitlab.com/gitlab-org/gitlab-runner" rel="noopener noreferrer"&gt;GitLab Runner&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Total&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;19&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h2&gt;
  
  
  GitLab (Rails app)
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;MR&lt;/th&gt;
&lt;th&gt;Title&lt;/th&gt;
&lt;th&gt;Summary&lt;/th&gt;
&lt;th&gt;Merged&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="https://gitlab.com/gitlab-org/gitlab/-/merge_requests/261203" rel="noopener noreferrer"&gt;!261203&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Remove dropped provide option from agent_table_spec&lt;/td&gt;
&lt;td&gt;Removed a &lt;code&gt;provide&lt;/code&gt; option the spec factory silently ignored, so the test matches what the component actually uses.&lt;/td&gt;
&lt;td&gt;2026-10-09&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="https://gitlab.com/gitlab-org/gitlab/-/merge_requests/260849" rel="noopener noreferrer"&gt;!260849&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Update backport docs for maintained versions and cherry-picks&lt;/td&gt;
&lt;td&gt;Clarified that maintainers can backport to all maintained versions, and linked the release docs for the cherry-pick steps.&lt;/td&gt;
&lt;td&gt;2026-10-09&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="https://gitlab.com/gitlab-org/gitlab/-/merge_requests/260848" rel="noopener noreferrer"&gt;!260848&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Add Secrets Manager development docs to the navigation report&lt;/td&gt;
&lt;td&gt;Removed &lt;code&gt;ignore_in_report&lt;/code&gt; from two Secrets Manager dev pages so the docs navigation report tracks them.&lt;/td&gt;
&lt;td&gt;2026-10-09&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="https://gitlab.com/gitlab-org/gitlab/-/merge_requests/260026" rel="noopener noreferrer"&gt;!260026&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Add loose foreign key from deployments.user_id to users&lt;/td&gt;
&lt;td&gt;Added an &lt;code&gt;async_nullify&lt;/code&gt; loose foreign key so deleted users no longer leave stale IDs in deployments and ClickHouse.&lt;/td&gt;
&lt;td&gt;2026-10-09&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="https://gitlab.com/gitlab-org/gitlab/-/merge_requests/260010" rel="noopener noreferrer"&gt;!260010&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Remove unused Admin::PlansFinder and run plan limits 404 specs on CE&lt;/td&gt;
&lt;td&gt;Deleted a dead finder and made the "no plans row" specs run on both CE and EE.&lt;/td&gt;
&lt;td&gt;2026-10-09&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="https://gitlab.com/gitlab-org/gitlab/-/merge_requests/259844" rel="noopener noreferrer"&gt;!259844&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Add minimum floor to Elastic migration throttle_delay&lt;/td&gt;
&lt;td&gt;Enforced a 2-second minimum &lt;code&gt;throttle_delay&lt;/code&gt; so a migration's exclusive lease can't block its own successor.&lt;/td&gt;
&lt;td&gt;2026-10-08&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="https://gitlab.com/gitlab-org/gitlab/-/merge_requests/256942" rel="noopener noreferrer"&gt;!256942&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Size partitioned tables by their largest partition in UpdateTableSizes keep&lt;/td&gt;
&lt;td&gt;Partitioned tables are now classified by their largest partition (via &lt;code&gt;pg_inherits&lt;/code&gt;) instead of their empty parent table.&lt;/td&gt;
&lt;td&gt;2026-10-08&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="https://gitlab.com/gitlab-org/gitlab/-/merge_requests/260039" rel="noopener noreferrer"&gt;!260039&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Add enum constraint to scope parameter in MCP search tool&lt;/td&gt;
&lt;td&gt;Added a JSON Schema &lt;code&gt;enum&lt;/code&gt; for &lt;code&gt;scope&lt;/code&gt; in the MCP search tool so clients can validate values.&lt;/td&gt;
&lt;td&gt;2026-10-07&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="https://gitlab.com/gitlab-org/gitlab/-/merge_requests/259843" rel="noopener noreferrer"&gt;!259843&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Remove dead company-form onboarding code&lt;/td&gt;
&lt;td&gt;Cleaned up a service and predicate methods left unused after the company form was removed.&lt;/td&gt;
&lt;td&gt;2026-10-07&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h2&gt;
  
  
  GitLab Development Kit (GDK)
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;MR&lt;/th&gt;
&lt;th&gt;Title&lt;/th&gt;
&lt;th&gt;Summary&lt;/th&gt;
&lt;th&gt;Merged&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="https://gitlab.com/gitlab-org/gitlab-development-kit/-/merge_requests/6221" rel="noopener noreferrer"&gt;!6221&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Add a GitLab branch option to the one-line install script&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;support/install&lt;/code&gt; accepts a GitLab branch through an argument or &lt;code&gt;GITLAB_BRANCH&lt;/code&gt;, so you no longer need &lt;code&gt;gdk switch&lt;/code&gt; after installing.&lt;/td&gt;
&lt;td&gt;2026-10-09&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="https://gitlab.com/gitlab-org/gitlab-development-kit/-/merge_requests/6220" rel="noopener noreferrer"&gt;!6220&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Propagate the Ruby entrypoint exit status from bin/gdk&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;gdk&lt;/code&gt; commands now exit non-zero on failure, so scripts and CI can detect a broken &lt;code&gt;gdk update&lt;/code&gt;.&lt;/td&gt;
&lt;td&gt;2026-10-09&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="https://gitlab.com/gitlab-org/gitlab-development-kit/-/merge_requests/6193" rel="noopener noreferrer"&gt;!6193&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Consolidate duo_agent_platform.md into howto/ai/_index.md&lt;/td&gt;
&lt;td&gt;Merged two overlapping Duo Agent Platform setup pages into one and kept the old links working.&lt;/td&gt;
&lt;td&gt;2026-10-09&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="https://gitlab.com/gitlab-org/gitlab-development-kit/-/merge_requests/6194" rel="noopener noreferrer"&gt;!6194&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Remove unused interactive mode from support/install and support/geo-install&lt;/td&gt;
&lt;td&gt;Removed an unreachable interactive install path and simplified argument handling.&lt;/td&gt;
&lt;td&gt;2026-10-07&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="https://gitlab.com/gitlab-org/gitlab-development-kit/-/merge_requests/6190" rel="noopener noreferrer"&gt;!6190&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Add comments to explain TaskLogger#tail options&lt;/td&gt;
&lt;td&gt;Documented each &lt;code&gt;tail&lt;/code&gt; option and its return value.&lt;/td&gt;
&lt;td&gt;2026-10-06&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="https://gitlab.com/gitlab-org/gitlab-development-kit/-/merge_requests/6172" rel="noopener noreferrer"&gt;!6172&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Stop package_helper download specs writing test_package.tar.gz to disk&lt;/td&gt;
&lt;td&gt;Fixed an order-dependent flaky spec by stubbing the file write that leaked into the repo root.&lt;/td&gt;
&lt;td&gt;2026-09-25&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="https://gitlab.com/gitlab-org/gitlab-development-kit/-/merge_requests/6157" rel="noopener noreferrer"&gt;!6157&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Fix Rspack/Webpack HMR port when http-router is enabled&lt;/td&gt;
&lt;td&gt;The HMR WebSocket now uses the browser-facing port, which fixes a page-blocking Rspack overlay error.&lt;/td&gt;
&lt;td&gt;2026-09-21&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h2&gt;
  
  
  GitLab Language Server
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;MR&lt;/th&gt;
&lt;th&gt;Title&lt;/th&gt;
&lt;th&gt;Summary&lt;/th&gt;
&lt;th&gt;Merged&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="https://gitlab.com/gitlab-org/editor-extensions/gitlab-lsp/-/merge_requests/4115" rel="noopener noreferrer"&gt;!4115&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;ci: skip integration jobs that can only fail in fork pipelines&lt;/td&gt;
&lt;td&gt;Gated jobs that need secrets or macOS runners, so community fork pipelines stop going red. Shipped in v9.23.0.&lt;/td&gt;
&lt;td&gt;2026-09-23&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="https://gitlab.com/gitlab-org/editor-extensions/gitlab-lsp/-/merge_requests/4113" rel="noopener noreferrer"&gt;!4113&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;refactor(core): import GitLabGID from gid_utils instead of duplicating it&lt;/td&gt;
&lt;td&gt;Replaced a duplicated type with the shared one and resolved a long-standing FIXME. Shipped in v9.22.0.&lt;/td&gt;
&lt;td&gt;2026-09-17&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h2&gt;
  
  
  GitLab Runner
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;MR&lt;/th&gt;
&lt;th&gt;Title&lt;/th&gt;
&lt;th&gt;Summary&lt;/th&gt;
&lt;th&gt;Merged&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="https://gitlab.com/gitlab-org/gitlab-runner/-/merge_requests/7428" rel="noopener noreferrer"&gt;!7428&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Kubernetes executor: explain OOM-killed containers in attach and exec errors&lt;/td&gt;
&lt;td&gt;OOM-killed job containers are reported as a configuration error with a link to the memory docs, instead of a vague "container not found" system failure.&lt;/td&gt;
&lt;td&gt;2026-10-09&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h2&gt;
  
  
  Takeaways
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Small MRs merge fast.&lt;/strong&gt; Dead-code removals and doc fixes often merged within a day.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Write a clear description.&lt;/strong&gt; Saying what you verified, and what you couldn't, made reviews smoother.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Fork pipelines fail for reasons outside your change.&lt;/strong&gt; Learn to read job logs and explain unrelated failures to reviewers.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;GitLab reviewers are great.&lt;/strong&gt; Thanks to every reviewer and maintainer who helped land these.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Want to start contributing? Have a look at the &lt;a href="https://docs.gitlab.com/development/contributing/" rel="noopener noreferrer"&gt;GitLab contributor docs&lt;/a&gt; and the &lt;a href="https://gitlab.com/gitlab-community/meta" rel="noopener noreferrer"&gt;community forks&lt;/a&gt;.&lt;/p&gt;

</description>
    </item>
    <item>
      <title>Why I Can't Stop Thinking About Google's New A2A Protocol</title>
      <dc:creator>V K Adhithiya Kumar</dc:creator>
      <pubDate>Sun, 24 May 2026 05:37:06 +0000</pubDate>
      <link>https://dev.to/devadhithiya/why-i-cant-stop-thinking-about-googles-new-a2a-protocol-5dml</link>
      <guid>https://dev.to/devadhithiya/why-i-cant-stop-thinking-about-googles-new-a2a-protocol-5dml</guid>
      <description>&lt;p&gt;When Sundar Pichai dropped the words "agentic Gemini era" at Google I/O 2026, everyone naturally fixated on the shiny consumer updates. We all stared at Gemini Spark booking dinner reservations in the background, completely ignoring the absolute unit of a developer update standing right next to it.&lt;/p&gt;

&lt;p&gt;Look, having a background AI handle your OpenTable reservations is cool, but if you’re a developer, the real sauce wasn't a consumer product. It was a communication standard.&lt;/p&gt;

&lt;p&gt;I'm talking about the &lt;strong&gt;Agent2Agent (A2A) Protocol&lt;/strong&gt;. Let's break down why A2A is the actual MVP of this year's I/O, and why you should care before your multi-agent codebase turns into an unmaintainable nightmare.&lt;/p&gt;

&lt;p&gt;The Problem: We Rebuilt Silos, Just Smarter Ones&lt;br&gt;
To understand why A2A matters, we have to look at the current state of AI agents. Over the last couple of years, we’ve seen an explosion of agentic frameworks—LangGraph, crewAI, IBM's BeeAI, and Google’s own Agent Development Kit (ADK).&lt;/p&gt;

&lt;p&gt;The problem? They don't talk to each other.&lt;/p&gt;

&lt;p&gt;Right now, trying to get a specialized LangChain agent to delegate a sub-task to your proprietary Google ADK agent usually hits a wall of incompatible formats. You want a multi-agent workflow? Great, you're locked into one ecosystem. We essentially built highly intelligent microservices, but somehow forgot to invent the HTTP to connect them.&lt;/p&gt;

&lt;p&gt;Enter A2A: The Universal Translator&lt;br&gt;
Originally seeded last year and heavily spotlighted at this I/O, the A2A protocol (now an open-source Linux Foundation project) is basically the universal translator for the agentic web.&lt;/p&gt;

&lt;p&gt;A2A is an open standard that lets these isolated agents discover each other, negotiate, and actually collaborate—regardless of what model or framework they are built on. It is essentially JSON-RPC 2.0 over HTTP(S), but purpose-built for the chaos of autonomous AI.&lt;/p&gt;

&lt;p&gt;How it Works&lt;br&gt;
Instead of exposing internal memory or proprietary logic, A2A lets agents interact through a standardized rulebook:&lt;/p&gt;

&lt;p&gt;Agent Cards: Think of this as a LinkedIn profile for AI agents. It’s a URL-accessible JSON file where the agent advertises its capabilities ("Fluent in Python," "Enjoys reading massive SQL databases").&lt;/p&gt;

&lt;p&gt;The Client/Server Model: The A2A Client (the delegating agent) sends a request. The A2A Server (the remote agent doing the grunt work) exposes a compatible endpoint to take the job.&lt;/p&gt;

&lt;p&gt;Tasks &amp;amp; Artifacts: Agentic work takes time. You can't just await and pray. A "Task" tracks the job status so your system isn't left hanging, and an "Artifact" is the actual deliverable streamed back to the client once the job is done.&lt;/p&gt;

&lt;p&gt;Why This Changes the Game&lt;br&gt;
A2A fundamentally shifts how we will architect software in the agentic era.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;True Interoperability&lt;br&gt;
You no longer have to build monolithic AI applications. You can build a specialized inventory agent using Anthropic's MCP to read your database. When stock is low, that agent can use A2A to securely ping a completely different supplier agent built by a third-party vendor. They negotiate an order without either party exposing their internal codebase.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Fault Isolation&lt;br&gt;
By breaking workflows into discrete, A2A-compliant agents, your system becomes incredibly resilient. If one specialized agent starts hallucinating or fails, the whole workflow doesn't crash. You just hot-swap the misbehaving agent for a better one by updating the URL in your Agent Card.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Preserving Opacity&lt;br&gt;
Enterprise adoption of multi-agent systems has been terrified of data leaks. A2A allows agents to collaborate while maintaining strict boundaries. My agent can ask your agent to solve a problem, and your agent just returns the answer. "Alright then, keep your secrets," my agent essentially says, completely blind to the 47 janky proprietary tools your agent used behind the scenes to get the job done.&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;The Takeaway&lt;br&gt;
The TL;DR of Google I/O 2026? The future of AI isn't one giant, omnipotent God-Model. It's a massive, interconnected web of specialized multi-agent systems getting work done behind the scenes.&lt;/p&gt;

&lt;p&gt;If you are building AI applications today, stop trying to make your single agent a know-it-all. Focus on making it an A2A Server. The devs who learn how to wire these autonomous systems together are the ones who are going to architect the next decade of the web.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Frpt4rp0n9xyg38neh848.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Frpt4rp0n9xyg38neh848.png" alt=" " width="800" height="235"&gt;&lt;/a&gt;&lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fi25w9i6ppvnzu8wkhbtd.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fi25w9i6ppvnzu8wkhbtd.png" alt=" " width="799" height="635"&gt;&lt;/a&gt;&lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fv74p58m5rmzbpnqgmc7f.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fv74p58m5rmzbpnqgmc7f.png" alt=" " width="800" height="533"&gt;&lt;/a&gt;&lt;/p&gt;

</description>
      <category>devchallenge</category>
      <category>googleiochallenge</category>
    </item>
    <item>
      <title>Beyond the Chatbot: Engineering a Hybrid AI Math Tutor for the Future</title>
      <dc:creator>V K Adhithiya Kumar</dc:creator>
      <pubDate>Sun, 22 Mar 2026 18:52:13 +0000</pubDate>
      <link>https://dev.to/devadhithiya/beyond-the-chatbot-engineering-a-hybrid-ai-math-tutor-for-the-future-86g</link>
      <guid>https://dev.to/devadhithiya/beyond-the-chatbot-engineering-a-hybrid-ai-math-tutor-for-the-future-86g</guid>
      <description>&lt;p&gt;Building AI tools for education is tricky. Schools and students need the intelligence of cutting-edge LLMs, but they also need strict privacy, offline capabilities, and guardrails against prompt injection and toxic outputs. &lt;/p&gt;

&lt;p&gt;For this hackathon, I built &lt;strong&gt;Neural Math Lab&lt;/strong&gt;: a React/Vite-based math orchestrator that seamlessly switches between &lt;strong&gt;Azure OpenAI (with RAG)&lt;/strong&gt; and &lt;strong&gt;Local Ollama (DeepSeek-R1 and minicpm v)&lt;/strong&gt;, all sitting behind a custom security proxy. &lt;/p&gt;

&lt;p&gt;Here is how I built a system designed for the &lt;strong&gt;Offline-Ready AI&lt;/strong&gt; and &lt;strong&gt;Agentic System Architecture&lt;/strong&gt; tracks.&lt;/p&gt;

&lt;p&gt;🔗 &lt;strong&gt;[&lt;a href="https://github.com/dev-Adhithiya/Neural-Math-Lab" rel="noopener noreferrer"&gt;https://github.com/dev-Adhithiya/Neural-Math-Lab&lt;/a&gt;]&lt;/strong&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  🏗️ The Architecture: Client, Proxy, and Intelligence
&lt;/h2&gt;

&lt;p&gt;I wanted to build something beyond a simple API wrapper. The app is split into a frontend UI and a Node.js backend proxy.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Frontend (React + Vite):&lt;/strong&gt; Handles the UI, the Node-link Topic Map for navigation, and local state management (IndexedDB).&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Security Proxy (Node.js/Express):&lt;/strong&gt; The true engine of the app. It holds all Azure keys securely server-side and runs all prompts through policy middleware before they ever reach an LLM.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;The AI Layer:&lt;/strong&gt; A toggleable hybrid system connecting to either Azure AI Foundry/OpenAI or a local Ollama instance.&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  🛡️ Responsible AI &amp;amp; The Security Proxy
&lt;/h2&gt;

&lt;p&gt;One of my main focuses was building "Enterprise-grade" safety into an educational tool. If a student tries to jailbreak the tutor, the system needs to catch it.&lt;/p&gt;

&lt;p&gt;Instead of calling LLMs directly from the browser, I routed everything through a custom backend proxy. This allowed me to implement a robust &lt;strong&gt;Policy Middleware&lt;/strong&gt;:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Prompt Injection Filter:&lt;/strong&gt; Detects and blocks system override attempts before the LLM processes them.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Safety Categories:&lt;/strong&gt; Scans for violence, self-harm, hate speech, and cyber abuse.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Strict Mode:&lt;/strong&gt; A toggleable setting that completely blocks flagged outputs rather than just warning the user.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;By keeping the Azure keys in the server &lt;code&gt;.env&lt;/code&gt;, the client remains entirely unprivileged.&lt;/p&gt;




&lt;h2&gt;
  
  
  🔌 Hybrid Intelligence: Cloud RAG vs. Local Inference
&lt;/h2&gt;

&lt;p&gt;Not every student has a stable internet connection, and not every query needs to be sent to the cloud. Neural Math Lab features a unified streaming interface that supports two distinct modes:&lt;/p&gt;

&lt;h3&gt;
  
  
  1. Local Mode (Privacy-First &amp;amp; Multi-AI Orchestration)
&lt;/h3&gt;

&lt;p&gt;Unlike standard implementations that rely on a single model, Neural Math Lab uses a Local Multi-Agent Pipeline via Ollama. This allows for complex, multimodal workflows entirely on-device:&lt;/p&gt;

&lt;p&gt;The Vision Agent (MiniCPM-V): When a student uploads a photo of a handwritten equation or a geometric diagram, the app routes the image to MiniCPM-V. This specialized model "sees" the math, performing spatial reasoning to convert visual homework into structured digital text.&lt;/p&gt;

&lt;p&gt;The Reasoning Agent (DeepSeek-R1): Once the problem is digitized, it is passed to DeepSeek-R1. R1 doesn't just provide an answer; it uses its internal Chain-of-Thought (CoT) to "think" through the logical steps, explaining the process of solving the math.&lt;/p&gt;

&lt;p&gt;Zero Latency &amp;amp; 100% Privacy: Because both MiniCPM and DeepSeek run via Ollama, sensitive student data (like photos of their desk or handwriting) never leaves their machine.&lt;/p&gt;

&lt;h3&gt;
  
  
  2. Online Mode (Azure RAG)
&lt;/h3&gt;

&lt;p&gt;When connected to the internet, the app leverages an Azure OpenAI endpoint combined with &lt;strong&gt;Azure AI Search&lt;/strong&gt;. &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;I chunked and indexed a &lt;code&gt;math_textbook.pdf&lt;/code&gt;. &lt;/li&gt;
&lt;li&gt;When a student asks a complex question, the proxy fetches top matches from the Azure index and injects them as grounding context. The AI doesn't just guess; it teaches directly from the syllabus.&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  🔒 User Control and Data Retention
&lt;/h2&gt;

&lt;p&gt;To round out the privacy-first approach, I built comprehensive data controls directly into the frontend Settings:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Persistent Chat via IndexedDB:&lt;/strong&gt; Chats are saved locally in the browser.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Encrypted Local State:&lt;/strong&gt; Users can set a &lt;code&gt;VITE_LOCAL_VAULT_KEY&lt;/code&gt; to encrypt their local data.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Auto-Delete Retention:&lt;/strong&gt; Configurable settings to automatically prune chat history after a set number of days, plus one-click export/delete controls.&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  🚀 Running it Locally
&lt;/h2&gt;

&lt;p&gt;If you are testing this out, getting started is easy:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Clone the repo and run &lt;code&gt;npm install&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Copy &lt;code&gt;.env.example&lt;/code&gt; to &lt;code&gt;.env&lt;/code&gt; and add your Azure keys (kept safely on the server!).&lt;/li&gt;
&lt;li&gt;Start your local Ollama instance: &lt;code&gt;ollama run deepseek-r1:7b&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Spin up the full stack: &lt;code&gt;npm run dev:full&lt;/code&gt; (Starts Vite on port 5173 and the Proxy on 8787).&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;🛠️ Step-by-Step Walkthrough: How it Works&lt;br&gt;
Step 1: Secure Request Handling (The Backend Proxy)&lt;br&gt;
Most frontend apps leak API keys in the network tab. I built a Node.js/Express proxy to solve this. When a user sends a math question:&lt;/p&gt;

&lt;p&gt;The frontend hits &lt;a href="http://localhost:8787/api/chat" rel="noopener noreferrer"&gt;http://localhost:8787/api/chat&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;The Policy Middleware scans the prompt for injection attacks (e.g., "forget your math rules").&lt;/p&gt;

&lt;p&gt;If safe, the backend attaches the Azure OpenAI Key (stored securely in .env) and forwards the request.&lt;/p&gt;

&lt;p&gt;Step 2: The "Hybrid" Fork&lt;br&gt;
In the Settings.tsx component, I implemented a state-managed switch. Depending on the toggle:&lt;/p&gt;

&lt;p&gt;Online Path: The proxy uses the openai SDK to call Azure. It simultaneously queries Azure AI Search to find relevant math formulas from a pre-indexed textbook.&lt;/p&gt;

&lt;p&gt;Local Path: The request is redirected to the Ollama API (localhost:11434). This allows the app to work 100% offline using the DeepSeek-R1 reasoning model.&lt;/p&gt;

&lt;p&gt;Step 3: Visual Learning with the Topic Map&lt;br&gt;
I moved beyond standard chat lists by building a node-link Topic Map.&lt;/p&gt;

&lt;p&gt;Using a graph-based navigation system, students can see how "Algebra" connects to "Calculus."&lt;/p&gt;

&lt;p&gt;Clicking a node triggers a state update that fetches the specific context for that math topic, grounding the AI's response in that specific domain.&lt;/p&gt;

&lt;p&gt;Step 4: Local Privacy &amp;amp; Persistence&lt;br&gt;
Data privacy is a right, not a feature. I used IndexedDB for chat history storage.&lt;/p&gt;

&lt;p&gt;Persistence: Chats stay in the browser even after a refresh.&lt;/p&gt;

&lt;p&gt;Optional Encryption: Users can toggle "Encrypt local state." This uses a vault key to scramble the data before it hits the browser storage, protecting it from other users on the same machine.&lt;/p&gt;

&lt;p&gt;Step 5: Responsible AI Filtering&lt;br&gt;
Before the response is streamed back to the student, it passes through a final Output Filter.&lt;/p&gt;

&lt;p&gt;If the model attempts to generate restricted content (violence, self-harm, or non-educational topics), the stream is intercepted and replaced with a "Safety Policy Violation" message.&lt;/p&gt;

&lt;h2&gt;
  
  
  What's Next?
&lt;/h2&gt;

&lt;p&gt;Building Neural Math Lab proved to me that we don't have to compromise between powerful AI and strict safety/privacy. The hybrid approach—RAG when you need accuracy, Local when you need privacy—is the future of educational tech.&lt;/p&gt;

&lt;p&gt;Thanks for checking out my submission! I'd love to hear your thoughts in the comments.&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>ai</category>
      <category>javascript</category>
      <category>security</category>
    </item>
  </channel>
</rss>
