<?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: Shaurya Upadhyay</title>
    <description>The latest articles on DEV Community by Shaurya Upadhyay (@beast04289).</description>
    <link>https://dev.to/beast04289</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%2F3645913%2F46bd0481-5435-4ed8-9b55-a9ca05c63e0e.png</url>
      <title>DEV Community: Shaurya Upadhyay</title>
      <link>https://dev.to/beast04289</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/beast04289"/>
    <language>en</language>
    <item>
      <title>I Didn’t Want AI to Decide Fraud. I Wanted It to Investigate It.</title>
      <dc:creator>Shaurya Upadhyay</dc:creator>
      <pubDate>Thu, 24 Sep 2026 12:19:41 +0000</pubDate>
      <link>https://dev.to/beast04289/i-didnt-want-ai-to-decide-fraud-i-wanted-it-to-investigate-it-321m</link>
      <guid>https://dev.to/beast04289/i-didnt-want-ai-to-decide-fraud-i-wanted-it-to-investigate-it-321m</guid>
      <description>&lt;p&gt;How a painful backend, broken assumptions, graph debugging, evidence failures, and one very long final day became CaseVera — an evidence-first fraud investigation agent built on TigerGraph.&lt;/p&gt;

&lt;p&gt;A fraud model can tell you that a transaction looks suspicious.&lt;/p&gt;

&lt;p&gt;But would you block someone’s card because a model says it is 91.8% suspicious?&lt;/p&gt;

&lt;p&gt;What if that customer has made hundreds of nearly identical purchases before?&lt;/p&gt;

&lt;p&gt;What if the device is already familiar?&lt;/p&gt;

&lt;p&gt;What if the region and product are completely normal?&lt;/p&gt;

&lt;p&gt;What if a historical fraud case looks similar but has no direct connection to the current transaction?&lt;/p&gt;

&lt;p&gt;And what if an AI generates a convincing explanation containing a piece of evidence that never actually existed?&lt;/p&gt;

&lt;p&gt;That was the problem I kept running into while building my project for TigerGraph × Hacker House Goa 2026.&lt;/p&gt;

&lt;p&gt;I initially thought the challenge was to build a better fraud detector.&lt;/p&gt;

&lt;p&gt;It wasn’t.&lt;/p&gt;

&lt;p&gt;The harder problem was building a system I would actually trust to investigate fraud.&lt;/p&gt;

&lt;p&gt;That became CaseVera.&lt;/p&gt;

&lt;p&gt;Investigate the case. Not just the score.&lt;/p&gt;

&lt;p&gt;The problem with stopping at a fraud score&lt;/p&gt;

&lt;p&gt;Most fraud pipelines eventually produce some variation of:&lt;/p&gt;

&lt;p&gt;transaction → features → risk score → action&lt;/p&gt;

&lt;p&gt;Risk scoring is extremely useful. But a score answers only one question:&lt;/p&gt;

&lt;p&gt;How suspicious does this transaction look?&lt;/p&gt;

&lt;p&gt;An investigator needs far more.&lt;/p&gt;

&lt;p&gt;They need to know:&lt;/p&gt;

&lt;p&gt;What actually happened?&lt;br&gt;
What evidence supports fraud?&lt;br&gt;
What evidence contradicts that conclusion?&lt;br&gt;
What customers, cards, devices and transactions are connected?&lt;br&gt;
Has something similar happened before?&lt;br&gt;
Which policy applies?&lt;br&gt;
Do we have enough evidence to act?&lt;br&gt;
Should we ask for additional verification?&lt;br&gt;
Who is allowed to approve the action?&lt;br&gt;
Can every claim in the final decision be traced back to its source?&lt;/p&gt;

&lt;p&gt;That is the gap CaseVera tries to address.&lt;/p&gt;

&lt;p&gt;Instead of treating the risk model as the final answer, the risk score becomes the reason to begin an investigation.&lt;/p&gt;

&lt;p&gt;What CaseVera does&lt;/p&gt;

&lt;p&gt;CaseVera is a policy-constrained fraud investigation agent built around TigerGraph.&lt;/p&gt;

&lt;p&gt;Its investigation loop is roughly:&lt;/p&gt;

&lt;p&gt;Trigger → investigate the graph → retrieve context → assess evidence → handle uncertainty → request evidence if needed → apply policy → recommend the next best action → stop → persist case memory&lt;/p&gt;

&lt;p&gt;The system combines:&lt;/p&gt;

&lt;p&gt;TigerGraph + GSQL for structural relationships and graph evidence.&lt;/p&gt;

&lt;p&gt;TigerGraph MCP as the graph-tool transport used by the runtime.&lt;/p&gt;

&lt;p&gt;GraphRAG for retrieving relevant historical cases and policy/regulatory context.&lt;/p&gt;

&lt;p&gt;A statistical fraud model as a suspicion prior.&lt;/p&gt;

&lt;p&gt;A contradiction-aware evidence engine that separates:&lt;/p&gt;

&lt;p&gt;fraud-supporting evidence,&lt;br&gt;
legitimacy evidence,&lt;br&gt;
ambiguous signals.&lt;/p&gt;

&lt;p&gt;A deterministic policy layer for:&lt;/p&gt;

&lt;p&gt;next-best actions,&lt;br&gt;
approval routes,&lt;br&gt;
SAR decisions,&lt;br&gt;
stopping conditions.&lt;/p&gt;

&lt;p&gt;And finally, a persistent case-memory layer that writes the completed investigation back into TigerGraph.&lt;/p&gt;

&lt;p&gt;The decision that shaped the whole architecture&lt;/p&gt;

&lt;p&gt;One decision may seem strange for an AI-agent project in 2026:&lt;/p&gt;

&lt;p&gt;I deliberately kept an LLM out of the fraud decision loop.&lt;/p&gt;

&lt;p&gt;I could have passed the transaction, graph context, previous cases and policies into Gemini or another general-purpose LLM and asked:&lt;/p&gt;

&lt;p&gt;“Is this fraud? Explain why.”&lt;/p&gt;

&lt;p&gt;It would probably return a very convincing answer.&lt;/p&gt;

&lt;p&gt;That is exactly what worried me.&lt;/p&gt;

&lt;p&gt;Fraud investigation is not a place where a convincing explanation is enough.&lt;/p&gt;

&lt;p&gt;A generative model could accidentally:&lt;/p&gt;

&lt;p&gt;mix evidence belonging to different entities,&lt;br&gt;
interpret precedent as proof,&lt;br&gt;
transform an assumption into an observation,&lt;br&gt;
invent a relationship not present in the graph,&lt;br&gt;
overstate certainty,&lt;br&gt;
or recommend an action unsupported by policy.&lt;/p&gt;

&lt;p&gt;In a casual chatbot, a hallucination may just be annoying.&lt;/p&gt;

&lt;p&gt;In a financial investigation, it can contaminate the decision record.&lt;/p&gt;

&lt;p&gt;So I split responsibility differently.&lt;/p&gt;

&lt;p&gt;The model contributes suspicion.&lt;/p&gt;

&lt;p&gt;TigerGraph contributes relationships and facts.&lt;/p&gt;

&lt;p&gt;GraphRAG contributes relevant historical and policy context.&lt;/p&gt;

&lt;p&gt;The evidence engine determines what the current facts actually support.&lt;/p&gt;

&lt;p&gt;The policy engine determines which actions are allowed and who must approve them.&lt;/p&gt;

&lt;p&gt;The LLM does not get to change the verdict, evidence, exposure, approval route or SAR decision.&lt;/p&gt;

&lt;p&gt;That does not mean I think LLMs have no place in CaseVera.&lt;/p&gt;

&lt;p&gt;Quite the opposite.&lt;/p&gt;

&lt;p&gt;My next version would use them heavily at the boundaries:&lt;/p&gt;

&lt;p&gt;turning free-form analyst questions into structured investigation requests,&lt;br&gt;
letting analysts converse with a completed case,&lt;br&gt;
generating concise summaries from already-verified evidence,&lt;br&gt;
converting structured findings into more natural explanations,&lt;br&gt;
improving analyst productivity.&lt;/p&gt;

&lt;p&gt;But the underlying principle would remain:&lt;/p&gt;

&lt;p&gt;Generation should improve the interface. It should never manufacture the evidence.&lt;/p&gt;

&lt;p&gt;The case that validated the idea&lt;/p&gt;

&lt;p&gt;One benchmark case became the best demonstration of why I built the architecture this way.&lt;/p&gt;

&lt;p&gt;HHG-007.&lt;/p&gt;

&lt;p&gt;The model suspicion was around 91.8%.&lt;/p&gt;

&lt;p&gt;If the model score were allowed to dominate the decision, blocking the card would look completely reasonable.&lt;/p&gt;

&lt;p&gt;CaseVera investigated further.&lt;/p&gt;

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

&lt;p&gt;Fraud-supporting signals: 0&lt;/p&gt;

&lt;p&gt;Legitimacy signals: 5&lt;/p&gt;

&lt;p&gt;The amount was normal.&lt;/p&gt;

&lt;p&gt;The region was normal.&lt;/p&gt;

&lt;p&gt;The product behavior was normal.&lt;/p&gt;

&lt;p&gt;And the customer had hundreds of previous charges at very similar amounts.&lt;/p&gt;

&lt;p&gt;CaseVera did not declare the transaction legitimate either.&lt;/p&gt;

&lt;p&gt;It stayed uncertain.&lt;/p&gt;

&lt;p&gt;Its next-best action was:&lt;/p&gt;

&lt;p&gt;Verify first.&lt;/p&gt;

&lt;p&gt;Only if a simulated customer response later denied the transaction did a conditional block appear.&lt;/p&gt;

&lt;p&gt;That case gave me one of the biggest lessons from this project:&lt;/p&gt;

&lt;p&gt;Restraint is also intelligence.&lt;/p&gt;

&lt;p&gt;A good fraud system should know how to act.&lt;/p&gt;

&lt;p&gt;A good investigation system should also know when not to.&lt;/p&gt;

&lt;p&gt;Why TigerGraph mattered&lt;/p&gt;

&lt;p&gt;Some fraud patterns simply do not exist inside one transaction row.&lt;/p&gt;

&lt;p&gt;Consider HHG-014.&lt;/p&gt;

&lt;p&gt;If you inspect only the customer’s transaction, it does not tell the whole story.&lt;/p&gt;

&lt;p&gt;Once TigerGraph follows the associated device fingerprint through the network, something much more interesting appears:&lt;/p&gt;

&lt;p&gt;one device fingerprint → 24 customers → four connected cards&lt;/p&gt;

&lt;p&gt;That structure becomes visible only after traversing relationships across accounts.&lt;/p&gt;

&lt;p&gt;This became another principle behind CaseVera:&lt;/p&gt;

&lt;p&gt;Fraud rarely lives in one row. It lives in relationships.&lt;/p&gt;

&lt;p&gt;The graph contains customers, transactions, cards, device profiles, historical closed cases, investigation cases, evidence and document chunks.&lt;/p&gt;

&lt;p&gt;GSQL queries retrieve things such as:&lt;/p&gt;

&lt;p&gt;shared-device structures,&lt;br&gt;
connected historical cases,&lt;br&gt;
graph components,&lt;br&gt;
customer context,&lt;br&gt;
transaction context,&lt;br&gt;
historical-case candidates.&lt;/p&gt;

&lt;p&gt;GraphRAG then adds semantic retrieval over structurally relevant cases and policy documents.&lt;/p&gt;

&lt;p&gt;Importantly:&lt;/p&gt;

&lt;p&gt;Precedent is context. It is not proof.&lt;/p&gt;

&lt;p&gt;A similar historical fraud case can help an investigator understand the situation.&lt;/p&gt;

&lt;p&gt;It cannot prove the current customer committed fraud.&lt;/p&gt;

&lt;p&gt;TigerGraph MCP — not just a checkbox&lt;/p&gt;

&lt;p&gt;Near the end of the build, I realized something uncomfortable.&lt;/p&gt;

&lt;p&gt;I had used TigerGraph MCP during development, but the investigation runtime was still calling the same installed GSQL queries directly through REST++.&lt;/p&gt;

&lt;p&gt;The challenge explicitly required MCP.&lt;/p&gt;

&lt;p&gt;I could have documented that MCP was used during development and moved on.&lt;/p&gt;

&lt;p&gt;Instead, I rebuilt the graph transport boundary.&lt;/p&gt;

&lt;p&gt;The important constraint was:&lt;/p&gt;

&lt;p&gt;MCP integration was not allowed to change a single investigation decision.&lt;/p&gt;

&lt;p&gt;So I introduced a separate transport adapter.&lt;/p&gt;

&lt;p&gt;The investigator itself does not know whether the result came from REST++ or MCP.&lt;/p&gt;

&lt;p&gt;Both transports return the same normalized graph results.&lt;/p&gt;

&lt;p&gt;Then I tested them.&lt;/p&gt;

&lt;p&gt;All 7 installed read queries returned identical normalized results over REST and MCP.&lt;/p&gt;

&lt;p&gt;Then I ran the entire benchmark over both transports.&lt;/p&gt;

&lt;p&gt;The final MCP run made:&lt;/p&gt;

&lt;p&gt;96 graph calls&lt;/p&gt;

&lt;p&gt;0 MCP failures&lt;/p&gt;

&lt;p&gt;0 semantic differences between REST and MCP&lt;/p&gt;

&lt;p&gt;0 semantic differences between MCP and the approved release&lt;/p&gt;

&lt;p&gt;Different transport.&lt;/p&gt;

&lt;p&gt;Same evidence.&lt;/p&gt;

&lt;p&gt;Same decisions.&lt;/p&gt;

&lt;p&gt;That was the point where MCP became a genuine part of the CaseVera runtime rather than a feature listed in a README.&lt;/p&gt;

&lt;p&gt;The backend was the hardest part&lt;/p&gt;

&lt;p&gt;The polished UI is probably the first thing people will notice.&lt;/p&gt;

&lt;p&gt;The backend is where most of the project actually happened.&lt;/p&gt;

&lt;p&gt;And it was painful.&lt;/p&gt;

&lt;p&gt;More than once, I reached a stage where the system looked finished.&lt;/p&gt;

&lt;p&gt;Then another assumption broke.&lt;/p&gt;

&lt;p&gt;A relationship that seemed obvious from the data could not actually be proven.&lt;/p&gt;

&lt;p&gt;Historical information had to obey strict point-in-time rules so an investigation could not learn from the future.&lt;/p&gt;

&lt;p&gt;Customer-level card ownership could not automatically be treated as transaction-level card attribution.&lt;/p&gt;

&lt;p&gt;Historical precedent had to remain context rather than current-case evidence.&lt;/p&gt;

&lt;p&gt;Simulated customer replies had to remain hypothetical and could never silently become observed evidence.&lt;/p&gt;

&lt;p&gt;Graph write-back had to be idempotent.&lt;/p&gt;

&lt;p&gt;A successful write was not enough; the written state had to be independently read back and reconciled.&lt;/p&gt;

&lt;p&gt;Even after the decision engine was finalized, integrating MCP briefly changed the release fingerprint because one Python file was re-saved with different Windows line endings.&lt;/p&gt;

&lt;p&gt;The code behaved the same.&lt;/p&gt;

&lt;p&gt;The bytes did not.&lt;/p&gt;

&lt;p&gt;So the fingerprint failed.&lt;/p&gt;

&lt;p&gt;I restored the original bytes before continuing.&lt;/p&gt;

&lt;p&gt;At the time it was extremely frustrating.&lt;/p&gt;

&lt;p&gt;In retrospect, it captured the entire philosophy of the project:&lt;/p&gt;

&lt;p&gt;“Seems correct” was never enough. I wanted it proven.&lt;/p&gt;

&lt;p&gt;The moment the system finally clicked&lt;/p&gt;

&lt;p&gt;The project became much clearer once I stopped thinking of it as:&lt;/p&gt;

&lt;p&gt;a fraud classifier&lt;/p&gt;

&lt;p&gt;and started thinking of it as:&lt;/p&gt;

&lt;p&gt;an investigation loop.&lt;/p&gt;

&lt;p&gt;That changed everything.&lt;/p&gt;

&lt;p&gt;The model was allowed to be wrong without destroying the system.&lt;/p&gt;

&lt;p&gt;GraphRAG could provide useful context without becoming evidence.&lt;/p&gt;

&lt;p&gt;Uncertainty became a legitimate outcome.&lt;/p&gt;

&lt;p&gt;Human approval was designed into the workflow.&lt;/p&gt;

&lt;p&gt;Evidence requests became part of the agent’s behavior.&lt;/p&gt;

&lt;p&gt;And every investigation could end with a structured, auditable decision record.&lt;/p&gt;

&lt;p&gt;The agent could now effectively say:&lt;/p&gt;

&lt;p&gt;“I see something suspicious, but I do not yet have enough evidence.”&lt;/p&gt;

&lt;p&gt;That is much more useful than forcing every case into fraud or legitimate.&lt;/p&gt;

&lt;p&gt;Next-best action matters as much as the verdict&lt;/p&gt;

&lt;p&gt;A fraud investigator does not only need:&lt;/p&gt;

&lt;p&gt;“Fraud / not fraud.”&lt;/p&gt;

&lt;p&gt;They need:&lt;/p&gt;

&lt;p&gt;“What do we do now?”&lt;/p&gt;

&lt;p&gt;CaseVera therefore produces both an initial and final next-best action.&lt;/p&gt;

&lt;p&gt;Possible actions include:&lt;/p&gt;

&lt;p&gt;allow,&lt;br&gt;
monitor,&lt;br&gt;
verify,&lt;br&gt;
step-up authentication,&lt;br&gt;
decline,&lt;br&gt;
block a card,&lt;br&gt;
escalate,&lt;br&gt;
create a case,&lt;br&gt;
file a report,&lt;br&gt;
close with no fraud.&lt;/p&gt;

&lt;p&gt;Actions also have approval routes:&lt;/p&gt;

&lt;p&gt;auto&lt;/p&gt;

&lt;p&gt;L1&lt;/p&gt;

&lt;p&gt;L2&lt;/p&gt;

&lt;p&gt;The agent can recommend restricted actions.&lt;/p&gt;

&lt;p&gt;It cannot pretend a human-approved action has already happened.&lt;/p&gt;

&lt;p&gt;SAR generation is also policy-controlled rather than triggered by a language model.&lt;/p&gt;

&lt;p&gt;That separation became particularly important once I started thinking of CaseVera as something that could eventually operate in a real financial environment.&lt;/p&gt;

&lt;p&gt;Case memory closes the loop&lt;/p&gt;

&lt;p&gt;An investigation should not disappear once the decision is made.&lt;/p&gt;

&lt;p&gt;CaseVera writes completed investigations back into TigerGraph as:&lt;/p&gt;

&lt;p&gt;an InvestigationCase,&lt;br&gt;
associated Evidence vertices,&lt;br&gt;
relationships to transactions,&lt;br&gt;
customers,&lt;br&gt;
cards,&lt;br&gt;
historical precedents,&lt;br&gt;
documents,&lt;br&gt;
devices.&lt;/p&gt;

&lt;p&gt;For the benchmark, the 20 cases remain isolated from each other to maintain point-in-time fairness.&lt;/p&gt;

&lt;p&gt;But the write side already establishes the foundation for a future system where newly completed investigations become usable institutional memory.&lt;/p&gt;

&lt;p&gt;The final production write was independently reconciled:&lt;/p&gt;

&lt;p&gt;20/20 investigation cases complete&lt;/p&gt;

&lt;p&gt;273 evidence vertices&lt;/p&gt;

&lt;p&gt;0 reconciliation divergences&lt;/p&gt;

&lt;p&gt;Replay tests also verified that repeating writes did not create semantic growth.&lt;/p&gt;

&lt;p&gt;The UI: show the investigation, not just the answer&lt;/p&gt;

&lt;p&gt;I wanted the UI to feel like an analyst workstation rather than another fraud dashboard.&lt;/p&gt;

&lt;p&gt;CaseVera includes:&lt;/p&gt;

&lt;p&gt;case queue,&lt;br&gt;
overview,&lt;br&gt;
evidence graph,&lt;br&gt;
evidence ledger,&lt;br&gt;
policy decision view,&lt;br&gt;
investigation replay,&lt;br&gt;
policy corpus,&lt;br&gt;
release audit.&lt;/p&gt;

&lt;p&gt;The graph view shows connected entities.&lt;/p&gt;

&lt;p&gt;The evidence ledger separates fraud, legitimacy and ambiguity.&lt;/p&gt;

&lt;p&gt;The decision view explains which policy produced each recommendation.&lt;/p&gt;

&lt;p&gt;Replay shows the sequence of graph retrieval, evidence gathering and decision formation.&lt;/p&gt;

&lt;p&gt;The release audit exposes the boring but important stuff:&lt;/p&gt;

&lt;p&gt;hashes, reconciliation, persistence and reproducibility.&lt;/p&gt;

&lt;p&gt;The current browser UI is deliberately a verified read-only snapshot rather than pretending it is connected live to TigerGraph.&lt;/p&gt;

&lt;p&gt;What was validated&lt;/p&gt;

&lt;p&gt;The benchmark labels are hidden.&lt;/p&gt;

&lt;p&gt;So I will not claim an accuracy number I cannot prove.&lt;/p&gt;

&lt;p&gt;Instead, I validated what I could actually measure:&lt;/p&gt;

&lt;p&gt;20/20 answer files produced and schema-validated&lt;/p&gt;

&lt;p&gt;20/20 cases persisted and independently reconciled&lt;/p&gt;

&lt;p&gt;273 Evidence vertices&lt;/p&gt;

&lt;p&gt;7/7 graph queries identical over REST and MCP&lt;/p&gt;

&lt;p&gt;96 MCP runtime calls, 0 failures&lt;/p&gt;

&lt;p&gt;0 semantic differences between MCP and REST&lt;/p&gt;

&lt;p&gt;0 semantic differences between MCP and the approved release&lt;/p&gt;

&lt;p&gt;idempotent write replay verified&lt;/p&gt;

&lt;p&gt;content-addressed scoring and persistence releases&lt;/p&gt;

&lt;p&gt;To me, this matters more than inventing a benchmark score.&lt;/p&gt;

&lt;p&gt;CaseVera is not perfect&lt;/p&gt;

&lt;p&gt;There are several things I would build next.&lt;/p&gt;

&lt;p&gt;First, real analyst and customer interaction instead of simulated responses.&lt;/p&gt;

&lt;p&gt;Second, an LLM-powered interaction layer that lets analysts ask natural-language questions and receive explanations grounded only in verified case state.&lt;/p&gt;

&lt;p&gt;Third, newly written InvestigationCase memory should become directly retrievable by later production investigations.&lt;/p&gt;

&lt;p&gt;Fourth, stronger model calibration and additional fraud typologies.&lt;/p&gt;

&lt;p&gt;Fifth, streaming triggers and richer analyst feedback loops.&lt;/p&gt;

&lt;p&gt;And eventually, controlled dynamic tool selection — but only where the tool choices and evidence remain auditable.&lt;/p&gt;

&lt;p&gt;The system I submitted is therefore not the end state.&lt;/p&gt;

&lt;p&gt;It is the architecture I want to build that end state on.&lt;/p&gt;

&lt;p&gt;Why I want to take CaseVera further&lt;/p&gt;

&lt;p&gt;I do not think CaseVera should move forward because it has the flashiest AI model.&lt;/p&gt;

&lt;p&gt;It does not.&lt;/p&gt;

&lt;p&gt;I think its strength is that I treated the challenge as an investigation-engineering problem rather than an API demo.&lt;/p&gt;

&lt;p&gt;I used TigerGraph where relationships genuinely mattered.&lt;/p&gt;

&lt;p&gt;GraphRAG where retrieval genuinely mattered.&lt;/p&gt;

&lt;p&gt;MCP as an actual runtime graph transport.&lt;/p&gt;

&lt;p&gt;A statistical model where probabilistic suspicion was useful.&lt;/p&gt;

&lt;p&gt;Deterministic controls where mistakes would be expensive.&lt;/p&gt;

&lt;p&gt;And when the system contradicted one of my assumptions, I changed the assumption instead of forcing the output I expected.&lt;/p&gt;

&lt;p&gt;There is still a lot I would like to improve.&lt;/p&gt;

&lt;p&gt;But after spending most of this hackathon debugging edge cases, evidence provenance, graph relationships, temporal leakage, persistence and policy boundaries, the foundation now has one property I care about more than raw confidence:&lt;/p&gt;

&lt;p&gt;traceability.&lt;/p&gt;

&lt;p&gt;The biggest lesson I am taking away from this build is:&lt;/p&gt;

&lt;p&gt;The most intelligent system is not always the one that answers fastest. Sometimes it is the one that knows when it does not know enough.&lt;/p&gt;

&lt;p&gt;That is what I want CaseVera to become.&lt;/p&gt;

&lt;p&gt;CaseVera — Investigate the case. Not just the score.&lt;/p&gt;

&lt;p&gt;GitHub: &lt;a href="https://github.com/BEAST04289/CaseVera" rel="noopener noreferrer"&gt;https://github.com/BEAST04289/CaseVera&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Built for TigerGraph × Hacker House Goa 2026.&lt;/p&gt;

</description>
      <category>agents</category>
      <category>ai</category>
      <category>database</category>
      <category>machinelearning</category>
    </item>
  </channel>
</rss>
