<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>CLI Commands on SOW</title><link>https://sow.pgsty.com/docs/reference/cli/</link><description>Recent content in CLI Commands on SOW</description><generator>Hugo</generator><language>en</language><atom:link href="https://sow.pgsty.com/docs/reference/cli/index.xml" rel="self" type="application/rss+xml"/><item><title>sow create</title><link>https://sow.pgsty.com/docs/reference/cli/create/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://sow.pgsty.com/docs/reference/cli/create/</guid><description>&lt;p&gt;&lt;code&gt;sow create&lt;/code&gt; turns a directory that already contains &lt;code&gt;.rpm&lt;/code&gt; and &lt;code&gt;.deb&lt;/code&gt; files into a flat repository
by writing indexes next to the packages. It is the whole of Plain mode: no &lt;code&gt;sow.yml&lt;/code&gt;, no SQLite, no
Workspace discovery. This page covers the scan rules, the atomic &lt;code&gt;--pigsty&lt;/code&gt; compatibility operation,
and RPM signing with &lt;code&gt;--sign-with&lt;/code&gt;.&lt;/p&gt;
&lt;h2 id="synopsis"&gt;Synopsis&lt;/h2&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-text" data-lang="text"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;sow create [DIR] [-j N] [--pigsty] [-S KEY [--overwrite]] [-T DUR | -N] [--json]
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;code&gt;DIR&lt;/code&gt; defaults to the current directory.&lt;/p&gt;</description></item><item><title>sow init</title><link>https://sow.pgsty.com/docs/reference/cli/init/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://sow.pgsty.com/docs/reference/cli/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
Workspace. It is also the convergence command for a config you wrote by hand: if &lt;code&gt;sow.yml&lt;/code&gt; already
declares Repositories and Dists, &lt;code&gt;init&lt;/code&gt; materializes the ones that don&amp;rsquo;t exist yet and leaves the
finished ones alone.&lt;/p&gt;
&lt;h2 id="synopsis"&gt;Synopsis&lt;/h2&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-text" data-lang="text"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;sow init [DIR] [--json]
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&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
already names the target unambiguously.&lt;/p&gt;</description></item><item><title>sow config</title><link>https://sow.pgsty.com/docs/reference/cli/config/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://sow.pgsty.com/docs/reference/cli/config/</guid><description>&lt;p&gt;&lt;code&gt;sow config&lt;/code&gt; has two read-only subcommands. &lt;code&gt;config check&lt;/code&gt; is the full preflight over &lt;code&gt;sow.yml&lt;/code&gt; —
run it after every hand edit and in CI. &lt;code&gt;config show&lt;/code&gt; prints the configuration SOW actually computed,
which is where you confirm that defaults, inherited architectures and normalized aliases resolved the
way you expected.&lt;/p&gt;
&lt;p&gt;Neither subcommand creates directories, touches a database, or corrects your file.&lt;/p&gt;
&lt;h2 id="synopsis"&gt;Synopsis&lt;/h2&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-text" data-lang="text"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;sow config check [-C DIR] [--json]
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;sow config show [--all] [-C DIR] [-r NAME] [-d NAME]... [--json]
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;code&gt;sow help config&lt;/code&gt; lists both.&lt;/p&gt;</description></item><item><title>sow repo</title><link>https://sow.pgsty.com/docs/reference/cli/repo/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://sow.pgsty.com/docs/reference/cli/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
is the boundary of locking, transaction recovery, Generation numbering and Changesets — nothing is
deduplicated across Repositories and no cross-Repository commit is atomic. &lt;code&gt;sow repo&lt;/code&gt; manages that
boundary.&lt;/p&gt;
&lt;h2 id="synopsis"&gt;Synopsis&lt;/h2&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-text" data-lang="text"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;sow repo ls [-C DIR] [--json]
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;sow repo new NAME [-C DIR] [-T DUR | -N] [--json]
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;sow repo show [NAME] [-C DIR] [-r NAME] [--json]
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&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;h2 id="naming"&gt;Naming&lt;/h2&gt;
&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;,
&lt;code&gt;dists&lt;/code&gt;, or collide with a Workspace reserved file.&lt;/p&gt;</description></item><item><title>sow dist</title><link>https://sow.pgsty.com/docs/reference/cli/dist/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://sow.pgsty.com/docs/reference/cli/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
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;
but render into completely separate &lt;code&gt;dists/&lt;/code&gt; subtrees.&lt;/p&gt;
&lt;h2 id="synopsis"&gt;Synopsis&lt;/h2&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-text" data-lang="text"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;sow dist ls [-C DIR] [-r NAME] [--json]
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;sow dist new NAME --format rpm|deb [-C DIR] [-r NAME] [-T DUR | -N] [--json]
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;sow dist show NAME [-C DIR] [-r NAME] [--json]
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&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;h2 id="naming"&gt;Naming&lt;/h2&gt;
&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;,
&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>sow add</title><link>https://sow.pgsty.com/docs/reference/cli/add/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://sow.pgsty.com/docs/reference/cli/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
architecture from the package headers, applies the Dist&amp;rsquo;s membership policy, and — unless you pass
&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
already see the new packages.&lt;/p&gt;
&lt;h2 id="synopsis"&gt;Synopsis&lt;/h2&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-text" data-lang="text"&gt;&lt;span class="line"&gt;&lt;span class="cl"&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;h2 id="options"&gt;Options&lt;/h2&gt;
&lt;table&gt;
	&lt;thead&gt;
			&lt;tr&gt;
					&lt;th&gt;Flag&lt;/th&gt;
					&lt;th&gt;Description&lt;/th&gt;
					&lt;th&gt;Default&lt;/th&gt;
			&lt;/tr&gt;
	&lt;/thead&gt;
	&lt;tbody&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;code&gt;-R, --recursive&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;Descend into subdirectories of a &lt;code&gt;PATH&lt;/code&gt; directory&lt;/td&gt;
					&lt;td&gt;off (top level only)&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;code&gt;--skip&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;Update Desired state only; do not build&lt;/td&gt;
					&lt;td&gt;off&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;code&gt;-j, --jobs N&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;Parallel workers for parsing, hashing and rendering&lt;/td&gt;
					&lt;td&gt;logical CPU count&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;code&gt;-C, --workdir DIR&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;Workspace discovery start directory&lt;/td&gt;
					&lt;td&gt;current directory&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;code&gt;-r, --repo NAME&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;Select a repository&lt;/td&gt;
					&lt;td&gt;selection rules&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;code&gt;-d, --dist NAME&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;Select a distribution; repeatable&lt;/td&gt;
					&lt;td&gt;selection rules&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;code&gt;-T, --timeout DUR&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;Maximum lock wait; &lt;code&gt;0&lt;/code&gt; waits indefinitely&lt;/td&gt;
					&lt;td&gt;&lt;code&gt;0&lt;/code&gt;&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;code&gt;-N, --no-wait&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;Fail immediately when the lock is held&lt;/td&gt;
					&lt;td&gt;false&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;code&gt;--json&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;Emit the versioned JSON envelope&lt;/td&gt;
					&lt;td&gt;false&lt;/td&gt;
			&lt;/tr&gt;
	&lt;/tbody&gt;
&lt;/table&gt;
&lt;h2 id="inputs-and-targets"&gt;Inputs and targets&lt;/h2&gt;
&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/reference/cli/rm/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://sow.pgsty.com/docs/reference/cli/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,
rebuilds the affected indexes immediately. It never deletes bytes from &lt;code&gt;pool/&lt;/code&gt; — membership and
content are separate concepts, and there is no garbage collection.&lt;/p&gt;
&lt;h2 id="synopsis"&gt;Synopsis&lt;/h2&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-text" data-lang="text"&gt;&lt;span class="line"&gt;&lt;span class="cl"&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;h2 id="options"&gt;Options&lt;/h2&gt;
&lt;table&gt;
	&lt;thead&gt;
			&lt;tr&gt;
					&lt;th&gt;Flag&lt;/th&gt;
					&lt;th&gt;Description&lt;/th&gt;
					&lt;th&gt;Default&lt;/th&gt;
			&lt;/tr&gt;
	&lt;/thead&gt;
	&lt;tbody&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;code&gt;-c, --check&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;Preview only; compute and print the plan without writing anything&lt;/td&gt;
					&lt;td&gt;off&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;code&gt;--skip&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;Update Desired state only; do not build&lt;/td&gt;
					&lt;td&gt;off&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;code&gt;-j, --jobs N&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;Parallel workers&lt;/td&gt;
					&lt;td&gt;logical CPU count&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;code&gt;-C, --workdir DIR&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;Workspace discovery start directory&lt;/td&gt;
					&lt;td&gt;current directory&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;code&gt;-r, --repo NAME&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;Select a repository&lt;/td&gt;
					&lt;td&gt;selection rules&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;code&gt;-d, --dist NAME&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;Select a distribution; repeatable&lt;/td&gt;
					&lt;td&gt;selection rules&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;code&gt;-T, --timeout DUR&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;Maximum lock wait; &lt;code&gt;0&lt;/code&gt; waits indefinitely&lt;/td&gt;
					&lt;td&gt;&lt;code&gt;0&lt;/code&gt;&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;code&gt;-N, --no-wait&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;Fail immediately when the lock is held&lt;/td&gt;
					&lt;td&gt;false&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;code&gt;--json&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;Emit the versioned JSON envelope&lt;/td&gt;
					&lt;td&gt;false&lt;/td&gt;
			&lt;/tr&gt;
	&lt;/tbody&gt;
&lt;/table&gt;
&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 / show / where</title><link>https://sow.pgsty.com/docs/reference/cli/query/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://sow.pgsty.com/docs/reference/cli/query/</guid><description>&lt;p&gt;Three commands answer three different questions. &lt;code&gt;ls&lt;/code&gt; lists what a Dist should contain, &lt;code&gt;show&lt;/code&gt;
inspects one package object in detail, and &lt;code&gt;where&lt;/code&gt; finds which Dists — in any Repository — carry a
package. All three are read-only, take no write lock, and share the same &lt;code&gt;--json&lt;/code&gt; envelope.&lt;/p&gt;
&lt;h2 id="synopsis"&gt;Synopsis&lt;/h2&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-text" data-lang="text"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;sow ls [-C|--workdir DIR] [-r|--repo NAME] [-d|--dist NAME]... [--json]
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;sow show PACKAGE [-C|--workdir DIR] [-r|--repo NAME] [-d|--dist NAME]... [--json]
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&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;h2 id="common-options"&gt;Common options&lt;/h2&gt;
&lt;table&gt;
	&lt;thead&gt;
			&lt;tr&gt;
					&lt;th&gt;Flag&lt;/th&gt;
					&lt;th&gt;Description&lt;/th&gt;
					&lt;th&gt;Default&lt;/th&gt;
			&lt;/tr&gt;
	&lt;/thead&gt;
	&lt;tbody&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;code&gt;-C, --workdir DIR&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;Workspace discovery start directory&lt;/td&gt;
					&lt;td&gt;current directory&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;code&gt;-r, --repo NAME&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;Select a repository&lt;/td&gt;
					&lt;td&gt;selection rules&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;code&gt;-d, --dist NAME&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;Select a distribution; repeatable&lt;/td&gt;
					&lt;td&gt;selection rules&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;code&gt;--json&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;Emit the versioned JSON envelope&lt;/td&gt;
					&lt;td&gt;false&lt;/td&gt;
			&lt;/tr&gt;
	&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;There is no &lt;code&gt;--pool&lt;/code&gt;, no &lt;code&gt;--match&lt;/code&gt;, and no per-command format flag.&lt;/p&gt;</description></item><item><title>sow build / status / check / changes</title><link>https://sow.pgsty.com/docs/reference/cli/build/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://sow.pgsty.com/docs/reference/cli/build/</guid><description>&lt;p&gt;One concept, one command. &lt;code&gt;status&lt;/code&gt; is the cheap read, &lt;code&gt;check&lt;/code&gt; is the full verification, &lt;code&gt;build&lt;/code&gt; is
the only thing that changes the public tree, and &lt;code&gt;changes&lt;/code&gt; is the physical file diff between
Generations. This page covers all four, because you almost always use them together.&lt;/p&gt;
&lt;h2 id="synopsis"&gt;Synopsis&lt;/h2&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-text" data-lang="text"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;sow status [-C|--workdir DIR] [-r|--repo NAME] [-d|--dist NAME]... [--json]
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&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;span class="line"&gt;&lt;span class="cl"&gt;sow check [-j|--jobs N] [-C|--workdir DIR] [-r|--repo NAME] [-d|--dist NAME]... [--json]
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;sow changes [BASE_GENERATION] [-C|--workdir DIR] [-r|--repo NAME] [--json]
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id="the-state-model"&gt;The state model&lt;/h2&gt;
&lt;p&gt;Every Repository tracks two things: the &lt;strong&gt;Desired Revision&lt;/strong&gt; in SQLite, and the &lt;strong&gt;Built Generation&lt;/strong&gt;
that the &lt;code&gt;dists/&lt;/code&gt; tree on disk corresponds to.&lt;/p&gt;</description></item><item><title>sow log</title><link>https://sow.pgsty.com/docs/reference/cli/log/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://sow.pgsty.com/docs/reference/cli/log/</guid><description>&lt;p&gt;Every write command inside a Repository commits an application-level Operation to that Repository&amp;rsquo;s
SQLite database &lt;em&gt;before&lt;/em&gt; it produces any external file side effect. That record is what makes crash
recovery possible — and once the Operation reaches a terminal state, the same record is your audit
trail. &lt;code&gt;sow log&lt;/code&gt; reads it.&lt;/p&gt;
&lt;h2 id="synopsis"&gt;Synopsis&lt;/h2&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-text" data-lang="text"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;sow log [OPERATION] [-C|--workdir DIR] [-r|--repo NAME] [-d|--dist NAME] [--json]
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;sow log export [FILE] [-C|--workdir DIR] [-r|--repo NAME] [-d|--dist NAME]
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;sow log prune BEFORE [-C|--workdir DIR] [-r|--repo NAME] [-T|--timeout DUR | -N|--no-wait] [--json]
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id="operation-lifecycle"&gt;Operation lifecycle&lt;/h2&gt;
&lt;p&gt;Understanding the &lt;code&gt;state&lt;/code&gt; field is most of understanding the log:&lt;/p&gt;</description></item></channel></rss>