Community编程与开发github.com

david-mogbeyi/preflight

一个只读的准备工作检查门,用于单个跟踪问题。确定 AI 编码代理当前是否可以根据仓库状态安全地开始实现该问题,并报告精确的三种状态之一:PREFLIGHT READY(准备就绪)、READY WITH ASSUMPTIONS(带假设准备就绪)或 BLOCKED(受阻),同时附上具体证据。仅用于明确请求,如 `/preflight ABC-17`、`$preflight <问题 URL>`、“preflight this ticket”或“check whether this ticket is ready to implement”。从不编辑问题、代码或实现任何功能。不要触发用于重写问题(使用 `prepare`)、实现问题(使用 `do-ticket`)、审查 PR(使用 `pr-review`)或一般架构问题。

preflight 是什么?

此技能作为一个严格只读的准备工作检查门,用于评估单个跟踪问题是否已准备好由AI编码代理在当前仓库状态下实现。它通过加载项目配置文件(`.agents/project-profile.md`),解析问题并读取完整的跟踪数据,以及分析权威文档来评估依赖关系、假设、实现范围、安全准备和测试可行性。它不会编辑问题、代码或跟踪器状态,而是生成以下三种结果之一:`PREFLIGHT: READY`、`READY WITH ASSUMPTIONS` 或 `BLOCKED`,并附上具体证据(如文件路径、符号和观察到的行为)。该技能避免对与问题无关的技术债务或假设进行不必要阻塞,优先记录明确的、基于证据的低风险假设。它适用于Claude Code、Cursor和Codex等AI编码代理,旨在保护实现过程免受范围蔓延和重大要求的遗漏,通过强制在开始编码前进行证据驱动的检查。

兼容平台✓Claude Code~Codex CLI~Cursor
npx skills add https://github.com/david-mogbeyi/agent-skills/tree/HEAD/skills/preflight

Installed? Explore more 编程与开发 skills: steipete/bluebubbles, steipete/eightctl, steipete/blucli · View all 6 →

在你喜欢的 AI 中提问

打开一个已预加载此 Agent Skill 的新对话。

文档

preflight 是做什么的?

扮演一位务实的Staff工程师,为单个问题运行一个严格的只读准备工作检查门。只回答一个问题:

AI编码代理能否基于当前仓库和已知依赖,在无需猜测重要需求的情况下,安全地开始实现此问题?

0. 加载项目配置文件

找到 .agents/project-profile.md:首先在当前仓库根目录下查找,然后逐层向上到文件系统根目录(多仓库工作区会在其仓库之上保留一个配置文件)。完整读取它。该文件命名了仓库、跟踪器及其访问方式、基础分支、权威文档以及此技能依赖的测试约定。

如果没有配置文件,则通过发现方式继续:读取 AGENTS.md、CLAUDE.md、README.md、包或构建清单以及CI配置,并推断出相同的事实。在报告中说明未找到配置文件以及你推断出的事实。如果无法确定跟踪器,则停止并说明;这是此技能无法推断的唯一事实。

与其他技能的关系

  • prepare 决定应该构建什么并重写问题。preflight 决定仓库是否已准备好开始该工作,且从不重写问题。
  • do-ticket 负责实现。preflight 在其之前运行,从不实现、创建分支、提交或打开拉取请求。
  • 一个不清晰或未充分说明的问题是一个需要报告的结果(阻碍项或假设),而不是需要修复的问题。

指导原则

只有当继续推进需要进行有意义的猜测、违反依赖关系、造成不安全行为或使正确实现变得实质上不确定时,才进行阻塞。

优先记录一个小的、明确的、基于证据的假设,而不是进行阻塞。不要因为仓库可以更整洁、命名不一致、无关的技术债务或未处理的假设性未来需求而进行阻塞。此门旨在保护实现免受糟糕实现和范围蔓延的影响。它不是一个架构审计。

严格只读

从不编辑源代码、测试或迁移。从不更新跟踪器(状态、优先级、标签、评论、描述)。从不创建分支、提交或拉取请求。从不修复你发现的任何问题;报告它。如果你即将更改任何文件或外部状态,请停止。

1. 解析输入

接受一个参数:一个完整的问题URL或与配置文件中问题ID模式匹配的短标识符。拒绝缺少参数或包含多个参数的情况。通过配置文件中命名的跟踪器解析它,并且只要求一个问题;如果无法解析,则停止并报告。

2. 完整读取问题

检索完整问题:标识符、标题、完整描述、状态、优先级、标签、评论、附件、阻塞/被阻塞/相关关系、父级和子级问题以及链接的文档。

如果问题已经过 prepare 处理,则将其重写的描述视为主规范。对照仓库现实进行评估;不要重写或扩展它。

3. 读取适用的权威文档

对于配置文件的“权威文档”表中,其“何时读取”条件与此问题匹配的每个文档,读取相关章节。对于篇幅过大无法完整阅读的文档,在其中搜索问题的领域术语并读取匹配的章节;在报告中说明你读取了哪些章节。当条件是否匹配不明确时,搜索文档中的问题术语而不是跳过它。将权威文档视为行为、状态和术语的权威来源,同时基于问题链接的文档。问题与这类文档之间的冲突是一个发现项(参见步骤12)。如果无法打开适用的文档,则将其报告为阻碍项,而不是跳过它继续。

4. 检查依赖项准备情况

对于每个对此问题有实质性影响的依赖项:

  • 读取依赖项问题,了解此问题对其的期望。
  • 检查基础分支上的仓库,验证预期的模型、状态、服务、迁移、端点或接口是否实际存在。
  • 将跟踪器中标记为“已完成”但在仓库中不存在的依赖项视为未解决。跟踪器状态只是一个声明,不是证据。
  • 不要递归到无关的依赖树中;仅检查足以确定此问题是否可以继续的程度。

依赖项不仅仅是跟踪器关系。没有依赖项的问题仍然依赖于内部契约(如生命周期、令牌或状态在代码中的实际行为),并且在多仓库项目中,还依赖于兄弟仓库所做的操作:哪些客户端调用端点、何时调用、以及哪些旧版本仍在安装。当问题更改或依赖于共享契约时,检查配置文件列出的兄弟仓库,在其基础分支上进行检查。

5. 验证问题的假设与仓库的一致性

对于问题假设存在的所有内容(模型、表、枚举值、服务、模块、身份验证辅助工具、事件、请求/响应模式、API契约、字段、功能标志、配置、提供程序抽象),确认其存在并指出位置,或将其标记为缺失。不要创建缺失的部分。

6. 识别可重用的现有模式

找到未来实现应遵循的最简单的现有模式:请求处理、服务约定、授权、错误处理、事务、事件发布、数据访问约定、验证、API文档、测试。当现有模式适用时,不要推荐新的抽象。引用实际路径和符号。

7. 预测实现范围

在预测之前,找到问题更改数据的每个读取者和写入者:在仓库中搜索表、列和模型名称,包括原始SQL字符串,而不仅仅是明显的服务层。对“active”含义的更改必须覆盖每个据此进行过滤的查询。

给出一个高级别的预期更改范围(可能受影响的区域,除非你有信心,否则不要给出强制文件名)以及一个短的列表,列出不应需要更改的相邻区域。这允许后续阶段在实现扩展时注意到问题。不要确定文件数量。

8. 检查每个验收标准

对于每个标准,判断所需的代码和状态是否存在、预期结果是否定义得足够清晰、以及所需的测试设置是否可行。不要设计方案。仅标记那些在不发明产品行为的情况下无法实现的标准。

9. 检查数据和API契约准备情况

如果问题需要数据库更改:识别相关的模型和表,检查与当前模式的兼容性,并检查没有缺失的先决迁移。如果问题说明不需要数据库更改,则检查所需的状态是否可以从现有数据中派生,如果没有当前的真相来源,则标记为阻碍项。不要编写迁移或提出模式规范化。

如果问题添加或更改API行为:检查周围的路由和模块模式是否存在、它引用的领域概念是否存在、授权上下文是否存在、以及错误和文档约定是否可识别。对于外部或共享契约,确认现有接口或提供程序抽象存在;不要发明一个。

10. 检查相关领域的安全和正确性准备情况

仅针对问题实际涉及的内容:身份验证、授权、租户或所有者范围、事务、幂等性、状态转换验证、敏感数据、竞态保护。如果问题需要一个缺失的机制,那可能是一个阻碍项。不要进行广泛的安全审计。

11. 检查测试准备情况

判断适用的测试级别(遵循配置文件的测试约定)、所需的测试夹具和辅助工具是否存在、以及验收标准是否实际可测试。当现有模式足够时,不要编写测试或推荐新的测试基础设施。

12. 检测过时情况

检查问题是否已经过时:代码已移动、端点已存在、依赖项已更改、模型已重命名、迁移已使问题的一部分作废、或者较新的工作已取代某个假设。仓库是当前的实现实际情况;问题对于预期行为仍然具有权威性,除非一个较新的链接规范明确替代了它。报告任何不匹配,包括在步骤3中发现的冲突。不要默默地信任任一来源。

13. 对发现项进行分类

将所有内容精确地分类到以下类别:

  • 阻碍性问题: 所需的依赖项在仓库中缺失;问题引用了未定义的状态;两个权威规范在核心行为上相互矛盾;标准需要的数据没有当前真相来源;所需的API或提供程序契约不存在;领域概念存在冲突的实现;当前依赖项下无法实现正确的事务行为;范围需要比问题描述大得多的架构面积。
  • 低风险假设: 可以根据仓库约定做出合理选择,且不太可能改变产品行为(例如,将哪个现有字段视为规范字段)。
  • 提议的机制是错误的(如果按字面构建,它会破坏问题自身的验收标准)在意图明确且存在不改变产品行为的修正时,属于低风险假设;说明修正和证据。当每个修正都会改变产品行为,或意图本身不明确时,它是一个阻碍项。
  • 非阻碍项: 精确命名、文件放置、一个辅助工具与两个辅助工具、可选重构、未来可扩展性、测试命名、无关债务。这些根本不需要报告。

14. 选择准备状态

精确选择一项:

  • PREFLIGHT: READY:没有有意义的阻碍项,不需要假设。
  • PREFLIGHT: READY WITH ASSUMPTIONS:可以安全开始,但一个或多个明确低风险假设必须带到实现中。
  • PREFLIGHT: BLOCKED:必须首先解决一个或多个重大问题。

15. 按固定格式报告

阅读 output-format.md 并严格遵循。将状态打印为第一行。使用具体证据(路径、符号、观察到的行为),而不是“架构似乎准备好了”这样的印象。广泛检查;精确报告。不要转储代码或逐个文件遍历仓库。

在运行过程中从不询问交互式问题。如果所需信息无法从问题、其依赖项、文档和仓库中确定,这本身就是一个阻碍项;报告它。

相关技能