<?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: srinath thota</title>
    <description>The latest articles on DEV Community by srinath thota (@tsrinath).</description>
    <link>https://dev.to/tsrinath</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%2F4140353%2F732f42e5-7400-4ddb-a914-a168d1577a02.jpg</url>
      <title>DEV Community: srinath thota</title>
      <link>https://dev.to/tsrinath</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/tsrinath"/>
    <language>en</language>
    <item>
      <title>TigerGraph Agentic Fraud Investigation Hackathon 2026 Team GOA-T</title>
      <dc:creator>srinath thota</dc:creator>
      <pubDate>Fri, 25 Sep 2026 05:50:15 +0000</pubDate>
      <link>https://dev.to/tsrinath/tigergraph-agentic-fraud-investigation-hackathon-2026team-goa-t-4chl</link>
      <guid>https://dev.to/tsrinath/tigergraph-agentic-fraud-investigation-hackathon-2026team-goa-t-4chl</guid>
      <description>&lt;h2&gt;
  
  
  Team
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Thota Sai Eswar Srinath&lt;/strong&gt; — Team Leader &amp;amp; Agentic Architecture&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Nikhil Kadiri&lt;/strong&gt; — Graph Systems &amp;amp; TigerGraph Traversal Engineering&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Bondugula Pranav Teja&lt;/strong&gt; — Policy Engine &amp;amp; GraphRAG Implementation&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Project Links
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Live Cockpit:&lt;/strong&gt; &lt;a href="https://task-4-nvan.onrender.com/" rel="noopener noreferrer"&gt;https://task-4-nvan.onrender.com/&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;GitHub Repository:&lt;/strong&gt; &lt;a href="https://github.com/tsrinath2007/Task-4" rel="noopener noreferrer"&gt;https://github.com/tsrinath2007/Task-4&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Benchmark Report:&lt;/strong&gt; &lt;code&gt;docs/BENCHMARK_REPORT.md&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Demo Script:&lt;/strong&gt; &lt;code&gt;docs/DEMO_VIDEO_SCRIPT.md&lt;/code&gt;
&lt;/li&gt;
&lt;/ul&gt;




&lt;h1&gt;
  
  
  A Fraud Score Isn't an Investigation
&lt;/h1&gt;

&lt;p&gt;Modern fraud detection systems can assign a risk score to every transaction.&lt;/p&gt;

&lt;p&gt;For example:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Transaction Risk Score: 0.87
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;But a risk score alone doesn't answer the questions an investigator actually needs:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Why is this transaction suspicious?&lt;/li&gt;
&lt;li&gt;Has this card interacted with other suspicious accounts?&lt;/li&gt;
&lt;li&gt;Is the device being used by multiple customers?&lt;/li&gt;
&lt;li&gt;Has this device appeared in previous fraud cases?&lt;/li&gt;
&lt;li&gt;Is this an unusual transaction or simply legitimate travel?&lt;/li&gt;
&lt;li&gt;Is this a recurring subscription?&lt;/li&gt;
&lt;li&gt;What action should the bank take?&lt;/li&gt;
&lt;li&gt;Does the action require human approval?&lt;/li&gt;
&lt;li&gt;Should a regulatory report be generated?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The problem becomes significantly harder when fraud is not isolated to one transaction.&lt;/p&gt;

&lt;p&gt;A fraud ring might look 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;Customer A
    |
  Card A
    |
Transaction
    |
 Device X
   / | \
  /  |  \
Card B Card C Card D
  |     |     |
 ...   ...   ...
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;A single suspicious transaction can therefore be connected to dozens or even hundreds of other entities.&lt;/p&gt;

&lt;p&gt;This is where we saw an opportunity for graphs.&lt;/p&gt;




&lt;h1&gt;
  
  
  Introducing SENTINEL
&lt;/h1&gt;

&lt;p&gt;We built &lt;strong&gt;SENTINEL&lt;/strong&gt;, a graph-native autonomous fraud investigation system designed to investigate suspicious transactions using:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;TigerGraph&lt;/strong&gt; for multi-hop relationship analysis&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Model Context Protocol (MCP)&lt;/strong&gt; for live graph investigation tools&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;GraphRAG&lt;/strong&gt; for historical case retrieval&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Deterministic fraud detectors&lt;/strong&gt; for explainable pattern detection&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;A deterministic policy engine&lt;/strong&gt; for action and approval decisions&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;LLM synthesis&lt;/strong&gt; for human-readable explanations and regulatory narratives&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;An interactive analyst cockpit&lt;/strong&gt; for investigation and visualization&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The key architectural principle was:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Let the graph gather evidence, let deterministic code enforce policy, and let the LLM explain the result.&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;The LLM is deliberately &lt;strong&gt;not&lt;/strong&gt; allowed to decide whether a card should be blocked or which approval route should be assigned.&lt;/p&gt;




&lt;h1&gt;
  
  
  What We Built
&lt;/h1&gt;

&lt;p&gt;SENTINEL is an end-to-end investigation system composed of eight major components:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Live TigerGraph Savanna Cloud + MCP Client&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Hybrid GraphRAG Memory&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Eight Deterministic Fraud Detectors&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Legitimacy Checklist&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Deterministic Policy Engine&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Dynamic Next-Best Action Engine&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;LLM Synthesis Layer&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Interactive Analyst Web Cockpit&lt;/strong&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Our evaluation used:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;590,742 IEEE-CIS / Vesta transactions&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;5,565 closed historical cases&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;20 benchmark cases (&lt;code&gt;HHG-001&lt;/code&gt; → &lt;code&gt;HHG-020&lt;/code&gt;)&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;A live TigerGraph graph containing approximately &lt;strong&gt;1.45 million transaction vertices&lt;/strong&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The benchmark validation suite produced:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;20 / 20 PASS
100% policy validation pass rate
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The benchmark also covered both fraudulent and legitimate behavior, allowing us to test whether the system could avoid blindly treating every anomaly as fraud.&lt;/p&gt;




&lt;h1&gt;
  
  
  Architecture Overview
&lt;/h1&gt;

&lt;p&gt;At a high level, SENTINEL follows this pipeline:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;                    ┌───────────────────────┐
                    │      ALERT TRIGGER    │
                    │ Risk Score / Dispute  │
                    │ Analyst Escalation    │
                    └───────────┬───────────┘
                                │
                                ▼
                    ┌───────────────────────┐
                    │   TIGERGRAPH + MCP    │
                    │                       │
                    │ Customer Cards        │
                    │ Card History          │
                    │ Shared Devices        │
                    │ Prior Cases           │
                    └───────────┬───────────┘
                                │
                                ▼
                    ┌───────────────────────┐
                    │   EVIDENCE ENGINE     │
                    │                       │
                    │ 8 Fraud Detectors     │
                    │ Legitimacy Checks     │
                    │ GraphRAG Retrieval    │
                    └───────────┬───────────┘
                                │
                                ▼
                    ┌───────────────────────┐
                    │ DETERMINISTIC POLICY  │
                    │       ENGINE          │
                    │                       │
                    │ Rules R1 → R10        │
                    │ Approval Routing      │
                    │ Initial Actions       │
                    └───────────┬───────────┘
                                │
                       Evidence Required?
                          /           \
                        YES           NO
                         │             │
                         ▼             │
              ┌──────────────────┐    │
              │ Evidence Loop     │    │
              │                  │    │
              │ Customer Verify  │    │
              │ Step-up Auth     │    │
              └────────┬─────────┘    │
                       │              │
                       ▼              │
              ┌──────────────────┐    │
              │ Reassessment     │◄───┘
              │ decide_after_    │
              │ evidence()       │
              └────────┬─────────┘
                       │
                       ▼
              ┌──────────────────┐
              │ LLM Synthesis    │
              │                  │
              │ Explanation      │
              │ Case Summary     │
              │ SAR Narrative    │
              └────────┬─────────┘
                       │
                       ▼
              ┌──────────────────┐
              │ Persistence       │
              │                  │
              │ Case Vertex      │
              │ Audit JSON       │
              │ SAR XML          │
              │ Audit CSV        │
              └──────────────────┘
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The important architectural boundary is between &lt;strong&gt;evidence&lt;/strong&gt;, &lt;strong&gt;policy&lt;/strong&gt;, and &lt;strong&gt;language generation&lt;/strong&gt;.&lt;/p&gt;




&lt;h1&gt;
  
  
  Why We Chose a Graph
&lt;/h1&gt;

&lt;p&gt;Traditional relational databases are excellent at structured transactional data.&lt;/p&gt;

&lt;p&gt;Fraud investigation, however, often becomes a relationship problem.&lt;/p&gt;

&lt;p&gt;Consider this investigation:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Transaction
     ↓
Device
     ↓
Other Cards
     ↓
Previous Transactions
     ↓
Previous Fraud Cases
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The investigator is effectively asking:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;"What else is connected to this transaction?"&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;That is naturally represented as a graph.&lt;/p&gt;

&lt;p&gt;Instead of treating every transaction as an isolated row, SENTINEL models relationships between:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Customers&lt;/li&gt;
&lt;li&gt;Cards&lt;/li&gt;
&lt;li&gt;Transactions&lt;/li&gt;
&lt;li&gt;Devices&lt;/li&gt;
&lt;li&gt;Billing regions&lt;/li&gt;
&lt;li&gt;Email domains&lt;/li&gt;
&lt;li&gt;Historical cases&lt;/li&gt;
&lt;/ul&gt;




&lt;h1&gt;
  
  
  TigerGraph Data Model
&lt;/h1&gt;

&lt;p&gt;Our live TigerGraph graph contains vertices including:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Customer
Card
Transaction
DeviceProfile
BillingRegion
EmailDomain
ClosedCase
Case
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;And relationships such as:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Customer
   └── OWNS ──&amp;gt; Card

Card
   └── MADE ──&amp;gt; Transaction

Transaction
   └── FROM_DEVICE ──&amp;gt; DeviceProfile

Transaction
   └── BILLED_IN ──&amp;gt; BillingRegion

Transaction
   └── PURCHASER_EMAIL ──&amp;gt; EmailDomain

Transaction
   └── NEXT ──&amp;gt; Transaction

ClosedCase
   └── ON_CARD ──&amp;gt; Card

ClosedCase
   └── INVOLVES ──&amp;gt; Transaction

Case
   ├── CASE_ON_CARD ──&amp;gt; Card
   ├── CASE_INVOLVES ──&amp;gt; Transaction
   └── CASE_CONNECTED_TO ──&amp;gt; Card
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This lets an investigation move through the transaction network rather than querying isolated records.&lt;/p&gt;




&lt;h1&gt;
  
  
  Multi-Hop Fraud Investigation
&lt;/h1&gt;

&lt;p&gt;One of our important graph traversals follows this pattern:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Transaction
      │
      │ FROM_DEVICE
      ▼
DeviceProfile
      │
      │ USED_ON
      ▼
Card
      │
      │ HAS_CLOSED_CASE
      ▼
ClosedCase
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;In GSQL:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;CREATE OR REPLACE QUERY find_shared_device_ring(STRING txnId)
FOR GRAPH Transaction_Fraud {

    StartTxn = {Transaction.*};

    TargetTxn =
        SELECT t
        FROM StartTxn:t
        WHERE t.TransactionID == txnId;

    // Hop 1: Transaction → Device
    Dev =
        SELECT d
        FROM TargetTxn:t
        -(FROM_DEVICE:e)-&amp;gt;
        DeviceProfile:d;

    // Hop 2: Device → Cards
    ConnectedCards =
        SELECT c
        FROM Dev:d
        -(USED_ON:e)-&amp;gt;
        Card:c;

    // Hop 3: Cards → Previous Fraud Cases
    PriorFraud =
        SELECT cc
        FROM ConnectedCards:c
        -(HAS_CLOSED_CASE:e)-&amp;gt;
        ClosedCase:cc
        WHERE cc.outcome == "fraud";

    PRINT
        ConnectedCards.size() AS syndicate_size,
        ConnectedCards,
        PriorFraud;
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This traversal can expose relationships that are difficult to reason about when the investigation begins from a single transaction.&lt;/p&gt;

&lt;p&gt;In our benchmark cases &lt;code&gt;HHG-014&lt;/code&gt; and &lt;code&gt;HHG-017&lt;/code&gt;, the graph revealed device relationships connecting &lt;strong&gt;299 distinct card accounts&lt;/strong&gt;.&lt;/p&gt;




&lt;h1&gt;
  
  
  TigerGraph MCP
&lt;/h1&gt;

&lt;p&gt;We didn't want the agent to directly manipulate the graph using arbitrary queries.&lt;/p&gt;

&lt;p&gt;Instead, we exposed a controlled set of specialized investigation tools through MCP.&lt;/p&gt;

&lt;p&gt;Our MCP client provides:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;query_customer_cards(customer_id)

query_card_history(card_id, limit)

query_shared_devices(txn_id)

query_prior_cases(card_id)

write_case(case_data)
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This creates a controlled interface between the agent and the graph.&lt;/p&gt;

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

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Agent
  │
  ├── query_card_history()
  │
  ├── query_shared_devices()
  │
  ├── query_prior_cases()
  │
  └── write_case()
  │
  ▼
TigerGraph
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The agent doesn't need to understand the entire TigerGraph schema.&lt;/p&gt;

&lt;p&gt;It only needs to know:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;"I need the cards connected to this device."&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;The MCP tool handles the graph-specific implementation.&lt;/p&gt;




&lt;h1&gt;
  
  
  The Evidence Layer
&lt;/h1&gt;

&lt;p&gt;After graph retrieval, SENTINEL runs deterministic detectors against the collected evidence.&lt;/p&gt;

&lt;p&gt;We implemented eight primary detectors.&lt;/p&gt;

&lt;h2&gt;
  
  
  1. Recurring Merchant Detection
&lt;/h2&gt;

&lt;p&gt;We look for repeated transactions with:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Similar merchant&lt;/li&gt;
&lt;li&gt;Similar amount&lt;/li&gt;
&lt;li&gt;Periodic intervals&lt;/li&gt;
&lt;li&gt;Consistent historical behavior&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;For example:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Day 1    → $49.00
Day 30   → $49.00
Day 60   → $49.00
Day 90   → $49.00
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;A simplistic fraud detector might repeatedly flag these transactions.&lt;/p&gt;

&lt;p&gt;Our detector can instead recognize the recurring pattern as potential legitimate subscription behavior.&lt;/p&gt;




&lt;h2&gt;
  
  
  2. Card Testing Detection
&lt;/h2&gt;

&lt;p&gt;Card testing can produce small authorization attempts before a larger purchase.&lt;/p&gt;

&lt;p&gt;For example:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;$1.23
$2.11
$4.80
$7.42
$450.00
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;We look for rapid sequences of micro-authorizations followed by larger transactions.&lt;/p&gt;




&lt;h2&gt;
  
  
  3. Shared Device Detection
&lt;/h2&gt;

&lt;p&gt;We investigate whether a device is associated with multiple cards.&lt;/p&gt;

&lt;p&gt;For example:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Device D123
   ├── Card A
   ├── Card B
   ├── Card C
   ├── Card D
   └── Card E
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;A shared device alone does not prove fraud.&lt;/p&gt;

&lt;p&gt;It becomes one piece of evidence that is combined with other signals.&lt;/p&gt;




&lt;h2&gt;
  
  
  4. New Device Detection
&lt;/h2&gt;

&lt;p&gt;We determine whether the device is:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;New to the customer&lt;/li&gt;
&lt;li&gt;First seen in the customer's history&lt;/li&gt;
&lt;li&gt;Previously associated with other suspicious activity&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  5. Out-of-Region Detection
&lt;/h2&gt;

&lt;p&gt;We compare transaction regions against the cardholder's historical baseline.&lt;/p&gt;

&lt;p&gt;We deliberately don't treat every out-of-region transaction as fraud.&lt;/p&gt;

&lt;p&gt;For example:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Bengaluru
   ↓
Mumbai
   ↓
Delhi
   ↓
Bengaluru
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;may simply represent legitimate travel.&lt;/p&gt;

&lt;p&gt;A single unexpected transaction combined with other anomalies can be more meaningful.&lt;/p&gt;




&lt;h2&gt;
  
  
  6. Card-Not-Present Burst Detection
&lt;/h2&gt;

&lt;p&gt;We identify bursts of card-not-present transactions that significantly exceed historical transaction velocity.&lt;/p&gt;




&lt;h2&gt;
  
  
  7. Account Takeover Detection
&lt;/h2&gt;

&lt;p&gt;We look for changes in digital identity signals such as:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Previous OS
Previous Browser
Previous Device
        ↓
Sudden change
        ↓
Transaction
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Combined with additional identity inconsistencies, this can indicate possible account takeover activity.&lt;/p&gt;




&lt;h2&gt;
  
  
  8. Shared Region Detection
&lt;/h2&gt;

&lt;p&gt;We identify clusters of otherwise unrelated cards originating from the same suspicious region or infrastructure.&lt;/p&gt;




&lt;h1&gt;
  
  
  Legitimacy Checklist
&lt;/h1&gt;

&lt;p&gt;Fraud detection is not only about finding suspicious evidence.&lt;/p&gt;

&lt;p&gt;It is also about finding evidence that explains why a transaction could be legitimate.&lt;/p&gt;

&lt;p&gt;Our legitimacy checks consider patterns such as:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Recurring subscriptions&lt;/li&gt;
&lt;li&gt;Historical merchant relationships&lt;/li&gt;
&lt;li&gt;Consistent transaction amounts&lt;/li&gt;
&lt;li&gt;Travel patterns&lt;/li&gt;
&lt;li&gt;Customer history&lt;/li&gt;
&lt;li&gt;Previously cleared disputes&lt;/li&gt;
&lt;li&gt;Stable device behavior&lt;/li&gt;
&lt;li&gt;Historical transaction velocity&lt;/li&gt;
&lt;li&gt;Known customer behavior&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This prevents the investigation engine from interpreting every anomaly as fraud.&lt;/p&gt;




&lt;h1&gt;
  
  
  GraphRAG: Combining Semantics With Structure
&lt;/h1&gt;

&lt;p&gt;This was one of the most interesting parts of the project.&lt;/p&gt;

&lt;p&gt;Traditional RAG primarily asks:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;"Which previous cases sound similar to this case?"&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Fraud investigation also needs to ask:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;"Which previous cases are connected to the same entities?"&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Those are different questions.&lt;/p&gt;

&lt;p&gt;So we combined both.&lt;/p&gt;




&lt;h1&gt;
  
  
  Our Hybrid GraphRAG Pipeline
&lt;/h1&gt;

&lt;p&gt;Historical cases are embedded using:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;sentence-transformers/all-MiniLM-L6-v2
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Each case becomes a &lt;strong&gt;384-dimensional vector&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;We then perform semantic similarity search.&lt;/p&gt;

&lt;p&gt;At the same time, we query graph relationships.&lt;/p&gt;

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

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;                    Historical Cases
                           │
             ┌─────────────┴─────────────┐
             ▼                           ▼
      Semantic Search             Graph Search
             │                           │
             │                           │
             └─────────────┬─────────────┘
                           ▼
                    Relevance Fusion
                           │
                           ▼
                    Ranked Evidence
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Cases that are graph-adjacent receive an additional priority boost.&lt;/p&gt;

&lt;p&gt;Our implementation uses:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;semantic_score + adjacency_boost
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;with an adjacency boost of:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;+0.15
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;for relevant graph relationships.&lt;/p&gt;

&lt;p&gt;This means a case isn't ranked highly merely because its text sounds similar.&lt;/p&gt;

&lt;p&gt;It can also be ranked highly because it shares important graph structure.&lt;/p&gt;




&lt;h1&gt;
  
  
  Why Negative Evidence Matters
&lt;/h1&gt;

&lt;p&gt;This was one of our biggest lessons.&lt;/p&gt;

&lt;p&gt;Fraud systems naturally focus on confirmed fraud.&lt;/p&gt;

&lt;p&gt;But investigators also need to know:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;"Have we seen this behavior before and determined that it was legitimate?"&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;So we indexed historical cleared cases as well.&lt;/p&gt;

&lt;p&gt;Our historical dataset contained:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;5,565 closed historical cases
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;including approximately:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;900 cleared cases
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;These became &lt;strong&gt;negative evidence&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;For example, in benchmark case &lt;code&gt;HHG-003&lt;/code&gt;, historical cleared cases such as &lt;code&gt;CC-4922&lt;/code&gt; and &lt;code&gt;CC-4718&lt;/code&gt; helped establish that recurring disputes associated with that merchant category had previously been resolved as legitimate billing behavior.&lt;/p&gt;

&lt;p&gt;This is important because:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;A good fraud investigation system should not only find reasons to say "fraud."&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;It should also find evidence that says:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;"We've seen this before, and it was legitimate."&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h1&gt;
  
  
  The Most Important Design Decision
&lt;/h1&gt;

&lt;h2&gt;
  
  
  The LLM Does Not Control Policy
&lt;/h2&gt;

&lt;p&gt;One of our earliest architectural lessons was that giving an LLM complete control over security actions creates unnecessary risk.&lt;/p&gt;

&lt;p&gt;An LLM can generate a convincing explanation.&lt;/p&gt;

&lt;p&gt;That doesn't mean it should have authority to execute:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;BLOCK_CARD
FILE_REPORT
BLOCK_ALL_CARDS
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;So we separated:&lt;/p&gt;

&lt;h3&gt;
  
  
  Reasoning
&lt;/h3&gt;

&lt;p&gt;from:&lt;/p&gt;

&lt;h3&gt;
  
  
  Authority
&lt;/h3&gt;

&lt;p&gt;The LLM can:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Summarize evidence&lt;/li&gt;
&lt;li&gt;Explain detected patterns&lt;/li&gt;
&lt;li&gt;Generate case narratives&lt;/li&gt;
&lt;li&gt;Format regulatory narratives&lt;/li&gt;
&lt;li&gt;Explain why a policy rule was triggered&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The deterministic policy engine decides:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;What action is allowed&lt;/li&gt;
&lt;li&gt;Which approval level is required&lt;/li&gt;
&lt;li&gt;Whether blocking is permitted&lt;/li&gt;
&lt;li&gt;Whether a report should be filed&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The architecture therefore becomes:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;                  Evidence
                     │
          ┌──────────┴──────────┐
          ▼                     ▼
   Policy Engine              LLM
          │                     │
          │                     │
      Authority             Explanation
          │                     │
          └──────────┬──────────┘
                     ▼
               Final Case
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This separation became one of the defining design principles of SENTINEL.&lt;/p&gt;




&lt;h1&gt;
  
  
  Deterministic Policy Engine
&lt;/h1&gt;

&lt;p&gt;Our policy engine contains rules R1–R10.&lt;/p&gt;

&lt;h2&gt;
  
  
  R1 — Weak Evidence
&lt;/h2&gt;

&lt;p&gt;Weak isolated signals require additional verification rather than immediately blocking a card.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Weak Signal
    ↓
VERIFY_WITH_CUSTOMER
or
STEP_UP_AUTH
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  R2 — Customer Denial
&lt;/h2&gt;

&lt;p&gt;If the customer denies the transaction:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Customer Denial
       ↓
BLOCK_CARD
       +
CREATE_CASE
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;If exposure exceeds the configured threshold or the transaction is connected to a fraud ring, escalation includes the required reporting route.&lt;/p&gt;




&lt;h2&gt;
  
  
  R3 — Customer Confirmation
&lt;/h2&gt;

&lt;p&gt;If the customer confirms the transaction:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Customer Confirmation
       ↓
ALLOW_TRANSACTION
       +
CLOSE_NO_FRAUD
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  R4 — No Response
&lt;/h2&gt;

&lt;p&gt;If the customer does not respond within the configured 24-hour window:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;No Response
    ↓
MONITOR_CARD
    +
DECLINE_TRANSACTION
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  R5 — Card Testing
&lt;/h2&gt;

&lt;p&gt;Card testing triggers additional protection:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Card Testing
    ↓
DECLINE_TRANSACTION
    +
STEP_UP_AUTH
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  R6 — Shared Origin
&lt;/h2&gt;

&lt;p&gt;A sufficiently large shared-origin cluster triggers:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;CREATE_CASE
+
FILE_REPORT
+
MONITOR_CONNECTED_CARDS
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;with the appropriate approval route.&lt;/p&gt;




&lt;h2&gt;
  
  
  R7 — Recurring Disputes
&lt;/h2&gt;

&lt;p&gt;Recurring merchant disputes require verification.&lt;/p&gt;

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

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Recurring Dispute
      ↓
VERIFY_WITH_CUSTOMER
      +
WARN_CUSTOMER
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Blocking is prohibited by this rule.&lt;/p&gt;




&lt;h2&gt;
  
  
  R8 — Uncertain High-Exposure Cases
&lt;/h2&gt;

&lt;p&gt;Uncertain cases above the configured exposure threshold are escalated to a human analyst.&lt;/p&gt;




&lt;h2&gt;
  
  
  R9 — Undocumented Patterns
&lt;/h2&gt;

&lt;p&gt;Unknown patterns are escalated rather than silently handled.&lt;/p&gt;




&lt;h2&gt;
  
  
  R10 — Global Blocking
&lt;/h2&gt;

&lt;p&gt;Blocking all connected cards is prohibited unless the required number of cards have independently confirmed fraud.&lt;/p&gt;




&lt;h1&gt;
  
  
  Approval Routing
&lt;/h1&gt;

&lt;p&gt;Another important part of the policy layer is approval routing.&lt;/p&gt;

&lt;p&gt;Actions can be assigned to:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;AUTO
L1 — Lead
L2 — Manager
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;For example:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;BLOCK_CARD
    ↓
L1 approval
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



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

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;FILE_REPORT
    ↓
L2 approval
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This prevents the model from simply saying:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;"This looks dangerous. Block everything."&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Instead, the system must follow the defined authorization hierarchy.&lt;/p&gt;




&lt;h1&gt;
  
  
  The Agent State Machine
&lt;/h1&gt;

&lt;p&gt;SENTINEL is not a single LLM prompt.&lt;/p&gt;

&lt;p&gt;It is an investigation state machine.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;1. TRIGGER
      ↓
2. INVESTIGATE
      ↓
3. GATHER_EVIDENCE
      ↓
4. ASSESS_UNCERTAINTY
      ↓
5. GATHER_MORE_EVIDENCE
      ↓
6. REASSESS
      ↓
7. RECOMMEND_ACTION
      ↓
8. UPDATE_CASE_MEMORY
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Each state has a specific responsibility.&lt;/p&gt;

&lt;p&gt;This makes the system easier to debug and audit than an open-ended agent loop.&lt;/p&gt;




&lt;h1&gt;
  
  
  Dynamic Next-Best Action
&lt;/h1&gt;

&lt;p&gt;A particularly important feature is that the recommended action can change after new evidence arrives.&lt;/p&gt;

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

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Initial Investigation
        ↓
VERIFY_WITH_CUSTOMER
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The customer then denies the transaction.&lt;/p&gt;

&lt;p&gt;The system reassesses:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Customer Denial
        ↓
BLOCK_CARD
        +
CREATE_CASE
        +
MONITOR_CONNECTED_CARDS
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The system also records:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;what_changed
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This creates an audit trail explaining why the action changed.&lt;/p&gt;

&lt;p&gt;The goal is not simply:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;"What did the system decide?"&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;but:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;"What evidence caused the system to change its decision?"&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h1&gt;
  
  
  Stopping Rule
&lt;/h1&gt;

&lt;p&gt;Autonomous systems need to know when to stop.&lt;/p&gt;

&lt;p&gt;Otherwise an agent can continuously gather evidence without improving the decision.&lt;/p&gt;

&lt;p&gt;SENTINEL stops when one of the configured stopping conditions is met.&lt;/p&gt;

&lt;p&gt;For example:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Fraud probability ≥ 0.85
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



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

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Fraud probability ≤ 0.15
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;provided sufficient independent evidence exists.&lt;/p&gt;

&lt;p&gt;Other stopping conditions include:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Customer verification settles the dispute&lt;/li&gt;
&lt;li&gt;Authentication settles the transaction&lt;/li&gt;
&lt;li&gt;Additional graph traversal cannot change the permitted policy action&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This turns investigation into a bounded process rather than an open-ended agent loop.&lt;/p&gt;




&lt;h1&gt;
  
  
  LLM Synthesis Layer
&lt;/h1&gt;

&lt;p&gt;Once the deterministic investigation is complete, the LLM is used for synthesis.&lt;/p&gt;

&lt;p&gt;We used:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Groq
LLaMA 3.3 70B
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;for:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Executive case summaries&lt;/li&gt;
&lt;li&gt;Evidence explanations&lt;/li&gt;
&lt;li&gt;Policy-rule explanations&lt;/li&gt;
&lt;li&gt;FinCEN SAR narrative generation&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The important architectural boundary remains:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;LLM
  ↓
Explanation

Policy Engine
  ↓
Authority
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;If the LLM produces an explanation that doesn't match the deterministic evidence, the explanation can be regenerated without changing the underlying policy decision.&lt;/p&gt;




&lt;h1&gt;
  
  
  Interactive Analyst Cockpit
&lt;/h1&gt;

&lt;p&gt;We also built an interactive web cockpit for investigators.&lt;/p&gt;

&lt;p&gt;The dashboard includes:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Fraud case overview&lt;/li&gt;
&lt;li&gt;Live graph visualization&lt;/li&gt;
&lt;li&gt;Multi-hop relationship exploration&lt;/li&gt;
&lt;li&gt;Evidence timeline&lt;/li&gt;
&lt;li&gt;Next-best-action display&lt;/li&gt;
&lt;li&gt;Watchlist management&lt;/li&gt;
&lt;li&gt;SAR generation&lt;/li&gt;
&lt;li&gt;Audit logs&lt;/li&gt;
&lt;li&gt;CSV exports&lt;/li&gt;
&lt;li&gt;AI Copilot&lt;/li&gt;
&lt;li&gt;Live MCP investigation&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The cockpit is available at:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://task-4-nvan.onrender.com/" rel="noopener noreferrer"&gt;https://task-4-nvan.onrender.com/&lt;/a&gt;&lt;/p&gt;




&lt;h1&gt;
  
  
  Live MCP Investigation
&lt;/h1&gt;

&lt;p&gt;The MCP investigation modal allows an analyst or evaluator to select a case and execute the complete investigation against the live TigerGraph environment.&lt;/p&gt;

&lt;p&gt;The pipeline becomes:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Case
 ↓
MCP Tools
 ↓
TigerGraph
 ↓
Evidence
 ↓
Policy Engine
 ↓
LLM Explanation
 ↓
Case Write-back
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The fast-path investigation completed in approximately &lt;strong&gt;1.2 seconds&lt;/strong&gt; in our benchmark environment.&lt;/p&gt;

&lt;p&gt;This is a project runtime measurement, not a production SLA.&lt;/p&gt;




&lt;h1&gt;
  
  
  Benchmark: 20 Ground-Truth Cases
&lt;/h1&gt;

&lt;p&gt;We evaluated SENTINEL against 20 benchmark cases:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;HHG-001 → HHG-020
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Our validation suite produced:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;20 / 20 PASS
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The benchmark included both fraudulent and legitimate cases.&lt;/p&gt;

&lt;h2&gt;
  
  
  Complete Benchmark Results
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Case&lt;/th&gt;
&lt;th&gt;Trigger&lt;/th&gt;
&lt;th&gt;Verdict&lt;/th&gt;
&lt;th&gt;Fraud Probability&lt;/th&gt;
&lt;th&gt;Primary Pattern&lt;/th&gt;
&lt;th&gt;Exposure&lt;/th&gt;
&lt;th&gt;SAR&lt;/th&gt;
&lt;th&gt;Validation&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;HHG-001&lt;/td&gt;
&lt;td&gt;Risk Score 0.61&lt;/td&gt;
&lt;td&gt;Legitimate&lt;/td&gt;
&lt;td&gt;0.07&lt;/td&gt;
&lt;td&gt;None / Recurring&lt;/td&gt;
&lt;td&gt;$77.07&lt;/td&gt;
&lt;td&gt;No&lt;/td&gt;
&lt;td&gt;PASS&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;HHG-002&lt;/td&gt;
&lt;td&gt;Risk Score 0.79&lt;/td&gt;
&lt;td&gt;Fraud&lt;/td&gt;
&lt;td&gt;0.95&lt;/td&gt;
&lt;td&gt;CNP Fraud&lt;/td&gt;
&lt;td&gt;$292.36&lt;/td&gt;
&lt;td&gt;No&lt;/td&gt;
&lt;td&gt;PASS&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;HHG-003&lt;/td&gt;
&lt;td&gt;Customer Report&lt;/td&gt;
&lt;td&gt;Legitimate&lt;/td&gt;
&lt;td&gt;0.07&lt;/td&gt;
&lt;td&gt;None / Recurring&lt;/td&gt;
&lt;td&gt;$49.00&lt;/td&gt;
&lt;td&gt;No&lt;/td&gt;
&lt;td&gt;PASS&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;HHG-004&lt;/td&gt;
&lt;td&gt;Customer Report&lt;/td&gt;
&lt;td&gt;Fraud&lt;/td&gt;
&lt;td&gt;0.90&lt;/td&gt;
&lt;td&gt;Card Testing&lt;/td&gt;
&lt;td&gt;$55.89&lt;/td&gt;
&lt;td&gt;Yes&lt;/td&gt;
&lt;td&gt;PASS&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;HHG-005&lt;/td&gt;
&lt;td&gt;Risk Score 0.54&lt;/td&gt;
&lt;td&gt;Fraud&lt;/td&gt;
&lt;td&gt;0.94&lt;/td&gt;
&lt;td&gt;CNP New Device&lt;/td&gt;
&lt;td&gt;$100.07&lt;/td&gt;
&lt;td&gt;Yes&lt;/td&gt;
&lt;td&gt;PASS&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;HHG-006&lt;/td&gt;
&lt;td&gt;Customer Report&lt;/td&gt;
&lt;td&gt;Fraud&lt;/td&gt;
&lt;td&gt;0.93&lt;/td&gt;
&lt;td&gt;Card Testing&lt;/td&gt;
&lt;td&gt;$1,906.07&lt;/td&gt;
&lt;td&gt;Yes&lt;/td&gt;
&lt;td&gt;PASS&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;HHG-007&lt;/td&gt;
&lt;td&gt;Risk Score 0.87&lt;/td&gt;
&lt;td&gt;Legitimate&lt;/td&gt;
&lt;td&gt;0.08&lt;/td&gt;
&lt;td&gt;None / Subscription&lt;/td&gt;
&lt;td&gt;$111.92&lt;/td&gt;
&lt;td&gt;No&lt;/td&gt;
&lt;td&gt;PASS&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;HHG-008&lt;/td&gt;
&lt;td&gt;Customer Report&lt;/td&gt;
&lt;td&gt;Legitimate&lt;/td&gt;
&lt;td&gt;0.07&lt;/td&gt;
&lt;td&gt;None / Recurring&lt;/td&gt;
&lt;td&gt;$55.68&lt;/td&gt;
&lt;td&gt;No&lt;/td&gt;
&lt;td&gt;PASS&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;HHG-009&lt;/td&gt;
&lt;td&gt;Customer Report&lt;/td&gt;
&lt;td&gt;Fraud&lt;/td&gt;
&lt;td&gt;0.95&lt;/td&gt;
&lt;td&gt;CNP New Device&lt;/td&gt;
&lt;td&gt;$30.02&lt;/td&gt;
&lt;td&gt;Yes&lt;/td&gt;
&lt;td&gt;PASS&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;HHG-010&lt;/td&gt;
&lt;td&gt;Risk Score 0.90&lt;/td&gt;
&lt;td&gt;Fraud&lt;/td&gt;
&lt;td&gt;0.96&lt;/td&gt;
&lt;td&gt;CNP New Device&lt;/td&gt;
&lt;td&gt;$1,000.03&lt;/td&gt;
&lt;td&gt;Yes&lt;/td&gt;
&lt;td&gt;PASS&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;HHG-011&lt;/td&gt;
&lt;td&gt;Customer Report&lt;/td&gt;
&lt;td&gt;Legitimate&lt;/td&gt;
&lt;td&gt;0.08&lt;/td&gt;
&lt;td&gt;None / Recurring&lt;/td&gt;
&lt;td&gt;$131.30&lt;/td&gt;
&lt;td&gt;No&lt;/td&gt;
&lt;td&gt;PASS&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;HHG-012&lt;/td&gt;
&lt;td&gt;Risk Score 0.55&lt;/td&gt;
&lt;td&gt;Legitimate&lt;/td&gt;
&lt;td&gt;0.07&lt;/td&gt;
&lt;td&gt;None / Recurring&lt;/td&gt;
&lt;td&gt;$30.91&lt;/td&gt;
&lt;td&gt;No&lt;/td&gt;
&lt;td&gt;PASS&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;HHG-013&lt;/td&gt;
&lt;td&gt;Risk Score 0.76&lt;/td&gt;
&lt;td&gt;Fraud&lt;/td&gt;
&lt;td&gt;0.95&lt;/td&gt;
&lt;td&gt;CNP New Device&lt;/td&gt;
&lt;td&gt;$35.66&lt;/td&gt;
&lt;td&gt;Yes&lt;/td&gt;
&lt;td&gt;PASS&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;HHG-014&lt;/td&gt;
&lt;td&gt;Analyst Request&lt;/td&gt;
&lt;td&gt;Fraud&lt;/td&gt;
&lt;td&gt;0.95&lt;/td&gt;
&lt;td&gt;CNP New Device&lt;/td&gt;
&lt;td&gt;$74.96&lt;/td&gt;
&lt;td&gt;Yes&lt;/td&gt;
&lt;td&gt;PASS&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;HHG-015&lt;/td&gt;
&lt;td&gt;Risk Score 0.77&lt;/td&gt;
&lt;td&gt;Fraud&lt;/td&gt;
&lt;td&gt;0.92&lt;/td&gt;
&lt;td&gt;CNP New Device&lt;/td&gt;
&lt;td&gt;$599.94&lt;/td&gt;
&lt;td&gt;Yes&lt;/td&gt;
&lt;td&gt;PASS&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;HHG-016&lt;/td&gt;
&lt;td&gt;Customer Report&lt;/td&gt;
&lt;td&gt;Fraud&lt;/td&gt;
&lt;td&gt;0.94&lt;/td&gt;
&lt;td&gt;CNP New Device&lt;/td&gt;
&lt;td&gt;$59.67&lt;/td&gt;
&lt;td&gt;Yes&lt;/td&gt;
&lt;td&gt;PASS&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;HHG-017&lt;/td&gt;
&lt;td&gt;Risk Score 0.57&lt;/td&gt;
&lt;td&gt;Fraud&lt;/td&gt;
&lt;td&gt;0.93&lt;/td&gt;
&lt;td&gt;Card Testing&lt;/td&gt;
&lt;td&gt;$300.14&lt;/td&gt;
&lt;td&gt;Yes&lt;/td&gt;
&lt;td&gt;PASS&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;HHG-018&lt;/td&gt;
&lt;td&gt;Customer Report&lt;/td&gt;
&lt;td&gt;Legitimate&lt;/td&gt;
&lt;td&gt;0.07&lt;/td&gt;
&lt;td&gt;None / Recurring&lt;/td&gt;
&lt;td&gt;$39.08&lt;/td&gt;
&lt;td&gt;No&lt;/td&gt;
&lt;td&gt;PASS&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;HHG-019&lt;/td&gt;
&lt;td&gt;Risk Score 0.90&lt;/td&gt;
&lt;td&gt;Fraud&lt;/td&gt;
&lt;td&gt;0.91&lt;/td&gt;
&lt;td&gt;CNP New Device&lt;/td&gt;
&lt;td&gt;$99.92&lt;/td&gt;
&lt;td&gt;Yes&lt;/td&gt;
&lt;td&gt;PASS&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;HHG-020&lt;/td&gt;
&lt;td&gt;Risk Score 0.52&lt;/td&gt;
&lt;td&gt;Fraud&lt;/td&gt;
&lt;td&gt;0.95&lt;/td&gt;
&lt;td&gt;CNP New Device&lt;/td&gt;
&lt;td&gt;$125.08&lt;/td&gt;
&lt;td&gt;Yes&lt;/td&gt;
&lt;td&gt;PASS&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;




&lt;h1&gt;
  
  
  Aggregate Benchmark Metrics
&lt;/h1&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Metric&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;Benchmark Cases&lt;/td&gt;
&lt;td&gt;20&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Validation Pass Rate&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;20 / 20 — 100%&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Fraud Cases&lt;/td&gt;
&lt;td&gt;13&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Legitimate Cases&lt;/td&gt;
&lt;td&gt;7&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Regulatory Filings&lt;/td&gt;
&lt;td&gt;12&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Dynamic Policy Progression&lt;/td&gt;
&lt;td&gt;20 / 20&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Total Fraud Exposure Managed&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;$5,174.77&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Average Fraud Probability — Fraud Cases&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;93.5%&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Average Fraud Probability — Legitimate Cases&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;7.3%&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Live Fast-Path Investigation&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;~1.2 seconds&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;These are results from our project benchmark and should not be interpreted as production fraud-detection performance.&lt;/p&gt;




&lt;h1&gt;
  
  
  Benchmark Examples
&lt;/h1&gt;

&lt;h2&gt;
  
  
  HHG-003 — Legitimate Recurring Behavior
&lt;/h2&gt;

&lt;p&gt;The system identified recurring transaction behavior and retrieved historical cleared cases with similar patterns.&lt;/p&gt;

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

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Verdict:
Legitimate

Fraud Probability:
0.07

Final Actions:
ALLOW_TRANSACTION
CLOSE_NO_FRAUD
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This case demonstrated why negative evidence matters.&lt;/p&gt;




&lt;h2&gt;
  
  
  HHG-017 — Card Testing
&lt;/h2&gt;

&lt;p&gt;The system detected a card-testing pattern.&lt;/p&gt;

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

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Verdict:
Fraud

Fraud Probability:
0.93

Primary Pattern:
card_testing
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The system updated its recommended actions after evidence evaluation.&lt;/p&gt;




&lt;h2&gt;
  
  
  HHG-014 — Shared Device Network
&lt;/h2&gt;

&lt;p&gt;The investigation exposed a large connected-card structure through graph traversal.&lt;/p&gt;

&lt;p&gt;The important evidence wasn't isolated to the transaction itself.&lt;/p&gt;

&lt;p&gt;It came from:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Transaction
    ↓
Device
    ↓
Multiple Cards
    ↓
Historical Cases
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This is exactly the type of relationship that motivated the graph-native architecture.&lt;/p&gt;




&lt;h1&gt;
  
  
  What We Learned
&lt;/h1&gt;

&lt;h2&gt;
  
  
  1. Policy and Reasoning Should Be Separated
&lt;/h2&gt;

&lt;p&gt;Our biggest architectural lesson was simple:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Don't give an LLM authority just because it can reason about the problem.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;The model is useful for language and synthesis.&lt;/p&gt;

&lt;p&gt;The policy engine is better suited for deterministic authorization.&lt;/p&gt;




&lt;h2&gt;
  
  
  2. Negative Evidence Is Extremely Valuable
&lt;/h2&gt;

&lt;p&gt;A fraud system that only remembers fraud can become biased toward finding fraud.&lt;/p&gt;

&lt;p&gt;Cleared historical cases provide an important counterweight.&lt;/p&gt;

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

&lt;blockquote&gt;
&lt;p&gt;"Have we seen this pattern before and cleared it?"&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h2&gt;
  
  
  3. Graph Context Improves Retrieval
&lt;/h2&gt;

&lt;p&gt;Semantic similarity answers:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;"What sounds similar?"&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Graph adjacency answers:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;"What is connected?"&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Combining both gives us a richer retrieval signal.&lt;/p&gt;




&lt;h2&gt;
  
  
  4. Agentic Does Not Mean Uncontrolled
&lt;/h2&gt;

&lt;p&gt;We initially thought of an agent as something that could freely decide which actions to execute.&lt;/p&gt;

&lt;p&gt;Our final architecture was different.&lt;/p&gt;

&lt;p&gt;The agent has freedom to:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Investigate
Retrieve
Compare
Request evidence
Reassess
Explain
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;But it operates inside deterministic boundaries for:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Policy
Approval
Actions
Auditability
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;That distinction became one of the most important design principles of SENTINEL.&lt;/p&gt;




&lt;h1&gt;
  
  
  Engineering Challenges
&lt;/h1&gt;

&lt;h2&gt;
  
  
  Deterministic Card Reconstruction
&lt;/h2&gt;

&lt;p&gt;The source transaction dataset required deterministic reconstruction of card relationships from partially masked identifiers.&lt;/p&gt;

&lt;p&gt;The ordering of missing and sequential card identifiers mattered for maintaining consistent mappings across the dataset.&lt;/p&gt;

&lt;p&gt;This was not a glamorous problem, but it was critical.&lt;/p&gt;

&lt;p&gt;Small preprocessing inconsistencies can propagate into:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Card Mapping
      ↓
Graph Relationships
      ↓
Fraud Detection
      ↓
Benchmark Results
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Deterministic preprocessing therefore became part of the investigation pipeline rather than a separate data-cleaning concern.&lt;/p&gt;




&lt;h1&gt;
  
  
  Asynchronous UI Orchestration
&lt;/h1&gt;

&lt;p&gt;The frontend initially relied on independent timers and asynchronous operations.&lt;/p&gt;

&lt;p&gt;That introduced race conditions.&lt;/p&gt;

&lt;p&gt;For example:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Graph Loading
       ↓
Evidence Animation
       ↓
Policy Result
       ↓
Case Write-back
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;could appear out of order.&lt;/p&gt;

&lt;p&gt;We replaced this with sequential asynchronous orchestration so each stage completed before the next stage began.&lt;/p&gt;

&lt;p&gt;The result was a much more predictable investigation experience.&lt;/p&gt;




&lt;h1&gt;
  
  
  What We Would Build Next
&lt;/h1&gt;

&lt;h2&gt;
  
  
  1. Graph Neural Networks
&lt;/h2&gt;

&lt;p&gt;We would investigate GCN/RGCN-based models for learning structural fraud representations directly from the transaction graph.&lt;/p&gt;

&lt;p&gt;The goal would be to complement deterministic detectors with learned graph-level features.&lt;/p&gt;




&lt;h2&gt;
  
  
  2. Real-Time Streaming
&lt;/h2&gt;

&lt;p&gt;A production-oriented version could integrate streaming ingestion such as Kafka:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Transaction Stream
        ↓
Kafka
        ↓
TigerGraph
        ↓
Investigation Agent
        ↓
Policy Engine
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This would allow investigations to begin immediately after authorization events.&lt;/p&gt;




&lt;h2&gt;
  
  
  3. Human Approval Webhooks
&lt;/h2&gt;

&lt;p&gt;L1 and L2 reviewers could receive actionable notifications through systems such as Slack or Microsoft Teams.&lt;/p&gt;

&lt;p&gt;For example:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Fraud Investigation

Exposure: $1,906
Connected Cards: 299
Required Approval: L2

[Review Case]
[Approve]
[Reject]
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This would connect the autonomous investigation pipeline with real human governance.&lt;/p&gt;




&lt;h2&gt;
  
  
  4. Regulatory Submission Integration
&lt;/h2&gt;

&lt;p&gt;The current system can generate structured regulatory output.&lt;/p&gt;

&lt;p&gt;A future implementation could integrate directly with an appropriate regulatory filing environment after the necessary security, compliance, authorization, and certification requirements are satisfied.&lt;/p&gt;




&lt;h1&gt;
  
  
  Project Structure
&lt;/h1&gt;

&lt;p&gt;A simplified view of the implementation:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Task-4/
│
├── src/
│   ├── agent/
│   │   ├── orchestrator.py
│   │   └── llm_adapter.py
│   │
│   ├── graph/
│   │   └── mcp_client.py
│   │
│   ├── detectors/
│   │   └── ...
│   │
│   ├── memory/
│   │   └── retriever.py
│   │
│   └── policy/
│       └── policy_engine.py
│
├── cases/
│   └── generated/
│
├── scripts/
│   ├── embed_cases.py
│   └── validate_answers.py
│
├── docs/
│   ├── BENCHMARK_REPORT.md
│   └── DEMO_VIDEO_SCRIPT.md
│
└── README.md
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h1&gt;
  
  
  Reproducibility
&lt;/h1&gt;

&lt;p&gt;The project source code and implementation are available here:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;GitHub:&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
&lt;a href="https://github.com/tsrinath2007/Task-4" rel="noopener noreferrer"&gt;https://github.com/tsrinath2007/Task-4&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The live investigation cockpit is available here:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;SENTINEL Cockpit:&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
&lt;a href="https://task-4-nvan.onrender.com/" rel="noopener noreferrer"&gt;https://task-4-nvan.onrender.com/&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The benchmark validation can be reproduced using the project's validation tooling:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;python scripts/validate_answers.py
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h1&gt;
  
  
  Hackathon Rubric Alignment
&lt;/h1&gt;

&lt;p&gt;The architecture was designed to address the major evaluation dimensions of the hackathon.&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Rubric Category&lt;/th&gt;
&lt;th&gt;Weight&lt;/th&gt;
&lt;th&gt;How SENTINEL Addresses It&lt;/th&gt;
&lt;th&gt;Evidence&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Investigation Accuracy&lt;/td&gt;
&lt;td&gt;25%&lt;/td&gt;
&lt;td&gt;8 deterministic detectors + legitimacy checklist&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;src/detectors/&lt;/code&gt;, generated cases&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Next Best Action&lt;/td&gt;
&lt;td&gt;25%&lt;/td&gt;
&lt;td&gt;Pre-evidence and post-evidence action gating&lt;/td&gt;
&lt;td&gt;&lt;code&gt;src/policy/policy_engine.py&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Case Summary &amp;amp; Explainability&lt;/td&gt;
&lt;td&gt;10%&lt;/td&gt;
&lt;td&gt;LLM synthesis, policy explanations, SAR narratives&lt;/td&gt;
&lt;td&gt;&lt;code&gt;src/agent/llm_adapter.py&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Agentic Design &amp;amp; Engineering&lt;/td&gt;
&lt;td&gt;15%&lt;/td&gt;
&lt;td&gt;8-stage state machine + MCP + graph write-back&lt;/td&gt;
&lt;td&gt;&lt;code&gt;src/agent/orchestrator.py&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Innovation&lt;/td&gt;
&lt;td&gt;15%&lt;/td&gt;
&lt;td&gt;GraphRAG + adjacency boost + negative evidence&lt;/td&gt;
&lt;td&gt;&lt;code&gt;src/memory/retriever.py&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Demo Quality&lt;/td&gt;
&lt;td&gt;10%&lt;/td&gt;
&lt;td&gt;Interactive cockpit + graph visualization + MCP modal&lt;/td&gt;
&lt;td&gt;Live cockpit&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;The benchmark validation suite produced:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;20 / 20 PASS
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h1&gt;
  
  
  Key Takeaways
&lt;/h1&gt;

&lt;p&gt;Building SENTINEL taught us that autonomous fraud investigation isn't simply about adding an LLM to a fraud detector.&lt;/p&gt;

&lt;p&gt;The more interesting engineering problem is combining several different forms of intelligence:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;                    SENTINEL
                       │
        ┌──────────────┼──────────────┐
        │              │              │
        ▼              ▼              ▼
     GRAPH          RULES          MEMORY
   TigerGraph     Policy Engine    GraphRAG
        │              │              │
        └──────────────┼──────────────┘
                       │
                       ▼
                    AGENT
                       │
                       ▼
                  LLM SYNTHESIS
                       │
                       ▼
                HUMAN-READABLE
                  EXPLANATION
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The graph provides &lt;strong&gt;relationships&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;The detectors provide &lt;strong&gt;evidence&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;GraphRAG provides &lt;strong&gt;historical context&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;The policy engine provides &lt;strong&gt;authority&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;The agent provides &lt;strong&gt;orchestration&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;The LLM provides &lt;strong&gt;explanation&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;That separation is what makes SENTINEL more than a chatbot sitting on top of a database.&lt;/p&gt;




&lt;h1&gt;
  
  
  Conclusion
&lt;/h1&gt;

&lt;p&gt;Fraud rarely exists as a single suspicious transaction.&lt;/p&gt;

&lt;p&gt;It exists as a network.&lt;/p&gt;

&lt;p&gt;A device connects cards.&lt;/p&gt;

&lt;p&gt;Cards connect transactions.&lt;/p&gt;

&lt;p&gt;Transactions connect customers, regions, merchants, and historical cases.&lt;/p&gt;

&lt;p&gt;That is why we built SENTINEL around a graph.&lt;/p&gt;

&lt;p&gt;Our goal was not to create an LLM that simply says:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;"This looks like fraud."&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;We wanted to build an investigation system that can answer:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;What happened?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What is connected to it?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What evidence supports the conclusion?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What historical cases are relevant?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What policy permits us to do next?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;And why did the recommended action change?&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;The resulting architecture combines TigerGraph, MCP, GraphRAG, deterministic policy enforcement, agentic orchestration, and LLM synthesis into a single investigation workflow.&lt;/p&gt;

&lt;p&gt;And most importantly, we learned that in high-impact systems:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Agentic doesn't have to mean uncontrolled.&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;The most useful autonomous systems may be the ones where the model has enough freedom to investigate—but enough constraints to remain auditable and predictable.&lt;/p&gt;




&lt;h1&gt;
  
  
  Built by Team GOA-T
&lt;/h1&gt;

&lt;h3&gt;
  
  
  Thota Sai Eswar Srinath
&lt;/h3&gt;

&lt;p&gt;Team Leader &amp;amp; Agentic Architecture&lt;/p&gt;

&lt;h3&gt;
  
  
  Nikhil Kadiri
&lt;/h3&gt;

&lt;p&gt;Graph Systems &amp;amp; TigerGraph Traversal Engineering&lt;/p&gt;

&lt;h3&gt;
  
  
  Bondugula Pranav Teja
&lt;/h3&gt;

&lt;p&gt;Policy Engine &amp;amp; GraphRAG Implementation&lt;/p&gt;




&lt;h1&gt;
  
  
  Project Links
&lt;/h1&gt;

&lt;p&gt;🚀 &lt;strong&gt;Live Cockpit:&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
&lt;a href="https://task-4-nvan.onrender.com/" rel="noopener noreferrer"&gt;https://task-4-nvan.onrender.com/&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;💻 &lt;strong&gt;GitHub Repository:&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
&lt;a href="https://github.com/tsrinath2007/Task-4" rel="noopener noreferrer"&gt;https://github.com/tsrinath2007/Task-4&lt;/a&gt;&lt;/p&gt;




&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;SENTINEL — Investigate the transaction. Understand the network. Enforce the policy.&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;

</description>
      <category>agents</category>
      <category>ai</category>
      <category>devchallenge</category>
      <category>rag</category>
    </item>
  </channel>
</rss>
