<?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: Prakash</title>
    <description>The latest articles on DEV Community by Prakash (@prakash888kp).</description>
    <link>https://dev.to/prakash888kp</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%2F2004536%2F22278525-7545-4c21-9545-fc7dcebfbf7d.png</url>
      <title>DEV Community: Prakash</title>
      <link>https://dev.to/prakash888kp</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/prakash888kp"/>
    <language>en</language>
    <item>
      <title>The RAG Change That Looked Fine — Until Production Users Caught It</title>
      <dc:creator>Prakash</dc:creator>
      <pubDate>Sun, 08 Nov 2026 14:42:50 +0000</pubDate>
      <link>https://dev.to/prakash888kp/the-rag-change-that-looked-fine-until-production-users-caught-it-1i91</link>
      <guid>https://dev.to/prakash888kp/the-rag-change-that-looked-fine-until-production-users-caught-it-1i91</guid>
      <description>&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fwqor5tbdr5pozb1ppu1w.jpg" 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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fwqor5tbdr5pozb1ppu1w.jpg" alt=" " width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;I thought my RAG pipeline was solid.&lt;/p&gt;

&lt;p&gt;We had a notebook that retrieved the right chunks. Answers looked grounded. Ingest scores looked healthy. The demo never failed in front of stakeholders.&lt;/p&gt;

&lt;p&gt;Then a small change went out: we tightened chunk size to "improve precision."&lt;/p&gt;

&lt;p&gt;CI stayed green. Unit tests stayed green.&lt;/p&gt;

&lt;p&gt;Two weeks later support tickets started — answers that skipped the corpus, citations that pointed at the wrong doc, and one nasty case where a low-quality upload slipped ingest because &lt;code&gt;trust_score&lt;/code&gt; still looked fine.&lt;/p&gt;

&lt;p&gt;That was the moment I stopped trusting notebook confidence.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What actually broke&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;The failures were not dramatic. They were quiet.&lt;/p&gt;

&lt;p&gt;Recall dropped after the chunk tweak, but nothing in CI measured retrieval quality. The model still answered fluently, so grounding gaps hid behind confident prose. Ingest trusted a score that was not the same as "safe to serve."&lt;/p&gt;

&lt;p&gt;We were testing code. We were not testing whether the RAG system still behaved like a RAG system.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What I built to catch it next time&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;I turned those three failure modes into CI checkpoints:&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fa4rbtwsaq49hs4evsvvp.jpg" 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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fa4rbtwsaq49hs4evsvvp.jpg" alt=" " width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Retrieve&lt;/strong&gt; — does the retriever still find the right context after a change?&lt;br&gt;&lt;br&gt;
&lt;strong&gt;Ground&lt;/strong&gt; — does the answer stay tied to the corpus, or is it drifting?&lt;br&gt;&lt;br&gt;
&lt;strong&gt;Defend&lt;/strong&gt; — does ingest reject poisoned or low-trust content before it lands in the index?&lt;/p&gt;

&lt;p&gt;That became &lt;strong&gt;SentinelRAG&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Offline-first, so the gate can run in GitHub Actions with a MockLLM and no GPU. When something slips, you get &lt;code&gt;evidence.json&lt;/code&gt; plus JUnit/SARIF — the kind of artifacts reviewers and auditors can actually open.&lt;/p&gt;

&lt;p&gt;If you already use promptfoo, Ragas, or DeepEval, you can import those scores into the same gate instead of maintaining a second report pile.&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F3beykxyhk6yay35hzvdb.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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F3beykxyhk6yay35hzvdb.png" alt=" " width="800" height="456"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  The part that changed my workflow
&lt;/h2&gt;

&lt;p&gt;The win was not a prettier dashboard. The win was a red PR.&lt;/p&gt;

&lt;p&gt;After a chunk or prompt change, the gate either passes or it fails the build. That sounds obvious. It was not obvious when my notebook still looked fine and production users were the ones finding the regression.&lt;/p&gt;

&lt;p&gt;I also keep a poison demo around. Running it once is a useful gut-check: if your pipeline cannot fail loudly on a known bad ingest, it will not protect you when a real one shows up.&lt;/p&gt;

&lt;h2&gt;
  
  
  If you are shipping RAG
&lt;/h2&gt;

&lt;p&gt;I open-sourced this because I kept hitting the same gap across projects: plenty of eval notebooks, almost no merge-blocking gate for retrieval, grounding, and ingest trust.&lt;/p&gt;

&lt;p&gt;If you maintain a RAG feature in CI, you can try the same pattern on your next change:&lt;/p&gt;

&lt;p&gt;pip install sentinelrag&lt;/p&gt;

&lt;p&gt;Repo and docs: &lt;a href="https://github.com/prakash888kp/SentinelRAG" rel="noopener noreferrer"&gt;https://github.com/prakash888kp/SentinelRAG&lt;/a&gt;&lt;br&gt;
Package: &lt;a href="https://pypi.org/project/sentinelrag/" rel="noopener noreferrer"&gt;https://pypi.org/project/sentinelrag/&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;I would genuinely like to hear what your pipeline still misses — open an issue if a checkpoint does not match how you ship.&lt;/p&gt;

</description>
      <category>ai</category>
      <category>devsecops</category>
      <category>rag</category>
      <category>llm</category>
    </item>
  </channel>
</rss>
