<?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: Sabeena Viklar</title>
    <description>The latest articles on DEV Community by Sabeena Viklar (@sabeenaviklar).</description>
    <link>https://dev.to/sabeenaviklar</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%2F3385749%2Fb949bbac-39d6-4cb4-839a-b61c93106c75.png</url>
      <title>DEV Community: Sabeena Viklar</title>
      <link>https://dev.to/sabeenaviklar</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/sabeenaviklar"/>
    <language>en</language>
    <item>
      <title>Hacktoberfest Open-Source AI Challenge Week 2: Side Hustle</title>
      <dc:creator>Sabeena Viklar</dc:creator>
      <pubDate>Sat, 17 Oct 2026 11:39:48 +0000</pubDate>
      <link>https://dev.to/sabeenaviklar/hacktoberfest-open-source-ai-challenge-week-2-side-hustle-772</link>
      <guid>https://dev.to/sabeenaviklar/hacktoberfest-open-source-ai-challenge-week-2-side-hustle-772</guid>
      <description>&lt;p&gt;&lt;em&gt;This is a submission for the &lt;a href="https://dev.to/challenges/hacktoberfest-week2"&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;&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%2Fm51yoxplx0oic4ksay4n.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%2Fm51yoxplx0oic4ksay4n.png" alt=" " width="800" height="430"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Maintainers usually find out a dependency is dead when something breaks. DepExit finds the risky ones up front, asks Gemma 4 for a replacement plan for each, and then refuses to trust the plan until it has applied it to an isolated copy, reinstalled everything and run the tests. Each dependency gets a &lt;strong&gt;Dependency Exit Capsule&lt;/strong&gt;: a JSON record, a readable Markdown page and a patch. Every fact in it is tagged &lt;code&gt;OBSERVED&lt;/code&gt;, &lt;code&gt;MEASURED&lt;/code&gt;, &lt;code&gt;AI-SUGGESTED&lt;/code&gt; or &lt;code&gt;AI · VERIFIED&lt;/code&gt;, so you can see which claims came from files, which came from running code, and which are only the model's suggestion.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Who would pay:&lt;/strong&gt; freelancers and small agencies who take on neglected Python codebases, and small teams who inherited one. Today that audit means a day or two of reading changelogs and guessing. DepExit turns it into a 13-minute run that produces a report you can hand to a client and a patch you can review. A wrong migration in a healthy project is worse than none, so the part worth paying for is that nothing is claimed as fixed until it has been run.&lt;/p&gt;

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

&lt;p&gt;Video link-&lt;br&gt;
&lt;/p&gt;
&lt;div class="crayons-card c-embed text-styles text-styles--secondary"&gt;
    &lt;div class="c-embed__content"&gt;
      &lt;div class="c-embed__body"&gt;
        &lt;h2 class="fs-xl lh-tight"&gt;
          &lt;a href="https://drive.google.com/file/d/1dxiwmlYMUE7Q9yAbsCpc5j6bZZXWIubB/view" rel="noopener noreferrer" class="c-link"&gt;
            DepExit.mp4 - Google Drive
          &lt;/a&gt;
        &lt;/h2&gt;
        &lt;div class="color-secondary fs-s flex items-center"&gt;
            &lt;img alt="favicon" class="c-embed__favicon m-0 mr-2 radius-0" src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fssl.gstatic.com%2Fdocs%2Fdoclist%2Fimages%2Fdrive_favicon_2026_32dp.png" width="32" height="32"&gt;
          drive.google.com
        &lt;/div&gt;
      &lt;/div&gt;
    &lt;/div&gt;
&lt;/div&gt;


&lt;p&gt;A complete run on the organizer's LinkWatch repo is committed in &lt;code&gt;examples/linkwatch-run/&lt;/code&gt;. Open &lt;code&gt;report.html&lt;/code&gt; after cloning, or read &lt;code&gt;SUMMARY.md&lt;/code&gt; on GitHub. It was produced on 15 October 2026 with &lt;code&gt;gemma-4-31b-it&lt;/code&gt; through the Gemini API and took 13 minutes.&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Measure&lt;/th&gt;
&lt;th&gt;Result&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Dependencies analysed&lt;/td&gt;
&lt;td&gt;16&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;At risk&lt;/td&gt;
&lt;td&gt;10&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Gemma 4 plans verified by execution&lt;/td&gt;
&lt;td&gt;10 of 10&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Tests before&lt;/td&gt;
&lt;td&gt;9 of 10 passing, 1 warning&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;All verified plans applied together&lt;/td&gt;
&lt;td&gt;23 of 23 passing (10 original + 13 written by Gemma), 0 warnings&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

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


&lt;div class="ltag-github-readme-tag"&gt;
  &lt;div class="readme-overview"&gt;
    &lt;h2&gt;
      &lt;img src="https://assets.dev.to/assets/github-logo-5a155e1f9a670af7944dd5e12375bc76ed542ea80224905ecaf878b9157cdefc.svg" alt="GitHub logo"&gt;
      &lt;a href="https://github.com/sabeenaviklar" rel="noopener noreferrer"&gt;
        sabeenaviklar
      &lt;/a&gt; / &lt;a href="https://github.com/sabeenaviklar/H26_404_TeamNotFound_DepExit" rel="noopener noreferrer"&gt;
        H26_404_TeamNotFound_DepExit
      &lt;/a&gt;
    &lt;/h2&gt;
    &lt;h3&gt;
      
    &lt;/h3&gt;
  &lt;/div&gt;
  &lt;div class="ltag-github-body"&gt;
    
&lt;div id="readme" class="md"&gt;&lt;div class="markdown-heading"&gt;
&lt;h1 class="heading-element"&gt;DepExit&lt;/h1&gt;
&lt;/div&gt;
&lt;p&gt;&lt;strong&gt;Evidence-first dependency exit planning, with Gemma 4 proposing and execution deciding.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Hacktoberfest Hack Day Mumbai × ISTE KJSSE 2026 · Track 1: Gemma 4 · Dependency Resilience · Team 404_TeamNotFound&lt;/p&gt;
&lt;p&gt;DepExit points at a Python repository, finds the dependencies that put it at risk, asks Gemma 4 how to get out of each one, and then refuses to believe the answer until it has applied the change to an isolated copy, reinstalled everything, and run the tests. What comes out is a &lt;strong&gt;Dependency Exit Capsule&lt;/strong&gt; for every dependency: a JSON record, a readable Markdown page and a patch, in which every single fact is tagged with where it came from.&lt;/p&gt;
&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Tag&lt;/th&gt;
&lt;th&gt;Meaning&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;OBSERVED&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Read from the repository's files or from PyPI and GitHub metadata. Nothing was executed.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;MEASURED&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Produced by running something: an install, an import, the test suite.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;AI-SUGGESTED&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Proposed by Gemma 4. Not trusted on its own.&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;…&lt;/div&gt;
  &lt;/div&gt;
  &lt;div class="gh-btn-container"&gt;&lt;a class="gh-btn" href="https://github.com/sabeenaviklar/H26_404_TeamNotFound_DepExit" rel="noopener noreferrer"&gt;View on GitHub&lt;/a&gt;&lt;/div&gt;
&lt;/div&gt;


&lt;p&gt;DepExit uses only the Python standard library, so there is nothing to install for the tool itself:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="sb"&gt;``&lt;/span&gt;bash
&lt;span class="nb"&gt;export &lt;/span&gt;&lt;span class="nv"&gt;GEMINI_API_KEY&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;"your-key"&lt;/span&gt;
python &lt;span class="nt"&gt;-m&lt;/span&gt; depexit doctor
python &lt;span class="nt"&gt;-m&lt;/span&gt; depexit analyze https://github.com/rishrek/LinkWatch
&lt;span class="sb"&gt;``&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



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

&lt;p&gt;The rule behind the design is that &lt;strong&gt;Gemma proposes and execution decides&lt;/strong&gt;.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Deterministic code does the seeing.&lt;/strong&gt; It parses &lt;code&gt;requirements*.txt&lt;/code&gt; and &lt;code&gt;pyproject.toml&lt;/code&gt;, walks every file with &lt;code&gt;ast&lt;/code&gt; to find imports, private-API use and monkeypatches, installs the project in a clean virtual environment, imports each package on its own, runs pytest, and pulls release history from PyPI and GitHub.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Gemma 4 does the thinking.&lt;/strong&gt; It receives only the evidence DepExit collected and the exact files involved, and returns a replacement decision, code edits, requirement changes and small tests that capture the behaviour the repo relies on. I used &lt;code&gt;gemma-4-31b-it&lt;/code&gt; through the Gemini API, with an automatic fallback to &lt;code&gt;gemma-4-26b-a4b-it&lt;/code&gt;. Local inference through Ollama is supported too.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Deterministic code judges.&lt;/strong&gt; It applies the plan to a fresh copy and runs the original tests plus Gemma's own tests against both the original dependency and the replacement. A plan counts as &lt;code&gt;verified&lt;/code&gt; only if every risk indicator is gone, nothing regressed, and the old package is no longer referenced. If it fails, the concrete failure output goes back to Gemma for one corrected attempt.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Gemma never decides risk, never grades its own work, and is never the source of an &lt;code&gt;OBSERVED&lt;/code&gt; or &lt;code&gt;MEASURED&lt;/code&gt; field. Packages it proposes are checked against PyPI, and every prompt and raw response is saved next to the capsule.&lt;/p&gt;

&lt;p&gt;An earlier run marked &lt;code&gt;requests&lt;/code&gt; as verified even though Gemma's reply had been truncated and nothing was changed. I found it by reading our own capsule, then fixed the parser and added plan validation and per-indicator re-checks. The committed run is the fixed one. I also ran DepExit with no AI on an unrelated project, &lt;code&gt;jazzband/prettytable&lt;/code&gt; (337 tests), which exposed four layout bugs that I fixed the same day.&lt;/p&gt;

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

&lt;p&gt;A tool that audits other people's code has to be trustworthy, and open models make that checkable.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Auditable.&lt;/strong&gt; Gemma 4's weights are Apache 2.0, and DepExit saves every prompt and raw response. A capsule is a replayable record rather than a black-box answer, and &lt;code&gt;depexit replay&lt;/code&gt; re-verifies a saved plan later without calling any model.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Private when it needs to be.&lt;/strong&gt; The people who would pay for this often can't send client code to a closed API. DepExit can run against a local Gemma 4 through Ollama, so the code stays on the machine. [Keep this only if you complete the Ollama run. Otherwise write "can run locally" and name the tradeoff.]&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;No lock-in.&lt;/strong&gt; There are no paid services, and switching the model is a flag (&lt;code&gt;--ai google&lt;/code&gt; or &lt;code&gt;--ai ollama&lt;/code&gt;), not a rewrite.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  My First User
&lt;/h2&gt;

&lt;p&gt;My first user tried DepExit on a Python project with outdated dependencies and found it useful for identifying at-risk packages and understanding potential replacements. They particularly liked that DepExit didn't just suggest migrations using AI but actually tested them and provided evidence of whether they worked.&lt;/p&gt;

&lt;p&gt;Their feedback was that the detailed reports made dependency issues easier to understand, although a simpler summary of the recommended changes would make the tool even more convenient. They would consider using DepExit for maintaining legacy projects and suggested adding clearer migration priorities to help developers decide what to fix first.&lt;/p&gt;

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

&lt;p&gt;Gemma, Blackboard.io, Best Use of GitHub Copilot&lt;/p&gt;

</description>
      <category>devchallenge</category>
      <category>hf26challenge</category>
      <category>ai</category>
      <category>learning</category>
    </item>
  </channel>
</rss>
