<?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: Yemisi Okunrounmu</title>
    <description>The latest articles on DEV Community by Yemisi Okunrounmu (@yemmmyc).</description>
    <link>https://dev.to/yemmmyc</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%2F3195082%2F0a1d7b5e-3749-4dad-ad23-afe6b6db6832.jpg</url>
      <title>DEV Community: Yemisi Okunrounmu</title>
      <link>https://dev.to/yemmmyc</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/yemmmyc"/>
    <language>en</language>
    <item>
      <title>Can AI Diagnose a Linux Production Incident Without Making It Worse?</title>
      <dc:creator>Yemisi Okunrounmu</dc:creator>
      <pubDate>Thu, 24 Sep 2026 15:05:39 +0000</pubDate>
      <link>https://dev.to/yemmmyc/can-ai-diagnose-a-linux-production-incident-without-making-it-worse-2c9f</link>
      <guid>https://dev.to/yemmmyc/can-ai-diagnose-a-linux-production-incident-without-making-it-worse-2c9f</guid>
      <description>&lt;p&gt;&lt;em&gt;This is a submission for the &lt;a href="https://dev.to/challenges/kaggle-2026-09-23"&gt;Kaggle Benchmarking Challenge&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  What I Benchmarked
&lt;/h2&gt;

&lt;p&gt;I wanted to test a practical question:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Can an AI model diagnose a Linux production incident from evidence, rather than simply recognize a familiar error message?&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;For my benchmark, I created a &lt;strong&gt;Linux SRE Incident Diagnosis&lt;/strong&gt; task focused on filesystem exhaustion and application failure.&lt;/p&gt;

&lt;p&gt;The incident involved a production server where an application began returning HTTP 500 errors.&lt;/p&gt;

&lt;p&gt;At first glance, the evidence looked straightforward:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;/var = 97% full
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The application was also reporting:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;errno=28 No space left on device
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;But the incident contained a deeper Linux troubleshooting clue.&lt;/p&gt;

&lt;p&gt;The diagnostic evidence included:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;lsof +L1

api 18472 app ... 47185920000 ... /var/log/api.log (deleted)
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;In other words, the &lt;code&gt;api&lt;/code&gt; process was still holding an approximately 47 GB log file open even though the file had been deleted.&lt;/p&gt;

&lt;p&gt;That creates an important distinction between what &lt;code&gt;df&lt;/code&gt; reports at the filesystem level and what &lt;code&gt;du&lt;/code&gt; can see through the visible directory structure.&lt;/p&gt;

&lt;p&gt;I designed the benchmark to test whether the model could connect those pieces of evidence rather than stopping at:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;"The disk is full."&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;The task evaluates six areas:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Root Cause&lt;/strong&gt; — identify what actually caused the incident.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Evidence&lt;/strong&gt; — cite the relevant Linux and application evidence.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Diagnostic Reasoning&lt;/strong&gt; — connect the evidence logically.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Recommended Diagnostic Commands&lt;/strong&gt; — suggest commands that would confirm the diagnosis.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Safe Remediation&lt;/strong&gt; — recommend controlled recovery rather than destructive actions.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Risk Assessment&lt;/strong&gt; — explain operational risks using the available evidence.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;I chose this problem because it represents the kind of incident where a technically plausible answer can still be operationally dangerous.&lt;/p&gt;

&lt;h2&gt;
  
  
  Models Tested
&lt;/h2&gt;

&lt;p&gt;For the first version of the benchmark, I tested:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Gemini 3.7 Flash&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;I intentionally started with one model.&lt;/p&gt;

&lt;p&gt;My first goal was to validate the benchmark itself: could the task distinguish a shallow "disk full" answer from a response that actually connected filesystem usage, application errors, process-level evidence, remediation, and operational risk?&lt;/p&gt;

&lt;p&gt;The published Kaggle benchmark currently contains &lt;strong&gt;1 task and 1 evaluated model&lt;/strong&gt;. Gemini 3.7 Flash received a &lt;strong&gt;100.00&lt;/strong&gt; score, and the associated task is marked &lt;strong&gt;Pass&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Rather than immediately adding several models and producing a larger but less focused leaderboard, I wanted to establish a clear baseline first.&lt;/p&gt;

&lt;p&gt;The next useful experiment would be to run the same task against additional models and compare their failure patterns, not just their final scores.&lt;/p&gt;

&lt;h2&gt;
  
  
  Findings
&lt;/h2&gt;

&lt;p&gt;The headline result is:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Gemini 3.7 Flash — 100.00&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;But the number itself is not the most interesting part.&lt;/p&gt;

&lt;p&gt;What interested me was the reasoning the benchmark was designed to test.&lt;/p&gt;

&lt;h3&gt;
  
  
  1. "Disk full" is not the complete diagnosis
&lt;/h3&gt;

&lt;p&gt;A model can easily notice:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;/var = 97%
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;and:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;errno=28 No space left on device
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;But that is only the beginning.&lt;/p&gt;

&lt;p&gt;The stronger diagnostic question is:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Why is the filesystem full, and why might the visible files not account for all of the space?&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;That is where the deleted-but-open log file becomes important.&lt;/p&gt;

&lt;h3&gt;
  
  
  2. &lt;code&gt;df&lt;/code&gt; and &lt;code&gt;du&lt;/code&gt; tell different stories
&lt;/h3&gt;

&lt;p&gt;This incident demonstrates why Linux troubleshooting sometimes requires comparing different evidence sources.&lt;/p&gt;

&lt;p&gt;&lt;code&gt;df&lt;/code&gt; reports filesystem-level space consumption.&lt;/p&gt;

&lt;p&gt;&lt;code&gt;du&lt;/code&gt; reports disk usage associated with visible files and directories.&lt;/p&gt;

&lt;p&gt;If a process still has a deleted file open, the storage can remain allocated even though the filename has disappeared from the directory tree.&lt;/p&gt;

&lt;p&gt;That means a mismatch between filesystem usage and visible file usage is itself a diagnostic clue.&lt;/p&gt;

&lt;h3&gt;
  
  
  3. Process-level evidence matters
&lt;/h3&gt;

&lt;p&gt;The benchmark explicitly requires the model to recognize the significance of:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;lsof +L1
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This command can expose deleted files that are still open by processes.&lt;/p&gt;

&lt;p&gt;In this scenario, that evidence connects the filesystem problem directly to the &lt;code&gt;api&lt;/code&gt; process and the deleted &lt;code&gt;api.log&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;That is much stronger than simply saying "check the logs."&lt;/p&gt;

&lt;h3&gt;
  
  
  4. Correct diagnosis is not enough
&lt;/h3&gt;

&lt;p&gt;I also wanted the benchmark to test &lt;strong&gt;operational judgment&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;A model might correctly identify that &lt;code&gt;/var&lt;/code&gt; is full but then recommend indiscriminately deleting log files, rebooting the server, or killing the application process.&lt;/p&gt;

&lt;p&gt;Those actions can have consequences in a production environment.&lt;/p&gt;

&lt;p&gt;A safer response should first establish what is consuming the space and then choose a controlled remediation appropriate to the process and service.&lt;/p&gt;

&lt;p&gt;That distinction is important to me because an AI assistant used in an SRE workflow should not only answer:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;"What is wrong?"&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;It should also reason about:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;"What is safe to do next?"&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h3&gt;
  
  
  What surprised me?
&lt;/h3&gt;

&lt;p&gt;The biggest lesson from building the benchmark was how much the &lt;strong&gt;evaluation design&lt;/strong&gt; matters.&lt;/p&gt;

&lt;p&gt;If I only checked whether the model mentioned "disk full," the benchmark would be easy to game with a shallow answer.&lt;/p&gt;

&lt;p&gt;Instead, I had to make the evaluation evidence-specific:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;/var&lt;/code&gt; must be connected to the incident;&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;errno=28&lt;/code&gt; must be recognized;&lt;/li&gt;
&lt;li&gt;the deleted &lt;code&gt;api.log&lt;/code&gt; must be identified;&lt;/li&gt;
&lt;li&gt;the &lt;code&gt;api&lt;/code&gt; process must be connected to the open file;&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;lsof +L1&lt;/code&gt; must appear as an appropriate diagnostic command;&lt;/li&gt;
&lt;li&gt;remediation must account for operational risk.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;That changed how I think about AI evaluation.&lt;/p&gt;

&lt;p&gt;A benchmark should not only ask:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Did the model produce the expected answer?&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;It should ask:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Did the model demonstrate the reasoning that makes the answer trustworthy?&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h3&gt;
  
  
  What would I measure next?
&lt;/h3&gt;

&lt;p&gt;The obvious next experiment is to run the same benchmark against additional models.&lt;/p&gt;

&lt;p&gt;I would particularly want to compare:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;whether models recognize deleted-but-open files;&lt;/li&gt;
&lt;li&gt;whether they understand the &lt;code&gt;df&lt;/code&gt; versus &lt;code&gt;du&lt;/code&gt; distinction;&lt;/li&gt;
&lt;li&gt;whether they recommend evidence-gathering before remediation;&lt;/li&gt;
&lt;li&gt;whether they suggest disruptive actions too early;&lt;/li&gt;
&lt;li&gt;whether their risk assessments are grounded in the incident evidence.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;I would also like to expand the benchmark into additional Linux/SRE incident types while keeping the same evidence → diagnosis → remediation → risk structure.&lt;/p&gt;

&lt;p&gt;That would make it possible to study &lt;strong&gt;failure patterns&lt;/strong&gt;, rather than treating a single aggregate score as the whole story.&lt;/p&gt;

&lt;h2&gt;
  
  
  My Benchmark
&lt;/h2&gt;

&lt;p&gt;You can inspect the public benchmark, task, results, description, and provenance on Kaggle:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;a href="https://www.kaggle.com/benchmarks/yemmmychotmailcom/linux-sre-incident-diagnosis/versions/1" rel="noopener noreferrer"&gt;Linux SRE Incident Diagnosis — Kaggle Benchmark&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;The benchmark is released under the &lt;strong&gt;Apache 2.0&lt;/strong&gt; license.&lt;/p&gt;

&lt;p&gt;The current public leaderboard shows:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Gemini 3.7 Flash — 100.00&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;The benchmark contains one Linux SRE incident diagnosis task and is intended to evaluate evidence-based troubleshooting, diagnostic reasoning, safe remediation, and operational risk assessment.&lt;/p&gt;

&lt;p&gt;Building this benchmark gave me a different way to look at AI-assisted infrastructure work.&lt;/p&gt;

&lt;p&gt;For me, the interesting question is no longer simply:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;"Can an AI find the answer?"&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;It is:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;"Can an AI show enough evidence-based reasoning to help an engineer make a safe decision?"&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;That is what I want to measure next.&lt;/p&gt;

&lt;h1&gt;
  
  
  kagglechallenge #ai #machinelearning #linux #sre #devops
&lt;/h1&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%2Fmkhlu2t3gwo0hw8eah7s.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%2Fmkhlu2t3gwo0hw8eah7s.png" alt=" " width="800" height="400"&gt;&lt;/a&gt;&lt;/p&gt;

</description>
      <category>devchallenge</category>
      <category>kagglechallenge</category>
      <category>ai</category>
      <category>machinelearning</category>
    </item>
  </channel>
</rss>
