AGENTS.md):Python 代码的完整 pytest 套件,
分层覆盖率门禁(Issue #234)。同一契约在 Runner 机器本地和
GitHub 远端运行。
分层覆盖率策略
低于 95% 的代码只允许是非核心、可明确解释的历史/防御性分支;每个例外
必须在覆盖率报告中可定位。无理由的
# pragma: no cover 是契约违规
(静态测试钉住少数正当位置:__main__ 入口守卫和测试里一个防御性
except 守卫)。
本地契约命令
从仓库根目录运行(生产解释器/usr/bin/python3,Python 3.14)。COVERAGE_FILE
(coverage.py 官方环境变量)把覆盖率数据指到已排除的运行目录 .orbi/
(Issue #302):worktree 根不会出现任何覆盖率产物,dirty-worktree 门禁
也就不会被它绊住:
tools/coverage_gate.py 在行层级或分支层级任一低于 95% 时退出非零
(它分别读取 coverage JSON 的 percent_statements_covered 和
percent_branches_covered——JSON 字段 percent_covered 是行+分支合并
百分比,绝不作为门禁),tools/diff_coverage_gate.py 在 base ref 之后变更的
Python 行或分支未达 100% 覆盖时退出非零。
远端 CI(GitHub Actions)
.github/workflows/ci.yml 在每次 pull_request 和每次 push 到
main 时运行同一契约:单个 job,actions/setup-python 固定 Python
3.14(GitHub-hosted runner 没有生产路径上的生产解释器,所以 workflow
固定同一 minor 版本,通过 PATH 上的 python3 运行相同命令),安装
requirements.txt,然后运行上面的契约命令——报告、tools/coverage_gate.py
和 tools/diff_coverage_gate.py origin/main(变更代码层级对照 PR base;纯
文档 PR 没有变更的 Python,直接通过)。没有 lint、没有矩阵、没有缓存。
workflow 自含环境声明——CI 的工具链属于 ci.yml,不属于仓库(Issue #569)。
Checkout 保持默认浅克隆并加 fetch-tags: true,随后用有界命令显式
抓取 base ref 和 +refs/tags/*:refs/tags/*。diff coverage 的 base
比较还会解除 shallow history;删除的一次性对账测试不再需要该设置。
发布文档测试用真实 tag objects:
发布文档测试(tests/test_docs_releases.py)用
git rev-parse / git cat-file 对 checkout 里每个已发布 tag 的真实
tag object 做校验,默认 --no-tags 抓取会让 tag object 缺失、测试以
could not get object info 失败(Issue #126)。被删除的发布对账测试
曾需要的完整历史 checkout(fetch-depth: 0)已随之移除(Issue #910)。
现有 tags 只是在 CI 里可见,不被移动、覆盖或重写。
CI 里还运行 Mintlify 文档构建 smoke(Issue #116):官方 mint CLI
的 mint validate(严格构建校验,任何 warning 或 error 都退出非零)
——文档配置、页面和链接在远端同样被门禁。
macOS 兼容性 workflow(hosted 兼容性边界)
.github/workflows/ci-macos.yml 增加一个独立的、串行的 macOS job,在
每次 pull_request、每次 push 到 main 以及手动触发时运行:单个 job,
固定在 macos-15 runner 镜像上(绝不使用漂移的 macos-latest 标签),
actions/setup-python 固定 Python 3.14,安装 workflow 自己的测试
依赖,并做真实 runner 探测(sw_vers、Python 版本、launchctl 和
launchctl print gui/$(id -u)——用户的 launchd GUI domain 是一切
launchctl 操作依赖的 runner 级前提)。该 job 以单条有界命令运行完整
pytest 套件并保留真实退出码,从目录中性位置构建软件包并做 clean-venv
wheel smoke(orbi --version、orbi --help、site-packages 导入源),
且在不真实安装的前提下演练安装器的 Darwin 分支:bash -n install.sh、
对 launchd plist 模板 plutil -lint、在临时 ORBI_HOME 里以 PATH 桩
运行安装器入口——真实的 macOS uname/launchctl 通过调度器门禁,
桩 git 在 clone 步骤前停下。hosted macOS 镜像没有 GNU coreutils 的
timeout(与 install.sh 处理的限制相同,Issue #868),workflow 用
perl alarm 提供一行 timeout 垫片,让每条命令保持文档规定的
timeout <秒> <命令> 形式。该 job 绝不改动 runner 自身的 launchd
部署(探测只读,不 enable/bootstrap)。
边界是刻意且诚实的:hosted macOS CI 校验 macOS 代码路径(测试、打包、
安装器逻辑)和 runner 级 launchd 前提——它无法证明真实用户的登录 GUI
会话、凭据、模型 provider 或完整的 GitHub Issue 到 merge 旅程,也不能
替代真实 Mac 硬件上的真实 macOS launchd smoke。同样的诚实也适用于套件
内部:部署、setup、doctor 与健康检查契约通过 systemd_scheduler 测试
fixture 钉在 systemd 实现上(launchd 实现保有自己基于 fakes 的测试),
基于 /proc 的真实子进程 idle-recovery 场景与 runner 子进程 e2e 场景
在 Darwin 上以明确理由跳过——上方的 Ubuntu workflow 仍是它们唯一的
权威。覆盖率与变更代码门禁仍
以上面的 Ubuntu workflow 为准;macOS job 对任何测试、打包或安装器兼容
性失败仍然变红——没有任何失败被吞掉或洗成通过。
CI 红的时候 PR 不可合并——Runner 的 merge 门禁也要求 PR mergeable。
测试覆盖什么
- 行为测试:runner、CLI、slots、进度发布、活动流、
resume/review/merge 逻辑(套件主体,包括针对真实
git和ghfixture 的端到端测试)。 - 静态契约测试:把仓库钉在它自己的文档和文件上:
AGENTS.md契约项、标签集、systemd units(每 5 分钟调度、preflight)、CI workflow、LICENSE、docs/下的文档站(本页的声明由tests/test_docs_site.py强制执行;中文页面和 EN/ZH 同一事实源由tests/test_docs_i18n.py强制执行;Mermaid 图由tests/test_docs_mermaid.py强制执行)。