<?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: Jagan </title>
    <description>The latest articles on DEV Community by Jagan  (@note_07).</description>
    <link>https://dev.to/note_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%2F4191888%2F30b665ab-e45d-4fd3-ab4b-63ef2fc8b90b.jpeg</url>
      <title>DEV Community: Jagan </title>
      <link>https://dev.to/note_07</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/note_07"/>
    <language>en</language>
    <item>
      <title>FactTrail — Evidence-First Tracking for Deadlines &amp; Requirements</title>
      <dc:creator>Jagan </dc:creator>
      <pubDate>Fri, 23 Oct 2026 13:21:53 +0000</pubDate>
      <link>https://dev.to/note_07/facttrail-evidence-first-tracking-for-deadlines-requirements-mbn</link>
      <guid>https://dev.to/note_07/facttrail-evidence-first-tracking-for-deadlines-requirements-mbn</guid>
      <description>&lt;h1&gt;
  
  
  FactTrail — Evidence-First Tracking for Deadlines &amp;amp; Requirements
&lt;/h1&gt;

&lt;p&gt;&lt;strong&gt;Tagline:&lt;/strong&gt; Know what changed. Make your next move with confidence.&lt;/p&gt;

&lt;h2&gt;
  
  
  Project Description
&lt;/h2&gt;

&lt;p&gt;FactTrail is a local-first AI prototype designed to help students and opportunity seekers track important information published on public program webpages, including application deadlines, eligibility requirements, fees, and other details.&lt;/p&gt;

&lt;p&gt;Instead of repeatedly checking pages manually, users can save public sources, extract candidate facts using a local AI model, and compare webpage content across manual rechecks. FactTrail records detected content changes and provides previous and current text for review.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Problem
&lt;/h2&gt;

&lt;p&gt;Important deadlines, eligibility rules, and application requirements can be difficult to keep track of across multiple websites. Manually revisiting pages takes time, and changes can be overlooked.&lt;/p&gt;

&lt;h2&gt;
  
  
  Our Solution
&lt;/h2&gt;

&lt;p&gt;FactTrail combines local AI extraction, a SQLite database, and page-content comparison into one dashboard. It helps users organize sources, review extracted information, and identify when saved webpage content changes.&lt;/p&gt;

&lt;h2&gt;
  
  
  Key Features
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Public source collection:&lt;/strong&gt; Add a webpage URL and attempt to fetch its content.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Local AI extraction:&lt;/strong&gt; Use Ollama with the &lt;code&gt;llama3.2:1b&lt;/code&gt; model to extract candidate deadlines, eligibility details, and fees.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Evidence for review:&lt;/strong&gt; Present supporting text and extraction statuses so users can review the extracted facts.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Local storage:&lt;/strong&gt; Save source records and page snapshots in SQLite.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Change detection:&lt;/strong&gt; Compare normalized webpage content using SHA-256 hashing.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Change history:&lt;/strong&gt; Display previously saved and newly fetched text when a content change is detected.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Manual rechecking:&lt;/strong&gt; Recheck an individual saved source or batch-recheck saved sources.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Technology Stack
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Next.js and React&lt;/li&gt;
&lt;li&gt;TypeScript&lt;/li&gt;
&lt;li&gt;Tailwind CSS&lt;/li&gt;
&lt;li&gt;Ollama — local AI inference&lt;/li&gt;
&lt;li&gt;SQLite — local data persistence&lt;/li&gt;
&lt;li&gt;SHA-256 — webpage-content comparison&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  What Works Today
&lt;/h2&gt;

&lt;p&gt;The dashboard, source-fetching API, local extraction API, SQLite persistence, snapshot recording, change-history API, individual rechecks, and batch recheck endpoint are implemented.&lt;/p&gt;

&lt;p&gt;The project passes ESLint, TypeScript checks, and the Next.js production build.&lt;/p&gt;

&lt;h2&gt;
  
  
  What Makes FactTrail Different
&lt;/h2&gt;

&lt;p&gt;FactTrail is designed to run its AI extraction locally rather than requiring a paid AI API. It focuses on keeping source information, candidate facts, and content-change evidence together so that users can inspect the evidence before making decisions.&lt;/p&gt;

&lt;h2&gt;
  
  
  Current Limitations and Future Work
&lt;/h2&gt;

&lt;p&gt;This is a working prototype, not a fully automated monitoring service. Rechecks are currently manual; scheduled background monitoring and automatic alerts are not implemented. A webpage-content change does not necessarily mean that a deadline or eligibility rule changed. Extracted facts and detected differences must be reviewed by a person.&lt;/p&gt;

&lt;p&gt;Planned improvements include scheduled rechecks, notifications, stronger fact-level change detection, and further security testing.&lt;/p&gt;

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

&lt;p&gt;GitHub repository: &lt;a href="https://github.com/jaganbaditya16-note/facttrail" rel="noopener noreferrer"&gt;https://github.com/jaganbaditya16-note/facttrail&lt;/a&gt;&lt;/p&gt;

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

&lt;p&gt;The current demo runs locally at &lt;code&gt;http://localhost:3000&lt;/code&gt; after setup. A publicly hosted live demo has not been deployed yet.&lt;/p&gt;

&lt;h2&gt;
  
  
  Cost
&lt;/h2&gt;

&lt;p&gt;Designed for a ₹0-cost local prototype using a locally hosted AI model, with internet access required to fetch public webpages.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;FactTrail — Less checking. More confidence in your next move.&lt;/strong&gt;&lt;/p&gt;

</description>
      <category>devchallenge</category>
      <category>hf26challenge</category>
    </item>
    <item>
      <title>A Score Is Not an Explanation: My Journey Building SwitchPath with FalkorDB</title>
      <dc:creator>Jagan </dc:creator>
      <pubDate>Sun, 18 Oct 2026 10:57:42 +0000</pubDate>
      <link>https://dev.to/note_07/a-score-is-not-an-explanation-my-journey-building-switchpath-with-falkordb-bal</link>
      <guid>https://dev.to/note_07/a-score-is-not-an-explanation-my-journey-building-switchpath-with-falkordb-bal</guid>
      <description>&lt;p&gt;&lt;em&gt;From a frustrating local setup to traceable codebase evidence: what I learned while building a graph-backed project audit prototype.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;I did not start this project as an expert.&lt;/p&gt;

&lt;p&gt;I started as a learner who wanted to build something real, understand how the pieces fit together, and see whether an idea could become a working application.&lt;/p&gt;

&lt;p&gt;I have tried to learn technical skills many times. Sometimes I worked hard without feeling that I was moving forward. I also have responsibilities beyond my laptop, and financial constraints make opportunities especially important to me. I cannot assume every opportunity will come around again, so when I found a chance to build with FalkorDB for Graph Hacks, I decided to give it a serious attempt.&lt;/p&gt;

&lt;p&gt;But this is not a story about motivation alone. It is about the project I chose to build, the technical problems I encountered, the decisions that shaped the implementation, and what I learned by trying to make the idea work.&lt;/p&gt;

&lt;p&gt;That project is &lt;strong&gt;SwitchPath&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Repository:&lt;/strong&gt; &lt;a href="https://github.com/jaganbaditya16-note/SwitchPath" rel="noopener noreferrer"&gt;github.com/jaganbaditya16-note/SwitchPath&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  The question that started SwitchPath
&lt;/h2&gt;

&lt;p&gt;Imagine a developer receives this request:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Display declared package dependencies with the manifest file where each package is declared.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;The developer needs to understand an existing codebase before making a decision. A keyword search might return several files, but a list of matching files does not explain everything.&lt;/p&gt;

&lt;p&gt;Which file actually declares the dependency? Which finding led to that result? Which source file supports the conclusion? And what remains unknown?&lt;/p&gt;

&lt;p&gt;A filename match is a useful lead, but it is not proof that a feature works.&lt;/p&gt;

&lt;p&gt;That distinction became the central problem behind SwitchPath: &lt;strong&gt;how can a project audit make its evidence and relationships easier to inspect instead of returning only a score or a flat list?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;I wanted to build a tool that could inspect a local project, identify potentially relevant files and dependencies, connect those records in a graph, and help a developer trace the results back to their sources.&lt;/p&gt;

&lt;p&gt;I kept the initial goal narrow. Rather than attempting to understand every programming language or automatically approve every feature request, I focused on a bounded static audit with explicit limitations.&lt;/p&gt;

&lt;h2&gt;
  
  
  First, the tools had to work together
&lt;/h2&gt;

&lt;p&gt;The first challenge was not a sophisticated graph algorithm. It was getting the development environment and application components to work together.&lt;/p&gt;

&lt;p&gt;SwitchPath uses a React and TypeScript frontend, a Python and FastAPI backend, and FalkorDB as its graph database. Docker Compose helps run the database locally.&lt;/p&gt;

&lt;p&gt;Each component had a specific role:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;React and TypeScript&lt;/strong&gt; provide the interface for submitting an audit and examining its results.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;FastAPI&lt;/strong&gt; receives the request, invokes the scanner, and exposes endpoints for reading audits and graph traces.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;The Python scanner&lt;/strong&gt; inspects eligible files, extracts supported dependency declarations, and ranks candidate evidence.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;FalkorDB&lt;/strong&gt; persists the audit records and the relationships between findings, evidence, files, and dependencies.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;On paper, the architecture looked straightforward. Making it work on my machine was a different experience.&lt;/p&gt;

&lt;p&gt;Docker was not always ready when I needed it. The database had to be running before the API could successfully use it. PowerShell commands occasionally behaved differently from what I expected, and editing or launching the right component at the right time required patience.&lt;/p&gt;

&lt;p&gt;These were ordinary development problems, but they were new challenges for me to work through. When a command failed, I had to stop treating the entire application as one mysterious system and start checking individual pieces.&lt;/p&gt;

&lt;p&gt;Was the database running? Could the API reach it? Was the correct environment active? Was the server responding at the expected address?&lt;/p&gt;

&lt;p&gt;Breaking the problem into smaller checks helped me make progress. It also taught me something practical: a complicated application becomes easier to debug when each layer has a clear responsibility and a way to verify that it works.&lt;/p&gt;

&lt;h2&gt;
  
  
  The scanner: finding leads without pretending to know everything
&lt;/h2&gt;

&lt;p&gt;Once the local services were connected, I focused on the audit itself.&lt;/p&gt;

&lt;p&gt;SwitchPath performs a bounded, read-only inventory of eligible project files. It does not execute the inspected project code or write into the scanned directory.&lt;/p&gt;

&lt;p&gt;The scanner records metadata including relative file paths, extensions, sizes, line counts, and SHA-256 fingerprints. It identifies supported dependency manifests, extracts declarations from formats such as &lt;code&gt;package.json&lt;/code&gt; and &lt;code&gt;requirements.txt&lt;/code&gt;, and searches for terms related to the feature request.&lt;/p&gt;

&lt;p&gt;It also applies explicit inventory limits: a maximum of 500 files, 200,000 bytes per file, and 3,000,000 bytes of scanned content in total.&lt;/p&gt;

&lt;p&gt;Why impose those limits?&lt;/p&gt;

&lt;p&gt;Because a prototype should have a defined scope. An uncontrolled recursive scan could become expensive or inspect files that are unnecessary for the current task. SwitchPath excludes configured directories and certain sensitive filename patterns and file extensions, although these safeguards do not guarantee that every sensitive file will be detected.&lt;/p&gt;

&lt;p&gt;The next problem was deciding which files to show first.&lt;/p&gt;

&lt;p&gt;A feature request could match many files. Displaying every match in an arbitrary order would not help much. I implemented a heuristic that ranks evidence using matched terms and their distinctiveness across the inventoried files. For dependency-focused requests, recognized manifest files also receive a ranking bonus.&lt;/p&gt;

&lt;p&gt;This is intentionally simple.&lt;/p&gt;

&lt;p&gt;The score is a relevance heuristic, not a probability that the requested feature works. The matching can miss useful evidence or highlight irrelevant code. That limitation helped shape the next decision: rather than presenting the score as the final answer, SwitchPath needed a way to show the relationships behind its results.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why I needed a graph
&lt;/h2&gt;

&lt;p&gt;A conventional list can store a filename and a result. But an audit involves several different kinds of records: requests, findings, files, evidence candidates, and dependencies.&lt;/p&gt;

&lt;p&gt;I wanted those records to be connected explicitly.&lt;/p&gt;

&lt;p&gt;FalkorDB became the persistence and traversal layer for that part of SwitchPath.&lt;/p&gt;

&lt;p&gt;The graph uses nodes such as:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Node&lt;/th&gt;
&lt;th&gt;What it represents&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;ProjectAudit&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;One project audit request&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;AuditFinding&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;A finding produced by the audit&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;ProjectFile&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;An inspected file and its metadata&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;AuditEvidence&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;A candidate evidence record&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;AuditDependency&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;A discovered declared dependency&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Relationships connect these nodes. For example, &lt;code&gt;HAS_FINDING&lt;/code&gt; links an audit to a finding, &lt;code&gt;CANDIDATE_EVIDENCE&lt;/code&gt; links a finding to candidate evidence, and &lt;code&gt;POINTS_TO&lt;/code&gt; links that evidence to its source file.&lt;/p&gt;

&lt;p&gt;Dependency records use a different path. &lt;code&gt;LISTS_DEPENDENCY&lt;/code&gt; connects a finding to a dependency, while &lt;code&gt;DECLARED_IN&lt;/code&gt; connects the dependency to its manifest file.&lt;/p&gt;

&lt;p&gt;Conceptually, the evidence path looks like this:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;ProjectAudit
    |
    | HAS_FINDING
    v
AuditFinding
    |
    | CANDIDATE_EVIDENCE
    v
AuditEvidence
    |
    | POINTS_TO
    v
ProjectFile
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The dependency path looks like this:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;ProjectAudit
    |
    | HAS_FINDING
    v
AuditFinding
    |
    | LISTS_DEPENDENCY
    v
AuditDependency
    |
    | DECLARED_IN
    v
ProjectFile (manifest)
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The important part is that these relationships are persisted in the database. They are not simply drawn in the interface to make the project look graph-based.&lt;/p&gt;

&lt;p&gt;The API queries FalkorDB to retrieve the connected records when a user asks for a trace. That is where the graph becomes useful to the application.&lt;/p&gt;

&lt;h2&gt;
  
  
  The moment the relationships became inspectable
&lt;/h2&gt;

&lt;p&gt;One of the most useful checks was verifying that the trace endpoint returned actual paths from the stored graph.&lt;/p&gt;

&lt;p&gt;For evidence, SwitchPath uses a Cypher traversal along these relationships:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight cypher"&gt;&lt;code&gt;&lt;span class="k"&gt;MATCH&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="ss"&gt;(&lt;/span&gt;&lt;span class="py"&gt;a:&lt;/span&gt;&lt;span class="n"&gt;ProjectAudit&lt;/span&gt; &lt;span class="ss"&gt;{&lt;/span&gt;&lt;span class="py"&gt;id:&lt;/span&gt; &lt;span class="n"&gt;$id&lt;/span&gt;&lt;span class="ss"&gt;})&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="ss"&gt;[&lt;/span&gt;&lt;span class="nc"&gt;:HAS_FINDING&lt;/span&gt;&lt;span class="ss"&gt;]&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="ss"&gt;(&lt;/span&gt;&lt;span class="py"&gt;f:&lt;/span&gt;&lt;span class="n"&gt;AuditFinding&lt;/span&gt;&lt;span class="ss"&gt;)&lt;/span&gt;
      &lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="ss"&gt;[&lt;/span&gt;&lt;span class="nc"&gt;:CANDIDATE_EVIDENCE&lt;/span&gt;&lt;span class="ss"&gt;]&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="ss"&gt;(&lt;/span&gt;&lt;span class="py"&gt;e:&lt;/span&gt;&lt;span class="n"&gt;AuditEvidence&lt;/span&gt;&lt;span class="ss"&gt;)&lt;/span&gt;
      &lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="ss"&gt;[&lt;/span&gt;&lt;span class="nc"&gt;:POINTS_TO&lt;/span&gt;&lt;span class="ss"&gt;]&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="ss"&gt;(&lt;/span&gt;&lt;span class="py"&gt;p:&lt;/span&gt;&lt;span class="n"&gt;ProjectFile&lt;/span&gt;&lt;span class="ss"&gt;)&lt;/span&gt;
&lt;span class="k"&gt;RETURN&lt;/span&gt; &lt;span class="n"&gt;f.finding_id&lt;/span&gt;&lt;span class="ss"&gt;,&lt;/span&gt; &lt;span class="n"&gt;f.status&lt;/span&gt;&lt;span class="ss"&gt;,&lt;/span&gt; &lt;span class="n"&gt;e.path&lt;/span&gt;&lt;span class="ss"&gt;,&lt;/span&gt;
       &lt;span class="n"&gt;e.matched_terms_json&lt;/span&gt;&lt;span class="ss"&gt;,&lt;/span&gt; &lt;span class="n"&gt;e.matching_lines_json&lt;/span&gt;&lt;span class="ss"&gt;,&lt;/span&gt; &lt;span class="n"&gt;p.sha256&lt;/span&gt;
&lt;span class="k"&gt;ORDER&lt;/span&gt; &lt;span class="k"&gt;BY&lt;/span&gt; &lt;span class="n"&gt;f.finding_id&lt;/span&gt;&lt;span class="ss"&gt;,&lt;/span&gt; &lt;span class="n"&gt;e.path&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The query connects the audit to a finding, the finding to candidate evidence, and the evidence to its source file.&lt;/p&gt;

&lt;p&gt;For dependencies, the trace follows a different chain:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight cypher"&gt;&lt;code&gt;&lt;span class="k"&gt;MATCH&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="ss"&gt;(&lt;/span&gt;&lt;span class="py"&gt;a:&lt;/span&gt;&lt;span class="n"&gt;ProjectAudit&lt;/span&gt; &lt;span class="ss"&gt;{&lt;/span&gt;&lt;span class="py"&gt;id:&lt;/span&gt; &lt;span class="n"&gt;$id&lt;/span&gt;&lt;span class="ss"&gt;})&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="ss"&gt;[&lt;/span&gt;&lt;span class="nc"&gt;:HAS_FINDING&lt;/span&gt;&lt;span class="ss"&gt;]&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="ss"&gt;(&lt;/span&gt;&lt;span class="py"&gt;f:&lt;/span&gt;&lt;span class="n"&gt;AuditFinding&lt;/span&gt;&lt;span class="ss"&gt;)&lt;/span&gt;
      &lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="ss"&gt;[&lt;/span&gt;&lt;span class="nc"&gt;:LISTS_DEPENDENCY&lt;/span&gt;&lt;span class="ss"&gt;]&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="ss"&gt;(&lt;/span&gt;&lt;span class="py"&gt;d:&lt;/span&gt;&lt;span class="n"&gt;AuditDependency&lt;/span&gt;&lt;span class="ss"&gt;)&lt;/span&gt;
      &lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="ss"&gt;[&lt;/span&gt;&lt;span class="nc"&gt;:DECLARED_IN&lt;/span&gt;&lt;span class="ss"&gt;]&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="ss"&gt;(&lt;/span&gt;&lt;span class="py"&gt;p:&lt;/span&gt;&lt;span class="n"&gt;ProjectFile&lt;/span&gt;&lt;span class="ss"&gt;)&lt;/span&gt;
&lt;span class="k"&gt;RETURN&lt;/span&gt; &lt;span class="n"&gt;f.finding_id&lt;/span&gt;&lt;span class="ss"&gt;,&lt;/span&gt; &lt;span class="n"&gt;d.name&lt;/span&gt;&lt;span class="ss"&gt;,&lt;/span&gt; &lt;span class="n"&gt;p.path&lt;/span&gt;&lt;span class="ss"&gt;,&lt;/span&gt; &lt;span class="n"&gt;p.sha256&lt;/span&gt;
&lt;span class="k"&gt;ORDER&lt;/span&gt; &lt;span class="k"&gt;BY&lt;/span&gt; &lt;span class="n"&gt;d.name&lt;/span&gt;&lt;span class="ss"&gt;,&lt;/span&gt; &lt;span class="n"&gt;p.path&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This returns the dependency, its associated finding, and the manifest file connected to that dependency.&lt;/p&gt;

&lt;p&gt;The API exposes these results at:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;GET /api/audits/{audit_id}/trace&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;The response contains separate &lt;code&gt;evidence_paths&lt;/code&gt; and &lt;code&gt;dependency_paths&lt;/code&gt; collections. The frontend can then present them in the relevant evidence and dependency views.&lt;/p&gt;

&lt;p&gt;During one local verification run, the trace endpoint returned 11 evidence paths and 11 dependency paths. Those counts belong to that particular run, rather than representing a general benchmark or a guaranteed result.&lt;/p&gt;

&lt;p&gt;I also recorded 18 passing backend tests and a successful frontend build during development. These checks gave me useful feedback about the implementation, although they cannot prove the absence of every defect.&lt;/p&gt;

&lt;p&gt;For me, the important milestone was not the number itself. It was being able to follow a result through the API and see that the expected relationships were being returned from the graph.&lt;/p&gt;

&lt;p&gt;The code for this part is available in &lt;a href="https://github.com/jaganbaditya16-note/SwitchPath/blob/main/server/app/audit_graph.py" rel="noopener noreferrer"&gt;&lt;code&gt;audit_graph.py&lt;/code&gt;&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  What I learned from the difficult parts
&lt;/h2&gt;

&lt;p&gt;The problems were not limited to one database connection or one failing command. The bigger challenge was understanding how each layer affected the next.&lt;/p&gt;

&lt;p&gt;A working frontend was not enough if the API could not communicate with the database. An API response was not enough if the expected relationships had not been saved. A successful graph query was not enough if the interface gave users no practical way to inspect the result.&lt;/p&gt;

&lt;p&gt;I learned to verify the chain instead of trusting one successful step.&lt;/p&gt;

&lt;p&gt;I also learned to be careful about what the output means.&lt;/p&gt;

&lt;p&gt;A file hash can identify the bytes that were inspected, but it cannot prove those bytes are trustworthy. A matched keyword can point a developer toward relevant code, but it cannot prove implementation correctness. And a graph can accurately represent stored relationships while those relationships still provide incomplete evidence about a feature.&lt;/p&gt;

&lt;p&gt;This last point is especially important. FalkorDB does not magically make a heuristic correct. It enables SwitchPath to store relationships and traverse them so that the connections behind a result can be examined.&lt;/p&gt;

&lt;p&gt;That is a more limited claim than automatic code understanding, but it is also a claim the current prototype can demonstrate.&lt;/p&gt;

&lt;h2&gt;
  
  
  What SwitchPath is today—and what it is not
&lt;/h2&gt;

&lt;p&gt;SwitchPath is a working local prototype for graph-backed, static project audits.&lt;/p&gt;

&lt;p&gt;It can inventory eligible files within defined limits, extract supported dependency declarations, rank evidence candidates, persist connected audit records, and return evidence and dependency paths through its API.&lt;/p&gt;

&lt;p&gt;It is &lt;strong&gt;not yet a fully autonomous AI agent&lt;/strong&gt;. It does not use an LLM in the current audit-matching workflow, execute the inspected project, or automatically run the project's tests. Its keyword-based evidence ranking is limited, and a static scan cannot establish every property of a feature or prove a project's total future operating costs.&lt;/p&gt;

&lt;p&gt;I want to be explicit about these boundaries because a professional engineering project should explain not only what works, but also what remains unfinished.&lt;/p&gt;

&lt;p&gt;My next steps would include richer language-aware analysis, additional dependency and import relationships, and a carefully controlled way to run selected project tests with user approval. I would also like to develop a review workflow that lets developers record whether evidence was accepted or rejected.&lt;/p&gt;

&lt;p&gt;Those are future directions, not features I am claiming to have completed.&lt;/p&gt;

&lt;h2&gt;
  
  
  More than the final result
&lt;/h2&gt;

&lt;p&gt;There is a personal reason I cared about finishing this project, but I do not want that to overshadow the engineering work.&lt;/p&gt;

&lt;p&gt;I am still learning. I do not always find technical problems easy, and sometimes the distance between an idea and a working application feels large. I have responsibilities and financial constraints, so opportunities to build, learn, and show my work matter to me.&lt;/p&gt;

&lt;p&gt;The opportunity to work with FalkorDB felt like a small light in a difficult stretch—not because a database can solve personal problems, but because a chance to build something gave me another reason to keep learning.&lt;/p&gt;

&lt;p&gt;I cannot know whether this project will win the competition. What I can control is whether I give the opportunity a serious attempt, check what I have built, explain it honestly, and learn from the result.&lt;/p&gt;

&lt;p&gt;That mindset influenced the way I approached SwitchPath. I tried to turn a broad ambition into a specific engineering problem, break the work into smaller parts, and keep checking whether the implementation matched the idea.&lt;/p&gt;

&lt;h2&gt;
  
  
  Final thoughts: make the path visible
&lt;/h2&gt;

&lt;p&gt;The central idea behind SwitchPath is simple: an audit finding should not be an unexplained score.&lt;/p&gt;

&lt;p&gt;By connecting audits, findings, evidence candidates, source files, and dependencies in FalkorDB, the prototype can trace stored relationships and return paths for developers to review.&lt;/p&gt;

&lt;p&gt;There is plenty left to improve. The current scanner is heuristic, the coverage is limited, and the project is not a production-grade autonomous agent. But it provides a concrete foundation to build on: a bounded scanner, a graph-backed data model, real Cypher traversals, an API, and an interface for reviewing the results.&lt;/p&gt;

&lt;p&gt;For me, the project has also been a lesson in how software gets built. Not through one perfect command or one inspired moment, but through small decisions, failed attempts, careful checks, and gradual understanding.&lt;/p&gt;

&lt;p&gt;I started with a question about making audit results more explainable. I ended up with a working prototype that lets me investigate the relationships behind those results—and a clearer understanding of what I need to learn next.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Explore the implementation:&lt;/strong&gt; &lt;a href="https://github.com/jaganbaditya16-note/SwitchPath" rel="noopener noreferrer"&gt;SwitchPath on GitHub&lt;/a&gt;&lt;/p&gt;




&lt;p&gt;&lt;strong&gt;AI-assistance disclosure:&lt;/strong&gt; AI assistance was used during development for planning, architecture discussions, code proposals and refinement, regression-test work, debugging from terminal output, and documentation. AI assistance was also used to help draft and edit this article from the participant's project context and personal reflections. The participant remains responsible for checking technical claims, understanding the submitted implementation and graph queries, and accurately representing what was built.&lt;/p&gt;

</description>
      <category>falkordb</category>
      <category>python</category>
      <category>database</category>
      <category>hackathon</category>
    </item>
  </channel>
</rss>
