<?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: Parth Jaina</title>
    <description>The latest articles on DEV Community by Parth Jaina (@parthjaina2107).</description>
    <link>https://dev.to/parthjaina2107</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%2F4192621%2Fec60c239-024c-485e-9021-f3cd604fcc37.jpg</url>
      <title>DEV Community: Parth Jaina</title>
      <link>https://dev.to/parthjaina2107</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/parthjaina2107"/>
    <language>en</language>
    <item>
      <title>A policy changed. Which company documents just became wrong?</title>
      <dc:creator>Parth Jaina</dc:creator>
      <pubDate>Sun, 18 Oct 2026 17:56:20 +0000</pubDate>
      <link>https://dev.to/parthjaina2107/a-policy-changed-which-company-documents-just-became-wrong-3pdk</link>
      <guid>https://dev.to/parthjaina2107/a-policy-changed-which-company-documents-just-became-wrong-3pdk</guid>
      <description>&lt;p&gt;A company changes its refund window from 30 days to 14.&lt;/p&gt;

&lt;p&gt;The approved policy gets updated. But the help centre still says 30 days. A saved AI reply repeats the old promise. A refund-intake workflow depends on that help page without mentioning a duration at all.&lt;/p&gt;

&lt;p&gt;The decision changed. The company’s knowledge didn’t catch up.&lt;/p&gt;

&lt;p&gt;That is the problem we built &lt;strong&gt;Ripple&lt;/strong&gt; to solve.&lt;/p&gt;

&lt;p&gt;Ripple is a graph-powered company brain built with &lt;strong&gt;FalkorDB and Gemini&lt;/strong&gt; for &lt;strong&gt;Graph Hacks 2026&lt;/strong&gt;, under &lt;strong&gt;Track 03: Company Brain&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;It connects policies to the documents, claims, workflows and saved agent replies that depend on them. When a policy changes, Ripple finds what needs attention, explains why, and helps an owner review and repair it.&lt;/p&gt;

&lt;p&gt;🔗 &lt;a href="https://ripple-company-brain.vercel.app" rel="noopener noreferrer"&gt;Try Ripple&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;🎬 &lt;a href="https://drive.google.com/file/d/1rE86BOqE2P8hofZ_Y7SbMzFHWnYHpw_3/view?usp=sharing" rel="noopener noreferrer"&gt;Watch the three-minute working demo&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;💻 &lt;a href="https://github.com/parthjaina2107/ripple-company-brain" rel="noopener noreferrer"&gt;Explore the source code&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Why searching documents wasn’t enough
&lt;/h2&gt;

&lt;p&gt;Our starting question was simple:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;When one policy changes, how do we find everything that silently becomes wrong?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Searching for “30 days” catches some outdated statements, but it leaves several questions unanswered:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Does that number describe refunds, trials or cancellation notice?&lt;/li&gt;
&lt;li&gt;Does it apply to self-serve customers or enterprise customers?&lt;/li&gt;
&lt;li&gt;Is it an old policy or a future proposal?&lt;/li&gt;
&lt;li&gt;Which workflows depend on the document without repeating its wording?&lt;/li&gt;
&lt;li&gt;Why should a particular source be changed?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;These are relationship questions. We needed to understand how records connect, alongside what each record says.&lt;/p&gt;

&lt;p&gt;That made a graph database a useful foundation.&lt;/p&gt;

&lt;h2&gt;
  
  
  How we modeled company knowledge in FalkorDB
&lt;/h2&gt;

&lt;p&gt;FalkorDB is Ripple’s primary database for company knowledge.&lt;/p&gt;

&lt;p&gt;We store policies, documents, reviewed claims, workflows, saved agent replies, owners, decisions, reviews, corrections, research snapshots and publication receipts.&lt;/p&gt;

&lt;p&gt;Domain records use native &lt;code&gt;Entity&lt;/code&gt; nodes with stable IDs, a queryable &lt;code&gt;kind&lt;/code&gt; and a typed JSON payload. Relationships are native graph edges.&lt;/p&gt;

&lt;p&gt;The core dependency model 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;Workflow → DEPENDS_ON → Document → ASSERTS → Claim

Claim → DEPENDS_ON → Policy version → DEPENDS_ON → Policy topic

Document → OWNED_BY → Owner

Decision → CREATES → Review → REPAIRS → Document

Publication receipt → DEPENDS_ON → Document
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The claim node turned out to be particularly useful.&lt;/p&gt;

&lt;p&gt;A single document can contain both a trial statement and a refund statement. Connecting those assertions separately lets a refund change affect the relevant claim while preserving unrelated information.&lt;/p&gt;

&lt;p&gt;Policy-topic anchors connect different versions of the same policy. That allows Ripple to discover an old claim even after several newer decisions exist.&lt;/p&gt;

&lt;p&gt;The graph visualization is a view of these stored relationships. FalkorDB also powers retrieval, dependency analysis, repairs and persistent recall. Removing the database disables those core features.&lt;/p&gt;

&lt;p&gt;SQLite is limited to local authentication records. The development preview simulator is separate from the submitted FalkorDB-backed runtime.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Cypher query behind impact analysis
&lt;/h2&gt;

&lt;p&gt;Ripple follows active dependencies for up to six hops using this query:&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="n"&gt;p&lt;/span&gt;&lt;span class="o"&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;Entity&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;:DEPENDS_ON&lt;/span&gt;&lt;span class="o"&gt;|&lt;/span&gt;&lt;span class="n"&gt;ASSERTS&lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="m"&gt;1&lt;/span&gt;&lt;span class="o"&gt;..&lt;/span&gt;&lt;span class="m"&gt;6&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;topic:&lt;/span&gt;&lt;span class="n"&gt;Entity&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;$target&lt;/span&gt;&lt;span class="ss"&gt;})&lt;/span&gt;
&lt;span class="k"&gt;WHERE&lt;/span&gt; &lt;span class="n"&gt;all&lt;/span&gt;&lt;span class="ss"&gt;(&lt;/span&gt;&lt;span class="n"&gt;r&lt;/span&gt; &lt;span class="ow"&gt;IN&lt;/span&gt; &lt;span class="nf"&gt;relationships&lt;/span&gt;&lt;span class="ss"&gt;(&lt;/span&gt;&lt;span class="n"&gt;p&lt;/span&gt;&lt;span class="ss"&gt;)&lt;/span&gt; &lt;span class="k"&gt;WHERE&lt;/span&gt; &lt;span class="n"&gt;r.active&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;true&lt;/span&gt;&lt;span class="ss"&gt;)&lt;/span&gt;
&lt;span class="k"&gt;RETURN&lt;/span&gt; &lt;span class="ss"&gt;[&lt;/span&gt;&lt;span class="n"&gt;n&lt;/span&gt; &lt;span class="ow"&gt;IN&lt;/span&gt; &lt;span class="nf"&gt;nodes&lt;/span&gt;&lt;span class="ss"&gt;(&lt;/span&gt;&lt;span class="n"&gt;p&lt;/span&gt;&lt;span class="ss"&gt;)&lt;/span&gt; &lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="n"&gt;n.id&lt;/span&gt;&lt;span class="ss"&gt;]&lt;/span&gt; &lt;span class="k"&gt;AS&lt;/span&gt; &lt;span class="n"&gt;ids&lt;/span&gt;&lt;span class="ss"&gt;,&lt;/span&gt;
       &lt;span class="ss"&gt;[&lt;/span&gt;&lt;span class="n"&gt;r&lt;/span&gt; &lt;span class="ow"&gt;IN&lt;/span&gt; &lt;span class="nf"&gt;relationships&lt;/span&gt;&lt;span class="ss"&gt;(&lt;/span&gt;&lt;span class="n"&gt;p&lt;/span&gt;&lt;span class="ss"&gt;)&lt;/span&gt; &lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="nf"&gt;type&lt;/span&gt;&lt;span class="ss"&gt;(&lt;/span&gt;&lt;span class="n"&gt;r&lt;/span&gt;&lt;span class="ss"&gt;)]&lt;/span&gt; &lt;span class="k"&gt;AS&lt;/span&gt; &lt;span class="n"&gt;relations&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;For refund analysis, &lt;code&gt;$target&lt;/code&gt; is &lt;code&gt;topic-refund&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;Trial duration, cancellation notice and support response time have separate topic anchors.&lt;/p&gt;

&lt;p&gt;The query returns node IDs and relationship types. Ripple uses them to display an inspectable evidence path explaining why a source appeared in the impact report.&lt;/p&gt;

&lt;p&gt;User data is passed through parameters. Gemini does not generate Cypher.&lt;/p&gt;

&lt;h2&gt;
  
  
  A dependency does not automatically mean something is wrong
&lt;/h2&gt;

&lt;p&gt;This became one of our most important design decisions.&lt;/p&gt;

&lt;p&gt;If a workflow depends on a help page, that relationship tells us the workflow may need attention. It does not tell us exactly how to rewrite the workflow.&lt;/p&gt;

&lt;p&gt;Ripple therefore separates results into three categories:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Result&lt;/th&gt;
&lt;th&gt;Meaning&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Confirmed conflict&lt;/td&gt;
&lt;td&gt;A reviewed claim disagrees with the applicable approved policy.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Needs review&lt;/td&gt;
&lt;td&gt;A connected workflow requires an owner’s judgment.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Unaffected&lt;/td&gt;
&lt;td&gt;The source falls outside the change’s scope or otherwise does not require a correction.&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;After the graph discovers candidate impacts, deterministic application logic checks the policy topic, approval status, audience, effective date and version order.&lt;/p&gt;

&lt;p&gt;A self-serve policy change should preserve an enterprise exception. A proposed or future policy should not replace the currently applicable approved version.&lt;/p&gt;

&lt;h2&gt;
  
  
  Where Gemini fits
&lt;/h2&gt;

&lt;p&gt;Gemini helps interpret language.&lt;/p&gt;

&lt;p&gt;It extracts candidate policy claims with exact source quotations and selects a supported read-only policy-context tool when someone asks a question.&lt;/p&gt;

&lt;p&gt;Approved graph records determine the authoritative values returned in the answer. Application checks and human approval govern writes.&lt;/p&gt;

&lt;p&gt;The prototype currently supports four numeric policy areas:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Trial duration, measured in days.&lt;/li&gt;
&lt;li&gt;Refund eligibility window, measured in days.&lt;/li&gt;
&lt;li&gt;Cancellation notice before renewal, measured in days.&lt;/li&gt;
&lt;li&gt;Initial support response time, measured in hours.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Keeping these meanings distinct matters.&lt;/p&gt;

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

&lt;blockquote&gt;
&lt;p&gt;“How long does a refund take to process?”&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;That asks about processing or settlement time. A 14-day refund eligibility window does not answer it.&lt;/p&gt;

&lt;p&gt;Ripple rejects unsupported meanings rather than returning a familiar number because the question contains “refund.”&lt;/p&gt;

&lt;h2&gt;
  
  
  From public policies to reviewed knowledge
&lt;/h2&gt;

&lt;p&gt;Ripple can research a supplied public HTTPS HTML/text page and up to three relevant links on the same host.&lt;/p&gt;

&lt;p&gt;The extracted findings remain pending until a person reviews their quotations, audiences and effective dates.&lt;/p&gt;

&lt;p&gt;Approved findings establish versioned policies and source relationships. Importing a changed policy can generate impact reviews.&lt;/p&gt;

&lt;p&gt;Users can also paste a document into the knowledge library, extract candidate claims, review them and save the source.&lt;/p&gt;

&lt;p&gt;We treat public text as evidence. Neither a website nor model output becomes authoritative simply because the agent encountered it.&lt;/p&gt;

&lt;h2&gt;
  
  
  A complete example: changing refunds from 30 days to 14
&lt;/h2&gt;

&lt;p&gt;Our public demonstration uses fictional Acme company data.&lt;/p&gt;

&lt;p&gt;The shared tour is read-only. Clicking &lt;strong&gt;Try your own sandbox&lt;/strong&gt; creates a separate writable FalkorDB graph with a signed visitor session, without requiring an account.&lt;/p&gt;

&lt;p&gt;Here is the main workflow.&lt;/p&gt;

&lt;h3&gt;
  
  
  1. Ask the original policy
&lt;/h3&gt;

&lt;p&gt;Ask:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;What is our refund window?&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Choose &lt;strong&gt;New self-serve&lt;/strong&gt; and &lt;strong&gt;October 17, 2026&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;A fresh sandbox returns &lt;strong&gt;30 days&lt;/strong&gt;, with the approved policy evidence.&lt;/p&gt;

&lt;h3&gt;
  
  
  2. Record an approved change
&lt;/h3&gt;

&lt;p&gt;In Change studio, set the refund window to &lt;strong&gt;14 days&lt;/strong&gt;, for the same customer group, effective and analyzed on October 17.&lt;/p&gt;

&lt;p&gt;Ripple records a new policy version and runs dependency analysis.&lt;/p&gt;

&lt;h3&gt;
  
  
  3. Inspect the consequences
&lt;/h3&gt;

&lt;p&gt;In the fresh seeded scenario, the report finds:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Three confirmed conflicts.&lt;/li&gt;
&lt;li&gt;Two workflows needing review.&lt;/li&gt;
&lt;li&gt;One unaffected enterprise source.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;These counts depend on the workspace’s saved data.&lt;/p&gt;

&lt;p&gt;Opening an affected help-centre page shows its old 30-day statement and the graph path connecting it to the refund policy.&lt;/p&gt;

&lt;h3&gt;
  
  
  4. Review and apply a correction
&lt;/h3&gt;

&lt;p&gt;The review workspace displays the original and proposed text side by side.&lt;/p&gt;

&lt;p&gt;The supported refund statement changes from 30 days to 14. The surrounding instructions remain intact.&lt;/p&gt;

&lt;p&gt;Before saving, Ripple rechecks the applicable policy and source revision/content. Applying the correction preserves the original text, increments the source revision and records the repair history.&lt;/p&gt;

&lt;p&gt;Reapplying an already applied review does not create another correction record.&lt;/p&gt;

&lt;h3&gt;
  
  
  5. Export or publish the repaired copy
&lt;/h3&gt;

&lt;p&gt;Applied corrections can be exported as Markdown or JSON.&lt;/p&gt;

&lt;p&gt;The packet includes before-and-after content, source revisions, policy and decision provenance, graph evidence, actor and approval context.&lt;/p&gt;

&lt;p&gt;A SHA-256 digest checks content equality. It is a checksum, not a digital signature.&lt;/p&gt;

&lt;p&gt;Publishing is a separate action.&lt;/p&gt;

&lt;p&gt;In &lt;strong&gt;Acme website&lt;/strong&gt;, clicking &lt;strong&gt;Publish approved copy&lt;/strong&gt; updates our controlled sandbox help centre. The customer copy now shows 14 days, alongside its source revision, publication time and actor.&lt;/p&gt;

&lt;p&gt;This demonstrates a completed action while keeping the boundary clear: it updates our sandbox publishing surface, not an unrelated company’s website.&lt;/p&gt;

&lt;h3&gt;
  
  
  6. Ask again and check history
&lt;/h3&gt;

&lt;p&gt;Ask the same refund question again:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;14 days.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Reload the browser and repeat:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;14 days.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Change the audience to enterprise:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;60 days.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Ask for the self-serve policy on October 1:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;30 days.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;The graph preserves the new decision, earlier policy versions and customer-group exceptions.&lt;/p&gt;

&lt;p&gt;The distinction is important: approving the policy changes the authoritative answer. Applying a correction repairs the internal source. Publishing makes that approved repair visible on the controlled customer surface.&lt;/p&gt;

&lt;h2&gt;
  
  
  Protecting repairs from concurrent requests
&lt;/h2&gt;

&lt;p&gt;We also had to consider what happens when two hosted server instances write to the same graph.&lt;/p&gt;

&lt;p&gt;An in-process queue alone cannot protect against that.&lt;/p&gt;

&lt;p&gt;Ripple reads entities, relationships and workspace metadata in one consistent query. Its atomic save checks the workspace revision before updating records:&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;MERGE&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="ss"&gt;(&lt;/span&gt;&lt;span class="py"&gt;m:&lt;/span&gt;&lt;span class="n"&gt;RippleMeta&lt;/span&gt; &lt;span class="ss"&gt;{&lt;/span&gt;&lt;span class="py"&gt;id:&lt;/span&gt; &lt;span class="s1"&gt;'workspace'&lt;/span&gt;&lt;span class="ss"&gt;})&lt;/span&gt;
&lt;span class="k"&gt;WITH&lt;/span&gt; &lt;span class="n"&gt;m&lt;/span&gt; &lt;span class="k"&gt;WHERE&lt;/span&gt; &lt;span class="nf"&gt;coalesce&lt;/span&gt;&lt;span class="ss"&gt;(&lt;/span&gt;&lt;span class="n"&gt;m.revision&lt;/span&gt;&lt;span class="ss"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="ss"&gt;)&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;$expected&lt;/span&gt;
&lt;span class="k"&gt;SET&lt;/span&gt; &lt;span class="n"&gt;m.revision&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;$expected&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="ss"&gt;,&lt;/span&gt; &lt;span class="n"&gt;m.token&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;$token&lt;/span&gt;&lt;span class="ss"&gt;,&lt;/span&gt; &lt;span class="n"&gt;m.commands&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;$commands&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The complete query carries this guard through the node and relationship write groups.&lt;/p&gt;

&lt;p&gt;A stale request returns HTTP 409 instead of restoring old source text. Command keys prevent duplicate saved mutations. The writer validates the complete projected graph and saves only changed records.&lt;/p&gt;

&lt;h2&gt;
  
  
  What we learned while building Ripple
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Interface ambiguity can undermine correct graph logic
&lt;/h3&gt;

&lt;p&gt;An earlier version allowed a return-policy title to remain paired with the trial-duration selector.&lt;/p&gt;

&lt;p&gt;That routed the request into the wrong policy neighborhood.&lt;/p&gt;

&lt;p&gt;We fixed the interface synchronization and added server validation for inconsistent policy areas, values and units. Regression checks cover the original mismatch and cross-topic isolation.&lt;/p&gt;

&lt;p&gt;The lesson was straightforward: a correct traversal still needs an unambiguous request.&lt;/p&gt;

&lt;h3&gt;
  
  
  Query construction affects database behavior
&lt;/h3&gt;

&lt;p&gt;Our original writer generated larger query text as the graph grew. On a small Cloud instance, this consumed query-plan cache memory.&lt;/p&gt;

&lt;p&gt;We changed it to a constant-shaped, parameterized &lt;code&gt;UNWIND&lt;/code&gt; writer with an allowlist of relationship types.&lt;/p&gt;

&lt;p&gt;That fixed the observed failure while preserving graph records. It also taught us to pay attention to the shape of generated queries, beyond whether they return the correct result.&lt;/p&gt;

&lt;h3&gt;
  
  
  Persistent state needs explicit conflict handling
&lt;/h3&gt;

&lt;p&gt;A refresh should not undo someone else’s correction. Repeating a request should not create duplicate audit records.&lt;/p&gt;

&lt;p&gt;Revision checks, source validation and command deduplication became part of the product’s reliability, rather than details we could leave until later.&lt;/p&gt;

&lt;h3&gt;
  
  
  Good agent behavior includes knowing when to stop
&lt;/h3&gt;

&lt;p&gt;A connected workflow does not justify an invented rewrite. A refund window does not answer processing time. An extracted quotation still requires review.&lt;/p&gt;

&lt;p&gt;Clear boundaries made the prototype easier to explain, test and trust.&lt;/p&gt;

&lt;h2&gt;
  
  
  How we verified it
&lt;/h2&gt;

&lt;p&gt;The release verification record documents &lt;strong&gt;44 passing automated tests&lt;/strong&gt; and the TypeScript/Vite production build.&lt;/p&gt;

&lt;p&gt;Separate Cloud checks exercise:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;The actual HTTP adapter and isolated visitor graphs.&lt;/li&gt;
&lt;li&gt;Correction integrity, exports, publication and session resume.&lt;/li&gt;
&lt;li&gt;Stale-save rejection through two independent database connections.&lt;/li&gt;
&lt;li&gt;Command deduplication, capacity limits and backup restoration.&lt;/li&gt;
&lt;li&gt;Live Gemini extraction and routing across all four supported policy topics.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The October 18 browser recording also exercised the deployed workflow: the 30-to-14-day change, evidence review, approved correction, downloaded packet, publication, recall after refresh, enterprise exception and historical answer.&lt;/p&gt;

&lt;p&gt;The &lt;a href="https://drive.google.com/file/d/1rE86BOqE2P8hofZ_Y7SbMzFHWnYHpw_3/view?usp=sharing" rel="noopener noreferrer"&gt;three-minute demo&lt;/a&gt; shows actual app interactions with synthetic narration.&lt;/p&gt;

&lt;p&gt;These checks provide evidence for the demonstrated workflow. They do not guarantee permanent availability of hosting, database or model-provider services.&lt;/p&gt;

&lt;h2&gt;
  
  
  Current boundaries and possible next steps
&lt;/h2&gt;

&lt;p&gt;Public judge sessions expire after two hours. Admission limits, graph-size limits, shared rate counters and a daily AI allowance bound resource use. Expired access and physical graph cleanup are separate.&lt;/p&gt;

&lt;p&gt;Ripple currently preserves policy and decision context. It does not claim unrestricted conversation memory.&lt;/p&gt;

&lt;p&gt;Research does not support PDFs, JavaScript-only pages or arbitrary conditional contracts. Slack, Notion, Drive and arbitrary external-site publishing are outside the implemented scope.&lt;/p&gt;

&lt;p&gt;Company login and membership checks are available locally. Durable hosted company accounts, domain ownership verification, email recovery and invitation delivery need further work.&lt;/p&gt;

&lt;p&gt;Reviewed external publishing adapters and scheduled source-drift detection would be useful next steps.&lt;/p&gt;

&lt;h2&gt;
  
  
  Try Ripple
&lt;/h2&gt;

&lt;p&gt;The result today is concrete: one policy decision leads to discoverable impacts, reviewable repairs, a published demonstration copy and an answer whose history can be inspected.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;a href="https://ripple-company-brain.vercel.app" rel="noopener noreferrer"&gt;Open the live prototype&lt;/a&gt; and choose &lt;strong&gt;Try your own sandbox&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://drive.google.com/file/d/1rE86BOqE2P8hofZ_Y7SbMzFHWnYHpw_3/view?usp=sharing" rel="noopener noreferrer"&gt;Watch the working demo&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://github.com/parthjaina2107/ripple-company-brain" rel="noopener noreferrer"&gt;Explore the GitHub repository&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://github.com/parthjaina2107/ripple-company-brain/blob/main/docs/GRAPH_MODEL.md" rel="noopener noreferrer"&gt;Read the graph model&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://github.com/parthjaina2107/ripple-company-brain/blob/main/docs/QUERIES.md" rel="noopener noreferrer"&gt;Inspect the Cypher queries&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://github.com/parthjaina2107/ripple-company-brain/blob/main/docs/JUDGE_SANDBOX.md" rel="noopener noreferrer"&gt;Follow the judge walkthrough&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://github.com/parthjaina2107/ripple-company-brain/blob/main/docs/LOCAL_SETUP.md" rel="noopener noreferrer"&gt;Run the project locally&lt;/a&gt;.&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>ai</category>
      <category>falkordb</category>
      <category>hackathon</category>
      <category>webdev</category>
    </item>
  </channel>
</rss>
