-
SOW v0.4.0
SOW 0.4.0 是一次面向 Managed 仓库的完整性与恢复版本:它明确了深度校验的 I/O 契约, 禁止跨无关密钥拼装 RPM 信任,提供可审计的发布目标可变配置修正路径,并补齐 v0.3 迁移与 发布中断恢复的剩余缺口。 Plain 仓库行为与公共 pool/ + dists/ 布局均未改变。 从 0.3 升级 必须逐个显式迁移 v0.3 Repository 先停止全部 Workspace 写入并完成备份,再安装 0.4.0;在执行普通读写命令之前,对每个 Repository 运行 …
SOW 0.4.0 是一次面向 Managed 仓库的完整性与恢复版本:它明确了深度校验的 I/O 契约, 禁止跨无关密钥拼装 RPM 信任,提供可审计的发布目标可变配置修正路径,并补齐 v0.3 迁移与 发布中断恢复的剩余缺口。 Plain 仓库行为与公共 pool/ + dists/ 布局均未改变。 从 0.3 升级 必须逐个显式迁移 v0.3 Repository 先停止全部 Workspace 写入并完成备份,再安装 0.4.0;在执行普通读写命令之前,对每个 Repository 运行 …
-
协同发布决策记录
SOW 0.4.0 已完成最终决策 本记录的早期版本曾提议采用 rclone Executor、publish --dry-run 与独立 sow audit 命令。这些表面均未进入 0.4.0:SOW 不依赖 rclone,publish 没有 --dry-run,sow audit 也不是有效命令。 本页保留决策边界,避免历史提案被误解为当前产品。规范行为以 sow publish与 发布与恢复为准。 最终决策 SOW 0.4.0 保留原生 filesystem 与 r2 发布 …
SOW 0.4.0 已完成最终决策 本记录的早期版本曾提议采用 rclone Executor、publish --dry-run 与独立 sow audit 命令。这些表面均未进入 0.4.0:SOW 不依赖 rclone,publish 没有 --dry-run,sow audit 也不是有效命令。 本页保留决策边界,避免历史提案被误解为当前产品。规范行为以 sow publish与 发布与恢复为准。 最终决策 SOW 0.4.0 保留原生 filesystem 与 r2 发布 …
-
SOW 设计演进:从 Route Graph 收敛到 Repository Core
本文对应 2026-08-10 围绕 Repository Core 完成的 SOW 收敛决策。它从早期规划、ADR、评审、 迁移与验证目录中提炼值得维护的结论,但不会把每份过程制品都变成另一套产品文档。 部分封存目录使用“v0.2”“v0.3”表示连续的发布前设计线;下文版本号只指正式 Git Tag。 C2 硬链接开发线在 v0.2.0 打 Tag 之前已经被替换。 简要历史 版本线 设计中心 历史状态 v0.1 Git/CAS 所有权、Route-aware …
本文对应 2026-08-10 围绕 Repository Core 完成的 SOW 收敛决策。它从早期规划、ADR、评审、 迁移与验证目录中提炼值得维护的结论,但不会把每份过程制品都变成另一套产品文档。 部分封存目录使用“v0.2”“v0.3”表示连续的发布前设计线;下文版本号只指正式 Git Tag。 C2 硬链接开发线在 v0.2.0 打 Tag 之前已经被替换。 简要历史 版本线 设计中心 历史状态 v0.1 Git/CAS 所有权、Route-aware …
-
SOW v0.3.0
SOW 0.3.0 围绕性能、持久性与产品边界完成了一次集中改进:Plain 仓库生成只需一遍包体处理; Managed 仓库消除了逐对象成员查询,复用经过认证的软件包事实,并用有界组提交提升载荷。正式 交付的二进制与发布流水线也统一收敛到 SOW 实际支持的仓库工作流。 Plain:一遍完成包体处理 默认无签名 sow create 路径通过 --jobs 控制并行度,每个 RPM 或 DEB 只做一次哈希与解析, 随后直接利用保留的检查结果渲染元数据。发布前只做最后一次软件包集合与文件 …
SOW 0.3.0 围绕性能、持久性与产品边界完成了一次集中改进:Plain 仓库生成只需一遍包体处理; Managed 仓库消除了逐对象成员查询,复用经过认证的软件包事实,并用有界组提交提升载荷。正式 交付的二进制与发布流水线也统一收敛到 SOW 实际支持的仓库工作流。 Plain:一遍完成包体处理 默认无签名 sow create 路径通过 --jobs 控制并行度,每个 RPM 或 DEB 只做一次哈希与解析, 随后直接利用保留的检查结果渲染元数据。发布前只做最后一次软件包集合与文件 …
-
设计原则
SOW 首先不是一个“元数据生成器”,而是一个所有权与状态迁移系统,只是它的输出恰好是 APT 与 RPM 仓库。下面这些原则让整套系统保持可推理。 每个持久事实只有一个主人 每类持久事实都只有一个作用域与权威: 事实 所有者 包体与软件包身份 Repository Desired 成员关系与 Built 状态 Repository Generation 与 Changeset Repository 发布目标绑定与 Revision Repository + Target …
SOW 首先不是一个“元数据生成器”,而是一个所有权与状态迁移系统,只是它的输出恰好是 APT 与 RPM 仓库。下面这些原则让整套系统保持可推理。 每个持久事实只有一个主人 每类持久事实都只有一个作用域与权威: 事实 所有者 包体与软件包身份 Repository Desired 成员关系与 Built 状态 Repository Generation 与 Changeset Repository 发布目标绑定与 Revision Repository + Target …
-
系统模型
SOW 刻意把模型分层:配置表达意图,数据库记录有主状态,公共树是确定性投影。 任何一层都不能悄悄替代另一层。 对象层级 Workspace ├── Repository │ ├── Package Object │ ├── Dist │ │ └── Membership -> Package Object │ ├── Desired 状态 │ ├── Built Generation │ └── Retained Generation 引用 └── Publication Target └── …
SOW 刻意把模型分层:配置表达意图,数据库记录有主状态,公共树是确定性投影。 任何一层都不能悄悄替代另一层。 对象层级 Workspace ├── Repository │ ├── Package Object │ ├── Dist │ │ └── Membership -> Package Object │ ├── Desired 状态 │ ├── Built Generation │ └── Retained Generation 引用 └── Publication Target └── …
-
发布与恢复
构建与发布是两个独立状态迁移。构建产生与 target 无关的 Generation;发布把该 Generation 应用到一个供应商前缀,并记录足以在不猜测的前提下恢复的证据。 所有权拆分 Repository 作用域 Target prefix 作用域 Package Object Publication Attempt Desired 与 Built 状态 Applied Checkpoint Generation 与 Changeset 远端 inventory retained 包体/ …
构建与发布是两个独立状态迁移。构建产生与 target 无关的 Generation;发布把该 Generation 应用到一个供应商前缀,并记录足以在不猜测的前提下恢复的证据。 所有权拆分 Repository 作用域 Target prefix 作用域 Package Object Publication Attempt Desired 与 Built 状态 Applied Checkpoint Generation 与 Changeset 远端 inventory retained 包体/ …
-
SOW v0.2.0
SOW 0.2.0 是 Pigsty 出品的自包含 RPM/DEB 仓库管理器,Release 资产以单个 Go 可执行文件覆盖 Linux 与 macOS 构建目标。 两种工作模式 Plain 模式 给目录顶层已有的 RPM 与 DEB 文件就地生成索引: sow create /srv/repo 它写入 repodata/、Packages 与 Packages.gz。Plain 模式没有 Workspace、状态数据库、 Generation,也不生成或签署 DEB Release。 …
SOW 0.2.0 是 Pigsty 出品的自包含 RPM/DEB 仓库管理器,Release 资产以单个 Go 可执行文件覆盖 Linux 与 macOS 构建目标。 两种工作模式 Plain 模式 给目录顶层已有的 RPM 与 DEB 文件就地生成索引: sow create /srv/repo 它写入 repodata/、Packages 与 Packages.gz。Plain 模式没有 Workspace、状态数据库、 Generation,也不生成或签署 DEB Release。 …
-
为什么 SOW 每个仓库只保留一棵包体树
这项决策起草于 2026-08-05 的 v0.2 发布前设计收敛阶段,并在 2026-08-08 随 SOW v0.2.0 正式交付,随后延续为 v0.3 与 v0.4 的布局契约。它记录的是架构选择,不是笼统的兼容性 PASS:协议闭包、普通软件包客户端、镜像工具、静态托管与对象存储始终属于彼此独立的证据层。 最终决策 每个 SOW Repository 只拥有一棵公共树: <repository>/ pool/ # 正典包体 dists/ <dist>/ <architecture>/ # …
这项决策起草于 2026-08-05 的 v0.2 发布前设计收敛阶段,并在 2026-08-08 随 SOW v0.2.0 正式交付,随后延续为 v0.3 与 v0.4 的布局契约。它记录的是架构选择,不是笼统的兼容性 PASS:协议闭包、普通软件包客户端、镜像工具、静态托管与对象存储始终属于彼此独立的证据层。 最终决策 每个 SOW Repository 只拥有一棵公共树: <repository>/ pool/ # 正典包体 dists/ <dist>/ <architecture>/ # …