f10 · ship
运行此技能 即 为用户明确授权推送并打开或刷新此任务的 PR(pr 步骤),满足全局“除非被要求,否则绝不推送/打开 PR”规则(仅针对该 PR),并发布 resolve 的 +reply,将 resolve 的修复推送到该 PR,发布 review 的 f10 review ack,以及流程中 CI 审查的 f10 review trigger(当审查部分声明了手动方式如何读取时)和 resolve 的 f10 review settle,对于 pr 之后的 judge 条目,推送追赶保护的集成及其自身的更改到该 PR,并发布其状态和评论,以及发布运行的回报告评论和任务状态(报告回)。
部署有其自己的确认(deploy 步骤)。
参数
--help:执行${CLAUDE_PLUGIN_ROOT}/modes/help.md并停止;以下内容不适用。--dry-run:执行${CLAUDE_PLUGIN_ROOT}/modes/dry-run.md而非运行任何实际操作,并停止。它会报告其余参数将运行哪些步骤。--driven:执行${CLAUDE_PLUGIN_ROOT}/modes/driven.md;以下所有内容仍然运行。- 一个作为单词的流程名称(
/f10:ship direct: fix typo …;f10 start --local发送/f10:ship local: <id>,--flow <name>发送<name>:),或以用户自己的话命名:运行该流程。 否则,流程由 frontmatter 的flow_by_area根据任务区域映射(来自 fetch brief 的区域,否则来自计划的Areas行),否则为default。 两个区域映射到不同流程:可交付物的区域获胜,如同角色一样,brief 会命名另一个区域。 区域映射是项目的选择,而非你的:切勿自行选择其他流程,尽管对于微小的工作你可以建议一个。 在第一步骤之前,在一行中命名流程选择的区域和流程名称。 --pace <name>:仅本次运行以此速度运行流程(速度,下方);如未指定,则使用分支记录的速度,否则使用项目或用户的pace:。<plan.md>:一个计划文件;使用它运行流程。<task-id>(项目 ID 格式 / ID / 网址),或由+连接的任务包(ABC-1+ABC-2,以主任务为键):首先执行${CLAUDE_PLUGIN_ROOT}/modes/forward.md,然后再加载任何内容;如果它转发任务则停止。 否则运行 fetch 步骤,然后查找<storage root>/plans/<TASK-ID>.md(包的主任务)(如果确切名称不匹配,则在 plans 目录中全局搜索)。 找到:重用该文件,绝不询问;带有计划文件的任务永远不会再次规划,重新规划需手动执行/f10:plan <id>。 未找到:在stale_after条件下,fetch 会先判断旧任务,并可能在没有计划或流程条目之前结束运行(steering 中的anyway可跳过此判断);然后,当流程以plan开头时运行 plan 步骤(使用flow_by_area时,start 和 drive 将规划留给 ship);无计划 流程(下方)从不运行规划步骤,并且 fetch 的 brief 成为内联计划。 然后运行流程。<description>:自由文本;执行 capture、fetch 和 plan 步骤,然后运行流程。- 无参数(仅标志或流程词不算参数;描述是自由文本,见上文):当前对话中已有的任务(刚刚保存的计划、已获取的任务),否则为分支的任务,即
f10 task current打印的 ID。 在一行中说明你获取了哪个任务以及来自何处,然后像<task-id>一样运行它,包括转发模式,以便重用已保存的计划。f10 task current退出码非零:用一行文字请求一个任务并等待(driven:询问,根据modes/driven.md)。 - 主题之外的额外文本是 steering。
resume at <entry>(由f10 drive在追赶解决停止后发送)从该入口开始流程,并视之前的入口为已完成;(entry <n>)选择徽章流水线中第n个入口,其中流程两次命名该入口。 徽章移动到该位置:在pipeline之后,一次调用对之前的每个入口依次运行set ship running,然后在入口自身上运行。
运行
- 首先运行
f10-load-project.sh,每次调用此技能时,根据输入命名所需步骤:capture fetch plan用于描述,fetch plan用于任务 ID,对于计划文件则无。 流程在其打印的project.md中声明;无计划的流程会加载plan但从不运行它。 - 按照“参数”项中给出的顺序执行这些步骤。
- 在每步即将运行前,通过一次调用加载每个流程入口及其徽章:
f10-state.sh set ship running <entry>; f10-load-project.sh <step>,并根据加载内容执行步骤。review条目加载review resolve,而pr条目加载pr handoff,除非其handoff off拨号已设置,因为 pr 步骤运行 handoff;追赶保护(下方)在它保护的每个入口的加载中添加catchup。
流程 是 frontmatter 的 flows:,名称到其有序条目的映射,一个列表或一个字符串,按空格或箭头分割(plan judge implement cleanup:comments,prose pr review:ci deploy:staging);若未声明则为 default: plan implement pr。
f10 flow 列出它们以及选择每个流程的条件。
速度 调整所选流程(docs/project-setup.md → 速度)。
一旦选择流程,运行 f10 flow <name> [--pace <name>],仅当参数提供了 --pace 时才传递它,并按它打印的顺序运行条目,而不是 frontmatter 的列表。
它每行打印一个条目。
标记为 skipped 的条目不运行:用一行说明,并将其排除在徽章的 pipeline 之外。
条目后的拨号与条目一起传递给其步骤:rounds 和 depth 传递给 review,marker 和 handoff 传递给 pr;judge 的 effort 仅在 judge 生成代理时适用(--blind),其配置文件来自 f10 agents judge,并在参数给出时携带 --pace <name>;内联 judge 在任务代理的配置文件上运行。
速度跳过前导的 plan 会使运行变为无计划,如同没有 plan 的流程一样。
finish 行表示运行结束于速度本应合并的开放 PR:ship 从不合并它,报告的 Next: 命名为 /f10:finish <id> --merge,除非 drive 完成任务(modes/driven.md)。
没有速度时,列表是声明的流程,并带有一个可选的、已解决的 CI 审查(ci?)。
f10 flow 版本过旧无法接受名称会导致失败:运行声明的流程,并用一行说明未应用速度。
条目是一个步骤,或 step:arg:泛型步骤加上其覆盖,或项目定义的步骤,参数传递给它(review:local 或 review:ci 设置审查的 by(谁审查),review:host 在宿主自身的代码审查上运行本地审查,review:local+ci 将两者合并为一轮审查和一次解决,review:local+ci? 仅在 CI 审查可以运行时运行它,并且 f10 flow <name> 在 ship 看到条目之前解决 ?,cleanup:<targets> 清理目标,它们始终获得完整通行,而裸 cleanup 在新增代码行数少于 200 的差异上运行轻量级清理,deploy:<env> 环境)。
运行从前导 plan 之后的条目开始,前导 plan 仅在无计划文件的任务中运行。
resolve 从不命名:review 条目运行它。
judge 条目按位置进行判断:implement 之前是 plan judge(主题 plan <id>),其黄色裁决原地修改计划文件且不编写代码;之后是 change judge,它自行构建黄色裁决的更改,按照 judge 步骤在 pr 之前和之后所述的路由进行。
pr 条目打开分支的 PR,或当已有开放 PR 时刷新它,因此流程可以在审查或 judge 之后再次命名 pr 以使描述保持最新。
没有前导 plan 的流程是 无计划的:它不写入计划文件,而是使用聊天中的内联计划作为替代,除非存在已保存的计划。
旧键(pipelines、planless、drive_chain)仍可读取,并在发出 f10 init --migrate 的警告后转换为流程,旧的条目格式 review (local) 也是如此。
自由文本输入也跳过 capture 和 fetch,因此运行没有任务 ID。
任务 ID 运行 fetch 并使运行与 ID(徽章、报告、分支、审查目录)保持关联,并在获取后标记 f10-state.sh set plan skipped,除非它重用已保存的计划(prior,下文)。
其内联计划说明 fetch 确定的类型,包含 bug 的复现步骤和根本原因,重构的不变性或尖峰的问题各占一行,并列出其默认值上的任何差距。
对于任务 ID,内联计划还会像 plan 步骤一样编写更改的意图(f10 lore add intent --change <change> -m <what and why>,docs/lore.md);现有的意图或添加失败,在报告中将占一行,而非失败的步骤。
装运物 是最后一个交付条目的(conventions/context.md → 装运物):其行是该步骤声明的行,项目定义的步骤在其覆盖的 Shipment: 行上;其后的 judge、demo 或 handoff 条目添加行,绝不替换。
demo 条目如果无内容可展示,则在一行内跳过(demo 步骤),这是不添加行的正常结束。
尖峰在 implement 之后结束,无论流程如何:Kind: spike 计划回答一个问题,其代码永远不会离开机器。
implement 之后的步骤不运行(无清理、提交、推送、pr、审查、judge 或 deploy);装运物是尖峰报告。
最终报告以其关闭结束:f10 finish <id>,该命令存档计划和报告,丢弃实验代码并移除工作树、分支和工作区;--keep 保留实验,提交在 kept/ 分支上。
Driven 尖峰不需要报告中的关闭:f10 drive 在 ship 之后关闭它。
在主检出中,在 f10 finish 之前按报告命名的路径丢弃实验代码,f10 finish 拒绝脏的主检出。
其回报告(下方)包含问题、答案和建议;仅在 visibility: public 下命名尖峰报告的路径,因为 stealth 模式将 .f10/ 路径排除在跟踪之外。
类型在流程开始前从计划中已知,或从无计划运行的内联计划中已知,因此徽章声明 f10-state.sh pipeline implement,干运行打印在 implement 处截断的路径。
追赶保护 在三类条目之前引入基础,如 catchup 步骤的 作为保护 所述;在 catchup: off 下,它从不集成,且其加载将 catchup 排除在外,但对于无代码的基础,以下问题仍会运行。
追赶绝不是流程条目。
- 在 implement 之前,仅当
f10 start --after或f10 finish在分支上记录了基础时(f10-after-branch或f10-landed);否则f10 pr catchup --guard implement打印method: skip。 尚无代码的基础是保护的code: none行,f10 drive通过该规则释放依赖任务,适用于本地持有或仅存在于 origin 的基础。在集成之前,询问一次(AskUserQuestion)等待,或按计划的假设继续。 等待以阻塞状态结束运行(f10-state.sh set ship blocked implement,并附带命名基础任务的note)。 继续则根据计划文件记录的基础任务的计划进行构建,如果计划文件缺失则无后备方案。 Driven 模式下,不询问任何问题,ship 也绝不继续:`f10-state.sh set ship blocked implement; f10-state.sh wait ; f10-state.sh note