<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>设计 on SOW</title><link>https://sow.pgsty.com/zh/docs/design/</link><description>Recent content in 设计 on SOW</description><generator>Hugo</generator><language>zh-CN</language><atom:link href="https://sow.pgsty.com/zh/docs/design/index.xml" rel="self" type="application/rss+xml"/><item><title>设计原则</title><link>https://sow.pgsty.com/zh/docs/design/principles/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://sow.pgsty.com/zh/docs/design/principles/</guid><description>&lt;p&gt;SOW 首先不是一个“元数据生成器”，而是一个所有权与状态迁移系统，只是它的输出恰好是
APT 与 RPM 仓库。下面这些原则让整套系统保持可推理。&lt;/p&gt;
&lt;h2 id="每个持久事实只有一个主人"&gt;每个持久事实只有一个主人&lt;/h2&gt;
&lt;p&gt;每类持久事实都只有一个作用域与权威：&lt;/p&gt;</description></item><item><title>系统模型</title><link>https://sow.pgsty.com/zh/docs/design/model/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://sow.pgsty.com/zh/docs/design/model/</guid><description>&lt;p&gt;SOW 刻意把模型分层：配置表达意图，数据库记录有主状态，公共树是确定性投影。
任何一层都不能悄悄替代另一层。&lt;/p&gt;
&lt;h2 id="对象层级"&gt;对象层级&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;Workspace
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;├── Repository
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;│ ├── Package Object
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;│ ├── Dist
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;│ │ └── Membership -&amp;gt; Package Object
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;│ ├── Desired 状态
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;│ ├── Built Generation
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;│ └── Retained Generation 引用
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;└── Publication Target
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; └── Repository + provider + prefix
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id="workspace"&gt;Workspace&lt;/h3&gt;
&lt;p&gt;Workspace 提供发现、配置与协调，拥有 &lt;code&gt;sow.yml&lt;/code&gt;、私有 &lt;code&gt;.sow/&lt;/code&gt; 目录和稳定锁路径；
它不是包体去重域。&lt;/p&gt;</description></item><item><title>单包体仓库</title><link>https://sow.pgsty.com/zh/docs/design/single-payload/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://sow.pgsty.com/zh/docs/design/single-payload/</guid><description>&lt;p&gt;0.3 开发线调整了 RPM 物理布局，但保留 v0.2 确立的所有权模型。它的目标很精确：在一个
Repository 及其每个发布前缀内，每个 live Package Object 恰好只有一条包体路径。&lt;/p&gt;
&lt;div class="alert alert-warning" role="alert"&gt;&lt;div class="h4 alert-heading" role="heading"&gt;开发线设计&lt;/div&gt;
&lt;p&gt;本页描述已经落入 0.3 源码的布局；已发布 v0.2 的操作参考仍然使用 C2 view-local 硬链接。
迁移现有 v0.2 仓库前，请先读&lt;a href="https://sow.pgsty.com/zh/docs/design/evolution/"&gt;设计演进&lt;/a&gt;。&lt;/p&gt;</description></item><item><title>发布与恢复</title><link>https://sow.pgsty.com/zh/docs/design/publication/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://sow.pgsty.com/zh/docs/design/publication/</guid><description>&lt;p&gt;构建与发布是两个独立状态迁移。构建产生与 target 无关的 Generation；发布把该 Generation
应用到一个供应商前缀，并记录足以在不猜测的前提下恢复的证据。&lt;/p&gt;
&lt;h2 id="所有权拆分"&gt;所有权拆分&lt;/h2&gt;
&lt;table&gt;
	&lt;thead&gt;
			&lt;tr&gt;
					&lt;th&gt;Repository 作用域&lt;/th&gt;
					&lt;th&gt;Target prefix 作用域&lt;/th&gt;
			&lt;/tr&gt;
	&lt;/thead&gt;
	&lt;tbody&gt;
			&lt;tr&gt;
					&lt;td&gt;Package Object&lt;/td&gt;
					&lt;td&gt;Publication Attempt&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;Desired 与 Built 状态&lt;/td&gt;
					&lt;td&gt;Applied Checkpoint&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;Generation 与 Changeset&lt;/td&gt;
					&lt;td&gt;远端 inventory&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;retained 包体/元数据引用&lt;/td&gt;
					&lt;td&gt;grace 与删除证据&lt;/td&gt;
			&lt;/tr&gt;
	&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;这项拆分避免把 filesystem 发布成功当成 R2 的证据，也避免一个 target 的半完成尝试污染另一个。&lt;/p&gt;</description></item><item><title>兼容性边界</title><link>https://sow.pgsty.com/zh/docs/design/compatibility/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://sow.pgsty.com/zh/docs/design/compatibility/</guid><description>&lt;p&gt;“兼容”太宽泛，不足以成为工程结论。一个包可能安装成功，但镜像工具拒绝同一份元数据；
一棵树可能在 POSIX 磁盘上去重，上传后却变成多个完整对象。因此 SOW 把兼容性拆成独立门禁。&lt;/p&gt;</description></item><item><title>设计演进</title><link>https://sow.pgsty.com/zh/docs/design/evolution/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://sow.pgsty.com/zh/docs/design/evolution/</guid><description>&lt;p&gt;SOW 的旧文档来自三套实质不同的系统。缺少版本边界时，互相矛盾的结论看起来像同时成立。
本页保留有价值的决策，同时明确它们各自的作用域。&lt;/p&gt;
&lt;h2 id="时间线"&gt;时间线&lt;/h2&gt;
&lt;table&gt;
	&lt;thead&gt;
			&lt;tr&gt;
					&lt;th&gt;版本线&lt;/th&gt;
					&lt;th&gt;主要问题&lt;/th&gt;
					&lt;th&gt;物理模型&lt;/th&gt;
					&lt;th&gt;处置&lt;/th&gt;
			&lt;/tr&gt;
	&lt;/thead&gt;
	&lt;tbody&gt;
			&lt;tr&gt;
					&lt;td&gt;V1 实验（2026-07）&lt;/td&gt;
					&lt;td&gt;纳管 Pigsty 既有 APT/YUM 树与远端发布流程&lt;/td&gt;
					&lt;td&gt;Git/CAS、route-aware 投影、edge/provider 契约&lt;/td&gt;
					&lt;td&gt;归档为研究与实现证据&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;v0.2.0&lt;/td&gt;
					&lt;td&gt;交付紧凑的本地 Plain + Managed 仓库管理器&lt;/td&gt;
					&lt;td&gt;根 Pool + C2 view-local RPM 硬链接&lt;/td&gt;
					&lt;td&gt;已发布；操作文档继续在线&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;0.3 开发线&lt;/td&gt;
					&lt;td&gt;每个 Repository/target prefix 只发布一份正典包体&lt;/td&gt;
					&lt;td&gt;根 Pool + 纯元数据 view + target-scoped 发布&lt;/td&gt;
					&lt;td&gt;源码已实现；发布证据待完成&lt;/td&gt;
			&lt;/tr&gt;
	&lt;/tbody&gt;
&lt;/table&gt;
&lt;h2 id="v1-留下了什么"&gt;V1 留下了什么&lt;/h2&gt;
&lt;p&gt;V1 大范围探索了既有仓库纳管、远端发布、供应商 fencing、边缘鉴权、迁移、恢复与大仓库证据。
它具体的 Git/CAS/route 模型大多已被替换，但几条原则保留下来：&lt;/p&gt;</description></item></channel></rss>