SuperAPI AI 工具集

parcel-audit

测试与质量

查看项目

更新于 10-15 08:49

技能介绍

Parcel Audit 是 rookery 工作流中的规范构建后审查技能,针对单个 parcel(工作单元)产出裁决、带 file:line 证据的发现表以及版本化审计文件。它不合并、不编辑 parcel 源码,只写入一个文件:审计文件。该技能随 rookery 捆绑,可与 rookery status、rookery land history、rookery worktree list 配合,在审计周围提供舰队级可见性。

用途

当 parcel 已写出 PARCEL_DONE.md 并需要在合并前进行独立审查时使用;当已有审计(v1、v2……)且 parcel 自那以后新增了提交,需要产出新版本时使用;当需要为 wave-triage 中的门禁决策提供权威证据时使用。

不适用场景:parcel 尚无 PARCEL_DONE.md(先运行 parcel-roster 确认,再要求 parcel 会话完成);只需要存在性快照(使用 parcel-roster);需要多 parcel 合并顺序决策(使用 wave-triage)。

路径解析(每会话读一次)

该技能操作位于可配置根目录下的 parcel worktree。按以下顺序解析 <worktrees_root>:CWD 中的 rookery.yaml 读取顶层 worktrees_root 键(若存在且非空则使用);否则回退到 ROOKERY_WORKTREES 环境变量;默认 ./worktrees(相对于 CWD)。用 git rev-parse --show-toplevel(从 CWD 运行)解析项目仓库根 <repo>,该路径用于 uv -C <repo> 及读取 spec。审计文件位于 <worktrees_root>/audits/(worktrees 根下的同级目录,不在任何 worktree 内)。

工作流程

步骤 1 — 定位 spec 与 worktree:按上述路径解析块解析 <worktrees_root> 与 <repo>。给定 parcel id,从 <repo> 在已知位置 Glob spec:parcels/<id>.md、parcels/waves//<id>.md、parcels/waves//<id>-.md。若多个匹配,优先最近修改的。若无匹配,在审计中记录 SPEC: absent 并继续——部分 parcel 是临时的,没有 spec 文件。通过 Glob 在 <worktrees_root>/<id>/ 或 <worktrees_root>/<id>-/ 定位 worktree。若 worktree 缺失,停止并输出 STATUS: worktree absent。

步骤 2 — 读取 PARCEL_DONE(通过 parcel-reader):对 worktree 的 PARCEL_DONE.md 调用 parcel-reader 技能,使用其结构化输出作为 parcel 自身的声明,不要重新解析。若 parcel-reader 返回 STATUS: absent,停止并在审计中输出 STATUS: PARCEL_DONE absent。没有完成声明则审计无法继续。

步骤 3 — Git 三件套:从 worktree 运行 git -C <wt> log --oneline main..HEAD、git -C <wt> diff --stat main、git -C <wt> status --short、git -C <wt> merge-base main HEAD。记录:领先 main 的提交数、触及文件、行增量、脏文件、merge-base 哈希。脏 worktree 是警告(非失败)——parcel 可能有合法的未提交草稿。

步骤 4 — 范围检查:将 git diff --stat main 输出与 parcel 声明的自有目录(来自 spec 的 ownership 表,或 PARCEL_DONE 的 "affected-trees" 部分)交叉引用。任何自有目录之外的文件都是范围违规——用 diff 中的 file:line 证据记录每个。

步骤 5 — 读取变更源码:对 git diff --stat main 中的每个文件,从 worktree 完整读取。注意:公共 API 形态(导出函数、类、CLI 命令);与其他 parcel 的契约(跨模块边界的导入);表示延迟工作的 stub 或 TODO(P<N>) 标记;测试:存在性、覆盖形态、任何带原因的 @pytest.mark.skip。不要读取 diff 之外的文件——它们不是 parcel 的输出。

步骤 6 — 开发循环:在 worktree 中运行(使用 worktree 自身的模块布局限定范围):uv -C <wt> sync --extra dev;uv -C <wt> run --extra dev python -m pytest tests/unit/<module> -v;uv -C <wt> run --extra dev python -m mypy src/<package>/<module> --strict;uv -C <wt> run --extra dev python -m ruff check src/<package>/<module>。捕获退出码及每个命令最后约 30 行。测试套件在收集时报错为 FAIL。ruff 或 mypy 的警告而无错误为 PASS_WITH_WARNINGS。全绿为 PASS(受前面步骤约束)。

步骤 7 — 裁决 + 发现表:组合信号。范围违规:PASS 为 0,PASS_WITH_WARNINGS 为 0,FAIL 为 ≥1。脏 worktree:PASS 为 0,PASS_WITH_WARNINGS 为 ≤5,FAIL 为 >5 或未提交测试。测试(pytest):PASS 为绿,PASS_WITH_WARNINGS 为仅警告,FAIL 为任何失败或收集错误。类型(mypy --strict):PASS 为干净,PASS_WITH_WARNINGS 为仅警告,FAIL 为任何错误。Lint(ruff):PASS 为干净,PASS_WITH_WARNINGS 为仅警告,FAIL 为任何错误。PARCEL_DONE 声明与现实匹配:PASS 为是,PASS_WITH_WARNINGS 为轻微漂移,FAIL 为实质性虚假声明。总体裁决取最差信号。构建发现表,每个问题一行,适用时引用 file:line。

步骤 8 — 写入审计:确定版本:Glob <worktrees_root>/audits/<id>.v*.md,取最大 + 1(若无则为 v1)。使用规范的 Phase A–E 布局写入 <worktrees_root>/audits/<id>.v<N>.md。<id>.v<N>.md 版本化约定是公共契约——保持它。审查者跨舰队交叉阅读,形状分歧会让他们付出代价。审计文件结构包括:标题与裁决、摘要、Phase A — 范围、Phase B — 契约、Phase C — 测试/类型/Lint、Phase D — 质量、Phase E — 集成风险(给下一个集成者)、建议、原始产物。在 main 上通过项目仓库提交审计,消息如 audit(parcel/<id>): v<N> <verdict>。审计位于 <worktrees_root>/audits/<id>.v<N>.md——parcel 自己的分支不跟踪审计。

硬性规则

绝不编辑 parcel 源码(审计对主体只读;只允许一次写入——审计文件);绝不合并、cherry-pick 或推送(合并是单独的 git-ops 关注点;审计先于它);审计文件放到 <worktrees_root>/audits/,不在 worktree 内(项目约定;保持 worktree diff 干净);使用 git -C <wt> 和 uv -C <wt>,绝不 cd(维持权限授予;项目 bash 约定);用 file:line 引用证据(审查者必须能验证发现);绝不捏造测试数字(若 pytest 在收集时失败,如实说明;不要编造通过数)。

反模式

通过 Bash 使用 ls / find / cat 进行文件操作(Grep/Glob/Read 是专用工具);转述 PARCEL_DONE 而非逐字引用(审查者需要作者的确切措辞来捕捉漂移);当 mypy --strict 有错误但 pytest 绿时标记 PASS(严格 mypy 是强制门禁;仅警告是宽松解读);运行开发循环不带 --extra dev(开发依赖限定在 extra;裸 uv sync 是假阴性设置);写入 worktree 的 PARCEL_DONE.md(parcel 会话拥有该文件;审计去 audits 目录);读取 diff 之外的文件"作为上下文"(扩大范围、膨胀审计、偏离重点);硬编码 worktrees 路径(始终通过 rookery.yaml → ROOKERY_WORKTREES → ./worktrees 解析)。

相关技能

parcel-reader — 解析该技能消费的 PARCEL_DONE;parcel-roster — 表面级清单;在挑选审计对象前使用;wave-triage — 消费审计裁决来排序合并;parcel-generate — 编写该技能比较所依据的 spec;rookery status / rookery land history / rookery worktree list — 围绕审计进行定位的舰队级命令。