<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
  <channel>
    <title>managed on SOW</title>
    <link>https://sow.pgsty.com/tags/managed/</link>
    <description>Recent content in managed on SOW</description>
    <generator>Hugo</generator>
    <language>en</language>
    
    
    
      <lastBuildDate>Fri, 28 Aug 2026 18:32:04 +0800</lastBuildDate>
    
    
      <atom:link href="https://sow.pgsty.com/tags/managed/index.xml" rel="self" type="application/rss+xml" />
    
    <item>
        <title>SOW v0.4.0</title>
        <link>https://sow.pgsty.com/blog/release/sow-v0.4.0/</link>
        <pubDate>Mon, 24 Aug 2026 00:00:00 +0000</pubDate>
        
        <guid>https://sow.pgsty.com/blog/release/sow-v0.4.0/</guid>
        <description>&lt;p&gt;SOW 0.4.0 is an integrity and recovery release for Managed repositories. It makes&#xA;the deep checker&amp;rsquo;s I/O contract explicit, prevents RPM trust from being assembled&#xA;across unrelated keys, adds an audited way to correct mutable publication-target&#xA;settings, and closes the remaining v0.3 migration and interrupted-publication gaps.&lt;/p&gt;&#xA;&lt;p&gt;Plain repository behavior and the public &lt;code&gt;pool/ + dists/&lt;/code&gt; layout do not change.&lt;/p&gt;&#xA;&lt;h2 id=&#34;upgrade-from-03&#34;&gt;Upgrade from 0.3&#xA;&lt;/h2&gt;&#xA;&lt;div class=&#34;td-callout td-callout--important&#34; role=&#34;note&#34;&gt;&#xA;  &lt;div class=&#34;td-callout__title&#34;&gt;&lt;i class=&#34;td-callout__icon fa-solid fa-circle-exclamation&#34; aria-hidden=&#34;true&#34;&gt;&lt;/i&gt;&lt;span class=&#34;td-callout__label&#34;&gt;Migrate every v0.3 Repository explicitly&lt;/span&gt;&lt;/div&gt;&#xA;  &lt;div class=&#34;td-callout__body&#34;&gt;&#xA;&lt;p&gt;Stop all Workspace writers, back up the Workspace, install 0.4.0, and run&#xA;&lt;code&gt;sow repo migrate REPOSITORY&lt;/code&gt;&#xA;once for each Repository before ordinary reads or writes. The migration is&#xA;explicit and one-way; do not reopen a migrated database with SOW 0.3.&lt;/p&gt;</description>
      </item>
    <item>
        <title>SOW v0.3.0</title>
        <link>https://sow.pgsty.com/blog/release/sow-v0.3.0/</link>
        <pubDate>Mon, 10 Aug 2026 00:00:00 +0000</pubDate>
        
        <guid>https://sow.pgsty.com/blog/release/sow-v0.3.0/</guid>
        <description>&lt;p&gt;SOW 0.3.0 is a performance, durability, and product-focus release. Plain repository&#xA;generation completes with one package-content pass. Managed repositories avoid&#xA;per-object membership queries, reuse authenticated package facts, and promote payloads&#xA;in bounded group commits. The shipping binary and its release pipeline are also&#xA;consolidated around the repository workflows that SOW supports.&lt;/p&gt;&#xA;&lt;h2 id=&#34;plain-one-package-content-pass&#34;&gt;Plain: one package-content pass&#xA;&lt;/h2&gt;&#xA;&lt;p&gt;The default unsigned &lt;code&gt;sow create&lt;/code&gt; path hashes and parses each RPM or DEB once, with&#xA;parallelism controlled by &lt;code&gt;--jobs&lt;/code&gt;. Metadata is rendered from the retained inspection&#xA;result. Before publication, SOW performs one final package-set and file-&lt;code&gt;stat&lt;/code&gt; snapshot&#xA;check, catching concurrent input changes without reading and hashing every package again.&lt;/p&gt;</description>
      </item>
    <item>
        <title>SOW v0.2.0</title>
        <link>https://sow.pgsty.com/blog/release/sow-docs-launch/</link>
        <pubDate>Sat, 08 Aug 2026 00:00:00 +0000</pubDate>
        
        <guid>https://sow.pgsty.com/blog/release/sow-docs-launch/</guid>
        <description>&lt;p&gt;SOW 0.2.0 is a self-contained RPM and DEB repository manager from&#xA;&lt;a href=&#34;https://pigsty.io&#34;&gt;Pigsty&lt;/a&gt;. Release artifacts target Linux and macOS as single Go&#xA;executables.&lt;/p&gt;&#xA;&lt;h2 id=&#34;two-operating-modes&#34;&gt;Two operating modes&#xA;&lt;/h2&gt;&#xA;&lt;p&gt;&lt;strong&gt;Plain mode&lt;/strong&gt; indexes RPM and DEB files already present at one directory&amp;rsquo;s top level:&lt;/p&gt;&#xA;&lt;div class=&#34;td-code td-code--untitled&#34; id=&#34;td-code-b4801182-fence-0&#34; data-td-code data-td-code-auto-id&#xA;     data-td-language=&#34;bash&#34; data-td-line-count=&#34;1&#34;&gt;&#xA;  &lt;div class=&#34;td-code__viewport&#34; id=&#34;td-code-b4801182-fence-0-viewport&#34; data-td-code-viewport&gt;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sow create /srv/repo&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&#xA;&lt;/div&gt;&#xA;&lt;p&gt;It writes &lt;code&gt;repodata/&lt;/code&gt;, &lt;code&gt;Packages&lt;/code&gt;, and &lt;code&gt;Packages.gz&lt;/code&gt; in place. Plain mode has no&#xA;Workspace, state database, generations, or DEB &lt;code&gt;Release&lt;/code&gt; signing.&lt;/p&gt;</description>
      </item>
    <item>
        <title>Design Records</title>
        <link>https://sow.pgsty.com/blog/design/</link>
        <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
        
        <guid>https://sow.pgsty.com/blog/design/</guid>
        <description>&lt;p&gt;Design records explain why SOW adopted a contract, what it rejected, and which evidence&#xA;boundary applies. They are ordered by &lt;code&gt;date&lt;/code&gt;, which records when the rationale first took&#xA;its maintained form; &lt;code&gt;lastmod&lt;/code&gt; records later editorial or implementation-alignment&#xA;updates. Release notes and source tags remain authoritative for when behavior actually&#xA;shipped.&lt;/p&gt;&#xA;&lt;h2 id=&#34;authority-and-evidence&#34;&gt;Authority and evidence&#xA;&lt;/h2&gt;&#xA;&lt;p&gt;This column is the maintained authority for design rationale and decision history. Current&#xA;commands, configuration, and operator behavior remain in &lt;a href=&#34;https://sow.pgsty.com/docs/&#34;&gt;SOW Docs&lt;/a&gt;; exact behavior&#xA;of a historical release remains attached to that release&amp;rsquo;s source tag and&#xA;&lt;a href=&#34;https://sow.pgsty.com/blog/release/&#34;&gt;release note&lt;/a&gt;.&lt;/p&gt;</description>
      </item>
    <item>
        <title>Design Principles</title>
        <link>https://sow.pgsty.com/blog/design/principles/</link>
        <pubDate>Sat, 08 Aug 2026 00:00:00 +0000</pubDate>
        
        <guid>https://sow.pgsty.com/blog/design/principles/</guid>
        <description>&lt;p&gt;SOW is not primarily a metadata generator. It is an ownership and state-transition system&#xA;whose output happens to be APT and RPM repositories. The following principles keep that&#xA;system small enough to reason about.&lt;/p&gt;&#xA;&lt;h2 id=&#34;one-owner-for-every-durable-fact&#34;&gt;One owner for every durable fact&#xA;&lt;/h2&gt;&#xA;&lt;p&gt;Every durable fact has one scope and one authority:&lt;/p&gt;&#xA;&lt;div class=&#34;td-table-scroll td-table-scroll--static&#34;&gt;&#xA;&lt;table&gt;&#xA;  &lt;thead&gt;&#xA;    &lt;tr&gt;&#xA;      &lt;th scope=&#34;col&#34;&gt;Fact&lt;/th&gt;&#xA;      &lt;th scope=&#34;col&#34;&gt;Owner&lt;/th&gt;&#xA;    &lt;/tr&gt;&#xA;  &lt;/thead&gt;&#xA;  &lt;tbody&gt;&#xA;    &lt;tr&gt;&#xA;      &lt;td&gt;Package bytes and package identity&lt;/td&gt;&#xA;      &lt;td&gt;Repository&lt;/td&gt;&#xA;    &lt;/tr&gt;&#xA;    &lt;tr&gt;&#xA;      &lt;td&gt;Desired memberships and Built state&lt;/td&gt;&#xA;      &lt;td&gt;Repository&lt;/td&gt;&#xA;    &lt;/tr&gt;&#xA;    &lt;tr&gt;&#xA;      &lt;td&gt;Generation and Changeset&lt;/td&gt;&#xA;      &lt;td&gt;Repository&lt;/td&gt;&#xA;    &lt;/tr&gt;&#xA;    &lt;tr&gt;&#xA;      &lt;td&gt;Publication target binding and revisions&lt;/td&gt;&#xA;      &lt;td&gt;Repository + target storage/prefix&lt;/td&gt;&#xA;    &lt;/tr&gt;&#xA;    &lt;tr&gt;&#xA;      &lt;td&gt;Publication attempt and applied checkpoint&lt;/td&gt;&#xA;      &lt;td&gt;Repository + target prefix&lt;/td&gt;&#xA;    &lt;/tr&gt;&#xA;    &lt;tr&gt;&#xA;      &lt;td&gt;Remote inventory, grace, and delete evidence&lt;/td&gt;&#xA;      &lt;td&gt;Repository + target prefix&lt;/td&gt;&#xA;    &lt;/tr&gt;&#xA;  &lt;/tbody&gt;&#xA;&lt;/table&gt;&#xA;&lt;/div&gt;&#xA;&#xA;&lt;p&gt;State is not silently shared across Repositories or publish prefixes. The same package may&#xA;therefore exist once in each Repository or target. That is intentional: local deduplication&#xA;must not create distributed ownership.&lt;/p&gt;</description>
      </item>
    <item>
        <title>Build a YUM Repository</title>
        <link>https://sow.pgsty.com/docs/tutorial/yum-repo/</link>
        <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
        
        <guid>https://sow.pgsty.com/docs/tutorial/yum-repo/</guid>
        <description>&lt;p&gt;This tutorial creates a new Managed RPM repository. You need a writable&#xA;directory, and one or more RPM files.&lt;/p&gt;&#xA;&lt;h2 id=&#34;1-create-the-workspace&#34;&gt;1. Create the workspace&#xA;&lt;/h2&gt;&#xA;&lt;div class=&#34;td-code td-code--untitled&#34; id=&#34;td-code-3f9e4bd7-fence-0&#34; data-td-code data-td-code-auto-id&#xA;     data-td-language=&#34;bash&#34; data-td-line-count=&#34;5&#34;&gt;&#xA;  &lt;div class=&#34;td-code__viewport&#34; id=&#34;td-code-3f9e4bd7-fence-0-viewport&#34; data-td-code-viewport&gt;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;mkdir -p /srv/sow&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nb&#34;&gt;cd&lt;/span&gt; /srv/sow&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sow init .&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sow repo new pigsty&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sow dist new el9 --format rpm -r pigsty&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&#xA;&lt;/div&gt;&#xA;&lt;p&gt;The Dist name is an identifier chosen by you. SOW does not infer an operating-system&#xA;release from &lt;code&gt;el9&lt;/code&gt;.&lt;/p&gt;</description>
      </item>
    <item>
        <title>Get Started</title>
        <link>https://sow.pgsty.com/docs/start/</link>
        <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
        
        <guid>https://sow.pgsty.com/docs/start/</guid>
        <description>&lt;p&gt;SOW builds static RPM/YUM and DEB/APT repositories; it is not an HTTP daemon. Choose one&#xA;of two isolated paths:&lt;/p&gt;&#xA;&lt;ul class=&#34;cards&#34;&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;&lt;strong&gt;Plain:&lt;/strong&gt; &lt;code&gt;sow create&lt;/code&gt; rebuilds indexes beside the packages in an ordinary directory.&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;&lt;strong&gt;Managed:&lt;/strong&gt; a workspace tracks package membership, Dists, architecture views, policy,&#xA;signing, generations, audit history, and publication targets.&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://sow.pgsty.com/docs/start/install/&#34;&gt;Installation&lt;/a&gt; — Choose a release archive, RPM/DEB package, or source build; verify the installed binary.&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://sow.pgsty.com/docs/start/quickstart/&#34;&gt;Quick Start&lt;/a&gt; — Create and serve a flat repository from a directory of packages.&lt;/p&gt;</description>
      </item>
    <item>
        <title>Build an APT Repository</title>
        <link>https://sow.pgsty.com/docs/tutorial/apt-repo/</link>
        <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
        
        <guid>https://sow.pgsty.com/docs/tutorial/apt-repo/</guid>
        <description>&lt;p&gt;This tutorial creates a new Managed DEB repository. You need a writable&#xA;directory, and one or more DEB files.&lt;/p&gt;&#xA;&lt;h2 id=&#34;1-create-the-workspace&#34;&gt;1. Create the workspace&#xA;&lt;/h2&gt;&#xA;&lt;div class=&#34;td-code td-code--untitled&#34; id=&#34;td-code-35f1bee1-fence-0&#34; data-td-code data-td-code-auto-id&#xA;     data-td-language=&#34;bash&#34; data-td-line-count=&#34;5&#34;&gt;&#xA;  &lt;div class=&#34;td-code__viewport&#34; id=&#34;td-code-35f1bee1-fence-0-viewport&#34; data-td-code-viewport&gt;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;mkdir -p /srv/sow&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nb&#34;&gt;cd&lt;/span&gt; /srv/sow&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sow init .&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sow repo new pigsty&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sow dist new trixie --format deb -r pigsty&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&#xA;&lt;/div&gt;&#xA;&lt;p&gt;The Dist name becomes the APT suite. It is an identifier chosen by you; SOW does not infer&#xA;distribution semantics from &lt;code&gt;trixie&lt;/code&gt;.&lt;/p&gt;</description>
      </item>
    <item>
        <title>sow.yml Reference</title>
        <link>https://sow.pgsty.com/docs/reference/config/</link>
        <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
        
        <guid>https://sow.pgsty.com/docs/reference/config/</guid>
        <description>&lt;p&gt;&lt;code&gt;sow.yml&lt;/code&gt; is the single configuration file of a managed workspace. It sits at the&#xA;workspace root, declares which repositories and distributions exist, and holds the&#xA;membership policy and signing settings that every build applies. Plain mode&#xA;(&lt;code&gt;sow create&lt;/code&gt;) never reads it.&lt;/p&gt;&#xA;&lt;p&gt;This page lists every field the parser accepts. Anything not listed here is rejected —&#xA;there are no undocumented keys and no keys reserved for future use.&lt;/p&gt;&#xA;&lt;h2 id=&#34;how-the-file-is-read&#34;&gt;How the file is read&#xA;&lt;/h2&gt;&#xA;&lt;p&gt;SOW parses &lt;code&gt;sow.yml&lt;/code&gt; with a strict decoder. Practically, that means:&lt;/p&gt;</description>
      </item>
    <item>
        <title>sow init</title>
        <link>https://sow.pgsty.com/docs/command/init/</link>
        <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
        
        <guid>https://sow.pgsty.com/docs/command/init/</guid>
        <description>&lt;p&gt;&lt;code&gt;sow init&lt;/code&gt; creates the root &lt;code&gt;sow.yml&lt;/code&gt; and the private &lt;code&gt;.sow/&lt;/code&gt; state directory that make a directory a&#xA;Workspace. It is also the convergence command for a config you wrote by hand: if &lt;code&gt;sow.yml&lt;/code&gt; already&#xA;declares Repositories and Dists, &lt;code&gt;init&lt;/code&gt; materializes the ones that don&amp;rsquo;t exist yet and leaves the&#xA;finished ones alone.&lt;/p&gt;&#xA;&lt;h2 id=&#34;synopsis&#34;&gt;Synopsis&#xA;&lt;/h2&gt;&#xA;&lt;div class=&#34;td-code td-code--untitled&#34; id=&#34;td-code-d33c2d3c-fence-0&#34; data-td-code data-td-code-auto-id&#xA;     data-td-language=&#34;text&#34; data-td-line-count=&#34;1&#34;&gt;&#xA;  &lt;div class=&#34;td-code__viewport&#34; id=&#34;td-code-d33c2d3c-fence-0-viewport&#34; data-td-code-viewport&gt;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-text&#34; data-lang=&#34;text&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sow init [DIR] [--json]&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&#xA;&lt;/div&gt;&#xA;&lt;p&gt;&lt;code&gt;DIR&lt;/code&gt; defaults to the current directory. &lt;code&gt;init&lt;/code&gt; takes no &lt;code&gt;-C/--workdir&lt;/code&gt; — the positional argument&#xA;already names the target unambiguously.&lt;/p&gt;</description>
      </item>
    <item>
        <title>Features</title>
        <link>https://sow.pgsty.com/docs/feature/</link>
        <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
        
        <guid>https://sow.pgsty.com/docs/feature/</guid>
        <description>&lt;p&gt;SOW has two isolated execution paths. Plain mode is a stateless rebuild of one directory;&#xA;Managed mode records package membership and immutable repository generations in a workspace.&#xA;Neither path silently adopts state from the other.&lt;/p&gt;&#xA;&lt;h2 id=&#34;capability-matrix&#34;&gt;Capability matrix&#xA;&lt;/h2&gt;&#xA;&lt;div class=&#34;td-table-scroll td-table-scroll--static&#34;&gt;&#xA;&lt;table&gt;&#xA;  &lt;thead&gt;&#xA;    &lt;tr&gt;&#xA;      &lt;th scope=&#34;col&#34;&gt;Capability&lt;/th&gt;&#xA;      &lt;th scope=&#34;col&#34; style=&#34;text-align: right&#34;&gt;Plain&lt;/th&gt;&#xA;      &lt;th scope=&#34;col&#34; style=&#34;text-align: right&#34;&gt;Managed&lt;/th&gt;&#xA;    &lt;/tr&gt;&#xA;  &lt;/thead&gt;&#xA;  &lt;tbody&gt;&#xA;    &lt;tr&gt;&#xA;      &lt;td&gt;RPM and DEB metadata&lt;/td&gt;&#xA;      &lt;td style=&#34;text-align: right&#34;&gt;yes&lt;/td&gt;&#xA;      &lt;td style=&#34;text-align: right&#34;&gt;yes&lt;/td&gt;&#xA;    &lt;/tr&gt;&#xA;    &lt;tr&gt;&#xA;      &lt;td&gt;Mixed RPM + DEB operation&lt;/td&gt;&#xA;      &lt;td style=&#34;text-align: right&#34;&gt;one directory&lt;/td&gt;&#xA;      &lt;td style=&#34;text-align: right&#34;&gt;one Repository, separate Dists&lt;/td&gt;&#xA;    &lt;/tr&gt;&#xA;    &lt;tr&gt;&#xA;      &lt;td&gt;Persistent membership and generations&lt;/td&gt;&#xA;      &lt;td style=&#34;text-align: right&#34;&gt;no&lt;/td&gt;&#xA;      &lt;td style=&#34;text-align: right&#34;&gt;yes&lt;/td&gt;&#xA;    &lt;/tr&gt;&#xA;    &lt;tr&gt;&#xA;      &lt;td&gt;Per-architecture views and neutral packages&lt;/td&gt;&#xA;      &lt;td style=&#34;text-align: right&#34;&gt;no&lt;/td&gt;&#xA;      &lt;td style=&#34;text-align: right&#34;&gt;yes&lt;/td&gt;&#xA;    &lt;/tr&gt;&#xA;    &lt;tr&gt;&#xA;      &lt;td&gt;&lt;code&gt;exclude&lt;/code&gt; and version &lt;code&gt;limit&lt;/code&gt; policy&lt;/td&gt;&#xA;      &lt;td style=&#34;text-align: right&#34;&gt;no&lt;/td&gt;&#xA;      &lt;td style=&#34;text-align: right&#34;&gt;yes&lt;/td&gt;&#xA;    &lt;/tr&gt;&#xA;    &lt;tr&gt;&#xA;      &lt;td&gt;Metadata signing&lt;/td&gt;&#xA;      &lt;td style=&#34;text-align: right&#34;&gt;no&lt;/td&gt;&#xA;      &lt;td style=&#34;text-align: right&#34;&gt;RPM and DEB&lt;/td&gt;&#xA;    &lt;/tr&gt;&#xA;    &lt;tr&gt;&#xA;      &lt;td&gt;RPM package signing&lt;/td&gt;&#xA;      &lt;td style=&#34;text-align: right&#34;&gt;&lt;code&gt;--sign-with&lt;/code&gt;&lt;/td&gt;&#xA;      &lt;td style=&#34;text-align: right&#34;&gt;&lt;code&gt;never&lt;/code&gt;, &lt;code&gt;fill&lt;/code&gt;, &lt;code&gt;always&lt;/code&gt;&lt;/td&gt;&#xA;    &lt;/tr&gt;&#xA;    &lt;tr&gt;&#xA;      &lt;td&gt;Transaction journal and recovery&lt;/td&gt;&#xA;      &lt;td style=&#34;text-align: right&#34;&gt;rerun &lt;code&gt;create&lt;/code&gt;&lt;/td&gt;&#xA;      &lt;td style=&#34;text-align: right&#34;&gt;workspace, Repository, publication&lt;/td&gt;&#xA;    &lt;/tr&gt;&#xA;    &lt;tr&gt;&#xA;      &lt;td&gt;Queryable operation log and JSONL export&lt;/td&gt;&#xA;      &lt;td style=&#34;text-align: right&#34;&gt;no&lt;/td&gt;&#xA;      &lt;td style=&#34;text-align: right&#34;&gt;yes&lt;/td&gt;&#xA;    &lt;/tr&gt;&#xA;    &lt;tr&gt;&#xA;      &lt;td&gt;Publication targets&lt;/td&gt;&#xA;      &lt;td style=&#34;text-align: right&#34;&gt;no&lt;/td&gt;&#xA;      &lt;td style=&#34;text-align: right&#34;&gt;filesystem and R2&lt;/td&gt;&#xA;    &lt;/tr&gt;&#xA;  &lt;/tbody&gt;&#xA;&lt;/table&gt;&#xA;&lt;/div&gt;&#xA;&#xA;&lt;p&gt;SOW parses packages and renders metadata in-process. It does not invoke&#xA;&lt;code&gt;createrepo_c&lt;/code&gt;, &lt;code&gt;dpkg-scanpackages&lt;/code&gt;, &lt;code&gt;reprepro&lt;/code&gt;, or &lt;code&gt;modifyrepo_c&lt;/code&gt;. RPM package signing&#xA;is the exception: it needs the host &lt;code&gt;rpm&lt;/code&gt; command and GPG environment because it rewrites&#xA;package payloads.&lt;/p&gt;</description>
      </item>
    <item>
        <title>Your First Workspace</title>
        <link>https://sow.pgsty.com/docs/start/workspace/</link>
        <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
        
        <guid>https://sow.pgsty.com/docs/start/workspace/</guid>
        <description>&lt;p&gt;Managed mode keeps configuration, membership, generations, and audit state. This example&#xA;starts from an empty directory.&lt;/p&gt;&#xA;&lt;div class=&#34;td-steps td-max-width-on-larger-screens&#34;&gt;&#xA;&lt;h2 id=&#34;1-initialize-the-workspace&#34;&gt;Initialize the workspace&#xA;&lt;/h2&gt;&#xA;&lt;div class=&#34;td-code td-code--untitled&#34; id=&#34;td-code-b6b3b1e6-fence-0&#34; data-td-code data-td-code-auto-id&#xA;     data-td-language=&#34;bash&#34; data-td-line-count=&#34;2&#34;&gt;&#xA;  &lt;div class=&#34;td-code__viewport&#34; id=&#34;td-code-b6b3b1e6-fence-0-viewport&#34; data-td-code-viewport&gt;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sow init /srv/sow&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nb&#34;&gt;cd&lt;/span&gt; /srv/sow&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&#xA;&lt;/div&gt;&#xA;&lt;p&gt;&lt;code&gt;init&lt;/code&gt; creates:&lt;/p&gt;&#xA;&lt;div class=&#34;td-code td-code--untitled&#34; id=&#34;td-code-b6b3b1e6-fence-1&#34; data-td-code data-td-code-auto-id&#xA;     data-td-language=&#34;text&#34; data-td-line-count=&#34;3&#34;&gt;&#xA;  &lt;div class=&#34;td-code__viewport&#34; id=&#34;td-code-b6b3b1e6-fence-1-viewport&#34; data-td-code-viewport&gt;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-text&#34; data-lang=&#34;text&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;/srv/sow/&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;├── sow.yml   # configuration; schema: sow/v3&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;└── .sow/     # SQLite state, locks, staging, recovery, journals&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&#xA;&lt;/div&gt;&#xA;&lt;p&gt;Do not edit or serve &lt;code&gt;.sow/&lt;/code&gt;. &lt;code&gt;init&lt;/code&gt; is idempotent: rerunning it validates and converges&#xA;declared repositories and Dists; it does not reset a valid workspace.&lt;/p&gt;</description>
      </item>
    <item>
        <title>Managed Workspaces</title>
        <link>https://sow.pgsty.com/docs/feature/managed/</link>
        <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
        
        <guid>https://sow.pgsty.com/docs/feature/managed/</guid>
        <description>&lt;p&gt;Managed mode is what you use when the same repository will be updated for months: packages arrive in batches, policy decides what stays, and you need to prove afterwards what changed and when. This page explains the three-tier model, the layout it produces, and how commands figure out which repository and which Dist you meant.&lt;/p&gt;&#xA;&lt;h2 id=&#34;the-three-tiers&#34;&gt;The three tiers&#xA;&lt;/h2&gt;&#xA;&lt;div class=&#34;td-code td-code--untitled&#34; id=&#34;td-code-01e8acae-fence-0&#34; data-td-code data-td-code-auto-id&#xA;     data-td-language=&#34;text&#34; data-td-line-count=&#34;4&#34;&gt;&#xA;  &lt;div class=&#34;td-code__viewport&#34; id=&#34;td-code-01e8acae-fence-0-viewport&#34; data-td-code-viewport&gt;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-text&#34; data-lang=&#34;text&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Workspace                          discovery and configuration boundary&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;└── Repository                     ownership boundary: pool, dists, SQLite, lock, generations&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    └── Dist                       a named membership set in exactly one format&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        └── Architecture View      a rendered projection — not a membership&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&#xA;&lt;/div&gt;&#xA;&lt;p&gt;Each tier has one job, and the boundaries are strict:&lt;/p&gt;</description>
      </item>
    <item>
        <title>Core Concepts</title>
        <link>https://sow.pgsty.com/docs/start/concepts/</link>
        <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
        
        <guid>https://sow.pgsty.com/docs/start/concepts/</guid>
        <description>&lt;h2 id=&#34;plain-or-managed&#34;&gt;Plain or Managed&#xA;&lt;/h2&gt;&#xA;&lt;p&gt;The two execution paths are separate.&lt;/p&gt;&#xA;&lt;div class=&#34;td-table-scroll td-table-scroll--static&#34;&gt;&#xA;&lt;table&gt;&#xA;  &lt;thead&gt;&#xA;    &lt;tr&gt;&#xA;      &lt;th scope=&#34;col&#34;&gt;&lt;/th&gt;&#xA;      &lt;th scope=&#34;col&#34;&gt;Plain&lt;/th&gt;&#xA;      &lt;th scope=&#34;col&#34;&gt;Managed&lt;/th&gt;&#xA;    &lt;/tr&gt;&#xA;  &lt;/thead&gt;&#xA;  &lt;tbody&gt;&#xA;    &lt;tr&gt;&#xA;      &lt;td&gt;Entry point&lt;/td&gt;&#xA;      &lt;td&gt;&lt;code&gt;sow create DIR&lt;/code&gt;&lt;/td&gt;&#xA;      &lt;td&gt;&lt;code&gt;init&lt;/code&gt;, &lt;code&gt;repo&lt;/code&gt;, &lt;code&gt;dist&lt;/code&gt;, &lt;code&gt;add&lt;/code&gt;, &lt;code&gt;rm&lt;/code&gt;, &lt;code&gt;build&lt;/code&gt;&lt;/td&gt;&#xA;    &lt;/tr&gt;&#xA;    &lt;tr&gt;&#xA;      &lt;td&gt;State&lt;/td&gt;&#xA;      &lt;td&gt;package directory&lt;/td&gt;&#xA;      &lt;td&gt;&lt;code&gt;sow.yml&lt;/code&gt; plus private SQLite/journals&lt;/td&gt;&#xA;    &lt;/tr&gt;&#xA;    &lt;tr&gt;&#xA;      &lt;td&gt;Public layout&lt;/td&gt;&#xA;      &lt;td&gt;flat RPM/DEB indexes&lt;/td&gt;&#xA;      &lt;td&gt;Repository &lt;code&gt;pool/ + dists/&lt;/code&gt;&lt;/td&gt;&#xA;    &lt;/tr&gt;&#xA;    &lt;tr&gt;&#xA;      &lt;td&gt;Formats&lt;/td&gt;&#xA;      &lt;td&gt;RPM and DEB may share one directory&lt;/td&gt;&#xA;      &lt;td&gt;one format per Dist&lt;/td&gt;&#xA;    &lt;/tr&gt;&#xA;    &lt;tr&gt;&#xA;      &lt;td&gt;Architecture views&lt;/td&gt;&#xA;      &lt;td&gt;no&lt;/td&gt;&#xA;      &lt;td&gt;yes&lt;/td&gt;&#xA;    &lt;/tr&gt;&#xA;    &lt;tr&gt;&#xA;      &lt;td&gt;Policy and audit&lt;/td&gt;&#xA;      &lt;td&gt;no&lt;/td&gt;&#xA;      &lt;td&gt;yes&lt;/td&gt;&#xA;    &lt;/tr&gt;&#xA;    &lt;tr&gt;&#xA;      &lt;td&gt;Metadata signing and publication targets&lt;/td&gt;&#xA;      &lt;td&gt;no&lt;/td&gt;&#xA;      &lt;td&gt;yes&lt;/td&gt;&#xA;    &lt;/tr&gt;&#xA;  &lt;/tbody&gt;&#xA;&lt;/table&gt;&#xA;&lt;/div&gt;&#xA;&#xA;&lt;p&gt;Choose Plain when directory contents already equal the desired repository. Choose Managed&#xA;when SOW must own membership, policy, generations, signing, audit, or publication.&lt;/p&gt;</description>
      </item>
    <item>
        <title>sow repo</title>
        <link>https://sow.pgsty.com/docs/command/repo/</link>
        <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
        
        <guid>https://sow.pgsty.com/docs/command/repo/</guid>
        <description>&lt;p&gt;A Repository owns one &lt;code&gt;pool/&lt;/code&gt;, one &lt;code&gt;dists/&lt;/code&gt;, one SQLite database and one private state directory. It&#xA;is the boundary of locking, transaction recovery, Generation numbering and Changesets — nothing is&#xA;deduplicated across Repositories and no cross-Repository commit is atomic. &lt;code&gt;sow repo&lt;/code&gt; manages that&#xA;boundary.&lt;/p&gt;&#xA;&lt;h2 id=&#34;synopsis&#34;&gt;Synopsis&#xA;&lt;/h2&gt;&#xA;&lt;div class=&#34;td-code td-code--untitled&#34; id=&#34;td-code-d9b40e46-fence-0&#34; data-td-code data-td-code-auto-id&#xA;     data-td-language=&#34;text&#34; data-td-line-count=&#34;5&#34;&gt;&#xA;  &lt;div class=&#34;td-code__viewport&#34; id=&#34;td-code-d9b40e46-fence-0-viewport&#34; data-td-code-viewport&gt;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-text&#34; data-lang=&#34;text&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sow repo ls [-C DIR] [--json]&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sow repo new NAME [-C DIR] [-T DUR | -N] [--json]&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sow repo show [NAME] [-C DIR] [-r NAME] [--json]&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sow repo migrate [NAME] [--abort] [-j N] [-C DIR] [-r NAME] [-T DUR | -N] [--json]&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sow repo rm NAME [-f|--force] [-C DIR] [-T DUR | -N] [--json]&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&#xA;&lt;/div&gt;&#xA;&lt;h2 id=&#34;naming&#34;&gt;Naming&#xA;&lt;/h2&gt;&#xA;&lt;p&gt;A Repository name must match &lt;code&gt;[a-z0-9][a-z0-9._-]*&lt;/code&gt; and may not be &lt;code&gt;.&lt;/code&gt;, &lt;code&gt;..&lt;/code&gt;, &lt;code&gt;.sow&lt;/code&gt;, &lt;code&gt;pool&lt;/code&gt;,&#xA;&lt;code&gt;dists&lt;/code&gt;, or collide with a Workspace reserved file.&lt;/p&gt;</description>
      </item>
    <item>
        <title>Serve and Publish Repositories</title>
        <link>https://sow.pgsty.com/docs/tutorial/serving/</link>
        <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
        
        <guid>https://sow.pgsty.com/docs/tutorial/serving/</guid>
        <description>&lt;p&gt;SOW writes static files; it is not an HTTP server. This guide keeps the writable Workspace&#xA;separate from the path Nginx serves.&lt;/p&gt;&#xA;&lt;h2 id=&#34;public-and-private-paths&#34;&gt;Public and private paths&#xA;&lt;/h2&gt;&#xA;&lt;div class=&#34;td-table-scroll td-table-scroll--static&#34;&gt;&#xA;&lt;table&gt;&#xA;  &lt;thead&gt;&#xA;    &lt;tr&gt;&#xA;      &lt;th scope=&#34;col&#34;&gt;Mode&lt;/th&gt;&#xA;      &lt;th scope=&#34;col&#34;&gt;Public unit&lt;/th&gt;&#xA;      &lt;th scope=&#34;col&#34;&gt;Never serve&lt;/th&gt;&#xA;    &lt;/tr&gt;&#xA;  &lt;/thead&gt;&#xA;  &lt;tbody&gt;&#xA;    &lt;tr&gt;&#xA;      &lt;td&gt;Plain&lt;/td&gt;&#xA;      &lt;td&gt;the directory passed to &lt;code&gt;sow create&lt;/code&gt;&lt;/td&gt;&#xA;      &lt;td&gt;transient &lt;code&gt;.sow-plain-stage-*&lt;/code&gt; output; no durable journal&lt;/td&gt;&#xA;    &lt;/tr&gt;&#xA;    &lt;tr&gt;&#xA;      &lt;td&gt;Managed&lt;/td&gt;&#xA;      &lt;td&gt;one Repository&amp;rsquo;s complete &lt;code&gt;pool/ + dists/&lt;/code&gt; tree&lt;/td&gt;&#xA;      &lt;td&gt;Workspace &lt;code&gt;sow.yml&lt;/code&gt;, &lt;code&gt;.sow/&lt;/code&gt;, SQLite, locks, journals, staging&lt;/td&gt;&#xA;    &lt;/tr&gt;&#xA;  &lt;/tbody&gt;&#xA;&lt;/table&gt;&#xA;&lt;/div&gt;&#xA;&#xA;&lt;p&gt;For the workspace in &lt;a href=&#34;https://sow.pgsty.com/docs/start/workspace/&#34;&gt;First Workspace&lt;/a&gt;, the source Repository is&#xA;&lt;code&gt;/srv/sow/local&lt;/code&gt;. Do not make &lt;code&gt;/srv/sow&lt;/code&gt; the document root.&lt;/p&gt;</description>
      </item>
    <item>
        <title>Build the pigsty-infra Repository</title>
        <link>https://sow.pgsty.com/docs/tutorial/infra-repo/</link>
        <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
        
        <guid>https://sow.pgsty.com/docs/tutorial/infra-repo/</guid>
        <description>&lt;p&gt;&lt;a href=&#34;https://github.com/pgsty/infra-pkg&#34;&gt;&lt;code&gt;pgsty/infra-pkg&lt;/code&gt;&lt;/a&gt; is the upstream build source for Pigsty Infra packages.&#xA;This tutorial assumes the dual-architecture RPMs and DEBs already exist and covers the second half of the job: turning that pile of packages into a real, consumable, maintainable SOW repository named &lt;code&gt;infra&lt;/code&gt;.&lt;/p&gt;&#xA;&lt;h2 id=&#34;1-put-the-packages-under-repo&#34;&gt;1. Put the packages under ~/repo&#xA;&lt;/h2&gt;&#xA;&lt;p&gt;This tutorial uses the fixed path &lt;code&gt;~/repo&lt;/code&gt; throughout. Copy the existing packages into two input directories:&lt;/p&gt;&#xA;&lt;div class=&#34;td-code td-code--untitled&#34; id=&#34;td-code-df876e1d-fence-0&#34; data-td-code data-td-code-auto-id&#xA;     data-td-language=&#34;bash&#34; data-td-line-count=&#34;3&#34;&gt;&#xA;  &lt;div class=&#34;td-code__viewport&#34; id=&#34;td-code-df876e1d-fence-0-viewport&#34; data-td-code-viewport&gt;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;mkdir -p ~/repo/packages/rpm ~/repo/packages/deb&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;cp ~/pgsty/infra-pkg/dist/rpm/*.rpm ~/repo/packages/rpm/&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;cp ~/pgsty/infra-pkg/dist/deb/*.deb ~/repo/packages/deb/&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&#xA;&lt;/div&gt;&#xA;&lt;p&gt;Confirm that all four format-by-architecture cells contain real payloads:&lt;/p&gt;</description>
      </item>
    <item>
        <title>sow dist</title>
        <link>https://sow.pgsty.com/docs/command/dist/</link>
        <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
        
        <guid>https://sow.pgsty.com/docs/command/dist/</guid>
        <description>&lt;p&gt;A Dist is a named set of packages in exactly one format (&lt;code&gt;rpm&lt;/code&gt; or &lt;code&gt;deb&lt;/code&gt;) inside one Repository. It is&#xA;what a client points at. A Repository can hold RPM and DEB Dists side by side; they share one &lt;code&gt;pool/&lt;/code&gt;&#xA;but render into completely separate &lt;code&gt;dists/&lt;/code&gt; subtrees.&lt;/p&gt;&#xA;&lt;h2 id=&#34;synopsis&#34;&gt;Synopsis&#xA;&lt;/h2&gt;&#xA;&lt;div class=&#34;td-code td-code--untitled&#34; id=&#34;td-code-33168ed5-fence-0&#34; data-td-code data-td-code-auto-id&#xA;     data-td-language=&#34;text&#34; data-td-line-count=&#34;4&#34;&gt;&#xA;  &lt;div class=&#34;td-code__viewport&#34; id=&#34;td-code-33168ed5-fence-0-viewport&#34; data-td-code-viewport&gt;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-text&#34; data-lang=&#34;text&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sow dist ls [-C DIR] [-r NAME] [--json]&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sow dist new NAME --format rpm|deb [-C DIR] [-r NAME] [-T DUR | -N] [--json]&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sow dist show NAME [-C DIR] [-r NAME] [--json]&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sow dist rm NAME [-f|--force] [-C DIR] [-r NAME] [-T DUR | -N] [--json]&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&#xA;&lt;/div&gt;&#xA;&lt;h2 id=&#34;naming&#34;&gt;Naming&#xA;&lt;/h2&gt;&#xA;&lt;p&gt;Dist names follow the same rule as Repository names: &lt;code&gt;[a-z0-9][a-z0-9._-]*&lt;/code&gt;, excluding &lt;code&gt;.&lt;/code&gt;, &lt;code&gt;..&lt;/code&gt;,&#xA;&lt;code&gt;.sow&lt;/code&gt;, &lt;code&gt;pool&lt;/code&gt; and &lt;code&gt;dists&lt;/code&gt;.&lt;/p&gt;</description>
      </item>
    <item>
        <title>Membership Policy</title>
        <link>https://sow.pgsty.com/docs/feature/policy/</link>
        <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
        
        <guid>https://sow.pgsty.com/docs/feature/policy/</guid>
        <description>&lt;p&gt;Policy is the answer to &amp;ldquo;I dumped a build directory into this Dist and I do not want the debuginfo packages, and I only want the latest version of each package.&amp;rdquo; Two rules do that work, they run in a fixed order, and they run over the whole candidate set — not just the packages you happened to add this time.&lt;/p&gt;&#xA;&lt;h2 id=&#34;the-two-rules-and-their-order&#34;&gt;The two rules and their order&#xA;&lt;/h2&gt;&#xA;&lt;div class=&#34;td-code td-code--untitled&#34; id=&#34;td-code-77527e0b-fence-0&#34; data-td-code data-td-code-auto-id&#xA;     data-td-language=&#34;text&#34; data-td-line-count=&#34;1&#34;&gt;&#xA;  &lt;div class=&#34;td-code__viewport&#34; id=&#34;td-code-77527e0b-fence-0-viewport&#34; data-td-code-viewport&gt;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-text&#34; data-lang=&#34;text&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;candidate set  →  exclude  →  limit  →  Desired Membership&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&#xA;&lt;/div&gt;&#xA;&lt;p&gt;&lt;code&gt;exclude&lt;/code&gt; drops packages that match a rule. &lt;code&gt;limit&lt;/code&gt; then caps how many versions survive per package name and architecture. The order is fixed and never configurable, because the reverse order would let an excluded package consume a version slot on its way out.&lt;/p&gt;</description>
      </item>
    <item>
        <title>sow add</title>
        <link>https://sow.pgsty.com/docs/command/add/</link>
        <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
        
        <guid>https://sow.pgsty.com/docs/command/add/</guid>
        <description>&lt;p&gt;&lt;code&gt;sow add&lt;/code&gt; is the main write path. It parses the packages you point at, derives their format and&#xA;architecture from the package headers, applies the Dist&amp;rsquo;s membership policy, and — unless you pass&#xA;&lt;code&gt;--skip&lt;/code&gt; — rebuilds every affected index before it returns. When the command exits &lt;code&gt;0&lt;/code&gt;, clients can&#xA;already see the new packages.&lt;/p&gt;&#xA;&lt;h2 id=&#34;synopsis&#34;&gt;Synopsis&#xA;&lt;/h2&gt;&#xA;&lt;div class=&#34;td-code td-code--untitled&#34; id=&#34;td-code-a365c326-fence-0&#34; data-td-code data-td-code-auto-id&#xA;     data-td-language=&#34;text&#34; data-td-line-count=&#34;1&#34;&gt;&#xA;  &lt;div class=&#34;td-code__viewport&#34; id=&#34;td-code-a365c326-fence-0-viewport&#34; data-td-code-viewport&gt;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-text&#34; data-lang=&#34;text&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sow add PATH... [-R|--recursive] [--skip] [-j|--jobs N] [-C|--workdir DIR] [-r|--repo NAME] [-d|--dist NAME]... [-T|--timeout DUR | -N|--no-wait] [--json]&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&#xA;&lt;/div&gt;&#xA;&lt;h2 id=&#34;options&#34;&gt;Options&#xA;&lt;/h2&gt;&#xA;&lt;div class=&#34;td-table-scroll td-table-scroll--static&#34;&gt;&#xA;&lt;table&gt;&#xA;  &lt;thead&gt;&#xA;    &lt;tr&gt;&#xA;      &lt;th scope=&#34;col&#34;&gt;Flag&lt;/th&gt;&#xA;      &lt;th scope=&#34;col&#34;&gt;Description&lt;/th&gt;&#xA;      &lt;th scope=&#34;col&#34;&gt;Default&lt;/th&gt;&#xA;    &lt;/tr&gt;&#xA;  &lt;/thead&gt;&#xA;  &lt;tbody&gt;&#xA;    &lt;tr&gt;&#xA;      &lt;td&gt;&lt;code&gt;-R, --recursive&lt;/code&gt;&lt;/td&gt;&#xA;      &lt;td&gt;Descend into subdirectories of a &lt;code&gt;PATH&lt;/code&gt; directory&lt;/td&gt;&#xA;      &lt;td&gt;off (top level only)&lt;/td&gt;&#xA;    &lt;/tr&gt;&#xA;    &lt;tr&gt;&#xA;      &lt;td&gt;&lt;code&gt;--skip&lt;/code&gt;&lt;/td&gt;&#xA;      &lt;td&gt;Update Desired state only; do not build&lt;/td&gt;&#xA;      &lt;td&gt;off&lt;/td&gt;&#xA;    &lt;/tr&gt;&#xA;    &lt;tr&gt;&#xA;      &lt;td&gt;&lt;code&gt;-j, --jobs N&lt;/code&gt;&lt;/td&gt;&#xA;      &lt;td&gt;Parallel workers for parsing, hashing and rendering&lt;/td&gt;&#xA;      &lt;td&gt;logical CPU count&lt;/td&gt;&#xA;    &lt;/tr&gt;&#xA;    &lt;tr&gt;&#xA;      &lt;td&gt;&lt;code&gt;-C, --workdir DIR&lt;/code&gt;&lt;/td&gt;&#xA;      &lt;td&gt;Workspace discovery start directory&lt;/td&gt;&#xA;      &lt;td&gt;current directory&lt;/td&gt;&#xA;    &lt;/tr&gt;&#xA;    &lt;tr&gt;&#xA;      &lt;td&gt;&lt;code&gt;-r, --repo NAME&lt;/code&gt;&lt;/td&gt;&#xA;      &lt;td&gt;Select a repository&lt;/td&gt;&#xA;      &lt;td&gt;selection rules&lt;/td&gt;&#xA;    &lt;/tr&gt;&#xA;    &lt;tr&gt;&#xA;      &lt;td&gt;&lt;code&gt;-d, --dist NAME&lt;/code&gt;&lt;/td&gt;&#xA;      &lt;td&gt;Select a distribution; repeatable&lt;/td&gt;&#xA;      &lt;td&gt;selection rules&lt;/td&gt;&#xA;    &lt;/tr&gt;&#xA;    &lt;tr&gt;&#xA;      &lt;td&gt;&lt;code&gt;-T, --timeout DUR&lt;/code&gt;&lt;/td&gt;&#xA;      &lt;td&gt;Maximum lock wait; &lt;code&gt;0&lt;/code&gt; waits indefinitely&lt;/td&gt;&#xA;      &lt;td&gt;&lt;code&gt;0&lt;/code&gt;&lt;/td&gt;&#xA;    &lt;/tr&gt;&#xA;    &lt;tr&gt;&#xA;      &lt;td&gt;&lt;code&gt;-N, --no-wait&lt;/code&gt;&lt;/td&gt;&#xA;      &lt;td&gt;Fail immediately when the lock is held&lt;/td&gt;&#xA;      &lt;td&gt;false&lt;/td&gt;&#xA;    &lt;/tr&gt;&#xA;    &lt;tr&gt;&#xA;      &lt;td&gt;&lt;code&gt;--json&lt;/code&gt;&lt;/td&gt;&#xA;      &lt;td&gt;Emit the versioned JSON envelope&lt;/td&gt;&#xA;      &lt;td&gt;false&lt;/td&gt;&#xA;    &lt;/tr&gt;&#xA;  &lt;/tbody&gt;&#xA;&lt;/table&gt;&#xA;&lt;/div&gt;&#xA;&#xA;&lt;h2 id=&#34;inputs-and-targets&#34;&gt;Inputs and targets&#xA;&lt;/h2&gt;&#xA;&lt;p&gt;&lt;code&gt;PATH&lt;/code&gt; can be a file or a directory. A directory is scanned top level only unless you pass &lt;code&gt;-R&lt;/code&gt;.&lt;/p&gt;</description>
      </item>
    <item>
        <title>sow rm</title>
        <link>https://sow.pgsty.com/docs/command/rm/</link>
        <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
        
        <guid>https://sow.pgsty.com/docs/command/rm/</guid>
        <description>&lt;p&gt;&lt;code&gt;sow rm&lt;/code&gt; takes packages out of the Desired Membership of the Dists you select and, by default,&#xA;rebuilds the affected indexes immediately. It does not delete bytes from &lt;code&gt;pool/&lt;/code&gt; — membership and&#xA;content are separate concepts, and reclamation is the separate conservative &lt;code&gt;sow gc&lt;/code&gt; operation.&lt;/p&gt;&#xA;&lt;h2 id=&#34;synopsis&#34;&gt;Synopsis&#xA;&lt;/h2&gt;&#xA;&lt;div class=&#34;td-code td-code--untitled&#34; id=&#34;td-code-96bcb789-fence-0&#34; data-td-code data-td-code-auto-id&#xA;     data-td-language=&#34;text&#34; data-td-line-count=&#34;1&#34;&gt;&#xA;  &lt;div class=&#34;td-code__viewport&#34; id=&#34;td-code-96bcb789-fence-0-viewport&#34; data-td-code-viewport&gt;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-text&#34; data-lang=&#34;text&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sow rm PACKAGE... [-c|--check] [--skip] [-j|--jobs N] [-C|--workdir DIR] [-r|--repo NAME] [-d|--dist NAME]... [-T|--timeout DUR | -N|--no-wait] [--json]&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&#xA;&lt;/div&gt;&#xA;&lt;h2 id=&#34;options&#34;&gt;Options&#xA;&lt;/h2&gt;&#xA;&lt;div class=&#34;td-table-scroll td-table-scroll--static&#34;&gt;&#xA;&lt;table&gt;&#xA;  &lt;thead&gt;&#xA;    &lt;tr&gt;&#xA;      &lt;th scope=&#34;col&#34;&gt;Flag&lt;/th&gt;&#xA;      &lt;th scope=&#34;col&#34;&gt;Description&lt;/th&gt;&#xA;      &lt;th scope=&#34;col&#34;&gt;Default&lt;/th&gt;&#xA;    &lt;/tr&gt;&#xA;  &lt;/thead&gt;&#xA;  &lt;tbody&gt;&#xA;    &lt;tr&gt;&#xA;      &lt;td&gt;&lt;code&gt;-c, --check&lt;/code&gt;&lt;/td&gt;&#xA;      &lt;td&gt;Preview only; compute and print the plan without writing anything&lt;/td&gt;&#xA;      &lt;td&gt;off&lt;/td&gt;&#xA;    &lt;/tr&gt;&#xA;    &lt;tr&gt;&#xA;      &lt;td&gt;&lt;code&gt;--skip&lt;/code&gt;&lt;/td&gt;&#xA;      &lt;td&gt;Update Desired state only; do not build&lt;/td&gt;&#xA;      &lt;td&gt;off&lt;/td&gt;&#xA;    &lt;/tr&gt;&#xA;    &lt;tr&gt;&#xA;      &lt;td&gt;&lt;code&gt;-j, --jobs N&lt;/code&gt;&lt;/td&gt;&#xA;      &lt;td&gt;Parallel workers&lt;/td&gt;&#xA;      &lt;td&gt;logical CPU count&lt;/td&gt;&#xA;    &lt;/tr&gt;&#xA;    &lt;tr&gt;&#xA;      &lt;td&gt;&lt;code&gt;-C, --workdir DIR&lt;/code&gt;&lt;/td&gt;&#xA;      &lt;td&gt;Workspace discovery start directory&lt;/td&gt;&#xA;      &lt;td&gt;current directory&lt;/td&gt;&#xA;    &lt;/tr&gt;&#xA;    &lt;tr&gt;&#xA;      &lt;td&gt;&lt;code&gt;-r, --repo NAME&lt;/code&gt;&lt;/td&gt;&#xA;      &lt;td&gt;Select a repository&lt;/td&gt;&#xA;      &lt;td&gt;selection rules&lt;/td&gt;&#xA;    &lt;/tr&gt;&#xA;    &lt;tr&gt;&#xA;      &lt;td&gt;&lt;code&gt;-d, --dist NAME&lt;/code&gt;&lt;/td&gt;&#xA;      &lt;td&gt;Select a distribution; repeatable&lt;/td&gt;&#xA;      &lt;td&gt;selection rules&lt;/td&gt;&#xA;    &lt;/tr&gt;&#xA;    &lt;tr&gt;&#xA;      &lt;td&gt;&lt;code&gt;-T, --timeout DUR&lt;/code&gt;&lt;/td&gt;&#xA;      &lt;td&gt;Maximum lock wait; &lt;code&gt;0&lt;/code&gt; waits indefinitely&lt;/td&gt;&#xA;      &lt;td&gt;&lt;code&gt;0&lt;/code&gt;&lt;/td&gt;&#xA;    &lt;/tr&gt;&#xA;    &lt;tr&gt;&#xA;      &lt;td&gt;&lt;code&gt;-N, --no-wait&lt;/code&gt;&lt;/td&gt;&#xA;      &lt;td&gt;Fail immediately when the lock is held&lt;/td&gt;&#xA;      &lt;td&gt;false&lt;/td&gt;&#xA;    &lt;/tr&gt;&#xA;    &lt;tr&gt;&#xA;      &lt;td&gt;&lt;code&gt;--json&lt;/code&gt;&lt;/td&gt;&#xA;      &lt;td&gt;Emit the versioned JSON envelope&lt;/td&gt;&#xA;      &lt;td&gt;false&lt;/td&gt;&#xA;    &lt;/tr&gt;&#xA;  &lt;/tbody&gt;&#xA;&lt;/table&gt;&#xA;&lt;/div&gt;&#xA;&#xA;&lt;p&gt;&lt;code&gt;--check&lt;/code&gt; and &lt;code&gt;--skip&lt;/code&gt; are mutually exclusive:&lt;/p&gt;</description>
      </item>
    <item>
        <title>sow ls</title>
        <link>https://sow.pgsty.com/docs/command/ls/</link>
        <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
        
        <guid>https://sow.pgsty.com/docs/command/ls/</guid>
        <description>&lt;p&gt;&lt;code&gt;sow ls&lt;/code&gt; is a read-only query over Package Objects and Dist Membership. It shows what each selected&#xA;Dist should contain and whether that membership is present in the current Built Generation.&lt;/p&gt;&#xA;&lt;h2 id=&#34;synopsis&#34;&gt;Synopsis&#xA;&lt;/h2&gt;&#xA;&lt;div class=&#34;td-code td-code--untitled&#34; id=&#34;td-code-ce740993-fence-0&#34; data-td-code data-td-code-auto-id&#xA;     data-td-language=&#34;text&#34; data-td-line-count=&#34;1&#34;&gt;&#xA;  &lt;div class=&#34;td-code__viewport&#34; id=&#34;td-code-ce740993-fence-0-viewport&#34; data-td-code-viewport&gt;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-text&#34; data-lang=&#34;text&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sow ls [-C|--workdir DIR] [-r|--repo NAME] [-d|--dist NAME]... [--json]&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&#xA;&lt;/div&gt;&#xA;&lt;div class=&#34;td-table-scroll td-table-scroll--static&#34;&gt;&#xA;&lt;table&gt;&#xA;  &lt;thead&gt;&#xA;    &lt;tr&gt;&#xA;      &lt;th scope=&#34;col&#34;&gt;Flag&lt;/th&gt;&#xA;      &lt;th scope=&#34;col&#34;&gt;Meaning&lt;/th&gt;&#xA;      &lt;th scope=&#34;col&#34;&gt;Default&lt;/th&gt;&#xA;    &lt;/tr&gt;&#xA;  &lt;/thead&gt;&#xA;  &lt;tbody&gt;&#xA;    &lt;tr&gt;&#xA;      &lt;td&gt;&lt;code&gt;-C, --workdir DIR&lt;/code&gt;&lt;/td&gt;&#xA;      &lt;td&gt;Workspace discovery start directory&lt;/td&gt;&#xA;      &lt;td&gt;current directory&lt;/td&gt;&#xA;    &lt;/tr&gt;&#xA;    &lt;tr&gt;&#xA;      &lt;td&gt;&lt;code&gt;-r, --repo NAME&lt;/code&gt;&lt;/td&gt;&#xA;      &lt;td&gt;Select a Repository&lt;/td&gt;&#xA;      &lt;td&gt;&lt;a href=&#34;https://sow.pgsty.com/docs/command/#repository-selection&#34;&gt;selection rules&lt;/a&gt;&lt;/td&gt;&#xA;    &lt;/tr&gt;&#xA;    &lt;tr&gt;&#xA;      &lt;td&gt;&lt;code&gt;-d, --dist NAME&lt;/code&gt;&lt;/td&gt;&#xA;      &lt;td&gt;Select a Dist; repeatable&lt;/td&gt;&#xA;      &lt;td&gt;&lt;a href=&#34;https://sow.pgsty.com/docs/command/#dist-selection&#34;&gt;selection rules&lt;/a&gt;&lt;/td&gt;&#xA;    &lt;/tr&gt;&#xA;    &lt;tr&gt;&#xA;      &lt;td&gt;&lt;code&gt;--json&lt;/code&gt;&lt;/td&gt;&#xA;      &lt;td&gt;Emit the &lt;code&gt;sow.cli/v1&lt;/code&gt; envelope&lt;/td&gt;&#xA;      &lt;td&gt;false&lt;/td&gt;&#xA;    &lt;/tr&gt;&#xA;  &lt;/tbody&gt;&#xA;&lt;/table&gt;&#xA;&lt;/div&gt;&#xA;&#xA;&lt;p&gt;There is no &lt;code&gt;--pool&lt;/code&gt;, &lt;code&gt;--match&lt;/code&gt;, or output-format flag.&lt;/p&gt;</description>
      </item>
    <item>
        <title>sow show</title>
        <link>https://sow.pgsty.com/docs/command/show/</link>
        <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
        
        <guid>https://sow.pgsty.com/docs/command/show/</guid>
        <description>&lt;p&gt;&lt;code&gt;sow show&lt;/code&gt; resolves one package reference in the selected Repository and prints the complete Package&#xA;Object. It is read-only and takes no write lock.&lt;/p&gt;&#xA;&lt;h2 id=&#34;synopsis&#34;&gt;Synopsis&#xA;&lt;/h2&gt;&#xA;&lt;div class=&#34;td-code td-code--untitled&#34; id=&#34;td-code-9d3997e0-fence-0&#34; data-td-code data-td-code-auto-id&#xA;     data-td-language=&#34;text&#34; data-td-line-count=&#34;1&#34;&gt;&#xA;  &lt;div class=&#34;td-code__viewport&#34; id=&#34;td-code-9d3997e0-fence-0-viewport&#34; data-td-code-viewport&gt;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-text&#34; data-lang=&#34;text&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sow show PACKAGE [-C|--workdir DIR] [-r|--repo NAME] [-d|--dist NAME]... [--json]&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&#xA;&lt;/div&gt;&#xA;&lt;div class=&#34;td-table-scroll td-table-scroll--static&#34;&gt;&#xA;&lt;table&gt;&#xA;  &lt;thead&gt;&#xA;    &lt;tr&gt;&#xA;      &lt;th scope=&#34;col&#34;&gt;Flag&lt;/th&gt;&#xA;      &lt;th scope=&#34;col&#34;&gt;Meaning&lt;/th&gt;&#xA;      &lt;th scope=&#34;col&#34;&gt;Default&lt;/th&gt;&#xA;    &lt;/tr&gt;&#xA;  &lt;/thead&gt;&#xA;  &lt;tbody&gt;&#xA;    &lt;tr&gt;&#xA;      &lt;td&gt;&lt;code&gt;-C, --workdir DIR&lt;/code&gt;&lt;/td&gt;&#xA;      &lt;td&gt;Workspace discovery start directory&lt;/td&gt;&#xA;      &lt;td&gt;current directory&lt;/td&gt;&#xA;    &lt;/tr&gt;&#xA;    &lt;tr&gt;&#xA;      &lt;td&gt;&lt;code&gt;-r, --repo NAME&lt;/code&gt;&lt;/td&gt;&#xA;      &lt;td&gt;Select a Repository&lt;/td&gt;&#xA;      &lt;td&gt;&lt;a href=&#34;https://sow.pgsty.com/docs/command/#repository-selection&#34;&gt;selection rules&lt;/a&gt;&lt;/td&gt;&#xA;    &lt;/tr&gt;&#xA;    &lt;tr&gt;&#xA;      &lt;td&gt;&lt;code&gt;-d, --dist NAME&lt;/code&gt;&lt;/td&gt;&#xA;      &lt;td&gt;Narrow candidates to these Dists; repeatable&lt;/td&gt;&#xA;      &lt;td&gt;Repository scope&lt;/td&gt;&#xA;    &lt;/tr&gt;&#xA;    &lt;tr&gt;&#xA;      &lt;td&gt;&lt;code&gt;--json&lt;/code&gt;&lt;/td&gt;&#xA;      &lt;td&gt;Wrap the result in the &lt;code&gt;sow.cli/v1&lt;/code&gt; envelope&lt;/td&gt;&#xA;      &lt;td&gt;false&lt;/td&gt;&#xA;    &lt;/tr&gt;&#xA;  &lt;/tbody&gt;&#xA;&lt;/table&gt;&#xA;&lt;/div&gt;&#xA;&#xA;&lt;h2 id=&#34;package-reference&#34;&gt;Package reference&#xA;&lt;/h2&gt;&#xA;&lt;p&gt;&lt;code&gt;PACKAGE&lt;/code&gt; accepts a &lt;code&gt;sha256:&amp;lt;hex&amp;gt;&lt;/code&gt; content identity, canonical &lt;code&gt;rpm:&amp;lt;NEVRA&amp;gt;&lt;/code&gt; or&#xA;&lt;code&gt;deb:&amp;lt;name&amp;gt;=&amp;lt;version&amp;gt;:&amp;lt;arch&amp;gt;&lt;/code&gt; coordinate, full package filename, or bare binary name. See&#xA;&lt;a href=&#34;https://sow.pgsty.com/docs/reference/package-ref/&#34;&gt;Package References&lt;/a&gt; for the exact grammar.&lt;/p&gt;</description>
      </item>
    <item>
        <title>sow where</title>
        <link>https://sow.pgsty.com/docs/command/where/</link>
        <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
        
        <guid>https://sow.pgsty.com/docs/command/where/</guid>
        <description>&lt;p&gt;&lt;code&gt;sow where&lt;/code&gt; answers which Dists in the Workspace still carry one Package Object. It is read-only,&#xA;searches every Repository by default, and takes no write lock.&lt;/p&gt;&#xA;&lt;h2 id=&#34;synopsis&#34;&gt;Synopsis&#xA;&lt;/h2&gt;&#xA;&lt;div class=&#34;td-code td-code--untitled&#34; id=&#34;td-code-2d750758-fence-0&#34; data-td-code data-td-code-auto-id&#xA;     data-td-language=&#34;text&#34; data-td-line-count=&#34;1&#34;&gt;&#xA;  &lt;div class=&#34;td-code__viewport&#34; id=&#34;td-code-2d750758-fence-0-viewport&#34; data-td-code-viewport&gt;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-text&#34; data-lang=&#34;text&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sow where PACKAGE [-C|--workdir DIR] [-r|--repo NAME] [-d|--dist NAME]... [--json]&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&#xA;&lt;/div&gt;&#xA;&lt;div class=&#34;td-table-scroll td-table-scroll--static&#34;&gt;&#xA;&lt;table&gt;&#xA;  &lt;thead&gt;&#xA;    &lt;tr&gt;&#xA;      &lt;th scope=&#34;col&#34;&gt;Flag&lt;/th&gt;&#xA;      &lt;th scope=&#34;col&#34;&gt;Meaning&lt;/th&gt;&#xA;      &lt;th scope=&#34;col&#34;&gt;Default&lt;/th&gt;&#xA;    &lt;/tr&gt;&#xA;  &lt;/thead&gt;&#xA;  &lt;tbody&gt;&#xA;    &lt;tr&gt;&#xA;      &lt;td&gt;&lt;code&gt;-C, --workdir DIR&lt;/code&gt;&lt;/td&gt;&#xA;      &lt;td&gt;Workspace discovery start directory&lt;/td&gt;&#xA;      &lt;td&gt;current directory&lt;/td&gt;&#xA;    &lt;/tr&gt;&#xA;    &lt;tr&gt;&#xA;      &lt;td&gt;&lt;code&gt;-r, --repo NAME&lt;/code&gt;&lt;/td&gt;&#xA;      &lt;td&gt;Restrict the search to one Repository&lt;/td&gt;&#xA;      &lt;td&gt;all Repositories&lt;/td&gt;&#xA;    &lt;/tr&gt;&#xA;    &lt;tr&gt;&#xA;      &lt;td&gt;&lt;code&gt;-d, --dist NAME&lt;/code&gt;&lt;/td&gt;&#xA;      &lt;td&gt;Restrict the search to named Dists; repeatable&lt;/td&gt;&#xA;      &lt;td&gt;all Dists&lt;/td&gt;&#xA;    &lt;/tr&gt;&#xA;    &lt;tr&gt;&#xA;      &lt;td&gt;&lt;code&gt;--json&lt;/code&gt;&lt;/td&gt;&#xA;      &lt;td&gt;Emit the &lt;code&gt;sow.cli/v1&lt;/code&gt; envelope&lt;/td&gt;&#xA;      &lt;td&gt;false&lt;/td&gt;&#xA;    &lt;/tr&gt;&#xA;  &lt;/tbody&gt;&#xA;&lt;/table&gt;&#xA;&lt;/div&gt;&#xA;&#xA;&lt;h2 id=&#34;reference-resolution&#34;&gt;Reference resolution&#xA;&lt;/h2&gt;&#xA;&lt;p&gt;&lt;code&gt;PACKAGE&lt;/code&gt; uses the same grammar as &lt;a href=&#34;https://sow.pgsty.com/docs/command/show/&#34;&gt;&lt;code&gt;sow show&lt;/code&gt;&lt;/a&gt;: SHA-256 identity, canonical&#xA;RPM/DEB coordinate, full filename, or bare name.&lt;/p&gt;</description>
      </item>
    <item>
        <title>sow status</title>
        <link>https://sow.pgsty.com/docs/command/status/</link>
        <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
        
        <guid>https://sow.pgsty.com/docs/command/status/</guid>
        <description>&lt;p&gt;&lt;code&gt;sow status&lt;/code&gt; is the cheap Repository health query. It reads state but does not hash files, verify&#xA;signatures, recover Operations, build metadata, or take the write lock.&lt;/p&gt;&#xA;&lt;h2 id=&#34;synopsis&#34;&gt;Synopsis&#xA;&lt;/h2&gt;&#xA;&lt;div class=&#34;td-code td-code--untitled&#34; id=&#34;td-code-2a95e0f7-fence-0&#34; data-td-code data-td-code-auto-id&#xA;     data-td-language=&#34;text&#34; data-td-line-count=&#34;1&#34;&gt;&#xA;  &lt;div class=&#34;td-code__viewport&#34; id=&#34;td-code-2a95e0f7-fence-0-viewport&#34; data-td-code-viewport&gt;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-text&#34; data-lang=&#34;text&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sow status [-C|--workdir DIR] [-r|--repo NAME] [-d|--dist NAME]... [--json]&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&#xA;&lt;/div&gt;&#xA;&lt;div class=&#34;td-table-scroll td-table-scroll--static&#34;&gt;&#xA;&lt;table&gt;&#xA;  &lt;thead&gt;&#xA;    &lt;tr&gt;&#xA;      &lt;th scope=&#34;col&#34;&gt;Flag&lt;/th&gt;&#xA;      &lt;th scope=&#34;col&#34;&gt;Meaning&lt;/th&gt;&#xA;      &lt;th scope=&#34;col&#34;&gt;Default&lt;/th&gt;&#xA;    &lt;/tr&gt;&#xA;  &lt;/thead&gt;&#xA;  &lt;tbody&gt;&#xA;    &lt;tr&gt;&#xA;      &lt;td&gt;&lt;code&gt;-C, --workdir DIR&lt;/code&gt;&lt;/td&gt;&#xA;      &lt;td&gt;Workspace discovery start directory&lt;/td&gt;&#xA;      &lt;td&gt;current directory&lt;/td&gt;&#xA;    &lt;/tr&gt;&#xA;    &lt;tr&gt;&#xA;      &lt;td&gt;&lt;code&gt;-r, --repo NAME&lt;/code&gt;&lt;/td&gt;&#xA;      &lt;td&gt;Select a Repository&lt;/td&gt;&#xA;      &lt;td&gt;&lt;a href=&#34;https://sow.pgsty.com/docs/command/#repository-selection&#34;&gt;selection rules&lt;/a&gt;&lt;/td&gt;&#xA;    &lt;/tr&gt;&#xA;    &lt;tr&gt;&#xA;      &lt;td&gt;&lt;code&gt;-d, --dist NAME&lt;/code&gt;&lt;/td&gt;&#xA;      &lt;td&gt;Restrict status to these Dists; repeatable&lt;/td&gt;&#xA;      &lt;td&gt;all Dists&lt;/td&gt;&#xA;    &lt;/tr&gt;&#xA;    &lt;tr&gt;&#xA;      &lt;td&gt;&lt;code&gt;--json&lt;/code&gt;&lt;/td&gt;&#xA;      &lt;td&gt;Emit the &lt;code&gt;sow.cli/v1&lt;/code&gt; envelope&lt;/td&gt;&#xA;      &lt;td&gt;false&lt;/td&gt;&#xA;    &lt;/tr&gt;&#xA;  &lt;/tbody&gt;&#xA;&lt;/table&gt;&#xA;&lt;/div&gt;&#xA;&#xA;&lt;h2 id=&#34;repository-states&#34;&gt;Repository states&#xA;&lt;/h2&gt;&#xA;&lt;p&gt;Every Repository tracks a Desired Revision in SQLite and the Built Generation represented by its&#xA;public &lt;code&gt;dists/&lt;/code&gt; tree.&lt;/p&gt;</description>
      </item>
    <item>
        <title>sow build</title>
        <link>https://sow.pgsty.com/docs/command/build/</link>
        <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
        
        <guid>https://sow.pgsty.com/docs/command/build/</guid>
        <description>&lt;p&gt;&lt;code&gt;sow build&lt;/code&gt; is the explicit Desired-to-Built convergence command. It acquires the Repository write&#xA;lock, recovers any decidable unfinished Operation, renders and verifies a complete Generation, then&#xA;switches protocol pointers last.&lt;/p&gt;&#xA;&lt;h2 id=&#34;synopsis&#34;&gt;Synopsis&#xA;&lt;/h2&gt;&#xA;&lt;div class=&#34;td-code td-code--untitled&#34; id=&#34;td-code-3d9e14ec-fence-0&#34; data-td-code data-td-code-auto-id&#xA;     data-td-language=&#34;text&#34; data-td-line-count=&#34;1&#34;&gt;&#xA;  &lt;div class=&#34;td-code__viewport&#34; id=&#34;td-code-3d9e14ec-fence-0-viewport&#34; data-td-code-viewport&gt;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-text&#34; data-lang=&#34;text&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sow build [-j|--jobs N] [-C|--workdir DIR] [-r|--repo NAME] [-d|--dist NAME]... [-T|--timeout DUR | -N|--no-wait] [--json]&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&#xA;&lt;/div&gt;&#xA;&lt;div class=&#34;td-table-scroll td-table-scroll--static&#34;&gt;&#xA;&lt;table&gt;&#xA;  &lt;thead&gt;&#xA;    &lt;tr&gt;&#xA;      &lt;th scope=&#34;col&#34;&gt;Flag&lt;/th&gt;&#xA;      &lt;th scope=&#34;col&#34;&gt;Meaning&lt;/th&gt;&#xA;      &lt;th scope=&#34;col&#34;&gt;Default&lt;/th&gt;&#xA;    &lt;/tr&gt;&#xA;  &lt;/thead&gt;&#xA;  &lt;tbody&gt;&#xA;    &lt;tr&gt;&#xA;      &lt;td&gt;&lt;code&gt;-j, --jobs N&lt;/code&gt;&lt;/td&gt;&#xA;      &lt;td&gt;Parallel workers; must be at least &lt;code&gt;1&lt;/code&gt;&lt;/td&gt;&#xA;      &lt;td&gt;logical CPU count&lt;/td&gt;&#xA;    &lt;/tr&gt;&#xA;    &lt;tr&gt;&#xA;      &lt;td&gt;&lt;code&gt;-C, --workdir DIR&lt;/code&gt;&lt;/td&gt;&#xA;      &lt;td&gt;Workspace discovery start directory&lt;/td&gt;&#xA;      &lt;td&gt;current directory&lt;/td&gt;&#xA;    &lt;/tr&gt;&#xA;    &lt;tr&gt;&#xA;      &lt;td&gt;&lt;code&gt;-r, --repo NAME&lt;/code&gt;&lt;/td&gt;&#xA;      &lt;td&gt;Select a Repository&lt;/td&gt;&#xA;      &lt;td&gt;&lt;a href=&#34;https://sow.pgsty.com/docs/command/#repository-selection&#34;&gt;selection rules&lt;/a&gt;&lt;/td&gt;&#xA;    &lt;/tr&gt;&#xA;    &lt;tr&gt;&#xA;      &lt;td&gt;&lt;code&gt;-d, --dist NAME&lt;/code&gt;&lt;/td&gt;&#xA;      &lt;td&gt;Build named Dists; repeatable&lt;/td&gt;&#xA;      &lt;td&gt;all affected Dists&lt;/td&gt;&#xA;    &lt;/tr&gt;&#xA;    &lt;tr&gt;&#xA;      &lt;td&gt;&lt;code&gt;-T, --timeout DUR&lt;/code&gt;&lt;/td&gt;&#xA;      &lt;td&gt;Maximum lock wait; &lt;code&gt;0&lt;/code&gt; waits indefinitely&lt;/td&gt;&#xA;      &lt;td&gt;&lt;code&gt;0&lt;/code&gt;&lt;/td&gt;&#xA;    &lt;/tr&gt;&#xA;    &lt;tr&gt;&#xA;      &lt;td&gt;&lt;code&gt;-N, --no-wait&lt;/code&gt;&lt;/td&gt;&#xA;      &lt;td&gt;Fail immediately when the lock is held&lt;/td&gt;&#xA;      &lt;td&gt;false&lt;/td&gt;&#xA;    &lt;/tr&gt;&#xA;    &lt;tr&gt;&#xA;      &lt;td&gt;&lt;code&gt;--json&lt;/code&gt;&lt;/td&gt;&#xA;      &lt;td&gt;Wrap the result in the &lt;code&gt;sow.cli/v1&lt;/code&gt; envelope&lt;/td&gt;&#xA;      &lt;td&gt;false&lt;/td&gt;&#xA;    &lt;/tr&gt;&#xA;  &lt;/tbody&gt;&#xA;&lt;/table&gt;&#xA;&lt;/div&gt;&#xA;&#xA;&lt;p&gt;Without &lt;code&gt;-d&lt;/code&gt;, SOW converges every affected Dist in the selected Repository. With &lt;code&gt;-d&lt;/code&gt;, only those&#xA;Dists converge; unselected changes remain dirty.&lt;/p&gt;</description>
      </item>
    
  </channel>
</rss>
