<?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: Ayush Shandilya</title>
    <description>The latest articles on DEV Community by Ayush Shandilya (@ayush_shandilya_dev).</description>
    <link>https://dev.to/ayush_shandilya_dev</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%2F4154240%2Fc292044b-f744-46fc-a868-c4a053d2c8d4.png</url>
      <title>DEV Community: Ayush Shandilya</title>
      <link>https://dev.to/ayush_shandilya_dev</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/ayush_shandilya_dev"/>
    <language>en</language>
    <item>
      <title>LocalBiz Scout: Building Safer Business Data Cleaning with Python and Local AI</title>
      <dc:creator>Ayush Shandilya</dc:creator>
      <pubDate>Mon, 19 Oct 2026 02:24:42 +0000</pubDate>
      <link>https://dev.to/ayush_shandilya_dev/localbiz-scout-building-safer-business-data-cleaning-with-python-and-local-ai-590i</link>
      <guid>https://dev.to/ayush_shandilya_dev/localbiz-scout-building-safer-business-data-cleaning-with-python-and-local-ai-590i</guid>
      <description>&lt;p&gt;&lt;em&gt;This is my submission for the &lt;a href="https://dev.to/challenges/hacktoberfest-week2-2026-10-12"&gt;Hacktoberfest Open-Source AI Challenge — Week 2: Side Hustle&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;

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

&lt;p&gt;I built &lt;strong&gt;LocalBiz Scout&lt;/strong&gt;, a Python tool for analyzing business CSV data, reviewing potential data-quality issues, and applying explicitly approved corrections.&lt;/p&gt;

&lt;p&gt;Business data cleaning is not just about finding inconsistencies. An incorrect phone-number correction or a false duplicate match can be worse than leaving a record untouched. I wanted to build a workflow where automation identifies problems, but the person responsible for the data retains control over changes.&lt;/p&gt;

&lt;p&gt;LocalBiz Scout has three main stages:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Analyze:&lt;/strong&gt; Generate structured findings, a Markdown report, and duplicate candidates.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Review:&lt;/strong&gt; Create correction proposals and a decision template. Proposals default to &lt;code&gt;deferred&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Remediate:&lt;/strong&gt; Apply only accepted, allowlisted formatting corrections and produce an audit trail.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The tool preserves the original input, protects existing outputs, and does not merge or delete records as part of duplicate handling.&lt;/p&gt;

&lt;p&gt;The intended users are developers and data teams working with business directories, lead lists, and other CSV datasets that need a reviewable data-quality workflow.&lt;/p&gt;

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

&lt;p&gt;I verified the complete &lt;code&gt;analyze → review → remediate&lt;/code&gt; workflow using synthetic business records.&lt;/p&gt;

&lt;p&gt;The workflow produced the expected reports, review templates, corrected CSV, and remediation audit. I accepted two proposed corrections, deferred one, and rejected another. Only the two accepted corrections were applied, and a SHA-256 check confirmed that the original input remained unchanged.&lt;/p&gt;

&lt;p&gt;I also ran the web interface locally and verified that it rejected invalid Host and Origin requests. The interface is loopback-only and analyze-only.&lt;/p&gt;

&lt;p&gt;There is no hosted demo at present. The project can be run locally using the instructions in the repository.&lt;/p&gt;

&lt;h2&gt;
  
  
  Code
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;GitHub repository:&lt;/strong&gt; &lt;a href="https://github.com/ayushshandilya-dev/LocalBiz-Scout" rel="noopener noreferrer"&gt;ayushshandilya-dev/LocalBiz-Scout&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The implementation includes the CLI, CSV analysis, correction review, controlled remediation, audit generation, a local web interface, and automated tests.&lt;/p&gt;

&lt;h2&gt;
  
  
  How I Built It
&lt;/h2&gt;

&lt;p&gt;The project uses Python, RapidFuzz for fuzzy matching, Pytest for testing, and a small local web interface.&lt;/p&gt;

&lt;p&gt;I designed the workflow around a distinction between &lt;strong&gt;proposing a change and being authorized to apply it&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Correction proposals are not automatically applied. The user must explicitly accept them, and only predefined correction rules are permitted. The remediation process writes a separate output and records what was proposed, what decision was made, and whether the correction was applied.&lt;/p&gt;

&lt;p&gt;Duplicate candidates are treated as items for review rather than permission to merge records. The matching logic also accounts for address details such as house numbers and unit identifiers, which can distinguish businesses with otherwise similar information.&lt;/p&gt;

&lt;p&gt;I added safeguards for input/output path conflicts, existing output files, malformed decisions, CSV quoting, and embedded newlines. These are easy to overlook in a small utility, but they matter when the input contains data that must not be silently changed.&lt;/p&gt;

&lt;h3&gt;
  
  
  Where AI Fits
&lt;/h3&gt;

&lt;p&gt;AI is optional rather than a prerequisite for the core workflow.&lt;/p&gt;

&lt;p&gt;I integrated local inference through Ollama for ambiguous duplicate-candidate adjudication. I verified an offline run using the locally available &lt;code&gt;gemma3:1b&lt;/code&gt; model, which adjudicated three ambiguous candidates without falling back.&lt;/p&gt;

&lt;p&gt;The deterministic workflow remains usable without AI. The model does not directly rewrite business records or bypass the review and remediation safeguards.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why Does Open Innovation Matter?
&lt;/h2&gt;

&lt;p&gt;Open innovation makes it possible for developers to inspect, test, adapt, and challenge the design rather than relying on an opaque data-cleaning service.&lt;/p&gt;

&lt;p&gt;For this project, the important benefit is transparency. The correction rules are explicit, decisions are reviewable, and remediation produces an audit trail. Developers can inspect how candidate matches are generated and decide whether the safeguards fit their own datasets.&lt;/p&gt;

&lt;p&gt;Local inference also provides an option for experimenting with AI-assisted adjudication without sending the sample data to a hosted model API. It does not eliminate the need to validate model outputs, which is why the AI path remains optional.&lt;/p&gt;

&lt;h2&gt;
  
  
  My Agent Session
&lt;/h2&gt;

&lt;p&gt;I used OpenCode as a coding agent during development and verification.&lt;/p&gt;

&lt;p&gt;The process included implementation reviews, regression testing, data-integrity checks, and a final audit of installation and command-line behavior. I kept the final verification separate from implementation changes so the reported results could be checked against the committed revision.&lt;/p&gt;

&lt;p&gt;I do not have a published DevRelay or agent-session link to include here.&lt;/p&gt;

&lt;h2&gt;
  
  
  Testing and Results
&lt;/h2&gt;

&lt;p&gt;The final verification reported:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;406 tests passed&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;1 test skipped&lt;/strong&gt; because IPv6 loopback binding was unavailable in the environment&lt;/li&gt;
&lt;li&gt;Installation through &lt;code&gt;pip install .&lt;/code&gt; verified in an isolated virtual environment&lt;/li&gt;
&lt;li&gt;Installed console-script entry point verified&lt;/li&gt;
&lt;li&gt;End-to-end analysis, review, and remediation verified on synthetic data&lt;/li&gt;
&lt;li&gt;Local web-server smoke tests passed&lt;/li&gt;
&lt;li&gt;Optional Ollama adjudication verified offline&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;These results establish that the tested workflow works in the verification environment; they are not a claim of production deployment or real-world adoption.&lt;/p&gt;

&lt;h2&gt;
  
  
  Prize Categories
&lt;/h2&gt;

&lt;p&gt;This project is submitted to the Hacktoberfest Open-Source AI Challenge Week 2. The relevant themes are Python tooling, practical AI integration, and open-source developer tools.&lt;/p&gt;

&lt;h2&gt;
  
  
  Closing Thoughts
&lt;/h2&gt;

&lt;p&gt;The central lesson from building LocalBiz Scout is that useful automation needs boundaries.&lt;/p&gt;

&lt;p&gt;Finding a likely correction is one problem. Deciding whether the system is allowed to apply it is another. By separating analysis, human review, and remediation, I wanted to make data cleaning more auditable and less likely to silently damage the original dataset.&lt;/p&gt;

&lt;p&gt;The implementation is complete and available for review on GitHub. Feedback on the correction workflow, duplicate matching, and safe handling of CSV data is welcome.&lt;/p&gt;

</description>
      <category>devchallenge</category>
      <category>hf26challenge</category>
    </item>
    <item>
      <title>MicroWild: Find the Wild in the Places You Already Are</title>
      <dc:creator>Ayush Shandilya</dc:creator>
      <pubDate>Mon, 12 Oct 2026 02:41:19 +0000</pubDate>
      <link>https://dev.to/ayush_shandilya_dev/microwild-find-the-wild-in-the-places-you-already-are-2eb8</link>
      <guid>https://dev.to/ayush_shandilya_dev/microwild-find-the-wild-in-the-places-you-already-are-2eb8</guid>
      <description>&lt;p&gt;&lt;em&gt;This is a submission for the &lt;a href="https://dev.to/challenges/hacktoberfest-week1-2026-10-05"&gt;Hacktoberfest Open-Source AI Challenge Week 1: Touch Grass&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;

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

&lt;p&gt;&lt;strong&gt;MicroWild — Find the wild in the places you already are.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Nature doesn't have to mean a national park, a hiking trail, or a weekend trip. Sometimes it's a plant growing through a pavement crack, lichen on a wall, a repeating pattern in balconies, or a small sign that an animal passed through.&lt;/p&gt;

&lt;p&gt;MicroWild turns these overlooked details into short, personalized observation quests. You choose your surroundings, available time, energy level, focus, and whether you're exploring alone or with someone. The app gives you three concrete steps to try outdoors, then encourages you to put your phone away and experience the world directly.&lt;/p&gt;

&lt;p&gt;The idea is simple: &lt;strong&gt;use AI to help someone leave the screen, not stay on it.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;MicroWild is designed for people in ordinary urban environments, including those who don't have easy access to large parks or nature trails. It doesn't require GPS, a camera, photo uploads, or an account.&lt;/p&gt;

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

&lt;p&gt;&lt;strong&gt;Source code:&lt;/strong&gt; &lt;a href="https://github.com/ayushshandilya-dev/Microwild" rel="noopener noreferrer"&gt;MicroWild on GitHub&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Live demo:&lt;/strong&gt; No hosted demo is currently available. MicroWild runs locally using Ollama and Gemma 3 1B.&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%2Fizvcpnza2sao24dlcezc.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%2Fizvcpnza2sao24dlcezc.png" alt=" " width="800" height="471"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;To run it, you need Node.js 22 or later and Ollama with &lt;code&gt;gemma3:1b&lt;/code&gt; available. From the project directory:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;npm &lt;span class="nb"&gt;install
&lt;/span&gt;npm &lt;span class="nb"&gt;test
&lt;/span&gt;npm run dev &lt;span class="nt"&gt;--&lt;/span&gt; &lt;span class="nt"&gt;-p&lt;/span&gt; 3100
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The application has been tested locally. Automated checks pass, but comprehensive browser and mobile-device testing remains unverified.&lt;/p&gt;

&lt;h2&gt;
  
  
  Code
&lt;/h2&gt;

&lt;p&gt;The core implementation is organized around a small, testable quest pipeline:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;app/page.tsx&lt;/code&gt; — user flow, preferences, quest display, outdoor mode, and reflection.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;app/api/quest/route.ts&lt;/code&gt; — quest-generation endpoint, input validation, and timeout handling.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;lib/quest.ts&lt;/code&gt; — prompt construction, model-output normalization, strict quest validation, saved-quest parsing, and curated fallbacks.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;tests/quest.test.ts&lt;/code&gt; — automated tests for quest behavior, validation, and fallback handling.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The key design choice is that generated output is not trusted just because a model returned it. Quests pass through validation, and the app can select a curated quest when inference fails or the output is unusable.&lt;/p&gt;

&lt;h2&gt;
  
  
  How I Built It
&lt;/h2&gt;

&lt;p&gt;MicroWild uses &lt;strong&gt;Gemma 3 1B locally through Ollama&lt;/strong&gt;. The app is built with Next.js and TypeScript, with the quest-generation logic separated into testable functions.&lt;/p&gt;

&lt;p&gt;The pipeline is:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;The user selects preferences such as environment, duration, energy, focus, and company.&lt;/li&gt;
&lt;li&gt;The server builds a prompt for the local model.&lt;/li&gt;
&lt;li&gt;The response is normalized and checked against the quest schema and content constraints.&lt;/li&gt;
&lt;li&gt;If generation fails or the result is invalid, a curated quest is returned instead.&lt;/li&gt;
&lt;li&gt;The user takes the quest outdoors and can return to reflect on the experience.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;The model is deliberately not treated as an infallible source of instructions. The validator is the enforcement layer; the prompt alone is not the safety guarantee.&lt;/p&gt;

&lt;h3&gt;
  
  
  Why include curated fallbacks?
&lt;/h3&gt;

&lt;p&gt;Local inference is not consistently fast on every machine. During testing on a 2015 MacBook Air, a valid model response took approximately 91.7 seconds, while earlier successful generations took approximately 26–33 seconds. The server timeout was raised from 90 to 150 seconds after the slower valid response demonstrated the need.&lt;/p&gt;

&lt;p&gt;That improves the chance of allowing slower generations to finish, but it does not make inference instant or guarantee that every request will succeed. When generation is unavailable, MicroWild can return a clearly labeled curated quest instead of pretending the model succeeded.&lt;/p&gt;

&lt;p&gt;The latest automated validation reported &lt;strong&gt;25 passing tests&lt;/strong&gt;, a clean TypeScript check, and a successful production build.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why Does Open Innovation Matter?
&lt;/h2&gt;

&lt;p&gt;MicroWild depends on being able to inspect, run, and adapt the model locally rather than treating intelligence as an opaque remote API.&lt;/p&gt;

&lt;p&gt;Using an open-weight model through local inference makes experimentation possible without requiring a hosted model API key for quest generation. It also keeps the core experience local-first: the app doesn't need to send a user's location, photographs, or account profile to a remote AI service to produce a quest.&lt;/p&gt;

&lt;p&gt;Open innovation also means being able to inspect the whole pipeline—from prompt construction to validation and fallback behavior—and change the parts that fail in practice.&lt;/p&gt;

&lt;p&gt;There are trade-offs. Local inference depends on available hardware and can be slow, as the latency measurements showed. MicroWild handles that limitation with a curated fallback rather than claiming the model is always available.&lt;/p&gt;

&lt;h2&gt;
  
  
  My Agent Session
&lt;/h2&gt;

&lt;p&gt;I used an AI coding agent during development to help implement and test the application. I don't have a published DevRelay session to embed in this submission.&lt;/p&gt;

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

&lt;p&gt;The first real outdoor test was useful precisely because it wasn't a perfect success story. I completed a curated quest and found the steps understandable, but the experience made the walk only a little more interesting. The wording was the main friction point.&lt;/p&gt;

&lt;p&gt;That feedback led to a small change in one quest: replacing the vague instruction to order marks “by feel” with visible clues such as wear depth, underlying paint layers, and softened edges. The updated wording passes the automated tests, but I have not yet verified that revision in a second outdoor test.&lt;/p&gt;

&lt;p&gt;That distinction matters to me: a passing test can establish that software behaves as expected under tested conditions. It cannot establish that an experience is genuinely engaging for a person outside.&lt;/p&gt;

&lt;p&gt;MicroWild is an experiment in using AI as a bridge to the physical world. The goal isn't to generate more content for someone to consume on a screen. It's to give them one good reason to look up.&lt;/p&gt;

</description>
      <category>devchallenge</category>
      <category>hf26challenge</category>
    </item>
    <item>
      <title>RepoMedic: An AI Field Engineer That Proves Its Fixes</title>
      <dc:creator>Ayush Shandilya</dc:creator>
      <pubDate>Sun, 04 Oct 2026 15:43:42 +0000</pubDate>
      <link>https://dev.to/ayush_shandilya_dev/repomedic-an-ai-field-engineer-that-proves-its-fixes-83</link>
      <guid>https://dev.to/ayush_shandilya_dev/repomedic-an-ai-field-engineer-that-proves-its-fixes-83</guid>
      <description>&lt;h2&gt;
  
  
  What I Built
&lt;/h2&gt;

&lt;p&gt;What if an AI coding assistant didn't stop at &lt;strong&gt;“I think I found the bug”&lt;/strong&gt;?&lt;/p&gt;

&lt;p&gt;What if it had to investigate an unfamiliar repository, build an evidence-backed explanation, propose a change, and then &lt;strong&gt;prove that the repository actually works after the change&lt;/strong&gt;?&lt;/p&gt;

&lt;p&gt;I built &lt;strong&gt;RepoMedic&lt;/strong&gt; for a friend who was trying to contribute to an unfamiliar open-source repository and was stuck on a failing test without understanding the codebase well enough to confidently debug it.&lt;/p&gt;

&lt;p&gt;RepoMedic is an &lt;strong&gt;evidence-driven AI field engineer for unfamiliar open-source repositories&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Its workflow is:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;BUG REPORT
    ↓
REPOSITORY ANALYSIS
    ↓
FAILURE REPRODUCTION
    ↓
INVESTIGATION
    ↓
HYPOTHESES + EVIDENCE
    ↓
ROOT CAUSE
    ↓
PATCH
    ↓
REAL TEST EXECUTION
    ↓
VERIFICATION
    ↓
READY TO CONTRIBUTE
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The core principle is:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;AI proposes. Evidence decides.&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;The model can investigate, reason, and propose changes. It cannot declare its own fix successful.&lt;/p&gt;

&lt;p&gt;Deterministic tooling reads the source, validates and applies changes, executes the tests, and uses the actual process exit codes to determine whether the fix worked.&lt;/p&gt;

&lt;h3&gt;
  
  
  A real debugging scenario
&lt;/h3&gt;

&lt;p&gt;For the challenge demo, I used the open-source Python project &lt;code&gt;neithere/argh&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;Under Python 3.14, this test:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;python &lt;span class="nt"&gt;-m&lt;/span&gt; pytest tests/test_integration.py::test_prog &lt;span class="nt"&gt;-v&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;fails.&lt;/p&gt;

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

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;pytest tests/test_integration.py::test_prog &lt;span class="nt"&gt;-v&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;passes.&lt;/p&gt;

&lt;p&gt;That difference is the important clue.&lt;/p&gt;

&lt;p&gt;The repository isn't simply “broken.” The way the test suite is invoked changes the observed behavior.&lt;/p&gt;

&lt;p&gt;The failing output contained:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;usage: python -m pytest [-h] {cmd} ...
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;while the test expected:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;usage: __main__.py [-h] {cmd} ...
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;RepoMedic investigated the relevant source and test files, generated competing hypotheses, gathered evidence, and traced the behavior to Python 3.14's handling of the default &lt;code&gt;prog&lt;/code&gt; value in &lt;code&gt;argparse&lt;/code&gt; during &lt;code&gt;python -m&lt;/code&gt; invocation.&lt;/p&gt;

&lt;p&gt;The test was independently reconstructing its expected program name from &lt;code&gt;sys.argv[0]&lt;/code&gt;, making that expectation brittle.&lt;/p&gt;

&lt;p&gt;The useful result wasn't simply:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;“Change this line.”&lt;/p&gt;
&lt;/blockquote&gt;

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

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Why does this happen, which source establishes that explanation, and what evidence distinguishes it from the alternatives?&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;That's the kind of reasoning I wanted RepoMedic to expose.&lt;/p&gt;

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

&lt;p&gt;&lt;strong&gt;Demo Video:&lt;/strong&gt; &lt;a href="https://drive.google.com/file/d/1djNOexyGXihN_YkK6-_dwoQo-N6qTXpU/view?usp=sharing" rel="noopener noreferrer"&gt;https://drive.google.com/file/d/1djNOexyGXihN_YkK6-_dwoQo-N6qTXpU/view?usp=sharing&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The demo walks through the complete workflow:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Bug Report
    ↓
Repository Analysis
    ↓
Failure Reproduction
    ↓
AI Investigation
    ↓
Root Cause
    ↓
Patch
    ↓
Verification
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;For the verified run:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Targeted test        ✓ PASS
Alternate invocation ✓ PASS
Full test suite      ✓ 170 passed
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The verification shown in the demo is independently re-executed against the previously verified patched workspace and makes &lt;strong&gt;zero model calls&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;The result comes from actual pytest execution and process exit codes.&lt;/p&gt;

&lt;p&gt;Not from the LLM.&lt;/p&gt;

&lt;p&gt;Not from a &lt;code&gt;"success": true&lt;/code&gt; response.&lt;/p&gt;

&lt;p&gt;Not from a generated screenshot.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The tests decide.&lt;/strong&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Code
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;GitHub Repository:&lt;/strong&gt;&lt;br&gt;
&lt;a href="https://github.com/ayushshandilya-dev/RepoMedic" rel="noopener noreferrer"&gt;https://github.com/ayushshandilya-dev/RepoMedic&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The repository contains the frontend, backend, investigation system, deterministic repository tools, patch validation and application pipeline, and verification system.&lt;/p&gt;

&lt;p&gt;The project is intentionally built as a separate tool rather than modifying the repository being investigated. The target repository is cloned into an isolated workspace, changes are applied there, and verification is performed against that workspace.&lt;/p&gt;
&lt;h2&gt;
  
  
  How I Built It
&lt;/h2&gt;

&lt;p&gt;RepoMedic is built around &lt;strong&gt;Gemma 3 running locally through Ollama&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Gemma is used for the investigation layer:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;interpreting the bug report&lt;/li&gt;
&lt;li&gt;examining repository evidence&lt;/li&gt;
&lt;li&gt;generating competing hypotheses&lt;/li&gt;
&lt;li&gt;evaluating explanations&lt;/li&gt;
&lt;li&gt;contributing to root-cause reasoning&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The architecture deliberately separates AI reasoning from deterministic execution:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;OBSERVATION
     ↓
DETERMINISTIC EVIDENCE
     ↓
AI REASONING
     ↓
DETERMINISTIC PATCHING
     ↓
DETERMINISTIC VERIFICATION
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The model never receives unrestricted shell access.&lt;/p&gt;

&lt;p&gt;Instead, it works through structured repository tools and evidence.&lt;/p&gt;

&lt;p&gt;The stack is deliberately straightforward:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Frontend&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Next.js&lt;/li&gt;
&lt;li&gt;React&lt;/li&gt;
&lt;li&gt;Tailwind CSS&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Backend&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Python&lt;/li&gt;
&lt;li&gt;FastAPI&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;AI&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Gemma 3&lt;/li&gt;
&lt;li&gt;Ollama&lt;/li&gt;
&lt;li&gt;provider abstraction&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Repository intelligence&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;tree-sitter&lt;/li&gt;
&lt;li&gt;structured source analysis&lt;/li&gt;
&lt;li&gt;deterministic repository tools&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Execution&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Git&lt;/li&gt;
&lt;li&gt;pytest&lt;/li&gt;
&lt;li&gt;isolated workspaces&lt;/li&gt;
&lt;li&gt;deterministic patch application&lt;/li&gt;
&lt;li&gt;real test verification&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;There is no vector database, no multi-agent framework, and no unnecessary orchestration layer.&lt;/p&gt;

&lt;p&gt;The goal was to build the actual engineering workflow rather than assemble a collection of AI buzzwords.&lt;/p&gt;

&lt;p&gt;One of the most important design decisions was what happens when the AI is wrong.&lt;/p&gt;

&lt;p&gt;An AI model can produce an invalid or ambiguous patch proposal. RepoMedic rejects it rather than silently converting it into a successful fix.&lt;/p&gt;

&lt;p&gt;For example, one model-generated proposal produced a source span whose ending line did not exist in the file:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;end_line 80 is outside file containing 79 lines
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;RepoMedic rejected the proposal.&lt;/p&gt;

&lt;p&gt;That's not a failure of the safety architecture.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;That's the safety architecture working.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;During development, the small local Gemma 3 1B model was useful for investigation and root-cause reasoning, but structured patch generation was not consistently reliable on my older hardware.&lt;/p&gt;

&lt;p&gt;I kept that limitation visible rather than hiding it.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why Does Open Innovation Matter?
&lt;/h2&gt;

&lt;p&gt;Open innovation matters here because RepoMedic explores what happens when the AI reasoning layer can be &lt;strong&gt;open, local, and replaceable&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Using Gemma through Ollama means repository code does not inherently have to be sent to a closed third-party inference API.&lt;/p&gt;

&lt;p&gt;Local inference provides:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;greater control over source-code privacy&lt;/li&gt;
&lt;li&gt;offline capability&lt;/li&gt;
&lt;li&gt;lower marginal inference cost&lt;/li&gt;
&lt;li&gt;model flexibility&lt;/li&gt;
&lt;li&gt;inspectable infrastructure&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The provider boundary also means that the rest of RepoMedic does not need to depend on a single model vendor.&lt;/p&gt;

&lt;p&gt;The deterministic parts of the system — source inspection, patch validation, patch application, and test verification — remain independent of the model.&lt;/p&gt;

&lt;p&gt;That creates a clear trust boundary:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;The AI can reason about the repository, but the repository itself determines whether the proposed fix works.&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;This is particularly relevant to open source because developers may be working with sensitive or private code where sending an entire repository to a hosted AI API isn't desirable.&lt;/p&gt;

&lt;p&gt;Open models make it possible to experiment with AI assistance that can run closer to the developer's own environment while remaining replaceable and inspectable.&lt;/p&gt;

&lt;h2&gt;
  
  
  Prize Categories
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Best Use of Gemma
&lt;/h3&gt;

&lt;p&gt;RepoMedic uses &lt;strong&gt;Gemma 3 through Ollama&lt;/strong&gt; as a local investigation provider.&lt;/p&gt;

&lt;p&gt;Gemma analyzes repository evidence, generates hypotheses, evaluates competing explanations, and contributes to root-cause reasoning.&lt;/p&gt;

&lt;p&gt;The final patch validation and verification are handled independently by deterministic tooling and real test execution.&lt;/p&gt;

&lt;p&gt;I am intentionally not claiming that Gemma generated the final verified patch. The model's role is the investigation and reasoning layer; the system surrounding it establishes whether the resulting change is valid and whether the repository actually passes.&lt;/p&gt;

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

&lt;p&gt;If I continued RepoMedic beyond the challenge, I'd focus on:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;stronger sandboxing for arbitrary repositories&lt;/li&gt;
&lt;li&gt;persistent workspace management&lt;/li&gt;
&lt;li&gt;more reliable structured patch generation&lt;/li&gt;
&lt;li&gt;model-assisted code navigation&lt;/li&gt;
&lt;li&gt;repository-wide dependency reasoning&lt;/li&gt;
&lt;li&gt;incremental investigation instead of repeated scans&lt;/li&gt;
&lt;li&gt;richer contribution guidance&lt;/li&gt;
&lt;li&gt;stronger provenance tracking for every piece of evidence&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The objective would remain the same:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Make AI-assisted software engineering more inspectable and more trustworthy.&lt;/strong&gt;&lt;/p&gt;




&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;AI proposes. Evidence decides.&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;

</description>
      <category>hf26challenge</category>
      <category>devchallenge</category>
      <category>weekendchallenge</category>
    </item>
    <item>
      <title>Hello Everyone</title>
      <dc:creator>Ayush Shandilya</dc:creator>
      <pubDate>Thu, 01 Oct 2026 09:25:21 +0000</pubDate>
      <link>https://dev.to/ayush_shandilya_dev/hello-everyone-2bia</link>
      <guid>https://dev.to/ayush_shandilya_dev/hello-everyone-2bia</guid>
      <description>&lt;p&gt;Hey! I'm Ayush Shandilya, a software engineer working in data engineering and AI/ML. I'm really interested in understanding how things work under the hood from data pipelines and distributed systems to LLMs, RAG, and model infrastructure.&lt;/p&gt;

&lt;p&gt;I like building things, breaking them, figuring out why they broke, and then going way too deep into the rabbit hole trying to understand what's actually happening behind the scenes.&lt;/p&gt;

&lt;p&gt;I'm still learning, experimenting, and occasionally overengineering things that probably didn't need to be overengineered but that's half the fun, right?&lt;/p&gt;

</description>
      <category>ai</category>
      <category>dataengineering</category>
      <category>machinelearning</category>
      <category>softwareengineering</category>
    </item>
  </channel>
</rss>
