<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Engine Functionality on Porch Documentation</title><link>/v1.5/docs/5_architecture_and_components/engine/functionality/</link><description>Recent content in Engine Functionality on Porch Documentation</description><generator>Hugo</generator><language>en-us</language><atom:link href="/v1.5/docs/5_architecture_and_components/engine/functionality/index.xml" rel="self" type="application/rss+xml"/><item><title>Validation &amp; Business Rules</title><link>/v1.5/docs/5_architecture_and_components/engine/functionality/validation-business-rules/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>/v1.5/docs/5_architecture_and_components/engine/functionality/validation-business-rules/</guid><description>&lt;h2 id="overview">Overview&lt;/h2>&lt;p>The Engine enforces validation and business rules to ensure package revisions are created and modified correctly. These rules prevent invalid operations, enforce naming constraints, and maintain referential integrity across packages and revisions.&lt;/p>
&lt;h3 id="high-level-architecture">High-Level Architecture&lt;/h3>&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">│ Validation &amp;amp; Business Rules │
&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">│ │ Pre-Operation │ │ Constraint │ │
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">│ │ Validation │ ───&amp;gt; │ Enforcement │ │
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">│ │ │ │ │ │
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">│ │ • Lifecycle │ │ • Uniqueness │ │
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">│ │ • Tasks │ │ • Path Overlap │ │
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">│ │ • Resources │ │ • Clone Rules │ │
&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">│ └────────┬────────────────┘ │
&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">│ │ Optimistic │ │
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">│ │ Locking │ │
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">│ │ │ │
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">│ │ • Resource Ver │ │
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">│ │ • Conflict Det │ │
&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;h2 id="lifecycle-validation">Lifecycle Validation&lt;/h2>&lt;p>The Engine validates lifecycle values during package revision creation and updates:&lt;/p></description></item><item><title>Draft-Commit Workflow Orchestration</title><link>/v1.5/docs/5_architecture_and_components/engine/functionality/draft-commit-orchestration/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>/v1.5/docs/5_architecture_and_components/engine/functionality/draft-commit-orchestration/</guid><description>&lt;h2 id="overview">Overview&lt;/h2>&lt;p>The Engine orchestrates a draft-commit workflow for all package revision modifications. This pattern ensures atomicity - either all changes succeed and are persisted, or none are. The workflow uses mutable drafts for changes and immutable package revisions for storage.&lt;/p>
&lt;h3 id="high-level-architecture">High-Level Architecture&lt;/h3>&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">│ Draft-Commit Workflow Orchestration │
&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">│ │ Draft Phase │ │ Commit Phase │ │
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">│ │ │ ───&amp;gt; │ │ │
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">│ │ • Open Draft │ │ • Close Draft │ │
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">│ │ • Apply Changes │ │ • Persist │ │
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">│ │ • Validate │ │ • Immutable │ │
&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">│ └────────┬────────────────┘ │
&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">│ │ Rollback │ │
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">│ │ Mechanism │ │
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">│ │ │ │
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">│ │• Trigger On Error│ │
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">│ │• Does Cleanup │ │
&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;h2 id="draft-commit-pattern">Draft-Commit Pattern&lt;/h2>&lt;p>The Engine uses a two-phase workflow for all package revision modifications:&lt;/p></description></item><item><title>Lifecycle Management</title><link>/v1.5/docs/5_architecture_and_components/engine/functionality/lifecycle-management/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>/v1.5/docs/5_architecture_and_components/engine/functionality/lifecycle-management/</guid><description>&lt;h2 id="overview">Overview&lt;/h2>&lt;p>The Engine enforces a strict lifecycle state machine for package revisions that governs their mutability, visibility, and progression from draft to published state. The lifecycle system ensures that package revisions follow a controlled workflow from creation through approval to deployment, with appropriate constraints at each stage.&lt;/p>
&lt;h3 id="high-level-architecture">High-Level Architecture&lt;/h3>&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">│ Lifecycle Management System │
&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">│ │ State Machine │ │ Validation │ │
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">│ │ │ ───&amp;gt; │ &amp;amp; Enforcement │ │
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">│ │ • Draft │ │ │ │
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">│ │ • Proposed │ │ • Creation │ │
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">│ │ • Published │ │ • Transition │ │
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">│ │ • Deletion │ │ • Mutation │ │
&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">│ └────────┬────────────────┘ │
&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">│ │ State-Based │ │
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">│ │ Constraints │ │
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">│ │ │ │
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">│ │ • Mutability │ │
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">│ │ • Operations │ │
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">│ │ • Audit Trail │ │
&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;h2 id="lifecycle-state-machine">Lifecycle State Machine&lt;/h2>&lt;p>The lifecycle state machine defines four states that a package revision can be in:&lt;/p></description></item><item><title>Task Coordination</title><link>/v1.5/docs/5_architecture_and_components/engine/functionality/task-coordination/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>/v1.5/docs/5_architecture_and_components/engine/functionality/task-coordination/</guid><description>&lt;h2 id="overview">Overview&lt;/h2>&lt;p>The Engine coordinates task execution by delegating to the Task Handler. Tasks represent operations that transform package content (init, clone, edit, upgrade, render). The Engine orchestrates when and how tasks are executed, while the Task Handler implements the actual transformations.&lt;/p>
&lt;h3 id="high-level-architecture">High-Level Architecture&lt;/h3>&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">│ Task Coordination System │
&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">│ │ Engine │ │ Task Handler │ │
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">│ │ Orchestration │ ───&amp;gt; │ Execution │ │
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">│ │ │ │ │ │
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">│ │ • When to Run │ │ • Init │ │
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">│ │ • Draft Mgmt │ │ • Clone │ │
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">│ │ • Error Handle │ │ • Edit │ │
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">│ └──────────────────┘ │ • Upgrade │ │
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">│ │ │ • Render │ │
&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">│ ┌──────────────────┐ ↓ │
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">│ │ Function │ ┌──────────────────┐ │
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">│ │ Runtime │ &amp;lt;─── │ Builtin Funcs │ │
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">│ │ │ │ │ │
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">│ │ • gRPC │ │ • set-namespace │ │
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">│ │ • Builtin │ │ • ensure-context│ │
&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;h2 id="task-handler-integration">Task Handler Integration&lt;/h2>&lt;p>The Engine integrates with the Task Handler through three main operations:&lt;/p></description></item></channel></rss>