<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/">
    <channel>
        <title>AkôFlow Blog</title>
        <link>https://akoflow.com/blog</link>
        <description>AkôFlow Blog</description>
        <lastBuildDate>Wed, 21 Oct 2026 00:00:00 GMT</lastBuildDate>
        <docs>https://validator.w3.org/feed/docs/rss2.html</docs>
        <generator>https://github.com/jpmonette/feed</generator>
        <language>en</language>
        <item>
            <title><![CDATA[From a DAG to your first AkôFlow run]]></title>
            <link>https://akoflow.com/blog/from-a-dag-to-your-first-run</link>
            <guid>https://akoflow.com/blog/from-a-dag-to-your-first-run</guid>
            <pubDate>Wed, 21 Oct 2026 00:00:00 GMT</pubDate>
            <description><![CDATA[With AkôFlow Desktop installed, follow annotated screenshots to create your first local workflow, execute it, and inspect its output.]]></description>
            <content:encoded><![CDATA[<p>With AkôFlow Desktop already installed, your first experiment can start on your own workstation. Describe one activity in YAML, select your local machine, and watch a real execution produce a file. Then turn that first activity into a small analysis pipeline.</p>
<p>This walkthrough uses <strong>AkôFlow Desktop throughout</strong>. Desktop starts its matching local services and manages the connection to the engine. You do not need to clone the source repository, start a development Compose stack, or copy an API token.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="what-you-will-build">What you will build<a href="https://akoflow.com/blog/from-a-dag-to-your-first-run#what-you-will-build" class="hash-link" aria-label="Direct link to What you will build" title="Direct link to What you will build" translate="no">​</a></h2>
<p>Begin with <code>write-report</code>: one activity that writes <code>result.txt</code> and prints its contents in the activity log. This checks the complete path from a definition to a local execution and its recorded output.</p>
<p>After that succeeds, import a second YAML with three activities: prepare three measurements, compute their mean, and write a report. The expected answer is <strong>4.00</strong>.</p>
<p>Both examples use a small BusyBox container on your local Docker engine. They perform <strong>real execution</strong>. They do not simulate work or allocate cloud machines.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="1-begin-after-desktop-is-installed">1. Begin after Desktop is installed<a href="https://akoflow.com/blog/from-a-dag-to-your-first-run#1-begin-after-desktop-is-installed" class="hash-link" aria-label="Direct link to 1. Begin after Desktop is installed" title="Direct link to 1. Begin after Desktop is installed" translate="no">​</a></h2>
<p>This walkthrough starts <strong>after installing AkôFlow Desktop</strong>. If you still need the application, follow <a class="" href="https://akoflow.com/docs/installation">Install AkôFlow Desktop</a>, then return here.</p>
<ol>
<li class="">Start Docker and open the installed AkôFlow Desktop application.</li>
<li class="">Let the engine checkup finish and wait for <strong>Overview</strong>.</li>
<li class="">Confirm <strong>Connected</strong> at the bottom-left corner.</li>
<li class="">Start with <strong>Infrastructure → Environments</strong> in the sidebar.</li>
</ol>
<p>The screenshots below were captured from the actual interface. They show the controls using an existing reference instance: its workflow is named <code>hello</code>, its activity is <code>a</code>, and its local environment is <code>Local environment</code>. <strong>For your experiment, enter the tutorial names <code>first-local-check</code>, <code>write-report</code>, <code>Local check</code>, and <code>First local scope</code>.</strong> Your fresh catalogs may be empty. The reference run's counts and files are identified in each caption rather than presented as your experiment's results.</p>
<p>Each red number has a matching instruction below the image. <strong>Click a screenshot to enlarge it with its arrows</strong>; on a phone, scroll the enlarged view sideways to read the controls.</p>
<figure class="figure_T25B"><figcaption><strong>Begin on Overview after installation</strong><p>The capture shows an existing instance. Your fresh installation can have empty catalogs.</p></figcaption><button type="button" class="thumbnail_Irs2" aria-label="Enlarge annotated screenshot: Begin on Overview after installation"><div class="canvas_XPmF"><img src="https://akoflow.com/img/blog/first-local-run/desktop-connected.jpg" alt="Begin on Overview after installation" width="1280" height="720" loading="lazy"><svg viewBox="0 0 1280 720" aria-hidden="true"><defs><marker id="_R_18bqfdeh_" viewBox="0 0 10 10" refX="9" refY="5" markerWidth="7" markerHeight="7" orient="auto-start-reverse"><path d="M0 0L10 5L0 10Z" fill="#dc2626"></path></marker></defs><g><line x1="210" y1="590" x2="90" y2="646" stroke="white" stroke-width="7"></line><line x1="210" y1="590" x2="90" y2="646" stroke="#dc2626" stroke-width="3" marker-end="url(#_R_18bqfdeh_)"></line><circle cx="210" cy="590" r="17" fill="#dc2626" stroke="white" stroke-width="3"></circle><text x="210" y="590" dominant-baseline="central" text-anchor="middle" fill="white" font-size="19" font-weight="700" font-family="system-ui, sans-serif">1</text></g><g><line x1="200" y1="235" x2="115" y2="292" stroke="white" stroke-width="7"></line><line x1="200" y1="235" x2="115" y2="292" stroke="#dc2626" stroke-width="3" marker-end="url(#_R_18bqfdeh_)"></line><circle cx="200" cy="235" r="17" fill="#dc2626" stroke="white" stroke-width="3"></circle><text x="200" y="235" dominant-baseline="central" text-anchor="middle" fill="white" font-size="19" font-weight="700" font-family="system-ui, sans-serif">2</text></g></svg></div><span class="enlarge_RkKu">Enlarge screenshot and arrows ↗</span></button><ol class="legend_Hll1"><li>Confirm that the bottom-left indicator says Connected.</li><li>Open Infrastructure → Environments to create your local target.</li></ol><dialog class="dialog_MgqT" aria-label="Begin on Overview after installation"><div class="dialogToolbar_gzGc"><strong>Begin on Overview after installation</strong><button type="button" autofocus="">Close ×</button></div><p class="panHint_JLfY">On a small screen, scroll sideways to inspect each control.</p><div class="expanded_ekRg"><div class="canvas_XPmF"><img src="https://akoflow.com/img/blog/first-local-run/desktop-connected.jpg" alt="Begin on Overview after installation" width="1280" height="720" loading="lazy"><svg viewBox="0 0 1280 720" aria-hidden="true"><defs><marker id="_R_3gbqfdeh_" viewBox="0 0 10 10" refX="9" refY="5" markerWidth="7" markerHeight="7" orient="auto-start-reverse"><path d="M0 0L10 5L0 10Z" fill="#dc2626"></path></marker></defs><g><line x1="210" y1="590" x2="90" y2="646" stroke="white" stroke-width="7"></line><line x1="210" y1="590" x2="90" y2="646" stroke="#dc2626" stroke-width="3" marker-end="url(#_R_3gbqfdeh_)"></line><circle cx="210" cy="590" r="17" fill="#dc2626" stroke="white" stroke-width="3"></circle><text x="210" y="590" dominant-baseline="central" text-anchor="middle" fill="white" font-size="19" font-weight="700" font-family="system-ui, sans-serif">1</text></g><g><line x1="200" y1="235" x2="115" y2="292" stroke="white" stroke-width="7"></line><line x1="200" y1="235" x2="115" y2="292" stroke="#dc2626" stroke-width="3" marker-end="url(#_R_3gbqfdeh_)"></line><circle cx="200" cy="235" r="17" fill="#dc2626" stroke="white" stroke-width="3"></circle><text x="200" y="235" dominant-baseline="central" text-anchor="middle" fill="white" font-size="19" font-weight="700" font-family="system-ui, sans-serif">2</text></g></svg></div></div><ol class="legend_Hll1"><li>Confirm that the bottom-left indicator says Connected.</li><li>Open Infrastructure → Environments to create your local target.</li></ol></dialog></figure>
<p><strong>Checkpoint:</strong> Desktop is connected. If startup fails, open its failure details before retrying.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="2-connect-your-local-machine">2. Connect your local machine<a href="https://akoflow.com/blog/from-a-dag-to-your-first-run#2-connect-your-local-machine" class="hash-link" aria-label="Direct link to 2. Connect your local machine" title="Direct link to 2. Connect your local machine" translate="no">​</a></h2>
<p>Open <strong>Infrastructure → Environments</strong>. To create the environment from scratch, follow the two screens below. If you already created <code>Local check</code>, open it and continue with its connection check instead.</p>
<figure class="figure_T25B"><figcaption><strong>Open the local environment setup</strong><p>Use the execution-infrastructure catalog for this real local workflow.</p></figcaption><button type="button" class="thumbnail_Irs2" aria-label="Enlarge annotated screenshot: Open the local environment setup"><div class="canvas_XPmF"><img src="https://akoflow.com/img/blog/first-local-run/connect-environment.jpg" alt="Open the local environment setup" width="1280" height="720" loading="lazy"><svg viewBox="0 0 1280 720" aria-hidden="true"><defs><marker id="_R_18fqfdeh_" viewBox="0 0 10 10" refX="9" refY="5" markerWidth="7" markerHeight="7" orient="auto-start-reverse"><path d="M0 0L10 5L0 10Z" fill="#dc2626"></path></marker></defs><g><line x1="860" y1="110" x2="991" y2="170" stroke="white" stroke-width="7"></line><line x1="860" y1="110" x2="991" y2="170" stroke="#dc2626" stroke-width="3" marker-end="url(#_R_18fqfdeh_)"></line><circle cx="860" cy="110" r="17" fill="#dc2626" stroke="white" stroke-width="3"></circle><text x="860" y="110" dominant-baseline="central" text-anchor="middle" fill="white" font-size="19" font-weight="700" font-family="system-ui, sans-serif">1</text></g><g><line x1="580" y1="280" x2="397" y2="234" stroke="white" stroke-width="7"></line><line x1="580" y1="280" x2="397" y2="234" stroke="#dc2626" stroke-width="3" marker-end="url(#_R_18fqfdeh_)"></line><circle cx="580" cy="280" r="17" fill="#dc2626" stroke="white" stroke-width="3"></circle><text x="580" y="280" dominant-baseline="central" text-anchor="middle" fill="white" font-size="19" font-weight="700" font-family="system-ui, sans-serif">2</text></g></svg></div><span class="enlarge_RkKu">Enlarge screenshot and arrows ↗</span></button><ol class="legend_Hll1"><li>Select Connect environment. Some releases call this New environment.</li><li>Keep Execution infrastructure selected.</li></ol><dialog class="dialog_MgqT" aria-label="Open the local environment setup"><div class="dialogToolbar_gzGc"><strong>Open the local environment setup</strong><button type="button" autofocus="">Close ×</button></div><p class="panHint_JLfY">On a small screen, scroll sideways to inspect each control.</p><div class="expanded_ekRg"><div class="canvas_XPmF"><img src="https://akoflow.com/img/blog/first-local-run/connect-environment.jpg" alt="Open the local environment setup" width="1280" height="720" loading="lazy"><svg viewBox="0 0 1280 720" aria-hidden="true"><defs><marker id="_R_3gfqfdeh_" viewBox="0 0 10 10" refX="9" refY="5" markerWidth="7" markerHeight="7" orient="auto-start-reverse"><path d="M0 0L10 5L0 10Z" fill="#dc2626"></path></marker></defs><g><line x1="860" y1="110" x2="991" y2="170" stroke="white" stroke-width="7"></line><line x1="860" y1="110" x2="991" y2="170" stroke="#dc2626" stroke-width="3" marker-end="url(#_R_3gfqfdeh_)"></line><circle cx="860" cy="110" r="17" fill="#dc2626" stroke="white" stroke-width="3"></circle><text x="860" y="110" dominant-baseline="central" text-anchor="middle" fill="white" font-size="19" font-weight="700" font-family="system-ui, sans-serif">1</text></g><g><line x1="580" y1="280" x2="397" y2="234" stroke="white" stroke-width="7"></line><line x1="580" y1="280" x2="397" y2="234" stroke="#dc2626" stroke-width="3" marker-end="url(#_R_3gfqfdeh_)"></line><circle cx="580" cy="280" r="17" fill="#dc2626" stroke="white" stroke-width="3"></circle><text x="580" y="280" dominant-baseline="central" text-anchor="middle" fill="white" font-size="19" font-weight="700" font-family="system-ui, sans-serif">2</text></g></svg></div></div><ol class="legend_Hll1"><li>Select Connect environment. Some releases call this New environment.</li><li>Keep Execution infrastructure selected.</li></ol></dialog></figure>
<ol>
<li class="">Select <strong>Connect environment</strong> (called <strong>New environment</strong> in some releases), then <strong>Local machine</strong>.</li>
<li class="">Name it <code>Local check</code>.</li>
<li class="">Select <strong>Test connection</strong>.</li>
<li class="">When the test succeeds, select <strong>Save environment</strong>.</li>
</ol>
<figure class="figure_T25B"><figcaption><strong>Create Local check</strong><p>This form has only been filled for the capture: Save environment becomes available after a successful connection test.</p></figcaption><button type="button" class="thumbnail_Irs2" aria-label="Enlarge annotated screenshot: Create Local check"><div class="canvas_XPmF"><img src="https://akoflow.com/img/blog/first-local-run/new-local-environment.jpg" alt="Create Local check" width="1280" height="720" loading="lazy"><svg viewBox="0 0 1280 720" aria-hidden="true"><defs><marker id="_R_18hqfdeh_" viewBox="0 0 10 10" refX="9" refY="5" markerWidth="7" markerHeight="7" orient="auto-start-reverse"><path d="M0 0L10 5L0 10Z" fill="#dc2626"></path></marker></defs><g><line x1="530" y1="215" x2="420" y2="289" stroke="white" stroke-width="7"></line><line x1="530" y1="215" x2="420" y2="289" stroke="#dc2626" stroke-width="3" marker-end="url(#_R_18hqfdeh_)"></line><circle cx="530" cy="215" r="17" fill="#dc2626" stroke="white" stroke-width="3"></circle><text x="530" y="215" dominant-baseline="central" text-anchor="middle" fill="white" font-size="19" font-weight="700" font-family="system-ui, sans-serif">1</text></g><g><line x1="610" y1="421" x2="527" y2="485" stroke="white" stroke-width="7"></line><line x1="610" y1="421" x2="527" y2="485" stroke="#dc2626" stroke-width="3" marker-end="url(#_R_18hqfdeh_)"></line><circle cx="610" cy="421" r="17" fill="#dc2626" stroke="white" stroke-width="3"></circle><text x="610" y="421" dominant-baseline="central" text-anchor="middle" fill="white" font-size="19" font-weight="700" font-family="system-ui, sans-serif">2</text></g><g><line x1="812" y1="605" x2="952" y2="635" stroke="white" stroke-width="7"></line><line x1="812" y1="605" x2="952" y2="635" stroke="#dc2626" stroke-width="3" marker-end="url(#_R_18hqfdeh_)"></line><circle cx="812" cy="605" r="17" fill="#dc2626" stroke="white" stroke-width="3"></circle><text x="812" y="605" dominant-baseline="central" text-anchor="middle" fill="white" font-size="19" font-weight="700" font-family="system-ui, sans-serif">3</text></g><g><line x1="1130" y1="575" x2="1121" y2="635" stroke="white" stroke-width="7"></line><line x1="1130" y1="575" x2="1121" y2="635" stroke="#dc2626" stroke-width="3" marker-end="url(#_R_18hqfdeh_)"></line><circle cx="1130" cy="575" r="17" fill="#dc2626" stroke="white" stroke-width="3"></circle><text x="1130" y="575" dominant-baseline="central" text-anchor="middle" fill="white" font-size="19" font-weight="700" font-family="system-ui, sans-serif">4</text></g></svg></div><span class="enlarge_RkKu">Enlarge screenshot and arrows ↗</span></button><ol class="legend_Hll1"><li>Choose Local machine.</li><li>Enter Local check as the environment name.</li><li>Select Test connection and wait for success.</li><li>After the test succeeds, select Save environment.</li></ol><dialog class="dialog_MgqT" aria-label="Create Local check"><div class="dialogToolbar_gzGc"><strong>Create Local check</strong><button type="button" autofocus="">Close ×</button></div><p class="panHint_JLfY">On a small screen, scroll sideways to inspect each control.</p><div class="expanded_ekRg"><div class="canvas_XPmF"><img src="https://akoflow.com/img/blog/first-local-run/new-local-environment.jpg" alt="Create Local check" width="1280" height="720" loading="lazy"><svg viewBox="0 0 1280 720" aria-hidden="true"><defs><marker id="_R_3ghqfdeh_" viewBox="0 0 10 10" refX="9" refY="5" markerWidth="7" markerHeight="7" orient="auto-start-reverse"><path d="M0 0L10 5L0 10Z" fill="#dc2626"></path></marker></defs><g><line x1="530" y1="215" x2="420" y2="289" stroke="white" stroke-width="7"></line><line x1="530" y1="215" x2="420" y2="289" stroke="#dc2626" stroke-width="3" marker-end="url(#_R_3ghqfdeh_)"></line><circle cx="530" cy="215" r="17" fill="#dc2626" stroke="white" stroke-width="3"></circle><text x="530" y="215" dominant-baseline="central" text-anchor="middle" fill="white" font-size="19" font-weight="700" font-family="system-ui, sans-serif">1</text></g><g><line x1="610" y1="421" x2="527" y2="485" stroke="white" stroke-width="7"></line><line x1="610" y1="421" x2="527" y2="485" stroke="#dc2626" stroke-width="3" marker-end="url(#_R_3ghqfdeh_)"></line><circle cx="610" cy="421" r="17" fill="#dc2626" stroke="white" stroke-width="3"></circle><text x="610" y="421" dominant-baseline="central" text-anchor="middle" fill="white" font-size="19" font-weight="700" font-family="system-ui, sans-serif">2</text></g><g><line x1="812" y1="605" x2="952" y2="635" stroke="white" stroke-width="7"></line><line x1="812" y1="605" x2="952" y2="635" stroke="#dc2626" stroke-width="3" marker-end="url(#_R_3ghqfdeh_)"></line><circle cx="812" cy="605" r="17" fill="#dc2626" stroke="white" stroke-width="3"></circle><text x="812" y="605" dominant-baseline="central" text-anchor="middle" fill="white" font-size="19" font-weight="700" font-family="system-ui, sans-serif">3</text></g><g><line x1="1130" y1="575" x2="1121" y2="635" stroke="white" stroke-width="7"></line><line x1="1130" y1="575" x2="1121" y2="635" stroke="#dc2626" stroke-width="3" marker-end="url(#_R_3ghqfdeh_)"></line><circle cx="1130" cy="575" r="17" fill="#dc2626" stroke="white" stroke-width="3"></circle><text x="1130" y="575" dominant-baseline="central" text-anchor="middle" fill="white" font-size="19" font-weight="700" font-family="system-ui, sans-serif">4</text></g></svg></div></div><ol class="legend_Hll1"><li>Choose Local machine.</li><li>Enter Local check as the environment name.</li><li>Select Test connection and wait for success.</li><li>After the test succeeds, select Save environment.</li></ol></dialog></figure>
<p>On the environment page, select <strong>Check now</strong>. Wait until <strong>Local machine</strong> shows <strong>online</strong>. This makes the local resource available for planning.</p>
<p>An <em>environment</em> describes where the work can run. Here, the target is the machine reached through your local AkôFlow engine. Desktop requests connection checks from the daemon.</p>
<figure class="figure_T25B"><figcaption><strong>Check that the local machine is online</strong><p>Open the environment you created. This reference environment is already online; your tutorial environment is named Local check.</p></figcaption><button type="button" class="thumbnail_Irs2" aria-label="Enlarge annotated screenshot: Check that the local machine is online"><div class="canvas_XPmF"><img src="https://akoflow.com/img/blog/first-local-run/check-local-online.jpg" alt="Check that the local machine is online" width="1280" height="720" loading="lazy"><svg viewBox="0 0 1280 720" aria-hidden="true"><defs><marker id="_R_18kqfdeh_" viewBox="0 0 10 10" refX="9" refY="5" markerWidth="7" markerHeight="7" orient="auto-start-reverse"><path d="M0 0L10 5L0 10Z" fill="#dc2626"></path></marker></defs><g><line x1="735" y1="440" x2="617" y2="391" stroke="white" stroke-width="7"></line><line x1="735" y1="440" x2="617" y2="391" stroke="#dc2626" stroke-width="3" marker-end="url(#_R_18kqfdeh_)"></line><circle cx="735" cy="440" r="17" fill="#dc2626" stroke="white" stroke-width="3"></circle><text x="735" y="440" dominant-baseline="central" text-anchor="middle" fill="white" font-size="19" font-weight="700" font-family="system-ui, sans-serif">1</text></g><g><line x1="1030" y1="318" x2="532" y2="391" stroke="white" stroke-width="7"></line><line x1="1030" y1="318" x2="532" y2="391" stroke="#dc2626" stroke-width="3" marker-end="url(#_R_18kqfdeh_)"></line><circle cx="1030" cy="318" r="17" fill="#dc2626" stroke="white" stroke-width="3"></circle><text x="1030" y="318" dominant-baseline="central" text-anchor="middle" fill="white" font-size="19" font-weight="700" font-family="system-ui, sans-serif">2</text></g></svg></div><span class="enlarge_RkKu">Enlarge screenshot and arrows ↗</span></button><ol class="legend_Hll1"><li>Select Check now to request a fresh connection check.</li><li>Continue when the local connection reads online.</li></ol><dialog class="dialog_MgqT" aria-label="Check that the local machine is online"><div class="dialogToolbar_gzGc"><strong>Check that the local machine is online</strong><button type="button" autofocus="">Close ×</button></div><p class="panHint_JLfY">On a small screen, scroll sideways to inspect each control.</p><div class="expanded_ekRg"><div class="canvas_XPmF"><img src="https://akoflow.com/img/blog/first-local-run/check-local-online.jpg" alt="Check that the local machine is online" width="1280" height="720" loading="lazy"><svg viewBox="0 0 1280 720" aria-hidden="true"><defs><marker id="_R_3gkqfdeh_" viewBox="0 0 10 10" refX="9" refY="5" markerWidth="7" markerHeight="7" orient="auto-start-reverse"><path d="M0 0L10 5L0 10Z" fill="#dc2626"></path></marker></defs><g><line x1="735" y1="440" x2="617" y2="391" stroke="white" stroke-width="7"></line><line x1="735" y1="440" x2="617" y2="391" stroke="#dc2626" stroke-width="3" marker-end="url(#_R_3gkqfdeh_)"></line><circle cx="735" cy="440" r="17" fill="#dc2626" stroke="white" stroke-width="3"></circle><text x="735" y="440" dominant-baseline="central" text-anchor="middle" fill="white" font-size="19" font-weight="700" font-family="system-ui, sans-serif">1</text></g><g><line x1="1030" y1="318" x2="532" y2="391" stroke="white" stroke-width="7"></line><line x1="1030" y1="318" x2="532" y2="391" stroke="#dc2626" stroke-width="3" marker-end="url(#_R_3gkqfdeh_)"></line><circle cx="1030" cy="318" r="17" fill="#dc2626" stroke="white" stroke-width="3"></circle><text x="1030" y="318" dominant-baseline="central" text-anchor="middle" fill="white" font-size="19" font-weight="700" font-family="system-ui, sans-serif">2</text></g></svg></div></div><ol class="legend_Hll1"><li>Select Check now to request a fresh connection check.</li><li>Continue when the local connection reads online.</li></ol></dialog></figure>
<p><strong>Checkpoint:</strong> the local resource is online. Remember its environment name for step 5.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="3-save-your-first-workflow-yaml">3. Save your first workflow YAML<a href="https://akoflow.com/blog/from-a-dag-to-your-first-run#3-save-your-first-workflow-yaml" class="hash-link" aria-label="Direct link to 3. Save your first workflow YAML" title="Direct link to 3. Save your first workflow YAML" translate="no">​</a></h2>
<p>Create a plain-text file named <code>first-local-check.yaml</code>, or <a href="https://akoflow.com/assets/files/first-local-check-f0557ffbe44ea5c7f0b7927f8450c915.yaml" target="_blank" class="">download the complete YAML</a>. Copy the whole document, preserving indentation, and save it with the <code>.yaml</code> extension.</p>
<div class="language-yaml codeBlockContainer_Ckt0 theme-code-block" style="--prism-background-color:hsl(230, 1%, 98%);--prism-color:hsl(230, 8%, 24%)"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-yaml codeBlock_bY9V thin-scrollbar" style="background-color:hsl(230, 1%, 98%);color:hsl(230, 8%, 24%)"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token key atrule" style="color:hsl(35, 99%, 36%)">name</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">:</span><span class="token plain"> first</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">-</span><span class="token plain">local</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">-</span><span class="token plain">check</span><br></div><div class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain"></span><span class="token key atrule" style="color:hsl(35, 99%, 36%)">spec</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">:</span><span class="token plain"></span><br></div><div class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain">  </span><span class="token key atrule" style="color:hsl(35, 99%, 36%)">namespace</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">:</span><span class="token plain"> learning</span><br></div><div class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain">  </span><span class="token key atrule" style="color:hsl(35, 99%, 36%)">activities</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">:</span><span class="token plain"></span><br></div><div class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain">    </span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">-</span><span class="token plain"> </span><span class="token key atrule" style="color:hsl(35, 99%, 36%)">name</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">:</span><span class="token plain"> write</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">-</span><span class="token plain">report</span><br></div><div class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain">      </span><span class="token key atrule" style="color:hsl(35, 99%, 36%)">cpuLimit</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">:</span><span class="token plain"> </span><span class="token string" style="color:hsl(119, 34%, 47%)">"0.1"</span><span class="token plain"></span><br></div><div class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain">      </span><span class="token key atrule" style="color:hsl(35, 99%, 36%)">memoryLimit</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">:</span><span class="token plain"> 32Mi</span><br></div><div class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain">      </span><span class="token key atrule" style="color:hsl(35, 99%, 36%)">command</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">:</span><span class="token plain"></span><br></div><div class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain">        </span><span class="token key atrule" style="color:hsl(35, 99%, 36%)">executable</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">:</span><span class="token plain"></span><br></div><div class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain">          </span><span class="token key atrule" style="color:hsl(35, 99%, 36%)">source</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">:</span><span class="token plain"></span><br></div><div class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain">            </span><span class="token key atrule" style="color:hsl(35, 99%, 36%)">type</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">:</span><span class="token plain"> oci</span><br></div><div class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain">            </span><span class="token key atrule" style="color:hsl(35, 99%, 36%)">reference</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">:</span><span class="token plain"> docker.io/library/busybox</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">:</span><span class="token number" style="color:hsl(35, 99%, 36%)">1.36</span><span class="token plain"></span><br></div><div class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain">          </span><span class="token key atrule" style="color:hsl(35, 99%, 36%)">delivery</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">:</span><span class="token plain"></span><br></div><div class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain">            </span><span class="token key atrule" style="color:hsl(35, 99%, 36%)">strategy</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">:</span><span class="token plain"> auto</span><br></div><div class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain">            </span><span class="token key atrule" style="color:hsl(35, 99%, 36%)">targetFormat</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">:</span><span class="token plain"> oci</span><br></div><div class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain">        </span><span class="token key atrule" style="color:hsl(35, 99%, 36%)">entrypoint</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">:</span><span class="token plain"> sh</span><br></div><div class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain">        </span><span class="token key atrule" style="color:hsl(35, 99%, 36%)">arguments</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">:</span><span class="token plain"></span><br></div><div class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain">          </span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">-</span><span class="token plain"> </span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">-</span><span class="token plain">c</span><br></div><div class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain">          </span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">-</span><span class="token plain"> </span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">|</span><span class="token scalar string" style="color:hsl(119, 34%, 47%)"></span><br></div><div class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token scalar string" style="color:hsl(119, 34%, 47%)">            printf 'Akoflow local check\n' &gt; result.txt</span><br></div><div class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token scalar string" style="color:hsl(119, 34%, 47%)">            cat result.txt</span><span class="token plain"></span><br></div><div class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain">      </span><span class="token key atrule" style="color:hsl(35, 99%, 36%)">expectedOutputs</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">:</span><span class="token plain"> </span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">[</span><span class="token plain">result.txt</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">]</span><br></div></code></pre></div></div>
<p>Read the document from the outside in:</p>
<ul>
<li class=""><code>name</code> identifies the workflow. <code>namespace</code> groups it under <code>learning</code>.</li>
<li class=""><code>activities</code> contains one unit of work: <code>write-report</code>.</li>
<li class=""><code>command.executable</code> names the BusyBox image. <code>targetFormat: oci</code> selects the container format used by local Docker.</li>
<li class=""><code>entrypoint: sh</code> and the <code>-c</code> argument run the following shell script.</li>
<li class=""><code>printf</code> creates the file in the activity workspace. <code>cat</code> prints it into the activity log.</li>
<li class=""><code>expectedOutputs</code> asserts that <code>result.txt</code> exists after execution.</li>
<li class="">CPU and memory limits describe the activity's small resource demand.</li>
</ul>
<p>The image comes from Docker Hub, so its first use may take longer while it downloads. For a research reproducibility bundle, also retain the resolved image digest alongside the version tag.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="4-import-the-yaml-in-desktop">4. Import the YAML in Desktop<a href="https://akoflow.com/blog/from-a-dag-to-your-first-run#4-import-the-yaml-in-desktop" class="hash-link" aria-label="Direct link to 4. Import the YAML in Desktop" title="Direct link to 4. Import the YAML in Desktop" translate="no">​</a></h2>
<figure class="figure_T25B"><figcaption><strong>Import the workflow you saved</strong><p>The catalog can already contain other workflows. Import your first-local-check.yaml file.</p></figcaption><button type="button" class="thumbnail_Irs2" aria-label="Enlarge annotated screenshot: Import the workflow you saved"><div class="canvas_XPmF"><img src="https://akoflow.com/img/blog/first-local-run/import-workflow.jpg" alt="Import the workflow you saved" width="1280" height="720" loading="lazy"><svg viewBox="0 0 1280 720" aria-hidden="true"><defs><marker id="_R_18tqfdeh_" viewBox="0 0 10 10" refX="9" refY="5" markerWidth="7" markerHeight="7" orient="auto-start-reverse"><path d="M0 0L10 5L0 10Z" fill="#dc2626"></path></marker></defs><g><line x1="1030" y1="160" x2="1162" y2="110" stroke="white" stroke-width="7"></line><line x1="1030" y1="160" x2="1162" y2="110" stroke="#dc2626" stroke-width="3" marker-end="url(#_R_18tqfdeh_)"></line><circle cx="1030" cy="160" r="17" fill="#dc2626" stroke="white" stroke-width="3"></circle><text x="1030" y="160" dominant-baseline="central" text-anchor="middle" fill="white" font-size="19" font-weight="700" font-family="system-ui, sans-serif">1</text></g><g><line x1="190" y1="205" x2="111" y2="178" stroke="white" stroke-width="7"></line><line x1="190" y1="205" x2="111" y2="178" stroke="#dc2626" stroke-width="3" marker-end="url(#_R_18tqfdeh_)"></line><circle cx="190" cy="205" r="17" fill="#dc2626" stroke="white" stroke-width="3"></circle><text x="190" y="205" dominant-baseline="central" text-anchor="middle" fill="white" font-size="19" font-weight="700" font-family="system-ui, sans-serif">2</text></g></svg></div><span class="enlarge_RkKu">Enlarge screenshot and arrows ↗</span></button><ol class="legend_Hll1"><li>Select Import YAML, then choose first-local-check.yaml.</li><li>Find this catalog under Workflows → Definitions.</li></ol><dialog class="dialog_MgqT" aria-label="Import the workflow you saved"><div class="dialogToolbar_gzGc"><strong>Import the workflow you saved</strong><button type="button" autofocus="">Close ×</button></div><p class="panHint_JLfY">On a small screen, scroll sideways to inspect each control.</p><div class="expanded_ekRg"><div class="canvas_XPmF"><img src="https://akoflow.com/img/blog/first-local-run/import-workflow.jpg" alt="Import the workflow you saved" width="1280" height="720" loading="lazy"><svg viewBox="0 0 1280 720" aria-hidden="true"><defs><marker id="_R_3gtqfdeh_" viewBox="0 0 10 10" refX="9" refY="5" markerWidth="7" markerHeight="7" orient="auto-start-reverse"><path d="M0 0L10 5L0 10Z" fill="#dc2626"></path></marker></defs><g><line x1="1030" y1="160" x2="1162" y2="110" stroke="white" stroke-width="7"></line><line x1="1030" y1="160" x2="1162" y2="110" stroke="#dc2626" stroke-width="3" marker-end="url(#_R_3gtqfdeh_)"></line><circle cx="1030" cy="160" r="17" fill="#dc2626" stroke="white" stroke-width="3"></circle><text x="1030" y="160" dominant-baseline="central" text-anchor="middle" fill="white" font-size="19" font-weight="700" font-family="system-ui, sans-serif">1</text></g><g><line x1="190" y1="205" x2="111" y2="178" stroke="white" stroke-width="7"></line><line x1="190" y1="205" x2="111" y2="178" stroke="#dc2626" stroke-width="3" marker-end="url(#_R_3gtqfdeh_)"></line><circle cx="190" cy="205" r="17" fill="#dc2626" stroke="white" stroke-width="3"></circle><text x="190" y="205" dominant-baseline="central" text-anchor="middle" fill="white" font-size="19" font-weight="700" font-family="system-ui, sans-serif">2</text></g></svg></div></div><ol class="legend_Hll1"><li>Select Import YAML, then choose first-local-check.yaml.</li><li>Find this catalog under Workflows → Definitions.</li></ol></dialog></figure>
<ol>
<li class="">Open <strong>Workflows → Definitions</strong>.</li>
<li class="">Select <strong>Import YAML</strong> and choose <code>first-local-check.yaml</code>.</li>
<li class="">Open the new <code>first-local-check</code> definition.</li>
<li class="">Confirm that the DAG contains one activity named <strong>write-report</strong>.</li>
</ol>
<p>A <em>DAG</em> is a directed acyclic graph: nodes are activities and arrows are dependencies. This first graph has one node and no arrows, enough to learn the execution lifecycle before adding data handoffs.</p>
<p>If the name already exists, open the existing definition or change <code>name</code> before importing another copy. The importer normalizes names into identifiers, so each new definition needs a distinct name.</p>
<p><strong>Checkpoint:</strong> the definition exists and its graph matches the YAML. Importing saves a definition; it does not start a run.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="5-create-a-local-execution-scope">5. Create a local execution scope<a href="https://akoflow.com/blog/from-a-dag-to-your-first-run#5-create-a-local-execution-scope" class="hash-link" aria-label="Direct link to 5. Create a local execution scope" title="Direct link to 5. Create a local execution scope" translate="no">​</a></h2>
<figure class="figure_T25B"><figcaption><strong>Create a new execution scope</strong><p>A fresh instance can show an empty catalog; the creation action is in the page header.</p></figcaption><button type="button" class="thumbnail_Irs2" aria-label="Enlarge annotated screenshot: Create a new execution scope"><div class="canvas_XPmF"><img src="https://akoflow.com/img/blog/first-local-run/scope-catalog.jpg" alt="Create a new execution scope" width="1280" height="720" loading="lazy"><svg viewBox="0 0 1280 720" aria-hidden="true"><defs><marker id="_R_193qfdeh_" viewBox="0 0 10 10" refX="9" refY="5" markerWidth="7" markerHeight="7" orient="auto-start-reverse"><path d="M0 0L10 5L0 10Z" fill="#dc2626"></path></marker></defs><g><line x1="1050" y1="245" x2="1165" y2="131" stroke="white" stroke-width="7"></line><line x1="1050" y1="245" x2="1165" y2="131" stroke="#dc2626" stroke-width="3" marker-end="url(#_R_193qfdeh_)"></line><circle cx="1050" cy="245" r="17" fill="#dc2626" stroke="white" stroke-width="3"></circle><text x="1050" y="245" dominant-baseline="central" text-anchor="middle" fill="white" font-size="19" font-weight="700" font-family="system-ui, sans-serif">1</text></g><g><line x1="189" y1="446" x2="121" y2="405" stroke="white" stroke-width="7"></line><line x1="189" y1="446" x2="121" y2="405" stroke="#dc2626" stroke-width="3" marker-end="url(#_R_193qfdeh_)"></line><circle cx="189" cy="446" r="17" fill="#dc2626" stroke="white" stroke-width="3"></circle><text x="189" y="446" dominant-baseline="central" text-anchor="middle" fill="white" font-size="19" font-weight="700" font-family="system-ui, sans-serif">2</text></g></svg></div><span class="enlarge_RkKu">Enlarge screenshot and arrows ↗</span></button><ol class="legend_Hll1"><li>Select Create scope (New execution scope in some releases).</li><li>Open Infrastructure → Execution scopes.</li></ol><dialog class="dialog_MgqT" aria-label="Create a new execution scope"><div class="dialogToolbar_gzGc"><strong>Create a new execution scope</strong><button type="button" autofocus="">Close ×</button></div><p class="panHint_JLfY">On a small screen, scroll sideways to inspect each control.</p><div class="expanded_ekRg"><div class="canvas_XPmF"><img src="https://akoflow.com/img/blog/first-local-run/scope-catalog.jpg" alt="Create a new execution scope" width="1280" height="720" loading="lazy"><svg viewBox="0 0 1280 720" aria-hidden="true"><defs><marker id="_R_3h3qfdeh_" viewBox="0 0 10 10" refX="9" refY="5" markerWidth="7" markerHeight="7" orient="auto-start-reverse"><path d="M0 0L10 5L0 10Z" fill="#dc2626"></path></marker></defs><g><line x1="1050" y1="245" x2="1165" y2="131" stroke="white" stroke-width="7"></line><line x1="1050" y1="245" x2="1165" y2="131" stroke="#dc2626" stroke-width="3" marker-end="url(#_R_3h3qfdeh_)"></line><circle cx="1050" cy="245" r="17" fill="#dc2626" stroke="white" stroke-width="3"></circle><text x="1050" y="245" dominant-baseline="central" text-anchor="middle" fill="white" font-size="19" font-weight="700" font-family="system-ui, sans-serif">1</text></g><g><line x1="189" y1="446" x2="121" y2="405" stroke="white" stroke-width="7"></line><line x1="189" y1="446" x2="121" y2="405" stroke="#dc2626" stroke-width="3" marker-end="url(#_R_3h3qfdeh_)"></line><circle cx="189" cy="446" r="17" fill="#dc2626" stroke="white" stroke-width="3"></circle><text x="189" y="446" dominant-baseline="central" text-anchor="middle" fill="white" font-size="19" font-weight="700" font-family="system-ui, sans-serif">2</text></g></svg></div></div><ol class="legend_Hll1"><li>Select Create scope (New execution scope in some releases).</li><li>Open Infrastructure → Execution scopes.</li></ol></dialog></figure>
<ol>
<li class="">Open <strong>Infrastructure → Execution scopes</strong>.</li>
<li class="">Select <strong>Create scope</strong> (called <strong>New execution scope</strong> in some releases).</li>
<li class="">Name it <code>First local scope</code> and select your local environment.</li>
<li class="">Leave <strong>Create the initial network topology</strong> enabled.</li>
<li class="">Select <strong>Create execution scope</strong>.</li>
</ol>
<figure class="figure_T25B"><figcaption><strong>Name the scope and keep its topology</strong><p>Enter First local scope. The initial topology is sufficient for a one-machine experiment.</p></figcaption><button type="button" class="thumbnail_Irs2" aria-label="Enlarge annotated screenshot: Name the scope and keep its topology"><div class="canvas_XPmF"><img src="https://akoflow.com/img/blog/first-local-run/scope-name.jpg" alt="Name the scope and keep its topology" width="1280" height="720" loading="lazy"><svg viewBox="0 0 1280 720" aria-hidden="true"><defs><marker id="_R_195qfdeh_" viewBox="0 0 10 10" refX="9" refY="5" markerWidth="7" markerHeight="7" orient="auto-start-reverse"><path d="M0 0L10 5L0 10Z" fill="#dc2626"></path></marker></defs><g><line x1="580" y1="260" x2="561" y2="319" stroke="white" stroke-width="7"></line><line x1="580" y1="260" x2="561" y2="319" stroke="#dc2626" stroke-width="3" marker-end="url(#_R_195qfdeh_)"></line><circle cx="580" cy="260" r="17" fill="#dc2626" stroke="white" stroke-width="3"></circle><text x="580" y="260" dominant-baseline="central" text-anchor="middle" fill="white" font-size="19" font-weight="700" font-family="system-ui, sans-serif">1</text></g><g><line x1="531" y1="415" x2="325" y2="478" stroke="white" stroke-width="7"></line><line x1="531" y1="415" x2="325" y2="478" stroke="#dc2626" stroke-width="3" marker-end="url(#_R_195qfdeh_)"></line><circle cx="531" cy="415" r="17" fill="#dc2626" stroke="white" stroke-width="3"></circle><text x="531" y="415" dominant-baseline="central" text-anchor="middle" fill="white" font-size="19" font-weight="700" font-family="system-ui, sans-serif">2</text></g></svg></div><span class="enlarge_RkKu">Enlarge screenshot and arrows ↗</span></button><ol class="legend_Hll1"><li>Enter First local scope in Name.</li><li>Leave Create the initial network topology enabled.</li></ol><dialog class="dialog_MgqT" aria-label="Name the scope and keep its topology"><div class="dialogToolbar_gzGc"><strong>Name the scope and keep its topology</strong><button type="button" autofocus="">Close ×</button></div><p class="panHint_JLfY">On a small screen, scroll sideways to inspect each control.</p><div class="expanded_ekRg"><div class="canvas_XPmF"><img src="https://akoflow.com/img/blog/first-local-run/scope-name.jpg" alt="Name the scope and keep its topology" width="1280" height="720" loading="lazy"><svg viewBox="0 0 1280 720" aria-hidden="true"><defs><marker id="_R_3h5qfdeh_" viewBox="0 0 10 10" refX="9" refY="5" markerWidth="7" markerHeight="7" orient="auto-start-reverse"><path d="M0 0L10 5L0 10Z" fill="#dc2626"></path></marker></defs><g><line x1="580" y1="260" x2="561" y2="319" stroke="white" stroke-width="7"></line><line x1="580" y1="260" x2="561" y2="319" stroke="#dc2626" stroke-width="3" marker-end="url(#_R_3h5qfdeh_)"></line><circle cx="580" cy="260" r="17" fill="#dc2626" stroke="white" stroke-width="3"></circle><text x="580" y="260" dominant-baseline="central" text-anchor="middle" fill="white" font-size="19" font-weight="700" font-family="system-ui, sans-serif">1</text></g><g><line x1="531" y1="415" x2="325" y2="478" stroke="white" stroke-width="7"></line><line x1="531" y1="415" x2="325" y2="478" stroke="#dc2626" stroke-width="3" marker-end="url(#_R_3h5qfdeh_)"></line><circle cx="531" cy="415" r="17" fill="#dc2626" stroke="white" stroke-width="3"></circle><text x="531" y="415" dominant-baseline="central" text-anchor="middle" fill="white" font-size="19" font-weight="700" font-family="system-ui, sans-serif">2</text></g></svg></div></div><ol class="legend_Hll1"><li>Enter First local scope in Name.</li><li>Leave Create the initial network topology enabled.</li></ol></dialog></figure>
<figure class="figure_T25B"><figcaption><strong>Select only the local environment for this experiment</strong><p>The reference instance calls its existing environment Local environment. In your tutorial, choose Local check.</p></figcaption><button type="button" class="thumbnail_Irs2" aria-label="Enlarge annotated screenshot: Select only the local environment for this experiment"><div class="canvas_XPmF"><img src="https://akoflow.com/img/blog/first-local-run/new-local-scope.jpg" alt="Select only the local environment for this experiment" width="1280" height="720" loading="lazy"><svg viewBox="0 0 1280 720" aria-hidden="true"><defs><marker id="_R_196qfdeh_" viewBox="0 0 10 10" refX="9" refY="5" markerWidth="7" markerHeight="7" orient="auto-start-reverse"><path d="M0 0L10 5L0 10Z" fill="#dc2626"></path></marker></defs><g><line x1="580" y1="175" x2="325" y2="208" stroke="white" stroke-width="7"></line><line x1="580" y1="175" x2="325" y2="208" stroke="#dc2626" stroke-width="3" marker-end="url(#_R_196qfdeh_)"></line><circle cx="580" cy="175" r="17" fill="#dc2626" stroke="white" stroke-width="3"></circle><text x="580" y="175" dominant-baseline="central" text-anchor="middle" fill="white" font-size="19" font-weight="700" font-family="system-ui, sans-serif">1</text></g><g><line x1="1060" y1="327" x2="780" y2="392" stroke="white" stroke-width="7"></line><line x1="1060" y1="327" x2="780" y2="392" stroke="#dc2626" stroke-width="3" marker-end="url(#_R_196qfdeh_)"></line><circle cx="1060" cy="327" r="17" fill="#dc2626" stroke="white" stroke-width="3"></circle><text x="1060" y="327" dominant-baseline="central" text-anchor="middle" fill="white" font-size="19" font-weight="700" font-family="system-ui, sans-serif">2</text></g></svg></div><span class="enlarge_RkKu">Enlarge screenshot and arrows ↗</span></button><ol class="legend_Hll1"><li>Keep the initial topology enabled.</li><li>Select the checkbox for your local environment; use Local check from step 2.</li></ol><dialog class="dialog_MgqT" aria-label="Select only the local environment for this experiment"><div class="dialogToolbar_gzGc"><strong>Select only the local environment for this experiment</strong><button type="button" autofocus="">Close ×</button></div><p class="panHint_JLfY">On a small screen, scroll sideways to inspect each control.</p><div class="expanded_ekRg"><div class="canvas_XPmF"><img src="https://akoflow.com/img/blog/first-local-run/new-local-scope.jpg" alt="Select only the local environment for this experiment" width="1280" height="720" loading="lazy"><svg viewBox="0 0 1280 720" aria-hidden="true"><defs><marker id="_R_3h6qfdeh_" viewBox="0 0 10 10" refX="9" refY="5" markerWidth="7" markerHeight="7" orient="auto-start-reverse"><path d="M0 0L10 5L0 10Z" fill="#dc2626"></path></marker></defs><g><line x1="580" y1="175" x2="325" y2="208" stroke="white" stroke-width="7"></line><line x1="580" y1="175" x2="325" y2="208" stroke="#dc2626" stroke-width="3" marker-end="url(#_R_3h6qfdeh_)"></line><circle cx="580" cy="175" r="17" fill="#dc2626" stroke="white" stroke-width="3"></circle><text x="580" y="175" dominant-baseline="central" text-anchor="middle" fill="white" font-size="19" font-weight="700" font-family="system-ui, sans-serif">1</text></g><g><line x1="1060" y1="327" x2="780" y2="392" stroke="white" stroke-width="7"></line><line x1="1060" y1="327" x2="780" y2="392" stroke="#dc2626" stroke-width="3" marker-end="url(#_R_3h6qfdeh_)"></line><circle cx="1060" cy="327" r="17" fill="#dc2626" stroke="white" stroke-width="3"></circle><text x="1060" y="327" dominant-baseline="central" text-anchor="middle" fill="white" font-size="19" font-weight="700" font-family="system-ui, sans-serif">2</text></g></svg></div></div><ol class="legend_Hll1"><li>Keep the initial topology enabled.</li><li>Select the checkbox for your local environment; use Local check from step 2.</li></ol></dialog></figure>
<p>After selecting <code>Local check</code>, scroll to the bottom of the form to save it:</p>
<figure class="figure_T25B"><figcaption><strong>Save the execution scope</strong><p>Scroll below the list of participating environments to reach this action.</p></figcaption><button type="button" class="thumbnail_Irs2" aria-label="Enlarge annotated screenshot: Save the execution scope"><div class="canvas_XPmF"><img src="https://akoflow.com/img/blog/first-local-run/save-scope.jpg" alt="Save the execution scope" width="1280" height="720" loading="lazy"><svg viewBox="0 0 1280 720" aria-hidden="true"><defs><marker id="_R_198qfdeh_" viewBox="0 0 10 10" refX="9" refY="5" markerWidth="7" markerHeight="7" orient="auto-start-reverse"><path d="M0 0L10 5L0 10Z" fill="#dc2626"></path></marker></defs><g><line x1="1040" y1="570" x2="1137" y2="635" stroke="white" stroke-width="7"></line><line x1="1040" y1="570" x2="1137" y2="635" stroke="#dc2626" stroke-width="3" marker-end="url(#_R_198qfdeh_)"></line><circle cx="1040" cy="570" r="17" fill="#dc2626" stroke="white" stroke-width="3"></circle><text x="1040" y="570" dominant-baseline="central" text-anchor="middle" fill="white" font-size="19" font-weight="700" font-family="system-ui, sans-serif">1</text></g></svg></div><span class="enlarge_RkKu">Enlarge screenshot and arrows ↗</span></button><ol class="legend_Hll1"><li>Select Create execution scope after naming the scope and selecting Local check.</li></ol><dialog class="dialog_MgqT" aria-label="Save the execution scope"><div class="dialogToolbar_gzGc"><strong>Save the execution scope</strong><button type="button" autofocus="">Close ×</button></div><p class="panHint_JLfY">On a small screen, scroll sideways to inspect each control.</p><div class="expanded_ekRg"><div class="canvas_XPmF"><img src="https://akoflow.com/img/blog/first-local-run/save-scope.jpg" alt="Save the execution scope" width="1280" height="720" loading="lazy"><svg viewBox="0 0 1280 720" aria-hidden="true"><defs><marker id="_R_3h8qfdeh_" viewBox="0 0 10 10" refX="9" refY="5" markerWidth="7" markerHeight="7" orient="auto-start-reverse"><path d="M0 0L10 5L0 10Z" fill="#dc2626"></path></marker></defs><g><line x1="1040" y1="570" x2="1137" y2="635" stroke="white" stroke-width="7"></line><line x1="1040" y1="570" x2="1137" y2="635" stroke="#dc2626" stroke-width="3" marker-end="url(#_R_3h8qfdeh_)"></line><circle cx="1040" cy="570" r="17" fill="#dc2626" stroke="white" stroke-width="3"></circle><text x="1040" y="570" dominant-baseline="central" text-anchor="middle" fill="white" font-size="19" font-weight="700" font-family="system-ui, sans-serif">1</text></g></svg></div></div><ol class="legend_Hll1"><li>Select Create execution scope after naming the scope and selecting Local check.</li></ol></dialog></figure>
<p>A <em>scope</em> selects the environment resources offered to planning. Its topology describes the connections between them. A one-machine experiment needs no network links.</p>
<p>Desktop creates these records and their identifiers. The YAML here describes the workflow; you do not need to author environment, scope, or plan API envelopes.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="6-make-a-plan-and-start-the-run">6. Make a plan and start the run<a href="https://akoflow.com/blog/from-a-dag-to-your-first-run#6-make-a-plan-and-start-the-run" class="hash-link" aria-label="Direct link to 6. Make a plan and start the run" title="Direct link to 6. Make a plan and start the run" translate="no">​</a></h2>
<p>Return to <code>first-local-check</code> and select <strong>Generate plan</strong>:</p>
<figure class="figure_T25B"><figcaption><strong>Start planning from the workflow</strong><p>This reference definition is named hello. Open first-local-check in your own catalog.</p></figcaption><button type="button" class="thumbnail_Irs2" aria-label="Enlarge annotated screenshot: Start planning from the workflow"><div class="canvas_XPmF"><img src="https://akoflow.com/img/blog/first-local-run/workflow-plan-action.jpg" alt="Start planning from the workflow" width="1280" height="720" loading="lazy"><svg viewBox="0 0 1280 720" aria-hidden="true"><defs><marker id="_R_19dqfdeh_" viewBox="0 0 10 10" refX="9" refY="5" markerWidth="7" markerHeight="7" orient="auto-start-reverse"><path d="M0 0L10 5L0 10Z" fill="#dc2626"></path></marker></defs><g><line x1="1010" y1="275" x2="1160" y2="215" stroke="white" stroke-width="7"></line><line x1="1010" y1="275" x2="1160" y2="215" stroke="#dc2626" stroke-width="3" marker-end="url(#_R_19dqfdeh_)"></line><circle cx="1010" cy="275" r="17" fill="#dc2626" stroke="white" stroke-width="3"></circle><text x="1010" y="275" dominant-baseline="central" text-anchor="middle" fill="white" font-size="19" font-weight="700" font-family="system-ui, sans-serif">1</text></g></svg></div><span class="enlarge_RkKu">Enlarge screenshot and arrows ↗</span></button><ol class="legend_Hll1"><li>Select Generate plan on the workflow detail page.</li></ol><dialog class="dialog_MgqT" aria-label="Start planning from the workflow"><div class="dialogToolbar_gzGc"><strong>Start planning from the workflow</strong><button type="button" autofocus="">Close ×</button></div><p class="panHint_JLfY">On a small screen, scroll sideways to inspect each control.</p><div class="expanded_ekRg"><div class="canvas_XPmF"><img src="https://akoflow.com/img/blog/first-local-run/workflow-plan-action.jpg" alt="Start planning from the workflow" width="1280" height="720" loading="lazy"><svg viewBox="0 0 1280 720" aria-hidden="true"><defs><marker id="_R_3hdqfdeh_" viewBox="0 0 10 10" refX="9" refY="5" markerWidth="7" markerHeight="7" orient="auto-start-reverse"><path d="M0 0L10 5L0 10Z" fill="#dc2626"></path></marker></defs><g><line x1="1010" y1="275" x2="1160" y2="215" stroke="white" stroke-width="7"></line><line x1="1010" y1="275" x2="1160" y2="215" stroke="#dc2626" stroke-width="3" marker-end="url(#_R_3hdqfdeh_)"></line><circle cx="1010" cy="275" r="17" fill="#dc2626" stroke="white" stroke-width="3"></circle><text x="1010" y="275" dominant-baseline="central" text-anchor="middle" fill="white" font-size="19" font-weight="700" font-family="system-ui, sans-serif">1</text></g></svg></div></div><ol class="legend_Hll1"><li>Select Generate plan on the workflow detail page.</li></ol></dialog></figure>
<figure class="figure_T25B"><figcaption><strong>Choose manual planning</strong><p>The reference definition has two activities. Your first-local-check definition has only write-report.</p></figcaption><button type="button" class="thumbnail_Irs2" aria-label="Enlarge annotated screenshot: Choose manual planning"><div class="canvas_XPmF"><img src="https://akoflow.com/img/blog/first-local-run/manual-plan-mode.jpg" alt="Choose manual planning" width="1280" height="720" loading="lazy"><svg viewBox="0 0 1280 720" aria-hidden="true"><defs><marker id="_R_19eqfdeh_" viewBox="0 0 10 10" refX="9" refY="5" markerWidth="7" markerHeight="7" orient="auto-start-reverse"><path d="M0 0L10 5L0 10Z" fill="#dc2626"></path></marker></defs><g><line x1="1025" y1="160" x2="995" y2="234" stroke="white" stroke-width="7"></line><line x1="1025" y1="160" x2="995" y2="234" stroke="#dc2626" stroke-width="3" marker-end="url(#_R_19eqfdeh_)"></line><circle cx="1025" cy="160" r="17" fill="#dc2626" stroke="white" stroke-width="3"></circle><text x="1025" y="160" dominant-baseline="central" text-anchor="middle" fill="white" font-size="19" font-weight="700" font-family="system-ui, sans-serif">1</text></g><g><line x1="930" y1="506" x2="1040" y2="558" stroke="white" stroke-width="7"></line><line x1="930" y1="506" x2="1040" y2="558" stroke="#dc2626" stroke-width="3" marker-end="url(#_R_19eqfdeh_)"></line><circle cx="930" cy="506" r="17" fill="#dc2626" stroke="white" stroke-width="3"></circle><text x="930" y="506" dominant-baseline="central" text-anchor="middle" fill="white" font-size="19" font-weight="700" font-family="system-ui, sans-serif">2</text></g><g><line x1="565" y1="570" x2="486" y2="609" stroke="white" stroke-width="7"></line><line x1="565" y1="570" x2="486" y2="609" stroke="#dc2626" stroke-width="3" marker-end="url(#_R_19eqfdeh_)"></line><circle cx="565" cy="570" r="17" fill="#dc2626" stroke="white" stroke-width="3"></circle><text x="565" y="570" dominant-baseline="central" text-anchor="middle" fill="white" font-size="19" font-weight="700" font-family="system-ui, sans-serif">3</text></g></svg></div><span class="enlarge_RkKu">Enlarge screenshot and arrows ↗</span></button><ol class="legend_Hll1"><li>Select Create manually.</li><li>Use Real execution.</li><li>Under Execution scope, choose First local scope; scroll the list if needed.</li></ol><dialog class="dialog_MgqT" aria-label="Choose manual planning"><div class="dialogToolbar_gzGc"><strong>Choose manual planning</strong><button type="button" autofocus="">Close ×</button></div><p class="panHint_JLfY">On a small screen, scroll sideways to inspect each control.</p><div class="expanded_ekRg"><div class="canvas_XPmF"><img src="https://akoflow.com/img/blog/first-local-run/manual-plan-mode.jpg" alt="Choose manual planning" width="1280" height="720" loading="lazy"><svg viewBox="0 0 1280 720" aria-hidden="true"><defs><marker id="_R_3heqfdeh_" viewBox="0 0 10 10" refX="9" refY="5" markerWidth="7" markerHeight="7" orient="auto-start-reverse"><path d="M0 0L10 5L0 10Z" fill="#dc2626"></path></marker></defs><g><line x1="1025" y1="160" x2="995" y2="234" stroke="white" stroke-width="7"></line><line x1="1025" y1="160" x2="995" y2="234" stroke="#dc2626" stroke-width="3" marker-end="url(#_R_3heqfdeh_)"></line><circle cx="1025" cy="160" r="17" fill="#dc2626" stroke="white" stroke-width="3"></circle><text x="1025" y="160" dominant-baseline="central" text-anchor="middle" fill="white" font-size="19" font-weight="700" font-family="system-ui, sans-serif">1</text></g><g><line x1="930" y1="506" x2="1040" y2="558" stroke="white" stroke-width="7"></line><line x1="930" y1="506" x2="1040" y2="558" stroke="#dc2626" stroke-width="3" marker-end="url(#_R_3heqfdeh_)"></line><circle cx="930" cy="506" r="17" fill="#dc2626" stroke="white" stroke-width="3"></circle><text x="930" y="506" dominant-baseline="central" text-anchor="middle" fill="white" font-size="19" font-weight="700" font-family="system-ui, sans-serif">2</text></g><g><line x1="565" y1="570" x2="486" y2="609" stroke="white" stroke-width="7"></line><line x1="565" y1="570" x2="486" y2="609" stroke="#dc2626" stroke-width="3" marker-end="url(#_R_3heqfdeh_)"></line><circle cx="565" cy="570" r="17" fill="#dc2626" stroke="white" stroke-width="3"></circle><text x="565" y="570" dominant-baseline="central" text-anchor="middle" fill="white" font-size="19" font-weight="700" font-family="system-ui, sans-serif">3</text></g></svg></div></div><ol class="legend_Hll1"><li>Select Create manually.</li><li>Use Real execution.</li><li>Under Execution scope, choose First local scope; scroll the list if needed.</li></ol></dialog></figure>
<ol>
<li class="">Choose <strong>Create manually</strong>.</li>
<li class="">Select <code>First local scope</code>.</li>
<li class="">Select <strong>write-report</strong> in the activity graph.</li>
<li class="">Choose your <strong>local machine runtime</strong> and <strong>local machine resource</strong>.</li>
<li class="">Set <strong>Expected execution time</strong> to <code>1</code> second.</li>
<li class="">Select <strong>Generate plan</strong>.</li>
</ol>
<figure class="figure_T25B"><figcaption><strong>Assign a runtime, duration, and target</strong><p>This reference activity is named a. In your workflow, select write-report; configure the same controls.</p></figcaption><button type="button" class="thumbnail_Irs2" aria-label="Enlarge annotated screenshot: Assign a runtime, duration, and target"><div class="canvas_XPmF"><img src="https://akoflow.com/img/blog/first-local-run/manual-activity-placement.jpg" alt="Assign a runtime, duration, and target" width="1280" height="720" loading="lazy"><svg viewBox="0 0 1280 720" aria-hidden="true"><defs><marker id="_R_19gqfdeh_" viewBox="0 0 10 10" refX="9" refY="5" markerWidth="7" markerHeight="7" orient="auto-start-reverse"><path d="M0 0L10 5L0 10Z" fill="#dc2626"></path></marker></defs><g><line x1="355" y1="230" x2="575" y2="293" stroke="white" stroke-width="7"></line><line x1="355" y1="230" x2="575" y2="293" stroke="#dc2626" stroke-width="3" marker-end="url(#_R_19gqfdeh_)"></line><circle cx="355" cy="230" r="17" fill="#dc2626" stroke="white" stroke-width="3"></circle><text x="355" y="230" dominant-baseline="central" text-anchor="middle" fill="white" font-size="19" font-weight="700" font-family="system-ui, sans-serif">1</text></g><g><line x1="1085" y1="154" x2="970" y2="203" stroke="white" stroke-width="7"></line><line x1="1085" y1="154" x2="970" y2="203" stroke="#dc2626" stroke-width="3" marker-end="url(#_R_19gqfdeh_)"></line><circle cx="1085" cy="154" r="17" fill="#dc2626" stroke="white" stroke-width="3"></circle><text x="1085" y="154" dominant-baseline="central" text-anchor="middle" fill="white" font-size="19" font-weight="700" font-family="system-ui, sans-serif">2</text></g><g><line x1="850" y1="276" x2="979" y2="307" stroke="white" stroke-width="7"></line><line x1="850" y1="276" x2="979" y2="307" stroke="#dc2626" stroke-width="3" marker-end="url(#_R_19gqfdeh_)"></line><circle cx="850" cy="276" r="17" fill="#dc2626" stroke="white" stroke-width="3"></circle><text x="850" y="276" dominant-baseline="central" text-anchor="middle" fill="white" font-size="19" font-weight="700" font-family="system-ui, sans-serif">3</text></g><g><line x1="1115" y1="370" x2="984" y2="415" stroke="white" stroke-width="7"></line><line x1="1115" y1="370" x2="984" y2="415" stroke="#dc2626" stroke-width="3" marker-end="url(#_R_19gqfdeh_)"></line><circle cx="1115" cy="370" r="17" fill="#dc2626" stroke="white" stroke-width="3"></circle><text x="1115" y="370" dominant-baseline="central" text-anchor="middle" fill="white" font-size="19" font-weight="700" font-family="system-ui, sans-serif">4</text></g></svg></div><span class="enlarge_RkKu">Enlarge screenshot and arrows ↗</span></button><ol class="legend_Hll1"><li>Select the activity node in the DAG.</li><li>Choose the local machine runtime.</li><li>Set Expected execution time to 1 and keep the s unit.</li><li>Choose your local machine target. Then scroll to the plan review and Generate plan.</li></ol><dialog class="dialog_MgqT" aria-label="Assign a runtime, duration, and target"><div class="dialogToolbar_gzGc"><strong>Assign a runtime, duration, and target</strong><button type="button" autofocus="">Close ×</button></div><p class="panHint_JLfY">On a small screen, scroll sideways to inspect each control.</p><div class="expanded_ekRg"><div class="canvas_XPmF"><img src="https://akoflow.com/img/blog/first-local-run/manual-activity-placement.jpg" alt="Assign a runtime, duration, and target" width="1280" height="720" loading="lazy"><svg viewBox="0 0 1280 720" aria-hidden="true"><defs><marker id="_R_3hgqfdeh_" viewBox="0 0 10 10" refX="9" refY="5" markerWidth="7" markerHeight="7" orient="auto-start-reverse"><path d="M0 0L10 5L0 10Z" fill="#dc2626"></path></marker></defs><g><line x1="355" y1="230" x2="575" y2="293" stroke="white" stroke-width="7"></line><line x1="355" y1="230" x2="575" y2="293" stroke="#dc2626" stroke-width="3" marker-end="url(#_R_3hgqfdeh_)"></line><circle cx="355" cy="230" r="17" fill="#dc2626" stroke="white" stroke-width="3"></circle><text x="355" y="230" dominant-baseline="central" text-anchor="middle" fill="white" font-size="19" font-weight="700" font-family="system-ui, sans-serif">1</text></g><g><line x1="1085" y1="154" x2="970" y2="203" stroke="white" stroke-width="7"></line><line x1="1085" y1="154" x2="970" y2="203" stroke="#dc2626" stroke-width="3" marker-end="url(#_R_3hgqfdeh_)"></line><circle cx="1085" cy="154" r="17" fill="#dc2626" stroke="white" stroke-width="3"></circle><text x="1085" y="154" dominant-baseline="central" text-anchor="middle" fill="white" font-size="19" font-weight="700" font-family="system-ui, sans-serif">2</text></g><g><line x1="850" y1="276" x2="979" y2="307" stroke="white" stroke-width="7"></line><line x1="850" y1="276" x2="979" y2="307" stroke="#dc2626" stroke-width="3" marker-end="url(#_R_3hgqfdeh_)"></line><circle cx="850" cy="276" r="17" fill="#dc2626" stroke="white" stroke-width="3"></circle><text x="850" y="276" dominant-baseline="central" text-anchor="middle" fill="white" font-size="19" font-weight="700" font-family="system-ui, sans-serif">3</text></g><g><line x1="1115" y1="370" x2="984" y2="415" stroke="white" stroke-width="7"></line><line x1="1115" y1="370" x2="984" y2="415" stroke="#dc2626" stroke-width="3" marker-end="url(#_R_3hgqfdeh_)"></line><circle cx="1115" cy="370" r="17" fill="#dc2626" stroke="white" stroke-width="3"></circle><text x="1115" y="370" dominant-baseline="central" text-anchor="middle" fill="white" font-size="19" font-weight="700" font-family="system-ui, sans-serif">4</text></g></svg></div></div><ol class="legend_Hll1"><li>Select the activity node in the DAG.</li><li>Choose the local machine runtime.</li><li>Set Expected execution time to 1 and keep the s unit.</li><li>Choose your local machine target. Then scroll to the plan review and Generate plan.</li></ol></dialog></figure>
<p>The duration is an estimate, not a timeout or a measurement. Image download and startup can make the first run take longer.</p>
<p>On the saved plan page, select <strong>Execute plan</strong>:</p>
<figure class="figure_T25B"><figcaption><strong>Open the execution request from the saved plan</strong><p>The example capture shows an existing saved plan. Use the manual plan generated for first-local-check.</p></figcaption><button type="button" class="thumbnail_Irs2" aria-label="Enlarge annotated screenshot: Open the execution request from the saved plan"><div class="canvas_XPmF"><img src="https://akoflow.com/img/blog/first-local-run/execute-plan.jpg" alt="Open the execution request from the saved plan" width="1280" height="720" loading="lazy"><svg viewBox="0 0 1280 720" aria-hidden="true"><defs><marker id="_R_19jqfdeh_" viewBox="0 0 10 10" refX="9" refY="5" markerWidth="7" markerHeight="7" orient="auto-start-reverse"><path d="M0 0L10 5L0 10Z" fill="#dc2626"></path></marker></defs><g><line x1="1022" y1="250" x2="1165" y2="196" stroke="white" stroke-width="7"></line><line x1="1022" y1="250" x2="1165" y2="196" stroke="#dc2626" stroke-width="3" marker-end="url(#_R_19jqfdeh_)"></line><circle cx="1022" cy="250" r="17" fill="#dc2626" stroke="white" stroke-width="3"></circle><text x="1022" y="250" dominant-baseline="central" text-anchor="middle" fill="white" font-size="19" font-weight="700" font-family="system-ui, sans-serif">1</text></g></svg></div><span class="enlarge_RkKu">Enlarge screenshot and arrows ↗</span></button><ol class="legend_Hll1"><li>Select Execute plan.</li></ol><dialog class="dialog_MgqT" aria-label="Open the execution request from the saved plan"><div class="dialogToolbar_gzGc"><strong>Open the execution request from the saved plan</strong><button type="button" autofocus="">Close ×</button></div><p class="panHint_JLfY">On a small screen, scroll sideways to inspect each control.</p><div class="expanded_ekRg"><div class="canvas_XPmF"><img src="https://akoflow.com/img/blog/first-local-run/execute-plan.jpg" alt="Open the execution request from the saved plan" width="1280" height="720" loading="lazy"><svg viewBox="0 0 1280 720" aria-hidden="true"><defs><marker id="_R_3hjqfdeh_" viewBox="0 0 10 10" refX="9" refY="5" markerWidth="7" markerHeight="7" orient="auto-start-reverse"><path d="M0 0L10 5L0 10Z" fill="#dc2626"></path></marker></defs><g><line x1="1022" y1="250" x2="1165" y2="196" stroke="white" stroke-width="7"></line><line x1="1022" y1="250" x2="1165" y2="196" stroke="#dc2626" stroke-width="3" marker-end="url(#_R_3hjqfdeh_)"></line><circle cx="1022" cy="250" r="17" fill="#dc2626" stroke="white" stroke-width="3"></circle><text x="1022" y="250" dominant-baseline="central" text-anchor="middle" fill="white" font-size="19" font-weight="700" font-family="system-ui, sans-serif">1</text></g></svg></div></div><ol class="legend_Hll1"><li>Select Execute plan.</li></ol></dialog></figure>
<p>Review the selected plan, <strong>Real execution</strong>, and the local runtime. Keep the suggested unique run ID or enter your own:</p>
<figure class="figure_T25B"><figcaption><strong>Review the execution before starting</strong><p>This reference plan is bound to its execution request. Your scope and plan names should refer to your new tutorial records.</p></figcaption><button type="button" class="thumbnail_Irs2" aria-label="Enlarge annotated screenshot: Review the execution before starting"><div class="canvas_XPmF"><img src="https://akoflow.com/img/blog/first-local-run/start-real-execution.jpg" alt="Review the execution before starting" width="1280" height="720" loading="lazy"><svg viewBox="0 0 1280 720" aria-hidden="true"><defs><marker id="_R_19lqfdeh_" viewBox="0 0 10 10" refX="9" refY="5" markerWidth="7" markerHeight="7" orient="auto-start-reverse"><path d="M0 0L10 5L0 10Z" fill="#dc2626"></path></marker></defs><g><line x1="478" y1="252" x2="505" y2="319" stroke="white" stroke-width="7"></line><line x1="478" y1="252" x2="505" y2="319" stroke="#dc2626" stroke-width="3" marker-end="url(#_R_19lqfdeh_)"></line><circle cx="478" cy="252" r="17" fill="#dc2626" stroke="white" stroke-width="3"></circle><text x="478" y="252" dominant-baseline="central" text-anchor="middle" fill="white" font-size="19" font-weight="700" font-family="system-ui, sans-serif">1</text></g><g><line x1="1060" y1="252" x2="972" y2="320" stroke="white" stroke-width="7"></line><line x1="1060" y1="252" x2="972" y2="320" stroke="#dc2626" stroke-width="3" marker-end="url(#_R_19lqfdeh_)"></line><circle cx="1060" cy="252" r="17" fill="#dc2626" stroke="white" stroke-width="3"></circle><text x="1060" y="252" dominant-baseline="central" text-anchor="middle" fill="white" font-size="19" font-weight="700" font-family="system-ui, sans-serif">2</text></g><g><line x1="798" y1="440" x2="641" y2="516" stroke="white" stroke-width="7"></line><line x1="798" y1="440" x2="641" y2="516" stroke="#dc2626" stroke-width="3" marker-end="url(#_R_19lqfdeh_)"></line><circle cx="798" cy="440" r="17" fill="#dc2626" stroke="white" stroke-width="3"></circle><text x="798" y="440" dominant-baseline="central" text-anchor="middle" fill="white" font-size="19" font-weight="700" font-family="system-ui, sans-serif">3</text></g></svg></div><span class="enlarge_RkKu">Enlarge screenshot and arrows ↗</span></button><ol class="legend_Hll1"><li>Keep the suggested run ID or enter a fresh unique ID.</li><li>Confirm that the selected plan is the one you just generated.</li><li>Confirm Real execution and an available local runtime.</li></ol><dialog class="dialog_MgqT" aria-label="Review the execution before starting"><div class="dialogToolbar_gzGc"><strong>Review the execution before starting</strong><button type="button" autofocus="">Close ×</button></div><p class="panHint_JLfY">On a small screen, scroll sideways to inspect each control.</p><div class="expanded_ekRg"><div class="canvas_XPmF"><img src="https://akoflow.com/img/blog/first-local-run/start-real-execution.jpg" alt="Review the execution before starting" width="1280" height="720" loading="lazy"><svg viewBox="0 0 1280 720" aria-hidden="true"><defs><marker id="_R_3hlqfdeh_" viewBox="0 0 10 10" refX="9" refY="5" markerWidth="7" markerHeight="7" orient="auto-start-reverse"><path d="M0 0L10 5L0 10Z" fill="#dc2626"></path></marker></defs><g><line x1="478" y1="252" x2="505" y2="319" stroke="white" stroke-width="7"></line><line x1="478" y1="252" x2="505" y2="319" stroke="#dc2626" stroke-width="3" marker-end="url(#_R_3hlqfdeh_)"></line><circle cx="478" cy="252" r="17" fill="#dc2626" stroke="white" stroke-width="3"></circle><text x="478" y="252" dominant-baseline="central" text-anchor="middle" fill="white" font-size="19" font-weight="700" font-family="system-ui, sans-serif">1</text></g><g><line x1="1060" y1="252" x2="972" y2="320" stroke="white" stroke-width="7"></line><line x1="1060" y1="252" x2="972" y2="320" stroke="#dc2626" stroke-width="3" marker-end="url(#_R_3hlqfdeh_)"></line><circle cx="1060" cy="252" r="17" fill="#dc2626" stroke="white" stroke-width="3"></circle><text x="1060" y="252" dominant-baseline="central" text-anchor="middle" fill="white" font-size="19" font-weight="700" font-family="system-ui, sans-serif">2</text></g><g><line x1="798" y1="440" x2="641" y2="516" stroke="white" stroke-width="7"></line><line x1="798" y1="440" x2="641" y2="516" stroke="#dc2626" stroke-width="3" marker-end="url(#_R_3hlqfdeh_)"></line><circle cx="798" cy="440" r="17" fill="#dc2626" stroke="white" stroke-width="3"></circle><text x="798" y="440" dominant-baseline="central" text-anchor="middle" fill="white" font-size="19" font-weight="700" font-family="system-ui, sans-serif">3</text></g></svg></div></div><ol class="legend_Hll1"><li>Keep the suggested run ID or enter a fresh unique ID.</li><li>Confirm that the selected plan is the one you just generated.</li><li>Confirm Real execution and an available local runtime.</li></ol></dialog></figure>
<p>Scroll to the bottom, then select <strong>Start execution</strong> once:</p>
<figure class="figure_T25B"><figcaption><strong>Start the local run</strong><p>Scroll to the bottom of the execution request after reviewing the selected plan.</p></figcaption><button type="button" class="thumbnail_Irs2" aria-label="Enlarge annotated screenshot: Start the local run"><div class="canvas_XPmF"><img src="https://akoflow.com/img/blog/first-local-run/start-execution-button.jpg" alt="Start the local run" width="1280" height="720" loading="lazy"><svg viewBox="0 0 1280 720" aria-hidden="true"><defs><marker id="_R_19nqfdeh_" viewBox="0 0 10 10" refX="9" refY="5" markerWidth="7" markerHeight="7" orient="auto-start-reverse"><path d="M0 0L10 5L0 10Z" fill="#dc2626"></path></marker></defs><g><line x1="996" y1="602" x2="1160" y2="635" stroke="white" stroke-width="7"></line><line x1="996" y1="602" x2="1160" y2="635" stroke="#dc2626" stroke-width="3" marker-end="url(#_R_19nqfdeh_)"></line><circle cx="996" cy="602" r="17" fill="#dc2626" stroke="white" stroke-width="3"></circle><text x="996" y="602" dominant-baseline="central" text-anchor="middle" fill="white" font-size="19" font-weight="700" font-family="system-ui, sans-serif">1</text></g></svg></div><span class="enlarge_RkKu">Enlarge screenshot and arrows ↗</span></button><ol class="legend_Hll1"><li>Select Start execution once. Submission is asynchronous; wait on the resulting run page.</li></ol><dialog class="dialog_MgqT" aria-label="Start the local run"><div class="dialogToolbar_gzGc"><strong>Start the local run</strong><button type="button" autofocus="">Close ×</button></div><p class="panHint_JLfY">On a small screen, scroll sideways to inspect each control.</p><div class="expanded_ekRg"><div class="canvas_XPmF"><img src="https://akoflow.com/img/blog/first-local-run/start-execution-button.jpg" alt="Start the local run" width="1280" height="720" loading="lazy"><svg viewBox="0 0 1280 720" aria-hidden="true"><defs><marker id="_R_3hnqfdeh_" viewBox="0 0 10 10" refX="9" refY="5" markerWidth="7" markerHeight="7" orient="auto-start-reverse"><path d="M0 0L10 5L0 10Z" fill="#dc2626"></path></marker></defs><g><line x1="996" y1="602" x2="1160" y2="635" stroke="white" stroke-width="7"></line><line x1="996" y1="602" x2="1160" y2="635" stroke="#dc2626" stroke-width="3" marker-end="url(#_R_3hnqfdeh_)"></line><circle cx="996" cy="602" r="17" fill="#dc2626" stroke="white" stroke-width="3"></circle><text x="996" y="602" dominant-baseline="central" text-anchor="middle" fill="white" font-size="19" font-weight="700" font-family="system-ui, sans-serif">1</text></g></svg></div></div><ol class="legend_Hll1"><li>Select Start execution once. Submission is asynchronous; wait on the resulting run page.</li></ol></dialog></figure>
<p>Wait until the run says <strong>completed</strong> and <strong>1/1</strong> activities settled:</p>
<figure class="figure_T25B"><figcaption><strong>Check completion and open Activities</strong><p>This real reference run has two activities. Your first-local-check run must show 1/1 settled.</p></figcaption><button type="button" class="thumbnail_Irs2" aria-label="Enlarge annotated screenshot: Check completion and open Activities"><div class="canvas_XPmF"><img src="https://akoflow.com/img/blog/first-local-run/completed-run.jpg" alt="Check completion and open Activities" width="1280" height="720" loading="lazy"><svg viewBox="0 0 1280 720" aria-hidden="true"><defs><marker id="_R_19pqfdeh_" viewBox="0 0 10 10" refX="9" refY="5" markerWidth="7" markerHeight="7" orient="auto-start-reverse"><path d="M0 0L10 5L0 10Z" fill="#dc2626"></path></marker></defs><g><line x1="409" y1="220" x2="342" y2="291" stroke="white" stroke-width="7"></line><line x1="409" y1="220" x2="342" y2="291" stroke="#dc2626" stroke-width="3" marker-end="url(#_R_19pqfdeh_)"></line><circle cx="409" cy="220" r="17" fill="#dc2626" stroke="white" stroke-width="3"></circle><text x="409" y="220" dominant-baseline="central" text-anchor="middle" fill="white" font-size="19" font-weight="700" font-family="system-ui, sans-serif">1</text></g><g><line x1="649" y1="219" x2="577" y2="291" stroke="white" stroke-width="7"></line><line x1="649" y1="219" x2="577" y2="291" stroke="#dc2626" stroke-width="3" marker-end="url(#_R_19pqfdeh_)"></line><circle cx="649" cy="219" r="17" fill="#dc2626" stroke="white" stroke-width="3"></circle><text x="649" y="219" dominant-baseline="central" text-anchor="middle" fill="white" font-size="19" font-weight="700" font-family="system-ui, sans-serif">2</text></g><g><line x1="473" y1="425" x2="405" y2="382" stroke="white" stroke-width="7"></line><line x1="473" y1="425" x2="405" y2="382" stroke="#dc2626" stroke-width="3" marker-end="url(#_R_19pqfdeh_)"></line><circle cx="473" cy="425" r="17" fill="#dc2626" stroke="white" stroke-width="3"></circle><text x="473" y="425" dominant-baseline="central" text-anchor="middle" fill="white" font-size="19" font-weight="700" font-family="system-ui, sans-serif">3</text></g></svg></div><span class="enlarge_RkKu">Enlarge screenshot and arrows ↗</span></button><ol class="legend_Hll1"><li>Wait for completed.</li><li>Check 1/1 settled for your one-activity workflow.</li><li>Open Activities to locate write-report.</li></ol><dialog class="dialog_MgqT" aria-label="Check completion and open Activities"><div class="dialogToolbar_gzGc"><strong>Check completion and open Activities</strong><button type="button" autofocus="">Close ×</button></div><p class="panHint_JLfY">On a small screen, scroll sideways to inspect each control.</p><div class="expanded_ekRg"><div class="canvas_XPmF"><img src="https://akoflow.com/img/blog/first-local-run/completed-run.jpg" alt="Check completion and open Activities" width="1280" height="720" loading="lazy"><svg viewBox="0 0 1280 720" aria-hidden="true"><defs><marker id="_R_3hpqfdeh_" viewBox="0 0 10 10" refX="9" refY="5" markerWidth="7" markerHeight="7" orient="auto-start-reverse"><path d="M0 0L10 5L0 10Z" fill="#dc2626"></path></marker></defs><g><line x1="409" y1="220" x2="342" y2="291" stroke="white" stroke-width="7"></line><line x1="409" y1="220" x2="342" y2="291" stroke="#dc2626" stroke-width="3" marker-end="url(#_R_3hpqfdeh_)"></line><circle cx="409" cy="220" r="17" fill="#dc2626" stroke="white" stroke-width="3"></circle><text x="409" y="220" dominant-baseline="central" text-anchor="middle" fill="white" font-size="19" font-weight="700" font-family="system-ui, sans-serif">1</text></g><g><line x1="649" y1="219" x2="577" y2="291" stroke="white" stroke-width="7"></line><line x1="649" y1="219" x2="577" y2="291" stroke="#dc2626" stroke-width="3" marker-end="url(#_R_3hpqfdeh_)"></line><circle cx="649" cy="219" r="17" fill="#dc2626" stroke="white" stroke-width="3"></circle><text x="649" y="219" dominant-baseline="central" text-anchor="middle" fill="white" font-size="19" font-weight="700" font-family="system-ui, sans-serif">2</text></g><g><line x1="473" y1="425" x2="405" y2="382" stroke="white" stroke-width="7"></line><line x1="473" y1="425" x2="405" y2="382" stroke="#dc2626" stroke-width="3" marker-end="url(#_R_3hpqfdeh_)"></line><circle cx="473" cy="425" r="17" fill="#dc2626" stroke="white" stroke-width="3"></circle><text x="473" y="425" dominant-baseline="central" text-anchor="middle" fill="white" font-size="19" font-weight="700" font-family="system-ui, sans-serif">3</text></g></svg></div></div><ol class="legend_Hll1"><li>Wait for completed.</li><li>Check 1/1 settled for your one-activity workflow.</li><li>Open Activities to locate write-report.</li></ol></dialog></figure>
<p>A <em>plan</em> describes where work should run. A <em>run</em> records what happened. Submission is asynchronous: pending or running can appear before completed.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="7-inspect-your-first-result">7. Inspect your first result<a href="https://akoflow.com/blog/from-a-dag-to-your-first-run#7-inspect-your-first-result" class="hash-link" aria-label="Direct link to 7. Inspect your first result" title="Direct link to 7. Inspect your first result" translate="no">​</a></h2>
<p>On the completed run, select <strong>Activities</strong>, then <code>write-report</code>. Open its <strong>Details</strong> link or <strong>Open activity page</strong> from its information panel (some releases label this <strong>Open activity details</strong>).</p>
<figure class="figure_T25B"><figcaption><strong>Locate the activity to inspect its output</strong><p>This reference run lists a and b. Your activity list contains write-report.</p></figcaption><button type="button" class="thumbnail_Irs2" aria-label="Enlarge annotated screenshot: Locate the activity to inspect its output"><div class="canvas_XPmF"><img src="https://akoflow.com/img/blog/first-local-run/open-activity-details.jpg" alt="Locate the activity to inspect its output" width="1280" height="720" loading="lazy"><svg viewBox="0 0 1280 720" aria-hidden="true"><defs><marker id="_R_19tqfdeh_" viewBox="0 0 10 10" refX="9" refY="5" markerWidth="7" markerHeight="7" orient="auto-start-reverse"><path d="M0 0L10 5L0 10Z" fill="#dc2626"></path></marker></defs><g><line x1="893" y1="486" x2="1096" y2="580" stroke="white" stroke-width="7"></line><line x1="893" y1="486" x2="1096" y2="580" stroke="#dc2626" stroke-width="3" marker-end="url(#_R_19tqfdeh_)"></line><circle cx="893" cy="486" r="17" fill="#dc2626" stroke="white" stroke-width="3"></circle><text x="893" y="486" dominant-baseline="central" text-anchor="middle" fill="white" font-size="19" font-weight="700" font-family="system-ui, sans-serif">1</text></g></svg></div><span class="enlarge_RkKu">Enlarge screenshot and arrows ↗</span></button><ol class="legend_Hll1"><li>Select write-report in your activity list. Use Details or Open activity page in its information panel.</li></ol><dialog class="dialog_MgqT" aria-label="Locate the activity to inspect its output"><div class="dialogToolbar_gzGc"><strong>Locate the activity to inspect its output</strong><button type="button" autofocus="">Close ×</button></div><p class="panHint_JLfY">On a small screen, scroll sideways to inspect each control.</p><div class="expanded_ekRg"><div class="canvas_XPmF"><img src="https://akoflow.com/img/blog/first-local-run/open-activity-details.jpg" alt="Locate the activity to inspect its output" width="1280" height="720" loading="lazy"><svg viewBox="0 0 1280 720" aria-hidden="true"><defs><marker id="_R_3htqfdeh_" viewBox="0 0 10 10" refX="9" refY="5" markerWidth="7" markerHeight="7" orient="auto-start-reverse"><path d="M0 0L10 5L0 10Z" fill="#dc2626"></path></marker></defs><g><line x1="893" y1="486" x2="1096" y2="580" stroke="white" stroke-width="7"></line><line x1="893" y1="486" x2="1096" y2="580" stroke="#dc2626" stroke-width="3" marker-end="url(#_R_3htqfdeh_)"></line><circle cx="893" cy="486" r="17" fill="#dc2626" stroke="white" stroke-width="3"></circle><text x="893" y="486" dominant-baseline="central" text-anchor="middle" fill="white" font-size="19" font-weight="700" font-family="system-ui, sans-serif">1</text></g></svg></div></div><ol class="legend_Hll1"><li>Select write-report in your activity list. Use Details or Open activity page in its information panel.</li></ol></dialog></figure>
<table><thead><tr><th>Where to look</th><th>Expected result</th></tr></thead><tbody><tr><td>Execution details</td><td><strong>Exit code 0</strong></td></tr><tr><td>Activity output/log</td><td><code>Akoflow local check</code></td></tr><tr><td><strong>Generated files</strong></td><td><code>result.txt</code>, with a SHA-256 checksum</td></tr></tbody></table>
<p>Scroll down the activity page to <strong>Activity output</strong> and <strong>Generated files</strong>:</p>
<figure class="figure_T25B"><figcaption><strong>Find the output and its checksum</strong><p>The reference run produced a.txt. Your YAML produces result.txt and prints Akoflow local check.</p></figcaption><button type="button" class="thumbnail_Irs2" aria-label="Enlarge annotated screenshot: Find the output and its checksum"><div class="canvas_XPmF"><img src="https://akoflow.com/img/blog/first-local-run/generated-files.jpg" alt="Find the output and its checksum" width="1280" height="720" loading="lazy"><svg viewBox="0 0 1280 720" aria-hidden="true"><defs><marker id="_R_1a0qfdeh_" viewBox="0 0 10 10" refX="9" refY="5" markerWidth="7" markerHeight="7" orient="auto-start-reverse"><path d="M0 0L10 5L0 10Z" fill="#dc2626"></path></marker></defs><g><line x1="1110" y1="300" x2="748" y2="402" stroke="white" stroke-width="7"></line><line x1="1110" y1="300" x2="748" y2="402" stroke="#dc2626" stroke-width="3" marker-end="url(#_R_1a0qfdeh_)"></line><circle cx="1110" cy="300" r="17" fill="#dc2626" stroke="white" stroke-width="3"></circle><text x="1110" y="300" dominant-baseline="central" text-anchor="middle" fill="white" font-size="19" font-weight="700" font-family="system-ui, sans-serif">1</text></g><g><line x1="544" y1="524" x2="485" y2="620" stroke="white" stroke-width="7"></line><line x1="544" y1="524" x2="485" y2="620" stroke="#dc2626" stroke-width="3" marker-end="url(#_R_1a0qfdeh_)"></line><circle cx="544" cy="524" r="17" fill="#dc2626" stroke="white" stroke-width="3"></circle><text x="544" y="524" dominant-baseline="central" text-anchor="middle" fill="white" font-size="19" font-weight="700" font-family="system-ui, sans-serif">2</text></g><g><line x1="945" y1="568" x2="872" y2="620" stroke="white" stroke-width="7"></line><line x1="945" y1="568" x2="872" y2="620" stroke="#dc2626" stroke-width="3" marker-end="url(#_R_1a0qfdeh_)"></line><circle cx="945" cy="568" r="17" fill="#dc2626" stroke="white" stroke-width="3"></circle><text x="945" y="568" dominant-baseline="central" text-anchor="middle" fill="white" font-size="19" font-weight="700" font-family="system-ui, sans-serif">3</text></g></svg></div><span class="enlarge_RkKu">Enlarge screenshot and arrows ↗</span></button><ol class="legend_Hll1"><li>Inspect Activity output for the captured runtime log.</li><li>In Generated files, look for result.txt in your run.</li><li>Confirm that the file has a SHA-256 checksum.</li></ol><dialog class="dialog_MgqT" aria-label="Find the output and its checksum"><div class="dialogToolbar_gzGc"><strong>Find the output and its checksum</strong><button type="button" autofocus="">Close ×</button></div><p class="panHint_JLfY">On a small screen, scroll sideways to inspect each control.</p><div class="expanded_ekRg"><div class="canvas_XPmF"><img src="https://akoflow.com/img/blog/first-local-run/generated-files.jpg" alt="Find the output and its checksum" width="1280" height="720" loading="lazy"><svg viewBox="0 0 1280 720" aria-hidden="true"><defs><marker id="_R_3i0qfdeh_" viewBox="0 0 10 10" refX="9" refY="5" markerWidth="7" markerHeight="7" orient="auto-start-reverse"><path d="M0 0L10 5L0 10Z" fill="#dc2626"></path></marker></defs><g><line x1="1110" y1="300" x2="748" y2="402" stroke="white" stroke-width="7"></line><line x1="1110" y1="300" x2="748" y2="402" stroke="#dc2626" stroke-width="3" marker-end="url(#_R_3i0qfdeh_)"></line><circle cx="1110" cy="300" r="17" fill="#dc2626" stroke="white" stroke-width="3"></circle><text x="1110" y="300" dominant-baseline="central" text-anchor="middle" fill="white" font-size="19" font-weight="700" font-family="system-ui, sans-serif">1</text></g><g><line x1="544" y1="524" x2="485" y2="620" stroke="white" stroke-width="7"></line><line x1="544" y1="524" x2="485" y2="620" stroke="#dc2626" stroke-width="3" marker-end="url(#_R_3i0qfdeh_)"></line><circle cx="544" cy="524" r="17" fill="#dc2626" stroke="white" stroke-width="3"></circle><text x="544" y="524" dominant-baseline="central" text-anchor="middle" fill="white" font-size="19" font-weight="700" font-family="system-ui, sans-serif">2</text></g><g><line x1="945" y1="568" x2="872" y2="620" stroke="white" stroke-width="7"></line><line x1="945" y1="568" x2="872" y2="620" stroke="#dc2626" stroke-width="3" marker-end="url(#_R_3i0qfdeh_)"></line><circle cx="945" cy="568" r="17" fill="#dc2626" stroke="white" stroke-width="3"></circle><text x="945" y="568" dominant-baseline="central" text-anchor="middle" fill="white" font-size="19" font-weight="700" font-family="system-ui, sans-serif">3</text></g></svg></div></div><ol class="legend_Hll1"><li>Inspect Activity output for the captured runtime log.</li><li>In Generated files, look for result.txt in your run.</li><li>Confirm that the file has a SHA-256 checksum.</li></ol></dialog></figure>
<p>The generated file belongs to the activity workspace managed by the engine. Listing a file records that it was observed; it does not automatically download it into your computer's Downloads folder.</p>
<p>You have now submitted and inspected a real local experiment. Save the YAML with your experiment material so the definition can be reused.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="8-extend-it-into-a-small-analysis">8. Extend it into a small analysis<a href="https://akoflow.com/blog/from-a-dag-to-your-first-run#8-extend-it-into-a-small-analysis" class="hash-link" aria-label="Direct link to 8. Extend it into a small analysis" title="Direct link to 8. Extend it into a small analysis" translate="no">​</a></h2>
<p>Save the next document as <code>first-local-analysis.yaml</code>, or <a href="https://akoflow.com/assets/files/first-local-analysis-a4b326091d6dbaa8b6d23265e0f48ea0.yaml" target="_blank" class="">download the complete analysis YAML</a>. This is a <strong>new, complete workflow</strong>, with a different name from the first definition.</p>
<figure aria-label="First local analysis activity DAG"><button type="button" class="thumbnail__JRY" aria-label="Enlarge DAG: First local analysis"></button><dialog class="dialog_Vvru"><button type="button" class="close_EnKL" autofocus="">Close ×</button><div class="largeDiagram_oYyn"></div></dialog><figcaption>First local analysis<!-- -->. Nodes in the same column can run in parallel once their dependencies complete.</figcaption></figure>
<table><thead><tr><th>Activity</th><th>Reads</th><th>Produces</th></tr></thead><tbody><tr><td><code>prepare</code></td><td>Values declared in its command: 2, 4, 6</td><td><code>measurements.txt</code></td></tr><tr><td><code>analyze</code></td><td><code>measurements.txt</code></td><td><code>mean.txt</code>, containing <code>4.00</code></td></tr><tr><td><code>write-report</code></td><td><code>mean.txt</code></td><td><code>report.txt</code>, containing <code>Mean: 4.00</code></td></tr></tbody></table>
<div class="language-yaml codeBlockContainer_Ckt0 theme-code-block" style="--prism-background-color:hsl(230, 1%, 98%);--prism-color:hsl(230, 8%, 24%)"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-yaml codeBlock_bY9V thin-scrollbar" style="background-color:hsl(230, 1%, 98%);color:hsl(230, 8%, 24%)"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token key atrule" style="color:hsl(35, 99%, 36%)">name</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">:</span><span class="token plain"> first</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">-</span><span class="token plain">local</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">-</span><span class="token plain">analysis</span><br></div><div class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain"></span><span class="token key atrule" style="color:hsl(35, 99%, 36%)">spec</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">:</span><span class="token plain"></span><br></div><div class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain">  </span><span class="token key atrule" style="color:hsl(35, 99%, 36%)">namespace</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">:</span><span class="token plain"> learning</span><br></div><div class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain">  </span><span class="token key atrule" style="color:hsl(35, 99%, 36%)">activities</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">:</span><span class="token plain"></span><br></div><div class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain">    </span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">-</span><span class="token plain"> </span><span class="token key atrule" style="color:hsl(35, 99%, 36%)">name</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">:</span><span class="token plain"> prepare</span><br></div><div class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain">      </span><span class="token key atrule" style="color:hsl(35, 99%, 36%)">cpuLimit</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">:</span><span class="token plain"> </span><span class="token string" style="color:hsl(119, 34%, 47%)">"0.1"</span><span class="token plain"></span><br></div><div class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain">      </span><span class="token key atrule" style="color:hsl(35, 99%, 36%)">memoryLimit</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">:</span><span class="token plain"> 32Mi</span><br></div><div class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain">      </span><span class="token key atrule" style="color:hsl(35, 99%, 36%)">command</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">:</span><span class="token plain"></span><br></div><div class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain">        </span><span class="token key atrule" style="color:hsl(35, 99%, 36%)">executable</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">:</span><span class="token plain"></span><br></div><div class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain">          </span><span class="token key atrule" style="color:hsl(35, 99%, 36%)">source</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">:</span><span class="token plain"></span><br></div><div class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain">            </span><span class="token key atrule" style="color:hsl(35, 99%, 36%)">type</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">:</span><span class="token plain"> oci</span><br></div><div class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain">            </span><span class="token key atrule" style="color:hsl(35, 99%, 36%)">reference</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">:</span><span class="token plain"> docker.io/library/busybox</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">:</span><span class="token number" style="color:hsl(35, 99%, 36%)">1.36</span><span class="token plain"></span><br></div><div class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain">          </span><span class="token key atrule" style="color:hsl(35, 99%, 36%)">delivery</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">:</span><span class="token plain"></span><br></div><div class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain">            </span><span class="token key atrule" style="color:hsl(35, 99%, 36%)">strategy</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">:</span><span class="token plain"> auto</span><br></div><div class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain">            </span><span class="token key atrule" style="color:hsl(35, 99%, 36%)">targetFormat</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">:</span><span class="token plain"> oci</span><br></div><div class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain">        </span><span class="token key atrule" style="color:hsl(35, 99%, 36%)">entrypoint</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">:</span><span class="token plain"> sh</span><br></div><div class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain">        </span><span class="token key atrule" style="color:hsl(35, 99%, 36%)">arguments</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">:</span><span class="token plain"></span><br></div><div class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain">          </span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">-</span><span class="token plain"> </span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">-</span><span class="token plain">c</span><br></div><div class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain">          </span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">-</span><span class="token plain"> </span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">|</span><span class="token scalar string" style="color:hsl(119, 34%, 47%)"></span><br></div><div class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token scalar string" style="color:hsl(119, 34%, 47%)">            printf '2\n4\n6\n' &gt; measurements.txt</span><br></div><div class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token scalar string" style="color:hsl(119, 34%, 47%)">            cat measurements.txt</span><span class="token plain"></span><br></div><div class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain">      </span><span class="token key atrule" style="color:hsl(35, 99%, 36%)">expectedOutputs</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">:</span><span class="token plain"> </span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">[</span><span class="token plain">measurements.txt</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">]</span><span class="token plain"></span><br></div><div class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain" style="display:inline-block"></span><br></div><div class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain">    </span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">-</span><span class="token plain"> </span><span class="token key atrule" style="color:hsl(35, 99%, 36%)">name</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">:</span><span class="token plain"> analyze</span><br></div><div class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain">      </span><span class="token key atrule" style="color:hsl(35, 99%, 36%)">dependsOn</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">:</span><span class="token plain"> </span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">[</span><span class="token plain">prepare</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">]</span><span class="token plain"></span><br></div><div class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain">      </span><span class="token key atrule" style="color:hsl(35, 99%, 36%)">cpuLimit</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">:</span><span class="token plain"> </span><span class="token string" style="color:hsl(119, 34%, 47%)">"0.1"</span><span class="token plain"></span><br></div><div class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain">      </span><span class="token key atrule" style="color:hsl(35, 99%, 36%)">memoryLimit</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">:</span><span class="token plain"> 32Mi</span><br></div><div class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain">      </span><span class="token key atrule" style="color:hsl(35, 99%, 36%)">command</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">:</span><span class="token plain"></span><br></div><div class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain">        </span><span class="token key atrule" style="color:hsl(35, 99%, 36%)">executable</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">:</span><span class="token plain"></span><br></div><div class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain">          </span><span class="token key atrule" style="color:hsl(35, 99%, 36%)">source</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">:</span><span class="token plain"></span><br></div><div class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain">            </span><span class="token key atrule" style="color:hsl(35, 99%, 36%)">type</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">:</span><span class="token plain"> oci</span><br></div><div class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain">            </span><span class="token key atrule" style="color:hsl(35, 99%, 36%)">reference</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">:</span><span class="token plain"> docker.io/library/busybox</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">:</span><span class="token number" style="color:hsl(35, 99%, 36%)">1.36</span><span class="token plain"></span><br></div><div class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain">          </span><span class="token key atrule" style="color:hsl(35, 99%, 36%)">delivery</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">:</span><span class="token plain"></span><br></div><div class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain">            </span><span class="token key atrule" style="color:hsl(35, 99%, 36%)">strategy</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">:</span><span class="token plain"> auto</span><br></div><div class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain">            </span><span class="token key atrule" style="color:hsl(35, 99%, 36%)">targetFormat</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">:</span><span class="token plain"> oci</span><br></div><div class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain">        </span><span class="token key atrule" style="color:hsl(35, 99%, 36%)">entrypoint</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">:</span><span class="token plain"> sh</span><br></div><div class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain">        </span><span class="token key atrule" style="color:hsl(35, 99%, 36%)">arguments</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">:</span><span class="token plain"></span><br></div><div class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain">          </span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">-</span><span class="token plain"> </span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">-</span><span class="token plain">c</span><br></div><div class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain">          </span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">-</span><span class="token plain"> </span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">|</span><span class="token scalar string" style="color:hsl(119, 34%, 47%)"></span><br></div><div class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token scalar string" style="color:hsl(119, 34%, 47%)">            awk '{sum += $1; n++} END {printf "%.2f\n", sum/n}' measurements.txt &gt; mean.txt</span><br></div><div class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token scalar string" style="color:hsl(119, 34%, 47%)">            cat mean.txt</span><span class="token plain"></span><br></div><div class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain">      </span><span class="token key atrule" style="color:hsl(35, 99%, 36%)">expectedOutputs</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">:</span><span class="token plain"> </span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">[</span><span class="token plain">mean.txt</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">]</span><span class="token plain"></span><br></div><div class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain" style="display:inline-block"></span><br></div><div class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain">    </span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">-</span><span class="token plain"> </span><span class="token key atrule" style="color:hsl(35, 99%, 36%)">name</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">:</span><span class="token plain"> write</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">-</span><span class="token plain">report</span><br></div><div class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain">      </span><span class="token key atrule" style="color:hsl(35, 99%, 36%)">dependsOn</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">:</span><span class="token plain"> </span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">[</span><span class="token plain">analyze</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">]</span><span class="token plain"></span><br></div><div class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain">      </span><span class="token key atrule" style="color:hsl(35, 99%, 36%)">cpuLimit</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">:</span><span class="token plain"> </span><span class="token string" style="color:hsl(119, 34%, 47%)">"0.1"</span><span class="token plain"></span><br></div><div class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain">      </span><span class="token key atrule" style="color:hsl(35, 99%, 36%)">memoryLimit</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">:</span><span class="token plain"> 32Mi</span><br></div><div class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain">      </span><span class="token key atrule" style="color:hsl(35, 99%, 36%)">command</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">:</span><span class="token plain"></span><br></div><div class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain">        </span><span class="token key atrule" style="color:hsl(35, 99%, 36%)">executable</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">:</span><span class="token plain"></span><br></div><div class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain">          </span><span class="token key atrule" style="color:hsl(35, 99%, 36%)">source</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">:</span><span class="token plain"></span><br></div><div class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain">            </span><span class="token key atrule" style="color:hsl(35, 99%, 36%)">type</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">:</span><span class="token plain"> oci</span><br></div><div class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain">            </span><span class="token key atrule" style="color:hsl(35, 99%, 36%)">reference</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">:</span><span class="token plain"> docker.io/library/busybox</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">:</span><span class="token number" style="color:hsl(35, 99%, 36%)">1.36</span><span class="token plain"></span><br></div><div class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain">          </span><span class="token key atrule" style="color:hsl(35, 99%, 36%)">delivery</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">:</span><span class="token plain"></span><br></div><div class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain">            </span><span class="token key atrule" style="color:hsl(35, 99%, 36%)">strategy</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">:</span><span class="token plain"> auto</span><br></div><div class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain">            </span><span class="token key atrule" style="color:hsl(35, 99%, 36%)">targetFormat</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">:</span><span class="token plain"> oci</span><br></div><div class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain">        </span><span class="token key atrule" style="color:hsl(35, 99%, 36%)">entrypoint</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">:</span><span class="token plain"> sh</span><br></div><div class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain">        </span><span class="token key atrule" style="color:hsl(35, 99%, 36%)">arguments</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">:</span><span class="token plain"></span><br></div><div class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain">          </span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">-</span><span class="token plain"> </span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">-</span><span class="token plain">c</span><br></div><div class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain">          </span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">-</span><span class="token plain"> </span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">|</span><span class="token scalar string" style="color:hsl(119, 34%, 47%)"></span><br></div><div class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token scalar string" style="color:hsl(119, 34%, 47%)">            printf 'Mean: %s\n' "$(cat mean.txt)" &gt; report.txt</span><br></div><div class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token scalar string" style="color:hsl(119, 34%, 47%)">            cat report.txt</span><span class="token plain"></span><br></div><div class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain">      </span><span class="token key atrule" style="color:hsl(35, 99%, 36%)">expectedOutputs</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">:</span><span class="token plain"> </span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">[</span><span class="token plain">report.txt</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">]</span><br></div></code></pre></div></div>
<p>The new field is <code>dependsOn</code>. <code>analyze</code> waits for <code>prepare</code>, and <code>write-report</code> waits for <code>analyze</code>. AkôFlow stages the predecessor's workspace before a dependent activity starts. Each stage writes a different output path, avoiding conflicting contents at the same path. <code>expectedOutputs</code> verifies that the required file exists.</p>
<p>Repeat the Desktop sequence:</p>
<ol>
<li class="">Import <code>first-local-analysis.yaml</code> in <strong>Workflows → Definitions</strong>.</li>
<li class="">Confirm the three-node DAG above.</li>
<li class="">Create a manual plan using the existing <code>First local scope</code>.</li>
<li class="">Assign <strong>all three activities</strong> to the local runtime and resource, with an expected duration of <code>1</code> second each.</li>
<li class="">Generate the plan, choose <strong>Execute plan → Real execution</strong>, and start it.</li>
<li class="">Wait for <strong>completed</strong> and <strong>3/3</strong> activities settled.</li>
<li class="">Open the final <strong>write-report</strong> activity. Its log should print <code>Mean: 4.00</code>. Its generated files should include <code>report.txt</code> with a checksum.</li>
</ol>
<p>This graph is sequential because each stage consumes the previous stage's output. A future independent branch should declare only the dependencies it needs. Dependencies determine readiness; resource capacity determines whether ready activities can run together.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="if-something-stops-you">If something stops you<a href="https://akoflow.com/blog/from-a-dag-to-your-first-run#if-something-stops-you" class="hash-link" aria-label="Direct link to If something stops you" title="Direct link to If something stops you" translate="no">​</a></h2>
<table><thead><tr><th>Symptom</th><th>Next action</th></tr></thead><tbody><tr><td>Desktop does not reach <strong>Connected</strong></td><td>Check Docker and inspect first-start failure details.</td></tr><tr><td>Local environment is offline or missing from planning</td><td>Test its connection, save it, and select <strong>Check now</strong>.</td></tr><tr><td>YAML import fails</td><td>Check indentation, retain the complete <code>name</code>/<code>spec</code> wrapper, and use a distinct workflow name.</td></tr><tr><td>No compatible runtime appears</td><td>Recheck the environment's runtime binding and select a real local scope.</td></tr><tr><td>The first activity cannot obtain its image</td><td>Inspect the activity error and verify access to Docker Hub and the local Docker engine.</td></tr><tr><td>Analysis cannot find its input</td><td>Check <code>dependsOn</code>, the predecessor's completion, and workspace-staging evidence.</td></tr><tr><td>A run fails or stays pending</td><td>Open activity details and run events, then see <a class="" href="https://akoflow.com/docs/guides/operations/troubleshooting">Troubleshooting</a>.</td></tr></tbody></table>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="the-idea-behind-akôflow">The idea behind AkôFlow<a href="https://akoflow.com/blog/from-a-dag-to-your-first-run#the-idea-behind-ak%C3%B4flow" class="hash-link" aria-label="Direct link to The idea behind AkôFlow" title="Direct link to The idea behind AkôFlow" translate="no">​</a></h2>
<p>The original AkôFlow paper introduces middleware for parallel scientific workflows in containerized environments, with provenance capture and an astronomy evaluation. It gives the research context for the project:</p>
<p>Ferreira, W.; Kunstmann, L.; Paes, A.; Bedo, M.; de Oliveira, D. <strong>AkôFlow: um Middleware para execução de Workflows científicos em múltiplos ambientes conteinerizados.</strong> SBBD, 2024, pp. 27–39. <a href="https://doi.org/10.5753/sbbd.2024.241126" target="_blank" rel="noopener noreferrer" class="">Read the paper</a>.</p>
<p>This post follows the current Desktop interface and portable workflow format, which have evolved since the publication. The paper explains the research motivation; the documentation and downloadable YAML files describe the steps used here.</p>
<p>Here, the YAML is the workflow definition, the environment is your local machine, the scope selects eligible resources, the plan assigns activities, and the run holds observed results. Generated files and checksums provide a first piece of execution evidence.</p>
<p>For your next experiment, change the measurements in a new copy of the analysis YAML and check that the mean changes accordingly. Continue with <a class="" href="https://akoflow.com/docs/guides/workflows/planning">planning alternatives</a>, <a class="" href="https://akoflow.com/docs/guides/workflows/definitions">workflow authoring</a>, or the <a class="" href="https://akoflow.com/docs/showcase/scientific-workflows/montage-050">Montage 050 scientific workflow</a>.</p>
<p>API automation is a separate next step once you know these objects; see <a class="" href="https://akoflow.com/docs/tutorials/api-access">API access</a>. The Desktop path manages its internal credentials for you.</p>]]></content:encoded>
            <category>Getting started</category>
            <category>Desktop</category>
            <category>Experiments</category>
        </item>
        <item>
            <title><![CDATA[Montage 050: a sky made of workflows]]></title>
            <link>https://akoflow.com/blog/montage-050-from-observations-to-a-mosaic</link>
            <guid>https://akoflow.com/blog/montage-050-from-observations-to-a-mosaic</guid>
            <pubDate>Wed, 21 Oct 2026 00:00:00 GMT</pubDate>
            <description><![CDATA[Twelve observations, 58 activities, one astronomical mosaic. Explore the science, reproduce the local workflow, and read the evidence behind a completed experiment.]]></description>
            <content:encoded><![CDATA[<p>The stars in the opening image are the output of a scientific computation. Before the color mosaic existed, individual observations had to be reprojected, their overlaps compared, their backgrounds reconciled, and their pixels combined. AkôFlow coordinates those steps as a workflow and keeps the execution evidence alongside the result.</p>
<p>This field note follows <strong>Montage 050</strong>, a 58-activity astronomy workflow. We will look at what the activities do, how to reproduce the local example, and what an existing completed experiment tells us about planning and execution.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="start-with-the-imageand-its-provenance">Start with the image—and its provenance<a href="https://akoflow.com/blog/montage-050-from-observations-to-a-mosaic#start-with-the-imageand-its-provenance" class="hash-link" aria-label="Direct link to Start with the image—and its provenance" title="Direct link to Start with the image—and its provenance" translate="no">​</a></h2>
<p>The cover is the actual <strong>1800 × 1800</strong> color preview from run <code>montage-docker-image-real-20261010-v2</code>. It is a recorded product of a completed hybrid GCP/HPC experiment. Click it to enlarge the image, or <a href="https://akoflow.com/assets/files/mosaic-color-259b2232707c088f05c00b842b8c8a3c.png" target="_blank" class="">open the original PNG</a>.</p>
<p>That experiment and the local reproduction described below use different execution environments. The cover and historical timings establish what the completed hybrid run produced; they are not a claim that the two-slot local example finished in the same time.</p>
<p>The preserved PNG is 4,920,451 bytes. Its SHA-256 is:</p>
<div class="language-text codeBlockContainer_Ckt0 theme-code-block" style="--prism-background-color:hsl(230, 1%, 98%);--prism-color:hsl(230, 8%, 24%)"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-text codeBlock_bY9V thin-scrollbar" style="background-color:hsl(230, 1%, 98%);color:hsl(230, 8%, 24%)"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain">63fa4d8447274bdb8a44f6be8cf5a23c0a2f0baa479bd2ae1ec3b541df4e19f2</span><br></div></code></pre></div></div>
<p>The image copied into this site matches that checksum. You can download the <a href="https://akoflow.com/assets/files/observed-results-1b7ead5356d5a51e0a7e88d6792b3aab.json" target="_blank" class="">observed result summary</a> to connect the picture to the run, activity counts, timings, and audit checks.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="what-montage-does-for-astronomy">What Montage does for astronomy<a href="https://akoflow.com/blog/montage-050-from-observations-to-a-mosaic#what-montage-does-for-astronomy" class="hash-link" aria-label="Direct link to What Montage does for astronomy" title="Direct link to What Montage does for astronomy" translate="no">​</a></h2>
<p>A sky survey records many images rather than a single photograph of an entire region. Those images may use different pixel grids and have different background levels. Simply placing them next to each other would leave misalignment and visible seams.</p>
<p><a href="https://www.ipac.caltech.edu/project/montage" target="_blank" rel="noopener noreferrer" class="">Montage, developed at IPAC</a>, combines astronomical images while preserving positional and calibration fidelity. Its building blocks operate on FITS files, the scientific image products in this workflow. The color PNG is a visualization of the resulting mosaics; retain the FITS products for scientific analysis.</p>
<p>Three operations explain much of the computation:</p>
<ul>
<li class=""><strong>Reprojection:</strong> map observations onto a common output grid. The <a href="https://irsa.ipac.caltech.edu/Montage/docs/mProject.html" target="_blank" rel="noopener noreferrer" class="">mProject documentation</a> describes the input image, header template, reprojected image, and accompanying area image.</li>
<li class=""><strong>Background matching:</strong> measure overlap differences and solve for consistent corrections. <a href="https://irsa.ipac.caltech.edu/Montage/docs/mBgModel.html" target="_blank" rel="noopener noreferrer" class="">mBgModel</a> uses the fitted differences to estimate a global set of adjustments.</li>
<li class=""><strong>Coaddition:</strong> combine corrected observations into mosaics. The <a href="https://irsa.ipac.caltech.edu/Montage/docs/how.html" target="_blank" rel="noopener noreferrer" class="">Montage module guide</a> describes the tools for metadata generation, reprojection, background correction, and mosaicking.</li>
</ul>
<p>Here, twelve input FITS observations feed three image-band branches. Each branch produces a FITS mosaic and a monochrome preview; a final activity combines the three mosaics into the color preview.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="which-montage-example-and-which-public-data">Which Montage example and which public data?<a href="https://akoflow.com/blog/montage-050-from-observations-to-a-mosaic#which-montage-example-and-which-public-data" class="hash-link" aria-label="Direct link to Which Montage example and which public data?" title="Direct link to Which Montage example and which public data?" translate="no">​</a></h2>
<p>This example is <strong>Montage 050</strong>, preserved in the original image as <code>050d</code>. The identifier names the workload configuration; it does <strong>not</strong> mean that the graph contains 50 activities. Section 4.1 and Table 1 of the <a href="https://doi.org/10.5753/sbbd.2024.241126" target="_blank" rel="noopener noreferrer" class="">AkôFlow paper, SBBD 2024</a>, describe the smaller “0.5” configuration with the same inventory used here: 12 projections, 18 overlap fits, and 58 activity executions in total. The paper also evaluates a larger “1.0” configuration with 472 executions. This walkthrough uses the smaller one. The bundled FITS header templates define its actual output footprint and pixel grid.</p>
<p>The inputs are <strong>real, publicly accessible astronomical survey images</strong>, rather than generated test pictures. Their names identify the <strong>POSS2/UKSTU</strong> survey products distributed through the <a href="https://irsa.ipac.caltech.edu/data/DSS/" target="_blank" rel="noopener noreferrer" class="">Digitized Sky Survey (DSS) archive at IRSA</a>. DSS digitizes photographic survey plates from the Palomar and UK Schmidt telescopes; IRSA provides image access and links to the originating STScI archive. The <a href="https://irsa.ipac.caltech.edu/docs/irsaviewer_datasets.html" target="_blank" rel="noopener noreferrer" class="">IRSA dataset summary</a> documents that survey lineage. Public access does not remove the archive's attribution and copyright requirements; retain the DSS/STScI and original survey acknowledgments when reusing the images.</p>
<p>The pinned bundle contains four input tiles in each of three survey bands:</p>
<table><thead><tr><th>Branch</th><th>Source filename family</th><th>Source band</th><th>FITS mosaic</th><th>Display channel in the final PNG</th></tr></thead><tbody><tr><td><code>1</code></td><td><code>poss2ukstu_blue_*.fits</code></td><td>Blue</td><td><code>1-mosaic.fits</code></td><td>Blue</td></tr><tr><td><code>2</code></td><td><code>poss2ukstu_red_*.fits</code></td><td>Red</td><td><code>2-mosaic.fits</code></td><td>Green</td></tr><tr><td><code>3</code></td><td><code>poss2ukstu_ir_*.fits</code></td><td>Near infrared</td><td><code>3-mosaic.fits</code></td><td>Red</td></tr></tbody></table>
<p>That is <strong>12 FITS inputs</strong>, approximately 87 MiB in the image's input seed. The RGB assignment is a visualization choice: the red survey band is displayed in green, and the infrared band in red. Read the scientific FITS products and their headers when interpreting measurements; PNG colors alone do not identify an observing wavelength.</p>
<p>The exact command and file inventory is available in the <a href="https://github.com/UFFeScience/akoflow-examples/blob/d890c3171e3661890305b763b8fc3ede48bb61b4/scientific-workflows/montage-050/workflow.yaml" target="_blank" rel="noopener noreferrer" class="">pinned <code>workflow.yaml</code></a>. Keeping that revision and the container digest identifies the packaged input set used for reproduction. Acquiring a fresh cutout from the public archive may select different pixels or preprocessing, so it is a new input set to record explicitly.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="inside-the-58-activity-graph">Inside the 58-activity graph<a href="https://akoflow.com/blog/montage-050-from-observations-to-a-mosaic#inside-the-58-activity-graph" class="hash-link" aria-label="Direct link to Inside the 58-activity graph" title="Direct link to Inside the 58-activity graph" translate="no">​</a></h2>
<p>The local bundle preserves the original commands, activity names, and <strong>138 named file handoffs</strong>. Its activity inventory is:</p>
<table><thead><tr><th>Native command</th><th style="text-align:right">Activities</th><th>Responsibility</th></tr></thead><tbody><tr><td><code>mProject</code></td><td style="text-align:right">12</td><td>Reproject the input observations</td></tr><tr><td><code>mDiffFit</code></td><td style="text-align:right">18</td><td>Compare overlaps and fit their differences</td></tr><tr><td><code>mConcatFit</code></td><td style="text-align:right">3</td><td>Assemble fit results for each band</td></tr><tr><td><code>mBgModel</code></td><td style="text-align:right">3</td><td>Solve each band's background corrections</td></tr><tr><td><code>mBackground</code></td><td style="text-align:right">12</td><td>Apply corrections to the projected observations</td></tr><tr><td><code>mImgtbl</code></td><td style="text-align:right">3</td><td>Build metadata tables for corrected images</td></tr><tr><td><code>mAdd</code></td><td style="text-align:right">3</td><td>Coadd the three FITS mosaics</td></tr><tr><td><code>mViewer</code></td><td style="text-align:right">4</td><td>Produce three monochrome previews and one color preview</td></tr><tr><td><strong>Total</strong></td><td style="text-align:right"><strong>58</strong></td><td></td></tr></tbody></table>
<p>The diagram below comes from the local example's activity and dependency contract. Enlarge it to follow individual edges.</p>
<figure aria-label="Montage 050 locally activity DAG"><button type="button" class="thumbnail__JRY" aria-label="Enlarge DAG: Montage 050 locally"></button><dialog class="dialog_Vvru"><button type="button" class="close_EnKL" autofocus="">Close ×</button><div class="largeDiagram_oYyn"></div></dialog><figcaption>Montage 050 locally<!-- -->. Nodes in the same column can run in parallel once their dependencies complete.</figcaption></figure>
<p>Independent projections and overlap operations can run concurrently after their own inputs are ready. Background modeling introduces a convergence point within each band. The final color preview waits for its three mosaic inputs. There is no extra global barrier forcing an unrelated band to wait at every stage.</p>
<p>This is why the DAG matters: it encodes scientific dependencies. A scheduler can choose where ready work runs, but cannot skip an input merely to make the graph appear more parallel. The <a href="https://irsa.ipac.caltech.edu/Montage/docs/grid.html" target="_blank" rel="noopener noreferrer" class="">Montage parallelization guide</a> explains the relationship between independent image operations and background-model convergence.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="what-each-activity-does-and-what-its-parameters-mean">What each activity does, and what its parameters mean<a href="https://akoflow.com/blog/montage-050-from-observations-to-a-mosaic#what-each-activity-does-and-what-its-parameters-mean" class="hash-link" aria-label="Direct link to What each activity does, and what its parameters mean" title="Direct link to What each activity does, and what its parameters mean" translate="no">​</a></h2>
<p>The scientific design follows Jacob et al., <a href="https://arxiv.org/abs/1005.4454" target="_blank" rel="noopener noreferrer" class=""><em>Montage: a grid portal and software toolkit for science-grade astronomical image mosaicking</em></a>, especially its toolkit components and workflow discussion. Reprojection aligns the pixel grids; overlap fitting supplies evidence for background adjustments; corrected images are then coadded. The sections below combine that explanation with the module manuals and the <strong>actual arguments in this example</strong>.</p>
<p>An activity type, such as <code>mProject</code>, can have several executions in the graph. Here, the same processing chain repeats for three bands. The examples below show the first band unless noted otherwise. They run inside an activity workspace after AkôFlow has staged the declared inputs; copying one command into an empty directory is not a complete reproduction.</p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="mproject-put-one-observation-on-the-common-sky-grid"><code>mProject</code>: put one observation on the common sky grid<a href="https://akoflow.com/blog/montage-050-from-observations-to-a-mosaic#mproject-put-one-observation-on-the-common-sky-grid" class="hash-link" aria-label="Direct link to mproject-put-one-observation-on-the-common-sky-grid" title="Direct link to mproject-put-one-observation-on-the-common-sky-grid" translate="no">​</a></h3>
<div class="language-bash codeBlockContainer_Ckt0 theme-code-block" style="--prism-background-color:hsl(230, 1%, 98%);--prism-color:hsl(230, 8%, 24%)"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-bash codeBlock_bY9V thin-scrollbar" style="background-color:hsl(230, 1%, 98%);color:hsl(230, 8%, 24%)"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain">mProject </span><span class="token parameter variable" style="color:hsl(221, 87%, 60%)">-X</span><span class="token plain"> poss2ukstu_blue_001_001.fits pposs2ukstu_blue_001_001.fits region-oversized.hdr</span><br></div></code></pre></div></div>
<p>Each of the <strong>12 executions</strong> reprojects one observation. It maps input pixels through sky coordinates onto the requested output grid, accounting for pixel overlap rather than merely resizing a picture. Its outputs include the projected FITS image and an accompanying <code>_area.fits</code> coverage image.</p>
<table><thead><tr><th>Parameter</th><th>Meaning in this example</th></tr></thead><tbody><tr><td><code>-X</code></td><td>Expand the template region as necessary to retain the input image's extent.</td></tr><tr><td><code>poss2ukstu_blue_001_001.fits</code></td><td>Input observation.</td></tr><tr><td><code>pposs2ukstu_blue_001_001.fits</code></td><td>Projected output; the <code>p</code> prefix is this workflow's naming convention.</td></tr><tr><td><code>region-oversized.hdr</code></td><td>FITS header template defining the working grid, coordinate projection, reference coordinates, and pixel scale. It is used before the final mosaic footprint is applied.</td></tr></tbody></table>
<p>These tasks have no predecessor activities and can start independently when execution slots are available. See the <a href="https://irsa.ipac.caltech.edu/Montage/docs/mProject.html" target="_blank" rel="noopener noreferrer" class="">official <code>mProject</code> manual</a>.</p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="mdifffit-measure-how-two-projected-images-disagree"><code>mDiffFit</code>: measure how two projected images disagree<a href="https://akoflow.com/blog/montage-050-from-observations-to-a-mosaic#mdifffit-measure-how-two-projected-images-disagree" class="hash-link" aria-label="Direct link to mdifffit-measure-how-two-projected-images-disagree" title="Direct link to mdifffit-measure-how-two-projected-images-disagree" translate="no">​</a></h3>
<div class="language-bash codeBlockContainer_Ckt0 theme-code-block" style="--prism-background-color:hsl(230, 1%, 98%);--prism-color:hsl(230, 8%, 24%)"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-bash codeBlock_bY9V thin-scrollbar" style="background-color:hsl(230, 1%, 98%);color:hsl(230, 8%, 24%)"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain">mDiffFit </span><span class="token parameter variable" style="color:hsl(221, 87%, 60%)">-d</span><span class="token plain"> </span><span class="token parameter variable" style="color:hsl(221, 87%, 60%)">-s</span><span class="token plain"> </span><span class="token number" style="color:hsl(35, 99%, 36%)">1</span><span class="token plain">-fit.000001.000002.txt pposs2ukstu_blue_001_001.fits pposs2ukstu_blue_001_002.fits </span><span class="token number" style="color:hsl(35, 99%, 36%)">1</span><span class="token plain">-diff.000001.000002.fits region-oversized.hdr</span><br></div></code></pre></div></div>
<p>The <strong>18 executions</strong> compare overlapping pairs: six pairs among the four images in each band. <code>mDiffFit</code> combines image differencing (<code>mDiff</code>) with a plane fit (<code>mFitplane</code>). It measures relative background offsets and gradients that the next stages need.</p>
<table><thead><tr><th>Parameter</th><th>Meaning in this example</th></tr></thead><tbody><tr><td><code>-d</code></td><td>Enable diagnostic output.</td></tr><tr><td><code>-s 1-fit.000001.000002.txt</code></td><td>Write the structured fit/status result for this pair to a named file.</td></tr><tr><td>The two <code>pposs2ukstu_…fits</code> arguments</td><td>Projected images to compare; both projection tasks must finish first.</td></tr><tr><td><code>1-diff.000001.000002.fits</code></td><td>Difference-image path used by the combined operation.</td></tr><tr><td><code>region-oversized.hdr</code></td><td>Shared working-grid template.</td></tr></tbody></table>
<p>Different pairs can run concurrently after their respective inputs arrive. See the <a href="https://irsa.ipac.caltech.edu/Montage/docs/gridtools.html" target="_blank" rel="noopener noreferrer" class="">Montage grid-tool description</a> and <a href="https://github.com/Caltech-IPAC/Montage/blob/main/grid/Pegasus/mDiffFit.c" target="_blank" rel="noopener noreferrer" class=""><code>mDiffFit</code> implementation and command interface</a>.</p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="mconcatfit-gather-the-pairwise-measurements"><code>mConcatFit</code>: gather the pairwise measurements<a href="https://akoflow.com/blog/montage-050-from-observations-to-a-mosaic#mconcatfit-gather-the-pairwise-measurements" class="hash-link" aria-label="Direct link to mconcatfit-gather-the-pairwise-measurements" title="Direct link to mconcatfit-gather-the-pairwise-measurements" translate="no">​</a></h3>
<div class="language-bash codeBlockContainer_Ckt0 theme-code-block" style="--prism-background-color:hsl(230, 1%, 98%);--prism-color:hsl(230, 8%, 24%)"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-bash codeBlock_bY9V thin-scrollbar" style="background-color:hsl(230, 1%, 98%);color:hsl(230, 8%, 24%)"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain">mConcatFit </span><span class="token number" style="color:hsl(35, 99%, 36%)">1</span><span class="token plain">-stat.tbl </span><span class="token number" style="color:hsl(35, 99%, 36%)">1</span><span class="token plain">-fits.tbl </span><span class="token builtin class-name" style="color:hsl(35, 99%, 36%)">.</span><br></div></code></pre></div></div>
<p>There are <strong>three executions</strong>, one per band. Each gathers the individual overlap-fit records into the table required by background modeling. It combines <strong>fit parameters</strong>, not image pixels.</p>
<table><thead><tr><th>Parameter</th><th>Meaning in this example</th></tr></thead><tbody><tr><td><code>1-stat.tbl</code></td><td>Input table identifying the fit-result files to collect.</td></tr><tr><td><code>1-fits.tbl</code></td><td>Output table of pairwise fit measurements.</td></tr><tr><td><code>.</code></td><td>Directory containing those staged fit-result files: the current workspace.</td></tr></tbody></table>
<p>This task waits for the band's six <code>mDiffFit</code> executions. The <a href="https://irsa.ipac.caltech.edu/Montage/docs/gridtools.html" target="_blank" rel="noopener noreferrer" class="">grid-tool guide</a> explains why independently generated fit records need this merge; the <a href="https://github.com/Caltech-IPAC/Montage/blob/main/grid/Pegasus/mConcatFit.c" target="_blank" rel="noopener noreferrer" class=""><code>mConcatFit</code> source</a> documents its three positional arguments.</p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="mbgmodel-solve-a-consistent-background-model-for-the-band"><code>mBgModel</code>: solve a consistent background model for the band<a href="https://akoflow.com/blog/montage-050-from-observations-to-a-mosaic#mbgmodel-solve-a-consistent-background-model-for-the-band" class="hash-link" aria-label="Direct link to mbgmodel-solve-a-consistent-background-model-for-the-band" title="Direct link to mbgmodel-solve-a-consistent-background-model-for-the-band" translate="no">​</a></h3>
<div class="language-bash codeBlockContainer_Ckt0 theme-code-block" style="--prism-background-color:hsl(230, 1%, 98%);--prism-color:hsl(230, 8%, 24%)"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-bash codeBlock_bY9V thin-scrollbar" style="background-color:hsl(230, 1%, 98%);color:hsl(230, 8%, 24%)"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain">mBgModel </span><span class="token parameter variable" style="color:hsl(221, 87%, 60%)">-i</span><span class="token plain"> </span><span class="token number" style="color:hsl(35, 99%, 36%)">100000</span><span class="token plain"> </span><span class="token number" style="color:hsl(35, 99%, 36%)">1</span><span class="token plain">-images.tbl </span><span class="token number" style="color:hsl(35, 99%, 36%)">1</span><span class="token plain">-fits.tbl </span><span class="token number" style="color:hsl(35, 99%, 36%)">1</span><span class="token plain">-corrections.tbl</span><br></div></code></pre></div></div>
<p>The <strong>three executions</strong> use the overlap measurements together to find per-image background corrections. A global solution within each band avoids treating each seam as an unrelated adjustment. The result is a correction table; the image pixels are changed by the following activity.</p>
<table><thead><tr><th>Parameter</th><th>Meaning in this example</th></tr></thead><tbody><tr><td><code>-i 100000</code></td><td>Iteration count requested by this versioned workload's modeling command; it is not a timeout or CPU allocation. Preserve it when reproducing the pinned example.</td></tr><tr><td><code>1-images.tbl</code></td><td>Input image metadata and identifiers.</td></tr><tr><td><code>1-fits.tbl</code></td><td>Aggregated measurements from <code>mConcatFit</code>.</td></tr><tr><td><code>1-corrections.tbl</code></td><td>Output coefficients for correcting each image's background.</td></tr></tbody></table>
<p>This is a convergence point for each band. Other bands can progress independently. The <a href="https://irsa.ipac.caltech.edu/Montage/docs/mBgModel.html" target="_blank" rel="noopener noreferrer" class="">official <code>mBgModel</code> manual</a> explains the solver and its arguments; documented iteration limits can differ from the packaged command, so the pinned image remains the reference for this reproduction.</p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="mbackground-apply-the-correction-to-one-projected-image"><code>mBackground</code>: apply the correction to one projected image<a href="https://akoflow.com/blog/montage-050-from-observations-to-a-mosaic#mbackground-apply-the-correction-to-one-projected-image" class="hash-link" aria-label="Direct link to mbackground-apply-the-correction-to-one-projected-image" title="Direct link to mbackground-apply-the-correction-to-one-projected-image" translate="no">​</a></h3>
<div class="language-bash codeBlockContainer_Ckt0 theme-code-block" style="--prism-background-color:hsl(230, 1%, 98%);--prism-color:hsl(230, 8%, 24%)"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-bash codeBlock_bY9V thin-scrollbar" style="background-color:hsl(230, 1%, 98%);color:hsl(230, 8%, 24%)"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain">mBackground </span><span class="token parameter variable" style="color:hsl(221, 87%, 60%)">-t</span><span class="token plain"> pposs2ukstu_blue_001_001.fits cposs2ukstu_blue_001_001.fits </span><span class="token number" style="color:hsl(35, 99%, 36%)">1</span><span class="token plain">-projected.tbl </span><span class="token number" style="color:hsl(35, 99%, 36%)">1</span><span class="token plain">-corrections.tbl</span><br></div></code></pre></div></div>
<p>Each of the <strong>12 executions</strong> subtracts the fitted background plane from one projected image. In the module's model, the plane has the form <code>A*x + B*y + C</code>. This matches relative backgrounds while retaining the image for coaddition; it is not a command to remove every astronomical source or all diffuse emission.</p>
<table><thead><tr><th>Parameter</th><th>Meaning in this example</th></tr></thead><tbody><tr><td><code>-t</code></td><td>Table mode: obtain the image's correction coefficients from the supplied tables rather than three explicit coefficient arguments.</td></tr><tr><td><code>pposs2ukstu_blue_001_001.fits</code></td><td>Projected input image.</td></tr><tr><td><code>cposs2ukstu_blue_001_001.fits</code></td><td>Background-corrected output; <code>c</code> is the workflow's naming convention.</td></tr><tr><td><code>1-projected.tbl</code></td><td>Metadata table used to identify the projected image.</td></tr><tr><td><code>1-corrections.tbl</code></td><td>Per-image corrections produced by <code>mBgModel</code>.</td></tr></tbody></table>
<p>Corrections for different images can run concurrently once their band model and projected inputs are ready. See the <a href="https://irsa.ipac.caltech.edu/Montage/docs/mBackground.html" target="_blank" rel="noopener noreferrer" class="">official <code>mBackground</code> manual</a>.</p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="mimgtbl-describe-the-corrected-files-for-the-coaddition-step"><code>mImgtbl</code>: describe the corrected files for the coaddition step<a href="https://akoflow.com/blog/montage-050-from-observations-to-a-mosaic#mimgtbl-describe-the-corrected-files-for-the-coaddition-step" class="hash-link" aria-label="Direct link to mimgtbl-describe-the-corrected-files-for-the-coaddition-step" title="Direct link to mimgtbl-describe-the-corrected-files-for-the-coaddition-step" translate="no">​</a></h3>
<div class="language-bash codeBlockContainer_Ckt0 theme-code-block" style="--prism-background-color:hsl(230, 1%, 98%);--prism-color:hsl(230, 8%, 24%)"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-bash codeBlock_bY9V thin-scrollbar" style="background-color:hsl(230, 1%, 98%);color:hsl(230, 8%, 24%)"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain">mImgtbl </span><span class="token builtin class-name" style="color:hsl(35, 99%, 36%)">.</span><span class="token plain"> </span><span class="token parameter variable" style="color:hsl(221, 87%, 60%)">-t</span><span class="token plain"> </span><span class="token number" style="color:hsl(35, 99%, 36%)">1</span><span class="token plain">-corrected.tbl </span><span class="token number" style="color:hsl(35, 99%, 36%)">1</span><span class="token plain">-updated-corrected.tbl</span><br></div></code></pre></div></div>
<p>The <strong>three executions</strong> read FITS headers and create metadata tables. Those tables describe image geometry and file identity so that coaddition can place the corrected inputs correctly. This stage produces metadata, not another mosaic.</p>
<table><thead><tr><th>Parameter</th><th>Meaning in this example</th></tr></thead><tbody><tr><td><code>.</code></td><td>Directory in which to read the corrected FITS files.</td></tr><tr><td><code>-t 1-corrected.tbl</code></td><td>Restrict processing to the images named in this input list, rather than every FITS file in the workspace.</td></tr><tr><td><code>1-updated-corrected.tbl</code></td><td>Output table with the corrected files' header metadata.</td></tr></tbody></table>
<p>Each task waits for its band's four corrected images. The <a href="https://irsa.ipac.caltech.edu/Montage/docs/mImgtbl.html" target="_blank" rel="noopener noreferrer" class="">official <code>mImgtbl</code> manual</a> documents the table fields and selection option.</p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="madd-coadd-the-corrected-observations-into-one-fits-mosaic"><code>mAdd</code>: coadd the corrected observations into one FITS mosaic<a href="https://akoflow.com/blog/montage-050-from-observations-to-a-mosaic#madd-coadd-the-corrected-observations-into-one-fits-mosaic" class="hash-link" aria-label="Direct link to madd-coadd-the-corrected-observations-into-one-fits-mosaic" title="Direct link to madd-coadd-the-corrected-observations-into-one-fits-mosaic" translate="no">​</a></h3>
<div class="language-bash codeBlockContainer_Ckt0 theme-code-block" style="--prism-background-color:hsl(230, 1%, 98%);--prism-color:hsl(230, 8%, 24%)"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-bash codeBlock_bY9V thin-scrollbar" style="background-color:hsl(230, 1%, 98%);color:hsl(230, 8%, 24%)"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain">mAdd </span><span class="token parameter variable" style="color:hsl(221, 87%, 60%)">-e</span><span class="token plain"> </span><span class="token number" style="color:hsl(35, 99%, 36%)">1</span><span class="token plain">-updated-corrected.tbl region.hdr </span><span class="token number" style="color:hsl(35, 99%, 36%)">1</span><span class="token plain">-mosaic.fits</span><br></div></code></pre></div></div>
<p>The <strong>three executions</strong> create one scientific mosaic per band from the corrected, aligned images. Coaddition combines contributions where pixels overlap; it is not concatenation of files or an RGB operation. Montage also produces an area/coverage mosaic.</p>
<table><thead><tr><th>Parameter</th><th>Meaning in this example</th></tr></thead><tbody><tr><td><code>-e</code></td><td>Use the exact dimensions in the final header template instead of shrinking the mosaic to the data's bounding region.</td></tr><tr><td><code>1-updated-corrected.tbl</code></td><td>Metadata table selecting the images to coadd.</td></tr><tr><td><code>region.hdr</code></td><td>Final mosaic template, as distinct from the oversized working template used earlier. The recorded output is 1800 × 1800 pixels.</td></tr><tr><td><code>1-mosaic.fits</code></td><td>Output scientific mosaic for this band.</td></tr></tbody></table>
<p>No averaging-mode override (<code>-a</code>) is supplied in this command. The <a href="https://irsa.ipac.caltech.edu/Montage/docs/mAdd.html" target="_blank" rel="noopener noreferrer" class="">official <code>mAdd</code> manual</a> describes the coaddition modes and area-image behavior.</p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="mviewer-turn-scientific-mosaics-into-viewable-pngs"><code>mViewer</code>: turn scientific mosaics into viewable PNGs<a href="https://akoflow.com/blog/montage-050-from-observations-to-a-mosaic#mviewer-turn-scientific-mosaics-into-viewable-pngs" class="hash-link" aria-label="Direct link to mviewer-turn-scientific-mosaics-into-viewable-pngs" title="Direct link to mviewer-turn-scientific-mosaics-into-viewable-pngs" translate="no">​</a></h3>
<p>The first <strong>three executions</strong> render one preview per band:</p>
<div class="language-bash codeBlockContainer_Ckt0 theme-code-block" style="--prism-background-color:hsl(230, 1%, 98%);--prism-color:hsl(230, 8%, 24%)"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-bash codeBlock_bY9V thin-scrollbar" style="background-color:hsl(230, 1%, 98%);color:hsl(230, 8%, 24%)"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain">mViewer </span><span class="token parameter variable" style="color:hsl(221, 87%, 60%)">-ct</span><span class="token plain"> </span><span class="token number" style="color:hsl(35, 99%, 36%)">1</span><span class="token plain"> </span><span class="token parameter variable" style="color:hsl(221, 87%, 60%)">-gray</span><span class="token plain"> </span><span class="token number" style="color:hsl(35, 99%, 36%)">1</span><span class="token plain">-mosaic.fits </span><span class="token parameter variable" style="color:hsl(221, 87%, 60%)">-1s</span><span class="token plain"> max gaussian </span><span class="token parameter variable" style="color:hsl(221, 87%, 60%)">-png</span><span class="token plain"> </span><span class="token number" style="color:hsl(35, 99%, 36%)">1</span><span class="token plain">-mosaic.png</span><br></div></code></pre></div></div>
<table><thead><tr><th>Parameter</th><th>Meaning in this example</th></tr></thead><tbody><tr><td><code>-ct 1</code></td><td>Select color-table index 1 for the single-band display.</td></tr><tr><td><code>-gray 1-mosaic.fits</code></td><td>Read one FITS image for single-band rendering.</td></tr><tr><td><code>-1s max</code></td><td>Set the display range using a sigma-based lower bound and the maximum as the upper bound.</td></tr><tr><td><code>gaussian</code></td><td>Use Gaussian histogram-based stretching for display.</td></tr><tr><td><code>-png 1-mosaic.png</code></td><td>Write the rendered PNG.</td></tr></tbody></table>
<p>The <strong>fourth execution</strong> builds the color preview after all three <code>mAdd</code> tasks finish:</p>
<div class="language-bash codeBlockContainer_Ckt0 theme-code-block" style="--prism-background-color:hsl(230, 1%, 98%);--prism-color:hsl(230, 8%, 24%)"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-bash codeBlock_bY9V thin-scrollbar" style="background-color:hsl(230, 1%, 98%);color:hsl(230, 8%, 24%)"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain">mViewer </span><span class="token parameter variable" style="color:hsl(221, 87%, 60%)">-red</span><span class="token plain"> </span><span class="token number" style="color:hsl(35, 99%, 36%)">3</span><span class="token plain">-mosaic.fits </span><span class="token parameter variable" style="color:hsl(221, 87%, 60%)">-0.5s</span><span class="token plain"> max gaussian-log </span><span class="token parameter variable" style="color:hsl(221, 87%, 60%)">-green</span><span class="token plain"> </span><span class="token number" style="color:hsl(35, 99%, 36%)">2</span><span class="token plain">-mosaic.fits </span><span class="token parameter variable" style="color:hsl(221, 87%, 60%)">-0.5s</span><span class="token plain"> max gaussian-log </span><span class="token parameter variable" style="color:hsl(221, 87%, 60%)">-blue</span><span class="token plain"> </span><span class="token number" style="color:hsl(35, 99%, 36%)">1</span><span class="token plain">-mosaic.fits </span><span class="token parameter variable" style="color:hsl(221, 87%, 60%)">-0.5s</span><span class="token plain"> max gaussian-log </span><span class="token parameter variable" style="color:hsl(221, 87%, 60%)">-png</span><span class="token plain"> mosaic-color.png</span><br></div></code></pre></div></div>
<p>Here, <code>-red</code>, <code>-green</code>, and <code>-blue</code> assign FITS mosaics to display channels. Each receives its own <code>-0.5s max</code> range and <code>gaussian-log</code> stretch. <code>-png</code> names the final output. These choices control visualization, not the calibrated FITS pixel values.</p>
<p>The <a href="https://github.com/Caltech-IPAC/Montage/blob/main/man/docs/mViewer.html" target="_blank" rel="noopener noreferrer" class="">official <code>mViewer</code> examples</a> describe these interfaces. Berriman and Good's <a href="https://arxiv.org/abs/1702.02593" target="_blank" rel="noopener noreferrer" class="">visualization paper</a> explains the scientific visualization context. The three single-band previews and the color preview are sibling consumers of the FITS mosaics: the color task does not need to wait for the preview PNGs.</p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="scientific-parameters-and-execution-settings-are-different">Scientific parameters and execution settings are different<a href="https://akoflow.com/blog/montage-050-from-observations-to-a-mosaic#scientific-parameters-and-execution-settings-are-different" class="hash-link" aria-label="Direct link to Scientific parameters and execution settings are different" title="Direct link to Scientific parameters and execution settings are different" translate="no">​</a></h3>
<p>The command arguments above determine image processing and file products. The YAML also supplies AkôFlow settings such as <code>cpuLimit: 1000m</code> (one CPU), <code>memoryLimit: 1Gi</code>, the selected runtime, and <code>dependsOn</code>. Those govern execution placement, limits, and readiness; they are not flags passed to Montage. <code>workspaceSeedPath</code> identifies the packaged seed, while historical <code>simulation.durationSeconds</code> values support planning and do not measure a new real execution.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="reproduce-the-workload-locally">Reproduce the workload locally<a href="https://akoflow.com/blog/montage-050-from-observations-to-a-mosaic#reproduce-the-workload-locally" class="hash-link" aria-label="Direct link to Reproduce the workload locally" title="Direct link to Reproduce the workload locally" translate="no">​</a></h2>
<p>If this is your first AkôFlow experiment, begin with <a class="" href="https://akoflow.com/blog/from-a-dag-to-your-first-run">the Desktop walkthrough</a>. It teaches definitions, environments, scopes, plans, and runs with a tiny local workload.</p>
<p>The full Montage bundle adds a command-line preparation and execution path. Have <strong>Git, Go 1.23 or newer, and Docker with linux/amd64 support</strong> available. Keep at least <strong>15 GiB</strong> of free disk for the image and intermediate workspaces. Retention and concurrency affect the peak requirement. Apple Silicon runs this amd64 workload through emulation and may take substantially longer.</p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="1-get-the-versioned-example">1. Get the versioned example<a href="https://akoflow.com/blog/montage-050-from-observations-to-a-mosaic#1-get-the-versioned-example" class="hash-link" aria-label="Direct link to 1. Get the versioned example" title="Direct link to 1. Get the versioned example" translate="no">​</a></h3>
<div class="language-bash codeBlockContainer_Ckt0 theme-code-block" style="--prism-background-color:hsl(230, 1%, 98%);--prism-color:hsl(230, 8%, 24%)"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-bash codeBlock_bY9V thin-scrollbar" style="background-color:hsl(230, 1%, 98%);color:hsl(230, 8%, 24%)"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token function" style="color:hsl(221, 87%, 60%)">git</span><span class="token plain"> clone https://github.com/UFFeScience/akoflow-examples.git</span><br></div><div class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain"></span><span class="token builtin class-name" style="color:hsl(35, 99%, 36%)">cd</span><span class="token plain"> akoflow-examples</span><br></div><div class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain"></span><span class="token function" style="color:hsl(221, 87%, 60%)">git</span><span class="token plain"> checkout </span><span class="token parameter variable" style="color:hsl(221, 87%, 60%)">--detach</span><span class="token plain"> d890c3171e3661890305b763b8fc3ede48bb61b4</span><br></div><div class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain"></span><span class="token builtin class-name" style="color:hsl(35, 99%, 36%)">cd</span><span class="token plain"> scientific-workflows/montage-050</span><br></div></code></pre></div></div>
<p>Pinning the checkout makes this walkthrough refer to a specific example revision. The <a href="https://github.com/UFFeScience/akoflow-examples/blob/d890c3171e3661890305b763b8fc3ede48bb61b4/scientific-workflows/montage-050/README.md" target="_blank" rel="noopener noreferrer" class="">bundle README</a> documents its requirements and commands.</p>
<p>The bundle contains <code>workflow.yaml</code>, <code>environment.yaml</code>, <code>scope.yaml</code>, and <code>topology.yaml</code>, plus preparation, execution, and validation scripts. The workflow retains historical simulation durations as model inputs. Use the provided runner or daemon helper for the real workload; importing that source YAML alone is not the complete real-execution setup.</p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="2-prepare-the-image-and-inputs">2. Prepare the image and inputs<a href="https://akoflow.com/blog/montage-050-from-observations-to-a-mosaic#2-prepare-the-image-and-inputs" class="hash-link" aria-label="Direct link to 2. Prepare the image and inputs" title="Direct link to 2. Prepare the image and inputs" translate="no">​</a></h3>
<div class="language-bash codeBlockContainer_Ckt0 theme-code-block" style="--prism-background-color:hsl(230, 1%, 98%);--prism-color:hsl(230, 8%, 24%)"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-bash codeBlock_bY9V thin-scrollbar" style="background-color:hsl(230, 1%, 98%);color:hsl(230, 8%, 24%)"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain">./prepare.sh</span><br></div></code></pre></div></div>
<p>Preparation obtains the pinned image and Go dependencies, and checks the command/input contract. The image includes approximately 87 MiB of source FITS data, region headers, lookup tables, and the native Montage tools. There is no need to locate twelve observations manually.</p>
<p>The upstream image is pinned by digest:</p>
<div class="language-text codeBlockContainer_Ckt0 theme-code-block" style="--prism-background-color:hsl(230, 1%, 98%);--prism-color:hsl(230, 8%, 24%)"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-text codeBlock_bY9V thin-scrollbar" style="background-color:hsl(230, 1%, 98%);color:hsl(230, 8%, 24%)"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain">ovvesley/akoflow-wf-montage@sha256:26b060b83b990557ea86ab40503cc8f17ab6016b5973e7e6f9201100a96440c9</span><br></div></code></pre></div></div>
<p>Preparation success establishes that the inputs and commands are available. It does not mean all scientific activities have executed.</p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="3-execute-the-complete-local-dag">3. Execute the complete local DAG<a href="https://akoflow.com/blog/montage-050-from-observations-to-a-mosaic#3-execute-the-complete-local-dag" class="hash-link" aria-label="Direct link to 3. Execute the complete local DAG" title="Direct link to 3. Execute the complete local DAG" translate="no">​</a></h3>
<div class="language-bash codeBlockContainer_Ckt0 theme-code-block" style="--prism-background-color:hsl(230, 1%, 98%);--prism-color:hsl(230, 8%, 24%)"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-bash codeBlock_bY9V thin-scrollbar" style="background-color:hsl(230, 1%, 98%);color:hsl(230, 8%, 24%)"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain">./run.sh</span><br></div></code></pre></div></div>
<p>The standalone runner uses <strong>two CPU slots</strong> by default. Each activity becomes eligible once its dependencies finish and a slot is available. It copies the bundled input seed, executes the native commands with network access disabled, and writes activity observations under <code>outputs/</code>.</p>
<p>This path provisions no cloud machines and needs no remote HPC account. It is a substantial scientific workload: allow it to finish rather than interpreting a slow projection as a completed run.</p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="4-validate-and-open-the-products">4. Validate and open the products<a href="https://akoflow.com/blog/montage-050-from-observations-to-a-mosaic#4-validate-and-open-the-products" class="hash-link" aria-label="Direct link to 4. Validate and open the products" title="Direct link to 4. Validate and open the products" translate="no">​</a></h3>
<div class="language-bash codeBlockContainer_Ckt0 theme-code-block" style="--prism-background-color:hsl(230, 1%, 98%);--prism-color:hsl(230, 8%, 24%)"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-bash codeBlock_bY9V thin-scrollbar" style="background-color:hsl(230, 1%, 98%);color:hsl(230, 8%, 24%)"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain">./validate.sh</span><br></div></code></pre></div></div>
<p>Inspect the final files in <code>outputs/</code>:</p>
<table><thead><tr><th>Product</th><th>What it gives you</th></tr></thead><tbody><tr><td><code>1-mosaic.fits</code>, <code>2-mosaic.fits</code>, <code>3-mosaic.fits</code></td><td>Three 1800 × 1800 scientific mosaics</td></tr><tr><td><code>1-mosaic.png</code>, <code>2-mosaic.png</code>, <code>3-mosaic.png</code></td><td>Monochrome visual previews</td></tr><tr><td><code>mosaic-color.png</code></td><td>Combined color preview</td></tr><tr><td><code>manifest.json</code></td><td>Generated artifacts and SHA-256 digests</td></tr><tr><td><code>dag-validation.json</code></td><td>Dependency-wave validation</td></tr><tr><td><code>stage-&lt;activity&gt;.json</code></td><td>Per-activity observations</td></tr></tbody></table>
<p>The validator checks all 58 activity records, FITS dimensions, and PNG headers. A successful manifest is published only after the workflow and final-file checks pass. Merely finding one intermediate image is insufficient to declare the experiment complete.</p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="inspect-a-daemon-managed-run-in-desktop">Inspect a daemon-managed run in Desktop<a href="https://akoflow.com/blog/montage-050-from-observations-to-a-mosaic#inspect-a-daemon-managed-run-in-desktop" class="hash-link" aria-label="Direct link to Inspect a daemon-managed run in Desktop" title="Direct link to Inspect a daemon-managed run in Desktop" translate="no">​</a></h3>
<p>The bundle also supports a daemon helper that registers the local environment, builds the declared image, and submits the 58 activities to the engine. This advanced path requires a daemon whose API address and token you manage; follow <a class="" href="https://akoflow.com/docs/tutorials/api-access">API connection setup</a>. The graphical Desktop installation keeps its internal credentials managed by its proxy—do not assume that it exposes a shell token.</p>
<p>From the example directory, with that daemon connection configured:</p>
<div class="language-bash codeBlockContainer_Ckt0 theme-code-block" style="--prism-background-color:hsl(230, 1%, 98%);--prism-color:hsl(230, 8%, 24%)"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-bash codeBlock_bY9V thin-scrollbar" style="background-color:hsl(230, 1%, 98%);color:hsl(230, 8%, 24%)"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:hsl(230, 8%, 24%)"><span class="token plain">go run </span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">..</span><span class="token plain">/</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">..</span><span class="token plain">/tools/daemon-local </span><span class="token parameter variable" style="color:hsl(221, 87%, 60%)">-root</span><span class="token plain"> </span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">..</span><span class="token plain">/</span><span class="token punctuation" style="color:hsl(119, 34%, 47%)">..</span><span class="token plain"> </span><span class="token parameter variable" style="color:hsl(221, 87%, 60%)">-example</span><span class="token plain"> scientific-workflows/montage-050 </span><span class="token parameter variable" style="color:hsl(221, 87%, 60%)">-wait</span><span class="token operator" style="color:hsl(221, 87%, 60%)">=</span><span class="token plain">false</span><br></div></code></pre></div></div>
<p>The command prints the submitted run ID and returns while execution continues. Connect Desktop to that same instance and open the run. Inspect its activity DAG, file handoffs, logs, and completion status. The daemon owns execution and transfers; the standalone runner's <code>outputs/</code> directory belongs to the separate standalone path.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="what-the-completed-hybrid-experiment-observed">What the completed hybrid experiment observed<a href="https://akoflow.com/blog/montage-050-from-observations-to-a-mosaic#what-the-completed-hybrid-experiment-observed" class="hash-link" aria-label="Direct link to What the completed hybrid experiment observed" title="Direct link to What the completed hybrid experiment observed" translate="no">​</a></h2>
<p>The following results come from the preserved completion record for <strong><code>montage-docker-image-real-20261010-v2</code></strong>, dated by that run's identity. Its topology comprised ten GCP <code>e2-micro</code> instances, two <code>e2-medium</code> instances, and eight HPC activity assignments. This is a historical experiment, not the local two-slot configuration above.</p>
<table><thead><tr><th>Evidence</th><th style="text-align:right">Recorded result</th></tr></thead><tbody><tr><td>Completed activities</td><td style="text-align:right">58 / 58</td></tr><tr><td>Failed activities</td><td style="text-align:right">0</td></tr><tr><td>Successful runtime handles</td><td style="text-align:right">58</td></tr><tr><td>Missing dependency routes</td><td style="text-align:right">0</td></tr><tr><td>Transfer-barrier violations</td><td style="text-align:right">0</td></tr><tr><td>Unreleased consumer leases</td><td style="text-align:right">0</td></tr><tr><td>Overlapping activities on single-lane micro instances</td><td style="text-align:right">0</td></tr><tr><td>Final PNG dimensions</td><td style="text-align:right">1800 × 1800</td></tr></tbody></table>
<p>The preserved record also distinguishes three timing scopes:</p>
<table><thead><tr><th>Timing</th><th style="text-align:right">Seconds</th><th style="text-align:right">Approximately</th></tr></thead><tbody><tr><td>Planned makespan</td><td style="text-align:right">3,617.94</td><td style="text-align:right">60.3 min</td></tr><tr><td>SimGrid makespan</td><td style="text-align:right">3,617.50</td><td style="text-align:right">60.3 min</td></tr><tr><td>Real API-reported makespan</td><td style="text-align:right">6,924.25</td><td style="text-align:right">115.4 min</td></tr><tr><td>Run timestamp wall interval</td><td style="text-align:right">6,949.00</td><td style="text-align:right">115.8 min</td></tr></tbody></table>
<p>The real API-reported makespan was about <strong>1.91× the planned estimate</strong>. That is an observation from this run, not a general slowdown factor. Close agreement between the plan and simulation did not establish that the real distributed execution would match either prediction.</p>
<p>The accompanying results record identifies whole-workspace traffic and different planned edge volumes as a comparability limit. Summed transfer or compute work can overlap across activities and is not the same as wall-clock makespan. Likewise, a zero reported interference value cannot establish that physical contention was absent.</p>
<p>The recorded cloud compute-and-boot-disk lifecycle estimate was <strong>USD 0.3532</strong> at the experiment's list rates. It excludes network egress, public IPv4, reusable image storage, discounts, and tax, and assigns no calibrated monetary tariff to HPC. It is an estimate, not a provider invoice or a current price quote. Other cost fields in the JSON use different task/window scopes and should not be treated as equivalent bills.</p>
<p><a href="https://akoflow.com/assets/files/observed-results-1b7ead5356d5a51e0a7e88d6792b3aab.json" target="_blank" class="">Download the result summary and its limitations</a>. The repository preserves the original <a href="https://github.com/UFFeScience/akoflow/blob/main/experiments/montage-micro-hpc-e2/docker-image-real-v2-completion.json" target="_blank" rel="noopener noreferrer" class="">completion record</a> and <a href="https://github.com/UFFeScience/akoflow/blob/main/experiments/montage-micro-hpc-e2/docker-image-real-v2-results.json" target="_blank" rel="noopener noreferrer" class="">detailed results</a>.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="what-isand-is-notverified-for-the-local-bundle">What is—and is not—verified for the local bundle<a href="https://akoflow.com/blog/montage-050-from-observations-to-a-mosaic#what-isand-is-notverified-for-the-local-bundle" class="hash-link" aria-label="Direct link to What is—and is not—verified for the local bundle" title="Direct link to What is—and is not—verified for the local bundle" translate="no">​</a></h2>
<p>The checked-in local image contract was validated on <strong>2026-10-20</strong>: twelve FITS inputs, 58 activities, and 138 named handoffs. That record explicitly states <code>fullExecutionPerformed: false</code>. Its separate daemon snapshot recorded a running workflow with zero completed activities at capture time. These are historical snapshots; neither establishes the current state of another instance.</p>
<p>The completed hybrid run supplies the mosaic and the results in this article. To claim a completed reproduction on your machine, retain your own successful validator output, activity records, and output manifest. The <a class="" href="https://akoflow.com/docs/showcase/scientific-workflows/montage-050">local showcase page</a> links the checked-in contract and daemon evidence.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="keep-the-experiment-with-the-picture">Keep the experiment with the picture<a href="https://akoflow.com/blog/montage-050-from-observations-to-a-mosaic#keep-the-experiment-with-the-picture" class="hash-link" aria-label="Direct link to Keep the experiment with the picture" title="Direct link to Keep the experiment with the picture" translate="no">​</a></h2>
<p>The mosaic is the visible result, but the research artifact includes more: input identity, native commands, the dependency graph, resource assignments, file transfers, and output digests. Together, they explain how the image was produced and where a later execution differs.</p>
<p>AkôFlow's original paper provides the research context: Ferreira et al., <strong>AkôFlow: um Middleware para execução de Workflows científicos em múltiplos ambientes conteinerizados</strong>, SBBD 2024, pp. 27–39. <a href="https://doi.org/10.5753/sbbd.2024.241126" target="_blank" rel="noopener noreferrer" class="">Read the publication</a>.</p>
<p>Continue with the <a class="" href="https://akoflow.com/docs/showcase/scientific-workflows/montage-050">complete local example</a>, the <a class="" href="https://akoflow.com/blog/from-a-dag-to-your-first-run">Desktop first experiment</a>, or <a class="" href="https://akoflow.com/docs/guides/workflows/planning">planning alternatives</a>. When comparing placements, preserve the scientific workload and change the execution environment deliberately, so the measurements remain interpretable.</p>]]></content:encoded>
            <category>Scientific workflows</category>
            <category>Astronomy</category>
            <category>Experiments</category>
        </item>
    </channel>
</rss>