用途
aif-verify 是 AI Factory 工作流中的实现后质量校验(Post-Implementation Quality Check)技能,用于核实已完成的实现是否与计划一致、是否有任何遗漏、代码是否达到可投产状态。它是可选技能:既可以在 /aif-implement 完成所有任务后自动调用,也可以在任何时候手动运行。
主要能力
- 上下文加载:读取 .ai-factory/config.yaml,解析路径(description、architecture、rules_file、roadmap、research、plan、plans、fix_plan、specs、rules、archive)、verify_mode 严格度、Git 设置(enabled、base_branch、create_branches)、规则层级(RULES.md + rules.base + rules.<area>)以及语言设置 language.ui。若 config.yaml 不存在则使用默认值。
- 门禁契约加载:读取 references/CONTEXT-GATES-AND-OWNERSHIP.md 与 references/GATE-RESULT-CONTRACT.md,作为命令到产物所有权、只读行为、普通与严格阈值的权威来源。
- 计划产物定位:依据当前 Git 分支(将 "/" 替换为 "-" 得到 branch stem)在 plans 目录中查找计划文件,支持 sequential 编号形式与 ultra 入口(index.md 含且仅含一个 <!-- aif:plan-mode:ultra -->)。找不到时提供三个选项:核对最近提交、对比分支差异、取消。
- 任务完成审计:逐条读取任务描述与验收标准,用 Glob/Grep 查找实现代码并核对,输出 ✅ COMPLETE / ⚠️ PARTIAL / ❌ NOT FOUND / ⏭️ SKIPPED 四类结论。
- 代码质量校验:按项目类型自动探测并执行构建/编译检查(go build、npx tsc --noEmit、npm run build、py_compile、cargo check、composer validate 等)、测试检查(npm test、pytest、go test、phpunit、cargo test)、Lint 检查(eslint、golangci-lint、ruff、php-cs-fixer,仅针对变更文件)以及导入与依赖检查。
- 一致性检查:需求溯源与语义一致性、计划与代码漂移(命名、文件位置、API 契约)、遗留产物搜索(TODO/FIXME/HACK/XXX/TEMP/PLACEHOLDER/调试输出)、配置与环境变量文档核对、DESCRIPTION.md 同步检查。
- 研究漂移检测:当计划内嵌 ## Research Context 时,按规范的 Source/Reference 语法解析来源路径;若来源位于 research_bundles_dir 内,要求同级 INDEX.md 含且仅含一个 <!-- aif:research-mode:ultra -->,否则发出 WARN [research-drift]。存在 SHA256 时按指定规则计算并比对摘要;缺失或版本不匹配时同样发出 WARN [research-drift]。
使用方式
- 由 /aif-implement 完成全部任务后调用,或在任意时间手动执行。
- 严格度优先级:--strict CLI 标志最优先;其次为 config.yaml 中的 workflow.verify_mode;默认 normal。
- 所有面向用户的提示、说明、验证报告、问题修复提示与下一步指引须使用 ui_language 指定语言;机器可读的 aif-gate-result JSON 字段与枚举值(pass、warn、fail)以及 WARN/ERROR 标签、命令、路径、配置键、代码标识符等保持原样不变。
- 若存在 .ai-factory/skill-context/aif-verify/SKILL.md 则必须读取,其项目级规则优先于本技能通用规则,并须应用于所有输出(包括验证报告模板)。
- 本技能为只读行为(aif-commit/aif-review/aif-verify 均只读)。
适用场景
- 功能或计划实现完成后,需要确认「计划要求的都做了、没被遗忘」。
- 需要产出可机器读取的质量门禁结果(aif-gate-result JSON)。
- 需要在 strict / normal / lenient 等不同严格度下做质量把关或发布前检查。
限制
- 如找不到计划产物,需要用户选择核对最近提交、对比分支差异或取消,无法自动确定校验目标。
- 计划发现仅扫描 paths.plans/,被 /aif-archive 归档到 paths.archive/plans/ 的计划不参与发现;若仅在归档中找到,会发出 WARN。
- 仅 lint 变更文件以保持输出聚焦。
- 若项目没有测试或计划中明确跳过测试,会记录但不判定失败(普通模式下缺失证据为警告,严格模式下为失败)。
- 关于收费、价格、具体支持平台等信息,资料中暂未提供。