<?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: Aditya Srivastava</title>
    <description>The latest articles on DEV Community by Aditya Srivastava (@aditya_srivastava_07).</description>
    <link>https://dev.to/aditya_srivastava_07</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%2F4219826%2Fa605395e-30e2-4796-a81f-59fda89cb6a0.png</url>
      <title>DEV Community: Aditya Srivastava</title>
      <link>https://dev.to/aditya_srivastava_07</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/aditya_srivastava_07"/>
    <language>en</language>
    <item>
      <title>Zero Hallucinations and Immortal Daemons: Our Overnight Hackathon Journey with IssueFlowP6</title>
      <dc:creator>Aditya Srivastava</dc:creator>
      <pubDate>Sun, 01 Nov 2026 00:58:31 +0000</pubDate>
      <link>https://dev.to/aditya_srivastava_07/zero-hallucinations-and-immortal-daemons-our-overnight-hackathon-journey-with-issueflowp6-2eoh</link>
      <guid>https://dev.to/aditya_srivastava_07/zero-hallucinations-and-immortal-daemons-our-overnight-hackathon-journey-with-issueflowp6-2eoh</guid>
      <description>&lt;p&gt;It's a little past 6 AM. The sky is slowly turning that shade of blue you only see after an all-nighter, and I've just spent the last twenty minutes fighting with port &lt;code&gt;11434&lt;/code&gt; on my MacBook.&lt;/p&gt;

&lt;p&gt;If you've ever typed &lt;code&gt;kill -9&lt;/code&gt; into your terminal at 5 in the morning, only to see the exact same process come back a few seconds later with a completely new PID, you probably know what I'm talking about.&lt;/p&gt;

&lt;p&gt;Twelve hours earlier, we had nothing more than an idea, a shared frustration, and an empty project directory. By sunrise, we had built &lt;strong&gt;IssueFlowP6&lt;/strong&gt; — a local-first, AI-powered decision intelligence tool designed to solve a problem almost every software development team has faced at some point.&lt;/p&gt;

&lt;p&gt;And we did it without depending on cloud APIs or blindly trusting whatever an LLM decided to tell us.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Problem: Important Decisions Get Lost
&lt;/h2&gt;

&lt;p&gt;Think about how a typical development team works.&lt;/p&gt;

&lt;p&gt;There's a long discussion on Discord or Slack about which database to use, how an API should behave, or why a particular architectural approach might not work. Someone suggests an idea, another person disagrees, and eventually the team reaches a decision.&lt;/p&gt;

&lt;p&gt;Sounds simple, right?&lt;/p&gt;

&lt;p&gt;Now imagine trying to find that exact decision three days later.&lt;/p&gt;

&lt;p&gt;The conversation is buried under hundreds of messages. Nobody remembers who suggested what, why an alternative was rejected, or where the final decision was made.&lt;/p&gt;

&lt;p&gt;We realised that this wasn't just a documentation problem. It was a knowledge recovery problem.&lt;/p&gt;

&lt;p&gt;The obvious solution would be to feed the entire conversation into an LLM and ask it to summarise everything. But there's a catch: LLMs can confidently paraphrase, change the meaning of statements, or even invent details that were never part of the original discussion.&lt;/p&gt;

&lt;p&gt;For engineering decisions, that can become a serious problem.&lt;/p&gt;

&lt;p&gt;We wanted something different. Instead of simply trusting the AI, we wanted to make it prove what it extracted.&lt;/p&gt;

&lt;p&gt;That became the core idea behind IssueFlowP6.&lt;/p&gt;

&lt;h2&gt;
  
  
  Building the Pipeline at 1 AM
&lt;/h2&gt;

&lt;p&gt;One of our biggest priorities was keeping the entire system local. We didn't want to send private engineering discussions to external APIs or depend on cloud services.&lt;/p&gt;

&lt;p&gt;So, we built our stack around &lt;strong&gt;Ollama and Qwen 2.5 (7B)&lt;/strong&gt;, running locally on Apple Silicon.&lt;/p&gt;

&lt;p&gt;We divided the project into three main components:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;1. The Reader — &lt;code&gt;extract.py&lt;/code&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;This is where everything begins.&lt;/p&gt;

&lt;p&gt;The module takes raw discussion logs, such as &lt;code&gt;api_discussion.txt&lt;/code&gt; and &lt;code&gt;database_discussion.txt&lt;/code&gt;, and passes them to the locally running Qwen model.&lt;/p&gt;

&lt;p&gt;Its job is to identify important engineering decisions, their supporting context, and alternatives that were rejected. The extracted information is then returned in a structured format.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;2. The Fact-Checker — &lt;code&gt;verify.py&lt;/code&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;This is probably the most important part of our architecture.&lt;/p&gt;

&lt;p&gt;Rather than accepting everything generated by the LLM, this module checks whether the supporting quotes actually exist word-for-word in the original discussion.&lt;/p&gt;

&lt;p&gt;If a quote cannot be found in the source, it gets rejected.&lt;/p&gt;

&lt;p&gt;The idea is simple: an AI-generated decision shouldn't be treated as reliable evidence unless its supporting statement can be traced back to the original conversation.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;3. The Command Center — &lt;code&gt;cli.py&lt;/code&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Finally, we needed a simple way to bring everything together.&lt;/p&gt;

&lt;p&gt;The CLI allows developers to run the extraction and verification pipeline from the terminal and retrieve recovered decisions from structured JSON files.&lt;/p&gt;

&lt;p&gt;No complicated interface was needed to demonstrate the core functionality. Just a command and a clear output.&lt;/p&gt;

&lt;p&gt;Of course, getting all three components working together wasn't exactly smooth.&lt;/p&gt;

&lt;p&gt;Early in the night, we ran into a series of 404 errors because Ollama couldn't find the model we expected to be available locally.&lt;/p&gt;

&lt;p&gt;After pulling &lt;code&gt;qwen2.5:7b&lt;/code&gt; and getting the local setup running properly, we finally executed:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;python3 &lt;span class="nt"&gt;-m&lt;/span&gt; decisionlab.cli extract
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;And waited to see what would happen.&lt;/p&gt;

&lt;h2&gt;
  
  
  The 3 AM Plot Twist: "Verified &amp;amp; Kept: 0"
&lt;/h2&gt;

&lt;p&gt;This was easily one of the most interesting moments of the entire hackathon.&lt;/p&gt;

&lt;p&gt;The terminal finished processing and displayed:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Verified &amp;amp; Kept: 0&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;For a moment, we genuinely thought something was broken.&lt;/p&gt;

&lt;p&gt;The model was reading the conversations. It was identifying the right decisions. The extraction seemed to be working.&lt;/p&gt;

&lt;p&gt;So why was absolutely nothing making it through verification?&lt;/p&gt;

&lt;p&gt;After going through the logs, we figured it out.&lt;/p&gt;

&lt;p&gt;Qwen 2.5 was extracting the correct information, but it was doing what LLMs often do: making small improvements to the wording. Sometimes it changed a phrase, corrected the grammar, or paraphrased a sentence slightly.&lt;/p&gt;

&lt;p&gt;To a human reader, the meaning was practically identical.&lt;/p&gt;

&lt;p&gt;But our &lt;code&gt;verify.py&lt;/code&gt; module wasn't interested in whether the sentence sounded similar. It was checking for an exact match against the original source.&lt;/p&gt;

&lt;p&gt;Even a tiny difference was enough to reject the quote.&lt;/p&gt;

&lt;p&gt;And then it clicked.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Our verification system was doing exactly what we had designed it to do.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;We hadn't built a system that simply accepted whatever the AI generated. We had built one that challenged its output.&lt;/p&gt;

&lt;p&gt;That zero-result output wasn't necessarily proof of a broken pipeline. It exposed a limitation in the model's extraction behaviour and showed us why strict verification mattered in the first place.&lt;/p&gt;

&lt;p&gt;It also gave us a much better story to explain during the final presentation.&lt;/p&gt;

&lt;h2&gt;
  
  
  The 5 AM Boss Battle: The Process That Wouldn't Die
&lt;/h2&gt;

&lt;p&gt;With the main implementation tested and committed to &lt;code&gt;main&lt;/code&gt;, I thought the hardest part of the night was finally over.&lt;/p&gt;

&lt;p&gt;I was wrong.&lt;/p&gt;

&lt;p&gt;Before the presentations, I wanted to shut down the local Ollama server and free up some RAM on my MacBook.&lt;/p&gt;

&lt;p&gt;I started with:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;lsof &lt;span class="nt"&gt;-i&lt;/span&gt; :11434
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Found the process, grabbed PID &lt;code&gt;82248&lt;/code&gt;, and killed it.&lt;/p&gt;

&lt;p&gt;Checked the port again.&lt;/p&gt;

&lt;p&gt;Ollama was back.&lt;/p&gt;

&lt;p&gt;This time, with PID &lt;code&gt;82673&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;I tried unloading the macOS &lt;code&gt;launchctl&lt;/code&gt; plist and killing the process again. Somehow, it returned with PID &lt;code&gt;83120&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;At this point, it genuinely felt like I was fighting a digital hydra. Every time I killed one process, another appeared.&lt;/p&gt;

&lt;p&gt;Eventually, I used:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;pkill &lt;span class="nt"&gt;-9&lt;/span&gt; &lt;span class="nt"&gt;-f&lt;/span&gt; Ollama
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;And finally, the port was quiet.&lt;/p&gt;

&lt;p&gt;For the first time in a while, my terminal was actually listening to me.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Final Challenge: Getting the Presentation Ready
&lt;/h2&gt;

&lt;p&gt;Once the technical work was mostly done, we still had one important task left: preparing the presentation for the judges.&lt;/p&gt;

&lt;p&gt;We wanted the slides to look as good as the project itself, so we experimented with several visual directions, including Neumorphism, Glassmorphism, Claymorphism, and Neo-Brutalism.&lt;/p&gt;

&lt;p&gt;We explored different layouts and design styles before settling on a bold, high-contrast direction that made the architecture, terminal workflow, and core features easy to understand.&lt;/p&gt;

&lt;p&gt;There were a few frustrating moments with our Canva integration, including repeated &lt;code&gt;PERMISSION_DENIED&lt;/code&gt; errors when trying to generate designs.&lt;/p&gt;

&lt;p&gt;With the deadline getting closer, we had to adapt, work around the interruptions, and focus on getting the final deck ready.&lt;/p&gt;

&lt;p&gt;It was another reminder that hackathons aren't just about writing code. Sometimes, you have to figure out how to keep moving when the tools you depend on stop cooperating.&lt;/p&gt;

&lt;h2&gt;
  
  
  What I'll Remember About This Hackathon
&lt;/h2&gt;

&lt;p&gt;Looking back, the most memorable part of this experience wasn't a particular feature or even the final working demo.&lt;/p&gt;

&lt;p&gt;It was everything that happened in between.&lt;/p&gt;

&lt;p&gt;It was figuring out why a model kept paraphrasing quotes, understanding why our verification system rejected them, watching the three Python modules finally work together, and spending an unreasonable amount of time trying to stop a background process.&lt;/p&gt;

&lt;p&gt;Somewhere between debugging, testing, redesigning slides, and fighting sleep, &lt;strong&gt;IssueFlowP6&lt;/strong&gt; went from an idea to a working project.&lt;/p&gt;

&lt;p&gt;We learned that building with AI isn't just about getting a model to generate useful answers. It's also about understanding where it can go wrong and designing systems that account for those limitations.&lt;/p&gt;

&lt;p&gt;Our goal was never to make AI sound smarter. It was to make the information it provides more trustworthy.&lt;/p&gt;

&lt;p&gt;The port is finally quiet. The presentation is ready. The code is committed.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;IssueFlowP6 is ready for the judges.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Now, hopefully, it's time to get some sleep.&lt;/p&gt;




&lt;p&gt;&lt;strong&gt;Built with Team RAGA | Hacktoberfest 2026 | Newton School of Technology, Rishihood University&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;This is a submission for the &lt;a href="https://dev.to/mlh-hackathon"&gt;MLH x DEV Writing Challenge&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;

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

&lt;h2&gt;
  
  
  Demo
&lt;/h2&gt;

&lt;h2&gt;
  
  
  Partner Technologies
&lt;/h2&gt;

&lt;h2&gt;
  
  
  Hackathon Experience
&lt;/h2&gt;

</description>
      <category>mlhacks</category>
      <category>devchallenge</category>
      <category>hackathon</category>
    </item>
  </channel>
</rss>
