<turbo-stream action="append" target="posts_list"><template>    <div class="postbit" id="388378" data-post-id="388378">
  <section>
    <div class="post-wrap">


					<div class="post-header">
		        <div class="user-avatar">
		          <img alt="webofbits" src="https://forum.elixirforum.com/user_avatar/forum.elixirforum.com/webofbits/120/39173_2.png" width="120" height="120" />
		        </div>
					
						<div class="user-details">
		          <div class="user-name">
		            <h3>
                  webofbits
                    <span class="op-star" title="Thread Starter">
                      <img alt="OP" class="op-star-icon" src="/assets/thread-icons/thread-icon-thread-starter-df91e872.png" />
                    </span>
                  </h3>
		          </div>
						
						</div>
					
					</div>

	        <div class="thread-main">
	            <div class="post-body" data-turbo="false">
								<p>Yes, that is very much in scope.</p>
<p>Right now Squid Mesh exposes the raw ingredients through <code>inspect_run(..., include_history:   true)</code>: run status, current step, step runs, attempts, errors, retry state, pause/approval audit events, etc. But that is still more of a structured runtime view than an explanation layer.</p>
<p>I do want something closer to <code>Journey.Tools.introspect/1</code>: a public function that can answer<br>
questions like:</p>
<ul>
<li>why is this run stopped?</li>
<li>why did this step fail?</li>
<li>why did this run not resume?</li>
<li>is it waiting on approval, retry delay, dependencies, cancellation, or a terminal state?</li>
<li>what operator action is possible next?</li>
</ul>
<p>I’d probably keep it separate from <code>inspect_run/2</code>, maybe something like<br>
<code>SquidMesh.explain_run/2</code> or <code>SquidMesh.introspect_run/2</code>, so <code>inspect_run</code> remains the factual<br>
read model and the explanation API becomes the higher-level diagnostic layer.</p>
<p>This release moved a lot of the needed data into durable state, especially pause/approval resume metadata and manual audit history. So the next step is mostly shaping that data into a stable explanation contract rather than scraping logs or recomputing from current workflow code.</p>
<p>Appreciate any architectural feedback too. Originally, I was thinking on mostly building an “n8n” using Elixir macros/functions (it’s easier to QA and load test compared to drag and drop diagrams) but I think I am sliding into a more serious pit <img src="https://forum.elixirforum.com/images/emoji/apple/sweat_smile.png?v=15" title=":sweat_smile:" class="emoji" alt=":sweat_smile:" loading="lazy" width="20" height="20">. I love the idea that people can run a re-usable workflow framework they can use for free but at the same time, I want this to be as reliable as possible even for mission critical things like payments.</p> 
	            </div>

	            <div class="base-line">
	                <div class="thread-counters">
	                    <span class="thread-count count-likes js-likers-trigger" title="Likes" data-post-id="388378" data-batch-url="/posts/batch_likers">
                        2
                      </span>
                      <!-- <span class="thread-count js-solved-indicator" title="Marked as solution"></span> -->
	                </div>
	                <div class="go-to-post">
	                  <a title="Go to post" alt="Go to post" href="https://forum.elixirforum.com/t/squidie-workflow-automation-runtime-for-elixir-applications/75162/12">Post #11</a>
	                </div>
	            </div>
              <div id="likers-container-388378" 
                   class="likers-container"
                   data-first-post="false"
                   data-batch-url="/posts/batch_likers">
                   <div class="likers-placeholder" 
                     data-likers-post-id="388378"
                     data-batch-url="/posts/batch_likers">
                  <div class="post-likers"></div>
                </div>
              </div>
	        </div>
			

    </div>

    <div class="triangle-top-right type-standard-post cat-standard-post" title="Post #11"></div>
  </section>
</div>
    <div class="postbit" id="388380" data-post-id="388380">
  <section>
    <div class="post-wrap">


					<div class="post-header">
		        <div class="user-avatar">
		          <img alt="dimitarvp" src="https://forum.elixirforum.com/user_avatar/forum.elixirforum.com/dimitarvp/120/38664_2.png" width="120" height="120" />
		        </div>
					
						<div class="user-details">
		          <div class="user-name">
		            <h3>
                  dimitarvp
                  </h3>
		          </div>
						
						</div>
					
					</div>

	        <div class="thread-main">
	            <div class="post-body" data-turbo="false">
								<aside class="quote no-group" data-username="webofbits" data-post="12" data-topic="75162">
<div class="title">
<div class="quote-controls"></div>
<img alt="" width="24" height="24" src="https://forum.elixirforum.com/user_avatar/forum.elixirforum.com/webofbits/48/39173_2.png" class="avatar"> webofbits:</div>
<blockquote>
<p>I’d probably keep it separate from <code>inspect_run/2</code>, maybe something like<br>
<code>SquidMesh.explain_run/2</code> or <code>SquidMesh.introspect_run/2</code>, so <code>inspect_run</code> remains the factual<br>
read model and the explanation API becomes the higher-level diagnostic layer.</p>
</blockquote>
</aside>
<p>Oh, absolutely. Machine-readable introspection state would be VERY valuable to have so let’s not lose that.</p>
<aside class="quote no-group" data-username="webofbits" data-post="12" data-topic="75162">
<div class="title">
<div class="quote-controls"></div>
<img alt="" width="24" height="24" src="https://forum.elixirforum.com/user_avatar/forum.elixirforum.com/webofbits/48/39173_2.png" class="avatar"> webofbits:</div>
<blockquote>
<p>but I think I am sliding into a more serious pit <img src="https://forum.elixirforum.com/images/emoji/apple/sweat_smile.png?v=15" title=":sweat_smile:" class="emoji" alt=":sweat_smile:" loading="lazy" width="20" height="20"></p>
</blockquote>
</aside>
<p>Pretty good instinct, bravo. You can still have it later but don’t get distracted while you are working on building blocks and baseline functionality that you want to have.</p>
<p>Trust me I get it. I have thousands of code lines to review in my SQLite3 Ecto driver. Keeping both me &amp; Claude’s eyes on target – “let’s have full parity with Ecto, no excuses, if something is difficult we are still doing it” – and <em>not</em> doing some other stuff like “but how do we limit writers so SQLite does not overwhelmed as that’s a documented limitation of the database itself?” takes actual willpower and energy.</p>
<aside class="quote no-group" data-username="webofbits" data-post="12" data-topic="75162">
<div class="title">
<div class="quote-controls"></div>
<img alt="" width="24" height="24" src="https://forum.elixirforum.com/user_avatar/forum.elixirforum.com/webofbits/48/39173_2.png" class="avatar"> webofbits:</div>
<blockquote>
<p>Appreciate any architectural feedback too.</p>
</blockquote>
</aside>
<p>Thank you for the vote of confidence. My life phase is still “barely finding time to make my wife feel like a woman in a relationship” but every now and then (1-2 times a month) I can scrounge some extra time. No promises.</p>
<aside class="quote no-group" data-username="webofbits" data-post="12" data-topic="75162">
<div class="title">
<div class="quote-controls"></div>
<img alt="" width="24" height="24" src="https://forum.elixirforum.com/user_avatar/forum.elixirforum.com/webofbits/48/39173_2.png" class="avatar"> webofbits:</div>
<blockquote>
<p>I want this to be as reliable as possible even for mission critical things like payments.</p>
</blockquote>
</aside>
<p>That’s kind of why I started engaging with you in the first place. A lot of libraries start and end as hobby projects. But when you have stuff to orchestrate f.ex. you have created a user in an external Auth0 system, or posted entries in a SaaS financial ledger, or have in fact called Stripe and have now paid for something, or even stood up a remote infra (micro VM) as part of your saga workflow etc. then <em>this</em> is where the interesting technical work lives as well – deeply thinking about each step’s undo / compensation semantics, aggressively reordering steps so you don’t touch 3rd party systems before you make <em>super sure</em> that all your validations pass and all necessary DB and/or cache records are created/updated/deleted, and making sure all your return values from functions are good and machine-parseable.</p> 
	            </div>

	            <div class="base-line">
	                <div class="thread-counters">
	                    <span class="thread-count count-likes js-likers-trigger" title="Likes" data-post-id="388380" data-batch-url="/posts/batch_likers">
                        1
                      </span>
                      <!-- <span class="thread-count js-solved-indicator" title="Marked as solution"></span> -->
	                </div>
	                <div class="go-to-post">
	                  <a title="Go to post" alt="Go to post" href="https://forum.elixirforum.com/t/squidie-workflow-automation-runtime-for-elixir-applications/75162/13">Post #12</a>
	                </div>
	            </div>
              <div id="likers-container-388380" 
                   class="likers-container"
                   data-first-post="false"
                   data-batch-url="/posts/batch_likers">
                   <div class="likers-placeholder" 
                     data-likers-post-id="388380"
                     data-batch-url="/posts/batch_likers">
                  <div class="post-likers"></div>
                </div>
              </div>
	        </div>
			

    </div>

    <div class="triangle-top-right type-standard-post cat-standard-post" title="Post #12"></div>
  </section>
</div>
    <div class="postbit" id="388419" data-post-id="388419">
  <section>
    <div class="post-wrap">


					<div class="post-header">
		        <div class="user-avatar">
		          <img alt="webofbits" src="https://forum.elixirforum.com/user_avatar/forum.elixirforum.com/webofbits/120/39173_2.png" width="120" height="120" />
		        </div>
					
						<div class="user-details">
		          <div class="user-name">
		            <h3>
                  webofbits
                    <span class="op-star" title="Thread Starter">
                      <img alt="OP" class="op-star-icon" src="/assets/thread-icons/thread-icon-thread-starter-df91e872.png" />
                    </span>
                  </h3>
		          </div>
						
						</div>
					
					</div>

	        <div class="thread-main">
	            <div class="post-body" data-turbo="false">
								<p>I’m thinking about dogfooding Squid Mesh in a separate Phoenix side project: a Telegram bot that delivers Hacker News RSS digests.</p>
<p>The idea is intentionally small but realistic. A bot like this would exercise the host-app workflow contract without needing a huge application:</p>
<ul>
<li>scheduled workflow starts</li>
<li>fetching an external RSS feed</li>
<li>deduplicating already-sent items</li>
<li>formatting Telegram messages</li>
<li>retrying failed Telegram API calls</li>
<li>user subscription/preferences commands</li>
<li>disabling or cancelling deliveries</li>
<li>operator inspection with inspect_run/2 and explain_run/2</li>
</ul>
<p>A possible workflow could look like:</p>
<pre data-code-wrap="elixir"><code class="lang-elixir">workflow :deliver_hn_digest do
  step :fetch_feed, FetchHackerNewsRss
  step :dedupe_items, DedupeItems, after: :fetch_feed
  step :rank_items, RankItems, after: :dedupe_items
  step :format_message, FormatTelegramDigest, after: :rank_items
  step :send_digest, SendTelegramMessage, after: :format_message
end
</code></pre>
<p>This feels like a good proving ground because it has real side effects and failure modes, but the domain is easy to understand. It should quickly show whether Squid Mesh feels good inside a normal Phoenix app with its own Repo, Oban, migrations, and operational surface.</p>
<p>One thing I’ve been thinking through is reliability. I was starting to consider adding a heartbeat/lease system for running steps, but I’m now leaning toward that being premature.</p>
<p>My current thinking is that Squid Mesh can still be reliable without custom heartbeats if the<br>
contract is clear:</p>
<ul>
<li>Oban owns job durability and redelivery</li>
<li>Squid Mesh persists workflow runs, step runs, and attempts</li>
<li>duplicate deliveries are guarded at the workflow layer</li>
<li>external side effects need idempotency keys or duplicate-safe behavior</li>
<li>long waits should be modeled as scheduled continuation, not sleeping workers</li>
<li>long-running in-process steps should be avoided or treated carefully</li>
</ul>
<p>So heartbeat/leases may be an advanced feature for long-running worker-held steps, not something the library needs before it is useful. But I may be wrong here, and I’d be interested if others think custom leases/heartbeats are necessary earlier for this kind of workflow runtime.</p>
<p>Longer term, this bot could also become a place to try Jido-powered agent_steps:</p>
<ul>
<li>summarize stories</li>
<li>classify topics</li>
<li>personalize rankings</li>
<li>explain why a story was included</li>
</ul>
<p>The goal would be to learn from actual usage before adding heavier runtime features like<br>
leases, heartbeats, saga semantics, or deeper agent integration.</p> 
	            </div>

	            <div class="base-line">
	                <div class="thread-counters">
	                    <span class="thread-count count-likes js-likers-trigger" title="Likes" data-post-id="388419" data-batch-url="/posts/batch_likers">
                        2
                      </span>
                      <!-- <span class="thread-count js-solved-indicator" title="Marked as solution"></span> -->
	                </div>
	                <div class="go-to-post">
	                  <a title="Go to post" alt="Go to post" href="https://forum.elixirforum.com/t/squidie-workflow-automation-runtime-for-elixir-applications/75162/14">Post #13</a>
	                </div>
	            </div>
              <div id="likers-container-388419" 
                   class="likers-container"
                   data-first-post="false"
                   data-batch-url="/posts/batch_likers">
                   <div class="likers-placeholder" 
                     data-likers-post-id="388419"
                     data-batch-url="/posts/batch_likers">
                  <div class="post-likers"></div>
                </div>
              </div>
	        </div>
			

    </div>

    <div class="triangle-top-right type-standard-post cat-standard-post" title="Post #13"></div>
  </section>
</div>
    <div class="postbit" id="388420" data-post-id="388420">
  <section>
    <div class="post-wrap">


					<div class="post-header">
		        <div class="user-avatar">
		          <img alt="webofbits" src="https://forum.elixirforum.com/user_avatar/forum.elixirforum.com/webofbits/120/39173_2.png" width="120" height="120" />
		        </div>
					
						<div class="user-details">
		          <div class="user-name">
		            <h3>
                  webofbits
                    <span class="op-star" title="Thread Starter">
                      <img alt="OP" class="op-star-icon" src="/assets/thread-icons/thread-icon-thread-starter-df91e872.png" />
                    </span>
                  </h3>
		          </div>
						
						</div>
					
					</div>

	        <div class="thread-main">
	            <div class="post-body" data-turbo="false">
								<p>I started an empty repo with a <a href="https://github.com/ccarvalho-eng/hn-telegram-digest/blob/main/PLAN.md" rel="noopener nofollow ugc">PLAN.md</a></p> 
	            </div>

	            <div class="base-line">
	                <div class="thread-counters">
	                    <span class="thread-count count-likes js-likers-trigger" title="Likes" data-post-id="388420" data-batch-url="/posts/batch_likers">
                        0
                      </span>
                      <!-- <span class="thread-count js-solved-indicator" title="Marked as solution"></span> -->
	                </div>
	                <div class="go-to-post">
	                  <a title="Go to post" alt="Go to post" href="https://forum.elixirforum.com/t/squidie-workflow-automation-runtime-for-elixir-applications/75162/15">Post #14</a>
	                </div>
	            </div>
              <div id="likers-container-388420" 
                   class="likers-container"
                   data-first-post="false"
                   data-batch-url="/posts/batch_likers">
                   <div class="likers-placeholder" 
                     data-likers-post-id="388420"
                     data-batch-url="/posts/batch_likers">
                  <div class="post-likers"></div>
                </div>
              </div>
	        </div>
			

    </div>

    <div class="triangle-top-right type-standard-post cat-standard-post" title="Post #14"></div>
  </section>
</div>
    <div class="postbit" id="388534" data-post-id="388534">
  <section>
    <div class="post-wrap">


					<div class="post-header">
		        <div class="user-avatar">
		          <img alt="webofbits" src="https://forum.elixirforum.com/user_avatar/forum.elixirforum.com/webofbits/120/39173_2.png" width="120" height="120" />
		        </div>
					
						<div class="user-details">
		          <div class="user-name">
		            <h3>
                  webofbits
                    <span class="op-star" title="Thread Starter">
                      <img alt="OP" class="op-star-icon" src="/assets/thread-icons/thread-icon-thread-starter-df91e872.png" />
                    </span>
                  </h3>
		          </div>
						
						</div>
					
					</div>

	        <div class="thread-main">
	            <div class="post-body" data-turbo="false">
								<p>Dogfood app is done. Documented my findings <a href="https://github.com/ccarvalho-eng/hn-telegram-digest#squid-mesh-findings" rel="noopener nofollow ugc">here</a></p> 
	            </div>

	            <div class="base-line">
	                <div class="thread-counters">
	                    <span class="thread-count count-likes js-likers-trigger" title="Likes" data-post-id="388534" data-batch-url="/posts/batch_likers">
                        1
                      </span>
                      <!-- <span class="thread-count js-solved-indicator" title="Marked as solution"></span> -->
	                </div>
	                <div class="go-to-post">
	                  <a title="Go to post" alt="Go to post" href="https://forum.elixirforum.com/t/squidie-workflow-automation-runtime-for-elixir-applications/75162/16">Post #15</a>
	                </div>
	            </div>
              <div id="likers-container-388534" 
                   class="likers-container"
                   data-first-post="false"
                   data-batch-url="/posts/batch_likers">
                   <div class="likers-placeholder" 
                     data-likers-post-id="388534"
                     data-batch-url="/posts/batch_likers">
                  <div class="post-likers"></div>
                </div>
              </div>
	        </div>
			

    </div>

    <div class="triangle-top-right type-standard-post cat-standard-post" title="Post #15"></div>
  </section>
</div>
    <div class="postbit" id="388536" data-post-id="388536">
  <section>
    <div class="post-wrap">


					<div class="post-header">
		        <div class="user-avatar">
		          <img alt="webofbits" src="https://forum.elixirforum.com/user_avatar/forum.elixirforum.com/webofbits/120/39173_2.png" width="120" height="120" />
		        </div>
					
						<div class="user-details">
		          <div class="user-name">
		            <h3>
                  webofbits
                    <span class="op-star" title="Thread Starter">
                      <img alt="OP" class="op-star-icon" src="/assets/thread-icons/thread-icon-thread-starter-df91e872.png" />
                    </span>
                  </h3>
		          </div>
						
						</div>
					
					</div>

	        <div class="thread-main">
	            <div class="post-body" data-turbo="false">
								<p>Squid Mesh <code>0.1.0-alpha.4</code> is out.</p>
<p>This release adds:</p>
<ul>
<li><code>SquidMesh.explain_run/2</code> for operator-facing run diagnostics, including the current reason, valid next actions, and supporting evidence</li>
<li>multiple triggers per workflow, so a workflow can expose any mix of manual and cron entrypoints</li>
<li>a minimal host app example showing one workflow started manually or by cron</li>
<li>a fresh current-schema install migration from <code>mix squid_mesh.install</code></li>
<li>structured <code>:invalid_run_id</code> errors for malformed public run IDs</li>
</ul>
<p>Package:</p>
<aside class="onebox allowlistedgeneric" data-onebox-src="https://hex.pm/packages/squid_mesh/0.1.0-alpha.4">
  <header class="source">
      <img src="https://hex.pm/images/hex-full-a8183c4f9adac71516516d107d402b18.svg?vsn=d" class="site-icon" alt="" width="136" height="120">

      <a href="https://hex.pm/packages/squid_mesh/0.1.0-alpha.4" target="_blank" rel="noopener nofollow">Hex</a>
  </header>

  <article class="onebox-body">
    <img width="160" height="160" src="https://hex.pm/images/favicon-160-3770bc59f1f8ba7656b4db5a1eacd8e3.png?vsn=d" class="thumbnail onebox-avatar" alt="">

<h3><a href="https://hex.pm/packages/squid_mesh/0.1.0-alpha.4" target="_blank" rel="noopener nofollow">squid_mesh</a></h3>

  <p>Durable workflow runtime for Elixir applications.</p>


  </article>

  <div class="onebox-metadata">
    
    
  </div>

  <div style="clear: both"></div>
</aside>

<p>Docs:</p>
<aside class="onebox allowlistedgeneric" data-onebox-src="https://squid-mesh.hexdocs.pm/0.1.0-alpha.4/index.html">
  <header class="source">

      <a href="https://squid-mesh.hexdocs.pm/0.1.0-alpha.4/index.html" target="_blank" rel="noopener nofollow ugc">squid-mesh.hexdocs.pm</a>
  </header>

  <article class="onebox-body">
    

<h3><a href="https://squid-mesh.hexdocs.pm/0.1.0-alpha.4/index.html" target="_blank" rel="noopener nofollow ugc">squid_mesh v0.1.0-alpha.4 — Documentation</a></h3>



  </article>

  <div class="onebox-metadata">
    
    
  </div>

  <div style="clear: both"></div>
</aside>

<p>GitHub release:</p>
<aside class="onebox allowlistedgeneric" data-onebox-src="https://github.com/dark-trench/squidie/releases/tag/v0.1.0-alpha.4">
  <header class="source">
      <img src="https://github.githubassets.com/favicons/favicon.svg" class="site-icon" alt="" width="32" height="32">

      <a href="https://github.com/dark-trench/squidie/releases/tag/v0.1.0-alpha.4" target="_blank" rel="noopener nofollow ugc">GitHub</a>
  </header>

  <article class="onebox-body">
    <div class="aspect-image" style="--aspect-ratio:690/344;"><img src="https://opengraph.githubassets.com/6dbaea3f7edb5c016b1db9904cf233f8db4475cfb57bf075fc5573a6e71bdae8/dark-trench/squidie/releases/tag/v0.1.0-alpha.4" class="thumbnail" alt="" width="690" height="345"></div>

<h3><a href="https://github.com/dark-trench/squidie/releases/tag/v0.1.0-alpha.4" target="_blank" rel="noopener nofollow ugc">Release v0.1.0-alpha.4 · dark-trench/squidie</a></h3>

  <p>[0.1.0-alpha.4] - 2026-05-10
Added

Run explanation diagnostics through SquidMesh.explain_run/2, including
current reason, valid next actions, and supporting evidence for host app
dashboards or CLI...</p>


  </article>

  <div class="onebox-metadata">
    
    
  </div>

  <div style="clear: both"></div>
</aside>

<p>One note: this is still alpha. The migration installer now emits one current-schema Squid Mesh migration and does not include a compatibility path for older split Squid Mesh migrations.</p> 
	            </div>

	            <div class="base-line">
	                <div class="thread-counters">
	                    <span class="thread-count count-likes js-likers-trigger" title="Likes" data-post-id="388536" data-batch-url="/posts/batch_likers">
                        1
                      </span>
                      <!-- <span class="thread-count js-solved-indicator" title="Marked as solution"></span> -->
	                </div>
	                <div class="go-to-post">
	                  <a title="Go to post" alt="Go to post" href="https://forum.elixirforum.com/t/squidie-workflow-automation-runtime-for-elixir-applications/75162/17">Post #16</a>
	                </div>
	            </div>
              <div id="likers-container-388536" 
                   class="likers-container"
                   data-first-post="false"
                   data-batch-url="/posts/batch_likers">
                   <div class="likers-placeholder" 
                     data-likers-post-id="388536"
                     data-batch-url="/posts/batch_likers">
                  <div class="post-likers"></div>
                </div>
              </div>
	        </div>
			

    </div>

    <div class="triangle-top-right type-standard-post cat-standard-post" title="Post #16"></div>
  </section>
</div>
    <div class="postbit" id="388539" data-post-id="388539">
  <section>
    <div class="post-wrap">


					<div class="post-header">
		        <div class="user-avatar">
		          <img alt="webofbits" src="https://forum.elixirforum.com/user_avatar/forum.elixirforum.com/webofbits/120/39173_2.png" width="120" height="120" />
		        </div>
					
						<div class="user-details">
		          <div class="user-name">
		            <h3>
                  webofbits
                    <span class="op-star" title="Thread Starter">
                      <img alt="OP" class="op-star-icon" src="/assets/thread-icons/thread-icon-thread-starter-df91e872.png" />
                    </span>
                  </h3>
		          </div>
						
						</div>
					
					</div>

	        <div class="thread-main">
	            <div class="post-body" data-turbo="false">
								<p>One design note for the roadmap: I still expect Squid Mesh to keep using Jido over time, but likely more as an internal execution/action substrate than as the primary user-facing abstraction.</p>
<p>The direction I’m leaning toward is:</p>
<ul>
<li>Squid Mesh owns the durable workflow contract: triggers, persistence, retries, replay, audit, inspection, and host-app integration.</li>
<li>A native <code>SquidMesh.Step</code> contract becomes the preferred custom-step API.</li>
<li>Existing <code>Jido.Action</code> modules remain supported as an interop path.</li>
<li>Internally, Squid Mesh can keep using more of Jido where it helps without making every Jido concept part of the Squid Mesh public API.</li>
</ul>
<p>That should keep the authoring model focused on Squid Mesh while preserving the option to lean further into Jido for agentic/runtime pieces.</p>
<p><a href="https://github.com/ccarvalho-eng/squid_mesh/issues/152" class="onebox" target="_blank" rel="noopener nofollow ugc">https://github.com/ccarvalho-eng/squid_mesh/issues/152</a></p>
<p>cc <a class="mention" href="/u/mikehostetler" rel="nofollow">@mikehostetler</a></p> 
	            </div>

	            <div class="base-line">
	                <div class="thread-counters">
	                    <span class="thread-count count-likes js-likers-trigger" title="Likes" data-post-id="388539" data-batch-url="/posts/batch_likers">
                        1
                      </span>
                      <!-- <span class="thread-count js-solved-indicator" title="Marked as solution"></span> -->
	                </div>
	                <div class="go-to-post">
	                  <a title="Go to post" alt="Go to post" href="https://forum.elixirforum.com/t/squidie-workflow-automation-runtime-for-elixir-applications/75162/18">Post #17</a>
	                </div>
	            </div>
              <div id="likers-container-388539" 
                   class="likers-container"
                   data-first-post="false"
                   data-batch-url="/posts/batch_likers">
                   <div class="likers-placeholder" 
                     data-likers-post-id="388539"
                     data-batch-url="/posts/batch_likers">
                  <div class="post-likers"></div>
                </div>
              </div>
	        </div>
			

    </div>

    <div class="triangle-top-right type-standard-post cat-standard-post" title="Post #17"></div>
  </section>
</div>
    <div class="postbit" id="388584" data-post-id="388584">
  <section>
    <div class="post-wrap">


					<div class="post-header">
		        <div class="user-avatar">
		          <img alt="webofbits" src="https://forum.elixirforum.com/user_avatar/forum.elixirforum.com/webofbits/120/39173_2.png" width="120" height="120" />
		        </div>
					
						<div class="user-details">
		          <div class="user-name">
		            <h3>
                  webofbits
                    <span class="op-star" title="Thread Starter">
                      <img alt="OP" class="op-star-icon" src="/assets/thread-icons/thread-icon-thread-starter-df91e872.png" />
                    </span>
                  </h3>
		          </div>
						
						</div>
					
					</div>

	        <div class="thread-main">
	            <div class="post-body" data-turbo="false">
								<p>Longer term, this is something I could imagine building after the runtime matures further: a visual companion for inspecting Squid Mesh workflows and run state. For now I’m staying focused on the runtime, durability, and host-app integration, but I like the idea of eventually making workflow shape, transitions, retries, and manual gates easier to see at a glance.</p>
<p></p><div class="lightbox-wrapper"><a class="lightbox" href="https://forum.elixirforum.com/uploads/default/original/3X/5/a/5a08b2d326d2533ad0920459641558263d4e1b8a.jpeg" data-download-href="https://forum.elixirforum.com/uploads/default/5a08b2d326d2533ad0920459641558263d4e1b8a" title="Screenshot 2026-05-11 at 14.50.24" rel="nofollow"><img src="https://forum.elixirforum.com/uploads/default/original/3X/5/a/5a08b2d326d2533ad0920459641558263d4e1b8a.jpeg" alt="Screenshot 2026-05-11 at 14.50.24" data-base62-sha1="cQtBKtrLXaQ8EtihgwBAQ9bSLou" width="690" height="398" data-dominant-color="F8F8FA"><div class="meta"><svg class="fa d-icon d-icon-far-image svg-icon" aria-hidden="true"><use href="#far-image"></use></svg><span class="filename">Screenshot 2026-05-11 at 14.50.24</span><span class="informations">1200×693 36.4 KB</span><svg class="fa d-icon d-icon-discourse-expand svg-icon" aria-hidden="true"><use href="#discourse-expand"></use></svg></div></a></div><p></p> 
	            </div>

	            <div class="base-line">
	                <div class="thread-counters">
	                    <span class="thread-count count-likes js-likers-trigger" title="Likes" data-post-id="388584" data-batch-url="/posts/batch_likers">
                        3
                      </span>
                      <!-- <span class="thread-count js-solved-indicator" title="Marked as solution"></span> -->
	                </div>
	                <div class="go-to-post">
	                  <a title="Go to post" alt="Go to post" href="https://forum.elixirforum.com/t/squidie-workflow-automation-runtime-for-elixir-applications/75162/19">Post #18</a>
	                </div>
	            </div>
              <div id="likers-container-388584" 
                   class="likers-container"
                   data-first-post="false"
                   data-batch-url="/posts/batch_likers">
                   <div class="likers-placeholder" 
                     data-likers-post-id="388584"
                     data-batch-url="/posts/batch_likers">
                  <div class="post-likers"></div>
                </div>
              </div>
	        </div>
			

    </div>

    <div class="triangle-top-right type-standard-post cat-standard-post" title="Post #18"></div>
  </section>
</div>
    <div class="postbit" id="388595" data-post-id="388595">
  <section>
    <div class="post-wrap">


					<div class="post-header">
		        <div class="user-avatar">
		          <img alt="webofbits" src="https://forum.elixirforum.com/user_avatar/forum.elixirforum.com/webofbits/120/39173_2.png" width="120" height="120" />
		        </div>
					
						<div class="user-details">
		          <div class="user-name">
		            <h3>
                  webofbits
                    <span class="op-star" title="Thread Starter">
                      <img alt="OP" class="op-star-icon" src="/assets/thread-icons/thread-icon-thread-starter-df91e872.png" />
                    </span>
                  </h3>
		          </div>
						
						</div>
					
					</div>

	        <div class="thread-main">
	            <div class="post-body" data-turbo="false">
								<p>Released squid_mesh v0.1.0-alpha.5.</p>
<p>This adds step recovery markers for irreversible/non-compensatable side effects, persists recovery policy into step history, surfaces it in inspection/explanations, and blocks replay by default unless explicitly overridden with allow_irreversible: true.</p>
<p>Hex: <a href="https://hex.pm/packages/squid_mesh/0.1.0-alpha.5" class="inline-onebox" rel="nofollow">squid_mesh | Hex</a><br>
Docs: <a href="https://hexdocs.pm/squid_mesh/0.1.0-alpha.5" class="inline-onebox" rel="noopener nofollow ugc">squid_mesh v0.1.0-alpha.5 — Documentation</a></p> 
	            </div>

	            <div class="base-line">
	                <div class="thread-counters">
	                    <span class="thread-count count-likes js-likers-trigger" title="Likes" data-post-id="388595" data-batch-url="/posts/batch_likers">
                        0
                      </span>
                      <!-- <span class="thread-count js-solved-indicator" title="Marked as solution"></span> -->
	                </div>
	                <div class="go-to-post">
	                  <a title="Go to post" alt="Go to post" href="https://forum.elixirforum.com/t/squidie-workflow-automation-runtime-for-elixir-applications/75162/20">Post #19</a>
	                </div>
	            </div>
              <div id="likers-container-388595" 
                   class="likers-container"
                   data-first-post="false"
                   data-batch-url="/posts/batch_likers">
                   <div class="likers-placeholder" 
                     data-likers-post-id="388595"
                     data-batch-url="/posts/batch_likers">
                  <div class="post-likers"></div>
                </div>
              </div>
	        </div>
			

    </div>

    <div class="triangle-top-right type-standard-post cat-standard-post" title="Post #19"></div>
  </section>
</div>
    <div class="postbit" id="388596" data-post-id="388596">
  <section>
    <div class="post-wrap">


					<div class="post-header">
		        <div class="user-avatar">
		          <img alt="webofbits" src="https://forum.elixirforum.com/user_avatar/forum.elixirforum.com/webofbits/120/39173_2.png" width="120" height="120" />
		        </div>
					
						<div class="user-details">
		          <div class="user-name">
		            <h3>
                  webofbits
                    <span class="op-star" title="Thread Starter">
                      <img alt="OP" class="op-star-icon" src="/assets/thread-icons/thread-icon-thread-starter-df91e872.png" />
                    </span>
                  </h3>
		          </div>
						
						</div>
					
					</div>

	        <div class="thread-main">
	            <div class="post-body" data-turbo="false">
								<p>Up next: Saga Semantics <a href="https://github.com/ccarvalho-eng/squid_mesh/milestone/12" class="inline-onebox" rel="noopener nofollow ugc">GitHub · Where software is built</a></p> 
	            </div>

	            <div class="base-line">
	                <div class="thread-counters">
	                    <span class="thread-count count-likes js-likers-trigger" title="Likes" data-post-id="388596" data-batch-url="/posts/batch_likers">
                        0
                      </span>
                      <!-- <span class="thread-count js-solved-indicator" title="Marked as solution"></span> -->
	                </div>
	                <div class="go-to-post">
	                  <a title="Go to post" alt="Go to post" href="https://forum.elixirforum.com/t/squidie-workflow-automation-runtime-for-elixir-applications/75162/21">Post #20</a>
	                </div>
	            </div>
              <div id="likers-container-388596" 
                   class="likers-container"
                   data-first-post="false"
                   data-batch-url="/posts/batch_likers">
                   <div class="likers-placeholder" 
                     data-likers-post-id="388596"
                     data-batch-url="/posts/batch_likers">
                  <div class="post-likers"></div>
                </div>
              </div>
	        </div>
			

    </div>

    <div class="triangle-top-right type-standard-post cat-standard-post" title="Post #20"></div>
  </section>
</div>
</template></turbo-stream><turbo-stream action="replace" target="load-more-container"><template><div id="load-more-container" class="load-more-container">
    <a class="load-more-button" data-turbo-stream="true" href="/topics/75162/load_more?page=3">Load more posts (64 remaining)</a>
</div></template></turbo-stream>