speckit.implement.md 7.03 KB
description: 通过处理并执行 tasks.md 中定义的所有任务,落实实现计划

用户输入

$ARGUMENTS

在继续之前,你必须先考虑用户输入(如果不为空)。

概述

  1. 在仓库根目录运行一次 .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")。

  2. 检查检查清单状态(如果存在 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 步
  1. 加载并分析实现上下文:

    • 必须:读取 tasks.md 获取完整任务列表与执行计划
    • 必须:读取 plan.md 获取技术栈、架构与文件结构
    • 如果存在:读取 data-model.md 获取实体与关系
    • 如果存在:读取 contracts/ 获取 API 规范与测试要求
    • 如果存在:读取 research.md 获取技术决策与约束
    • 如果存在:读取 quickstart.md 获取集成场景
  2. 项目初始化校验

    • 必须:基于实际项目情况创建/校验 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
  1. 解析 tasks.md 结构并提取:

    • 任务阶段:初始化、测试、核心、集成、打磨
    • 任务依赖:串行与并行的执行规则
    • 任务细节:ID、描述、文件路径、并行标记 [P]
    • 执行流程:顺序与依赖要求
  2. 按任务计划执行实现:

    • 按阶段执行:完成当前阶段后再进入下一阶段
    • 遵守依赖:串行任务按顺序执行;并行任务 [P] 可同时执行
    • 遵循 TDD:若存在测试任务,先执行测试任务再执行对应实现任务
    • 按文件协调:影响同一文件的任务必须串行执行
    • 阶段校验点:进入下一阶段前先校验当前阶段是否完成
  3. 实现执行规则:

    • 先做初始化:初始化项目结构、依赖、配置
    • 先写测试再写代码:如果需要为契约、实体与集成场景编写测试
    • 核心开发:实现模型、服务、CLI 命令、端点
    • 集成工作:数据库连接、中间件、日志、外部服务
    • 打磨与校验:单元测试、性能优化、文档
  4. 进度跟踪与错误处理:

    • 每完成一个任务都汇报进度
    • 任意非并行任务失败时立即停止执行
    • 并行任务 [P] 允许继续已成功任务,并汇报失败项
    • 提供带上下文的清晰错误信息,便于定位
    • 若实现无法继续,给出明确的下一步建议
    • 重要:任务完成后,务必在 tasks 文件中用 [X] 勾掉该任务
  5. 完成校验:

    • 确认所有必需任务都已完成
    • 检查实现的功能是否与原始 spec 一致
    • 校验测试通过且覆盖率满足要求
    • 确认实现遵循技术计划
    • 汇报最终状态并总结已完成工作

注意:本命令假设 tasks.md 中已存在完整的任务拆分。如果任务不完整或缺失,应建议先运行 /speckit.tasks 重新生成任务列表。