<?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>/v1.5/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="/v1.5/docs/5_architecture_and_components/engine/index.xml" rel="self" type="application/rss+xml"/><item><title>Engine Design</title><link>/v1.5/docs/5_architecture_and_components/engine/design/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>/v1.5/docs/5_architecture_and_components/engine/design/</guid><description>&lt;h2 id="cad-engine-architecture">CaD Engine Architecture&lt;/h2>&lt;p>The Engine follows a &lt;strong>layered architecture&lt;/strong> with clear separation of concerns:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-fallback" data-lang="fallback">&lt;span class="line">&lt;span class="cl">┌─────────────────────────────────────────┐
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">│ CaDEngine Interface │ ← Public API
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">├─────────────────────────────────────────┤
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">│ cadEngine Implementation │ ← Orchestration Logic
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">├─────────────────────────────────────────┤
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">│ ┌──────────┬──────────┬─────────────┐ │
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">│ │ Cache │ Task │ Watcher │ │ ← Dependencies
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">│ │ │ Handler │ Manager │ │
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">│ └──────────┴──────────┴─────────────┘ │
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">└─────────────────────────────────────────┘
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>&lt;strong>Key architectural patterns:&lt;/strong>&lt;/p>
&lt;h3 id="dependency-injection-via-functional-options">Dependency Injection via Functional Options&lt;/h3>&lt;p>The engine is constructed using a &lt;strong>functional options pattern&lt;/strong> that allows flexible configuration of dependencies:&lt;/p></description></item><item><title>Engine Interactions</title><link>/v1.5/docs/5_architecture_and_components/engine/interactions/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>/v1.5/docs/5_architecture_and_components/engine/interactions/</guid><description>&lt;h2 id="overall-interaction-overview">Overall Interaction Overview&lt;/h2>&lt;p>&lt;img src="/v1.5/images/porch/engine-component-interaction.drawio.svg" alt="Engine Interaction Architecture" />&lt;/p>
&lt;h2 id="cache-integration">Cache Integration&lt;/h2>&lt;p>The Engine relies heavily on the Package Cache as its primary interface to repositories:&lt;/p>
&lt;h3 id="opening-repositories">Opening Repositories&lt;/h3>&lt;p>All repository access goes through the cache:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-fallback" data-lang="fallback">&lt;span class="line">&lt;span class="cl">Engine
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">OpenRepository(repositorySpec)
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Package Cache
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Repository Adapter (Git)
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>&lt;strong>Process:&lt;/strong>&lt;/p>
&lt;ol>
&lt;li>Engine receives a Repository CR specification&lt;/li>
&lt;li>Calls &lt;code>cache.OpenRepository(ctx, repositorySpec)&lt;/code>&lt;/li>
&lt;li>Cache returns a Repository interface implementation&lt;/li>
&lt;li>Engine uses the repository abstraction for all operations&lt;/li>
&lt;/ol>
&lt;p>&lt;strong>Benefits of cache-mediated access:&lt;/strong>&lt;/p></description></item></channel></rss>