跳转到主要内容

标签: repository

  • SOW 设计演进:从 Route Graph 收敛到 Repository Core

    Vonng 发布于 设计归档 2241 字 5 分钟

    VonngDesignarchitecturerepositorymigrationdecision

    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 …

  • 设计原则

    Vonng 发布于 设计归档 1208 字 3 分钟

    VonngDesignplainmanagedrepository

    设计原则

    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 …

  • 系统模型

    Vonng 发布于 设计归档 1167 字 3 分钟

    VonngDesignrepositorydistpoolgeneration

    系统模型

    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 └── …

  • 为什么 SOW 每个仓库只保留一棵包体树

    Vonng 发布于 设计归档 1516 字 4 分钟

    VonngDesignrepositorypoolrpmaptcompatibilitydecision

    为什么 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>/ # …

  • 核心概念

    发布于 上手

    Startplainmanagedrepositorydist

    Plain 还是 Managed 两条运行路径相互独立。 Plain Managed 入口 sow create DIR init、repo、dist、add、rm、build 状态 软件包目录 sow.yml 加私有 SQLite/操作日志 公共布局 平面 RPM/DEB 索引 Repository pool/ + dists/ 格式 RPM 与 DEB 可共存于一个目录 每个 Dist 一种格式 架构视图 无 有 策略与审计 无 有 元数据签名与发布目标 无 有 目录内容已经等于目标仓库时使 …

    Plain 还是 Managed 两条运行路径相互独立。 Plain Managed 入口 sow create DIR init、repo、dist、add、rm、build 状态 软件包目录 sow.yml 加私有 SQLite/操作日志 公共布局 平面 RPM/DEB 索引 Repository pool/ + dists/ 格式 RPM 与 DEB 可共存于一个目录 每个 Dist 一种格式 架构视图 无 有 策略与审计 无 有 元数据签名与发布目标 无 有 目录内容已经等于目标仓库时使 …

  • 仓库布局

    发布于 参考

    Referencerepositorypooldist

    SOW 的 Managed 布局只有一种:软件包体在 pool/ 下只存一份,dists/ 只保存客户端视图元数据。对外服务、复制或发布时,单位始终是完整仓库目录。 Plain 模式 sow create 在现有软件包旁写入索引,不修改无关文件: /srv/offline/ ├── blackbox_exporter-0.28.0-1.x86_64.rpm ├── libpq5_18.3-1.pgdg12+1_amd64.deb ├── repodata/ │ ├── …

    SOW 的 Managed 布局只有一种:软件包体在 pool/ 下只存一份,dists/ 只保存客户端视图元数据。对外服务、复制或发布时,单位始终是完整仓库目录。 Plain 模式 sow create 在现有软件包旁写入索引,不修改无关文件: /srv/offline/ ├── blackbox_exporter-0.28.0-1.x86_64.rpm ├── libpq5_18.3-1.pgdg12+1_amd64.deb ├── repodata/ │ ├── …

  • sow repo

    发布于 命令

    Commandclirepositorymanaged

    一个仓库(Repository)独占一份 pool/、一份 dists/、一个 SQLite 数据库与一个私有状态目录。它是 锁、事务恢复、Generation 编号与 Changeset 的边界——跨仓库不去重,也不承诺跨仓库原子提交。 sow repo 管理的就是这条边界。 语法 sow repo ls [-C DIR] [--json] sow repo new NAME [-C DIR] [-T DUR | -N] [--json] sow repo show [NAME] [-C …

    一个仓库(Repository)独占一份 pool/、一份 dists/、一个 SQLite 数据库与一个私有状态目录。它是 锁、事务恢复、Generation 编号与 Changeset 的边界——跨仓库不去重,也不承诺跨仓库原子提交。 sow repo 管理的就是这条边界。 语法 sow repo ls [-C DIR] [--json] sow repo new NAME [-C DIR] [-T DUR | -N] [--json] sow repo show [NAME] [-C …

  • 第一个工作区

    发布于 上手

    Startmanagedrepositorydistgeneration

    Managed 模式会持久保存配置、成员关系、Generation 与审计状态。下面从空目录开始。 初始化工作区 sow init /srv/sow cd /srv/sow init 创建: /srv/sow/ ├── sow.yml # 配置;schema: sow/v3 └── .sow/ # SQLite 状态、锁、staging、恢复与操作日志 不要编辑或对外服务 .sow/。init 是幂等操作:重复执行会校验并收敛已声明的 Repository 与 Dist,不会重置有效工作区。 默 …

    Managed 模式会持久保存配置、成员关系、Generation 与审计状态。下面从空目录开始。 初始化工作区 sow init /srv/sow cd /srv/sow init 创建: /srv/sow/ ├── sow.yml # 配置;schema: sow/v3 └── .sow/ # SQLite 状态、锁、staging、恢复与操作日志 不要编辑或对外服务 .sow/。init 是幂等操作:重复执行会校验并收敛已声明的 Repository 与 Dist,不会重置有效工作区。 默 …

  • Managed 工作区

    发布于 功能

    Featuremanagedrepositorydistgeneration

    当同一个仓库要维护好几个月 —— 包成批到达、由策略决定谁留下、事后还得说清楚什么时候变了什么 —— 你需要的是 Managed 模式。本页讲三层模型、它产出的布局,以及命令怎么判断你说的是哪个仓库、哪个 Dist。 三个层级 Workspace 工作区 发现与配置边界 └── Repository 仓库 所有权边界:pool、dists、SQLite、锁、Generation └── Dist 发行版 单一格式的具名成员集合 └── Architecture View 架构视图 渲染投影 —— …

    当同一个仓库要维护好几个月 —— 包成批到达、由策略决定谁留下、事后还得说清楚什么时候变了什么 —— 你需要的是 Managed 模式。本页讲三层模型、它产出的布局,以及命令怎么判断你说的是哪个仓库、哪个 Dist。 三个层级 Workspace 工作区 发现与配置边界 └── Repository 仓库 所有权边界:pool、dists、SQLite、锁、Generation └── Dist 发行版 单一格式的具名成员集合 └── Architecture View 架构视图 渲染投影 —— …