<?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: Ritesh Kumar</title>
    <description>The latest articles on DEV Community by Ritesh Kumar (@riteshkmr).</description>
    <link>https://dev.to/riteshkmr</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.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F3878899%2F12e82869-49f7-43b4-bda9-49b590e30f7b.jpeg</url>
      <title>DEV Community: Ritesh Kumar</title>
      <link>https://dev.to/riteshkmr</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/riteshkmr"/>
    <language>en</language>
    <item>
      <title>Your approval logic is a future audit problem</title>
      <dc:creator>Ritesh Kumar</dc:creator>
      <pubDate>Tue, 14 Apr 2026 16:11:29 +0000</pubDate>
      <link>https://dev.to/riteshkmr/your-approval-logic-is-a-future-audit-problem-ec0</link>
      <guid>https://dev.to/riteshkmr/your-approval-logic-is-a-future-audit-problem-ec0</guid>
      <description>&lt;p&gt;If your system has this:&lt;/p&gt;

&lt;p&gt;if amount &amp;gt; 10000:&lt;br&gt;
    require_approval()&lt;br&gt;
elif amount &amp;lt; 1000:&lt;br&gt;
    approve()&lt;br&gt;
else:&lt;br&gt;
    send_to_manager()&lt;/p&gt;

&lt;p&gt;You don't have logic.&lt;br&gt;
You have a future audit problem.&lt;/p&gt;

&lt;p&gt;Every approval system built this way eventually becomes:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;untraceable&lt;/li&gt;
&lt;li&gt;impossible to explain&lt;/li&gt;
&lt;li&gt;a nightmare when compliance shows up&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Auditors don't ask "does it work?"&lt;br&gt;
They ask "why was this specific transaction approved &lt;br&gt;
on March 3rd at 2pm by this agent?"&lt;/p&gt;

&lt;p&gt;If your answer is "let me check the code" —&lt;br&gt;
you've already lost.&lt;/p&gt;




&lt;p&gt;I built a gate that sits between intent and execution:&lt;/p&gt;

&lt;p&gt;pip install sovigl&lt;/p&gt;

&lt;p&gt;import sovigl&lt;/p&gt;

&lt;p&gt;decision = sovigl.evaluate(&lt;br&gt;
    action="expense.submit",&lt;br&gt;
    context={&lt;br&gt;
        "amount": 5000,&lt;br&gt;
        "employee_id": "E123"&lt;br&gt;
    }&lt;br&gt;
)&lt;/p&gt;

&lt;p&gt;print(decision.status)  # approved / pending / blocked&lt;/p&gt;

&lt;p&gt;That's the entire integration.&lt;/p&gt;




&lt;p&gt;What you get back on every single call:&lt;/p&gt;

&lt;p&gt;decision.status        # approved / pending / blocked&lt;br&gt;
decision.reason        # why this decision was made&lt;br&gt;
decision.decision_id   # permanent unique reference&lt;br&gt;
decision.approval_id   # present when human review needed&lt;br&gt;
decision.cdt           # full decision metadata&lt;/p&gt;

&lt;p&gt;Not logs you write yourself.&lt;br&gt;
Not comments in the code.&lt;br&gt;
Structured, tamper-proof, permanent.&lt;/p&gt;




&lt;p&gt;The three outcomes:&lt;/p&gt;

&lt;p&gt;500    → approved  (within policy, executes immediately)&lt;br&gt;
5000   → pending   (routes to human approver, waits)&lt;br&gt;
100000 → blocked   (policy violation, hard stop)&lt;/p&gt;

&lt;p&gt;if decision.approved:&lt;br&gt;
    execute()&lt;br&gt;
elif decision.pending:&lt;br&gt;
    notify_approver(decision.approval_id)&lt;br&gt;
elif decision.blocked:&lt;br&gt;
    raise PolicyViolation(decision.reason)&lt;/p&gt;




&lt;p&gt;Why this matters especially for AI agents:&lt;/p&gt;

&lt;p&gt;AI agents don't pause. They execute at machine speed.&lt;/p&gt;

&lt;p&gt;Without a gate, a misconfigured agent — or a prompt&lt;br&gt;
injection attack — can approve transactions before&lt;br&gt;
any human sees them.&lt;/p&gt;

&lt;p&gt;SOVIGL sits between the agent's intent and execution.&lt;br&gt;
The agent decides what to do.&lt;br&gt;
SOVIGL decides if it's allowed to.&lt;/p&gt;




&lt;p&gt;Every decision automatically satisfies:&lt;/p&gt;

&lt;p&gt;🇪🇺 EU AI Act — Art. 9, 12, 13, 14&lt;br&gt;
🇸🇬 MAS FEAT — Accountability, Traceability, Transparency&lt;br&gt;
🇺🇸 NIST AI RMF — Govern, Measure, Manage, Monitor&lt;br&gt;
🇮🇳 RBI FREE-AI — Rec 04, 07, 11, 12, 16, 18, 21, 24, 26&lt;/p&gt;

&lt;p&gt;Not claims. Live verified controls.&lt;br&gt;
See the proof:&lt;br&gt;
&lt;a href="https://web-production-e334b.up.railway.app/dashboard" rel="noopener noreferrer"&gt;https://web-production-e334b.up.railway.app/dashboard&lt;/a&gt;&lt;/p&gt;




&lt;p&gt;Works in Node too:&lt;/p&gt;

&lt;p&gt;const sovigl = require("sovigl");&lt;/p&gt;

&lt;p&gt;const decision = await sovigl.evaluate({&lt;br&gt;
    action: "expense.submit",&lt;br&gt;
    context: { amount: 5000, employee_id: "E123" }&lt;br&gt;
});&lt;/p&gt;

&lt;p&gt;console.log(decision.status);&lt;/p&gt;




&lt;p&gt;pip install sovigl&lt;/p&gt;

&lt;p&gt;GitHub: &lt;a href="https://github.com/riteshkumar10000/sovigl-sdk" rel="noopener noreferrer"&gt;https://github.com/riteshkumar10000/sovigl-sdk&lt;/a&gt;&lt;br&gt;
Early access for production: &lt;a href="mailto:sovigl100@gmail.com"&gt;sovigl100@gmail.com&lt;/a&gt;&lt;/p&gt;




&lt;p&gt;How are you handling approval logic today?&lt;br&gt;
Still if/else? A rules engine? Something else?&lt;/p&gt;

&lt;p&gt;Genuinely curious.&lt;/p&gt;

</description>
      <category>python</category>
      <category>ai</category>
      <category>webdev</category>
      <category>opensource</category>
    </item>
  </channel>
</rss>
