<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Engine on Porch Documentation</title><link>/docs/5_architecture_and_components/engine/</link><description>Recent content in Engine on Porch Documentation</description><generator>Hugo</generator><language>en-us</language><atom:link href="/docs/5_architecture_and_components/engine/index.xml" rel="self" type="application/rss+xml"/><item><title>Engine Design</title><link>/docs/5_architecture_and_components/engine/design/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>/docs/5_architecture_and_components/engine/design/</guid><description>&lt;h2 id="cad-engine-architecture"&gt;CaD Engine Architecture&lt;/h2&gt;&lt;p&gt;The Engine follows a &lt;strong&gt;layered architecture&lt;/strong&gt; with clear separation of concerns:&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;┌─────────────────────────────────────────┐
│ CaDEngine Interface │ ← Public API
├─────────────────────────────────────────┤
│ cadEngine Implementation │ ← Orchestration Logic
├─────────────────────────────────────────┤
│ ┌──────────┬──────────┬─────────────┐ │
│ │ Cache │ Task │ Watcher │ │ ← Dependencies
│ │ │ Handler │ Manager │ │
│ └──────────┴──────────┴─────────────┘ │
└─────────────────────────────────────────┘
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;strong&gt;Key architectural patterns:&lt;/strong&gt;&lt;/p&gt;
&lt;h3 id="dependency-injection-via-functional-options"&gt;Dependency Injection via Functional Options&lt;/h3&gt;&lt;p&gt;The engine is constructed using a &lt;strong&gt;functional options pattern&lt;/strong&gt; that allows flexible configuration of dependencies:&lt;/p&gt;</description></item><item><title>Engine Interactions</title><link>/docs/5_architecture_and_components/engine/interactions/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>/docs/5_architecture_and_components/engine/interactions/</guid><description>&lt;h2 id="overall-interaction-overview"&gt;Overall Interaction Overview&lt;/h2&gt;&lt;p&gt;&lt;img src="/images/porch/engine-component-interaction.drawio.svg" alt="Engine Interaction Architecture" /&gt;&lt;/p&gt;
&lt;h2 id="cache-integration"&gt;Cache Integration&lt;/h2&gt;&lt;p&gt;The Engine relies heavily on the Package Cache as its primary interface to repositories:&lt;/p&gt;
&lt;h3 id="opening-repositories"&gt;Opening Repositories&lt;/h3&gt;&lt;p&gt;All repository access goes through the cache:&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;Engine
 ↓
OpenRepository(repositorySpec)
 ↓
Package Cache
 ↓
Repository Adapter (Git)
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;strong&gt;Process:&lt;/strong&gt;&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Engine receives a Repository CR specification&lt;/li&gt;
&lt;li&gt;Calls &lt;code&gt;cache.OpenRepository(ctx, repositorySpec)&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Cache returns a Repository interface implementation&lt;/li&gt;
&lt;li&gt;Engine uses the repository abstraction for all operations&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;strong&gt;Benefits of cache-mediated access:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Caching&lt;/strong&gt;: Frequently accessed repositories remain in memory&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Synchronization&lt;/strong&gt;: Cache handles background repository sync&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Abstraction&lt;/strong&gt;: Engine doesn&amp;rsquo;t need to know if it&amp;rsquo;s Git or another backend&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Connection pooling&lt;/strong&gt;: Cache manages repository connections efficiently&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="repository-operations"&gt;Repository Operations&lt;/h3&gt;&lt;p&gt;Once a repository is opened, the engine delegates all storage operations:&lt;/p&gt;</description></item></channel></rss>