<?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: navneet-cerecode</title>
    <description>The latest articles on DEV Community by navneet-cerecode (@navneetcerecode).</description>
    <link>https://dev.to/navneetcerecode</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%2F1986654%2F6f90ebe4-63c7-4ca3-9742-ac034f59aeda.png</url>
      <title>DEV Community: navneet-cerecode</title>
      <link>https://dev.to/navneetcerecode</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/navneetcerecode"/>
    <language>en</language>
    <item>
      <title>CONTINUUM: Building a Company Brain That Knows When Decisions Need Review</title>
      <dc:creator>navneet-cerecode</dc:creator>
      <pubDate>Sat, 17 Oct 2026 13:25:04 +0000</pubDate>
      <link>https://dev.to/navneetcerecode/continuum-building-a-company-brain-that-knows-when-decisions-need-review-3pj8</link>
      <guid>https://dev.to/navneetcerecode/continuum-building-a-company-brain-that-knows-when-decisions-need-review-3pj8</guid>
      <description>&lt;p&gt;A launch is approved. The decision is documented. The customer has been promised a date.&lt;/p&gt;

&lt;p&gt;Then a security prerequisite changes.&lt;/p&gt;

&lt;p&gt;The original approval still exists, but its supporting assumptions no longer hold. Which decisions need review? Which milestones and customer commitments depend on them? Who owns the response now, and what evidence explains the answer?&lt;/p&gt;

&lt;p&gt;That is the problem behind &lt;strong&gt;CONTINUUM&lt;/strong&gt;, Team &lt;strong&gt;OmegaRuby&lt;/strong&gt;'s project for &lt;strong&gt;Graph Hacks by WeMakeDevs and FalkorDB&lt;/strong&gt;, entering &lt;strong&gt;Track 3 — Company Brain&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;CONTINUUM connects decisions, versioned evidence, prerequisites, owners, and commitments in FalkorDB. It traces the consequences of a recorded change and prepares follow-ups for explicit review. Its central distinction is simple: &lt;strong&gt;a historical decision can remain explainable while its current readiness requires review.&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://github.com/navneet-cerecode/continuum-omegaruby" rel="noopener noreferrer"&gt;Public source and local setup&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://continuum-omegaruby-production.up.railway.app/" rel="noopener noreferrer"&gt;Live application&lt;/a&gt; — account access required; judge credentials are provided separately.&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/navneet-cerecode/continuum-omegaruby/releases/tag/v0.2.0" rel="noopener noreferrer"&gt;Recorded browser walkthrough&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fklsqjn92pk6664ak4b1w.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fklsqjn92pk6664ak4b1w.png" alt="CONTINUUM company context interface" width="800" height="891"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  The gap between finding a document and understanding a consequence
&lt;/h2&gt;

&lt;p&gt;Searching for a launch document answers, “Where was the decision recorded?” CONTINUUM asks a different question: “What depended on that decision's prerequisites, and what changes when one of them is withdrawn?”&lt;/p&gt;

&lt;p&gt;The demonstration uses &lt;strong&gt;Northstar Systems&lt;/strong&gt;, a fictional company with Atlas, Beacon, and Orbit projects. Its Markdown sources and typed relationships are curated synthetic data. They are not real customer records or relationships automatically extracted from arbitrary prose.&lt;/p&gt;

&lt;p&gt;In the Atlas scenario, an export approval supports an export decision, which supports a gate, which supports the Atlas launch decision and downstream commitments. Withdrawing the approval flags &lt;strong&gt;seven affected records in this fixture&lt;/strong&gt;. That number is a known scenario result, not a general performance claim.&lt;/p&gt;

&lt;p&gt;The application preserves the old approval and the evidence that justified the original decision. It changes the current readiness assessment to &lt;code&gt;review_required&lt;/code&gt;; it does not declare the decision wrong or automatically cancel the launch.&lt;/p&gt;

&lt;h2&gt;
  
  
  Modeling operational meaning in FalkorDB
&lt;/h2&gt;

&lt;p&gt;The graph includes &lt;code&gt;Decision&lt;/code&gt;, &lt;code&gt;Assumption&lt;/code&gt;, &lt;code&gt;Project&lt;/code&gt;, &lt;code&gt;Milestone&lt;/code&gt;, &lt;code&gt;Commitment&lt;/code&gt;, &lt;code&gt;Person&lt;/code&gt;, and immutable &lt;code&gt;DocumentVersion&lt;/code&gt; nodes. It also stores operational records: &lt;code&gt;ChangeEvent&lt;/code&gt;, &lt;code&gt;ResponsePlan&lt;/code&gt;, &lt;code&gt;ProposedAction&lt;/code&gt;, &lt;code&gt;ActionItem&lt;/code&gt;, and &lt;code&gt;RestorationReview&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;The most important modeling choice is relationship meaning:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Relationship&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;&lt;code&gt;DEPENDS_ON&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;A dependent points to its prerequisite; this relationship propagates impact.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;SUPPORTED_BY&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;A record points to a particular source version.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;OWNED_BY&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;A sourced ownership record points to a person.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;SUPERSEDES&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;A newer state or source version retains a link to the older one.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;AFFECTS&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;A change records the affected-item membership observed for that event.&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;An example dependency chain is:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Customer commitment
  → Atlas availability
  → Atlas decision
  → Export gate
  → Export decision
  → Export approval

Every arrow means DEPENDS_ON.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Impact investigation starts at the changed prerequisite and finds incoming dependency paths. Ownership, team membership, and document links do not spread impact. Otherwise, sharing a team or a source could incorrectly make an unrelated project appear affected.&lt;/p&gt;

&lt;p&gt;This is the core current-impact query from the project's &lt;a href="https://github.com/navneet-cerecode/continuum-omegaruby/blob/main/docs/QUERIES.cypher" rel="noopener noreferrer"&gt;query reference&lt;/a&gt;:&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="n"&gt;n&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="m"&gt;1&lt;/span&gt;&lt;span class="o"&gt;..&lt;/span&gt;&lt;span class="m"&gt;8&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="n"&gt;a&lt;/span&gt; &lt;span class="ss"&gt;{&lt;/span&gt;&lt;span class="py"&gt;id:&lt;/span&gt;&lt;span class="n"&gt;$id&lt;/span&gt;&lt;span class="ss"&gt;})&lt;/span&gt;
&lt;span class="k"&gt;WHERE&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="ss"&gt;(&lt;/span&gt;&lt;span class="py"&gt;n:&lt;/span&gt;&lt;span class="n"&gt;Decision&lt;/span&gt; &lt;span class="ow"&gt;OR&lt;/span&gt; &lt;span class="py"&gt;n:&lt;/span&gt;&lt;span class="n"&gt;Milestone&lt;/span&gt; &lt;span class="ow"&gt;OR&lt;/span&gt; &lt;span class="py"&gt;n:&lt;/span&gt;&lt;span class="n"&gt;Commitment&lt;/span&gt; &lt;span class="ow"&gt;OR&lt;/span&gt; &lt;span class="py"&gt;n:&lt;/span&gt;&lt;span class="n"&gt;Project&lt;/span&gt;&lt;span class="ss"&gt;)&lt;/span&gt;
  &lt;span class="ow"&gt;AND&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="nf"&gt;coalesce&lt;/span&gt;&lt;span class="ss"&gt;(&lt;/span&gt;&lt;span class="n"&gt;r.current&lt;/span&gt;&lt;span class="ss"&gt;,&lt;/span&gt;&lt;span class="k"&gt;true&lt;/span&gt;&lt;span class="ss"&gt;)&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="n"&gt;n.id&lt;/span&gt; &lt;span class="k"&gt;AS&lt;/span&gt; &lt;span class="n"&gt;id&lt;/span&gt;&lt;span class="ss"&gt;,&lt;/span&gt; &lt;span class="n"&gt;n.name&lt;/span&gt; &lt;span class="k"&gt;AS&lt;/span&gt; &lt;span class="n"&gt;name&lt;/span&gt;&lt;span class="ss"&gt;,&lt;/span&gt; &lt;span class="nf"&gt;labels&lt;/span&gt;&lt;span class="ss"&gt;(&lt;/span&gt;&lt;span class="n"&gt;n&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;labels&lt;/span&gt;&lt;span class="ss"&gt;,&lt;/span&gt;
       &lt;span class="ss"&gt;[&lt;/span&gt;&lt;span class="n"&gt;v&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;v.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;path&lt;/span&gt;&lt;span class="ss"&gt;,&lt;/span&gt;
       &lt;span class="ss"&gt;[&lt;/span&gt;&lt;span class="n"&gt;e&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="n"&gt;properties&lt;/span&gt;&lt;span class="ss"&gt;(&lt;/span&gt;&lt;span class="n"&gt;e&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;edges&lt;/span&gt;&lt;span class="ss"&gt;,&lt;/span&gt;
       &lt;span class="nf"&gt;length&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;AS&lt;/span&gt; &lt;span class="n"&gt;depth&lt;/span&gt;
&lt;span class="k"&gt;ORDER&lt;/span&gt; &lt;span class="k"&gt;BY&lt;/span&gt; &lt;span class="n"&gt;depth&lt;/span&gt;&lt;span class="ss"&gt;,&lt;/span&gt; &lt;span class="n"&gt;id&lt;/span&gt; &lt;span class="k"&gt;LIMIT&lt;/span&gt; &lt;span class="mi"&gt;201&lt;/span&gt;&lt;span class="ss"&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The eight-hop bound is deliberate. The application retains up to 200 paths, uses the 201st as a truncation signal, and separately checks for active dependencies beyond the depth boundary. Incomplete investigation blocks response-plan generation. A bounded result should not quietly become a claim that every consequence was found.&lt;/p&gt;

&lt;p&gt;FalkorDB also executes evidence retrieval, owner queries, history, and persisted follow-up operations. Organizational state stays in the graph, including proposals and approvals; private account configuration stores identity and access settings separately. The &lt;a href="https://github.com/navneet-cerecode/continuum-omegaruby/blob/main/docs/GRAPH_MODEL.md" rel="noopener noreferrer"&gt;graph model&lt;/a&gt; documents these semantics.&lt;/p&gt;

&lt;h2&gt;
  
  
  Current ownership needs evidence too
&lt;/h2&gt;

&lt;p&gt;The Atlas fixture deliberately includes an older project brief naming Ethan Park and a current authoritative register naming Maya Chen.&lt;/p&gt;

&lt;p&gt;CONTINUUM returns both sources and their conflict. Its owner resolution compares valid, sourced records using configured authority and effective dates. Equal-ranked records must agree; unresolved ownership does not become a guessed assignment.&lt;/p&gt;

&lt;p&gt;This matters because a plausible response sent to an outdated owner is still a broken workflow. Stable person IDs also prevent similarly named people from being silently merged.&lt;/p&gt;

&lt;h2&gt;
  
  
  From a change to a reviewable response
&lt;/h2&gt;

&lt;p&gt;The complete workflow is:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Inspect the project's readiness, dependency paths, and source versions.&lt;/li&gt;
&lt;li&gt;Record a clearly labeled synthetic prerequisite withdrawal.&lt;/li&gt;
&lt;li&gt;Inspect affected records and their resolved owners or conflicts.&lt;/li&gt;
&lt;li&gt;Generate a response plan and select proposed follow-ups.&lt;/li&gt;
&lt;li&gt;Explicitly approve the selection to create persisted action items.&lt;/li&gt;
&lt;li&gt;Record replacement evidence and complete a separate restoration review.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;A proposal captures the graph revision and a fingerprint of its supporting context. Approval rechecks those values, and task creation uses an atomic graph revision comparison. Changed evidence, dependencies, or ownership makes the old proposal stale. Repeating approval does not create duplicate tasks.&lt;/p&gt;

&lt;p&gt;Completing a follow-up does &lt;strong&gt;not&lt;/strong&gt; restore the security approval. Restoration requires replacement evidence and explicit revalidation of the affected records. Earlier sources, tasks, and incidents remain available for explanation, including across repeated change cycles.&lt;/p&gt;

&lt;p&gt;The application prepares communication drafts but sends no external messages.&lt;/p&gt;

&lt;h2&gt;
  
  
  Giving the model useful tools and clear limits
&lt;/h2&gt;

&lt;p&gt;The model selects among eight typed, read-only graph tools. It can retrieve evidence, trace impact, resolve ownership, and assess readiness. It cannot execute unrestricted Cypher, approve plans, change graph records, or send notifications.&lt;/p&gt;

&lt;p&gt;Returned answers are checked against retrieved source IDs and complete graph paths. Invalid tool arguments, invented citations, and fabricated paths are rejected. These checks establish structural grounding; they do &lt;strong&gt;not&lt;/strong&gt; prove that every natural-language sentence is entailed by the evidence. That remains an evaluation gap and a reason to inspect the cited sources.&lt;/p&gt;

&lt;p&gt;Local inference is supported through Ollama. The deployed application was verified using Groq Free with &lt;code&gt;openai/gpt-oss-120b&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;One concrete deployment lesson came from the provider protocol. The initial combination of JSON response mode and tool calling was rejected. Removing JSON mode exposed another failure: the model sometimes attempted to call a nonexistent &lt;code&gt;json&lt;/code&gt; tool to finish its answer.&lt;/p&gt;

&lt;p&gt;The integration now provides a &lt;code&gt;finish_investigation&lt;/code&gt; function carrying the answer schema. It returns a validated answer without mutating records. The same source, path, retrieval-first, and revision checks still apply. This made the final-answer contract explicit rather than relying on a prompt to repair an API mismatch. The implementation is in &lt;a href="https://github.com/navneet-cerecode/continuum-omegaruby/blob/main/backend/agent.py" rel="noopener noreferrer"&gt;backend/agent.py&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Deploying and checking the actual workflow
&lt;/h2&gt;

&lt;p&gt;The stack is React and TypeScript, FastAPI, and FalkorDB. A Docker application serves the built frontend and API from one HTTPS origin on Railway. FalkorDB runs privately with a persistent volume and append-only persistence enabled.&lt;/p&gt;

&lt;p&gt;The current application uses one worker and one replica because sessions and some limits are process-local. Horizontal scaling would require additional shared infrastructure.&lt;/p&gt;

&lt;p&gt;The &lt;a href="https://github.com/navneet-cerecode/continuum-omegaruby/blob/main/artifacts/cloud-verification.json" rel="noopener noreferrer"&gt;cloud verification report&lt;/a&gt; records executed checks:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;129 automated tests passed&lt;/strong&gt;, along with container lifecycle checks in GitHub Actions.&lt;/li&gt;
&lt;li&gt;Authentication, origin restrictions, CSRF handling, role restrictions, and authenticated graph reads passed the recorded checks.&lt;/li&gt;
&lt;li&gt;A cloud rehearsal traced seven impacted Atlas records, approved and completed one follow-up, and restored readiness through separate replacement-evidence review.&lt;/li&gt;
&lt;li&gt;A real FalkorDB restart retained the complete recap: its SHA-256 hash matched before and after the restart.&lt;/li&gt;
&lt;li&gt;A live Beacon model investigation returned the expected dependency path and all four required source versions.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;These are checks on this implementation and its synthetic scenarios. They do not establish enterprise scale, a comprehensive security audit, or semantic correctness for arbitrary model answers.&lt;/p&gt;

&lt;h2&gt;
  
  
  What this project taught us
&lt;/h2&gt;

&lt;p&gt;The useful unit of organizational memory is often a &lt;strong&gt;decision connected to its prerequisites and evidence&lt;/strong&gt;. Keeping those connections explicit makes it possible to explain both the original rationale and the need for a later review.&lt;/p&gt;

&lt;p&gt;Three design lessons stand out:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Relationship direction and meaning are product behavior. A graph can be connected without every connection implying operational impact.&lt;/li&gt;
&lt;li&gt;Time and authority belong in the data model. “The newest text mentions someone” is too weak a rule for current ownership or approval.&lt;/li&gt;
&lt;li&gt;Proposals, approved tasks, and restored readiness need separate states. Collapsing them would let administrative progress masquerade as renewed evidence.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The next improvements would be permission-aware connectors for real sources, stronger evaluation of answer entailment, and shared sessions and quotas for multiple application replicas. Those are future work. Current onboarding accepts reviewed synthetic Markdown with curated metadata.&lt;/p&gt;

&lt;p&gt;The live deployment uses Railway trial resources and Groq Free inference. Availability depends on remaining trial credits, service limits, and model access; complete local setup is included in the repository.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;CONTINUUM's goal is to make a changed assumption visible, explain its consequences, and give the right people a reviewable next step.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Explore the &lt;a href="https://github.com/navneet-cerecode/continuum-omegaruby" rel="noopener noreferrer"&gt;source, setup, and graph model&lt;/a&gt;, open the &lt;a href="https://continuum-omegaruby-production.up.railway.app/" rel="noopener noreferrer"&gt;live application&lt;/a&gt;, or watch the &lt;a href="https://github.com/navneet-cerecode/continuum-omegaruby/releases/tag/v0.2.0" rel="noopener noreferrer"&gt;release walkthrough&lt;/a&gt;.&lt;/p&gt;

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