description: 通过处理并执行 tasks.md 中定义的所有任务,落实实现计划
用户输入
$ARGUMENTS
在继续之前,你必须先考虑用户输入(如果不为空)。
概述
在仓库根目录运行一次
.specify/scripts/bash/check-prerequisites.sh --json --require-tasks --include-tasks,并解析 JSON 中的 FEATURE_DIR 与 AVAILABLE_DOCS 列表。所有路径必须是绝对路径。当参数里包含单引号(例如 "I'm Groot")时,使用转义写法:如 'I'\''m Groot'(或尽量用双引号:"I'm Groot")。-
检查检查清单状态(如果存在 FEATURE_DIR/checklists/):
- 扫描 checklists/ 目录下的所有清单文件
- 对每个清单统计:
- 总条目:匹配
- [ ]或- [X]或- [x]的所有行 - 已完成条目:匹配
- [X]或- [x]的行 - 未完成条目:匹配
- [ ]的行
- 总条目:匹配
- 生成状态表:
| Checklist | Total | Completed | Incomplete | Status | |-----------|-------|-----------|------------|--------| | ux.md | 12 | 12 | 0 | ✓ PASS | | test.md | 8 | 5 | 3 | ✗ FAIL | | security.md | 6 | 6 | 0 | ✓ PASS |
-
计算总体状态:
- PASS:所有清单的未完成条目为 0
- FAIL:存在至少一个清单有未完成条目
-
如果存在未完成清单:
- 展示状态表与未完成数量
- 停止并询问:“有些检查清单尚未完成。是否仍要继续实现?(yes/no)”
- 等待用户回复后再继续
- 若用户回复 “no”“wait” 或 “stop”,则终止执行
- 若用户回复 “yes”“proceed” 或 “continue”,则进入第 3 步
-
如果所有清单都已完成:
- 展示所有清单通过的状态表
- 自动进入第 3 步
-
加载并分析实现上下文:
- 必须:读取 tasks.md 获取完整任务列表与执行计划
- 必须:读取 plan.md 获取技术栈、架构与文件结构
- 如果存在:读取 data-model.md 获取实体与关系
- 如果存在:读取 contracts/ 获取 API 规范与测试要求
- 如果存在:读取 research.md 获取技术决策与约束
- 如果存在:读取 quickstart.md 获取集成场景
-
项目初始化校验:
- 必须:基于实际项目情况创建/校验 ignore 文件:
检测与创建逻辑:
-
通过下列命令是否成功来判断仓库是否是 git 仓库(如果是,则创建/校验 .gitignore):
git rev-parse --git-dir 2>/dev/null 检查是否存在 Dockerfile* 或 plan.md 中提到 Docker → 创建/校验 .dockerignore
检查是否存在 .eslintrc* → 创建/校验 .eslintignore
检查是否存在 eslint.config.* → 确保配置中的
ignores覆盖所需模式检查是否存在 .prettierrc* → 创建/校验 .prettierignore
检查是否存在 .npmrc 或 package.json →(若要发布)创建/校验 .npmignore
检查是否存在 terraform 文件(*.tf)→ 创建/校验 .terraformignore
检查是否需要 .helmignore(存在 helm charts)→ 创建/校验 .helmignore
如果 ignore 文件已存在:校验其包含关键模式,只追加缺失且重要的模式 如果 ignore 文件不存在:按检测到的技术栈创建包含完整模式集合的文件
按技术栈的常见模式(来自 plan.md 的技术栈):
-
Node.js/JavaScript/TypeScript:
node_modules/,dist/,build/,*.log,.env* -
Python:
__pycache__/,*.pyc,.venv/,venv/,dist/,*.egg-info/ -
Java:
target/,*.class,*.jar,.gradle/,build/ -
C#/.NET:
bin/,obj/,*.user,*.suo,packages/ -
Go:
*.exe,*.test,vendor/,*.out -
Ruby:
.bundle/,log/,tmp/,*.gem,vendor/bundle/ -
PHP:
vendor/,*.log,*.cache,*.env -
Rust:
target/,debug/,release/,*.rs.bk,*.rlib,*.prof*,.idea/,*.log,.env* -
Kotlin:
build/,out/,.gradle/,.idea/,*.class,*.jar,*.iml,*.log,.env* -
C++:
build/,bin/,obj/,out/,*.o,*.so,*.a,*.exe,*.dll,.idea/,*.log,.env* -
C:
build/,bin/,obj/,out/,*.o,*.a,*.so,*.exe,Makefile,config.log,.idea/,*.log,.env* -
Swift:
.build/,DerivedData/,*.swiftpm/,Packages/ -
R:
.Rproj.user/,.Rhistory,.RData,.Ruserdata,*.Rproj,packrat/,renv/ -
Universal:
.DS_Store,Thumbs.db,*.tmp,*.swp,.vscode/,.idea/
工具特定模式:
-
Docker:
node_modules/,.git/,Dockerfile*,.dockerignore,*.log*,.env*,coverage/ -
ESLint:
node_modules/,dist/,build/,coverage/,*.min.js -
Prettier:
node_modules/,dist/,build/,coverage/,package-lock.json,yarn.lock,pnpm-lock.yaml -
Terraform:
.terraform/,*.tfstate*,*.tfvars,.terraform.lock.hcl -
Kubernetes/k8s:
*.secret.yaml,secrets/,.kube/,kubeconfig*,*.key,*.crt
-
解析 tasks.md 结构并提取:
- 任务阶段:初始化、测试、核心、集成、打磨
- 任务依赖:串行与并行的执行规则
- 任务细节:ID、描述、文件路径、并行标记 [P]
- 执行流程:顺序与依赖要求
-
按任务计划执行实现:
- 按阶段执行:完成当前阶段后再进入下一阶段
- 遵守依赖:串行任务按顺序执行;并行任务 [P] 可同时执行
- 遵循 TDD:若存在测试任务,先执行测试任务再执行对应实现任务
- 按文件协调:影响同一文件的任务必须串行执行
- 阶段校验点:进入下一阶段前先校验当前阶段是否完成
-
实现执行规则:
- 先做初始化:初始化项目结构、依赖、配置
- 先写测试再写代码:如果需要为契约、实体与集成场景编写测试
- 核心开发:实现模型、服务、CLI 命令、端点
- 集成工作:数据库连接、中间件、日志、外部服务
- 打磨与校验:单元测试、性能优化、文档
-
进度跟踪与错误处理:
- 每完成一个任务都汇报进度
- 任意非并行任务失败时立即停止执行
- 并行任务 [P] 允许继续已成功任务,并汇报失败项
- 提供带上下文的清晰错误信息,便于定位
- 若实现无法继续,给出明确的下一步建议
- 重要:任务完成后,务必在 tasks 文件中用 [X] 勾掉该任务
-
完成校验:
- 确认所有必需任务都已完成
- 检查实现的功能是否与原始 spec 一致
- 校验测试通过且覆盖率满足要求
- 确认实现遵循技术计划
- 汇报最终状态并总结已完成工作
注意:本命令假设 tasks.md 中已存在完整的任务拆分。如果任务不完整或缺失,应建议先运行 /speckit.tasks 重新生成任务列表。