<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
  <channel>
    <title>Feature on SOW</title>
    <link>https://sow.pgsty.com/zh/categories/feature/</link>
    <description>Recent content in Feature on SOW</description>
    <generator>Hugo</generator>
    <language>zh-CN</language>
    
    
    
      <lastBuildDate>Fri, 28 Aug 2026 18:32:04 +0800</lastBuildDate>
    
    
      <atom:link href="https://sow.pgsty.com/zh/categories/feature/index.xml" rel="self" type="application/rss+xml" />
    
    <item>
        <title>Plain 平面仓库</title>
        <link>https://sow.pgsty.com/zh/docs/feature/plain/</link>
        <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
        
        <guid>https://sow.pgsty.com/zh/docs/feature/plain/</guid>
        <description>&lt;p&gt;&lt;code&gt;sow create&lt;/code&gt; 接手一个已经放着 &lt;code&gt;.rpm&lt;/code&gt; / &lt;code&gt;.deb&lt;/code&gt; 的目录，在包旁边生成平面仓库索引。Plain 模式没有工作区、配置文件、数据库、期望状态，也没有操作 journal。包目录就是权威事实来源，所有索引都是当前目录内容的可丢弃投影。&lt;/p&gt;</description>
      </item>
    <item>
        <title>Managed 工作区</title>
        <link>https://sow.pgsty.com/zh/docs/feature/managed/</link>
        <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
        
        <guid>https://sow.pgsty.com/zh/docs/feature/managed/</guid>
        <description>&lt;p&gt;当同一个仓库要维护好几个月 —— 包成批到达、由策略决定谁留下、事后还得说清楚什么时候变了什么 —— 你需要的是 Managed 模式。本页讲三层模型、它产出的布局,以及命令怎么判断你说的是哪个仓库、哪个 Dist。&lt;/p&gt;</description>
      </item>
    <item>
        <title>功能</title>
        <link>https://sow.pgsty.com/zh/docs/feature/</link>
        <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
        
        <guid>https://sow.pgsty.com/zh/docs/feature/</guid>
        <description>&lt;p&gt;SOW 提供两条相互隔离的运行路径。Plain 模式无状态地重建一个目录；Managed 模式在工作区中&#xA;持续记录软件包成员关系与不可变仓库 Generation。两者都不会暗中接管对方的状态。&lt;/p&gt;</description>
      </item>
    <item>
        <title>包池与元数据视图</title>
        <link>https://sow.pgsty.com/zh/docs/feature/views/</link>
        <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
        
        <guid>https://sow.pgsty.com/zh/docs/feature/views/</guid>
        <description>&lt;h2 id=&#34;不变式&#34;&gt;不变式&#xA;&lt;/h2&gt;&#xA;&lt;p&gt;在一个 Repository 内，每个 live Package Object 在 &lt;code&gt;pool/&lt;/code&gt; 下只有一条正典 payload 路径。&#xA;Dist 与架构 view 拥有元数据，不拥有包体 alias：&lt;/p&gt;&#xA;&lt;div class=&#34;td-code td-code--untitled&#34; id=&#34;td-code-9cd48402-fence-0&#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-9cd48402-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;&amp;lt;repo&amp;gt;/pool/...                              正典包体&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&amp;lt;repo&amp;gt;/dists/&amp;lt;rpm-dist&amp;gt;/&amp;lt;arch&amp;gt;/repodata/... 纯 RPM 元数据&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&amp;lt;repo&amp;gt;/dists/&amp;lt;deb-dist&amp;gt;/main/binary-*/...   纯 APT 元数据&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;相同 digest 出现在另一个 Repository 或发布 prefix 时，仍是另一个 owner 下的独立对象。&#xA;SOW 不会为了本地去重而制造共享的分布式所有权。&lt;/p&gt;</description>
      </item>
    <item>
        <title>成员策略</title>
        <link>https://sow.pgsty.com/zh/docs/feature/policy/</link>
        <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
        
        <guid>https://sow.pgsty.com/zh/docs/feature/policy/</guid>
        <description>&lt;p&gt;策略回答的是这个问题:&amp;ldquo;我把整个构建目录倒进了这个 Dist,但我不想要 debuginfo 包,而且每个包只留最新版本。&amp;ldquo;两条规则完成这件事,它们按固定顺序执行,并且作用于 &lt;strong&gt;完整候选集&lt;/strong&gt;,而不是你这次恰好 add 的那几个包。&lt;/p&gt;</description>
      </item>
    <item>
        <title>签名模型</title>
        <link>https://sow.pgsty.com/zh/docs/feature/signing/</link>
        <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
        
        <guid>https://sow.pgsty.com/zh/docs/feature/signing/</guid>
        <description>&lt;p&gt;客户端会对一个仓库提两个不同的问题,SOW 用两套彼此独立的机制分别回答。把它们混为一谈,是&amp;quot;我明明签了名,&lt;code&gt;dnf&lt;/code&gt; 还是报错&amp;quot;这类问题最常见的来源 —— 所以本页先把两者拆开。&lt;/p&gt;</description>
      </item>
    <item>
        <title>事务与恢复</title>
        <link>https://sow.pgsty.com/zh/docs/feature/transactions/</link>
        <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
        
        <guid>https://sow.pgsty.com/zh/docs/feature/transactions/</guid>
        <description>&lt;p&gt;本页说明 Managed 模式如何防止 live 指针指向缺失内容，以及如何协调 SQLite 状态与文件系统变更。&lt;/p&gt;&#xA;&lt;h2 id=&#34;不变式&#34;&gt;不变式&#xA;&lt;/h2&gt;&#xA;&lt;p&gt;&lt;strong&gt;在受支持的本地 POSIX 文件系统上，沿 Managed 协议指针读取的客户端只会得到完整旧视图或&#xA;完整新视图，包括进程中断之后。&lt;/strong&gt;&lt;/p&gt;</description>
      </item>
    <item>
        <title>可观测与审计</title>
        <link>https://sow.pgsty.com/zh/docs/feature/audit/</link>
        <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
        
        <guid>https://sow.pgsty.com/zh/docs/feature/audit/</guid>
        <description>&lt;p&gt;每个读取表面回答不同问题。&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;问题&lt;/th&gt;&#xA;      &lt;th scope=&#34;col&#34; style=&#34;text-align: right&#34;&gt;写入？&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;status&lt;/code&gt;&lt;/td&gt;&#xA;      &lt;td&gt;Repository 当前是什么状态？&lt;/td&gt;&#xA;      &lt;td style=&#34;text-align: right&#34;&gt;否&lt;/td&gt;&#xA;    &lt;/tr&gt;&#xA;    &lt;tr&gt;&#xA;      &lt;td&gt;&lt;code&gt;check&lt;/code&gt;&lt;/td&gt;&#xA;      &lt;td&gt;所选 Repository 是否满足完整交付契约？&lt;/td&gt;&#xA;      &lt;td style=&#34;text-align: right&#34;&gt;否&lt;/td&gt;&#xA;    &lt;/tr&gt;&#xA;    &lt;tr&gt;&#xA;      &lt;td&gt;&lt;code&gt;changes&lt;/code&gt;&lt;/td&gt;&#xA;      &lt;td&gt;两个 Built Generation 之间哪些物理文件不同？&lt;/td&gt;&#xA;      &lt;td style=&#34;text-align: right&#34;&gt;否&lt;/td&gt;&#xA;    &lt;/tr&gt;&#xA;    &lt;tr&gt;&#xA;      &lt;td&gt;&lt;code&gt;log&lt;/code&gt;&lt;/td&gt;&#xA;      &lt;td&gt;记录了哪些操作与处置结果？&lt;/td&gt;&#xA;      &lt;td style=&#34;text-align: right&#34;&gt;否&lt;/td&gt;&#xA;    &lt;/tr&gt;&#xA;    &lt;tr&gt;&#xA;      &lt;td&gt;&lt;code&gt;retain ls&lt;/code&gt;&lt;/td&gt;&#xA;      &lt;td&gt;哪些 Generation 是显式本地 GC root？&lt;/td&gt;&#xA;      &lt;td style=&#34;text-align: right&#34;&gt;否&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;status低成本状态&#34;&gt;&lt;code&gt;status&lt;/code&gt;：低成本状态&#xA;&lt;/h2&gt;&#xA;&lt;div class=&#34;td-code td-code--untitled&#34; id=&#34;td-code-25ca3326-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-25ca3326-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 status -r local&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;它报告 Desired revision、Built Generation、dirty Dist、pending 包体计数、锁状态与&#xA;&lt;code&gt;ready_to_copy&lt;/code&gt;。它不哈希公共树，不恢复操作，也不构建。&lt;/p&gt;</description>
      </item>
    
  </channel>
</rss>
