<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
  <id>https://levelrail.glinr.com/changelog/</id>
  <title>Levelrail releases</title>
  <subtitle>Release notes for Levelrail, the self-hosted deployment platform.</subtitle>
  <link rel="self" type="application/atom+xml" href="https://levelrail.glinr.com/changelog/feed.xml"/>
  <link rel="alternate" type="text/html" href="https://levelrail.glinr.com/changelog/"/>
  <updated>2026-09-23T05:01:59Z</updated>
  <author><name>GLINCKER</name><uri>https://github.com/glincker</uri></author>
  <entry>
    <id>https://levelrail.glinr.com/changelog/v0-2-0-beta-10</id>
    <title>Levelrail v0.2.0-beta.10: Correct Vikunja and Keycloak catalog...</title>
    <link rel="alternate" type="text/html" href="https://levelrail.glinr.com/changelog/v0-2-0-beta-10"/>
    <published>2026-09-23T05:01:59Z</published>
    <updated>2026-09-23T05:01:59Z</updated>
    <summary>Levelrail v0.2.0-beta.10 release notes (2026-09-23). Correct Vikunja and Keycloak catalog templates so they boot.</summary>
    <content type="html">&lt;div v-pre&gt;
&lt;!-- release-notes:start --&gt;
&lt;div class=&quot;note custom-block github-alert&quot;&gt;&lt;p class=&quot;custom-block-title&quot;&gt;NOTE&lt;/p&gt;
&lt;p&gt;This is a pre-release on the &lt;code&gt;beta&lt;/code&gt; channel. Pin this exact version for anything you care about staying still.&lt;/p&gt;
&lt;/div&gt;
&lt;h2 id=&quot;what-s-changed&quot; tabindex=&quot;-1&quot;&gt;What's changed &lt;a class=&quot;header-anchor&quot; href=&quot;#what-s-changed&quot; aria-label=&quot;Permalink to &amp;quot;What's changed&amp;quot;&quot;&gt;&amp;ZeroWidthSpace;&lt;/a&gt;&lt;/h2&gt;
&lt;h3 id=&quot;bug-fixes&quot; tabindex=&quot;-1&quot;&gt;Bug fixes &lt;a class=&quot;header-anchor&quot; href=&quot;#bug-fixes&quot; aria-label=&quot;Permalink to &amp;quot;Bug fixes&amp;quot;&quot;&gt;&amp;ZeroWidthSpace;&lt;/a&gt;&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;correct Vikunja and Keycloak catalog templates so they boot (&lt;a href=&quot;https://github.com/glincker/levelrail/pull/615&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;#615&lt;/a&gt;) by &lt;a href=&quot;https://github.com/thegdsks&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;@thegdsks&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;details&gt;
&lt;summary&gt;Maintenance, CI, and dependency updates (1)&lt;/summary&gt;
&lt;ul&gt;
&lt;li&gt;batch dependency updates (grpc, modernc.org/sqlite) (&lt;a href=&quot;https://github.com/glincker/levelrail/pull/614&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;#614&lt;/a&gt;) by &lt;a href=&quot;https://github.com/thegdsks&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;@thegdsks&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/details&gt;
&lt;h2 id=&quot;install&quot; tabindex=&quot;-1&quot;&gt;Install &lt;a class=&quot;header-anchor&quot; href=&quot;#install&quot; aria-label=&quot;Permalink to &amp;quot;Install&amp;quot;&quot;&gt;&amp;ZeroWidthSpace;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Fresh install on a Linux host, pinned to this release:&lt;/p&gt;
&lt;div class=&quot;language-sh vp-adaptive-theme&quot;&gt;&lt;button title=&quot;Copy Code&quot; class=&quot;copy&quot;&gt;&lt;/button&gt;&lt;span class=&quot;lang&quot;&gt;sh&lt;/span&gt;&lt;pre class=&quot;shiki shiki-themes github-light github-dark vp-code&quot; tabindex=&quot;0&quot; v-pre=&quot;&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;--shiki-light:#6F42C1;--shiki-dark:#B392F0&quot;&gt;curl&lt;/span&gt;&lt;span style=&quot;--shiki-light:#005CC5;--shiki-dark:#79B8FF&quot;&gt; -fsSL&lt;/span&gt;&lt;span style=&quot;--shiki-light:#032F62;--shiki-dark:#9ECBFF&quot;&gt; https://raw.githubusercontent.com/glincker/levelrail/main/install.sh&lt;/span&gt;&lt;span style=&quot;--shiki-light:#D73A49;--shiki-dark:#F97583&quot;&gt; |&lt;/span&gt;&lt;span style=&quot;--shiki-light:#6F42C1;--shiki-dark:#B392F0&quot;&gt; sudo&lt;/span&gt;&lt;span style=&quot;--shiki-light:#032F62;--shiki-dark:#9ECBFF&quot;&gt; env&lt;/span&gt;&lt;span style=&quot;--shiki-light:#032F62;--shiki-dark:#9ECBFF&quot;&gt; LEVELRAIL_VERSION=v0.2.0-beta.10&lt;/span&gt;&lt;span style=&quot;--shiki-light:#032F62;--shiki-dark:#9ECBFF&quot;&gt; sh&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;&lt;p&gt;Upgrade an existing install in place (keeps the unit file and data):&lt;/p&gt;
&lt;div class=&quot;language-sh vp-adaptive-theme&quot;&gt;&lt;button title=&quot;Copy Code&quot; class=&quot;copy&quot;&gt;&lt;/button&gt;&lt;span class=&quot;lang&quot;&gt;sh&lt;/span&gt;&lt;pre class=&quot;shiki shiki-themes github-light github-dark vp-code&quot; tabindex=&quot;0&quot; v-pre=&quot;&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;--shiki-light:#6F42C1;--shiki-dark:#B392F0&quot;&gt;curl&lt;/span&gt;&lt;span style=&quot;--shiki-light:#005CC5;--shiki-dark:#79B8FF&quot;&gt; -fsSL&lt;/span&gt;&lt;span style=&quot;--shiki-light:#032F62;--shiki-dark:#9ECBFF&quot;&gt; https://raw.githubusercontent.com/glincker/levelrail/main/install.sh&lt;/span&gt;&lt;span style=&quot;--shiki-light:#D73A49;--shiki-dark:#F97583&quot;&gt; |&lt;/span&gt;&lt;span style=&quot;--shiki-light:#6F42C1;--shiki-dark:#B392F0&quot;&gt; sudo&lt;/span&gt;&lt;span style=&quot;--shiki-light:#032F62;--shiki-dark:#9ECBFF&quot;&gt; env&lt;/span&gt;&lt;span style=&quot;--shiki-light:#032F62;--shiki-dark:#9ECBFF&quot;&gt; LEVELRAIL_VERSION=v0.2.0-beta.10&lt;/span&gt;&lt;span style=&quot;--shiki-light:#032F62;--shiki-dark:#9ECBFF&quot;&gt; sh&lt;/span&gt;&lt;span style=&quot;--shiki-light:#005CC5;--shiki-dark:#79B8FF&quot;&gt; -s&lt;/span&gt;&lt;span style=&quot;--shiki-light:#032F62;--shiki-dark:#9ECBFF&quot;&gt; upgrade&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;&lt;p&gt;Docker Compose: pin the image tag in &lt;code&gt;docker-compose.yml&lt;/code&gt;:&lt;/p&gt;
&lt;div class=&quot;language-yaml vp-adaptive-theme&quot;&gt;&lt;button title=&quot;Copy Code&quot; class=&quot;copy&quot;&gt;&lt;/button&gt;&lt;span class=&quot;lang&quot;&gt;yaml&lt;/span&gt;&lt;pre class=&quot;shiki shiki-themes github-light github-dark vp-code&quot; tabindex=&quot;0&quot; v-pre=&quot;&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;--shiki-light:#22863A;--shiki-dark:#85E89D&quot;&gt;services&lt;/span&gt;&lt;span style=&quot;--shiki-light:#24292E;--shiki-dark:#E1E4E8&quot;&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;--shiki-light:#22863A;--shiki-dark:#85E89D&quot;&gt;  levelrail&lt;/span&gt;&lt;span style=&quot;--shiki-light:#24292E;--shiki-dark:#E1E4E8&quot;&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;--shiki-light:#22863A;--shiki-dark:#85E89D&quot;&gt;    image&lt;/span&gt;&lt;span style=&quot;--shiki-light:#24292E;--shiki-dark:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;--shiki-light:#032F62;--shiki-dark:#9ECBFF&quot;&gt;ghcr.io/glincker/levelrail:v0.2.0-beta.10&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;&lt;h2 id=&quot;container-images&quot; tabindex=&quot;-1&quot;&gt;Container images &lt;a class=&quot;header-anchor&quot; href=&quot;#container-images&quot; aria-label=&quot;Permalink to &amp;quot;Container images&amp;quot;&quot;&gt;&amp;ZeroWidthSpace;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Multi-arch (&lt;code&gt;linux/amd64&lt;/code&gt;, &lt;code&gt;linux/arm64&lt;/code&gt;), signed with cosign, SBOM and provenance attached. Also tagged &lt;code&gt;beta&lt;/code&gt; at release time (moving tags).&lt;/p&gt;
&lt;table tabindex=&quot;0&quot;&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Image&lt;/th&gt;
&lt;th&gt;Tag&lt;/th&gt;
&lt;th&gt;Digest&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;ghcr.io/glincker/levelrail&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;v0.2.0-beta.10&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;sha256:41e837446c28180acf6728459199996e68f1a3e7dda1e8f8c4e4441f482429bc&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;ghcr.io/glincker/levelrail-agent&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;v0.2.0-beta.10&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;sha256:c776ea59f47cbd8944bca76bef13361e6390977b9fdbbe6885ad66f4aa082936&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h2 id=&quot;verify&quot; tabindex=&quot;-1&quot;&gt;Verify &lt;a class=&quot;header-anchor&quot; href=&quot;#verify&quot; aria-label=&quot;Permalink to &amp;quot;Verify&amp;quot;&quot;&gt;&amp;ZeroWidthSpace;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Binaries: check downloads against &lt;code&gt;checksums.txt&lt;/code&gt;:&lt;/p&gt;
&lt;div class=&quot;language-sh vp-adaptive-theme&quot;&gt;&lt;button title=&quot;Copy Code&quot; class=&quot;copy&quot;&gt;&lt;/button&gt;&lt;span class=&quot;lang&quot;&gt;sh&lt;/span&gt;&lt;pre class=&quot;shiki shiki-themes github-light github-dark vp-code&quot; tabindex=&quot;0&quot; v-pre=&quot;&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;--shiki-light:#6F42C1;--shiki-dark:#B392F0&quot;&gt;gh&lt;/span&gt;&lt;span style=&quot;--shiki-light:#032F62;--shiki-dark:#9ECBFF&quot;&gt; release&lt;/span&gt;&lt;span style=&quot;--shiki-light:#032F62;--shiki-dark:#9ECBFF&quot;&gt; download&lt;/span&gt;&lt;span style=&quot;--shiki-light:#032F62;--shiki-dark:#9ECBFF&quot;&gt; v0.2.0-beta.10&lt;/span&gt;&lt;span style=&quot;--shiki-light:#005CC5;--shiki-dark:#79B8FF&quot;&gt; --repo&lt;/span&gt;&lt;span style=&quot;--shiki-light:#032F62;--shiki-dark:#9ECBFF&quot;&gt; glincker/levelrail&lt;/span&gt;&lt;span style=&quot;--shiki-light:#005CC5;--shiki-dark:#79B8FF&quot;&gt; --pattern&lt;/span&gt;&lt;span style=&quot;--shiki-light:#032F62;--shiki-dark:#9ECBFF&quot;&gt; 'levelrail-linux-amd64'&lt;/span&gt;&lt;span style=&quot;--shiki-light:#005CC5;--shiki-dark:#79B8FF&quot;&gt; --pattern&lt;/span&gt;&lt;span style=&quot;--shiki-light:#032F62;--shiki-dark:#9ECBFF&quot;&gt; checksums.txt&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;--shiki-light:#6F42C1;--shiki-dark:#B392F0&quot;&gt;sha256sum&lt;/span&gt;&lt;span style=&quot;--shiki-light:#005CC5;--shiki-dark:#79B8FF&quot;&gt; --ignore-missing&lt;/span&gt;&lt;span style=&quot;--shiki-light:#005CC5;--shiki-dark:#79B8FF&quot;&gt; -c&lt;/span&gt;&lt;span style=&quot;--shiki-light:#032F62;--shiki-dark:#9ECBFF&quot;&gt; checksums.txt&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;&lt;p&gt;Images: verify the keyless signature was made by this repository's release workflow:&lt;/p&gt;
&lt;div class=&quot;language-sh vp-adaptive-theme&quot;&gt;&lt;button title=&quot;Copy Code&quot; class=&quot;copy&quot;&gt;&lt;/button&gt;&lt;span class=&quot;lang&quot;&gt;sh&lt;/span&gt;&lt;pre class=&quot;shiki shiki-themes github-light github-dark vp-code&quot; tabindex=&quot;0&quot; v-pre=&quot;&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;--shiki-light:#6F42C1;--shiki-dark:#B392F0&quot;&gt;cosign&lt;/span&gt;&lt;span style=&quot;--shiki-light:#032F62;--shiki-dark:#9ECBFF&quot;&gt; verify&lt;/span&gt;&lt;span style=&quot;--shiki-light:#032F62;--shiki-dark:#9ECBFF&quot;&gt; ghcr.io/glincker/levelrail@sha256:41e837446c28180acf6728459199996e68f1a3e7dda1e8f8c4e4441f482429bc&lt;/span&gt;&lt;span style=&quot;--shiki-light:#005CC5;--shiki-dark:#79B8FF&quot;&gt; \&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;--shiki-light:#005CC5;--shiki-dark:#79B8FF&quot;&gt;  --certificate-identity-regexp&lt;/span&gt;&lt;span style=&quot;--shiki-light:#032F62;--shiki-dark:#9ECBFF&quot;&gt; '^https://github\.com/glincker/levelrail/\.github/workflows/release\.yml@refs/(heads/main|tags/v.+)$'&lt;/span&gt;&lt;span style=&quot;--shiki-light:#005CC5;--shiki-dark:#79B8FF&quot;&gt; \&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;--shiki-light:#005CC5;--shiki-dark:#79B8FF&quot;&gt;  --certificate-oidc-issuer&lt;/span&gt;&lt;span style=&quot;--shiki-light:#032F62;--shiki-dark:#9ECBFF&quot;&gt; https://token.actions.githubusercontent.com&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;&lt;h2 id=&quot;contributors&quot; tabindex=&quot;-1&quot;&gt;Contributors &lt;a class=&quot;header-anchor&quot; href=&quot;#contributors&quot; aria-label=&quot;Permalink to &amp;quot;Contributors&amp;quot;&quot;&gt;&amp;ZeroWidthSpace;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Thanks to &lt;a href=&quot;https://github.com/thegdsks&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;@thegdsks&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Full changelog:&lt;/strong&gt; &lt;a href=&quot;https://github.com/glincker/levelrail/compare/v0.2.0-beta.9...v0.2.0-beta.10&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;v0.2.0-beta.9...v0.2.0-beta.10&lt;/a&gt; | &lt;a href=&quot;https://levelrail.glinr.com/changelog/v0-2-0-beta-10&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;Release page&lt;/a&gt; | &lt;a href=&quot;https://levelrail.glinr.com/installing&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;Installing&lt;/a&gt; | &lt;a href=&quot;https://levelrail.glinr.com/installing#upgrading&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;Upgrading&lt;/a&gt; | &lt;a href=&quot;https://levelrail.glinr.com/installing#verifying-image-signatures&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;Verifying signatures&lt;/a&gt;&lt;/p&gt;
&lt;!-- release-notes:end --&gt;
&lt;/div&gt;
</content>
  </entry>
  <entry>
    <id>https://levelrail.glinr.com/changelog/v0-2-0-beta-9</id>
    <title>Levelrail v0.2.0-beta.9: Bundle docs/ into the web build stage of...</title>
    <link rel="alternate" type="text/html" href="https://levelrail.glinr.com/changelog/v0-2-0-beta-9"/>
    <published>2026-09-23T04:27:56Z</published>
    <updated>2026-09-23T04:27:56Z</updated>
    <summary>Levelrail v0.2.0-beta.9 release notes (2026-09-23). Bundle docs/ into the web build stage of the Docker image.</summary>
    <content type="html">&lt;div v-pre&gt;
&lt;!-- release-notes:start --&gt;
&lt;div class=&quot;note custom-block github-alert&quot;&gt;&lt;p class=&quot;custom-block-title&quot;&gt;NOTE&lt;/p&gt;
&lt;p&gt;This is a pre-release on the &lt;code&gt;beta&lt;/code&gt; channel. Pin this exact version for anything you care about staying still.&lt;/p&gt;
&lt;/div&gt;
&lt;h2 id=&quot;what-s-changed&quot; tabindex=&quot;-1&quot;&gt;What's changed &lt;a class=&quot;header-anchor&quot; href=&quot;#what-s-changed&quot; aria-label=&quot;Permalink to &amp;quot;What's changed&amp;quot;&quot;&gt;&amp;ZeroWidthSpace;&lt;/a&gt;&lt;/h2&gt;
&lt;h3 id=&quot;bug-fixes&quot; tabindex=&quot;-1&quot;&gt;Bug fixes &lt;a class=&quot;header-anchor&quot; href=&quot;#bug-fixes&quot; aria-label=&quot;Permalink to &amp;quot;Bug fixes&amp;quot;&quot;&gt;&amp;ZeroWidthSpace;&lt;/a&gt;&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;bundle docs/ into the web build stage of the Docker image (&lt;a href=&quot;https://github.com/glincker/levelrail/pull/611&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;#611&lt;/a&gt;) by &lt;a href=&quot;https://github.com/thegdsks&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;@thegdsks&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;install&quot; tabindex=&quot;-1&quot;&gt;Install &lt;a class=&quot;header-anchor&quot; href=&quot;#install&quot; aria-label=&quot;Permalink to &amp;quot;Install&amp;quot;&quot;&gt;&amp;ZeroWidthSpace;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Fresh install on a Linux host, pinned to this release:&lt;/p&gt;
&lt;div class=&quot;language-sh vp-adaptive-theme&quot;&gt;&lt;button title=&quot;Copy Code&quot; class=&quot;copy&quot;&gt;&lt;/button&gt;&lt;span class=&quot;lang&quot;&gt;sh&lt;/span&gt;&lt;pre class=&quot;shiki shiki-themes github-light github-dark vp-code&quot; tabindex=&quot;0&quot; v-pre=&quot;&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;--shiki-light:#6F42C1;--shiki-dark:#B392F0&quot;&gt;curl&lt;/span&gt;&lt;span style=&quot;--shiki-light:#005CC5;--shiki-dark:#79B8FF&quot;&gt; -fsSL&lt;/span&gt;&lt;span style=&quot;--shiki-light:#032F62;--shiki-dark:#9ECBFF&quot;&gt; https://raw.githubusercontent.com/glincker/levelrail/main/install.sh&lt;/span&gt;&lt;span style=&quot;--shiki-light:#D73A49;--shiki-dark:#F97583&quot;&gt; |&lt;/span&gt;&lt;span style=&quot;--shiki-light:#6F42C1;--shiki-dark:#B392F0&quot;&gt; sudo&lt;/span&gt;&lt;span style=&quot;--shiki-light:#032F62;--shiki-dark:#9ECBFF&quot;&gt; env&lt;/span&gt;&lt;span style=&quot;--shiki-light:#032F62;--shiki-dark:#9ECBFF&quot;&gt; LEVELRAIL_VERSION=v0.2.0-beta.9&lt;/span&gt;&lt;span style=&quot;--shiki-light:#032F62;--shiki-dark:#9ECBFF&quot;&gt; sh&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;&lt;p&gt;Upgrade an existing install in place (keeps the unit file and data):&lt;/p&gt;
&lt;div class=&quot;language-sh vp-adaptive-theme&quot;&gt;&lt;button title=&quot;Copy Code&quot; class=&quot;copy&quot;&gt;&lt;/button&gt;&lt;span class=&quot;lang&quot;&gt;sh&lt;/span&gt;&lt;pre class=&quot;shiki shiki-themes github-light github-dark vp-code&quot; tabindex=&quot;0&quot; v-pre=&quot;&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;--shiki-light:#6F42C1;--shiki-dark:#B392F0&quot;&gt;curl&lt;/span&gt;&lt;span style=&quot;--shiki-light:#005CC5;--shiki-dark:#79B8FF&quot;&gt; -fsSL&lt;/span&gt;&lt;span style=&quot;--shiki-light:#032F62;--shiki-dark:#9ECBFF&quot;&gt; https://raw.githubusercontent.com/glincker/levelrail/main/install.sh&lt;/span&gt;&lt;span style=&quot;--shiki-light:#D73A49;--shiki-dark:#F97583&quot;&gt; |&lt;/span&gt;&lt;span style=&quot;--shiki-light:#6F42C1;--shiki-dark:#B392F0&quot;&gt; sudo&lt;/span&gt;&lt;span style=&quot;--shiki-light:#032F62;--shiki-dark:#9ECBFF&quot;&gt; env&lt;/span&gt;&lt;span style=&quot;--shiki-light:#032F62;--shiki-dark:#9ECBFF&quot;&gt; LEVELRAIL_VERSION=v0.2.0-beta.9&lt;/span&gt;&lt;span style=&quot;--shiki-light:#032F62;--shiki-dark:#9ECBFF&quot;&gt; sh&lt;/span&gt;&lt;span style=&quot;--shiki-light:#005CC5;--shiki-dark:#79B8FF&quot;&gt; -s&lt;/span&gt;&lt;span style=&quot;--shiki-light:#032F62;--shiki-dark:#9ECBFF&quot;&gt; upgrade&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;&lt;p&gt;Docker Compose: pin the image tag in &lt;code&gt;docker-compose.yml&lt;/code&gt;:&lt;/p&gt;
&lt;div class=&quot;language-yaml vp-adaptive-theme&quot;&gt;&lt;button title=&quot;Copy Code&quot; class=&quot;copy&quot;&gt;&lt;/button&gt;&lt;span class=&quot;lang&quot;&gt;yaml&lt;/span&gt;&lt;pre class=&quot;shiki shiki-themes github-light github-dark vp-code&quot; tabindex=&quot;0&quot; v-pre=&quot;&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;--shiki-light:#22863A;--shiki-dark:#85E89D&quot;&gt;services&lt;/span&gt;&lt;span style=&quot;--shiki-light:#24292E;--shiki-dark:#E1E4E8&quot;&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;--shiki-light:#22863A;--shiki-dark:#85E89D&quot;&gt;  levelrail&lt;/span&gt;&lt;span style=&quot;--shiki-light:#24292E;--shiki-dark:#E1E4E8&quot;&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;--shiki-light:#22863A;--shiki-dark:#85E89D&quot;&gt;    image&lt;/span&gt;&lt;span style=&quot;--shiki-light:#24292E;--shiki-dark:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;--shiki-light:#032F62;--shiki-dark:#9ECBFF&quot;&gt;ghcr.io/glincker/levelrail:v0.2.0-beta.9&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;&lt;h2 id=&quot;container-images&quot; tabindex=&quot;-1&quot;&gt;Container images &lt;a class=&quot;header-anchor&quot; href=&quot;#container-images&quot; aria-label=&quot;Permalink to &amp;quot;Container images&amp;quot;&quot;&gt;&amp;ZeroWidthSpace;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Multi-arch (&lt;code&gt;linux/amd64&lt;/code&gt;, &lt;code&gt;linux/arm64&lt;/code&gt;), signed with cosign, SBOM and provenance attached. Also tagged &lt;code&gt;beta&lt;/code&gt; at release time (moving tags).&lt;/p&gt;
&lt;table tabindex=&quot;0&quot;&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Image&lt;/th&gt;
&lt;th&gt;Tag&lt;/th&gt;
&lt;th&gt;Digest&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;ghcr.io/glincker/levelrail&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;v0.2.0-beta.9&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;sha256:ee87c125124bfe2f80bbf43a79225d691c282543daff725ac77e3f50bc5a9fcb&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;ghcr.io/glincker/levelrail-agent&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;v0.2.0-beta.9&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;sha256:f40e14cdc8965c5e334bbfc8ed7cc99779896fdd67d6ca6bff73d5aac806cb55&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h2 id=&quot;verify&quot; tabindex=&quot;-1&quot;&gt;Verify &lt;a class=&quot;header-anchor&quot; href=&quot;#verify&quot; aria-label=&quot;Permalink to &amp;quot;Verify&amp;quot;&quot;&gt;&amp;ZeroWidthSpace;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Binaries: check downloads against &lt;code&gt;checksums.txt&lt;/code&gt;:&lt;/p&gt;
&lt;div class=&quot;language-sh vp-adaptive-theme&quot;&gt;&lt;button title=&quot;Copy Code&quot; class=&quot;copy&quot;&gt;&lt;/button&gt;&lt;span class=&quot;lang&quot;&gt;sh&lt;/span&gt;&lt;pre class=&quot;shiki shiki-themes github-light github-dark vp-code&quot; tabindex=&quot;0&quot; v-pre=&quot;&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;--shiki-light:#6F42C1;--shiki-dark:#B392F0&quot;&gt;gh&lt;/span&gt;&lt;span style=&quot;--shiki-light:#032F62;--shiki-dark:#9ECBFF&quot;&gt; release&lt;/span&gt;&lt;span style=&quot;--shiki-light:#032F62;--shiki-dark:#9ECBFF&quot;&gt; download&lt;/span&gt;&lt;span style=&quot;--shiki-light:#032F62;--shiki-dark:#9ECBFF&quot;&gt; v0.2.0-beta.9&lt;/span&gt;&lt;span style=&quot;--shiki-light:#005CC5;--shiki-dark:#79B8FF&quot;&gt; --repo&lt;/span&gt;&lt;span style=&quot;--shiki-light:#032F62;--shiki-dark:#9ECBFF&quot;&gt; glincker/levelrail&lt;/span&gt;&lt;span style=&quot;--shiki-light:#005CC5;--shiki-dark:#79B8FF&quot;&gt; --pattern&lt;/span&gt;&lt;span style=&quot;--shiki-light:#032F62;--shiki-dark:#9ECBFF&quot;&gt; 'levelrail-linux-amd64'&lt;/span&gt;&lt;span style=&quot;--shiki-light:#005CC5;--shiki-dark:#79B8FF&quot;&gt; --pattern&lt;/span&gt;&lt;span style=&quot;--shiki-light:#032F62;--shiki-dark:#9ECBFF&quot;&gt; checksums.txt&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;--shiki-light:#6F42C1;--shiki-dark:#B392F0&quot;&gt;sha256sum&lt;/span&gt;&lt;span style=&quot;--shiki-light:#005CC5;--shiki-dark:#79B8FF&quot;&gt; --ignore-missing&lt;/span&gt;&lt;span style=&quot;--shiki-light:#005CC5;--shiki-dark:#79B8FF&quot;&gt; -c&lt;/span&gt;&lt;span style=&quot;--shiki-light:#032F62;--shiki-dark:#9ECBFF&quot;&gt; checksums.txt&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;&lt;p&gt;Images: verify the keyless signature was made by this repository's release workflow:&lt;/p&gt;
&lt;div class=&quot;language-sh vp-adaptive-theme&quot;&gt;&lt;button title=&quot;Copy Code&quot; class=&quot;copy&quot;&gt;&lt;/button&gt;&lt;span class=&quot;lang&quot;&gt;sh&lt;/span&gt;&lt;pre class=&quot;shiki shiki-themes github-light github-dark vp-code&quot; tabindex=&quot;0&quot; v-pre=&quot;&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;--shiki-light:#6F42C1;--shiki-dark:#B392F0&quot;&gt;cosign&lt;/span&gt;&lt;span style=&quot;--shiki-light:#032F62;--shiki-dark:#9ECBFF&quot;&gt; verify&lt;/span&gt;&lt;span style=&quot;--shiki-light:#032F62;--shiki-dark:#9ECBFF&quot;&gt; ghcr.io/glincker/levelrail@sha256:ee87c125124bfe2f80bbf43a79225d691c282543daff725ac77e3f50bc5a9fcb&lt;/span&gt;&lt;span style=&quot;--shiki-light:#005CC5;--shiki-dark:#79B8FF&quot;&gt; \&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;--shiki-light:#005CC5;--shiki-dark:#79B8FF&quot;&gt;  --certificate-identity-regexp&lt;/span&gt;&lt;span style=&quot;--shiki-light:#032F62;--shiki-dark:#9ECBFF&quot;&gt; '^https://github\.com/glincker/levelrail/\.github/workflows/release\.yml@refs/(heads/main|tags/v.+)$'&lt;/span&gt;&lt;span style=&quot;--shiki-light:#005CC5;--shiki-dark:#79B8FF&quot;&gt; \&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;--shiki-light:#005CC5;--shiki-dark:#79B8FF&quot;&gt;  --certificate-oidc-issuer&lt;/span&gt;&lt;span style=&quot;--shiki-light:#032F62;--shiki-dark:#9ECBFF&quot;&gt; https://token.actions.githubusercontent.com&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;&lt;h2 id=&quot;contributors&quot; tabindex=&quot;-1&quot;&gt;Contributors &lt;a class=&quot;header-anchor&quot; href=&quot;#contributors&quot; aria-label=&quot;Permalink to &amp;quot;Contributors&amp;quot;&quot;&gt;&amp;ZeroWidthSpace;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Thanks to &lt;a href=&quot;https://github.com/thegdsks&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;@thegdsks&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Full changelog:&lt;/strong&gt; &lt;a href=&quot;https://github.com/glincker/levelrail/compare/v0.2.0-beta.8...v0.2.0-beta.9&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;v0.2.0-beta.8...v0.2.0-beta.9&lt;/a&gt; | &lt;a href=&quot;https://levelrail.glinr.com/changelog/v0-2-0-beta-9&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;Release page&lt;/a&gt; | &lt;a href=&quot;https://levelrail.glinr.com/installing&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;Installing&lt;/a&gt; | &lt;a href=&quot;https://levelrail.glinr.com/installing#upgrading&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;Upgrading&lt;/a&gt; | &lt;a href=&quot;https://levelrail.glinr.com/installing#verifying-image-signatures&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;Verifying signatures&lt;/a&gt;&lt;/p&gt;
&lt;!-- release-notes:end --&gt;
&lt;/div&gt;
</content>
  </entry>
  <entry>
    <id>https://levelrail.glinr.com/changelog/v0-2-0-beta-8</id>
    <title>Levelrail v0.2.0-beta.8: Https, redirect, status-range and exec...</title>
    <link rel="alternate" type="text/html" href="https://levelrail.glinr.com/changelog/v0-2-0-beta-8"/>
    <published>2026-09-23T04:15:35Z</published>
    <updated>2026-09-23T04:15:35Z</updated>
    <summary>Levelrail v0.2.0-beta.8 release notes (2026-09-23). Https, redirect, status-range and exec health probes; active checks for 71 catalog templates; Rich...</summary>
    <content type="html">&lt;div v-pre&gt;
&lt;h2 id=&quot;_0-2-0-beta-8-2026-09-23&quot; tabindex=&quot;-1&quot;&gt;&lt;a href=&quot;https://github.com/glincker/levelrail/compare/v0.2.0-beta.7...v0.2.0-beta.8&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;0.2.0-beta.8&lt;/a&gt; (2026-09-23) &lt;a class=&quot;header-anchor&quot; href=&quot;#_0-2-0-beta-8-2026-09-23&quot; aria-label=&quot;Permalink to &amp;quot;[0.2.0-beta.8](https://github.com/glincker/levelrail/compare/v0.2.0-beta.7...v0.2.0-beta.8) (2026-09-23)&amp;quot;&quot;&gt;&amp;ZeroWidthSpace;&lt;/a&gt;&lt;/h2&gt;
&lt;h3 id=&quot;features&quot; tabindex=&quot;-1&quot;&gt;Features &lt;a class=&quot;header-anchor&quot; href=&quot;#features&quot; aria-label=&quot;Permalink to &amp;quot;Features&amp;quot;&quot;&gt;&amp;ZeroWidthSpace;&lt;/a&gt;&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;https, redirect, status-range and exec health probes; active checks for 71 catalog templates (&lt;a href=&quot;https://github.com/glincker/levelrail/issues/610&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;#610&lt;/a&gt;) (&lt;a href=&quot;https://github.com/glincker/levelrail/commit/790496b6a22d2adb859fbd0c6f57ca60c4eb804e&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;790496b&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;rich release notes, release announcements, and an SEO changelog on the docs site (&lt;a href=&quot;https://github.com/glincker/levelrail/issues/607&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;#607&lt;/a&gt;) (&lt;a href=&quot;https://github.com/glincker/levelrail/commit/a324be0362e345e91aefad92c7a7eaec7ca94c4b&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;a324be0&lt;/a&gt;)&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&quot;bug-fixes&quot; tabindex=&quot;-1&quot;&gt;Bug Fixes &lt;a class=&quot;header-anchor&quot; href=&quot;#bug-fixes&quot; aria-label=&quot;Permalink to &amp;quot;Bug Fixes&amp;quot;&quot;&gt;&amp;ZeroWidthSpace;&lt;/a&gt;&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;correct install/compose docs and fix doctor port_80 false fail (&lt;a href=&quot;https://github.com/glincker/levelrail/issues/591&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;#591&lt;/a&gt;) (&lt;a href=&quot;https://github.com/glincker/levelrail/commit/09c7d6dd74d9e4da9d3326d9f28be41c1788e5ef&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;09c7d6d&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;resolve high and critical CodeQL alerts (SSRF, email injection, zip slip, path injection, enrollment CA pin) (&lt;a href=&quot;https://github.com/glincker/levelrail/issues/609&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;#609&lt;/a&gt;) (&lt;a href=&quot;https://github.com/glincker/levelrail/commit/cd3487cbb42f6601b21933c990e61b17cb6dae26&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;cd3487c&lt;/a&gt;)&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
</content>
  </entry>
  <entry>
    <id>https://levelrail.glinr.com/changelog/v0-2-0-beta-7</id>
    <title>Levelrail v0.2.0-beta.7: Setup wizard with live server, domain...</title>
    <link rel="alternate" type="text/html" href="https://levelrail.glinr.com/changelog/v0-2-0-beta-7"/>
    <published>2026-09-23T02:26:12Z</published>
    <updated>2026-09-23T02:26:12Z</updated>
    <summary>Levelrail v0.2.0-beta.7 release notes (2026-09-23). Setup wizard with live server, domain, git, and first app verification.</summary>
    <content type="html">&lt;div v-pre&gt;
&lt;!-- release-notes:start --&gt;
&lt;div class=&quot;note custom-block github-alert&quot;&gt;&lt;p class=&quot;custom-block-title&quot;&gt;NOTE&lt;/p&gt;
&lt;p&gt;This is a pre-release on the &lt;code&gt;beta&lt;/code&gt; channel. Pin this exact version for anything you care about staying still.&lt;/p&gt;
&lt;/div&gt;
&lt;h2 id=&quot;what-s-changed&quot; tabindex=&quot;-1&quot;&gt;What's changed &lt;a class=&quot;header-anchor&quot; href=&quot;#what-s-changed&quot; aria-label=&quot;Permalink to &amp;quot;What's changed&amp;quot;&quot;&gt;&amp;ZeroWidthSpace;&lt;/a&gt;&lt;/h2&gt;
&lt;h3 id=&quot;features&quot; tabindex=&quot;-1&quot;&gt;Features &lt;a class=&quot;header-anchor&quot; href=&quot;#features&quot; aria-label=&quot;Permalink to &amp;quot;Features&amp;quot;&quot;&gt;&amp;ZeroWidthSpace;&lt;/a&gt;&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;setup wizard with live server, domain, git, and first app verification (&lt;a href=&quot;https://github.com/glincker/levelrail/pull/587&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;#587&lt;/a&gt;) by &lt;a href=&quot;https://github.com/thegdsks&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;@thegdsks&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&quot;security&quot; tabindex=&quot;-1&quot;&gt;Security &lt;a class=&quot;header-anchor&quot; href=&quot;#security&quot; aria-label=&quot;Permalink to &amp;quot;Security&amp;quot;&quot;&gt;&amp;ZeroWidthSpace;&lt;/a&gt;&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;bump dependencies for security advisories (&lt;a href=&quot;https://github.com/glincker/levelrail/pull/583&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;#583&lt;/a&gt;) by &lt;a href=&quot;https://github.com/thegdsks&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;@thegdsks&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;details&gt;
&lt;summary&gt;Maintenance, CI, and dependency updates (1)&lt;/summary&gt;
&lt;ul&gt;
&lt;li&gt;de-flake TestLive_ExecTTY and RamFitBadge, reapply orphaned webhook fixture (&lt;a href=&quot;https://github.com/glincker/levelrail/pull/586&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;#586&lt;/a&gt;) by &lt;a href=&quot;https://github.com/thegdsks&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;@thegdsks&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/details&gt;
&lt;h2 id=&quot;install&quot; tabindex=&quot;-1&quot;&gt;Install &lt;a class=&quot;header-anchor&quot; href=&quot;#install&quot; aria-label=&quot;Permalink to &amp;quot;Install&amp;quot;&quot;&gt;&amp;ZeroWidthSpace;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Fresh install on a Linux host, pinned to this release:&lt;/p&gt;
&lt;div class=&quot;language-sh vp-adaptive-theme&quot;&gt;&lt;button title=&quot;Copy Code&quot; class=&quot;copy&quot;&gt;&lt;/button&gt;&lt;span class=&quot;lang&quot;&gt;sh&lt;/span&gt;&lt;pre class=&quot;shiki shiki-themes github-light github-dark vp-code&quot; tabindex=&quot;0&quot; v-pre=&quot;&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;--shiki-light:#6F42C1;--shiki-dark:#B392F0&quot;&gt;curl&lt;/span&gt;&lt;span style=&quot;--shiki-light:#005CC5;--shiki-dark:#79B8FF&quot;&gt; -fsSL&lt;/span&gt;&lt;span style=&quot;--shiki-light:#032F62;--shiki-dark:#9ECBFF&quot;&gt; https://raw.githubusercontent.com/glincker/levelrail/main/install.sh&lt;/span&gt;&lt;span style=&quot;--shiki-light:#D73A49;--shiki-dark:#F97583&quot;&gt; |&lt;/span&gt;&lt;span style=&quot;--shiki-light:#6F42C1;--shiki-dark:#B392F0&quot;&gt; sudo&lt;/span&gt;&lt;span style=&quot;--shiki-light:#032F62;--shiki-dark:#9ECBFF&quot;&gt; env&lt;/span&gt;&lt;span style=&quot;--shiki-light:#032F62;--shiki-dark:#9ECBFF&quot;&gt; LEVELRAIL_VERSION=v0.2.0-beta.7&lt;/span&gt;&lt;span style=&quot;--shiki-light:#032F62;--shiki-dark:#9ECBFF&quot;&gt; sh&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;&lt;p&gt;Upgrade an existing install in place (keeps the unit file and data):&lt;/p&gt;
&lt;div class=&quot;language-sh vp-adaptive-theme&quot;&gt;&lt;button title=&quot;Copy Code&quot; class=&quot;copy&quot;&gt;&lt;/button&gt;&lt;span class=&quot;lang&quot;&gt;sh&lt;/span&gt;&lt;pre class=&quot;shiki shiki-themes github-light github-dark vp-code&quot; tabindex=&quot;0&quot; v-pre=&quot;&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;--shiki-light:#6F42C1;--shiki-dark:#B392F0&quot;&gt;curl&lt;/span&gt;&lt;span style=&quot;--shiki-light:#005CC5;--shiki-dark:#79B8FF&quot;&gt; -fsSL&lt;/span&gt;&lt;span style=&quot;--shiki-light:#032F62;--shiki-dark:#9ECBFF&quot;&gt; https://raw.githubusercontent.com/glincker/levelrail/main/install.sh&lt;/span&gt;&lt;span style=&quot;--shiki-light:#D73A49;--shiki-dark:#F97583&quot;&gt; |&lt;/span&gt;&lt;span style=&quot;--shiki-light:#6F42C1;--shiki-dark:#B392F0&quot;&gt; sudo&lt;/span&gt;&lt;span style=&quot;--shiki-light:#032F62;--shiki-dark:#9ECBFF&quot;&gt; env&lt;/span&gt;&lt;span style=&quot;--shiki-light:#032F62;--shiki-dark:#9ECBFF&quot;&gt; LEVELRAIL_VERSION=v0.2.0-beta.7&lt;/span&gt;&lt;span style=&quot;--shiki-light:#032F62;--shiki-dark:#9ECBFF&quot;&gt; sh&lt;/span&gt;&lt;span style=&quot;--shiki-light:#005CC5;--shiki-dark:#79B8FF&quot;&gt; -s&lt;/span&gt;&lt;span style=&quot;--shiki-light:#032F62;--shiki-dark:#9ECBFF&quot;&gt; upgrade&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;&lt;p&gt;Docker Compose: pin the image tag in &lt;code&gt;docker-compose.yml&lt;/code&gt;:&lt;/p&gt;
&lt;div class=&quot;language-yaml vp-adaptive-theme&quot;&gt;&lt;button title=&quot;Copy Code&quot; class=&quot;copy&quot;&gt;&lt;/button&gt;&lt;span class=&quot;lang&quot;&gt;yaml&lt;/span&gt;&lt;pre class=&quot;shiki shiki-themes github-light github-dark vp-code&quot; tabindex=&quot;0&quot; v-pre=&quot;&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;--shiki-light:#22863A;--shiki-dark:#85E89D&quot;&gt;services&lt;/span&gt;&lt;span style=&quot;--shiki-light:#24292E;--shiki-dark:#E1E4E8&quot;&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;--shiki-light:#22863A;--shiki-dark:#85E89D&quot;&gt;  levelrail&lt;/span&gt;&lt;span style=&quot;--shiki-light:#24292E;--shiki-dark:#E1E4E8&quot;&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;--shiki-light:#22863A;--shiki-dark:#85E89D&quot;&gt;    image&lt;/span&gt;&lt;span style=&quot;--shiki-light:#24292E;--shiki-dark:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;--shiki-light:#032F62;--shiki-dark:#9ECBFF&quot;&gt;ghcr.io/glincker/levelrail:v0.2.0-beta.7&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;&lt;h2 id=&quot;container-images&quot; tabindex=&quot;-1&quot;&gt;Container images &lt;a class=&quot;header-anchor&quot; href=&quot;#container-images&quot; aria-label=&quot;Permalink to &amp;quot;Container images&amp;quot;&quot;&gt;&amp;ZeroWidthSpace;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Multi-arch (&lt;code&gt;linux/amd64&lt;/code&gt;, &lt;code&gt;linux/arm64&lt;/code&gt;), signed with cosign, SBOM and provenance attached. Also tagged &lt;code&gt;beta&lt;/code&gt; at release time (moving tags).&lt;/p&gt;
&lt;table tabindex=&quot;0&quot;&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Image&lt;/th&gt;
&lt;th&gt;Tag&lt;/th&gt;
&lt;th&gt;Digest&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;ghcr.io/glincker/levelrail&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;v0.2.0-beta.7&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;sha256:047e6971b67ffde2a233eefcd5d2759000becfe522309b4567690be38cc31cb1&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;ghcr.io/glincker/levelrail-agent&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;v0.2.0-beta.7&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;sha256:493a0fa474cafefd7726191932affdad2c86d2816250043bd106efa459354935&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h2 id=&quot;verify&quot; tabindex=&quot;-1&quot;&gt;Verify &lt;a class=&quot;header-anchor&quot; href=&quot;#verify&quot; aria-label=&quot;Permalink to &amp;quot;Verify&amp;quot;&quot;&gt;&amp;ZeroWidthSpace;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Binaries: check downloads against &lt;code&gt;checksums.txt&lt;/code&gt;:&lt;/p&gt;
&lt;div class=&quot;language-sh vp-adaptive-theme&quot;&gt;&lt;button title=&quot;Copy Code&quot; class=&quot;copy&quot;&gt;&lt;/button&gt;&lt;span class=&quot;lang&quot;&gt;sh&lt;/span&gt;&lt;pre class=&quot;shiki shiki-themes github-light github-dark vp-code&quot; tabindex=&quot;0&quot; v-pre=&quot;&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;--shiki-light:#6F42C1;--shiki-dark:#B392F0&quot;&gt;gh&lt;/span&gt;&lt;span style=&quot;--shiki-light:#032F62;--shiki-dark:#9ECBFF&quot;&gt; release&lt;/span&gt;&lt;span style=&quot;--shiki-light:#032F62;--shiki-dark:#9ECBFF&quot;&gt; download&lt;/span&gt;&lt;span style=&quot;--shiki-light:#032F62;--shiki-dark:#9ECBFF&quot;&gt; v0.2.0-beta.7&lt;/span&gt;&lt;span style=&quot;--shiki-light:#005CC5;--shiki-dark:#79B8FF&quot;&gt; --repo&lt;/span&gt;&lt;span style=&quot;--shiki-light:#032F62;--shiki-dark:#9ECBFF&quot;&gt; glincker/levelrail&lt;/span&gt;&lt;span style=&quot;--shiki-light:#005CC5;--shiki-dark:#79B8FF&quot;&gt; --pattern&lt;/span&gt;&lt;span style=&quot;--shiki-light:#032F62;--shiki-dark:#9ECBFF&quot;&gt; 'levelrail-linux-amd64'&lt;/span&gt;&lt;span style=&quot;--shiki-light:#005CC5;--shiki-dark:#79B8FF&quot;&gt; --pattern&lt;/span&gt;&lt;span style=&quot;--shiki-light:#032F62;--shiki-dark:#9ECBFF&quot;&gt; checksums.txt&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;--shiki-light:#6F42C1;--shiki-dark:#B392F0&quot;&gt;sha256sum&lt;/span&gt;&lt;span style=&quot;--shiki-light:#005CC5;--shiki-dark:#79B8FF&quot;&gt; --ignore-missing&lt;/span&gt;&lt;span style=&quot;--shiki-light:#005CC5;--shiki-dark:#79B8FF&quot;&gt; -c&lt;/span&gt;&lt;span style=&quot;--shiki-light:#032F62;--shiki-dark:#9ECBFF&quot;&gt; checksums.txt&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;&lt;p&gt;Images: verify the keyless signature was made by this repository's release workflow:&lt;/p&gt;
&lt;div class=&quot;language-sh vp-adaptive-theme&quot;&gt;&lt;button title=&quot;Copy Code&quot; class=&quot;copy&quot;&gt;&lt;/button&gt;&lt;span class=&quot;lang&quot;&gt;sh&lt;/span&gt;&lt;pre class=&quot;shiki shiki-themes github-light github-dark vp-code&quot; tabindex=&quot;0&quot; v-pre=&quot;&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;--shiki-light:#6F42C1;--shiki-dark:#B392F0&quot;&gt;cosign&lt;/span&gt;&lt;span style=&quot;--shiki-light:#032F62;--shiki-dark:#9ECBFF&quot;&gt; verify&lt;/span&gt;&lt;span style=&quot;--shiki-light:#032F62;--shiki-dark:#9ECBFF&quot;&gt; ghcr.io/glincker/levelrail@sha256:047e6971b67ffde2a233eefcd5d2759000becfe522309b4567690be38cc31cb1&lt;/span&gt;&lt;span style=&quot;--shiki-light:#005CC5;--shiki-dark:#79B8FF&quot;&gt; \&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;--shiki-light:#005CC5;--shiki-dark:#79B8FF&quot;&gt;  --certificate-identity-regexp&lt;/span&gt;&lt;span style=&quot;--shiki-light:#032F62;--shiki-dark:#9ECBFF&quot;&gt; '^https://github\.com/glincker/levelrail/\.github/workflows/release\.yml@refs/(heads/main|tags/v.+)$'&lt;/span&gt;&lt;span style=&quot;--shiki-light:#005CC5;--shiki-dark:#79B8FF&quot;&gt; \&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;--shiki-light:#005CC5;--shiki-dark:#79B8FF&quot;&gt;  --certificate-oidc-issuer&lt;/span&gt;&lt;span style=&quot;--shiki-light:#032F62;--shiki-dark:#9ECBFF&quot;&gt; https://token.actions.githubusercontent.com&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;&lt;h2 id=&quot;contributors&quot; tabindex=&quot;-1&quot;&gt;Contributors &lt;a class=&quot;header-anchor&quot; href=&quot;#contributors&quot; aria-label=&quot;Permalink to &amp;quot;Contributors&amp;quot;&quot;&gt;&amp;ZeroWidthSpace;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Thanks to &lt;a href=&quot;https://github.com/thegdsks&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;@thegdsks&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Full changelog:&lt;/strong&gt; &lt;a href=&quot;https://github.com/glincker/levelrail/compare/v0.2.0-beta.6...v0.2.0-beta.7&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;v0.2.0-beta.6...v0.2.0-beta.7&lt;/a&gt; | &lt;a href=&quot;https://levelrail.glinr.com/changelog/v0-2-0-beta-7&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;Release page&lt;/a&gt; | &lt;a href=&quot;https://levelrail.glinr.com/installing&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;Installing&lt;/a&gt; | &lt;a href=&quot;https://levelrail.glinr.com/installing#upgrading&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;Upgrading&lt;/a&gt; | &lt;a href=&quot;https://levelrail.glinr.com/installing#verifying-image-signatures&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;Verifying signatures&lt;/a&gt;&lt;/p&gt;
&lt;!-- release-notes:end --&gt;
&lt;/div&gt;
</content>
  </entry>
  <entry>
    <id>https://levelrail.glinr.com/changelog/v0-2-0-beta-6</id>
    <title>Levelrail v0.2.0-beta.6: Per-app exec/shell access opt-out...</title>
    <link rel="alternate" type="text/html" href="https://levelrail.glinr.com/changelog/v0-2-0-beta-6"/>
    <published>2026-09-23T01:50:28Z</published>
    <updated>2026-09-23T01:50:28Z</updated>
    <summary>Levelrail v0.2.0-beta.6 release notes (2026-09-23). Per-app exec/shell access opt-out, defaults enabled; Per-app outbound network allowlist (egress...</summary>
    <content type="html">&lt;div v-pre&gt;
&lt;!-- release-notes:start --&gt;
&lt;div class=&quot;note custom-block github-alert&quot;&gt;&lt;p class=&quot;custom-block-title&quot;&gt;NOTE&lt;/p&gt;
&lt;p&gt;This is a pre-release on the &lt;code&gt;beta&lt;/code&gt; channel. Pin this exact version for anything you care about staying still.&lt;/p&gt;
&lt;/div&gt;
&lt;h2 id=&quot;highlights&quot; tabindex=&quot;-1&quot;&gt;Highlights &lt;a class=&quot;header-anchor&quot; href=&quot;#highlights&quot; aria-label=&quot;Permalink to &amp;quot;Highlights&amp;quot;&quot;&gt;&amp;ZeroWidthSpace;&lt;/a&gt;&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;per-app exec/shell access opt-out, defaults enabled (&lt;a href=&quot;https://github.com/glincker/levelrail/pull/542&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;#542&lt;/a&gt;) by &lt;a href=&quot;https://github.com/thegdsks&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;@thegdsks&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;per-app outbound network allowlist (egress gateway) (&lt;a href=&quot;https://github.com/glincker/levelrail/pull/543&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;#543&lt;/a&gt;) by &lt;a href=&quot;https://github.com/thegdsks&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;@thegdsks&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;egress allowlist UI on the app network page (&lt;a href=&quot;https://github.com/glincker/levelrail/pull/545&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;#545&lt;/a&gt;) by &lt;a href=&quot;https://github.com/thegdsks&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;@thegdsks&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;what-s-changed&quot; tabindex=&quot;-1&quot;&gt;What's changed &lt;a class=&quot;header-anchor&quot; href=&quot;#what-s-changed&quot; aria-label=&quot;Permalink to &amp;quot;What's changed&amp;quot;&quot;&gt;&amp;ZeroWidthSpace;&lt;/a&gt;&lt;/h2&gt;
&lt;h3 id=&quot;features&quot; tabindex=&quot;-1&quot;&gt;Features &lt;a class=&quot;header-anchor&quot; href=&quot;#features&quot; aria-label=&quot;Permalink to &amp;quot;Features&amp;quot;&quot;&gt;&amp;ZeroWidthSpace;&lt;/a&gt;&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;per-app exec/shell access opt-out, defaults enabled (&lt;a href=&quot;https://github.com/glincker/levelrail/pull/542&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;#542&lt;/a&gt;) by &lt;a href=&quot;https://github.com/thegdsks&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;@thegdsks&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;per-app outbound network allowlist (egress gateway) (&lt;a href=&quot;https://github.com/glincker/levelrail/pull/543&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;#543&lt;/a&gt;) by &lt;a href=&quot;https://github.com/thegdsks&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;@thegdsks&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;egress allowlist UI on the app network page (&lt;a href=&quot;https://github.com/glincker/levelrail/pull/545&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;#545&lt;/a&gt;) by &lt;a href=&quot;https://github.com/thegdsks&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;@thegdsks&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;actionable CTAs on System Status, reusable docs help links (&lt;a href=&quot;https://github.com/glincker/levelrail/pull/551&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;#551&lt;/a&gt;) by &lt;a href=&quot;https://github.com/thegdsks&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;@thegdsks&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Gitea as a fourth git provider (&lt;a href=&quot;https://github.com/glincker/levelrail/pull/553&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;#553&lt;/a&gt;) by &lt;a href=&quot;https://github.com/thegdsks&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;@thegdsks&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;configurable ingress HTTP/HTTPS listen ports (&lt;a href=&quot;https://github.com/glincker/levelrail/pull/556&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;#556&lt;/a&gt;) by &lt;a href=&quot;https://github.com/thegdsks&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;@thegdsks&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;WireGuard mesh key rotation and peer status visibility (&lt;a href=&quot;https://github.com/glincker/levelrail/pull/561&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;#561&lt;/a&gt;) by &lt;a href=&quot;https://github.com/thegdsks&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;@thegdsks&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;clone a whole environment's app set into a new environment (&lt;a href=&quot;https://github.com/glincker/levelrail/pull/562&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;#562&lt;/a&gt;) by &lt;a href=&quot;https://github.com/thegdsks&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;@thegdsks&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;distribute WireGuard mesh config to remote nodes over gRPC (&lt;a href=&quot;https://github.com/glincker/levelrail/pull/564&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;#564&lt;/a&gt;) by &lt;a href=&quot;https://github.com/thegdsks&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;@thegdsks&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;point-in-time restore for Postgres databases (&lt;a href=&quot;https://github.com/glincker/levelrail/pull/566&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;#566&lt;/a&gt;) by &lt;a href=&quot;https://github.com/thegdsks&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;@thegdsks&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;secret age tracking and rotation reminders (&lt;a href=&quot;https://github.com/glincker/levelrail/pull/563&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;#563&lt;/a&gt;) by &lt;a href=&quot;https://github.com/thegdsks&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;@thegdsks&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;two-person approval gate for deploys into protected environments (&lt;a href=&quot;https://github.com/glincker/levelrail/pull/567&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;#567&lt;/a&gt;) by &lt;a href=&quot;https://github.com/thegdsks&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;@thegdsks&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;detect and clean up orphaned named Docker volumes (&lt;a href=&quot;https://github.com/glincker/levelrail/pull/569&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;#569&lt;/a&gt;) by &lt;a href=&quot;https://github.com/thegdsks&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;@thegdsks&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;fleet-wide node CPU/memory/disk utilization view (&lt;a href=&quot;https://github.com/glincker/levelrail/pull/575&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;#575&lt;/a&gt;) by &lt;a href=&quot;https://github.com/thegdsks&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;@thegdsks&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;healthchecks and memory advisories for all 129 catalog templates (&lt;a href=&quot;https://github.com/glincker/levelrail/pull/576&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;#576&lt;/a&gt;) by &lt;a href=&quot;https://github.com/thegdsks&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;@thegdsks&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;add container restart count and build duration metrics (&lt;a href=&quot;https://github.com/glincker/levelrail/pull/560&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;#560&lt;/a&gt;) by &lt;a href=&quot;https://github.com/thegdsks&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;@thegdsks&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;empty states with prerequisite hints and template CTA (&lt;a href=&quot;https://github.com/glincker/levelrail/pull/579&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;#579&lt;/a&gt;) by &lt;a href=&quot;https://github.com/thegdsks&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;@thegdsks&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;doctor network, resource, and multi-firewall checks (&lt;a href=&quot;https://github.com/glincker/levelrail/pull/581&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;#581&lt;/a&gt;) by &lt;a href=&quot;https://github.com/thegdsks&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;@thegdsks&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;slow query log for Postgres/MySQL databases (&lt;a href=&quot;https://github.com/glincker/levelrail/pull/565&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;#565&lt;/a&gt;) by &lt;a href=&quot;https://github.com/thegdsks&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;@thegdsks&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;install works end to end (setup token, HTTP login, installer preflight) (&lt;a href=&quot;https://github.com/glincker/levelrail/pull/582&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;#582&lt;/a&gt;) by &lt;a href=&quot;https://github.com/thegdsks&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;@thegdsks&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&quot;bug-fixes&quot; tabindex=&quot;-1&quot;&gt;Bug fixes &lt;a class=&quot;header-anchor&quot; href=&quot;#bug-fixes&quot; aria-label=&quot;Permalink to &amp;quot;Bug fixes&amp;quot;&quot;&gt;&amp;ZeroWidthSpace;&lt;/a&gt;&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;confirm detach actions and surface missing success toasts (&lt;a href=&quot;https://github.com/glincker/levelrail/pull/546&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;#546&lt;/a&gt;) by &lt;a href=&quot;https://github.com/thegdsks&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;@thegdsks&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;stop doctor's port 80/443 check from false-failing on its own ingress (&lt;a href=&quot;https://github.com/glincker/levelrail/pull/547&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;#547&lt;/a&gt;) by &lt;a href=&quot;https://github.com/thegdsks&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;@thegdsks&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;live resource updates fail silently when only memory is set, no swap (&lt;a href=&quot;https://github.com/glincker/levelrail/pull/548&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;#548&lt;/a&gt;) by &lt;a href=&quot;https://github.com/thegdsks&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;@thegdsks&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;type errors blocking the real production build (npm run build) (&lt;a href=&quot;https://github.com/glincker/levelrail/pull/549&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;#549&lt;/a&gt;) by &lt;a href=&quot;https://github.com/thegdsks&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;@thegdsks&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;app status rollup, compose service pruning, and group lookup by app name (&lt;a href=&quot;https://github.com/glincker/levelrail/pull/552&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;#552&lt;/a&gt;) by &lt;a href=&quot;https://github.com/thegdsks&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;@thegdsks&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;stop treating unlabeled Docker networks as this instance's own (&lt;a href=&quot;https://github.com/glincker/levelrail/pull/557&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;#557&lt;/a&gt;) by &lt;a href=&quot;https://github.com/thegdsks&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;@thegdsks&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;detect frozen agent processes via heartbeat frames and gRPC keepalive (&lt;a href=&quot;https://github.com/glincker/levelrail/pull/558&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;#558&lt;/a&gt;) by &lt;a href=&quot;https://github.com/thegdsks&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;@thegdsks&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;retry transient SMTP failures for email notification channel (&lt;a href=&quot;https://github.com/glincker/levelrail/pull/559&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;#559&lt;/a&gt;) by &lt;a href=&quot;https://github.com/thegdsks&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;@thegdsks&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;rate limit the unauthenticated git webhook receiver (&lt;a href=&quot;https://github.com/glincker/levelrail/pull/574&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;#574&lt;/a&gt;) by &lt;a href=&quot;https://github.com/thegdsks&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;@thegdsks&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;wire Bitbucket App secrets manager, OAuth connect was permanently broken (&lt;a href=&quot;https://github.com/glincker/levelrail/pull/555&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;#555&lt;/a&gt;) by &lt;a href=&quot;https://github.com/thegdsks&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;@thegdsks&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;doctor's disk space check shows raw byte counts, not human-readable (&lt;a href=&quot;https://github.com/glincker/levelrail/pull/550&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;#550&lt;/a&gt;) by &lt;a href=&quot;https://github.com/thegdsks&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;@thegdsks&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&quot;documentation&quot; tabindex=&quot;-1&quot;&gt;Documentation &lt;a class=&quot;header-anchor&quot; href=&quot;#documentation&quot; aria-label=&quot;Permalink to &amp;quot;Documentation&amp;quot;&quot;&gt;&amp;ZeroWidthSpace;&lt;/a&gt;&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;document secret age tracking and rotation reminders (PR #563) (&lt;a href=&quot;https://github.com/glincker/levelrail/pull/573&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;#573&lt;/a&gt;) by &lt;a href=&quot;https://github.com/thegdsks&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;@thegdsks&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;update roadmap and status for recently shipped features (&lt;a href=&quot;https://github.com/glincker/levelrail/pull/572&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;#572&lt;/a&gt;) by &lt;a href=&quot;https://github.com/thegdsks&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;@thegdsks&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;add slow query log viewer documentation (&lt;a href=&quot;https://github.com/glincker/levelrail/pull/571&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;#571&lt;/a&gt;) by &lt;a href=&quot;https://github.com/thegdsks&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;@thegdsks&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;two-person deploy approval gate and environment cloning workflows (&lt;a href=&quot;https://github.com/glincker/levelrail/pull/570&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;#570&lt;/a&gt;) by &lt;a href=&quot;https://github.com/thegdsks&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;@thegdsks&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;add node heartbeat configuration and mesh status/key-rotation documentation (&lt;a href=&quot;https://github.com/glincker/levelrail/pull/568&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;#568&lt;/a&gt;) by &lt;a href=&quot;https://github.com/thegdsks&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;@thegdsks&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;add GLINR Discord community links (&lt;a href=&quot;https://github.com/glincker/levelrail/pull/584&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;#584&lt;/a&gt;) by &lt;a href=&quot;https://github.com/thegdsks&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;@thegdsks&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;details&gt;
&lt;summary&gt;Maintenance, CI, and dependency updates (6)&lt;/summary&gt;
&lt;ul&gt;
&lt;li&gt;cut a duplicate check job and de-flake the frontend suite (&lt;a href=&quot;https://github.com/glincker/levelrail/pull/554&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;#554&lt;/a&gt;) by &lt;a href=&quot;https://github.com/thegdsks&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;@thegdsks&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;bump docker/setup-buildx-action from 4.3.0 to 4.4.0 (&lt;a href=&quot;https://github.com/glincker/levelrail/pull/477&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;#477&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;bump golang.org/x/crypto from 0.56.0 to 0.57.0 (&lt;a href=&quot;https://github.com/glincker/levelrail/pull/481&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;#481&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;bump &lt;a href=&quot;https://github.com/xterm&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;@xterm&lt;/a&gt;/xterm from 5.5.0 to 6.0.0 in /web (&lt;a href=&quot;https://github.com/glincker/levelrail/pull/478&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;#478&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;run CI on docs-only PRs so required checks report (&lt;a href=&quot;https://github.com/glincker/levelrail/pull/580&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;#580&lt;/a&gt;) by &lt;a href=&quot;https://github.com/thegdsks&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;@thegdsks&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Image tag channels, cosign signing, and a committed compose file (&lt;a href=&quot;https://github.com/glincker/levelrail/pull/578&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;#578&lt;/a&gt;) by &lt;a href=&quot;https://github.com/thegdsks&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;@thegdsks&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/details&gt;
&lt;h2 id=&quot;install&quot; tabindex=&quot;-1&quot;&gt;Install &lt;a class=&quot;header-anchor&quot; href=&quot;#install&quot; aria-label=&quot;Permalink to &amp;quot;Install&amp;quot;&quot;&gt;&amp;ZeroWidthSpace;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Fresh install on a Linux host, pinned to this release:&lt;/p&gt;
&lt;div class=&quot;language-sh vp-adaptive-theme&quot;&gt;&lt;button title=&quot;Copy Code&quot; class=&quot;copy&quot;&gt;&lt;/button&gt;&lt;span class=&quot;lang&quot;&gt;sh&lt;/span&gt;&lt;pre class=&quot;shiki shiki-themes github-light github-dark vp-code&quot; tabindex=&quot;0&quot; v-pre=&quot;&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;--shiki-light:#6F42C1;--shiki-dark:#B392F0&quot;&gt;curl&lt;/span&gt;&lt;span style=&quot;--shiki-light:#005CC5;--shiki-dark:#79B8FF&quot;&gt; -fsSL&lt;/span&gt;&lt;span style=&quot;--shiki-light:#032F62;--shiki-dark:#9ECBFF&quot;&gt; https://raw.githubusercontent.com/glincker/levelrail/main/install.sh&lt;/span&gt;&lt;span style=&quot;--shiki-light:#D73A49;--shiki-dark:#F97583&quot;&gt; |&lt;/span&gt;&lt;span style=&quot;--shiki-light:#6F42C1;--shiki-dark:#B392F0&quot;&gt; sudo&lt;/span&gt;&lt;span style=&quot;--shiki-light:#032F62;--shiki-dark:#9ECBFF&quot;&gt; env&lt;/span&gt;&lt;span style=&quot;--shiki-light:#032F62;--shiki-dark:#9ECBFF&quot;&gt; LEVELRAIL_VERSION=v0.2.0-beta.6&lt;/span&gt;&lt;span style=&quot;--shiki-light:#032F62;--shiki-dark:#9ECBFF&quot;&gt; sh&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;&lt;p&gt;Upgrade an existing install in place (keeps the unit file and data):&lt;/p&gt;
&lt;div class=&quot;language-sh vp-adaptive-theme&quot;&gt;&lt;button title=&quot;Copy Code&quot; class=&quot;copy&quot;&gt;&lt;/button&gt;&lt;span class=&quot;lang&quot;&gt;sh&lt;/span&gt;&lt;pre class=&quot;shiki shiki-themes github-light github-dark vp-code&quot; tabindex=&quot;0&quot; v-pre=&quot;&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;--shiki-light:#6F42C1;--shiki-dark:#B392F0&quot;&gt;curl&lt;/span&gt;&lt;span style=&quot;--shiki-light:#005CC5;--shiki-dark:#79B8FF&quot;&gt; -fsSL&lt;/span&gt;&lt;span style=&quot;--shiki-light:#032F62;--shiki-dark:#9ECBFF&quot;&gt; https://raw.githubusercontent.com/glincker/levelrail/main/install.sh&lt;/span&gt;&lt;span style=&quot;--shiki-light:#D73A49;--shiki-dark:#F97583&quot;&gt; |&lt;/span&gt;&lt;span style=&quot;--shiki-light:#6F42C1;--shiki-dark:#B392F0&quot;&gt; sudo&lt;/span&gt;&lt;span style=&quot;--shiki-light:#032F62;--shiki-dark:#9ECBFF&quot;&gt; env&lt;/span&gt;&lt;span style=&quot;--shiki-light:#032F62;--shiki-dark:#9ECBFF&quot;&gt; LEVELRAIL_VERSION=v0.2.0-beta.6&lt;/span&gt;&lt;span style=&quot;--shiki-light:#032F62;--shiki-dark:#9ECBFF&quot;&gt; sh&lt;/span&gt;&lt;span style=&quot;--shiki-light:#005CC5;--shiki-dark:#79B8FF&quot;&gt; -s&lt;/span&gt;&lt;span style=&quot;--shiki-light:#032F62;--shiki-dark:#9ECBFF&quot;&gt; upgrade&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;&lt;p&gt;Docker Compose: pin the image tag in &lt;code&gt;docker-compose.yml&lt;/code&gt;:&lt;/p&gt;
&lt;div class=&quot;language-yaml vp-adaptive-theme&quot;&gt;&lt;button title=&quot;Copy Code&quot; class=&quot;copy&quot;&gt;&lt;/button&gt;&lt;span class=&quot;lang&quot;&gt;yaml&lt;/span&gt;&lt;pre class=&quot;shiki shiki-themes github-light github-dark vp-code&quot; tabindex=&quot;0&quot; v-pre=&quot;&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;--shiki-light:#22863A;--shiki-dark:#85E89D&quot;&gt;services&lt;/span&gt;&lt;span style=&quot;--shiki-light:#24292E;--shiki-dark:#E1E4E8&quot;&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;--shiki-light:#22863A;--shiki-dark:#85E89D&quot;&gt;  levelrail&lt;/span&gt;&lt;span style=&quot;--shiki-light:#24292E;--shiki-dark:#E1E4E8&quot;&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;--shiki-light:#22863A;--shiki-dark:#85E89D&quot;&gt;    image&lt;/span&gt;&lt;span style=&quot;--shiki-light:#24292E;--shiki-dark:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;--shiki-light:#032F62;--shiki-dark:#9ECBFF&quot;&gt;ghcr.io/glincker/levelrail:v0.2.0-beta.6&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;&lt;h2 id=&quot;container-images&quot; tabindex=&quot;-1&quot;&gt;Container images &lt;a class=&quot;header-anchor&quot; href=&quot;#container-images&quot; aria-label=&quot;Permalink to &amp;quot;Container images&amp;quot;&quot;&gt;&amp;ZeroWidthSpace;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Multi-arch (&lt;code&gt;linux/amd64&lt;/code&gt;, &lt;code&gt;linux/arm64&lt;/code&gt;), signed with cosign, SBOM and provenance attached. Also tagged &lt;code&gt;beta&lt;/code&gt; at release time (moving tags).&lt;/p&gt;
&lt;table tabindex=&quot;0&quot;&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Image&lt;/th&gt;
&lt;th&gt;Tag&lt;/th&gt;
&lt;th&gt;Digest&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;ghcr.io/glincker/levelrail&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;v0.2.0-beta.6&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;sha256:3db4d59e87b8cd6a0fdf37c1c6c29b13d2fe16842d455a93eaad9fbb08754b27&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;ghcr.io/glincker/levelrail-agent&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;v0.2.0-beta.6&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;sha256:cf217a7ec07c2d9fefe844d77529acba66185175681b677ac90373fd444ba119&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h2 id=&quot;verify&quot; tabindex=&quot;-1&quot;&gt;Verify &lt;a class=&quot;header-anchor&quot; href=&quot;#verify&quot; aria-label=&quot;Permalink to &amp;quot;Verify&amp;quot;&quot;&gt;&amp;ZeroWidthSpace;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Binaries: check downloads against &lt;code&gt;checksums.txt&lt;/code&gt;:&lt;/p&gt;
&lt;div class=&quot;language-sh vp-adaptive-theme&quot;&gt;&lt;button title=&quot;Copy Code&quot; class=&quot;copy&quot;&gt;&lt;/button&gt;&lt;span class=&quot;lang&quot;&gt;sh&lt;/span&gt;&lt;pre class=&quot;shiki shiki-themes github-light github-dark vp-code&quot; tabindex=&quot;0&quot; v-pre=&quot;&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;--shiki-light:#6F42C1;--shiki-dark:#B392F0&quot;&gt;gh&lt;/span&gt;&lt;span style=&quot;--shiki-light:#032F62;--shiki-dark:#9ECBFF&quot;&gt; release&lt;/span&gt;&lt;span style=&quot;--shiki-light:#032F62;--shiki-dark:#9ECBFF&quot;&gt; download&lt;/span&gt;&lt;span style=&quot;--shiki-light:#032F62;--shiki-dark:#9ECBFF&quot;&gt; v0.2.0-beta.6&lt;/span&gt;&lt;span style=&quot;--shiki-light:#005CC5;--shiki-dark:#79B8FF&quot;&gt; --repo&lt;/span&gt;&lt;span style=&quot;--shiki-light:#032F62;--shiki-dark:#9ECBFF&quot;&gt; glincker/levelrail&lt;/span&gt;&lt;span style=&quot;--shiki-light:#005CC5;--shiki-dark:#79B8FF&quot;&gt; --pattern&lt;/span&gt;&lt;span style=&quot;--shiki-light:#032F62;--shiki-dark:#9ECBFF&quot;&gt; 'levelrail-linux-amd64'&lt;/span&gt;&lt;span style=&quot;--shiki-light:#005CC5;--shiki-dark:#79B8FF&quot;&gt; --pattern&lt;/span&gt;&lt;span style=&quot;--shiki-light:#032F62;--shiki-dark:#9ECBFF&quot;&gt; checksums.txt&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;--shiki-light:#6F42C1;--shiki-dark:#B392F0&quot;&gt;sha256sum&lt;/span&gt;&lt;span style=&quot;--shiki-light:#005CC5;--shiki-dark:#79B8FF&quot;&gt; --ignore-missing&lt;/span&gt;&lt;span style=&quot;--shiki-light:#005CC5;--shiki-dark:#79B8FF&quot;&gt; -c&lt;/span&gt;&lt;span style=&quot;--shiki-light:#032F62;--shiki-dark:#9ECBFF&quot;&gt; checksums.txt&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;&lt;p&gt;Images: verify the keyless signature was made by this repository's release workflow:&lt;/p&gt;
&lt;div class=&quot;language-sh vp-adaptive-theme&quot;&gt;&lt;button title=&quot;Copy Code&quot; class=&quot;copy&quot;&gt;&lt;/button&gt;&lt;span class=&quot;lang&quot;&gt;sh&lt;/span&gt;&lt;pre class=&quot;shiki shiki-themes github-light github-dark vp-code&quot; tabindex=&quot;0&quot; v-pre=&quot;&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;--shiki-light:#6F42C1;--shiki-dark:#B392F0&quot;&gt;cosign&lt;/span&gt;&lt;span style=&quot;--shiki-light:#032F62;--shiki-dark:#9ECBFF&quot;&gt; verify&lt;/span&gt;&lt;span style=&quot;--shiki-light:#032F62;--shiki-dark:#9ECBFF&quot;&gt; ghcr.io/glincker/levelrail@sha256:3db4d59e87b8cd6a0fdf37c1c6c29b13d2fe16842d455a93eaad9fbb08754b27&lt;/span&gt;&lt;span style=&quot;--shiki-light:#005CC5;--shiki-dark:#79B8FF&quot;&gt; \&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;--shiki-light:#005CC5;--shiki-dark:#79B8FF&quot;&gt;  --certificate-identity-regexp&lt;/span&gt;&lt;span style=&quot;--shiki-light:#032F62;--shiki-dark:#9ECBFF&quot;&gt; '^https://github\.com/glincker/levelrail/\.github/workflows/release\.yml@refs/(heads/main|tags/v.+)$'&lt;/span&gt;&lt;span style=&quot;--shiki-light:#005CC5;--shiki-dark:#79B8FF&quot;&gt; \&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;--shiki-light:#005CC5;--shiki-dark:#79B8FF&quot;&gt;  --certificate-oidc-issuer&lt;/span&gt;&lt;span style=&quot;--shiki-light:#032F62;--shiki-dark:#9ECBFF&quot;&gt; https://token.actions.githubusercontent.com&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;&lt;h2 id=&quot;contributors&quot; tabindex=&quot;-1&quot;&gt;Contributors &lt;a class=&quot;header-anchor&quot; href=&quot;#contributors&quot; aria-label=&quot;Permalink to &amp;quot;Contributors&amp;quot;&quot;&gt;&amp;ZeroWidthSpace;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Thanks to &lt;a href=&quot;https://github.com/thegdsks&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;@thegdsks&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Full changelog:&lt;/strong&gt; &lt;a href=&quot;https://github.com/glincker/levelrail/compare/v0.2.0-beta.5...v0.2.0-beta.6&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;v0.2.0-beta.5...v0.2.0-beta.6&lt;/a&gt; | &lt;a href=&quot;https://levelrail.glinr.com/changelog/v0-2-0-beta-6&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;Release page&lt;/a&gt; | &lt;a href=&quot;https://levelrail.glinr.com/installing&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;Installing&lt;/a&gt; | &lt;a href=&quot;https://levelrail.glinr.com/installing#upgrading&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;Upgrading&lt;/a&gt; | &lt;a href=&quot;https://levelrail.glinr.com/installing#verifying-image-signatures&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;Verifying signatures&lt;/a&gt;&lt;/p&gt;
&lt;!-- release-notes:end --&gt;
&lt;/div&gt;
</content>
  </entry>
  <entry>
    <id>https://levelrail.glinr.com/changelog/v0-2-0-beta-5</id>
    <title>Levelrail v0.2.0-beta.5: CLI coverage for backup download...</title>
    <link rel="alternate" type="text/html" href="https://levelrail.glinr.com/changelog/v0-2-0-beta-5"/>
    <published>2026-09-21T19:16:56Z</published>
    <updated>2026-09-21T19:16:56Z</updated>
    <summary>Levelrail v0.2.0-beta.5 release notes (2026-09-21). CLI coverage for backup download, database logs, node placement; CLI coverage for database attachment...</summary>
    <content type="html">&lt;div v-pre&gt;
&lt;!-- release-notes:start --&gt;
&lt;div class=&quot;caution custom-block github-alert&quot;&gt;&lt;p class=&quot;custom-block-title&quot;&gt;CAUTION&lt;/p&gt;
&lt;p&gt;This release shipped no binaries or container images (its build did not publish). Use &lt;a href=&quot;https://github.com/glincker/levelrail/releases/tag/v0.2.0-beta.6&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;v0.2.0-beta.6&lt;/a&gt; instead, which includes every change below.&lt;/p&gt;
&lt;/div&gt;
&lt;h2 id=&quot;what-s-changed&quot; tabindex=&quot;-1&quot;&gt;What's changed &lt;a class=&quot;header-anchor&quot; href=&quot;#what-s-changed&quot; aria-label=&quot;Permalink to &amp;quot;What's changed&amp;quot;&quot;&gt;&amp;ZeroWidthSpace;&lt;/a&gt;&lt;/h2&gt;
&lt;h3 id=&quot;features&quot; tabindex=&quot;-1&quot;&gt;Features &lt;a class=&quot;header-anchor&quot; href=&quot;#features&quot; aria-label=&quot;Permalink to &amp;quot;Features&amp;quot;&quot;&gt;&amp;ZeroWidthSpace;&lt;/a&gt;&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;CLI coverage for backup download, database logs, node placement (&lt;a href=&quot;https://github.com/glincker/levelrail/pull/529&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;#529&lt;/a&gt;) by &lt;a href=&quot;https://github.com/thegdsks&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;@thegdsks&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;CLI coverage for database attachment, manual build trigger, moves, resources, AI settings, git providers (&lt;a href=&quot;https://github.com/glincker/levelrail/pull/536&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;#536&lt;/a&gt;) by &lt;a href=&quot;https://github.com/thegdsks&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;@thegdsks&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;per-service readyTimeout override for the reconciler's readiness budget (&lt;a href=&quot;https://github.com/glincker/levelrail/pull/539&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;#539&lt;/a&gt;) by &lt;a href=&quot;https://github.com/thegdsks&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;@thegdsks&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&quot;bug-fixes&quot; tabindex=&quot;-1&quot;&gt;Bug fixes &lt;a class=&quot;header-anchor&quot; href=&quot;#bug-fixes&quot; aria-label=&quot;Permalink to &amp;quot;Bug fixes&amp;quot;&quot;&gt;&amp;ZeroWidthSpace;&lt;/a&gt;&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;never treat a master key read failure as no key yet (&lt;a href=&quot;https://github.com/glincker/levelrail/pull/522&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;#522&lt;/a&gt;) by &lt;a href=&quot;https://github.com/thegdsks&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;@thegdsks&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;resolve migration number collision at 0106 (&lt;a href=&quot;https://github.com/glincker/levelrail/pull/524&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;#524&lt;/a&gt;) by &lt;a href=&quot;https://github.com/thegdsks&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;@thegdsks&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;manual builds tag by resolved commit, pending image never hits Docker (&lt;a href=&quot;https://github.com/glincker/levelrail/pull/530&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;#530&lt;/a&gt;) by &lt;a href=&quot;https://github.com/thegdsks&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;@thegdsks&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;accessibility gaps in form labeling and muted-text contrast (&lt;a href=&quot;https://github.com/glincker/levelrail/pull/528&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;#528&lt;/a&gt;) by &lt;a href=&quot;https://github.com/thegdsks&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;@thegdsks&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;respect prefers-reduced-motion and avoid layout-triggering progress transition (&lt;a href=&quot;https://github.com/glincker/levelrail/pull/531&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;#531&lt;/a&gt;) by &lt;a href=&quot;https://github.com/thegdsks&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;@thegdsks&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;extend IAM resource scoping to 79 mutating app and database routes (&lt;a href=&quot;https://github.com/glincker/levelrail/pull/532&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;#532&lt;/a&gt;) by &lt;a href=&quot;https://github.com/thegdsks&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;@thegdsks&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;make tag CLI commands consistently take a name, not a mix of name and ID (&lt;a href=&quot;https://github.com/glincker/levelrail/pull/533&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;#533&lt;/a&gt;) by &lt;a href=&quot;https://github.com/thegdsks&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;@thegdsks&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;nudge reconciler after a build-triggered deploy completes (&lt;a href=&quot;https://github.com/glincker/levelrail/pull/534&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;#534&lt;/a&gt;) by &lt;a href=&quot;https://github.com/thegdsks&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;@thegdsks&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;classify a pre-port-bind crash as a crash reason, not generic ReadinessFailed (&lt;a href=&quot;https://github.com/glincker/levelrail/pull/535&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;#535&lt;/a&gt;) by &lt;a href=&quot;https://github.com/thegdsks&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;@thegdsks&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;scope container and network cleanup to this control plane's own instance (&lt;a href=&quot;https://github.com/glincker/levelrail/pull/537&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;#537&lt;/a&gt;) by &lt;a href=&quot;https://github.com/thegdsks&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;@thegdsks&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;rearm crashloop auto-rollback for a second, different bad deploy (&lt;a href=&quot;https://github.com/glincker/levelrail/pull/540&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;#540&lt;/a&gt;) by &lt;a href=&quot;https://github.com/thegdsks&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;@thegdsks&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;enforce required secrets on the build-triggered deploy path, not just webhook (&lt;a href=&quot;https://github.com/glincker/levelrail/pull/541&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;#541&lt;/a&gt;) by &lt;a href=&quot;https://github.com/thegdsks&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;@thegdsks&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&quot;documentation&quot; tabindex=&quot;-1&quot;&gt;Documentation &lt;a class=&quot;header-anchor&quot; href=&quot;#documentation&quot; aria-label=&quot;Permalink to &amp;quot;Documentation&amp;quot;&quot;&gt;&amp;ZeroWidthSpace;&lt;/a&gt;&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;document tags, shared env var secrets, and the fleet resource chart (&lt;a href=&quot;https://github.com/glincker/levelrail/pull/527&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;#527&lt;/a&gt;) by &lt;a href=&quot;https://github.com/thegdsks&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;@thegdsks&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;tag CLI names, IAM scoping, new CLI commands (&lt;a href=&quot;https://github.com/glincker/levelrail/pull/538&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;#538&lt;/a&gt;) by &lt;a href=&quot;https://github.com/thegdsks&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;@thegdsks&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;details&gt;
&lt;summary&gt;Maintenance, CI, and dependency updates (5)&lt;/summary&gt;
&lt;ul&gt;
&lt;li&gt;Deploy pipeline polish: readiness fix, release triggers, auto-rollback, env upload (&lt;a href=&quot;https://github.com/glincker/levelrail/pull/519&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;#519&lt;/a&gt;) by &lt;a href=&quot;https://github.com/thegdsks&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;@thegdsks&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;BYOK AI assistant: MCP network transport, chat engine, and UI (&lt;a href=&quot;https://github.com/glincker/levelrail/pull/521&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;#521&lt;/a&gt;) by &lt;a href=&quot;https://github.com/thegdsks&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;@thegdsks&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;bump internal/api test timeout from 10m to 13m (&lt;a href=&quot;https://github.com/glincker/levelrail/pull/525&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;#525&lt;/a&gt;) by &lt;a href=&quot;https://github.com/thegdsks&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;@thegdsks&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Multi-node OOM fix, disk-space preflight, default error boundary, UI consistency (&lt;a href=&quot;https://github.com/glincker/levelrail/pull/526&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;#526&lt;/a&gt;) by &lt;a href=&quot;https://github.com/thegdsks&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;@thegdsks&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Dashboard resource chart, tags, and shared env var secrets/CLI/UI (&lt;a href=&quot;https://github.com/glincker/levelrail/pull/520&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;#520&lt;/a&gt;) by &lt;a href=&quot;https://github.com/thegdsks&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;@thegdsks&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/details&gt;
&lt;h2 id=&quot;container-images&quot; tabindex=&quot;-1&quot;&gt;Container images &lt;a class=&quot;header-anchor&quot; href=&quot;#container-images&quot; aria-label=&quot;Permalink to &amp;quot;Container images&amp;quot;&quot;&gt;&amp;ZeroWidthSpace;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Multi-arch (&lt;code&gt;linux/amd64&lt;/code&gt;, &lt;code&gt;linux/arm64&lt;/code&gt;), signed with cosign, SBOM and provenance attached. Also tagged &lt;code&gt;beta&lt;/code&gt; at release time (moving tags).&lt;/p&gt;
&lt;table tabindex=&quot;0&quot;&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Image&lt;/th&gt;
&lt;th&gt;Tag&lt;/th&gt;
&lt;th&gt;Digest&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;ghcr.io/glincker/levelrail-agent&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;v0.2.0-beta.5&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;sha256:daea6a4d899ee5b72bf79667dc777578558f971ac06f6d2a0569d8c4e71a2b82&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h2 id=&quot;verify&quot; tabindex=&quot;-1&quot;&gt;Verify &lt;a class=&quot;header-anchor&quot; href=&quot;#verify&quot; aria-label=&quot;Permalink to &amp;quot;Verify&amp;quot;&quot;&gt;&amp;ZeroWidthSpace;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Images: verify the keyless signature was made by this repository's release workflow:&lt;/p&gt;
&lt;div class=&quot;language-sh vp-adaptive-theme&quot;&gt;&lt;button title=&quot;Copy Code&quot; class=&quot;copy&quot;&gt;&lt;/button&gt;&lt;span class=&quot;lang&quot;&gt;sh&lt;/span&gt;&lt;pre class=&quot;shiki shiki-themes github-light github-dark vp-code&quot; tabindex=&quot;0&quot; v-pre=&quot;&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;--shiki-light:#6F42C1;--shiki-dark:#B392F0&quot;&gt;cosign&lt;/span&gt;&lt;span style=&quot;--shiki-light:#032F62;--shiki-dark:#9ECBFF&quot;&gt; verify&lt;/span&gt;&lt;span style=&quot;--shiki-light:#032F62;--shiki-dark:#9ECBFF&quot;&gt; ghcr.io/glincker/levelrail-agent@sha256:daea6a4d899ee5b72bf79667dc777578558f971ac06f6d2a0569d8c4e71a2b82&lt;/span&gt;&lt;span style=&quot;--shiki-light:#005CC5;--shiki-dark:#79B8FF&quot;&gt; \&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;--shiki-light:#005CC5;--shiki-dark:#79B8FF&quot;&gt;  --certificate-identity-regexp&lt;/span&gt;&lt;span style=&quot;--shiki-light:#032F62;--shiki-dark:#9ECBFF&quot;&gt; '^https://github\.com/glincker/levelrail/\.github/workflows/release\.yml@refs/(heads/main|tags/v.+)$'&lt;/span&gt;&lt;span style=&quot;--shiki-light:#005CC5;--shiki-dark:#79B8FF&quot;&gt; \&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;--shiki-light:#005CC5;--shiki-dark:#79B8FF&quot;&gt;  --certificate-oidc-issuer&lt;/span&gt;&lt;span style=&quot;--shiki-light:#032F62;--shiki-dark:#9ECBFF&quot;&gt; https://token.actions.githubusercontent.com&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;&lt;h2 id=&quot;contributors&quot; tabindex=&quot;-1&quot;&gt;Contributors &lt;a class=&quot;header-anchor&quot; href=&quot;#contributors&quot; aria-label=&quot;Permalink to &amp;quot;Contributors&amp;quot;&quot;&gt;&amp;ZeroWidthSpace;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Thanks to &lt;a href=&quot;https://github.com/thegdsks&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;@thegdsks&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Full changelog:&lt;/strong&gt; &lt;a href=&quot;https://github.com/glincker/levelrail/compare/v0.2.0-beta.4...v0.2.0-beta.5&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;v0.2.0-beta.4...v0.2.0-beta.5&lt;/a&gt; | &lt;a href=&quot;https://levelrail.glinr.com/changelog/v0-2-0-beta-5&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;Release page&lt;/a&gt; | &lt;a href=&quot;https://levelrail.glinr.com/installing&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;Installing&lt;/a&gt; | &lt;a href=&quot;https://levelrail.glinr.com/installing#upgrading&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;Upgrading&lt;/a&gt; | &lt;a href=&quot;https://levelrail.glinr.com/installing#verifying-image-signatures&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;Verifying signatures&lt;/a&gt;&lt;/p&gt;
&lt;!-- release-notes:end --&gt;
&lt;/div&gt;
</content>
  </entry>
  <entry>
    <id>https://levelrail.glinr.com/changelog/v0-2-0-beta-4</id>
    <title>Levelrail v0.2.0-beta.4: Add domain-level custom error pages, Add...</title>
    <link rel="alternate" type="text/html" href="https://levelrail.glinr.com/changelog/v0-2-0-beta-4"/>
    <published>2026-09-20T08:03:53Z</published>
    <updated>2026-09-20T08:03:53Z</updated>
    <summary>Levelrail v0.2.0-beta.4 release notes (2026-09-20). Add domain-level custom error pages; Add curated local AI model templates to the service catalog...</summary>
    <content type="html">&lt;div v-pre&gt;
&lt;!-- release-notes:start --&gt;
&lt;div class=&quot;note custom-block github-alert&quot;&gt;&lt;p class=&quot;custom-block-title&quot;&gt;NOTE&lt;/p&gt;
&lt;p&gt;This is a pre-release on the &lt;code&gt;beta&lt;/code&gt; channel. Pin this exact version for anything you care about staying still.&lt;/p&gt;
&lt;/div&gt;
&lt;h2 id=&quot;highlights&quot; tabindex=&quot;-1&quot;&gt;Highlights &lt;a class=&quot;header-anchor&quot; href=&quot;#highlights&quot; aria-label=&quot;Permalink to &amp;quot;Highlights&amp;quot;&quot;&gt;&amp;ZeroWidthSpace;&lt;/a&gt;&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;add domain-level custom error pages (&lt;a href=&quot;https://github.com/glincker/levelrail/pull/511&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;#511&lt;/a&gt;) by &lt;a href=&quot;https://github.com/thegdsks&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;@thegdsks&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;add curated local AI model templates to the service catalog (&lt;a href=&quot;https://github.com/glincker/levelrail/pull/514&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;#514&lt;/a&gt;) by &lt;a href=&quot;https://github.com/thegdsks&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;@thegdsks&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;collect real host memory for the control plane's own node (&lt;a href=&quot;https://github.com/glincker/levelrail/pull/515&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;#515&lt;/a&gt;) by &lt;a href=&quot;https://github.com/thegdsks&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;@thegdsks&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;what-s-changed&quot; tabindex=&quot;-1&quot;&gt;What's changed &lt;a class=&quot;header-anchor&quot; href=&quot;#what-s-changed&quot; aria-label=&quot;Permalink to &amp;quot;What's changed&amp;quot;&quot;&gt;&amp;ZeroWidthSpace;&lt;/a&gt;&lt;/h2&gt;
&lt;h3 id=&quot;features&quot; tabindex=&quot;-1&quot;&gt;Features &lt;a class=&quot;header-anchor&quot; href=&quot;#features&quot; aria-label=&quot;Permalink to &amp;quot;Features&amp;quot;&quot;&gt;&amp;ZeroWidthSpace;&lt;/a&gt;&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;add domain-level custom error pages (&lt;a href=&quot;https://github.com/glincker/levelrail/pull/511&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;#511&lt;/a&gt;) by &lt;a href=&quot;https://github.com/thegdsks&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;@thegdsks&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;add curated local AI model templates to the service catalog (&lt;a href=&quot;https://github.com/glincker/levelrail/pull/514&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;#514&lt;/a&gt;) by &lt;a href=&quot;https://github.com/thegdsks&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;@thegdsks&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;collect real host memory for the control plane's own node (&lt;a href=&quot;https://github.com/glincker/levelrail/pull/515&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;#515&lt;/a&gt;) by &lt;a href=&quot;https://github.com/thegdsks&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;@thegdsks&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;live RAM-fit check in the AI template wizard (&lt;a href=&quot;https://github.com/glincker/levelrail/pull/516&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;#516&lt;/a&gt;) by &lt;a href=&quot;https://github.com/thegdsks&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;@thegdsks&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&quot;documentation&quot; tabindex=&quot;-1&quot;&gt;Documentation &lt;a class=&quot;header-anchor&quot; href=&quot;#documentation&quot; aria-label=&quot;Permalink to &amp;quot;Documentation&amp;quot;&quot;&gt;&amp;ZeroWidthSpace;&lt;/a&gt;&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;wire up VitePress build to the GitHub Actions Pages deploy (&lt;a href=&quot;https://github.com/glincker/levelrail/pull/508&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;#508&lt;/a&gt;) by &lt;a href=&quot;https://github.com/thegdsks&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;@thegdsks&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;rail signal theme, SEO/AI-readiness assets, and readability pass (&lt;a href=&quot;https://github.com/glincker/levelrail/pull/510&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;#510&lt;/a&gt;) by &lt;a href=&quot;https://github.com/thegdsks&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;@thegdsks&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;mermaid diagrams, accordions, code groups, and cross-links (&lt;a href=&quot;https://github.com/glincker/levelrail/pull/513&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;#513&lt;/a&gt;) by &lt;a href=&quot;https://github.com/thegdsks&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;@thegdsks&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;SEO infra (canonical URLs, BreadcrumbList, AI crawler allowlist) (&lt;a href=&quot;https://github.com/glincker/levelrail/pull/517&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;#517&lt;/a&gt;) by &lt;a href=&quot;https://github.com/thegdsks&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;@thegdsks&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;self-hosted typography, homepage screenshots, richer footer (&lt;a href=&quot;https://github.com/glincker/levelrail/pull/518&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;#518&lt;/a&gt;) by &lt;a href=&quot;https://github.com/thegdsks&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;@thegdsks&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;details&gt;
&lt;summary&gt;Maintenance, CI, and dependency updates (1)&lt;/summary&gt;
&lt;ul&gt;
&lt;li&gt;Create CNAME (&lt;a href=&quot;https://github.com/glincker/levelrail/commit/cf9497276e6579d452c1f04942ee562b952b7ad1&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;cf94972&lt;/a&gt;) by &lt;a href=&quot;https://github.com/thegdsks&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;@thegdsks&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/details&gt;
&lt;h2 id=&quot;install&quot; tabindex=&quot;-1&quot;&gt;Install &lt;a class=&quot;header-anchor&quot; href=&quot;#install&quot; aria-label=&quot;Permalink to &amp;quot;Install&amp;quot;&quot;&gt;&amp;ZeroWidthSpace;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Fresh install on a Linux host, pinned to this release:&lt;/p&gt;
&lt;div class=&quot;language-sh vp-adaptive-theme&quot;&gt;&lt;button title=&quot;Copy Code&quot; class=&quot;copy&quot;&gt;&lt;/button&gt;&lt;span class=&quot;lang&quot;&gt;sh&lt;/span&gt;&lt;pre class=&quot;shiki shiki-themes github-light github-dark vp-code&quot; tabindex=&quot;0&quot; v-pre=&quot;&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;--shiki-light:#6F42C1;--shiki-dark:#B392F0&quot;&gt;curl&lt;/span&gt;&lt;span style=&quot;--shiki-light:#005CC5;--shiki-dark:#79B8FF&quot;&gt; -fsSL&lt;/span&gt;&lt;span style=&quot;--shiki-light:#032F62;--shiki-dark:#9ECBFF&quot;&gt; https://raw.githubusercontent.com/glincker/levelrail/main/install.sh&lt;/span&gt;&lt;span style=&quot;--shiki-light:#D73A49;--shiki-dark:#F97583&quot;&gt; |&lt;/span&gt;&lt;span style=&quot;--shiki-light:#6F42C1;--shiki-dark:#B392F0&quot;&gt; sudo&lt;/span&gt;&lt;span style=&quot;--shiki-light:#032F62;--shiki-dark:#9ECBFF&quot;&gt; env&lt;/span&gt;&lt;span style=&quot;--shiki-light:#032F62;--shiki-dark:#9ECBFF&quot;&gt; LEVELRAIL_VERSION=v0.2.0-beta.4&lt;/span&gt;&lt;span style=&quot;--shiki-light:#032F62;--shiki-dark:#9ECBFF&quot;&gt; sh&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;&lt;p&gt;Upgrade an existing install in place (keeps the unit file and data):&lt;/p&gt;
&lt;div class=&quot;language-sh vp-adaptive-theme&quot;&gt;&lt;button title=&quot;Copy Code&quot; class=&quot;copy&quot;&gt;&lt;/button&gt;&lt;span class=&quot;lang&quot;&gt;sh&lt;/span&gt;&lt;pre class=&quot;shiki shiki-themes github-light github-dark vp-code&quot; tabindex=&quot;0&quot; v-pre=&quot;&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;--shiki-light:#6F42C1;--shiki-dark:#B392F0&quot;&gt;curl&lt;/span&gt;&lt;span style=&quot;--shiki-light:#005CC5;--shiki-dark:#79B8FF&quot;&gt; -fsSL&lt;/span&gt;&lt;span style=&quot;--shiki-light:#032F62;--shiki-dark:#9ECBFF&quot;&gt; https://raw.githubusercontent.com/glincker/levelrail/main/install.sh&lt;/span&gt;&lt;span style=&quot;--shiki-light:#D73A49;--shiki-dark:#F97583&quot;&gt; |&lt;/span&gt;&lt;span style=&quot;--shiki-light:#6F42C1;--shiki-dark:#B392F0&quot;&gt; sudo&lt;/span&gt;&lt;span style=&quot;--shiki-light:#032F62;--shiki-dark:#9ECBFF&quot;&gt; env&lt;/span&gt;&lt;span style=&quot;--shiki-light:#032F62;--shiki-dark:#9ECBFF&quot;&gt; LEVELRAIL_VERSION=v0.2.0-beta.4&lt;/span&gt;&lt;span style=&quot;--shiki-light:#032F62;--shiki-dark:#9ECBFF&quot;&gt; sh&lt;/span&gt;&lt;span style=&quot;--shiki-light:#005CC5;--shiki-dark:#79B8FF&quot;&gt; -s&lt;/span&gt;&lt;span style=&quot;--shiki-light:#032F62;--shiki-dark:#9ECBFF&quot;&gt; upgrade&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;&lt;p&gt;Docker Compose: pin the image tag in &lt;code&gt;docker-compose.yml&lt;/code&gt;:&lt;/p&gt;
&lt;div class=&quot;language-yaml vp-adaptive-theme&quot;&gt;&lt;button title=&quot;Copy Code&quot; class=&quot;copy&quot;&gt;&lt;/button&gt;&lt;span class=&quot;lang&quot;&gt;yaml&lt;/span&gt;&lt;pre class=&quot;shiki shiki-themes github-light github-dark vp-code&quot; tabindex=&quot;0&quot; v-pre=&quot;&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;--shiki-light:#22863A;--shiki-dark:#85E89D&quot;&gt;services&lt;/span&gt;&lt;span style=&quot;--shiki-light:#24292E;--shiki-dark:#E1E4E8&quot;&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;--shiki-light:#22863A;--shiki-dark:#85E89D&quot;&gt;  levelrail&lt;/span&gt;&lt;span style=&quot;--shiki-light:#24292E;--shiki-dark:#E1E4E8&quot;&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;--shiki-light:#22863A;--shiki-dark:#85E89D&quot;&gt;    image&lt;/span&gt;&lt;span style=&quot;--shiki-light:#24292E;--shiki-dark:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;--shiki-light:#032F62;--shiki-dark:#9ECBFF&quot;&gt;ghcr.io/glincker/levelrail:v0.2.0-beta.4&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;&lt;h2 id=&quot;container-images&quot; tabindex=&quot;-1&quot;&gt;Container images &lt;a class=&quot;header-anchor&quot; href=&quot;#container-images&quot; aria-label=&quot;Permalink to &amp;quot;Container images&amp;quot;&quot;&gt;&amp;ZeroWidthSpace;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Multi-arch (&lt;code&gt;linux/amd64&lt;/code&gt;, &lt;code&gt;linux/arm64&lt;/code&gt;), signed with cosign, SBOM and provenance attached. Also tagged &lt;code&gt;beta&lt;/code&gt; at release time (moving tags).&lt;/p&gt;
&lt;table tabindex=&quot;0&quot;&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Image&lt;/th&gt;
&lt;th&gt;Tag&lt;/th&gt;
&lt;th&gt;Digest&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;ghcr.io/glincker/levelrail&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;v0.2.0-beta.4&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;sha256:0abd27fc1ad50075bde71a8928772876d17cb7f745142ba2b5a61666f1c4251e&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;ghcr.io/glincker/levelrail-agent&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;v0.2.0-beta.4&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;sha256:d5257950a1d930ee62182bd482f536b133fc38ff468038c60dec0412e7bf5879&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h2 id=&quot;verify&quot; tabindex=&quot;-1&quot;&gt;Verify &lt;a class=&quot;header-anchor&quot; href=&quot;#verify&quot; aria-label=&quot;Permalink to &amp;quot;Verify&amp;quot;&quot;&gt;&amp;ZeroWidthSpace;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Binaries: check downloads against &lt;code&gt;checksums.txt&lt;/code&gt;:&lt;/p&gt;
&lt;div class=&quot;language-sh vp-adaptive-theme&quot;&gt;&lt;button title=&quot;Copy Code&quot; class=&quot;copy&quot;&gt;&lt;/button&gt;&lt;span class=&quot;lang&quot;&gt;sh&lt;/span&gt;&lt;pre class=&quot;shiki shiki-themes github-light github-dark vp-code&quot; tabindex=&quot;0&quot; v-pre=&quot;&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;--shiki-light:#6F42C1;--shiki-dark:#B392F0&quot;&gt;gh&lt;/span&gt;&lt;span style=&quot;--shiki-light:#032F62;--shiki-dark:#9ECBFF&quot;&gt; release&lt;/span&gt;&lt;span style=&quot;--shiki-light:#032F62;--shiki-dark:#9ECBFF&quot;&gt; download&lt;/span&gt;&lt;span style=&quot;--shiki-light:#032F62;--shiki-dark:#9ECBFF&quot;&gt; v0.2.0-beta.4&lt;/span&gt;&lt;span style=&quot;--shiki-light:#005CC5;--shiki-dark:#79B8FF&quot;&gt; --repo&lt;/span&gt;&lt;span style=&quot;--shiki-light:#032F62;--shiki-dark:#9ECBFF&quot;&gt; glincker/levelrail&lt;/span&gt;&lt;span style=&quot;--shiki-light:#005CC5;--shiki-dark:#79B8FF&quot;&gt; --pattern&lt;/span&gt;&lt;span style=&quot;--shiki-light:#032F62;--shiki-dark:#9ECBFF&quot;&gt; 'levelrail-linux-amd64'&lt;/span&gt;&lt;span style=&quot;--shiki-light:#005CC5;--shiki-dark:#79B8FF&quot;&gt; --pattern&lt;/span&gt;&lt;span style=&quot;--shiki-light:#032F62;--shiki-dark:#9ECBFF&quot;&gt; checksums.txt&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;--shiki-light:#6F42C1;--shiki-dark:#B392F0&quot;&gt;sha256sum&lt;/span&gt;&lt;span style=&quot;--shiki-light:#005CC5;--shiki-dark:#79B8FF&quot;&gt; --ignore-missing&lt;/span&gt;&lt;span style=&quot;--shiki-light:#005CC5;--shiki-dark:#79B8FF&quot;&gt; -c&lt;/span&gt;&lt;span style=&quot;--shiki-light:#032F62;--shiki-dark:#9ECBFF&quot;&gt; checksums.txt&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;&lt;p&gt;Images: verify the keyless signature was made by this repository's release workflow:&lt;/p&gt;
&lt;div class=&quot;language-sh vp-adaptive-theme&quot;&gt;&lt;button title=&quot;Copy Code&quot; class=&quot;copy&quot;&gt;&lt;/button&gt;&lt;span class=&quot;lang&quot;&gt;sh&lt;/span&gt;&lt;pre class=&quot;shiki shiki-themes github-light github-dark vp-code&quot; tabindex=&quot;0&quot; v-pre=&quot;&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;--shiki-light:#6F42C1;--shiki-dark:#B392F0&quot;&gt;cosign&lt;/span&gt;&lt;span style=&quot;--shiki-light:#032F62;--shiki-dark:#9ECBFF&quot;&gt; verify&lt;/span&gt;&lt;span style=&quot;--shiki-light:#032F62;--shiki-dark:#9ECBFF&quot;&gt; ghcr.io/glincker/levelrail@sha256:0abd27fc1ad50075bde71a8928772876d17cb7f745142ba2b5a61666f1c4251e&lt;/span&gt;&lt;span style=&quot;--shiki-light:#005CC5;--shiki-dark:#79B8FF&quot;&gt; \&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;--shiki-light:#005CC5;--shiki-dark:#79B8FF&quot;&gt;  --certificate-identity-regexp&lt;/span&gt;&lt;span style=&quot;--shiki-light:#032F62;--shiki-dark:#9ECBFF&quot;&gt; '^https://github\.com/glincker/levelrail/\.github/workflows/release\.yml@refs/(heads/main|tags/v.+)$'&lt;/span&gt;&lt;span style=&quot;--shiki-light:#005CC5;--shiki-dark:#79B8FF&quot;&gt; \&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;--shiki-light:#005CC5;--shiki-dark:#79B8FF&quot;&gt;  --certificate-oidc-issuer&lt;/span&gt;&lt;span style=&quot;--shiki-light:#032F62;--shiki-dark:#9ECBFF&quot;&gt; https://token.actions.githubusercontent.com&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;&lt;h2 id=&quot;contributors&quot; tabindex=&quot;-1&quot;&gt;Contributors &lt;a class=&quot;header-anchor&quot; href=&quot;#contributors&quot; aria-label=&quot;Permalink to &amp;quot;Contributors&amp;quot;&quot;&gt;&amp;ZeroWidthSpace;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Thanks to &lt;a href=&quot;https://github.com/thegdsks&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;@thegdsks&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Full changelog:&lt;/strong&gt; &lt;a href=&quot;https://github.com/glincker/levelrail/compare/v0.2.0-beta.3...v0.2.0-beta.4&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;v0.2.0-beta.3...v0.2.0-beta.4&lt;/a&gt; | &lt;a href=&quot;https://levelrail.glinr.com/changelog/v0-2-0-beta-4&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;Release page&lt;/a&gt; | &lt;a href=&quot;https://levelrail.glinr.com/installing&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;Installing&lt;/a&gt; | &lt;a href=&quot;https://levelrail.glinr.com/installing#upgrading&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;Upgrading&lt;/a&gt; | &lt;a href=&quot;https://levelrail.glinr.com/installing#verifying-image-signatures&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;Verifying signatures&lt;/a&gt;&lt;/p&gt;
&lt;!-- release-notes:end --&gt;
&lt;/div&gt;
</content>
  </entry>
  <entry>
    <id>https://levelrail.glinr.com/changelog/v0-2-0-beta-3</id>
    <title>Levelrail v0.2.0-beta.3: Add DNS-01 provider abstraction with...</title>
    <link rel="alternate" type="text/html" href="https://levelrail.glinr.com/changelog/v0-2-0-beta-3"/>
    <published>2026-09-20T02:15:22Z</published>
    <updated>2026-09-20T02:15:22Z</updated>
    <summary>Levelrail v0.2.0-beta.3 release notes (2026-09-20). Add DNS-01 provider abstraction with Route53 as a second provider; Per-preview env var overrides on...</summary>
    <content type="html">&lt;div v-pre&gt;
&lt;!-- release-notes:start --&gt;
&lt;div class=&quot;note custom-block github-alert&quot;&gt;&lt;p class=&quot;custom-block-title&quot;&gt;NOTE&lt;/p&gt;
&lt;p&gt;This is a pre-release on the &lt;code&gt;beta&lt;/code&gt; channel. Pin this exact version for anything you care about staying still.&lt;/p&gt;
&lt;/div&gt;
&lt;h2 id=&quot;highlights&quot; tabindex=&quot;-1&quot;&gt;Highlights &lt;a class=&quot;header-anchor&quot; href=&quot;#highlights&quot; aria-label=&quot;Permalink to &amp;quot;Highlights&amp;quot;&quot;&gt;&amp;ZeroWidthSpace;&lt;/a&gt;&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;add DNS-01 provider abstraction with Route53 as a second provider (&lt;a href=&quot;https://github.com/glincker/levelrail/pull/492&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;#492&lt;/a&gt;) by &lt;a href=&quot;https://github.com/thegdsks&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;@thegdsks&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;per-preview env var overrides on parent app (&lt;a href=&quot;https://github.com/glincker/levelrail/pull/493&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;#493&lt;/a&gt;) by &lt;a href=&quot;https://github.com/thegdsks&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;@thegdsks&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;add instance-wide backup history view (&lt;a href=&quot;https://github.com/glincker/levelrail/pull/503&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;#503&lt;/a&gt;) by &lt;a href=&quot;https://github.com/thegdsks&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;@thegdsks&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;what-s-changed&quot; tabindex=&quot;-1&quot;&gt;What's changed &lt;a class=&quot;header-anchor&quot; href=&quot;#what-s-changed&quot; aria-label=&quot;Permalink to &amp;quot;What's changed&amp;quot;&quot;&gt;&amp;ZeroWidthSpace;&lt;/a&gt;&lt;/h2&gt;
&lt;h3 id=&quot;features&quot; tabindex=&quot;-1&quot;&gt;Features &lt;a class=&quot;header-anchor&quot; href=&quot;#features&quot; aria-label=&quot;Permalink to &amp;quot;Features&amp;quot;&quot;&gt;&amp;ZeroWidthSpace;&lt;/a&gt;&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;add DNS-01 provider abstraction with Route53 as a second provider (&lt;a href=&quot;https://github.com/glincker/levelrail/pull/492&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;#492&lt;/a&gt;) by &lt;a href=&quot;https://github.com/thegdsks&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;@thegdsks&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;per-preview env var overrides on parent app (&lt;a href=&quot;https://github.com/glincker/levelrail/pull/493&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;#493&lt;/a&gt;) by &lt;a href=&quot;https://github.com/thegdsks&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;@thegdsks&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;add instance-wide backup history view (&lt;a href=&quot;https://github.com/glincker/levelrail/pull/503&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;#503&lt;/a&gt;) by &lt;a href=&quot;https://github.com/thegdsks&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;@thegdsks&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;add deploy log download endpoint, CLI command, and UI button (&lt;a href=&quot;https://github.com/glincker/levelrail/pull/504&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;#504&lt;/a&gt;) by &lt;a href=&quot;https://github.com/thegdsks&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;@thegdsks&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;add concurrency_policy to scheduled tasks (&lt;a href=&quot;https://github.com/glincker/levelrail/pull/495&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;#495&lt;/a&gt;) by &lt;a href=&quot;https://github.com/thegdsks&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;@thegdsks&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;per-service pull_policy support for Docker Compose imports (&lt;a href=&quot;https://github.com/glincker/levelrail/pull/494&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;#494&lt;/a&gt;) by &lt;a href=&quot;https://github.com/thegdsks&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;@thegdsks&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;add domain-level redirects (&lt;a href=&quot;https://github.com/glincker/levelrail/pull/507&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;#507&lt;/a&gt;) by &lt;a href=&quot;https://github.com/thegdsks&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;@thegdsks&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;default published ports to a private bind address (&lt;a href=&quot;https://github.com/glincker/levelrail/pull/496&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;#496&lt;/a&gt;) by &lt;a href=&quot;https://github.com/thegdsks&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;@thegdsks&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&quot;bug-fixes&quot; tabindex=&quot;-1&quot;&gt;Bug fixes &lt;a class=&quot;header-anchor&quot; href=&quot;#bug-fixes&quot; aria-label=&quot;Permalink to &amp;quot;Bug fixes&amp;quot;&quot;&gt;&amp;ZeroWidthSpace;&lt;/a&gt;&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;lazy-load scoped sidebars, align react-dom to react 19.3.0 (&lt;a href=&quot;https://github.com/glincker/levelrail/pull/499&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;#499&lt;/a&gt;) by &lt;a href=&quot;https://github.com/thegdsks&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;@thegdsks&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;restore explicit Control cast for BackupMissingFields props (&lt;a href=&quot;https://github.com/glincker/levelrail/pull/500&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;#500&lt;/a&gt;) by &lt;a href=&quot;https://github.com/thegdsks&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;@thegdsks&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;resolve migration number collision at 0098 (&lt;a href=&quot;https://github.com/glincker/levelrail/pull/505&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;#505&lt;/a&gt;) by &lt;a href=&quot;https://github.com/thegdsks&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;@thegdsks&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;renumber colliding scheduled-task migration to 0101 (&lt;a href=&quot;https://github.com/glincker/levelrail/pull/506&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;#506&lt;/a&gt;) by &lt;a href=&quot;https://github.com/thegdsks&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;@thegdsks&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;details&gt;
&lt;summary&gt;Maintenance, CI, and dependency updates (19)&lt;/summary&gt;
&lt;ul&gt;
&lt;li&gt;bump &lt;a href=&quot;https://github.com/tanstack&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;@tanstack&lt;/a&gt;/react-virtual from 3.14.11 to 3.14.13 in /web (&lt;a href=&quot;https://github.com/glincker/levelrail/pull/469&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;#469&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;bump &lt;a href=&quot;https://github.com/tanstack&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;@tanstack&lt;/a&gt;/router-plugin from 1.168.36 to 1.168.38 in /web (&lt;a href=&quot;https://github.com/glincker/levelrail/pull/470&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;#470&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;bump react and &lt;a href=&quot;https://github.com/types&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;@types&lt;/a&gt;/react in /web (&lt;a href=&quot;https://github.com/glincker/levelrail/pull/472&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;#472&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;bump eslint-plugin-react-refresh from 0.5.6 to 0.5.7 in /web (&lt;a href=&quot;https://github.com/glincker/levelrail/pull/473&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;#473&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;bump &lt;a href=&quot;https://github.com/xterm&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;@xterm&lt;/a&gt;/addon-fit from 0.10.0 to 0.11.0 in /web (&lt;a href=&quot;https://github.com/glincker/levelrail/pull/475&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;#475&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;bump tailwind-merge from 3.6.0 to 3.7.0 in /web (&lt;a href=&quot;https://github.com/glincker/levelrail/pull/479&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;#479&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;bump zod from 4.5.4 to 4.6.5 in /web (&lt;a href=&quot;https://github.com/glincker/levelrail/pull/476&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;#476&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;bump vite from 8.2.2 to 8.3.0 in /web (&lt;a href=&quot;https://github.com/glincker/levelrail/pull/484&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;#484&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;bump react-hook-form from 7.87.0 to 7.88.0 in /web (&lt;a href=&quot;https://github.com/glincker/levelrail/pull/485&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;#485&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;bump &lt;a href=&quot;https://github.com/thesvg&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;@thesvg&lt;/a&gt;/react from 3.3.3 to 3.3.7 in /web (&lt;a href=&quot;https://github.com/glincker/levelrail/pull/471&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;#471&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;bump &lt;a href=&quot;https://github.com/types&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;@types&lt;/a&gt;/node from 26.5.0 to 26.5.1 in /web (&lt;a href=&quot;https://github.com/glincker/levelrail/pull/482&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;#482&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;bump docker/build-push-action from 7.3.0 to 7.4.0 (&lt;a href=&quot;https://github.com/glincker/levelrail/pull/467&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;#467&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;bump github.com/modelcontextprotocol/go-sdk from 1.7.0 to 1.8.0 (&lt;a href=&quot;https://github.com/glincker/levelrail/pull/483&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;#483&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;bump github.com/aws/aws-sdk-go-v2/credentials (&lt;a href=&quot;https://github.com/glincker/levelrail/pull/487&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;#487&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;bump github.com/aws/aws-sdk-go-v2/service/sesv2 (&lt;a href=&quot;https://github.com/glincker/levelrail/pull/490&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;#490&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;bump github.com/aws/aws-sdk-go-v2/feature/s3/manager (&lt;a href=&quot;https://github.com/glincker/levelrail/pull/486&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;#486&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;affected-package-scoped, race-free local test hooks (&lt;a href=&quot;https://github.com/glincker/levelrail/pull/502&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;#502&lt;/a&gt;) by &lt;a href=&quot;https://github.com/thegdsks&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;@thegdsks&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;add regression guard for Docker API version negotiation (&lt;a href=&quot;https://github.com/glincker/levelrail/pull/498&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;#498&lt;/a&gt;) by &lt;a href=&quot;https://github.com/thegdsks&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;@thegdsks&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;run frontend test suite in CI (&lt;a href=&quot;https://github.com/glincker/levelrail/pull/497&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;#497&lt;/a&gt;) by &lt;a href=&quot;https://github.com/thegdsks&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;@thegdsks&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/details&gt;
&lt;h2 id=&quot;install&quot; tabindex=&quot;-1&quot;&gt;Install &lt;a class=&quot;header-anchor&quot; href=&quot;#install&quot; aria-label=&quot;Permalink to &amp;quot;Install&amp;quot;&quot;&gt;&amp;ZeroWidthSpace;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Fresh install on a Linux host, pinned to this release:&lt;/p&gt;
&lt;div class=&quot;language-sh vp-adaptive-theme&quot;&gt;&lt;button title=&quot;Copy Code&quot; class=&quot;copy&quot;&gt;&lt;/button&gt;&lt;span class=&quot;lang&quot;&gt;sh&lt;/span&gt;&lt;pre class=&quot;shiki shiki-themes github-light github-dark vp-code&quot; tabindex=&quot;0&quot; v-pre=&quot;&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;--shiki-light:#6F42C1;--shiki-dark:#B392F0&quot;&gt;curl&lt;/span&gt;&lt;span style=&quot;--shiki-light:#005CC5;--shiki-dark:#79B8FF&quot;&gt; -fsSL&lt;/span&gt;&lt;span style=&quot;--shiki-light:#032F62;--shiki-dark:#9ECBFF&quot;&gt; https://raw.githubusercontent.com/glincker/levelrail/main/install.sh&lt;/span&gt;&lt;span style=&quot;--shiki-light:#D73A49;--shiki-dark:#F97583&quot;&gt; |&lt;/span&gt;&lt;span style=&quot;--shiki-light:#6F42C1;--shiki-dark:#B392F0&quot;&gt; sudo&lt;/span&gt;&lt;span style=&quot;--shiki-light:#032F62;--shiki-dark:#9ECBFF&quot;&gt; env&lt;/span&gt;&lt;span style=&quot;--shiki-light:#032F62;--shiki-dark:#9ECBFF&quot;&gt; LEVELRAIL_VERSION=v0.2.0-beta.3&lt;/span&gt;&lt;span style=&quot;--shiki-light:#032F62;--shiki-dark:#9ECBFF&quot;&gt; sh&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;&lt;p&gt;Upgrade an existing install in place (keeps the unit file and data):&lt;/p&gt;
&lt;div class=&quot;language-sh vp-adaptive-theme&quot;&gt;&lt;button title=&quot;Copy Code&quot; class=&quot;copy&quot;&gt;&lt;/button&gt;&lt;span class=&quot;lang&quot;&gt;sh&lt;/span&gt;&lt;pre class=&quot;shiki shiki-themes github-light github-dark vp-code&quot; tabindex=&quot;0&quot; v-pre=&quot;&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;--shiki-light:#6F42C1;--shiki-dark:#B392F0&quot;&gt;curl&lt;/span&gt;&lt;span style=&quot;--shiki-light:#005CC5;--shiki-dark:#79B8FF&quot;&gt; -fsSL&lt;/span&gt;&lt;span style=&quot;--shiki-light:#032F62;--shiki-dark:#9ECBFF&quot;&gt; https://raw.githubusercontent.com/glincker/levelrail/main/install.sh&lt;/span&gt;&lt;span style=&quot;--shiki-light:#D73A49;--shiki-dark:#F97583&quot;&gt; |&lt;/span&gt;&lt;span style=&quot;--shiki-light:#6F42C1;--shiki-dark:#B392F0&quot;&gt; sudo&lt;/span&gt;&lt;span style=&quot;--shiki-light:#032F62;--shiki-dark:#9ECBFF&quot;&gt; env&lt;/span&gt;&lt;span style=&quot;--shiki-light:#032F62;--shiki-dark:#9ECBFF&quot;&gt; LEVELRAIL_VERSION=v0.2.0-beta.3&lt;/span&gt;&lt;span style=&quot;--shiki-light:#032F62;--shiki-dark:#9ECBFF&quot;&gt; sh&lt;/span&gt;&lt;span style=&quot;--shiki-light:#005CC5;--shiki-dark:#79B8FF&quot;&gt; -s&lt;/span&gt;&lt;span style=&quot;--shiki-light:#032F62;--shiki-dark:#9ECBFF&quot;&gt; upgrade&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;&lt;p&gt;Docker Compose: pin the image tag in &lt;code&gt;docker-compose.yml&lt;/code&gt;:&lt;/p&gt;
&lt;div class=&quot;language-yaml vp-adaptive-theme&quot;&gt;&lt;button title=&quot;Copy Code&quot; class=&quot;copy&quot;&gt;&lt;/button&gt;&lt;span class=&quot;lang&quot;&gt;yaml&lt;/span&gt;&lt;pre class=&quot;shiki shiki-themes github-light github-dark vp-code&quot; tabindex=&quot;0&quot; v-pre=&quot;&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;--shiki-light:#22863A;--shiki-dark:#85E89D&quot;&gt;services&lt;/span&gt;&lt;span style=&quot;--shiki-light:#24292E;--shiki-dark:#E1E4E8&quot;&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;--shiki-light:#22863A;--shiki-dark:#85E89D&quot;&gt;  levelrail&lt;/span&gt;&lt;span style=&quot;--shiki-light:#24292E;--shiki-dark:#E1E4E8&quot;&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;--shiki-light:#22863A;--shiki-dark:#85E89D&quot;&gt;    image&lt;/span&gt;&lt;span style=&quot;--shiki-light:#24292E;--shiki-dark:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;--shiki-light:#032F62;--shiki-dark:#9ECBFF&quot;&gt;ghcr.io/glincker/levelrail:v0.2.0-beta.3&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;&lt;h2 id=&quot;container-images&quot; tabindex=&quot;-1&quot;&gt;Container images &lt;a class=&quot;header-anchor&quot; href=&quot;#container-images&quot; aria-label=&quot;Permalink to &amp;quot;Container images&amp;quot;&quot;&gt;&amp;ZeroWidthSpace;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Multi-arch (&lt;code&gt;linux/amd64&lt;/code&gt;, &lt;code&gt;linux/arm64&lt;/code&gt;), signed with cosign, SBOM and provenance attached. Also tagged &lt;code&gt;beta&lt;/code&gt; at release time (moving tags).&lt;/p&gt;
&lt;table tabindex=&quot;0&quot;&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Image&lt;/th&gt;
&lt;th&gt;Tag&lt;/th&gt;
&lt;th&gt;Digest&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;ghcr.io/glincker/levelrail&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;v0.2.0-beta.3&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;sha256:44ce0a481e7f01c94878ee8d483a6a675c329d9852e6fec9bac152a00e55e40f&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;ghcr.io/glincker/levelrail-agent&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;v0.2.0-beta.3&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;sha256:a71b5cde80386d7f712485b22fc8764d369dd6708ccdb61a4baac33757d6120d&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h2 id=&quot;verify&quot; tabindex=&quot;-1&quot;&gt;Verify &lt;a class=&quot;header-anchor&quot; href=&quot;#verify&quot; aria-label=&quot;Permalink to &amp;quot;Verify&amp;quot;&quot;&gt;&amp;ZeroWidthSpace;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Binaries: check downloads against &lt;code&gt;checksums.txt&lt;/code&gt;:&lt;/p&gt;
&lt;div class=&quot;language-sh vp-adaptive-theme&quot;&gt;&lt;button title=&quot;Copy Code&quot; class=&quot;copy&quot;&gt;&lt;/button&gt;&lt;span class=&quot;lang&quot;&gt;sh&lt;/span&gt;&lt;pre class=&quot;shiki shiki-themes github-light github-dark vp-code&quot; tabindex=&quot;0&quot; v-pre=&quot;&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;--shiki-light:#6F42C1;--shiki-dark:#B392F0&quot;&gt;gh&lt;/span&gt;&lt;span style=&quot;--shiki-light:#032F62;--shiki-dark:#9ECBFF&quot;&gt; release&lt;/span&gt;&lt;span style=&quot;--shiki-light:#032F62;--shiki-dark:#9ECBFF&quot;&gt; download&lt;/span&gt;&lt;span style=&quot;--shiki-light:#032F62;--shiki-dark:#9ECBFF&quot;&gt; v0.2.0-beta.3&lt;/span&gt;&lt;span style=&quot;--shiki-light:#005CC5;--shiki-dark:#79B8FF&quot;&gt; --repo&lt;/span&gt;&lt;span style=&quot;--shiki-light:#032F62;--shiki-dark:#9ECBFF&quot;&gt; glincker/levelrail&lt;/span&gt;&lt;span style=&quot;--shiki-light:#005CC5;--shiki-dark:#79B8FF&quot;&gt; --pattern&lt;/span&gt;&lt;span style=&quot;--shiki-light:#032F62;--shiki-dark:#9ECBFF&quot;&gt; 'levelrail-linux-amd64'&lt;/span&gt;&lt;span style=&quot;--shiki-light:#005CC5;--shiki-dark:#79B8FF&quot;&gt; --pattern&lt;/span&gt;&lt;span style=&quot;--shiki-light:#032F62;--shiki-dark:#9ECBFF&quot;&gt; checksums.txt&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;--shiki-light:#6F42C1;--shiki-dark:#B392F0&quot;&gt;sha256sum&lt;/span&gt;&lt;span style=&quot;--shiki-light:#005CC5;--shiki-dark:#79B8FF&quot;&gt; --ignore-missing&lt;/span&gt;&lt;span style=&quot;--shiki-light:#005CC5;--shiki-dark:#79B8FF&quot;&gt; -c&lt;/span&gt;&lt;span style=&quot;--shiki-light:#032F62;--shiki-dark:#9ECBFF&quot;&gt; checksums.txt&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;&lt;p&gt;Images: verify the keyless signature was made by this repository's release workflow:&lt;/p&gt;
&lt;div class=&quot;language-sh vp-adaptive-theme&quot;&gt;&lt;button title=&quot;Copy Code&quot; class=&quot;copy&quot;&gt;&lt;/button&gt;&lt;span class=&quot;lang&quot;&gt;sh&lt;/span&gt;&lt;pre class=&quot;shiki shiki-themes github-light github-dark vp-code&quot; tabindex=&quot;0&quot; v-pre=&quot;&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;--shiki-light:#6F42C1;--shiki-dark:#B392F0&quot;&gt;cosign&lt;/span&gt;&lt;span style=&quot;--shiki-light:#032F62;--shiki-dark:#9ECBFF&quot;&gt; verify&lt;/span&gt;&lt;span style=&quot;--shiki-light:#032F62;--shiki-dark:#9ECBFF&quot;&gt; ghcr.io/glincker/levelrail@sha256:44ce0a481e7f01c94878ee8d483a6a675c329d9852e6fec9bac152a00e55e40f&lt;/span&gt;&lt;span style=&quot;--shiki-light:#005CC5;--shiki-dark:#79B8FF&quot;&gt; \&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;--shiki-light:#005CC5;--shiki-dark:#79B8FF&quot;&gt;  --certificate-identity-regexp&lt;/span&gt;&lt;span style=&quot;--shiki-light:#032F62;--shiki-dark:#9ECBFF&quot;&gt; '^https://github\.com/glincker/levelrail/\.github/workflows/release\.yml@refs/(heads/main|tags/v.+)$'&lt;/span&gt;&lt;span style=&quot;--shiki-light:#005CC5;--shiki-dark:#79B8FF&quot;&gt; \&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;--shiki-light:#005CC5;--shiki-dark:#79B8FF&quot;&gt;  --certificate-oidc-issuer&lt;/span&gt;&lt;span style=&quot;--shiki-light:#032F62;--shiki-dark:#9ECBFF&quot;&gt; https://token.actions.githubusercontent.com&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;&lt;h2 id=&quot;contributors&quot; tabindex=&quot;-1&quot;&gt;Contributors &lt;a class=&quot;header-anchor&quot; href=&quot;#contributors&quot; aria-label=&quot;Permalink to &amp;quot;Contributors&amp;quot;&quot;&gt;&amp;ZeroWidthSpace;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Thanks to &lt;a href=&quot;https://github.com/thegdsks&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;@thegdsks&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Full changelog:&lt;/strong&gt; &lt;a href=&quot;https://github.com/glincker/levelrail/compare/v0.2.0-beta.2...v0.2.0-beta.3&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;v0.2.0-beta.2...v0.2.0-beta.3&lt;/a&gt; | &lt;a href=&quot;https://levelrail.glinr.com/changelog/v0-2-0-beta-3&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;Release page&lt;/a&gt; | &lt;a href=&quot;https://levelrail.glinr.com/installing&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;Installing&lt;/a&gt; | &lt;a href=&quot;https://levelrail.glinr.com/installing#upgrading&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;Upgrading&lt;/a&gt; | &lt;a href=&quot;https://levelrail.glinr.com/installing#verifying-image-signatures&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;Verifying signatures&lt;/a&gt;&lt;/p&gt;
&lt;!-- release-notes:end --&gt;
&lt;/div&gt;
</content>
  </entry>
  <entry>
    <id>https://levelrail.glinr.com/changelog/v0-2-0-beta-2</id>
    <title>Levelrail v0.2.0-beta.2: Zero-config sslip.io URL for apps with no...</title>
    <link rel="alternate" type="text/html" href="https://levelrail.glinr.com/changelog/v0-2-0-beta-2"/>
    <published>2026-09-18T03:57:25Z</published>
    <updated>2026-09-18T03:57:25Z</updated>
    <summary>Levelrail v0.2.0-beta.2 release notes (2026-09-18). Zero-config sslip.io URL for apps with no domain configured; Add Content-Security-Policy and opt-in...</summary>
    <content type="html">&lt;div v-pre&gt;
&lt;!-- release-notes:start --&gt;
&lt;div class=&quot;caution custom-block github-alert&quot;&gt;&lt;p class=&quot;custom-block-title&quot;&gt;CAUTION&lt;/p&gt;
&lt;p&gt;This release shipped no binaries or container images (its build did not publish). Use &lt;a href=&quot;https://github.com/glincker/levelrail/releases/tag/v0.2.0-beta.3&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;v0.2.0-beta.3&lt;/a&gt; instead, which includes every change below.&lt;/p&gt;
&lt;/div&gt;
&lt;h2 id=&quot;highlights&quot; tabindex=&quot;-1&quot;&gt;Highlights &lt;a class=&quot;header-anchor&quot; href=&quot;#highlights&quot; aria-label=&quot;Permalink to &amp;quot;Highlights&amp;quot;&quot;&gt;&amp;ZeroWidthSpace;&lt;/a&gt;&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;zero-config sslip.io URL for apps with no domain configured (&lt;a href=&quot;https://github.com/glincker/levelrail/pull/447&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;#447&lt;/a&gt;) by &lt;a href=&quot;https://github.com/thegdsks&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;@thegdsks&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;add Content-Security-Policy and opt-in HSTS, fix healthz routing (&lt;a href=&quot;https://github.com/glincker/levelrail/pull/449&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;#449&lt;/a&gt;) by &lt;a href=&quot;https://github.com/thegdsks&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;@thegdsks&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;fail fast when a container is OOM-killed during readiness wait (&lt;a href=&quot;https://github.com/glincker/levelrail/pull/451&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;#451&lt;/a&gt;) by &lt;a href=&quot;https://github.com/thegdsks&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;@thegdsks&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;what-s-changed&quot; tabindex=&quot;-1&quot;&gt;What's changed &lt;a class=&quot;header-anchor&quot; href=&quot;#what-s-changed&quot; aria-label=&quot;Permalink to &amp;quot;What's changed&amp;quot;&quot;&gt;&amp;ZeroWidthSpace;&lt;/a&gt;&lt;/h2&gt;
&lt;h3 id=&quot;features&quot; tabindex=&quot;-1&quot;&gt;Features &lt;a class=&quot;header-anchor&quot; href=&quot;#features&quot; aria-label=&quot;Permalink to &amp;quot;Features&amp;quot;&quot;&gt;&amp;ZeroWidthSpace;&lt;/a&gt;&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;zero-config sslip.io URL for apps with no domain configured (&lt;a href=&quot;https://github.com/glincker/levelrail/pull/447&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;#447&lt;/a&gt;) by &lt;a href=&quot;https://github.com/thegdsks&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;@thegdsks&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;add Content-Security-Policy and opt-in HSTS, fix healthz routing (&lt;a href=&quot;https://github.com/glincker/levelrail/pull/449&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;#449&lt;/a&gt;) by &lt;a href=&quot;https://github.com/thegdsks&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;@thegdsks&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;fail fast when a container is OOM-killed during readiness wait (&lt;a href=&quot;https://github.com/glincker/levelrail/pull/451&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;#451&lt;/a&gt;) by &lt;a href=&quot;https://github.com/thegdsks&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;@thegdsks&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;add apps wait and apps deploys list CLI commands (&lt;a href=&quot;https://github.com/glincker/levelrail/pull/460&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;#460&lt;/a&gt;) by &lt;a href=&quot;https://github.com/thegdsks&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;@thegdsks&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;first-party GitHub Action for deploying to Levelrail from CI (&lt;a href=&quot;https://github.com/glincker/levelrail/pull/461&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;#461&lt;/a&gt;) by &lt;a href=&quot;https://github.com/thegdsks&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;@thegdsks&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;selective backup archive deletion (&lt;a href=&quot;https://github.com/glincker/levelrail/pull/462&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;#462&lt;/a&gt;) by &lt;a href=&quot;https://github.com/thegdsks&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;@thegdsks&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;move an app to another node with its volumes (&lt;a href=&quot;https://github.com/glincker/levelrail/pull/464&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;#464&lt;/a&gt;) by &lt;a href=&quot;https://github.com/thegdsks&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;@thegdsks&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;resolve app secrets live from an external HashiCorp Vault instance (&lt;a href=&quot;https://github.com/glincker/levelrail/pull/465&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;#465&lt;/a&gt;) by &lt;a href=&quot;https://github.com/thegdsks&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;@thegdsks&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;add backup_missing alert rule kind (&lt;a href=&quot;https://github.com/glincker/levelrail/pull/463&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;#463&lt;/a&gt;) by &lt;a href=&quot;https://github.com/thegdsks&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;@thegdsks&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&quot;bug-fixes&quot; tabindex=&quot;-1&quot;&gt;Bug fixes &lt;a class=&quot;header-anchor&quot; href=&quot;#bug-fixes&quot; aria-label=&quot;Permalink to &amp;quot;Bug fixes&amp;quot;&quot;&gt;&amp;ZeroWidthSpace;&lt;/a&gt;&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;bound live Docker inspect calls with a timeout (&lt;a href=&quot;https://github.com/glincker/levelrail/pull/450&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;#450&lt;/a&gt;) by &lt;a href=&quot;https://github.com/thegdsks&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;@thegdsks&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;poll deploy status live so a rollback's actual progress is visible (&lt;a href=&quot;https://github.com/glincker/levelrail/pull/452&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;#452&lt;/a&gt;) by &lt;a href=&quot;https://github.com/thegdsks&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;@thegdsks&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;suppress duplicate lines when a log stream's EventSource reconnects (&lt;a href=&quot;https://github.com/glincker/levelrail/pull/453&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;#453&lt;/a&gt;) by &lt;a href=&quot;https://github.com/thegdsks&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;@thegdsks&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;retry transient notification delivery failures (&lt;a href=&quot;https://github.com/glincker/levelrail/pull/454&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;#454&lt;/a&gt;) by &lt;a href=&quot;https://github.com/thegdsks&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;@thegdsks&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;recognize every reconciler failure reason in the rollout stage (&lt;a href=&quot;https://github.com/glincker/levelrail/pull/458&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;#458&lt;/a&gt;) by &lt;a href=&quot;https://github.com/thegdsks&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;@thegdsks&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;revert cel-go bump that broke the build (&lt;a href=&quot;https://github.com/glincker/levelrail/pull/459&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;#459&lt;/a&gt;) by &lt;a href=&quot;https://github.com/thegdsks&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;@thegdsks&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;cut new-code duplication in the move-with-volumes handler and CLI (&lt;a href=&quot;https://github.com/glincker/levelrail/pull/466&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;#466&lt;/a&gt;) by &lt;a href=&quot;https://github.com/thegdsks&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;@thegdsks&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&quot;documentation&quot; tabindex=&quot;-1&quot;&gt;Documentation &lt;a class=&quot;header-anchor&quot; href=&quot;#documentation&quot; aria-label=&quot;Permalink to &amp;quot;Documentation&amp;quot;&quot;&gt;&amp;ZeroWidthSpace;&lt;/a&gt;&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;9 feature how-to guides plus exhaustive CLI and API reference (&lt;a href=&quot;https://github.com/glincker/levelrail/pull/446&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;#446&lt;/a&gt;) by &lt;a href=&quot;https://github.com/thegdsks&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;@thegdsks&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;cover CapRover migration, refresh roadmap against current main (&lt;a href=&quot;https://github.com/glincker/levelrail/pull/456&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;#456&lt;/a&gt;) by &lt;a href=&quot;https://github.com/thegdsks&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;@thegdsks&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;fix stale claims on the public comparison page (&lt;a href=&quot;https://github.com/glincker/levelrail/pull/457&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;#457&lt;/a&gt;) by &lt;a href=&quot;https://github.com/thegdsks&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;@thegdsks&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;details&gt;
&lt;summary&gt;Maintenance, CI, and dependency updates (1)&lt;/summary&gt;
&lt;ul&gt;
&lt;li&gt;bump github.com/google/cel-go (&lt;a href=&quot;https://github.com/glincker/levelrail/pull/455&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;#455&lt;/a&gt;)&lt;/li&gt;
&lt;/ul&gt;
&lt;/details&gt;
&lt;h2 id=&quot;container-images&quot; tabindex=&quot;-1&quot;&gt;Container images &lt;a class=&quot;header-anchor&quot; href=&quot;#container-images&quot; aria-label=&quot;Permalink to &amp;quot;Container images&amp;quot;&quot;&gt;&amp;ZeroWidthSpace;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Multi-arch (&lt;code&gt;linux/amd64&lt;/code&gt;, &lt;code&gt;linux/arm64&lt;/code&gt;), signed with cosign, SBOM and provenance attached. Also tagged &lt;code&gt;beta&lt;/code&gt; at release time (moving tags).&lt;/p&gt;
&lt;table tabindex=&quot;0&quot;&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Image&lt;/th&gt;
&lt;th&gt;Tag&lt;/th&gt;
&lt;th&gt;Digest&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;ghcr.io/glincker/levelrail-agent&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;v0.2.0-beta.2&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;sha256:301e34c411d70b40c601a56d0ef54f60e03bfc7b53559650f11b7e30f1133091&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h2 id=&quot;verify&quot; tabindex=&quot;-1&quot;&gt;Verify &lt;a class=&quot;header-anchor&quot; href=&quot;#verify&quot; aria-label=&quot;Permalink to &amp;quot;Verify&amp;quot;&quot;&gt;&amp;ZeroWidthSpace;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Images: verify the keyless signature was made by this repository's release workflow:&lt;/p&gt;
&lt;div class=&quot;language-sh vp-adaptive-theme&quot;&gt;&lt;button title=&quot;Copy Code&quot; class=&quot;copy&quot;&gt;&lt;/button&gt;&lt;span class=&quot;lang&quot;&gt;sh&lt;/span&gt;&lt;pre class=&quot;shiki shiki-themes github-light github-dark vp-code&quot; tabindex=&quot;0&quot; v-pre=&quot;&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;--shiki-light:#6F42C1;--shiki-dark:#B392F0&quot;&gt;cosign&lt;/span&gt;&lt;span style=&quot;--shiki-light:#032F62;--shiki-dark:#9ECBFF&quot;&gt; verify&lt;/span&gt;&lt;span style=&quot;--shiki-light:#032F62;--shiki-dark:#9ECBFF&quot;&gt; ghcr.io/glincker/levelrail-agent@sha256:301e34c411d70b40c601a56d0ef54f60e03bfc7b53559650f11b7e30f1133091&lt;/span&gt;&lt;span style=&quot;--shiki-light:#005CC5;--shiki-dark:#79B8FF&quot;&gt; \&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;--shiki-light:#005CC5;--shiki-dark:#79B8FF&quot;&gt;  --certificate-identity-regexp&lt;/span&gt;&lt;span style=&quot;--shiki-light:#032F62;--shiki-dark:#9ECBFF&quot;&gt; '^https://github\.com/glincker/levelrail/\.github/workflows/release\.yml@refs/(heads/main|tags/v.+)$'&lt;/span&gt;&lt;span style=&quot;--shiki-light:#005CC5;--shiki-dark:#79B8FF&quot;&gt; \&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;--shiki-light:#005CC5;--shiki-dark:#79B8FF&quot;&gt;  --certificate-oidc-issuer&lt;/span&gt;&lt;span style=&quot;--shiki-light:#032F62;--shiki-dark:#9ECBFF&quot;&gt; https://token.actions.githubusercontent.com&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;&lt;h2 id=&quot;contributors&quot; tabindex=&quot;-1&quot;&gt;Contributors &lt;a class=&quot;header-anchor&quot; href=&quot;#contributors&quot; aria-label=&quot;Permalink to &amp;quot;Contributors&amp;quot;&quot;&gt;&amp;ZeroWidthSpace;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Thanks to &lt;a href=&quot;https://github.com/thegdsks&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;@thegdsks&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Full changelog:&lt;/strong&gt; &lt;a href=&quot;https://github.com/glincker/levelrail/compare/v0.2.0-beta.1...v0.2.0-beta.2&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;v0.2.0-beta.1...v0.2.0-beta.2&lt;/a&gt; | &lt;a href=&quot;https://levelrail.glinr.com/changelog/v0-2-0-beta-2&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;Release page&lt;/a&gt; | &lt;a href=&quot;https://levelrail.glinr.com/installing&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;Installing&lt;/a&gt; | &lt;a href=&quot;https://levelrail.glinr.com/installing#upgrading&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;Upgrading&lt;/a&gt; | &lt;a href=&quot;https://levelrail.glinr.com/installing#verifying-image-signatures&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;Verifying signatures&lt;/a&gt;&lt;/p&gt;
&lt;!-- release-notes:end --&gt;
&lt;/div&gt;
</content>
  </entry>
  <entry>
    <id>https://levelrail.glinr.com/changelog/v0-2-0-beta-1</id>
    <title>Levelrail v0.2.0-beta.1: Add database stop/start lifecycle, API...</title>
    <link rel="alternate" type="text/html" href="https://levelrail.glinr.com/changelog/v0-2-0-beta-1"/>
    <published>2026-09-13T04:44:07Z</published>
    <updated>2026-09-13T04:44:07Z</updated>
    <summary>Levelrail v0.2.0-beta.1 release notes (2026-09-13). Add database stop/start lifecycle, API, CLI, and dashboard; Rank apps by live CPU, memory, and network...</summary>
    <content type="html">&lt;div v-pre&gt;
&lt;!-- release-notes:start --&gt;
&lt;div class=&quot;note custom-block github-alert&quot;&gt;&lt;p class=&quot;custom-block-title&quot;&gt;NOTE&lt;/p&gt;
&lt;p&gt;This is a pre-release on the &lt;code&gt;beta&lt;/code&gt; channel. Pin this exact version for anything you care about staying still.&lt;/p&gt;
&lt;/div&gt;
&lt;h2 id=&quot;highlights&quot; tabindex=&quot;-1&quot;&gt;Highlights &lt;a class=&quot;header-anchor&quot; href=&quot;#highlights&quot; aria-label=&quot;Permalink to &amp;quot;Highlights&amp;quot;&quot;&gt;&amp;ZeroWidthSpace;&lt;/a&gt;&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;add database stop/start lifecycle, API, CLI, and dashboard (&lt;a href=&quot;https://github.com/glincker/levelrail/pull/440&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;#440&lt;/a&gt;) by &lt;a href=&quot;https://github.com/thegdsks&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;@thegdsks&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;rank apps by live CPU, memory, and network usage on the dashboard (&lt;a href=&quot;https://github.com/glincker/levelrail/pull/443&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;#443&lt;/a&gt;) by &lt;a href=&quot;https://github.com/thegdsks&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;@thegdsks&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;add bulk restart for every app in a project (&lt;a href=&quot;https://github.com/glincker/levelrail/pull/442&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;#442&lt;/a&gt;) by &lt;a href=&quot;https://github.com/thegdsks&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;@thegdsks&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;what-s-changed&quot; tabindex=&quot;-1&quot;&gt;What's changed &lt;a class=&quot;header-anchor&quot; href=&quot;#what-s-changed&quot; aria-label=&quot;Permalink to &amp;quot;What's changed&amp;quot;&quot;&gt;&amp;ZeroWidthSpace;&lt;/a&gt;&lt;/h2&gt;
&lt;h3 id=&quot;features&quot; tabindex=&quot;-1&quot;&gt;Features &lt;a class=&quot;header-anchor&quot; href=&quot;#features&quot; aria-label=&quot;Permalink to &amp;quot;Features&amp;quot;&quot;&gt;&amp;ZeroWidthSpace;&lt;/a&gt;&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;add database stop/start lifecycle, API, CLI, and dashboard (&lt;a href=&quot;https://github.com/glincker/levelrail/pull/440&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;#440&lt;/a&gt;) by &lt;a href=&quot;https://github.com/thegdsks&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;@thegdsks&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;rank apps by live CPU, memory, and network usage on the dashboard (&lt;a href=&quot;https://github.com/glincker/levelrail/pull/443&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;#443&lt;/a&gt;) by &lt;a href=&quot;https://github.com/thegdsks&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;@thegdsks&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;add bulk restart for every app in a project (&lt;a href=&quot;https://github.com/glincker/levelrail/pull/442&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;#442&lt;/a&gt;) by &lt;a href=&quot;https://github.com/thegdsks&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;@thegdsks&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;pause and resume an entire project (&lt;a href=&quot;https://github.com/glincker/levelrail/pull/441&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;#441&lt;/a&gt;) by &lt;a href=&quot;https://github.com/thegdsks&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;@thegdsks&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;production-readiness batch - reconciler responsiveness, hardening, README (&lt;a href=&quot;https://github.com/glincker/levelrail/pull/445&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;#445&lt;/a&gt;) by &lt;a href=&quot;https://github.com/thegdsks&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;@thegdsks&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&quot;bug-fixes&quot; tabindex=&quot;-1&quot;&gt;Bug fixes &lt;a class=&quot;header-anchor&quot; href=&quot;#bug-fixes&quot; aria-label=&quot;Permalink to &amp;quot;Bug fixes&amp;quot;&quot;&gt;&amp;ZeroWidthSpace;&lt;/a&gt;&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;recognize AlreadyRunning as a done rollout condition (&lt;a href=&quot;https://github.com/glincker/levelrail/pull/439&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;#439&lt;/a&gt;) by &lt;a href=&quot;https://github.com/thegdsks&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;@thegdsks&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;install&quot; tabindex=&quot;-1&quot;&gt;Install &lt;a class=&quot;header-anchor&quot; href=&quot;#install&quot; aria-label=&quot;Permalink to &amp;quot;Install&amp;quot;&quot;&gt;&amp;ZeroWidthSpace;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Fresh install on a Linux host, pinned to this release:&lt;/p&gt;
&lt;div class=&quot;language-sh vp-adaptive-theme&quot;&gt;&lt;button title=&quot;Copy Code&quot; class=&quot;copy&quot;&gt;&lt;/button&gt;&lt;span class=&quot;lang&quot;&gt;sh&lt;/span&gt;&lt;pre class=&quot;shiki shiki-themes github-light github-dark vp-code&quot; tabindex=&quot;0&quot; v-pre=&quot;&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;--shiki-light:#6F42C1;--shiki-dark:#B392F0&quot;&gt;curl&lt;/span&gt;&lt;span style=&quot;--shiki-light:#005CC5;--shiki-dark:#79B8FF&quot;&gt; -fsSL&lt;/span&gt;&lt;span style=&quot;--shiki-light:#032F62;--shiki-dark:#9ECBFF&quot;&gt; https://raw.githubusercontent.com/glincker/levelrail/main/install.sh&lt;/span&gt;&lt;span style=&quot;--shiki-light:#D73A49;--shiki-dark:#F97583&quot;&gt; |&lt;/span&gt;&lt;span style=&quot;--shiki-light:#6F42C1;--shiki-dark:#B392F0&quot;&gt; sudo&lt;/span&gt;&lt;span style=&quot;--shiki-light:#032F62;--shiki-dark:#9ECBFF&quot;&gt; env&lt;/span&gt;&lt;span style=&quot;--shiki-light:#032F62;--shiki-dark:#9ECBFF&quot;&gt; LEVELRAIL_VERSION=v0.2.0-beta.1&lt;/span&gt;&lt;span style=&quot;--shiki-light:#032F62;--shiki-dark:#9ECBFF&quot;&gt; sh&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;&lt;p&gt;Upgrade an existing install in place (keeps the unit file and data):&lt;/p&gt;
&lt;div class=&quot;language-sh vp-adaptive-theme&quot;&gt;&lt;button title=&quot;Copy Code&quot; class=&quot;copy&quot;&gt;&lt;/button&gt;&lt;span class=&quot;lang&quot;&gt;sh&lt;/span&gt;&lt;pre class=&quot;shiki shiki-themes github-light github-dark vp-code&quot; tabindex=&quot;0&quot; v-pre=&quot;&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;--shiki-light:#6F42C1;--shiki-dark:#B392F0&quot;&gt;curl&lt;/span&gt;&lt;span style=&quot;--shiki-light:#005CC5;--shiki-dark:#79B8FF&quot;&gt; -fsSL&lt;/span&gt;&lt;span style=&quot;--shiki-light:#032F62;--shiki-dark:#9ECBFF&quot;&gt; https://raw.githubusercontent.com/glincker/levelrail/main/install.sh&lt;/span&gt;&lt;span style=&quot;--shiki-light:#D73A49;--shiki-dark:#F97583&quot;&gt; |&lt;/span&gt;&lt;span style=&quot;--shiki-light:#6F42C1;--shiki-dark:#B392F0&quot;&gt; sudo&lt;/span&gt;&lt;span style=&quot;--shiki-light:#032F62;--shiki-dark:#9ECBFF&quot;&gt; env&lt;/span&gt;&lt;span style=&quot;--shiki-light:#032F62;--shiki-dark:#9ECBFF&quot;&gt; LEVELRAIL_VERSION=v0.2.0-beta.1&lt;/span&gt;&lt;span style=&quot;--shiki-light:#032F62;--shiki-dark:#9ECBFF&quot;&gt; sh&lt;/span&gt;&lt;span style=&quot;--shiki-light:#005CC5;--shiki-dark:#79B8FF&quot;&gt; -s&lt;/span&gt;&lt;span style=&quot;--shiki-light:#032F62;--shiki-dark:#9ECBFF&quot;&gt; upgrade&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;&lt;p&gt;Docker Compose: pin the image tag in &lt;code&gt;docker-compose.yml&lt;/code&gt;:&lt;/p&gt;
&lt;div class=&quot;language-yaml vp-adaptive-theme&quot;&gt;&lt;button title=&quot;Copy Code&quot; class=&quot;copy&quot;&gt;&lt;/button&gt;&lt;span class=&quot;lang&quot;&gt;yaml&lt;/span&gt;&lt;pre class=&quot;shiki shiki-themes github-light github-dark vp-code&quot; tabindex=&quot;0&quot; v-pre=&quot;&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;--shiki-light:#22863A;--shiki-dark:#85E89D&quot;&gt;services&lt;/span&gt;&lt;span style=&quot;--shiki-light:#24292E;--shiki-dark:#E1E4E8&quot;&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;--shiki-light:#22863A;--shiki-dark:#85E89D&quot;&gt;  levelrail&lt;/span&gt;&lt;span style=&quot;--shiki-light:#24292E;--shiki-dark:#E1E4E8&quot;&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;--shiki-light:#22863A;--shiki-dark:#85E89D&quot;&gt;    image&lt;/span&gt;&lt;span style=&quot;--shiki-light:#24292E;--shiki-dark:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;--shiki-light:#032F62;--shiki-dark:#9ECBFF&quot;&gt;ghcr.io/glincker/levelrail:v0.2.0-beta.1&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;&lt;h2 id=&quot;container-images&quot; tabindex=&quot;-1&quot;&gt;Container images &lt;a class=&quot;header-anchor&quot; href=&quot;#container-images&quot; aria-label=&quot;Permalink to &amp;quot;Container images&amp;quot;&quot;&gt;&amp;ZeroWidthSpace;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Multi-arch (&lt;code&gt;linux/amd64&lt;/code&gt;, &lt;code&gt;linux/arm64&lt;/code&gt;), signed with cosign, SBOM and provenance attached. Also tagged &lt;code&gt;beta&lt;/code&gt; at release time (moving tags).&lt;/p&gt;
&lt;table tabindex=&quot;0&quot;&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Image&lt;/th&gt;
&lt;th&gt;Tag&lt;/th&gt;
&lt;th&gt;Digest&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;ghcr.io/glincker/levelrail&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;v0.2.0-beta.1&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;sha256:66d714269f82511712e7bf2001c5ff9eb407a997c43e8bc8b9363da8d852bf6a&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;ghcr.io/glincker/levelrail-agent&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;v0.2.0-beta.1&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;sha256:7795c41c2fd15bce90f351c4eb0c7d5d136254909fd5773b6715bef0d5326028&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h2 id=&quot;verify&quot; tabindex=&quot;-1&quot;&gt;Verify &lt;a class=&quot;header-anchor&quot; href=&quot;#verify&quot; aria-label=&quot;Permalink to &amp;quot;Verify&amp;quot;&quot;&gt;&amp;ZeroWidthSpace;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Binaries: check downloads against &lt;code&gt;checksums.txt&lt;/code&gt;:&lt;/p&gt;
&lt;div class=&quot;language-sh vp-adaptive-theme&quot;&gt;&lt;button title=&quot;Copy Code&quot; class=&quot;copy&quot;&gt;&lt;/button&gt;&lt;span class=&quot;lang&quot;&gt;sh&lt;/span&gt;&lt;pre class=&quot;shiki shiki-themes github-light github-dark vp-code&quot; tabindex=&quot;0&quot; v-pre=&quot;&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;--shiki-light:#6F42C1;--shiki-dark:#B392F0&quot;&gt;gh&lt;/span&gt;&lt;span style=&quot;--shiki-light:#032F62;--shiki-dark:#9ECBFF&quot;&gt; release&lt;/span&gt;&lt;span style=&quot;--shiki-light:#032F62;--shiki-dark:#9ECBFF&quot;&gt; download&lt;/span&gt;&lt;span style=&quot;--shiki-light:#032F62;--shiki-dark:#9ECBFF&quot;&gt; v0.2.0-beta.1&lt;/span&gt;&lt;span style=&quot;--shiki-light:#005CC5;--shiki-dark:#79B8FF&quot;&gt; --repo&lt;/span&gt;&lt;span style=&quot;--shiki-light:#032F62;--shiki-dark:#9ECBFF&quot;&gt; glincker/levelrail&lt;/span&gt;&lt;span style=&quot;--shiki-light:#005CC5;--shiki-dark:#79B8FF&quot;&gt; --pattern&lt;/span&gt;&lt;span style=&quot;--shiki-light:#032F62;--shiki-dark:#9ECBFF&quot;&gt; 'levelrail-linux-amd64'&lt;/span&gt;&lt;span style=&quot;--shiki-light:#005CC5;--shiki-dark:#79B8FF&quot;&gt; --pattern&lt;/span&gt;&lt;span style=&quot;--shiki-light:#032F62;--shiki-dark:#9ECBFF&quot;&gt; checksums.txt&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;--shiki-light:#6F42C1;--shiki-dark:#B392F0&quot;&gt;sha256sum&lt;/span&gt;&lt;span style=&quot;--shiki-light:#005CC5;--shiki-dark:#79B8FF&quot;&gt; --ignore-missing&lt;/span&gt;&lt;span style=&quot;--shiki-light:#005CC5;--shiki-dark:#79B8FF&quot;&gt; -c&lt;/span&gt;&lt;span style=&quot;--shiki-light:#032F62;--shiki-dark:#9ECBFF&quot;&gt; checksums.txt&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;&lt;p&gt;Images: verify the keyless signature was made by this repository's release workflow:&lt;/p&gt;
&lt;div class=&quot;language-sh vp-adaptive-theme&quot;&gt;&lt;button title=&quot;Copy Code&quot; class=&quot;copy&quot;&gt;&lt;/button&gt;&lt;span class=&quot;lang&quot;&gt;sh&lt;/span&gt;&lt;pre class=&quot;shiki shiki-themes github-light github-dark vp-code&quot; tabindex=&quot;0&quot; v-pre=&quot;&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;--shiki-light:#6F42C1;--shiki-dark:#B392F0&quot;&gt;cosign&lt;/span&gt;&lt;span style=&quot;--shiki-light:#032F62;--shiki-dark:#9ECBFF&quot;&gt; verify&lt;/span&gt;&lt;span style=&quot;--shiki-light:#032F62;--shiki-dark:#9ECBFF&quot;&gt; ghcr.io/glincker/levelrail@sha256:66d714269f82511712e7bf2001c5ff9eb407a997c43e8bc8b9363da8d852bf6a&lt;/span&gt;&lt;span style=&quot;--shiki-light:#005CC5;--shiki-dark:#79B8FF&quot;&gt; \&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;--shiki-light:#005CC5;--shiki-dark:#79B8FF&quot;&gt;  --certificate-identity-regexp&lt;/span&gt;&lt;span style=&quot;--shiki-light:#032F62;--shiki-dark:#9ECBFF&quot;&gt; '^https://github\.com/glincker/levelrail/\.github/workflows/release\.yml@refs/(heads/main|tags/v.+)$'&lt;/span&gt;&lt;span style=&quot;--shiki-light:#005CC5;--shiki-dark:#79B8FF&quot;&gt; \&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;--shiki-light:#005CC5;--shiki-dark:#79B8FF&quot;&gt;  --certificate-oidc-issuer&lt;/span&gt;&lt;span style=&quot;--shiki-light:#032F62;--shiki-dark:#9ECBFF&quot;&gt; https://token.actions.githubusercontent.com&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;&lt;h2 id=&quot;contributors&quot; tabindex=&quot;-1&quot;&gt;Contributors &lt;a class=&quot;header-anchor&quot; href=&quot;#contributors&quot; aria-label=&quot;Permalink to &amp;quot;Contributors&amp;quot;&quot;&gt;&amp;ZeroWidthSpace;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Thanks to &lt;a href=&quot;https://github.com/thegdsks&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;@thegdsks&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Full changelog:&lt;/strong&gt; &lt;a href=&quot;https://github.com/glincker/levelrail/compare/v0.2.0-beta...v0.2.0-beta.1&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;v0.2.0-beta...v0.2.0-beta.1&lt;/a&gt; | &lt;a href=&quot;https://levelrail.glinr.com/changelog/v0-2-0-beta-1&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;Release page&lt;/a&gt; | &lt;a href=&quot;https://levelrail.glinr.com/installing&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;Installing&lt;/a&gt; | &lt;a href=&quot;https://levelrail.glinr.com/installing#upgrading&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;Upgrading&lt;/a&gt; | &lt;a href=&quot;https://levelrail.glinr.com/installing#verifying-image-signatures&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;Verifying signatures&lt;/a&gt;&lt;/p&gt;
&lt;!-- release-notes:end --&gt;
&lt;/div&gt;
</content>
  </entry>
  <entry>
    <id>https://levelrail.glinr.com/changelog/v0-2-0-beta</id>
    <title>Levelrail v0.2.0-beta: Add CLI metrics query and live log tailing...</title>
    <link rel="alternate" type="text/html" href="https://levelrail.glinr.com/changelog/v0-2-0-beta"/>
    <published>2026-09-12T22:49:04Z</published>
    <updated>2026-09-12T22:49:04Z</updated>
    <summary>Levelrail v0.2.0-beta release notes (2026-09-12). Add CLI metrics query and live log tailing; Add VitePress docs and landing site for GitHub Pages...</summary>
    <content type="html">&lt;div v-pre&gt;
&lt;h2 id=&quot;_0-2-0-beta-2026-09-12&quot; tabindex=&quot;-1&quot;&gt;&lt;a href=&quot;https://github.com/glincker/levelrail/compare/v0.1.0...v0.2.0-beta&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;0.2.0-beta&lt;/a&gt; (2026-09-12) &lt;a class=&quot;header-anchor&quot; href=&quot;#_0-2-0-beta-2026-09-12&quot; aria-label=&quot;Permalink to &amp;quot;[0.2.0-beta](https://github.com/glincker/levelrail/compare/v0.1.0...v0.2.0-beta) (2026-09-12)&amp;quot;&quot;&gt;&amp;ZeroWidthSpace;&lt;/a&gt;&lt;/h2&gt;
&lt;h3 id=&quot;features&quot; tabindex=&quot;-1&quot;&gt;Features &lt;a class=&quot;header-anchor&quot; href=&quot;#features&quot; aria-label=&quot;Permalink to &amp;quot;Features&amp;quot;&quot;&gt;&amp;ZeroWidthSpace;&lt;/a&gt;&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;add CLI metrics query and live log tailing (&lt;a href=&quot;https://github.com/glincker/levelrail/issues/394&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;#394&lt;/a&gt;) (&lt;a href=&quot;https://github.com/glincker/levelrail/commit/41d253c05f6082c32be4647dc27971f02c2bfbdb&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;41d253c&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;add VitePress docs and landing site for GitHub Pages (&lt;a href=&quot;https://github.com/glincker/levelrail/issues/387&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;#387&lt;/a&gt;) (&lt;a href=&quot;https://github.com/glincker/levelrail/commit/e2b3ee1b61a07941dcb0db7c1f02858937b7cbba&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;e2b3ee1&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;alert/channel editing, deploy-notify+promote MCP, secrets at app-create, reconciler test gaps (&lt;a href=&quot;https://github.com/glincker/levelrail/issues/433&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;#433&lt;/a&gt;) (&lt;a href=&quot;https://github.com/glincker/levelrail/commit/22e6032c433b270e5d666a0b85c57775b1be3681&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;22e6032&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;close CLI feature-completeness gaps for settings, storage, and git apps (&lt;a href=&quot;https://github.com/glincker/levelrail/issues/396&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;#396&lt;/a&gt;) (&lt;a href=&quot;https://github.com/glincker/levelrail/commit/ebf8362e4151b7ee602bd5ea27b7fb6328f3e597&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;ebf8362&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;compose command/bind-mounts, self-service invites, more templates/tools/channels, e2e hardening (&lt;a href=&quot;https://github.com/glincker/levelrail/commit/53846e6537255552e2ab0cadda461121546a1823&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;53846e6&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;compose entrypoint, app.yaml command/bind-mounts, external registry browsing, more templates and MCP tools (&lt;a href=&quot;https://github.com/glincker/levelrail/issues/385&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;#385&lt;/a&gt;) (&lt;a href=&quot;https://github.com/glincker/levelrail/commit/753b57f8b84a3f2e6f39717db264e55441f9d6a6&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;753b57f&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;dispatch builds to a remote build node over the agent transport (&lt;a href=&quot;https://github.com/glincker/levelrail/issues/432&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;#432&lt;/a&gt;) (&lt;a href=&quot;https://github.com/glincker/levelrail/commit/0a269e3939df9a9fc12cbb459c5f912d9c97a638&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;0a269e3&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;ephemeral database per preview environment (&lt;a href=&quot;https://github.com/glincker/levelrail/issues/397&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;#397&lt;/a&gt;) (&lt;a href=&quot;https://github.com/glincker/levelrail/commit/fc0820226eb1e326cb09487acae485b39c5b543e&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;fc08202&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;interactive exec terminal over WebSocket (&lt;a href=&quot;https://github.com/glincker/levelrail/issues/436&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;#436&lt;/a&gt;) (&lt;a href=&quot;https://github.com/glincker/levelrail/commit/27266e33c9970bcbf9a3b71b8553d68a8ad18c07&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;27266e3&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;liveness probing and automatic restart (&lt;a href=&quot;https://github.com/glincker/levelrail/issues/434&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;#434&lt;/a&gt;) (&lt;a href=&quot;https://github.com/glincker/levelrail/commit/37256933b45db253dbf07784f729cf2b7812d41a&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;3725693&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;node-move teardown fix, simple spread scheduling, CLI/MCP completeness batch (&lt;a href=&quot;https://github.com/glincker/levelrail/issues/395&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;#395&lt;/a&gt;) (&lt;a href=&quot;https://github.com/glincker/levelrail/commit/c8c9e5fa2939fbb3384fc5c628d3fd0d762324be&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;c8c9e5f&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;opt-in per-domain WAF and rate limiting for embedded ingress (&lt;a href=&quot;https://github.com/glincker/levelrail/issues/398&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;#398&lt;/a&gt;) (&lt;a href=&quot;https://github.com/glincker/levelrail/commit/6df1bb0e5d96f9e7b71bf8bcb9f6b400b26dc9e6&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;6df1bb0&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;remote exec and Docker networking over the agent transport (&lt;a href=&quot;https://github.com/glincker/levelrail/issues/399&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;#399&lt;/a&gt;) (&lt;a href=&quot;https://github.com/glincker/levelrail/commit/610afd57f10ee01d71ca597dd9e0ca8d07bda465&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;610afd5&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;replace guesswork form fields with real pickers and suggestions (&lt;a href=&quot;https://github.com/glincker/levelrail/issues/437&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;#437&lt;/a&gt;) (&lt;a href=&quot;https://github.com/glincker/levelrail/commit/39f9c5d9d40753974c3eea5eb20c087f30c381ec&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;39f9c5d&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;TLS for managed Postgres and Redis connections (&lt;a href=&quot;https://github.com/glincker/levelrail/issues/364&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;#364&lt;/a&gt;) (&lt;a href=&quot;https://github.com/glincker/levelrail/commit/613833521837c91b6635d83df7b35a9c68169b77&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;6138335&lt;/a&gt;)&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&quot;bug-fixes&quot; tabindex=&quot;-1&quot;&gt;Bug Fixes &lt;a class=&quot;header-anchor&quot; href=&quot;#bug-fixes&quot; aria-label=&quot;Permalink to &amp;quot;Bug Fixes&amp;quot;&quot;&gt;&amp;ZeroWidthSpace;&lt;/a&gt;&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;address containerd and docs-site dependabot alerts (&lt;a href=&quot;https://github.com/glincker/levelrail/issues/392&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;#392&lt;/a&gt;) (&lt;a href=&quot;https://github.com/glincker/levelrail/commit/148094b8e5adac6c22b16da0e2bc34745e56656a&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;148094b&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;chain release.yml to actually run after release-please tags a release (&lt;a href=&quot;https://github.com/glincker/levelrail/issues/373&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;#373&lt;/a&gt;) (&lt;a href=&quot;https://github.com/glincker/levelrail/commit/7c8a6bb19ac1d6c64441b97956e0b55c3a0783c6&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;7c8a6bb&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;derive Select trigger label automatically from item children (&lt;a href=&quot;https://github.com/glincker/levelrail/issues/438&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;#438&lt;/a&gt;) (&lt;a href=&quot;https://github.com/glincker/levelrail/commit/849f2def05460a6319434b72f59b601f096c4ee5&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;849f2de&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;make manual release.yml dispatch actually target the right tag (&lt;a href=&quot;https://github.com/glincker/levelrail/issues/375&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;#375&lt;/a&gt;) (&lt;a href=&quot;https://github.com/glincker/levelrail/commit/d52596da829e977ddd4cd28b5d985fed16d526b0&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;d52596d&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;pin cel-go to v0.28.1, restoring build compatibility with caddy (&lt;a href=&quot;https://github.com/glincker/levelrail/issues/389&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;#389&lt;/a&gt;) (&lt;a href=&quot;https://github.com/glincker/levelrail/commit/0b4695b64d6ca357169a310faa72838e686007dd&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;0b4695b&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;raise Docker image build timeout and add layer caching (&lt;a href=&quot;https://github.com/glincker/levelrail/issues/378&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;#378&lt;/a&gt;) (&lt;a href=&quot;https://github.com/glincker/levelrail/commit/d3732f1be1a77bab94fedaf8dd34e169843d4438&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;d3732f1&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;route error components against unknown, not Error (&lt;a href=&quot;https://github.com/glincker/levelrail/issues/431&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;#431&lt;/a&gt;) (&lt;a href=&quot;https://github.com/glincker/levelrail/commit/3903d1f6f6da9f23953adc8cbca1f8bc99813ed8&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;3903d1f&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;spread drained resources across nodes, warn on dropped depends_on (&lt;a href=&quot;https://github.com/glincker/levelrail/issues/435&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;#435&lt;/a&gt;) (&lt;a href=&quot;https://github.com/glincker/levelrail/commit/6a418ebf8c35425a659499f5640933044bf6aa91&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;6a418eb&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;stop and remove containers when a service is deleted (&lt;a href=&quot;https://github.com/glincker/levelrail/issues/381&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;#381&lt;/a&gt;) (&lt;a href=&quot;https://github.com/glincker/levelrail/commit/a608ebbab2fae7fd4a76c20642f8391b995c623d&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;a608ebb&lt;/a&gt;)&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&quot;performance-improvements&quot; tabindex=&quot;-1&quot;&gt;Performance Improvements &lt;a class=&quot;header-anchor&quot; href=&quot;#performance-improvements&quot; aria-label=&quot;Permalink to &amp;quot;Performance Improvements&amp;quot;&quot;&gt;&amp;ZeroWidthSpace;&lt;/a&gt;&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;build Docker images on native per-arch runners instead of QEMU (&lt;a href=&quot;https://github.com/glincker/levelrail/issues/380&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;#380&lt;/a&gt;) (&lt;a href=&quot;https://github.com/glincker/levelrail/commit/c42d372648b0dfd3622b9192c7a36daaca93b6db&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;c42d372&lt;/a&gt;)&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
</content>
  </entry>
  <entry>
    <id>https://levelrail.glinr.com/changelog/v0-1-0</id>
    <title>Levelrail v0.1.0: Actionable restart-required toast for health...</title>
    <link rel="alternate" type="text/html" href="https://levelrail.glinr.com/changelog/v0-1-0"/>
    <published>2026-09-09T05:27:06Z</published>
    <updated>2026-09-09T05:27:06Z</updated>
    <summary>Levelrail v0.1.0 release notes (2026-09-09). Actionable restart-required toast for health check and resource limit saves; Actionable restart-required toast...</summary>
    <content type="html">&lt;div v-pre&gt;
&lt;h2 id=&quot;_0-1-0-2026-09-09&quot; tabindex=&quot;-1&quot;&gt;0.1.0 (2026-09-09) &lt;a class=&quot;header-anchor&quot; href=&quot;#_0-1-0-2026-09-09&quot; aria-label=&quot;Permalink to &amp;quot;0.1.0 (2026-09-09)&amp;quot;&quot;&gt;&amp;ZeroWidthSpace;&lt;/a&gt;&lt;/h2&gt;
&lt;h3 id=&quot;features&quot; tabindex=&quot;-1&quot;&gt;Features &lt;a class=&quot;header-anchor&quot; href=&quot;#features&quot; aria-label=&quot;Permalink to &amp;quot;Features&amp;quot;&quot;&gt;&amp;ZeroWidthSpace;&lt;/a&gt;&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;actionable restart-required toast for health check and resource limit saves (&lt;a href=&quot;https://github.com/glincker/levelrail/commit/e21390cc08af1853365433aadae12313238866be&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;e21390c&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;actionable restart-required toast for health check and resource limit saves (&lt;a href=&quot;https://github.com/glincker/levelrail/commit/e7112c92bb474340bcd3cffb089232b571eb6a15&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;e7112c9&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;add a restart action for apps (&lt;a href=&quot;https://github.com/glincker/levelrail/commit/99f4873d4a914b8634e005cbdaec8ca579f52c1d&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;99f4873&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;add a restart action for apps (&lt;a href=&quot;https://github.com/glincker/levelrail/commit/4a8287d014754372faa1edbd500079594738f5ea&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;4a8287d&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;add age-based backup retention alongside count-based retention (&lt;a href=&quot;https://github.com/glincker/levelrail/issues/194&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;#194&lt;/a&gt;) (&lt;a href=&quot;https://github.com/glincker/levelrail/commit/64db57ef777745f0e7b63a2e598bece2cb3c3532&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;64db57e&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;add backup targets settings page (&lt;a href=&quot;https://github.com/glincker/levelrail/commit/c2a061990d2464155d7f215a0c25980b0b139c64&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;c2a0619&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;add build.base_directory for monorepo subdirectory builds (&lt;a href=&quot;https://github.com/glincker/levelrail/issues/139&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;#139&lt;/a&gt;) (&lt;a href=&quot;https://github.com/glincker/levelrail/commit/afb0a5327bdb1b09b06db2656eaca636a81e4265&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;afb0a53&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;add CLI support for deploying a Docker Compose file (&lt;a href=&quot;https://github.com/glincker/levelrail/issues/109&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;#109&lt;/a&gt;) (&lt;a href=&quot;https://github.com/glincker/levelrail/commit/0eb9b35ac8720312d7b4677fa911bb5df45634c7&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;0eb9b35&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;add cloudflare-tunnel CLI subcommands (&lt;a href=&quot;https://github.com/glincker/levelrail/issues/188&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;#188&lt;/a&gt;) (&lt;a href=&quot;https://github.com/glincker/levelrail/commit/a1cc9c652ab1dd3a18b31303a10e7b9033552e29&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;a1cc9c6&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;add CPU/memory quick-stat cards to app overview (&lt;a href=&quot;https://github.com/glincker/levelrail/issues/163&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;#163&lt;/a&gt;) (&lt;a href=&quot;https://github.com/glincker/levelrail/commit/416009403e2feee2d7f3eac66086a7890ce2ad44&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;4160094&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;add dashboard home page at / (&lt;a href=&quot;https://github.com/glincker/levelrail/commit/4bd810d2a81db6b2fbe82476ad39d9402899ab60&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;4bd810d&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;add developer-view raw text editor for env vars (&lt;a href=&quot;https://github.com/glincker/levelrail/commit/4300911955da26a9e3be5cd2a1049d8364656da9&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;4300911&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;add Dokploy as a migrate CLI source (&lt;a href=&quot;https://github.com/glincker/levelrail/issues/135&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;#135&lt;/a&gt;) (&lt;a href=&quot;https://github.com/glincker/levelrail/commit/dcef119c511a03428f6be218ebb9459002cc6432&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;dcef119&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;add Dragonfly and ClickHouse as managed database engines (&lt;a href=&quot;https://github.com/glincker/levelrail/issues/145&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;#145&lt;/a&gt;) (&lt;a href=&quot;https://github.com/glincker/levelrail/commit/b75a7d2708a0a88d03ded6e084c200b2c675d0ce&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;b75a7d2&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;add editable port control to app overview page (&lt;a href=&quot;https://github.com/glincker/levelrail/commit/8c5bd1e82a6ebd1a64b387eea7fa5ffea170fd20&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;8c5bd1e&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;add environment-level shared env var tier between project and app (&lt;a href=&quot;https://github.com/glincker/levelrail/issues/195&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;#195&lt;/a&gt;) (&lt;a href=&quot;https://github.com/glincker/levelrail/commit/0fede7b4e5f6cddb56323dd7ff320524e7cd6b6f&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;0fede7b&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;add fullscreen size variant to dialog primitive (&lt;a href=&quot;https://github.com/glincker/levelrail/commit/4b57d395fab0432462e6635475f08fb9423d44c8&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;4b57d39&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;add fullscreen toggle to the create resource wizard (&lt;a href=&quot;https://github.com/glincker/levelrail/commit/31066210a39b3e8ab5fa30e7676d1cd0b666889c&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;3106621&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;add GET .../secrets and POST .../secrets/{key}/lock endpoints (&lt;a href=&quot;https://github.com/glincker/levelrail/commit/7aa3c46a6de97d28024399f4a038eef6c761613a&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;7aa3c46&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;add interactive wizard mode to apps create (&lt;a href=&quot;https://github.com/glincker/levelrail/issues/239&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;#239&lt;/a&gt;) (&lt;a href=&quot;https://github.com/glincker/levelrail/commit/0207202d5554c55097863cdd939c34a97761ee10&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;0207202&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;add interactive wizard mode to databases create (&lt;a href=&quot;https://github.com/glincker/levelrail/issues/245&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;#245&lt;/a&gt;) (&lt;a href=&quot;https://github.com/glincker/levelrail/commit/106cd537464e1b870ce00af0bcac9d99bc482644&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;106cd53&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;add levelrail-cli doctor command for local preflight health checks (&lt;a href=&quot;https://github.com/glincker/levelrail/issues/265&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;#265&lt;/a&gt;) (&lt;a href=&quot;https://github.com/glincker/levelrail/commit/91d20dbff0ef90b5e359c69b9aba897d343cbbed&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;91d20db&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;add list_audit_log MCP tool (&lt;a href=&quot;https://github.com/glincker/levelrail/issues/285&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;#285&lt;/a&gt;) (&lt;a href=&quot;https://github.com/glincker/levelrail/commit/4eb5ca5faedd97dfebe41873b0c0eb1a97a529a1&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;4eb5ca5&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;add loading states across dashboard routes and data-fetching components (&lt;a href=&quot;https://github.com/glincker/levelrail/issues/248&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;#248&lt;/a&gt;) (&lt;a href=&quot;https://github.com/glincker/levelrail/commit/a91e388239a2b4fceb69d88161322c09a90ef53c&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;a91e388&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;add MariaDB and KeyDB managed database engines (&lt;a href=&quot;https://github.com/glincker/levelrail/issues/141&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;#141&lt;/a&gt;) (&lt;a href=&quot;https://github.com/glincker/levelrail/commit/01716bca231d2873452d62722c397f2424ef85b6&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;01716bc&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;add MCP server, extract shared internal/apiclient package (&lt;a href=&quot;https://github.com/glincker/levelrail/issues/121&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;#121&lt;/a&gt;) (&lt;a href=&quot;https://github.com/glincker/levelrail/commit/e354a10dfe750be5d8a7317f54f7f875903eb385&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;e354a10&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;add migrate caprover CLI command (&lt;a href=&quot;https://github.com/glincker/levelrail/issues/191&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;#191&lt;/a&gt;) (&lt;a href=&quot;https://github.com/glincker/levelrail/commit/910081dbfd869dc7fb26830c429cbf13fc39445c&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;910081d&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;add Network tab showing live traffic path from domain to container (&lt;a href=&quot;https://github.com/glincker/levelrail/issues/148&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;#148&lt;/a&gt;) (&lt;a href=&quot;https://github.com/glincker/levelrail/commit/f29d82746efc76ea659dd1c9634d95b7aa326957&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;f29d827&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;add nodes CLI subcommands (&lt;a href=&quot;https://github.com/glincker/levelrail/issues/192&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;#192&lt;/a&gt;) (&lt;a href=&quot;https://github.com/glincker/levelrail/commit/abea2318dbc98f7615d8917232f8a81560a791e5&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;abea231&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;add non-interactive exec endpoint for running commands in app containers (&lt;a href=&quot;https://github.com/glincker/levelrail/commit/c5c86f8e21da5aa1280337ce03e4f5048b9f86a8&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;c5c86f8&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;add organization-level shared env var tier above projects (&lt;a href=&quot;https://github.com/glincker/levelrail/issues/193&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;#193&lt;/a&gt;) (&lt;a href=&quot;https://github.com/glincker/levelrail/commit/59d737be30dc98ed807df604ca6bc91d449407ce&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;59d737b&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;add periodic OS package-update check per node (&lt;a href=&quot;https://github.com/glincker/levelrail/issues/220&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;#220&lt;/a&gt;) (&lt;a href=&quot;https://github.com/glincker/levelrail/commit/0d1a1d8a8e6f45050683b78db07e38fc3a99cf2e&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;0d1a1d8&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;add projects CRUD, project env vars, and project membership to the CLI (&lt;a href=&quot;https://github.com/glincker/levelrail/issues/250&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;#250&lt;/a&gt;) (&lt;a href=&quot;https://github.com/glincker/levelrail/commit/e8047359c20baa765170dc53874ca135e5ac6a7d&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;e804735&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;add reversible per-secret lock to the store layer (&lt;a href=&quot;https://github.com/glincker/levelrail/commit/bf808e55d9cfb82905c3bb318acdec89470a25e6&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;bf808e5&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;add secret key listing and lock mutation hooks (&lt;a href=&quot;https://github.com/glincker/levelrail/commit/97136ceed18d5d1634fb048ad41f46ce479643ea&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;97136ce&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;add settings sub-sidebar and fix stale route tree (&lt;a href=&quot;https://github.com/glincker/levelrail/issues/222&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;#222&lt;/a&gt;) (&lt;a href=&quot;https://github.com/glincker/levelrail/commit/428a5df170ef380c4231a137c6d1150a31d04eae&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;428a5df&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;add SetValueGuarded, ListKeys, SetLocked to secrets.Manager (&lt;a href=&quot;https://github.com/glincker/levelrail/commit/996ed50d08386364b466bc57ad3f7708f03cc26f&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;996ed50&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;add structured issue templates and type-specific PR templates (&lt;a href=&quot;https://github.com/glincker/levelrail/issues/77&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;#77&lt;/a&gt;) (&lt;a href=&quot;https://github.com/glincker/levelrail/commit/729a4ea1784859284da47115939bb5a12d5a04b0&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;729a4ea&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;add System status dashboard page (&lt;a href=&quot;https://github.com/glincker/levelrail/issues/324&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;#324&lt;/a&gt;) (&lt;a href=&quot;https://github.com/glincker/levelrail/commit/b20f380f01ae5505ec3a8bba3521a0350f052ea9&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;b20f380&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;add test-connection action for backup targets (&lt;a href=&quot;https://github.com/glincker/levelrail/issues/307&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;#307&lt;/a&gt;) (&lt;a href=&quot;https://github.com/glincker/levelrail/commit/5d94dc07c4c370b5cf284002df454dcf3a609f63&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;5d94dc0&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;admin recovery email, general email capability, forgot-password flow (&lt;a href=&quot;https://github.com/glincker/levelrail/commit/b384f3528d5b6a513cc730a70346244068080740&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;b384f35&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;admin recovery email, general email capability, forgot-password flow (backend) (&lt;a href=&quot;https://github.com/glincker/levelrail/commit/2d8b8d05cb99c11ff24cc189cff196e317404222&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;2d8b8d0&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;alert on repeated scheduled task failures (&lt;a href=&quot;https://github.com/glincker/levelrail/issues/290&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;#290&lt;/a&gt;) (&lt;a href=&quot;https://github.com/glincker/levelrail/commit/ed20b7d5c87bbc68cc7973fbed9ecdc384d0dea7&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;ed20b7d&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;allow clickhouse as an app.yaml database engine (&lt;a href=&quot;https://github.com/glincker/levelrail/issues/186&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;#186&lt;/a&gt;) (&lt;a href=&quot;https://github.com/glincker/levelrail/commit/5b957b58e00c477eb25de0d0b146c7bfd99ce2c9&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;5b957b5&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;allow pinning a service's host port (&lt;a href=&quot;https://github.com/glincker/levelrail/issues/170&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;#170&lt;/a&gt;) (&lt;a href=&quot;https://github.com/glincker/levelrail/commit/f861ea1e3d982910657f721a3b64038e7c3e3aa3&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;f861ea1&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;App Clone (&lt;a href=&quot;https://github.com/glincker/levelrail/commit/78cf10e547e7a581f43bdcc2b0fe306d23cf8979&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;78cf10e&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;App Clone (&lt;a href=&quot;https://github.com/glincker/levelrail/commit/aed12f5916f457605940d685ff02c5852ae115de&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;aed12f5&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;app detail screen polish - deploy history, grouped nav, build hints, convergence (&lt;a href=&quot;https://github.com/glincker/levelrail/commit/ceddf79d04b658200e4d44331f18c3fe6e607386&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;ceddf79&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;App Overview hero+checklist, batched Apps list status (&lt;a href=&quot;https://github.com/glincker/levelrail/commit/7e10b6eeb7c8bbb935fc873223c669919ae03a27&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;7e10b6e&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;App Overview hero+checklist, batched Apps list status (&lt;a href=&quot;https://github.com/glincker/levelrail/commit/9fdc4e599eb08f4175ded0dd0e1fb01a84f21f38&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;9fdc4e5&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;app volume backups (backend, API, CLI, and web UI) (&lt;a href=&quot;https://github.com/glincker/levelrail/issues/311&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;#311&lt;/a&gt;) (&lt;a href=&quot;https://github.com/glincker/levelrail/commit/9dccec3dd123b90656c92c6488f32a0906ff91c3&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;9dccec3&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;app-detail polish - deploy columns, grouped nav, convergence badge, build-log hints (&lt;a href=&quot;https://github.com/glincker/levelrail/commit/fa81b988a4f00af2d2c210550245ebfb2fb32be5&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;fa81b98&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;app-level scheduled tasks (&lt;a href=&quot;https://github.com/glincker/levelrail/issues/140&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;#140&lt;/a&gt;) (&lt;a href=&quot;https://github.com/glincker/levelrail/commit/fb66f24590afa604866d5152665c750d4aa5aee3&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;fb66f24&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;apply resource limit changes to running containers live (&lt;a href=&quot;https://github.com/glincker/levelrail/issues/242&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;#242&lt;/a&gt;) (&lt;a href=&quot;https://github.com/glincker/levelrail/commit/c8f33cba9c52d6bd23b17ee8f4debc3f59942ee3&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;c8f33cb&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;apps deploy/status/logs and databases commands for the CLI (&lt;a href=&quot;https://github.com/glincker/levelrail/commit/89e0143b406087f384b2ddba327cd9f60260d114&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;89e0143&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;apps restart/rollback CLI subcommands (&lt;a href=&quot;https://github.com/glincker/levelrail/commit/6f0f6b349d3a8ea27bd28e4189e86b2f1a482a2c&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;6f0f6b3&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;apps restart/rollback CLI subcommands (&lt;a href=&quot;https://github.com/glincker/levelrail/commit/6932e1080dea635a626b6b0fad909922e10f3d23&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;6932e10&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;apps table + read-path for multi-service app support (stage 1) (&lt;a href=&quot;https://github.com/glincker/levelrail/issues/61&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;#61&lt;/a&gt;) (&lt;a href=&quot;https://github.com/glincker/levelrail/commit/5cd187f9812229f94c613f97c8f319b9d61039d3&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;5cd187f&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;attribute audit log entries to their client and add retention (&lt;a href=&quot;https://github.com/glincker/levelrail/issues/316&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;#316&lt;/a&gt;) (&lt;a href=&quot;https://github.com/glincker/levelrail/commit/7bbe9c7139b1980e40de2e92a6deeb14a73cce49&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;7bbe9c7&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;audit log CSV export via API, dashboard, and CLI (&lt;a href=&quot;https://github.com/glincker/levelrail/issues/277&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;#277&lt;/a&gt;) (&lt;a href=&quot;https://github.com/glincker/levelrail/commit/9dc536df25d7bf0f43bf677b5b4dd0e63c032382&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;9dc536d&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;audit log for write/deploy/root-tier requests (&lt;a href=&quot;https://github.com/glincker/levelrail/issues/125&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;#125&lt;/a&gt;) (&lt;a href=&quot;https://github.com/glincker/levelrail/commit/665cb0c0ef3c7e2c2ac21d8a89c5990c8b30afda&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;665cb0c&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;auto-generate and persist master key on first boot (&lt;a href=&quot;https://github.com/glincker/levelrail/issues/60&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;#60&lt;/a&gt;) (&lt;a href=&quot;https://github.com/glincker/levelrail/commit/72265b0677b836128240ea4e71f1993fa20b36c7&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;72265b0&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;auto-verify scheduled backups right after they complete (&lt;a href=&quot;https://github.com/glincker/levelrail/issues/280&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;#280&lt;/a&gt;) (&lt;a href=&quot;https://github.com/glincker/levelrail/commit/51722a84f0c7bd21581451b008feca823a16f6ed&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;51722a8&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;backup file download to browser (&lt;a href=&quot;https://github.com/glincker/levelrail/commit/3d6e8e9a0b8e4efb10377762b90d4a762cb38422&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;3d6e8e9&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;backup file download to browser (&lt;a href=&quot;https://github.com/glincker/levelrail/commit/6599a88f13c1d40bbd3ee80cecd3e30ac749a66d&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;6599a88&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;backup integrity verification (&lt;a href=&quot;https://github.com/glincker/levelrail/issues/273&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;#273&lt;/a&gt;) (&lt;a href=&quot;https://github.com/glincker/levelrail/commit/162dd0e38b6b8ee0d0446fdf27a6bd4159f488a8&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;162dd0e&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;backup target onboarding, connect an S3-compatible bucket (&lt;a href=&quot;https://github.com/glincker/levelrail/commit/25fab5227a2201cb28ec41981b13ba75a76cbd5c&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;25fab52&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;bounded health check and opt-in ufw setup in install.sh (&lt;a href=&quot;https://github.com/glincker/levelrail/issues/323&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;#323&lt;/a&gt;) (&lt;a href=&quot;https://github.com/glincker/levelrail/commit/060408f55ec04df92d8233a52d27f4157a9707fd&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;060408f&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;breadcrumb and hierarchical navigation for org/project/environment/app (&lt;a href=&quot;https://github.com/glincker/levelrail/issues/173&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;#173&lt;/a&gt;) (&lt;a href=&quot;https://github.com/glincker/levelrail/commit/145ab27ba1a15822c9b15c4b0cf9da951d3eee38&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;145ab27&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;browse and deploy from the curated service-template catalog (&lt;a href=&quot;https://github.com/glincker/levelrail/issues/119&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;#119&lt;/a&gt;) (&lt;a href=&quot;https://github.com/glincker/levelrail/commit/ccecb1f41b578b88d23b09d281b3f83dba5a4f09&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;ccecb1f&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;build Docker Compose services with build: directives (&lt;a href=&quot;https://github.com/glincker/levelrail/issues/190&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;#190&lt;/a&gt;) (&lt;a href=&quot;https://github.com/glincker/levelrail/commit/fbaa87e41705fa74ddc9b862753e7b02a7dbd32c&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;fbaa87e&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;build pack selector and branch picker for git app creation (&lt;a href=&quot;https://github.com/glincker/levelrail/commit/94d80c6279d5b95f50961f5b5e60468e68cc6b7f&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;94d80c6&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;build pack selector and branch picker for git app creation (&lt;a href=&quot;https://github.com/glincker/levelrail/commit/97aeeacb89ed1e3e3f076f9349230551f3b6ac43&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;97aeeac&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;build.type: image, deploy a prebuilt registry image with no build (&lt;a href=&quot;https://github.com/glincker/levelrail/issues/124&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;#124&lt;/a&gt;) (&lt;a href=&quot;https://github.com/glincker/levelrail/commit/5e41b5ead569d3683cf3819ba701e79e1ba25bcf&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;5e41b5e&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;built-in container registry (&lt;a href=&quot;https://github.com/glincker/levelrail/issues/366&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;#366&lt;/a&gt;) (&lt;a href=&quot;https://github.com/glincker/levelrail/commit/56dc8d6e11b55994c2b980e07b5649c34f500989&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;56dc8d6&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;BYO TLS certificate upload for domains (&lt;a href=&quot;https://github.com/glincker/levelrail/issues/363&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;#363&lt;/a&gt;) (&lt;a href=&quot;https://github.com/glincker/levelrail/commit/86a1e6d54c0387206ccec79d938abdcae17bbaf2&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;86a1e6d&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;centralized Domains page with ACME settings and app-domain list (&lt;a href=&quot;https://github.com/glincker/levelrail/commit/5e6a421ec9817f3d2404a1e60733925981e62537&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;5e6a421&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;changed-line coverage gate for PRs (&lt;a href=&quot;https://github.com/glincker/levelrail/issues/350&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;#350&lt;/a&gt;) (&lt;a href=&quot;https://github.com/glincker/levelrail/commit/2062874c8037a021665c658a88c6a10782ef55d1&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;2062874&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;CLI and dashboard wiring for organizations and environments (&lt;a href=&quot;https://github.com/glincker/levelrail/issues/169&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;#169&lt;/a&gt;) (&lt;a href=&quot;https://github.com/glincker/levelrail/commit/5ee8706d813f44d032d16f03b8a0fc939f262a7d&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;5ee8706&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;CLI CRUD for backup targets and registry credentials (&lt;a href=&quot;https://github.com/glincker/levelrail/issues/251&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;#251&lt;/a&gt;) (&lt;a href=&quot;https://github.com/glincker/levelrail/commit/1bba14d028b82b15c4962fa14c2c1d1871a16dad&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;1bba14d&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;CLI device login flow (auth login --device) (&lt;a href=&quot;https://github.com/glincker/levelrail/issues/319&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;#319&lt;/a&gt;) (&lt;a href=&quot;https://github.com/glincker/levelrail/commit/97ac63a953fc05aeb6cf14ea80b6d02dc4ab8d56&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;97ac63a&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;CLI exec, auth login/whoami, tokens, domains, backups commands (&lt;a href=&quot;https://github.com/glincker/levelrail/commit/ae3c6065f4c34124eb24243a436752ca866e1293&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;ae3c606&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;CLI exec, auth, tokens, domains, and backups commands (&lt;a href=&quot;https://github.com/glincker/levelrail/commit/f2a9b48a136287a86d60ad7ef85257a4d279808c&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;f2a9b48&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;CLI output formats and JMESPath query filtering (&lt;a href=&quot;https://github.com/glincker/levelrail/issues/318&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;#318&lt;/a&gt;) (&lt;a href=&quot;https://github.com/glincker/levelrail/commit/d94ea5b8b77d99350f2e9c3fd234b3e1af2f4834&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;d94ea5b&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;CLI support for app-level scheduled tasks (&lt;a href=&quot;https://github.com/glincker/levelrail/issues/144&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;#144&lt;/a&gt;) (&lt;a href=&quot;https://github.com/glincker/levelrail/commit/d27f0f51597445f98c052208cc629beb38a91063&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;d27f0f5&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;ClickHouse and Dragonfly backup/restore support (&lt;a href=&quot;https://github.com/glincker/levelrail/issues/157&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;#157&lt;/a&gt;) (&lt;a href=&quot;https://github.com/glincker/levelrail/commit/39689e9985888631f1f0522179cc528c32d43d9c&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;39689e9&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;close git provider capability gaps (GitLab branches, GitHub webhooks, aggregated status) (&lt;a href=&quot;https://github.com/glincker/levelrail/issues/228&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;#228&lt;/a&gt;) (&lt;a href=&quot;https://github.com/glincker/levelrail/commit/f16833a7f6668dc3020d5dcf14bc35b743e32bad&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;f16833a&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;Cloudflare Tunnel integration for outbound-only ingress (&lt;a href=&quot;https://github.com/glincker/levelrail/issues/138&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;#138&lt;/a&gt;) (&lt;a href=&quot;https://github.com/glincker/levelrail/commit/d235fc5673f9f400b76892f983d0534a61afc928&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;d235fc5&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;collect and surface node disk space as a real telemetry metric (&lt;a href=&quot;https://github.com/glincker/levelrail/issues/185&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;#185&lt;/a&gt;) (&lt;a href=&quot;https://github.com/glincker/levelrail/commit/b2064f37ef8605cefbc861de30ad1d22440e64e4&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;b2064f3&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;connect a GitHub App for private-repo access and repo browsing (&lt;a href=&quot;https://github.com/glincker/levelrail/commit/25e3952745423553a5d0c125f4b8d518abf545e7&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;25e3952&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;connect a GitHub App for private-repo access and repo browsing (&lt;a href=&quot;https://github.com/glincker/levelrail/commit/1a5fbe5de6a965588b4dd94a031d9e8d184d14aa&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;1a5fbe5&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;containers page and master key rotation UI, feature catalog doc (&lt;a href=&quot;https://github.com/glincker/levelrail/issues/358&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;#358&lt;/a&gt;) (&lt;a href=&quot;https://github.com/glincker/levelrail/commit/27a038c87b02d67a9b48ebd057c626c403bceec9&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;27a038c&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;Coolify migration CLI (levelrail-cli migrate coolify) (&lt;a href=&quot;https://github.com/glincker/levelrail/issues/45&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;#45&lt;/a&gt;) (&lt;a href=&quot;https://github.com/glincker/levelrail/commit/b980659c42b70ab1657da7f0e402590551771521&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;b980659&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;copyable DNS record rows and better layout for domain check (&lt;a href=&quot;https://github.com/glincker/levelrail/issues/63&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;#63&lt;/a&gt;) (&lt;a href=&quot;https://github.com/glincker/levelrail/commit/489e542fb7e4839f5b6bbd2ed15afd7627944321&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;489e542&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;curated named roles (admin/operator/viewer) over the ability model (&lt;a href=&quot;https://github.com/glincker/levelrail/issues/240&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;#240&lt;/a&gt;) (&lt;a href=&quot;https://github.com/glincker/levelrail/commit/eff9f9ac1fe01e560e8e9297c5d935976fede9bf&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;eff9f9a&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;curated service-template catalog and read-only browsing API (&lt;a href=&quot;https://github.com/glincker/levelrail/issues/117&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;#117&lt;/a&gt;) (&lt;a href=&quot;https://github.com/glincker/levelrail/commit/cc5581fe5b93c0317eb7a6101a7daf63e7a59435&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;cc5581f&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;custom Docker labels escape hatch on spec.Service (&lt;a href=&quot;https://github.com/glincker/levelrail/commit/6b03e8b118f5c7423ba9af0b7a8b87bec3f95324&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;6b03e8b&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;custom Docker labels escape hatch on spec.Service (&lt;a href=&quot;https://github.com/glincker/levelrail/commit/0ef33311d6712360333c081ecf43dd62fb2bf7f3&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;0ef3331&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;dashboard empty states for alerts, deploy history, and log search (&lt;a href=&quot;https://github.com/glincker/levelrail/issues/238&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;#238&lt;/a&gt;) (&lt;a href=&quot;https://github.com/glincker/levelrail/commit/090dbde19dd74aacc98566259e32f927d8b26366&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;090dbde&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;dashboard home page at / (&lt;a href=&quot;https://github.com/glincker/levelrail/commit/73e130f77f096dc4f75ee3d7504a20cf21ff15f2&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;73e130f&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;database backups to S3-compatible storage, with restore (&lt;a href=&quot;https://github.com/glincker/levelrail/commit/c34c67e3343916f61597032a316caf2201f95329&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;c34c67e&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;database publicly-accessible toggle + host port (&lt;a href=&quot;https://github.com/glincker/levelrail/commit/78fb42f012d0d00338e909f787ad1953e1347525&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;78fb42f&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;database publicly-accessible toggle + host port (&lt;a href=&quot;https://github.com/glincker/levelrail/commit/71b2a465b0061b0d3e08fe4cb68009932beb8640&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;71b2a46&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;delete pruned scheduled-backup objects from their bucket (&lt;a href=&quot;https://github.com/glincker/levelrail/commit/a76e7821bf8bbf582d9d133d1fb26b8370c0576f&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;a76e782&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;delete pruned scheduled-backup objects from their bucket (&lt;a href=&quot;https://github.com/glincker/levelrail/commit/f24d56398a2b1f509cb938b9fb30b5ef398d3ba3&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;f24d563&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;deploy comparison view (&lt;a href=&quot;https://github.com/glincker/levelrail/issues/272&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;#272&lt;/a&gt;) (&lt;a href=&quot;https://github.com/glincker/levelrail/commit/144976f01aa0da5ec076ce55b151e2be09905883&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;144976f&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;deploy-outcome notifications (&lt;a href=&quot;https://github.com/glincker/levelrail/commit/6fc9ccaf49377fee86c0bb910e74d9261998ab5e&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;6fc9cca&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;deploy-outcome notifications (&lt;a href=&quot;https://github.com/glincker/levelrail/commit/c1bd57117b982483c76d11cba0040de50c4cc728&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;c1bd571&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;deterministic resource right-sizing suggestions (&lt;a href=&quot;https://github.com/glincker/levelrail/issues/279&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;#279&lt;/a&gt;) (&lt;a href=&quot;https://github.com/glincker/levelrail/commit/ab7c1476a8b0023eae35f2605809b4bb3831232d&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;ab7c147&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;dismissible dashboard nudge to enable platform-wide alert rules (&lt;a href=&quot;https://github.com/glincker/levelrail/issues/300&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;#300&lt;/a&gt;) (&lt;a href=&quot;https://github.com/glincker/levelrail/commit/aa23b42dfe63a8e0d7e78ef9caf663e5c590e016&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;aa23b42&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;docker compose as a deploy target (&lt;a href=&quot;https://github.com/glincker/levelrail/issues/97&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;#97&lt;/a&gt;) (&lt;a href=&quot;https://github.com/glincker/levelrail/commit/b67064b5fc3bf29ce7cd22893fd6caba7587132a&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;b67064b&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;draft autosave and guided defaults for create-resource forms (&lt;a href=&quot;https://github.com/glincker/levelrail/issues/260&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;#260&lt;/a&gt;) (&lt;a href=&quot;https://github.com/glincker/levelrail/commit/005830feb08af3b58fabec816b6db8a38f503b1e&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;005830f&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;editable port control on app overview (&lt;a href=&quot;https://github.com/glincker/levelrail/commit/41b674126b55b3913edeeb16687e41de1abddd9e&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;41b6741&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;empty states and inline field guidance (&lt;a href=&quot;https://github.com/glincker/levelrail/commit/0118b1eca3f0763ba8084eb241ab2b85297ed175&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;0118b1e&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;empty states and inline field guidance (&lt;a href=&quot;https://github.com/glincker/levelrail/commit/97a7a2261ba6750b641f3c5ca684e25d50b1115b&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;97a7a22&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;enforce frontend bundle size budget in CI (&lt;a href=&quot;https://github.com/glincker/levelrail/issues/299&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;#299&lt;/a&gt;) (&lt;a href=&quot;https://github.com/glincker/levelrail/commit/331bd52d57bcfc117ea532c9f46506c763c24d0c&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;331bd52&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;env var tier provenance and audit activity panel in EnvEditor (&lt;a href=&quot;https://github.com/glincker/levelrail/issues/261&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;#261&lt;/a&gt;) (&lt;a href=&quot;https://github.com/glincker/levelrail/commit/3be751fb98cb914f4a99854548a56520aaac69b1&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;3be751f&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;env/secrets developer view (frontend) (&lt;a href=&quot;https://github.com/glincker/levelrail/commit/f771abe147177431021d9969776204dc72e45ab2&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;f771abe&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;expand MCP server tool coverage to nodes, previews, alerts, metrics, rollback (&lt;a href=&quot;https://github.com/glincker/levelrail/issues/252&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;#252&lt;/a&gt;) (&lt;a href=&quot;https://github.com/glincker/levelrail/commit/85f1bdaaa0a444d15a68899ae1b00510c6d0d256&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;85f1bda&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;explicit Stop/Start action for apps (&lt;a href=&quot;https://github.com/glincker/levelrail/commit/b4609198aae7141fdfe7ef35cf7e78cf92f1d374&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;b460919&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;explicit Stop/Start action for apps (&lt;a href=&quot;https://github.com/glincker/levelrail/commit/4d81635502417f52776231f17f6b399f92e31a30&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;4d81635&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;extend resource right-sizing recommendations to databases (&lt;a href=&quot;https://github.com/glincker/levelrail/issues/288&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;#288&lt;/a&gt;) (&lt;a href=&quot;https://github.com/glincker/levelrail/commit/0c68dc37391e3e311f8f5f8ed2a826545555b673&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;0c68dc3&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;fan out git push webhook deploys to sibling app-group services (&lt;a href=&quot;https://github.com/glincker/levelrail/issues/172&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;#172&lt;/a&gt;) (&lt;a href=&quot;https://github.com/glincker/levelrail/commit/b6998ff877fef744651118239e642c772a519f13&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;b6998ff&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;feature flags with live evaluation via existing API tokens (&lt;a href=&quot;https://github.com/glincker/levelrail/issues/262&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;#262&lt;/a&gt;) (&lt;a href=&quot;https://github.com/glincker/levelrail/commit/6047a4b2e2ff51f54663be8037e123d1fa7dc28f&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;6047a4b&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;fill CLI gaps for app lifecycle, database delete, secrets, git-source (&lt;a href=&quot;https://github.com/glincker/levelrail/issues/247&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;#247&lt;/a&gt;) (&lt;a href=&quot;https://github.com/glincker/levelrail/commit/01451bebd12f42fe0622820d0639824da2faa3da&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;01451be&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;forgot-password flow and email settings pages (frontend) (&lt;a href=&quot;https://github.com/glincker/levelrail/commit/3da94666656ced3e5ed333ffc13445fbb9d56ebd&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;3da9466&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;forward app logs to an external HTTP or syslog sink (&lt;a href=&quot;https://github.com/glincker/levelrail/issues/137&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;#137&lt;/a&gt;) (&lt;a href=&quot;https://github.com/glincker/levelrail/commit/3ecc4365ad8f21a34b154fadbb909c4512935f5c&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;3ecc436&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;framework-aware guided deploy picker (&lt;a href=&quot;https://github.com/glincker/levelrail/commit/9591ee44081e80df551d21eeaaaed4fbfdd6baca&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;9591ee4&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;framework-aware guided deploy picker (&lt;a href=&quot;https://github.com/glincker/levelrail/commit/d2042e57f80ee3cae444d66af63013b8802f0686&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;d2042e5&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;full-screen presentation for the create resource wizard (&lt;a href=&quot;https://github.com/glincker/levelrail/commit/b33764b415543a1e157cf5ffe44c659a9752b02c&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;b33764b&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;fullscreen log viewer toggle and finish-aware auto-scroll (&lt;a href=&quot;https://github.com/glincker/levelrail/issues/226&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;#226&lt;/a&gt;) (&lt;a href=&quot;https://github.com/glincker/levelrail/commit/e5296b4f2ffb2e181a82a3120da626af57edf520&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;e5296b4&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;general per-actor rate limit on the authenticated API surface (&lt;a href=&quot;https://github.com/glincker/levelrail/issues/284&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;#284&lt;/a&gt;) (&lt;a href=&quot;https://github.com/glincker/levelrail/commit/9a472872bb10b8e0af4a7c0645bd2f3e5611e420&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;9a47287&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;generic OIDC SSO as a third login provider (&lt;a href=&quot;https://github.com/glincker/levelrail/issues/160&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;#160&lt;/a&gt;) (&lt;a href=&quot;https://github.com/glincker/levelrail/commit/e398b886aaad7cdd93214694364436c359227238&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;e398b88&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;GitHub Enterprise Server and Bitbucket Cloud git provider support (&lt;a href=&quot;https://github.com/glincker/levelrail/issues/221&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;#221&lt;/a&gt;) (&lt;a href=&quot;https://github.com/glincker/levelrail/commit/aaa03e2449d9e08d65542006d0ab1a8d054d70de&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;aaa03e2&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;GitLab App integration (&lt;a href=&quot;https://github.com/glincker/levelrail/issues/127&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;#127&lt;/a&gt;) (&lt;a href=&quot;https://github.com/glincker/levelrail/commit/91a0cc23829babd0f20e805d9f64139a77bda215&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;91a0cc2&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;global notification channels settings page (&lt;a href=&quot;https://github.com/glincker/levelrail/commit/ec520db384135fce701496745f59649d5ade156b&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;ec520db&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;global notification channels settings page (&lt;a href=&quot;https://github.com/glincker/levelrail/commit/e28ca4ea014feea0cc9953477228eedde14afcba&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;e28ca4e&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;guided domain add flow with inline TLS status (&lt;a href=&quot;https://github.com/glincker/levelrail/commit/9a5a818df5d1a2be15996f2d82b4b3bc505bcbe4&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;9a5a818&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;guided domain add flow with inline TLS status (&lt;a href=&quot;https://github.com/glincker/levelrail/commit/50bc9300bcccca4a0860ade3c7d9dc98403e6995&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;50bc930&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;guided domain DNS check (&lt;a href=&quot;https://github.com/glincker/levelrail/commit/d03dafe84ce9fc622eb133673b2d0af03f5147a2&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;d03dafe&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;guided domain DNS check (&lt;a href=&quot;https://github.com/glincker/levelrail/commit/9333eeea9deefa89e0ebfb7de5debe1786671454&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;9333eee&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;guided first-run onboarding flow for zero-app instances (&lt;a href=&quot;https://github.com/glincker/levelrail/issues/266&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;#266&lt;/a&gt;) (&lt;a href=&quot;https://github.com/glincker/levelrail/commit/db8b7a175141b36d731dc0355fe76ce3dafd8934&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;db8b7a1&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;HTTP Basic Auth protection for domains, with helpful no-domain UX (&lt;a href=&quot;https://github.com/glincker/levelrail/issues/162&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;#162&lt;/a&gt;) (&lt;a href=&quot;https://github.com/glincker/levelrail/commit/7c1c4eaa739334570193a6a1772b3693d91bbef0&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;7c1c4ea&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;IAM policies dashboard page (&lt;a href=&quot;https://github.com/glincker/levelrail/issues/322&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;#322&lt;/a&gt;) (&lt;a href=&quot;https://github.com/glincker/levelrail/commit/e43ea763cf7c8f93beec563266e2383ddb67a313&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;e43ea76&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;IAM-style resource-scoped policy engine (&lt;a href=&quot;https://github.com/glincker/levelrail/issues/317&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;#317&lt;/a&gt;) (&lt;a href=&quot;https://github.com/glincker/levelrail/commit/6be11f5dcb1443f0a52b40a4c662af73f421c7c8&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;6be11f5&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;implement database dump mechanism for backup targets (&lt;a href=&quot;https://github.com/glincker/levelrail/commit/61acbb9a6e0537310e67d7c1e6c8fcb6523c2e56&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;61acbb9&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;implement database restore from backup (&lt;a href=&quot;https://github.com/glincker/levelrail/commit/f405544cb7036edf3f4c1d011b45aeff433c8382&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;f405544&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;implement Redis backup restore (&lt;a href=&quot;https://github.com/glincker/levelrail/commit/8e6cad3ab10f6e9fc6bb151489212bfc5df43b0e&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;8e6cad3&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;implement Redis backup restore (&lt;a href=&quot;https://github.com/glincker/levelrail/commit/e080529d7ce92400ae22b10bc1871d4a304c8c13&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;e080529&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;implement rolling deploy strategy (&lt;a href=&quot;https://github.com/glincker/levelrail/issues/171&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;#171&lt;/a&gt;) (&lt;a href=&quot;https://github.com/glincker/levelrail/commit/2b6c679ddd0c6b5941f9823bff0b091409fa3344&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;2b6c679&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;ingress settings and domains API endpoints (&lt;a href=&quot;https://github.com/glincker/levelrail/commit/189e9b3c812311823212fd19387531c213266ed8&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;189e9b3&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;ingress_settings store for ACME toggle and primary domain (&lt;a href=&quot;https://github.com/glincker/levelrail/commit/2d3e22629d5dfa628262e032537f72fb28639f2b&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;2d3e226&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;land on the live build log after triggering a build (&lt;a href=&quot;https://github.com/glincker/levelrail/issues/67&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;#67&lt;/a&gt;) (&lt;a href=&quot;https://github.com/glincker/levelrail/commit/080a67e0752965179a389fb7d88ff19b942f3025&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;080a67e&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;let operators pick between CNAME, A, and AAAA for domain setup (&lt;a href=&quot;https://github.com/glincker/levelrail/issues/189&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;#189&lt;/a&gt;) (&lt;a href=&quot;https://github.com/glincker/levelrail/commit/62296306616d42f46f59972d697bae8a136d5734&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;6229630&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;levelrail-cli version command and CHANGELOG (&lt;a href=&quot;https://github.com/glincker/levelrail/issues/301&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;#301&lt;/a&gt;) (&lt;a href=&quot;https://github.com/glincker/levelrail/commit/947f1473869e305b7bef09f17c5e29c5d5e79c33&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;947f147&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;lightweight non-RBAC Projects grouping (&lt;a href=&quot;https://github.com/glincker/levelrail/commit/96f5c2393863602d831ede67c76664624bd9816d&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;96f5c23&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;lightweight non-RBAC Projects grouping (&lt;a href=&quot;https://github.com/glincker/levelrail/commit/b49ca2648911d3b5f66c46e11cf646d00c219f31&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;b49ca26&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;list every container on a node, not just Levelrail-managed apps (&lt;a href=&quot;https://github.com/glincker/levelrail/issues/326&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;#326&lt;/a&gt;) (&lt;a href=&quot;https://github.com/glincker/levelrail/commit/73d0f1747d0e7a0816834a798330455552c47978&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;73d0f17&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;list secret keys with reversible lock toggle in SecretsEditor (&lt;a href=&quot;https://github.com/glincker/levelrail/commit/5cf50a54a8937b6f08b6d7bb05b55359087a8032&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;5cf50a5&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;live per-node alert status for patch_status, node_disk_space, node_resource_usage (&lt;a href=&quot;https://github.com/glincker/levelrail/issues/304&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;#304&lt;/a&gt;) (&lt;a href=&quot;https://github.com/glincker/levelrail/commit/94caeed06a9d1a2b9f9dc3e01a85aa4370ec56b8&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;94caeed&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;live SSE log broadcaster and stream endpoint for app containers (&lt;a href=&quot;https://github.com/glincker/levelrail/commit/ab4670fce56c0b93bd5d6e7a5acb216e56036e10&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;ab4670f&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;live-tailing terminal viewer for app container logs (&lt;a href=&quot;https://github.com/glincker/levelrail/commit/1989c7715b7c732f964e0c2595813829850e4ef2&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;1989c77&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;log export as a downloadable text file (&lt;a href=&quot;https://github.com/glincker/levelrail/issues/276&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;#276&lt;/a&gt;) (&lt;a href=&quot;https://github.com/glincker/levelrail/commit/758097abe3ac96b911db9e7dd83f38c925a3ce79&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;758097a&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;make the New resource wizard friendlier to non-technical users (&lt;a href=&quot;https://github.com/glincker/levelrail/issues/70&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;#70&lt;/a&gt;) (&lt;a href=&quot;https://github.com/glincker/levelrail/commit/a692ae5a649cb74541d4b297b3d9902bcb949c15&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;a692ae5&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;managed database logs and metrics (&lt;a href=&quot;https://github.com/glincker/levelrail/issues/225&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;#225&lt;/a&gt;) (&lt;a href=&quot;https://github.com/glincker/levelrail/commit/2d882ab8cd2767f2b61129abf27517cc749ec5c9&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;2d882ab&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;manual Docker disk/image/volume pruning (&lt;a href=&quot;https://github.com/glincker/levelrail/commit/6577addda16ece81ab240c842f772b345c8afcf3&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;6577add&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;manual Docker disk/image/volume pruning (&lt;a href=&quot;https://github.com/glincker/levelrail/commit/93ef2a2e937802480b14257d11e7f920b4b37bbc&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;93ef2a2&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;manual GitHub App connect flow, domain disclaimer on automated setup (&lt;a href=&quot;https://github.com/glincker/levelrail/issues/104&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;#104&lt;/a&gt;) (&lt;a href=&quot;https://github.com/glincker/levelrail/commit/97e242bfead5974553d2890b437beac1062081cd&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;97e242b&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;master key rotation for envelope-encrypted secrets (&lt;a href=&quot;https://github.com/glincker/levelrail/issues/295&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;#295&lt;/a&gt;) (&lt;a href=&quot;https://github.com/glincker/levelrail/commit/592b7792ecafec9f3b6ff6de7d97ba2e27088bbf&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;592b779&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;MCP tools for feature flags, doctor, webhook deliveries, backup verification, deploy compare, notification deliveries (&lt;a href=&quot;https://github.com/glincker/levelrail/issues/274&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;#274&lt;/a&gt;) (&lt;a href=&quot;https://github.com/glincker/levelrail/commit/3b84bc8f56efd8813ecb552a04948b5a4c329406&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;3b84bc8&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;memory/CPU resource limits for databases (&lt;a href=&quot;https://github.com/glincker/levelrail/commit/f4a3b9f728db3f98087e3b82b12db61fe8cfcde8&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;f4a3b9f&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;memory/CPU resource limits for databases (&lt;a href=&quot;https://github.com/glincker/levelrail/commit/d21df63785159538c349842eaf8a3c50b490c2de&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;d21df63&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;MongoDB as a managed database engine (&lt;a href=&quot;https://github.com/glincker/levelrail/issues/120&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;#120&lt;/a&gt;) (&lt;a href=&quot;https://github.com/glincker/levelrail/commit/f33de881af0b435560cd9eb3862ed4d012ecd874&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;f33de88&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;multi-service apps stage 2 (deploy fan-out + per-app Docker networking) (&lt;a href=&quot;https://github.com/glincker/levelrail/issues/75&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;#75&lt;/a&gt;) (&lt;a href=&quot;https://github.com/glincker/levelrail/commit/db6e96eebf54e444e77cd19fd4d260cf5039768c&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;db6e96e&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;multi-service support in apps create --interactive (&lt;a href=&quot;https://github.com/glincker/levelrail/issues/349&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;#349&lt;/a&gt;) (&lt;a href=&quot;https://github.com/glincker/levelrail/commit/31c78aaa37a692cc4a34ddd6c896a0574053cce2&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;31c78aa&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;multi-user sessions, OAuth sign-in (Google/GitHub), users management (&lt;a href=&quot;https://github.com/glincker/levelrail/commit/8a39531eb30e51fcfa24a9ad62d8f5304998c3cb&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;8a39531&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;multi-user sessions, OAuth sign-in, users management API (&lt;a href=&quot;https://github.com/glincker/levelrail/commit/b555e6758e109414f746eca210406633c55b8c37&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;b555e67&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;named credentials profiles (--profile / APP_PROFILE) (&lt;a href=&quot;https://github.com/glincker/levelrail/issues/315&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;#315&lt;/a&gt;) (&lt;a href=&quot;https://github.com/glincker/levelrail/commit/f90903bc1cce828b40d50153ea0769ce61dbcb7c&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;f90903b&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;named-volume support for ordinary application services (&lt;a href=&quot;https://github.com/glincker/levelrail/issues/76&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;#76&lt;/a&gt;) (&lt;a href=&quot;https://github.com/glincker/levelrail/commit/6ba605f062fa5f48f8bdc755cde26b27226d17c1&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;6ba605f&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;node CPU/memory alert rule (node_resource_usage) (&lt;a href=&quot;https://github.com/glincker/levelrail/issues/297&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;#297&lt;/a&gt;) (&lt;a href=&quot;https://github.com/glincker/levelrail/commit/ca4915875760e50df92556c30d76a80d0cde59a8&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;ca49158&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;node-level resource dashboard (&lt;a href=&quot;https://github.com/glincker/levelrail/commit/224e8fb8a911de1e2de83ceaf38acf8bddf6483a&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;224e8fb&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;node-level resource dashboard (&lt;a href=&quot;https://github.com/glincker/levelrail/commit/e23c57fb4f67174975347a5c1c752d77aabbc6ef&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;e23c57f&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;non-interactive one-off exec in app containers (&lt;a href=&quot;https://github.com/glincker/levelrail/commit/d37e3a0d7486df7581e6694ef957b13f5c5f47b3&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;d37e3a0&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;notification channel test-send delivery history and CLI/UI wiring (&lt;a href=&quot;https://github.com/glincker/levelrail/issues/267&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;#267&lt;/a&gt;) (&lt;a href=&quot;https://github.com/glincker/levelrail/commit/470f2ff34dfed21df1fc80f32cfe589beccb2dcb&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;470f2ff&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;OAuth sign-in UI, OAuth and Users settings pages (&lt;a href=&quot;https://github.com/glincker/levelrail/commit/8f554c66c874ab9a5d862c8996c831e328ddb74e&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;8f554c6&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;PagerDuty and Microsoft Teams notification channels (&lt;a href=&quot;https://github.com/glincker/levelrail/issues/151&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;#151&lt;/a&gt;) (&lt;a href=&quot;https://github.com/glincker/levelrail/commit/93409d167b325112c5f896da0fc00177b9dd4c89&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;93409d1&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;paginate backup execution history (&lt;a href=&quot;https://github.com/glincker/levelrail/issues/143&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;#143&lt;/a&gt;) (&lt;a href=&quot;https://github.com/glincker/levelrail/commit/cb3686f82ec4d96ddbffee6faa2e227bfdb560f8&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;cb3686f&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;per-domain maintenance mode (&lt;a href=&quot;https://github.com/glincker/levelrail/issues/360&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;#360&lt;/a&gt;) (&lt;a href=&quot;https://github.com/glincker/levelrail/commit/661074581ea2a2219bb10ad9adc1e70412e96e5f&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;6610745&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;per-user RBAC, extending the existing ability system to sessions (&lt;a href=&quot;https://github.com/glincker/levelrail/issues/131&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;#131&lt;/a&gt;) (&lt;a href=&quot;https://github.com/glincker/levelrail/commit/6d76d9db316e94902fda18c5bdfd99b8e3d11308&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;6d76d9d&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;persisted per-app git source + multi-app GitHub webhook (&lt;a href=&quot;https://github.com/glincker/levelrail/commit/531afd4e60155afbd8cd8a60a405f223d301aa31&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;531afd4&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;persisted per-app git source + multi-app GitHub webhook (&lt;a href=&quot;https://github.com/glincker/levelrail/commit/fd49569cb01af9f636292bd3c4bb5010d0fbd818&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;fd49569&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;persistent restart-required signal for env var changes (&lt;a href=&quot;https://github.com/glincker/levelrail/issues/263&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;#263&lt;/a&gt;) (&lt;a href=&quot;https://github.com/glincker/levelrail/commit/d51f5fa1199ebdc35fde53dffe9d5ac126f7e507&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;d51f5fa&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;post GitHub PR comments and commit statuses for preview deploys (&lt;a href=&quot;https://github.com/glincker/levelrail/issues/361&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;#361&lt;/a&gt;) (&lt;a href=&quot;https://github.com/glincker/levelrail/commit/2afbafb9e7a08e5c8d04b5034621310406837616&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;2afbafb&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;pre/post-deploy hook commands (&lt;a href=&quot;https://github.com/glincker/levelrail/issues/362&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;#362&lt;/a&gt;) (&lt;a href=&quot;https://github.com/glincker/levelrail/commit/a296cb33fc3931fdca3c062cb8700c8175a0e018&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;a296cb3&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;preview environments per pull request (&lt;a href=&quot;https://github.com/glincker/levelrail/issues/246&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;#246&lt;/a&gt;) (&lt;a href=&quot;https://github.com/glincker/levelrail/commit/0417adbd6f3a499dd428d5e088b4486088d1832d&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;0417adb&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;proactive alerting for certificate expiry (&lt;a href=&quot;https://github.com/glincker/levelrail/issues/283&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;#283&lt;/a&gt;) (&lt;a href=&quot;https://github.com/glincker/levelrail/commit/c57381e6ff9eb43aa67d7e9a11b09e748cc4b433&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;c57381e&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;proactive domain_health alert rule kind (&lt;a href=&quot;https://github.com/glincker/levelrail/issues/308&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;#308&lt;/a&gt;) (&lt;a href=&quot;https://github.com/glincker/levelrail/commit/6b9f241e35437fd0b742d158195ce4ebe9299bb3&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;6b9f241&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;proactive node disk space alerting (&lt;a href=&quot;https://github.com/glincker/levelrail/issues/293&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;#293&lt;/a&gt;) (&lt;a href=&quot;https://github.com/glincker/levelrail/commit/11b089c6d35fb67daad3b47b60c7855c493fb674&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;11b089c&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;proactive node patch status alerting (&lt;a href=&quot;https://github.com/glincker/levelrail/issues/289&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;#289&lt;/a&gt;) (&lt;a href=&quot;https://github.com/glincker/levelrail/commit/0781c20db34ccc190ae2b0159dba359d8e5acf7f&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;0781c20&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;promote an app's image across environments in the same project (&lt;a href=&quot;https://github.com/glincker/levelrail/issues/278&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;#278&lt;/a&gt;) (&lt;a href=&quot;https://github.com/glincker/levelrail/commit/eb9883d9bafc3ee30a183e7bb0d40c7240516784&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;eb9883d&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;protected environments with confirm-to-deploy friction gate (&lt;a href=&quot;https://github.com/glincker/levelrail/issues/282&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;#282&lt;/a&gt;) (&lt;a href=&quot;https://github.com/glincker/levelrail/commit/c91eef6aa4c147f6dc06a331d734491fec82e106&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;c91eef6&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;Pushover notification channel (&lt;a href=&quot;https://github.com/glincker/levelrail/issues/126&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;#126&lt;/a&gt;) (&lt;a href=&quot;https://github.com/glincker/levelrail/commit/47cf08131eafce198e1ea42b5f504b5a1b32095d&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;47cf081&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;Railpack auto-detection for Node.js and Go builds (&lt;a href=&quot;https://github.com/glincker/levelrail/commit/ba9d15b5ace9d4f5e6ff0f85966dd793119a03d5&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;ba9d15b&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;Railpack auto-detection for Node.js and Go builds (&lt;a href=&quot;https://github.com/glincker/levelrail/commit/3f296c5a0a7584d432bde7362dc896ae1bb36769&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;3f296c5&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;read-only dashboard visibility for static sites (&lt;a href=&quot;https://github.com/glincker/levelrail/commit/8040079999e499701aa20562f77e21f260103cc7&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;8040079&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;read-only deploy failure and crashloop diagnosis (&lt;a href=&quot;https://github.com/glincker/levelrail/issues/268&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;#268&lt;/a&gt;) (&lt;a href=&quot;https://github.com/glincker/levelrail/commit/eba61a9867fdfd92b06f0a7174ae3b68b89df262&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;eba61a9&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;real ACME issuer option in ingress config builder (&lt;a href=&quot;https://github.com/glincker/levelrail/commit/dd3e7098d609bd8ad093839b396e4746743b692e&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;dd3e709&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;real ACME issuer, platform primary domain, and centralized Domains page (&lt;a href=&quot;https://github.com/glincker/levelrail/commit/81922302e92b2a5a560ee250b0a0a072be6c76b3&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;8192230&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;real app-to-database attachment (&lt;a href=&quot;https://github.com/glincker/levelrail/issues/146&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;#146&lt;/a&gt;) (&lt;a href=&quot;https://github.com/glincker/levelrail/commit/f6cee9de5b45cd6362ac513a08b7d4c1f08d385c&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;f6cee9d&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;real deploy history, rollback, and build-log persistence (&lt;a href=&quot;https://github.com/glincker/levelrail/commit/272c1045be687686a30b1151ff5e8e8d817ce711&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;272c104&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;real deploy history, rollback, and build-log persistence (&lt;a href=&quot;https://github.com/glincker/levelrail/commit/841a419f4af7eb403422133fae0b622eb6c1248e&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;841a419&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;real multi-marker deploy history on the metrics chart (&lt;a href=&quot;https://github.com/glincker/levelrail/commit/3655449e78e04147a2e33c38de1034e0626cb07f&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;3655449&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;real multi-marker deploy history on the metrics chart (&lt;a href=&quot;https://github.com/glincker/levelrail/commit/01c7406719c6f2795085fbd967151d96f8e57644&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;01c7406&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;real S3-compatible upload client for backup targets (&lt;a href=&quot;https://github.com/glincker/levelrail/commit/fef6b4b2eae170ee7492aead973c8565ebad26fe&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;fef6b4b&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;real-time deploy stage timeline and in-progress banner (&lt;a href=&quot;https://github.com/glincker/levelrail/issues/158&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;#158&lt;/a&gt;) (&lt;a href=&quot;https://github.com/glincker/levelrail/commit/59f61bab5555853a1d3d468365f3bca35dd44c03&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;59f61ba&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;real-time live log streaming for app containers (&lt;a href=&quot;https://github.com/glincker/levelrail/commit/7f3728115f895f6fdcbaf3dc48f8368338cec85b&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;7f37281&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;redesign deploy detail page with metadata card and collapsible stages (&lt;a href=&quot;https://github.com/glincker/levelrail/issues/165&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;#165&lt;/a&gt;) (&lt;a href=&quot;https://github.com/glincker/levelrail/commit/453b6101e07aac2fc56b9f4ced514c972d98bd86&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;453b610&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;redesign New Resource picker into a categorized, searchable modal (&lt;a href=&quot;https://github.com/glincker/levelrail/issues/110&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;#110&lt;/a&gt;) (&lt;a href=&quot;https://github.com/glincker/levelrail/commit/6ae5aa6bf224b49fb2c07e9b5e302d4a81af5842&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;6ae5aa6&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;registry credentials for pulling private images (&lt;a href=&quot;https://github.com/glincker/levelrail/issues/130&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;#130&lt;/a&gt;) (&lt;a href=&quot;https://github.com/glincker/levelrail/commit/fbc1bb213db3498fa04199de5a2ab6f45e6f9ed3&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;fbc1bb2&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;relabel git-source wizard card, elevate Railpack, add connect-GitHub CTA and domain field (&lt;a href=&quot;https://github.com/glincker/levelrail/issues/68&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;#68&lt;/a&gt;) (&lt;a href=&quot;https://github.com/glincker/levelrail/commit/1bbf90e31790e3be8b10f4e45fe92ba40d4146bf&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;1bbf90e&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;replace one-off empty states with shared EmptyState component (&lt;a href=&quot;https://github.com/glincker/levelrail/issues/164&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;#164&lt;/a&gt;) (&lt;a href=&quot;https://github.com/glincker/levelrail/commit/2a998d4e5456e87016d6dd2fe594cb9a4ef23122&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;2a998d4&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;replace single-admin store with multi-user users table (&lt;a href=&quot;https://github.com/glincker/levelrail/commit/65bda2bf5e506ded2a86ba08bae01ff4bad4f9b7&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;65bda2b&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;required-check CI gate, CodeQL path filtering, label taxonomy and auto-labeler (&lt;a href=&quot;https://github.com/glincker/levelrail/issues/95&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;#95&lt;/a&gt;) (&lt;a href=&quot;https://github.com/glincker/levelrail/commit/116d50f03692a84bb8c626da682ae497d90005bc&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;116d50f&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;resolve SERVICE_FQDN_* magic vars to a service's own assigned domain (&lt;a href=&quot;https://github.com/glincker/levelrail/issues/113&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;#113&lt;/a&gt;) (&lt;a href=&quot;https://github.com/glincker/levelrail/commit/8a1465addbe9fca34b1b247955004c8c3105ca52&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;8a1465a&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;resolve template SERVICE_ magic vars in compose deploys (&lt;a href=&quot;https://github.com/glincker/levelrail/issues/108&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;#108&lt;/a&gt;) (&lt;a href=&quot;https://github.com/glincker/levelrail/commit/3198c846a2eddac0ba59d3eabcdd4986d36d6027&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;3198c84&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;restore a backup into a brand-new database, alongside in-place restore (&lt;a href=&quot;https://github.com/glincker/levelrail/issues/310&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;#310&lt;/a&gt;) (&lt;a href=&quot;https://github.com/glincker/levelrail/commit/0ab0e3399761e316108f73da08892340f5f7596c&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;0ab0e33&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;restore app volume backups as a new, standalone volume (&lt;a href=&quot;https://github.com/glincker/levelrail/issues/313&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;#313&lt;/a&gt;) (&lt;a href=&quot;https://github.com/glincker/levelrail/commit/2b5c60a1a97dbd0c092fd5b7497b9b375c0216c8&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;2b5c60a&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;reuse GitRepoSourcePicker in GitSourceCard (&lt;a href=&quot;https://github.com/glincker/levelrail/issues/229&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;#229&lt;/a&gt;) (&lt;a href=&quot;https://github.com/glincker/levelrail/commit/d75549fd81448567087182c847585978cfacb02d&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;d75549f&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;scheduled database backup configuration UI and CLI (&lt;a href=&quot;https://github.com/glincker/levelrail/issues/174&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;#174&lt;/a&gt;) (&lt;a href=&quot;https://github.com/glincker/levelrail/commit/cae179e3a82a986a3be58858a7149866fa9a44ef&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;cae179e&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;scheduled/cron backups (&lt;a href=&quot;https://github.com/glincker/levelrail/commit/0d5f370be40963b52d329a9d094fa15b43db9cb1&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;0d5f370&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;scheduled/cron backups (&lt;a href=&quot;https://github.com/glincker/levelrail/commit/ab41a3c66538709a0f4e03f5b0e4af48c0dd9c5f&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;ab41a3c&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;scope new-resource picker to the caller's intent (&lt;a href=&quot;https://github.com/glincker/levelrail/issues/254&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;#254&lt;/a&gt;) (&lt;a href=&quot;https://github.com/glincker/levelrail/commit/9228977fa4901c3afcef1a9a05106b602c03f287&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;9228977&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;secret key list/lock API + scope deploy trigger card to Overview/Deploys (&lt;a href=&quot;https://github.com/glincker/levelrail/commit/35601c67b15b574fdef6e69d9cfceb223dba1472&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;35601c6&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;service templates, team invites, deploy comparison, notification channels, and MCP tools (&lt;a href=&quot;https://github.com/glincker/levelrail/commit/b71b9bddb1afef8b85e28e42b7f1a4138db8c399&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;b71b9bd&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;settings hub, global search, updates page, and ingress DNS transparency (&lt;a href=&quot;https://github.com/glincker/levelrail/issues/111&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;#111&lt;/a&gt;) (&lt;a href=&quot;https://github.com/glincker/levelrail/commit/cd9c327b6d421f8f737f112f7a4170caafe73313&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;cd9c327&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;shared/group env vars at the project level (&lt;a href=&quot;https://github.com/glincker/levelrail/commit/7078159b5e3773e5dcd7ead9e4ccf536b00b7b0f&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;7078159&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;shared/group env vars at the project level (&lt;a href=&quot;https://github.com/glincker/levelrail/commit/f451f0094fe03dc093c8bfcf1b7c186da13903fc&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;f451f00&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;shell completion for levelrail-cli (bash, zsh, fish) (&lt;a href=&quot;https://github.com/glincker/levelrail/issues/270&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;#270&lt;/a&gt;) (&lt;a href=&quot;https://github.com/glincker/levelrail/commit/cdc18f4bdeed77dff5f1ec943bf29775dc740464&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;cdc18f4&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;splice generated secrets into composite env values (&lt;a href=&quot;https://github.com/glincker/levelrail/issues/118&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;#118&lt;/a&gt;) (&lt;a href=&quot;https://github.com/glincker/levelrail/commit/31204575b47a267c42a9e2f0fab38fc2e371b469&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;3120457&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;storage as an app resource (R2/S3) (&lt;a href=&quot;https://github.com/glincker/levelrail/commit/6964d72c11349f6e46bdd0482ca10f60491febe2&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;6964d72&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;storage as an app resource (R2/S3) (&lt;a href=&quot;https://github.com/glincker/levelrail/commit/18d2a4e35fa0a5ed6658c20b3edf8def1459fa0e&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;18d2a4e&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;surface compose restart: and networks: as non-blocking notices (&lt;a href=&quot;https://github.com/glincker/levelrail/issues/287&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;#287&lt;/a&gt;) (&lt;a href=&quot;https://github.com/glincker/levelrail/commit/002bd8ff8b367bbc43c9ebbf5da8e0e649fe6a12&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;002bd8f&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;surface deploy strategy and replicas on the app screen (&lt;a href=&quot;https://github.com/glincker/levelrail/commit/2878e9b5cadb55d392eeae4abcdf7b2bc2d58e60&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;2878e9b&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;surface deploy strategy and replicas on the app screen (&lt;a href=&quot;https://github.com/glincker/levelrail/commit/925e9e60ed4eb41f7e7b266f19323fe663bf9f23&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;925e9e6&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;surface Docker daemon reachability as a dashboard-wide health check (&lt;a href=&quot;https://github.com/glincker/levelrail/issues/259&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;#259&lt;/a&gt;) (&lt;a href=&quot;https://github.com/glincker/levelrail/commit/9276ff2aead57864ab4f4596efa37721905d0bbf&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;9276ff2&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;swap memory and CPU pinning (cpuset) resource limits (&lt;a href=&quot;https://github.com/glincker/levelrail/issues/233&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;#233&lt;/a&gt;) (&lt;a href=&quot;https://github.com/glincker/levelrail/commit/2e2a09b6742f11abf644e418739f8c47387b7d9c&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;2e2a09b&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;test registry credentials before deploy relies on them (&lt;a href=&quot;https://github.com/glincker/levelrail/issues/291&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;#291&lt;/a&gt;) (&lt;a href=&quot;https://github.com/glincker/levelrail/commit/f4c8721a3b53d732ed5aece234ef3516e45fe6ae&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;f4c8721&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;thread ingress settings into the ingress reconciler (&lt;a href=&quot;https://github.com/glincker/levelrail/commit/96f984dfeeedfcd289399c277ba4bca8495a5373&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;96f984d&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;TOTP two-factor authentication for admin login (&lt;a href=&quot;https://github.com/glincker/levelrail/issues/114&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;#114&lt;/a&gt;) (&lt;a href=&quot;https://github.com/glincker/levelrail/commit/55ec28035308c247d33b71edb83df747eef20bdb&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;55ec280&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;track commit sha and trigger source on deploy attempts (&lt;a href=&quot;https://github.com/glincker/levelrail/commit/8894f4065bed1f7da83cceaa3d24d34cbe9cc788&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;8894f40&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;translate compose healthcheck blocks into readiness probes (&lt;a href=&quot;https://github.com/glincker/levelrail/issues/286&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;#286&lt;/a&gt;) (&lt;a href=&quot;https://github.com/glincker/levelrail/commit/888c221218fe1d1359e7c6aac89ead3fbd7a5b9a&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;888c221&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;trigger and track a real database backup (&lt;a href=&quot;https://github.com/glincker/levelrail/commit/e93c88c948557fdea40c7ee5380c1e0d4ad7195f&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;e93c88c&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;trigger and track database backups from the database page (&lt;a href=&quot;https://github.com/glincker/levelrail/commit/600b294a53d5f9f2c88c384a08c25f1ad68d7e65&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;600b294&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;unify git provider connect flow, fix missing git-source and build bugs (&lt;a href=&quot;https://github.com/glincker/levelrail/issues/227&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;#227&lt;/a&gt;) (&lt;a href=&quot;https://github.com/glincker/levelrail/commit/b13deaa6c5dbeae8952a50dffc4883057f183e2f&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;b13deaa&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;unify webhook-triggered and manual multi-service deploys (&lt;a href=&quot;https://github.com/glincker/levelrail/issues/241&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;#241&lt;/a&gt;) (&lt;a href=&quot;https://github.com/glincker/levelrail/commit/669ede6f299dd704892f75ed1e1a611dba5bd3a2&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;669ede6&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;v1 install script, systemd unit, release build workflow (&lt;a href=&quot;https://github.com/glincker/levelrail/issues/44&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;#44&lt;/a&gt;) (&lt;a href=&quot;https://github.com/glincker/levelrail/commit/567af6ee08177b12b1c51f7f8df7da9267253dc2&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;567af6e&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;webhook delivery history and replay (&lt;a href=&quot;https://github.com/glincker/levelrail/issues/269&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;#269&lt;/a&gt;) (&lt;a href=&quot;https://github.com/glincker/levelrail/commit/5776a647e38ea72af8abb4fee3f04c6ec34c9c65&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;5776a64&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;wildcard domain support via Cloudflare DNS-01 (&lt;a href=&quot;https://github.com/glincker/levelrail/issues/152&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;#152&lt;/a&gt;) (&lt;a href=&quot;https://github.com/glincker/levelrail/commit/afae9c7f8c46707232f09c5347a534b2e67928e8&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;afae9c7&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;wire alert rules to global notification channels (&lt;a href=&quot;https://github.com/glincker/levelrail/commit/bdc2b1dafbf495059a3fc337eaec30c961295125&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;bdc2b1d&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;wire alert rules to global notification channels (&lt;a href=&quot;https://github.com/glincker/levelrail/commit/df4a033ea2728c7846ff392d37572f39ff510cc3&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;df4a033&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;wire developer-view toggle into the Environment section (&lt;a href=&quot;https://github.com/glincker/levelrail/commit/421627181cf58d08922737a29e1fd8124c7c5a11&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;4216271&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;wire Dockerfile build args through app spec, API, CLI, and UI (&lt;a href=&quot;https://github.com/glincker/levelrail/issues/155&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;#155&lt;/a&gt;) (&lt;a href=&quot;https://github.com/glincker/levelrail/commit/9367d6cb7279a465f80f19f4f10d439845804443&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;9367d6c&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;wire IAM policy resource-scoped enforcement into apps/databases routes (&lt;a href=&quot;https://github.com/glincker/levelrail/issues/321&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;#321&lt;/a&gt;) (&lt;a href=&quot;https://github.com/glincker/levelrail/commit/f0482a39893446e334ea3663097f1d8d388735cd&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;f0482a3&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;wire mesh DNS server into container creation (&lt;a href=&quot;https://github.com/glincker/levelrail/commit/73b53774ffba8f1f7c03f82d276e92cba888ec03&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;73b5377&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;wire mesh DNS server into container creation (&lt;a href=&quot;https://github.com/glincker/levelrail/commit/d6fefdd43dd7180f735a695e67672f607f0f5543&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;d6fefdd&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;wire OAuth secrets, update recover-admin for multi-user store (&lt;a href=&quot;https://github.com/glincker/levelrail/commit/6e171d7be3eb0e8cc7ac183229570b6fade516b9&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;6e171d7&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;wire prebuilt-image build type into CLI, UI, and git-source validation (&lt;a href=&quot;https://github.com/glincker/levelrail/issues/129&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;#129&lt;/a&gt;) (&lt;a href=&quot;https://github.com/glincker/levelrail/commit/99035722a83e286a053305421cf9750a13165ba3&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;9903572&lt;/a&gt;)&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&quot;bug-fixes&quot; tabindex=&quot;-1&quot;&gt;Bug Fixes &lt;a class=&quot;header-anchor&quot; href=&quot;#bug-fixes&quot; aria-label=&quot;Permalink to &amp;quot;Bug Fixes&amp;quot;&quot;&gt;&amp;ZeroWidthSpace;&lt;/a&gt;&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;accessibility gaps in git picker, log terminal, and nav sidebars (&lt;a href=&quot;https://github.com/glincker/levelrail/issues/232&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;#232&lt;/a&gt;) (&lt;a href=&quot;https://github.com/glincker/levelrail/commit/5f206a83df2b469e0c13ac109364c09931d54749&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;5f206a8&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;accessible names for placeholder-only domain/env form inputs (&lt;a href=&quot;https://github.com/glincker/levelrail/commit/0888368458dc4663d18356a72e01c7ca6b03e00e&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;0888368&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;accessible names for placeholder-only domain/env form inputs (&lt;a href=&quot;https://github.com/glincker/levelrail/commit/c9d40ada750901581a32cefa601e63fffa5c3412&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;c9d40ad&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;adapt notification_channel.go to the email.Sender interface (&lt;a href=&quot;https://github.com/glincker/levelrail/commit/efc055c91a9d35e9b2c1161a922f4c5b4301cd25&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;efc055c&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;add accessible names to per-row feature flag toggle and rollout input (&lt;a href=&quot;https://github.com/glincker/levelrail/issues/275&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;#275&lt;/a&gt;) (&lt;a href=&quot;https://github.com/glincker/levelrail/commit/a0edb7f79c6f1cab0cfe19cee704075dbed2a67a&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;a0edb7f&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;add missing --json support to three CLI clear commands (&lt;a href=&quot;https://github.com/glincker/levelrail/issues/271&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;#271&lt;/a&gt;) (&lt;a href=&quot;https://github.com/glincker/levelrail/commit/50bac91fc112eff5d2e5bc377cf19c3c29c788f7&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;50bac91&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;add TTL fallback sweep for preview environments across all git providers (&lt;a href=&quot;https://github.com/glincker/levelrail/issues/281&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;#281&lt;/a&gt;) (&lt;a href=&quot;https://github.com/glincker/levelrail/commit/e0db26ea31fc6f2bf7e7fd450bc7cc974c722605&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;e0db26e&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;allow railpack build type through apps create (&lt;a href=&quot;https://github.com/glincker/levelrail/issues/147&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;#147&lt;/a&gt;) (&lt;a href=&quot;https://github.com/glincker/levelrail/commit/c53543de6749c3b415f282481c5467460f052fd4&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;c53543d&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;async build trigger, private repo auth, and ability-gated token minting (&lt;a href=&quot;https://github.com/glincker/levelrail/issues/64&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;#64&lt;/a&gt;) (&lt;a href=&quot;https://github.com/glincker/levelrail/commit/f6ca950dadb4e6456c2eb324f44cd6142acf7adc&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;f6ca950&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;avoid BuildKit MergeOp deadlock in Railpack deploy image assembly (&lt;a href=&quot;https://github.com/glincker/levelrail/issues/149&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;#149&lt;/a&gt;) (&lt;a href=&quot;https://github.com/glincker/levelrail/commit/f9d315854a0b2918c318de553d179ea50fe6a4f8&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;f9d3158&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;clear stored secrets when disconnecting a GitHub App (&lt;a href=&quot;https://github.com/glincker/levelrail/commit/40553519eb3f3bc0f44628eb464f5747e6ec28cd&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;4055351&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;close forgot-password rate-limit bypass, remove dead admin-email frontend code (&lt;a href=&quot;https://github.com/glincker/levelrail/commit/fe521507e35cc720eb7086e963e22182ba72dbe2&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;fe52150&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;close no-auth confirmation gap for KeyDB/Dragonfly, polish secrets CLI help (&lt;a href=&quot;https://github.com/glincker/levelrail/issues/303&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;#303&lt;/a&gt;) (&lt;a href=&quot;https://github.com/glincker/levelrail/commit/3d7d12994fd638ac6be88b7278c02759e20355fc&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;3d7d129&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;close pre-existing AppDetail test-fixture typecheck gaps (&lt;a href=&quot;https://github.com/glincker/levelrail/issues/264&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;#264&lt;/a&gt;) (&lt;a href=&quot;https://github.com/glincker/levelrail/commit/0c9e76ae2b42e9df79d79cb1b5b9b648de2306f6&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;0c9e76a&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;correct misleading test name/comment on a secrets test (&lt;a href=&quot;https://github.com/glincker/levelrail/commit/49191f0ff1ab60a9034fd15e8113810e0af7c2a3&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;49191f0&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;crashloop alert's view-logs link goes to a dead same-page anchor (&lt;a href=&quot;https://github.com/glincker/levelrail/issues/218&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;#218&lt;/a&gt;) (&lt;a href=&quot;https://github.com/glincker/levelrail/commit/3ed2889c74496fb73f107643bfced1d5c3c4e2f4&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;3ed2889&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;don't show a redundant inline error while the overwrite-confirm dialog is open (&lt;a href=&quot;https://github.com/glincker/levelrail/commit/6dbad34a294dfd16108ce1428a68f446da5aa5bc&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;6dbad34&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;drop stale preview-envs docs claim, skip live Docker tests in short mode (&lt;a href=&quot;https://github.com/glincker/levelrail/issues/314&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;#314&lt;/a&gt;) (&lt;a href=&quot;https://github.com/glincker/levelrail/commit/f0a052e74c4fe9c20b3b9af21ed5a2291cbb430a&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;f0a052e&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;eliminate race in TestHandleTriggerBuild_RecordsDeployAttempt_Succeeded (&lt;a href=&quot;https://github.com/glincker/levelrail/issues/298&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;#298&lt;/a&gt;) (&lt;a href=&quot;https://github.com/glincker/levelrail/commit/6094a5b248e958cf2c79d78369fbfe549db9b288&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;6094a5b&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;explain why the live logs tail is empty, don't just wait forever (&lt;a href=&quot;https://github.com/glincker/levelrail/issues/161&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;#161&lt;/a&gt;) (&lt;a href=&quot;https://github.com/glincker/levelrail/commit/d90a2eab497bab75998e7f52b70027212db6959a&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;d90a2ea&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;feed persisted build logs to diagnose for build-phase failures (&lt;a href=&quot;https://github.com/glincker/levelrail/issues/292&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;#292&lt;/a&gt;) (&lt;a href=&quot;https://github.com/glincker/levelrail/commit/b1a98b6518ce9127ffbf0d9bf1f22095378dfcf2&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;b1a98b6&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;fix overflowing create-resource picker, add category filter (&lt;a href=&quot;https://github.com/glincker/levelrail/issues/255&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;#255&lt;/a&gt;) (&lt;a href=&quot;https://github.com/glincker/levelrail/commit/b73c49d6d87e3f7614c8b7ed7ca511e818555e14&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;b73c49d&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;force 0.1.0 as release-please's first proposed version (&lt;a href=&quot;https://github.com/glincker/levelrail/issues/372&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;#372&lt;/a&gt;) (&lt;a href=&quot;https://github.com/glincker/levelrail/commit/bf5ad960d6388b904608bde54e11f73616b0b502&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;bf5ad96&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;gate one-off container exec at AbilityRoot, not AbilityDeploy (&lt;a href=&quot;https://github.com/glincker/levelrail/commit/c2cb301b13b06d20f15e9e7d689741c32d4f71d4&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;c2cb301&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;generate routeTree.gen.ts before web lint, trim test duplication (&lt;a href=&quot;https://github.com/glincker/levelrail/issues/116&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;#116&lt;/a&gt;) (&lt;a href=&quot;https://github.com/glincker/levelrail/commit/5bc54e9aa674f21f478a056a394de8f3535b2b2e&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;5bc54e9&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;get the main frontend bundle under the 500kB warning threshold (&lt;a href=&quot;https://github.com/glincker/levelrail/commit/fe49363bff90ba603d485b354d99ae474407abe8&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;fe49363&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;get the main frontend bundle under the 500kB warning threshold (&lt;a href=&quot;https://github.com/glincker/levelrail/commit/397e45d9a7f9ec50f561c47e2f08a8b3a0490004&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;397e45d&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;guard ClickHouse restore live test against entrypoint's temp-server handoff (&lt;a href=&quot;https://github.com/glincker/levelrail/issues/312&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;#312&lt;/a&gt;) (&lt;a href=&quot;https://github.com/glincker/levelrail/commit/807a2978ab2b4bba1c86a00041ff390a78b91e26&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;807a297&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;image-sourced deploys show a clear no-build-output message (&lt;a href=&quot;https://github.com/glincker/levelrail/commit/914a5ee3f48c476734b79dc7b225a249dcadc041&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;914a5ee&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;image-sourced deploys show a clear no-build-output message instead of hanging on 'Waiting for log output...' (&lt;a href=&quot;https://github.com/glincker/levelrail/commit/0ac7e1f9dcbb49a53ce8244817438ed753a19119&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;0ac7e1f&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;land signed-in users on the dashboard, not /apps (&lt;a href=&quot;https://github.com/glincker/levelrail/issues/66&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;#66&lt;/a&gt;) (&lt;a href=&quot;https://github.com/glincker/levelrail/commit/98200688dc94b8375e6d39a4095f4b4677759eb7&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;9820068&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;live deploy log stream stuck on zero output (&lt;a href=&quot;https://github.com/glincker/levelrail/commit/f365ad7fe01a43f44becec5ad6d52b2fd13929b2&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;f365ad7&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;live deploy log stream stuck on zero output (&lt;a href=&quot;https://github.com/glincker/levelrail/commit/b52572f00b67c677af84bbdf5a28aa9c01e916e8&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;b52572f&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;make password-reset token single-use atomic, tidy go.mod, trim comments (&lt;a href=&quot;https://github.com/glincker/levelrail/commit/df72b84916b27e0bae201b7f7aa7c7b7038c5470&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;df72b84&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;mark orphaned deploy attempts as failed on startup (&lt;a href=&quot;https://github.com/glincker/levelrail/issues/159&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;#159&lt;/a&gt;) (&lt;a href=&quot;https://github.com/glincker/levelrail/commit/af04e62e341e47903b4e9ff95433539f0f5263c4&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;af04e62&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;move showDeployTrigger's useRouterState above the early-return (&lt;a href=&quot;https://github.com/glincker/levelrail/commit/faaf90ee65c823fb0cdddc1c201ff5611221ba31&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;faaf90e&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;pin cel-go back to 0.28.1, incompatible with pinned Caddy version (&lt;a href=&quot;https://github.com/glincker/levelrail/issues/134&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;#134&lt;/a&gt;) (&lt;a href=&quot;https://github.com/glincker/levelrail/commit/be72bc24a6a08946fdd3a0163df1f53d5212316c&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;be72bc2&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;pin golangci-lint-action to a commit SHA, suppress a false-positive Sonar finding (&lt;a href=&quot;https://github.com/glincker/levelrail/issues/352&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;#352&lt;/a&gt;) (&lt;a href=&quot;https://github.com/glincker/levelrail/commit/fd6aeb057ae14c1db5fb50adbf1dc7e0c904d99a&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;fd6aeb0&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;point install.sh at the real first-run registration path (&lt;a href=&quot;https://github.com/glincker/levelrail/issues/325&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;#325&lt;/a&gt;) (&lt;a href=&quot;https://github.com/glincker/levelrail/commit/d4840af2983a8bff894e12935ce0ba872641e7d7&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;d4840af&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;poll for post-stop/remove state on CI's daemon (&lt;a href=&quot;https://github.com/glincker/levelrail/commit/4847f8aee0bbea0f4645fd0b417a2e943e22c4df&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;4847f8a&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;poll for stopped state in Stop/Remove live test (&lt;a href=&quot;https://github.com/glincker/levelrail/commit/2a4ae1b2e07ce985fdacb1aeb6fa2ef0792120f3&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;2a4ae1b&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;poll for stopped state in Stop/Remove live test instead of asserting immediately (&lt;a href=&quot;https://github.com/glincker/levelrail/commit/7824a79ca25d0e320b6fe2493af36a3ca15ffe2b&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;7824a79&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;pre-fill and suggest commands in the exec panel (&lt;a href=&quot;https://github.com/glincker/levelrail/issues/327&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;#327&lt;/a&gt;) (&lt;a href=&quot;https://github.com/glincker/levelrail/commit/a3fc79da0e38348c5f13df10821eb9aff53cad9f&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;a3fc79d&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;raise internal/api CI test timeout to fix false-failure panics on main (&lt;a href=&quot;https://github.com/glincker/levelrail/commit/908bea46e1daffd3d7df94ae0db6e494bec4ce87&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;908bea4&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;raise internal/api's CI test timeout to 25m (&lt;a href=&quot;https://github.com/glincker/levelrail/commit/2670e8f9dfd6709c89d3d7e5ce303533751a9fdb&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;2670e8f&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;re-ensure a container's network before restarting it (&lt;a href=&quot;https://github.com/glincker/levelrail/issues/150&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;#150&lt;/a&gt;) (&lt;a href=&quot;https://github.com/glincker/levelrail/commit/180bf639ad754b1206cadc535fed4e27d61b56f7&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;180bf63&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;record a deploy attempt when an app is created with a real image (&lt;a href=&quot;https://github.com/glincker/levelrail/issues/154&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;#154&lt;/a&gt;) (&lt;a href=&quot;https://github.com/glincker/levelrail/commit/189ae19aadb09164ff78d74a009e9c999d2c4aa1&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;189ae19&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;record deploy attempts for compose deploys and image-changing updates (&lt;a href=&quot;https://github.com/glincker/levelrail/issues/256&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;#256&lt;/a&gt;) (&lt;a href=&quot;https://github.com/glincker/levelrail/commit/67065ee8cd6110cd11396380e671711036441499&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;67065ee&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;recreate a container whose Start fails even after EnsureNetwork (&lt;a href=&quot;https://github.com/glincker/levelrail/issues/153&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;#153&lt;/a&gt;) (&lt;a href=&quot;https://github.com/glincker/levelrail/commit/30af32a9e667e1df9be110881cc8b0f47d732447&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;30af32a&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;reduce SonarCloud duplication flagged after &lt;a href=&quot;https://github.com/glincker/levelrail/issues/228&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;#228&lt;/a&gt; merged (&lt;a href=&quot;https://github.com/glincker/levelrail/issues/231&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;#231&lt;/a&gt;) (&lt;a href=&quot;https://github.com/glincker/levelrail/commit/ae21dbd37b87a8a693a044d7c255b2ec20fba830&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;ae21dbd&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;reject ACME contact emails with a display name (&lt;a href=&quot;https://github.com/glincker/levelrail/commit/f55714f5efe01e49aa8df1d41416971d90e71b90&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;f55714f&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;renumber cloudflare-tunnel migration to 0049, collided with 0047 (&lt;a href=&quot;https://github.com/glincker/levelrail/issues/142&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;#142&lt;/a&gt;) (&lt;a href=&quot;https://github.com/glincker/levelrail/commit/20bbaf250aa2c9db813cfcb0c516266f36320284&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;20bbaf2&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;renumber deploy_attempts_commit_source migration to 0025 (&lt;a href=&quot;https://github.com/glincker/levelrail/commit/84a30a0c08dcfa6e47728a5e6aae59a306d388f7&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;84a30a0&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;renumber domain-basic-auth migration to 0053, collided with 0052 (&lt;a href=&quot;https://github.com/glincker/levelrail/issues/166&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;#166&lt;/a&gt;) (&lt;a href=&quot;https://github.com/glincker/levelrail/commit/31077143210ace7f7da730be66e38d318ff4bfbb&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;3107714&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;renumber github app connection migration to 0029 (&lt;a href=&quot;https://github.com/glincker/levelrail/commit/da478e09e0557a0c55355eae43d230a1d3cab684&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;da478e0&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;renumber ingress_settings migration to 0024 (&lt;a href=&quot;https://github.com/glincker/levelrail/commit/df671a90266496959d39a71d3b680e4ed480783b&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;df671a9&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;renumber migration to 0028 (0027 claimed by service_labels) (&lt;a href=&quot;https://github.com/glincker/levelrail/commit/a48c4368d060de4128fadcfc5698a89e323a3c20&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;a48c436&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;renumber migration to 0030 (0029 claimed by service_git_sources) (&lt;a href=&quot;https://github.com/glincker/levelrail/commit/f93c3c6bb3e98d347aa63bd187d8ec0426fee8d9&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;f93c3c6&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;renumber migrations past 0030_service_storage_target.sql (&lt;a href=&quot;https://github.com/glincker/levelrail/commit/89b2f0ebee520377f61be37309a6296fdb157e9b&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;89b2f0e&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;renumber oidc-provider migration to 0054, collided with 0053 (&lt;a href=&quot;https://github.com/glincker/levelrail/issues/168&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;#168&lt;/a&gt;) (&lt;a href=&quot;https://github.com/glincker/levelrail/commit/448d96031b3f41f0dcd60e401708252b9336fb0f&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;448d960&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;renumber secret-lock migration to 0038 (0037 collision with PR &lt;a href=&quot;https://github.com/glincker/levelrail/issues/56&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;#56&lt;/a&gt;) (&lt;a href=&quot;https://github.com/glincker/levelrail/commit/27c275add0d99be6edcda5ffd0b1e303265ebc8b&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;27c275a&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;renumber users migration to 0035, dedupe nullableString helper (&lt;a href=&quot;https://github.com/glincker/levelrail/commit/3ca070afd9ce2040c8ffbc3a5228da3f8e13e796&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;3ca070a&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;require MySQL readiness probe to hold twice before proceeding (&lt;a href=&quot;https://github.com/glincker/levelrail/commit/96442a9322a99b80ced58c5a1c82cf9ebbcd6b0c&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;96442a9&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;resolve duplicate migration version 0052 (&lt;a href=&quot;https://github.com/glincker/levelrail/issues/167&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;#167&lt;/a&gt;) (&lt;a href=&quot;https://github.com/glincker/levelrail/commit/1bf10f1918b31ed2338f4a8ff8417e6e8a6e00a4&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;1bf10f1&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;resolve migration 0030 number collision (github-app vs storage-target) (&lt;a href=&quot;https://github.com/glincker/levelrail/commit/8b11236a4b52223c1fd7045fd14da18c5172465a&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;8b11236&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;resolve migration 0030 number collision between github-app and storage-target (&lt;a href=&quot;https://github.com/glincker/levelrail/commit/47ecc8c4790841fd370337ce08172f05c259c29e&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;47ecc8c&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;restore docker/docker + go-connections to versions internal/build/build.go's ImageLoadWithQuiet call needs (&lt;a href=&quot;https://github.com/glincker/levelrail/issues/100&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;#100&lt;/a&gt;) (&lt;a href=&quot;https://github.com/glincker/levelrail/commit/4d36c6963f195ca0eccf52d3a50088ee023e5ab6&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;4d36c69&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;restore frontend checks in the pre-commit hook (&lt;a href=&quot;https://github.com/glincker/levelrail/issues/72&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;#72&lt;/a&gt;) (&lt;a href=&quot;https://github.com/glincker/levelrail/commit/e5e388727949f1b5045722defa1c26d9126ef8d4&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;e5e3887&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;restore main build and resolve SonarCloud findings on multi-service apps (&lt;a href=&quot;https://github.com/glincker/levelrail/issues/99&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;#99&lt;/a&gt;) (&lt;a href=&quot;https://github.com/glincker/levelrail/commit/3416514abafd1d28b7253fe2bd93ba7452549df2&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;3416514&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;restrict git branch listing to http/https schemes (&lt;a href=&quot;https://github.com/glincker/levelrail/commit/0436b01310068263b0aa98bfbe0675c2e2474731&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;0436b01&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;revert docker/docker, docker/go-connections, cel-go bumps (&lt;a href=&quot;https://github.com/glincker/levelrail/issues/98&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;#98&lt;/a&gt;) (&lt;a href=&quot;https://github.com/glincker/levelrail/commit/e4a0dc27037d145103010addf716f55479cadf82&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;e4a0dc2&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;revert typescript to 6.0.x, main is broken for npm ci (&lt;a href=&quot;https://github.com/glincker/levelrail/issues/96&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;#96&lt;/a&gt;) (&lt;a href=&quot;https://github.com/glincker/levelrail/commit/aedf340b9b954cb0e93dd9f4e0ca690c5c2c3700&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;aedf340&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;rework forgot-password and admin-email for the multi-user model (&lt;a href=&quot;https://github.com/glincker/levelrail/commit/159e0683e36a406ad6257c7315834a56c1505b33&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;159e068&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;satisfy golangci-lint (revive, unparam) and fix dangling doc refs (&lt;a href=&quot;https://github.com/glincker/levelrail/commit/a54dcd1c5ea15800155d0fbc5938b81736480c51&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;a54dcd1&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;scope deploy trigger card to Overview and Deploys sections (&lt;a href=&quot;https://github.com/glincker/levelrail/commit/1f79a92fd004f0aa3631c9d9c2b3ee29799f012c&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;1f79a92&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;scope MongoDB restore to drop non-system databases first (&lt;a href=&quot;https://github.com/glincker/levelrail/issues/309&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;#309&lt;/a&gt;) (&lt;a href=&quot;https://github.com/glincker/levelrail/commit/19d0323058db52f9256e9d19961331234a168a68&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;19d0323&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;set explicit Content-Type on remaining webhook-derived response bodies (&lt;a href=&quot;https://github.com/glincker/levelrail/issues/249&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;#249&lt;/a&gt;) (&lt;a href=&quot;https://github.com/glincker/levelrail/commit/1bd22389e898ed74d40d240cff29317f2c16dac1&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;1bd2238&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;small UX polish bundle (git-source validation, stale doc comment, database status dots) (&lt;a href=&quot;https://github.com/glincker/levelrail/issues/223&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;#223&lt;/a&gt;) (&lt;a href=&quot;https://github.com/glincker/levelrail/commit/a86503b0259751eb0ce57543f38f24a20ce3abb1&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;a86503b&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;stop bundling zod into the eager main chunk via reset-password validateSearch (&lt;a href=&quot;https://github.com/glincker/levelrail/issues/230&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;#230&lt;/a&gt;) (&lt;a href=&quot;https://github.com/glincker/levelrail/commit/4a5cc80eac1fca34dece64c2bac658b5b9ce1455&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;4a5cc80&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;stop clipping browse-templates category headers in a nested scroll box (&lt;a href=&quot;https://github.com/glincker/levelrail/issues/257&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;#257&lt;/a&gt;) (&lt;a href=&quot;https://github.com/glincker/levelrail/commit/c29ecf9da92a641ab1b99673130061d816ef71b3&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;c29ecf9&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;subscribe GitLab and Bitbucket webhooks to pull request events (&lt;a href=&quot;https://github.com/glincker/levelrail/issues/253&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;#253&lt;/a&gt;) (&lt;a href=&quot;https://github.com/glincker/levelrail/commit/2eacc2f4712e22d58721299d2f5a9703b816db35&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;2eacc2f&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;suppress SonarCloud false-positive on the intentional unconditional backfill UPDATE (&lt;a href=&quot;https://github.com/glincker/levelrail/issues/132&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;#132&lt;/a&gt;) (&lt;a href=&quot;https://github.com/glincker/levelrail/commit/4e4574805b6737ad9121ec5430c281a076a86bbd&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;4e45748&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;surface swap and CPU pinning limits on the app overview (&lt;a href=&quot;https://github.com/glincker/levelrail/issues/234&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;#234&lt;/a&gt;) (&lt;a href=&quot;https://github.com/glincker/levelrail/commit/ecfcae5036477113a14a7c7586c1e53f35852f99&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;ecfcae5&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;TestValidateDatabaseResource's unknown-engine case used mongodb, now a real engine (&lt;a href=&quot;https://github.com/glincker/levelrail/issues/122&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;#122&lt;/a&gt;) (&lt;a href=&quot;https://github.com/glincker/levelrail/commit/52492b997c59c3793431ef1ec75534a1e9577dce&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;52492b9&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;unlock build fields after a failed build trigger in git app wizard (&lt;a href=&quot;https://github.com/glincker/levelrail/issues/224&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;#224&lt;/a&gt;) (&lt;a href=&quot;https://github.com/glincker/levelrail/commit/491e47c84fe472395d8174979e9f9ee9b8f799e9&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;491e47c&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;unstick finished-attempt deploy log SSE connection status (&lt;a href=&quot;https://github.com/glincker/levelrail/commit/ef97298ba8cd34c6cfb639324b2d25c8d9ba8006&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;ef97298&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;unstick finished-attempt deploy log SSE connection status (&lt;a href=&quot;https://github.com/glincker/levelrail/commit/3acb27324196d96b436a520b53420a6d2ba95087&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;3acb273&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;update Docker client call sites deprecated by the docker/docker 28.x bump (&lt;a href=&quot;https://github.com/glincker/levelrail/issues/103&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;#103&lt;/a&gt;) (&lt;a href=&quot;https://github.com/glincker/levelrail/commit/0933d5001647b1b9e6976acd452a8737ec42e548&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;0933d50&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;use localeCompare when sorting env var keys in dev view (&lt;a href=&quot;https://github.com/glincker/levelrail/issues/351&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;#351&lt;/a&gt;) (&lt;a href=&quot;https://github.com/glincker/levelrail/commit/534393d7572583e058d12a06fc26f1b01201ec44&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;534393d&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;verify github app installation status live against github, not just the local row (&lt;a href=&quot;https://github.com/glincker/levelrail/issues/294&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;#294&lt;/a&gt;) (&lt;a href=&quot;https://github.com/glincker/levelrail/commit/d54e05da061ab401864609fe01864f7d5d822d35&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;d54e05d&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;warn on missing secrets master key before database creation (&lt;a href=&quot;https://github.com/glincker/levelrail/commit/3a113f83b397b5cec0fb571daddb5a373de98237&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;3a113f8&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;warn on missing secrets master key before database creation (&lt;a href=&quot;https://github.com/glincker/levelrail/commit/25a03051454a4d9e13887151bc89375fe924c806&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;25a0305&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;widen TestCertStorage_TouchLock_KeepsItFresh's timing margin (&lt;a href=&quot;https://github.com/glincker/levelrail/issues/356&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;#356&lt;/a&gt;) (&lt;a href=&quot;https://github.com/glincker/levelrail/commit/dc55f2d292666565b5a8458d56915ebd9080850d&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;dc55f2d&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;wire Dragonfly into app.yaml spec and database URL resolution (&lt;a href=&quot;https://github.com/glincker/levelrail/issues/187&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;#187&lt;/a&gt;) (&lt;a href=&quot;https://github.com/glincker/levelrail/commit/d5d6e589a0a22a89e73a5253ebb618d5756201f2&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;d5d6e58&lt;/a&gt;)&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&quot;performance-improvements&quot; tabindex=&quot;-1&quot;&gt;Performance Improvements &lt;a class=&quot;header-anchor&quot; href=&quot;#performance-improvements&quot; aria-label=&quot;Permalink to &amp;quot;Performance Improvements&amp;quot;&quot;&gt;&amp;ZeroWidthSpace;&lt;/a&gt;&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;scan only new log lines for build-log hints (&lt;a href=&quot;https://github.com/glincker/levelrail/commit/36453f7497771074d5c67e6a3974d10de2e8531f&quot; target=&quot;_blank&quot; rel=&quot;noreferrer&quot;&gt;36453f7&lt;/a&gt;)&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
</content>
  </entry>
</feed>
