{"id":"0c5ca7c3-bc80-4d29-bf3b-4a4649173a66","shortId":"8Qsv6E","kind":"skill","title":"forge-eng","tagline":"工程文档管理与代码实现。管理项目的 ENGINEERING.md 和 ENGINEERING-CHANGELOG，涵盖前端和后端。支持完整模式（文档+审查+实现）和轻量模式（跳过文档直接实现）。集成 Worktree 会话级隔离、分级 TDD（严格/轻量/验证驱动）、Verification Gate（证据先于断言）。基于 PRD 和 DESIGN.md 产出架构设计、数据流、API 设计、实现清单、测试矩阵，与用户确认关键技术决策后将实现拆分为原子任务、Wave 并行执行、每个任务独立 git commit。触发方式：用户说\"工程\"、\"实现\"、\"for","description":"# /forge-eng：工程文档管理与代码实现 v2\n\n管理项目的 ENGINEERING.md（前后端合并），基于 PRD + DESIGN.md 产出工程方案并实现。\n集成 Worktree 隔离、分级 TDD、Verification Gate。\n\n## 流程总览\n\n```\n完整模式：\n  第0步 定位文档 → 第0.5步 模式选择 → 第1步 范围挑战 → 第2步 理解现状\n  → 第3步 四章审查 → 第4步 方案设计 → 第5步 更新文档\n  → 第5.5步 创建Worktree → 第5.6步 Dev Server 端口契约 → 第5.7步 测试框架检测\n  → 第6步 任务拆分(含TDD级别) → 第7步 Wave执行(TDD+Verification)\n  → 第8步 必需产出 → 第9步 确认总结 → 第10步 分支收尾\n\n轻量模式：\n  第0步 定位文档 → 第0.5步 模式选择\n  → 第5.5步 创建Worktree → 第5.6步 Dev Server 端口契约 → 第5.7步 测试框架检测\n  → 第6步 任务拆分(含TDD级别) → 第7步 Wave执行(TDD+Verification)\n  → 第9步 确认总结 → 第10步 分支收尾\n```\n\n全程中文。关键技术决策需用户确认后再实现。\n\n---\n\n## AskUserQuestion 格式规范\n\n**每次提问必须遵循以下结构：**\n\n1. **重新聚焦**：说明当前项目、分支和正在设计/实现的内容。（1-2句）\n2. **通俗解释**：用高中生能听懂的语言解释问题。说清楚\"做什么\"，不是\"叫什么\"。\n3. **给出建议**：`推荐：选择[X]，因为[一句话原因]`。标注每个选项的`完整度：X/10`。\n4. **列出选项**：`A) ... B) ... C) ...`——涉及工作量时同时注明：`（人工：~X / AI协助：~Y）`\n\n---\n\n## 完整性原则——把湖烧干\n\n有 AI 辅助时，\"做完整\"的边际成本接近于零：\n\n| 任务类型 | 人工团队 | AI辅助 | 压缩比 |\n|---------|---------|-------|-------|\n| 样板/脚手架 | 2天 | 15分钟 | ~100x |\n| 写测试 | 1天 | 15分钟 | ~50x |\n| 功能实现 | 1周 | 30分钟 | ~30x |\n| Bug修复+回归测试 | 4小时 | 15分钟 | ~20x |\n| 架构/设计 | 2天 | 4小时 | ~5x |\n| 调研/探索 | 1天 | 3小时 | ~3x |\n\n当完整方案只比捷径多几分钟时，永远推荐完整方案。\n\n---\n\n## 工程思维框架\n\n1. **爆炸半径直觉** — 每个决定都评估：\"最坏情况是什么？影响多少系统和人？\"\n2. **无聊优先** — \"每个公司大约只有三个创新机会。\"其他一切用成熟技术。\n3. **增量而非革命** — 绞杀者模式而非大爆炸。灰度发布而非全量切换。\n4. **系统而非英雄** — 为凌晨3点疲惫的工程师设计。\n5. **可逆性偏好** — 功能开关、A/B测试、灰度发布。让犯错的代价变低。\n6. **DX就是产品质量** — 慢 CI、糟糕的本地开发环境 → 更差的软件。\n7. **先让修改变简单，再做简单的修改** — 先重构，再实现。永远不要同时改结构和行为。\n\n---\n\n## 三条铁律（来自 Superpowers，不可违反）\n\n1. **不先验证就不准声称完成** — 必须运行验证命令、读取完整输出、确认 exit code 后才能 commit 或声称成功。禁用\"should work\"、\"probably fixed\"等措辞。详见 [references/verification-checklist.md](references/verification-checklist.md)。\n2. **不先写失败测试就不准写实现**（严格 TDD 级别适用）— 写了实现再补测试？删掉实现，从测试重新开始。详见 [references/tdd-guide.md](references/tdd-guide.md)。\n3. **3 次修复失败就质疑架构** — 不要尝试第 4 次修复，停下来和用户讨论设计方案是否有根本问题。\n\n---\n\n## 第0步：定位项目文档\n\n1. 定位 PRD：搜索 `{项目目录}/docs/PRD.md`\n2. 定位 DESIGN.md：搜索 `{项目目录}/docs/DESIGN.md`\n3. 定位 RESEARCH.md：搜索 `{项目目录}/docs/*RESEARCH*`（如果 forge-dev 产出了调研报告）\n4. 定位视觉决策索引（如有）：搜索 `.do-dev/visual-decision.md`、`.deliver/visual-decision.md`、`docs/讨论/*/assets/*.meta.json`\n5. 定位 ENGINEERING.md：\n   ```\n   搜索模式：\n   - {项目目录}/docs/ENGINEERING.md\n   - {项目目录}/docs/*engineering*（不区分大小写）\n   - {项目目录}/docs/*工程*\n   - {项目目录}/**/ENGINEERING*.md\n   ```\n6. 定位 ENGINEERING CHANGELOG：模式匹配 `*engineering*changelog*`\n7. 分支判断：有 → 迭代模式；无 → 创建模式\n\n---\n\n## 第0.5步：模式选择\n\n根据项目状态自动判断，或通过 AskUserQuestion 确认：\n\n```\n检查是否有 PRD + ENGINEERING.md\n  ├── 有 → 默认完整模式\n  └── 无 → 提议选择：\n        A) 完整模式 — 创建工程文档，走完整流程（适合正式项目）\n        B) 轻量模式 — 跳过文档管理，只做：\n           Worktree 隔离 → 任务拆分 → TDD/验证驱动 → 原子提交 → 收尾\n           （适合小 demo、POC、快速实验）\n```\n\n**轻量模式保留的能力**：Worktree 隔离、任务拆分、TDD/验证驱动、原子 commit、分支收尾。\n**轻量模式跳过的内容**：ENGINEERING.md 管理、四章审查、CHANGELOG、.features/ 状态管理。\n\n**如果选择轻量模式**：跳转到第 5.5 步（创建 Worktree）。\n\n---\n\n## 第1步：范围挑战\n\n**在设计任何方案之前，先回答这些问题：**\n\n1. **哪些现有代码已经部分或完全解决了每个子问题？** 能复用还是在重建？\n2. **实现目标所需的最小变更集是什么？** 哪些工作可以推迟而不阻碍核心目标？\n3. **复杂度检查**：如果方案涉及超过 8 个文件或引入超过 2 个新类/服务，视为警告信号——同样的目标能用更少的活动部件实现吗？\n4. **TODOS 交叉检查**：读取 `TODOS.md`（如果存在）。有没有推迟项在阻塞此方案？有没有推迟项可以顺带做了？\n\n**完整度检查**：方案是在做完整版还是捷径版？用 AI 辅助，\"完整\"比人工便宜 100 倍。如果方案选择了捷径而只省了几分钟，推荐做完整版。\n\n如果复杂度检查触发（8+ 文件或 2+ 新类/服务）：通过 AskUserQuestion 主动建议缩减范围。\n\n---\n\n## 第2步：理解现状（迭代模式）\n\n1. 读取 PRD 最新迭代摘要，提取工程相关变更\n2. 读取 DESIGN.md（如有），提取设计约束\n3. 读取 RESEARCH.md（如有），提取技术调研结论\n4. 读取视觉决策索引（如有），明确哪些 Image 2 / Figma 图只是观感参考，哪些真实截图是验收证据\n5. 读取完整 ENGINEERING.md\n6. 读取 ENGINEERING CHANGELOG（如有），做热点分析\n7. 用 Agent(Explore) 扫描项目源码，理解当前架构\n8. 向用户总结当前工程状态，确认理解是否正确\n\n---\n\n## 第2步（替代）：从零创建 ENGINEERING.md\n\n1. **深度阅读项目代码**：\n   - Agent(Explore) 扫描项目结构\n   - 读取核心源码、配置文件、数据库 schema\n   - 分析前后端代码组织方式\n   - 查看 git log 了解架构演进\n\n2. **与用户多轮确认**：\n   - 第1轮：架构概览 — 展示 ASCII 架构图，确认是否准确\n   - 第2轮：技术栈确认 — 列出检测到的框架/库/工具\n   - 第3轮：模块划分 — 前端模块 + 后端模块的边界确认\n   - 第4轮：数据流 — 关键数据流的流转路径\n   - 第5轮：已知技术债 — 当前代码中的问题\n\n3. **产出 ENGINEERING.md 初稿**（参考 [references/engineering-template.md](references/engineering-template.md)）\n4. **新建 ENGINEERING CHANGELOG**\n5. 逐节确认后写入文件\n\n---\n\n## 第3步：四章工程审查\n\n章节顺序：架构 → 代码质量 → 测试 → 性能。\n每个章节发现问题后，逐一通过 AskUserQuestion 确认后再进入下一章节。\n\n### 第1章：架构审查\n\n评估：\n- 整体系统设计和组件边界\n- 依赖关系图和耦合问题\n- 数据流模式和潜在瓶颈\n- 扩展性和单点故障\n- 安全架构（认证、数据访问、API 边界）\n- 关键流程是否值得用 ASCII 图说明\n- 对每个新代码路径，描述一个真实的生产故障场景\n\n**停止**。每发现一个问题，单独调用 AskUserQuestion。每次一个问题。\n\n### 第2章：代码质量审查\n\n评估：\n- 代码组织和模块结构\n- DRY 违反——要有侵略性\n- 错误处理模式和缺失的边界情况\n- 技术债热点\n- 被修改文件中已有的 ASCII 图——改动后还准确吗？\n\n**停止**。每个问题单独 AskUserQuestion。\n\n### 第3章：测试审查\n\n画出所有新 UX、新数据流、新代码路径、新的分支逻辑的图。对每一项，确认是否有对应测试。\n\n**测试矩阵产出**：审查完成后，把测试矩阵写入工程文档，供 `/forge-qa` 使用。\n\n**停止**。每个问题单独 AskUserQuestion。\n\n### 第4章：性能审查\n\n评估：\n- N+1 查询和数据库访问模式\n- 内存使用问题\n- 缓存机会\n- 高时间复杂度代码路径\n\n**停止**。每个问题单独 AskUserQuestion。\n\n---\n\n## 第4步：工程方案设计\n\n### 需要用户确认的关键技术决策\n\n对每个变更点，通过 AskUserQuestion 确认：\n\n1. **架构设计**：用 ASCII 图展示模块关系和数据流\n2. **技术选型**：涉及新依赖或新模式时，说明选型理由\n3. **实现清单**：按依赖顺序列出需要创建/修改的文件及其职责\n4. **API 设计**：新增/修改的 API 端点定义\n5. **测试矩阵**：需要覆盖的测试场景\n\n### 不需要用户确认的内容\n\n- 具体代码实现细节\n- 变量命名、函数签名\n- 错误处理的具体策略（遵循项目已有模式）\n\n---\n\n## 第5步：更新工程文档\n\n### A. 更新 ENGINEERING CHANGELOG\n\n追加本次变更记录：时间、背景、技术方案、关键决策。\n\n### B. 更新 ENGINEERING.md\n\n1. 更新版本号、日期\n2. 更新迭代摘要区（保留所有版本）\n3. 前端章节：更新组件/页面/交互实现说明\n4. 后端章节：更新 API/数据模型/业务逻辑说明\n5. 更新架构图（如有变更）\n6. 更新实现清单和测试矩阵\n7. 自洽性检查\n\n---\n\n## 第5.5步：创建 Worktree（会话级隔离）\n\n**核心原则**：不在主工作目录写代码，创建隔离副本。每个 forge-eng 会话一个 worktree，多会话互不冲突。\n\n详细命令参考见 [references/worktree-guide.md](references/worktree-guide.md)。\n\n### 流程\n\n```bash\n# 1. 检查/创建 worktree 目录\nls -d .worktrees 2>/dev/null || mkdir -p .worktrees\n\n# 2. 安全检查：确认 .gitignore\ngit check-ignore -q .worktrees 2>/dev/null || {\n  echo \".worktrees/\" >> .gitignore\n  git add .gitignore\n  git commit -m \"chore: add .worktrees to gitignore\"\n}\n\n# 3. 创建 worktree + 分支\nBRANCH=\"eng/{feature-slug}-$(date +%Y-%m-%d)\"\nWORKTREE=\".worktrees/{feature-slug}\"\ngit worktree add \"$WORKTREE\" -b \"$BRANCH\"\ncd \"$WORKTREE\"\n\n# 4. 安装依赖（自动检测项目类型）\n[ -f package.json ] && npm install\n[ -f requirements.txt ] && pip install -r requirements.txt\n[ -f go.mod ] && go mod download\n\n# 5. 基线测试\nnpm test 2>/dev/null || python -m pytest 2>/dev/null || echo \"无测试框架\"\n```\n\n### 基线测试结果处理\n\n| 结果 | 操作 |\n|------|------|\n| 测试通过 | 报告就绪，继续 |\n| 测试失败 | 报告失败数量，询问是否继续 |\n| 无测试框架 | 跳过，进入第 5.7 步 |\n\n### 报告格式\n\n```\nWorktree 就绪：\n  路径：{full-path}\n  分支：{branch-name}\n  基线测试：{通过 N 个 / 无测试框架}\n  Backend URL：{如已启动则填写；未启动则写 未启动}\n  Frontend URL：{如已启动则填写；未启动则写 未启动}\n  APP_URL：{供浏览器/QA 使用的 URL；来自 dev:status，不得猜}\n  准备开始实现 {feature-name}\n```\n\n**后续所有 Wave 执行都在 worktree 目录中进行。**\n\n---\n\n## 第5.6步：Dev Server 端口契约（如项目需要运行应用）\n\n**核心原则**：worktree 可以并行，但 dev server 必须由项目统一入口分配和复用端口。不要在 worktree 里裸跑 `uvicorn`、`vite`、`next dev` 或临时 `npm run dev -- --port ...`，除非项目没有统一入口。\n\n### 统一入口优先级\n\n```bash\n# 必须在 worktree 根目录执行\ncd \"$WORKTREE\"\n\nif npm run 2>/dev/null | grep -q \"dev:status\"; then\n  npm run dev:status\n  npm run dev\n  npm run dev:status | tee /tmp/forge-dev-status.txt\nelif [ -x scripts/dev-stack.sh ]; then\n  bash scripts/dev-stack.sh status\n  bash scripts/dev-stack.sh start\n  bash scripts/dev-stack.sh status | tee /tmp/forge-dev-status.txt\nelse\n  echo \"未发现统一 dev server 入口；如必须启动应用，使用显式非默认端口并记录 PID/cwd/URL\"\nfi\n```\n\n### 硬性要求\n\n1. **有统一入口就必须用统一入口**：`npm run dev:status` / `npm run dev` / `scripts/dev-stack.sh` 优先于任何手写启动命令。\n2. **APP_URL 必须来自状态输出**：浏览器测试、curl、forge-qa 的 `app_url` 都从 `dev:status` / `dev-stack status` 输出读取，不得凭常见端口猜测。\n3. **启动前先看状态**：如果当前 worktree 已有对应服务，复用；不要重复启动同一套前后端。\n4. **进程身份必须核对**：状态输出或 `lsof -p $PID | grep cwd` 必须证明监听进程 cwd 属于当前 worktree。\n5. **主分支端口固定，worktree 端口自动隔离**：如果项目 dev-stack 已规定 main 使用固定端口，worktree 不得抢这些端口。\n6. **收尾前停本 worktree 服务**：删除或合并 worktree 前运行 `npm run dev:stop` 或 `bash scripts/dev-stack.sh stop`；没有统一入口时，按记录的 PID 精确停止当前 worktree 的进程。\n\n---\n\n## 第5.7步：测试框架检测与引导\n\n**首次检测到项目无测试框架时触发。**\n\n```bash\n# 检测已有测试框架\nls jest.config.* vitest.config.* .rspec pytest.ini 2>/dev/null\nls -d test/ tests/ spec/ __tests__/ e2e/ 2>/dev/null\n```\n\n**如果无测试框架**，通过 AskUserQuestion 提议安装：\n\n```\n检测到项目无测试框架。推荐安装以启用 TDD：\n\nA) 安装 vitest + @testing-library（推荐，Node.js/Next.js 项目）\n   npm i -D vitest @testing-library/react @testing-library/jest-dom\nB) 安装 pytest + pytest-cov（Python 项目）\n   pip install pytest pytest-cov\nC) 跳过 — 使用验证驱动模式（每个任务定义可执行验证命令）\nD) 跳过 — 不做任何验证（不推荐）\n```\n\n**如果用户选择安装**：\n1. 安装依赖包\n2. 创建配置文件（vitest.config.ts / pytest.ini）\n3. 写一个示例测试，验证框架正常工作\n4. 运行测试 → 确认通过\n5. 提交：`chore: add test framework (vitest/pytest)`\n\n**如果已有测试框架**：读取 2-3 个已有测试文件，学习命名惯例、导入风格、断言模式，供后续 TDD 使用。\n\n详细框架安装指引见 [references/tdd-guide.md](references/tdd-guide.md)。\n\n---\n\n## 第6步：任务拆分与 Wave 规划\n\n### 任务拆分原则\n\n1. **垂直切片优先** — 每个任务端到端完成一个功能\n2. **每个任务足够小** — 通常 1-3 个文件，最多 5 个\n3. **每个任务可独立验证** — 有明确的验证方式\n4. **每个任务有 TDD 级别标注** — 根据文件类型自动判断\n\n### TDD 级别自动判断\n\n```\n项目有测试框架？\n├── 否（且用户拒绝安装）→ 全部任务使用\"验证驱动\"\n└── 是 → 按任务文件类型判断：\n      ├── *.py / *.go / *.rs / *api* / *service* / *model*  → 严格 TDD\n      ├── *.tsx / *.vue / *.jsx（前端组件）                   → 轻量 TDD\n      ├── *.css / *.scss / *.config.* / *.md / *.json        → 跳过\n      └── Bug 修复（任何类型）                                → 严格 TDD\n```\n\n### 任务定义格式\n\n```markdown\n### Task-{N}: {任务名}\n\n**TDD 级别**: 严格 / 轻量 / 验证驱动 / 跳过\n**类型**: auto | manual\n**依赖**: [Task-X, Task-Y]\n**文件**:\n- {file_path_1} — {做什么改动}\n- {file_path_2} — {做什么改动}\n\n**实现要求**:\n{具体实现指令}\n\n**验证命令**:\n{可执行的验证命令：测试命令 / curl / 浏览器截图 / 脚本}\n\n**完成标准**:\n{什么状态算\"做完了\"——必须可验证}\n```\n\n### Wave 分组\n\n```\n┌─────────────────────────────────────────────────────────┐\n│  WAVE 1 (并行)              WAVE 2 (并行)      WAVE 3    │\n│  ┌─────────┐ ┌─────────┐   ┌─────────┐        ┌──────┐ │\n│  │ Task-01 │ │ Task-02 │ → │ Task-03 │      → │T-05  │ │\n│  │ 严格TDD │ │ 跳过TDD │   │ 轻量TDD │        │验证  │ │\n│  └─────────┘ └─────────┘   └─────────┘        │驱动  │ │\n│                                                 └──────┘ │\n└─────────────────────────────────────────────────────────┘\n```\n\n**分组规则**：\n- 无依赖或依赖已在前序 wave 完成 → 归入当前 wave\n- 同一 wave 内任务互相不依赖 → 可并行\n- 修改同一文件 → 不同 wave 顺序执行，或合并为一个任务\n\n### 用户确认\n\n通过 AskUserQuestion 展示任务拆分和 wave 规划，包括每个任务的 TDD 级别。\n\n---\n\n## 第7步：Wave 并行执行（TDD + Verification Gate）\n\n### 执行方式\n\n**同一 wave 内的任务使用 Agent 工具并行执行**，每个任务在独立上下文中完成。所有 Agent 的工作目录为 worktree 路径。\n\n### 任务执行模板（Agent Prompt）\n\n每个 Agent 收到的完整指令：\n\n```\n你需要在项目 {worktree_path} 中完成以下任务：\n\n任务：{task.name}\nTDD 级别：{task.tdd_level}\n文件：{task.files}\n实现要求：{task.instructions}\n验证命令：{task.verify_command}\n完成标准：{task.done_criteria}\n\n工程上下文：\n- ENGINEERING.md: {eng_doc_path}（如有）\n- DESIGN.md: {design_doc_path}（如有）\n- 视觉决策索引: {visual_decision_path or \"无\"}（Image 2 只作观感参考，最终以 DESIGN.md、Feature Spec、真实截图和测试为准）\n\n=== 实现流程（根据 TDD 级别） ===\n\n[严格 TDD]\n1. 读取涉及的文件，理解上下文\n2. 写失败测试（测试文件路径随代码文件就近放置）\n3. 运行测试 → 必须看到测试失败（失败原因是功能缺失，不是语法错误）\n4. 写最小实现让测试通过\n5. 运行测试 → 确认通过\n6. 重构（保持测试绿色）\n7. Verification Gate → commit\n\n[轻量 TDD]\n1. 读取涉及的文件\n2. 实现功能\n3. 写关键交互/边界测试（点击、提交、状态切换、空值、超长）\n4. 运行测试 → 确认通过\n5. Verification Gate → commit\n\n[验证驱动]\n1. 读取涉及的文件\n2. 实现功能\n3. 执行验证命令：{task.verify_command}\n4. 读取完整输出，确认结果正确\n5. Verification Gate → commit\n\n[跳过 TDD]\n1. 读取涉及的文件\n2. 实现\n3. Verification Gate → commit\n\n=== Verification Gate（所有级别通用） ===\n\ncommit 前必须执行：\n1. 运行验证命令（不截断输出）\n2. 读取完整输出\n3. 检查 exit code\n   - = 0 且输出正确 → 允许 commit\n   - ≠ 0 → 诊断修复 → 重新验证（最多 3 次）\n   - 3 次失败 → 停止，报告失败原因\n\n禁止使用：\"should work\" / \"probably fixed\" / \"seems to pass\"\n必须使用：\"验证通过：{命令} 输出 {结果}，exit code 0\"\n\n=== commit 规则 ===\n只修改任务列出的文件（+ 测试文件）\n遵循项目已有的代码风格\n```\n\n### 原子 Git 提交\n\n**每个任务完成验证后立刻创建独立的 git commit。** 不可跳过。\n\n#### 提交格式\n\n```bash\ngit add {task_files}\ngit commit -m \"$(cat <<'EOF'\n{type}({scope}): {task_name}\n\n{一句话描述做了什么}\n\nTask-{N} of Wave-{M}\n验证：{验证命令} → {结果摘要}\nEOF\n)\"\n```\n\n**type 规范**：feat / fix / refactor / docs / test / chore\n**scope**：模块名或文件名简写\n\n### Wave 间验证\n\n每个 wave 完成后，进入下一 wave 前：\n\n1. **运行全量验证** — 执行项目测试套件（如果有），确认无回归\n2. **检查冲突** — 确认并行任务没有产生代码冲突\n3. **状态更新** — 更新 `.features/{feature-id}/status.md`（完整模式下）\n\n如果验证失败：\n- 定位失败的任务\n- 启动新 Agent 诊断和修复\n- 修复后创建新 commit：`fix({scope}): resolve {issue} in Task-{N}`\n- **最多 3 次修复尝试**。3 次失败 → 暂停，报告给用户，质疑设计方案\n- 修复成功后继续下一 wave\n\n---\n\n## 第8步：必需产出\n\n### \"未纳入范围\"清单\n\n每项审查中考虑但明确推迟的工作，附一句话原因。\n\n### \"已存在的内容\"清单\n\n已有的代码/流程，以及方案是复用了它们还是重复建设。\n\n### 故障模式清单\n\n对每个新代码路径，列出一种现实中可能的失败方式，并说明：\n1. 有没有测试覆盖这种失败\n2. 有没有错误处理\n3. 用户是否会看到清晰的错误，还是静默失败\n\n**无测试 + 无错误处理 + 静默失败** = **严重缺口**，需要标红。\n\n### TODOS 更新\n\n每个潜在 TODO 作为单独 AskUserQuestion 提问。绝不批量——每次一个。\n\n---\n\n## 第9步：确认与总结\n\n```\n+======================================================+\n|                  工程交付完成                            |\n+======================================================+\n| 项目：[项目名]                                          |\n| 版本：vX.Y                                             |\n| 模式：完整 / 轻量                                       |\n| Worktree：[路径] / 分支：[分支名]                        |\n+------------------------------------------------------+\n| 第0步 范围挑战：[接受/缩减]（完整模式）                    |\n| 第1-4章 审查：___ 个问题（完整模式）                      |\n| 测试框架：[已有/新安装/验证驱动]                          |\n+------------------------------------------------------+\n| 任务拆分：共 ___ 个任务，分 ___ 个 wave                  |\n|   严格 TDD: ___ 个 | 轻量 TDD: ___ 个                  |\n|   验证驱动: ___ 个 | 跳过: ___ 个                        |\n| Wave 执行：                                             |\n|   Wave 1: Task-01 ✅, Task-02 ✅                        |\n|   Wave 2: Task-03 ✅, Task-04 ✅                        |\n| Git 提交：___ 个原子提交                                 |\n| Verification Gate：___ 次通过 / ___ 次重试               |\n+------------------------------------------------------+\n| 代码变更：X 个文件（新增 Y / 修改 Z）                      |\n| 测试：[通过 X / 失败 Y / 新增 Z]                          |\n| 文件：                                                    |\n|   ENGINEERING.md          — [已更新/已创建/跳过]           |\n|   ENGINEERING-CHANGELOG   — [已追加/已创建/跳过]           |\n+======================================================+\n```\n\n### 未解决决策\n\n如果用户未回答某个 AskUserQuestion，列出\"未解决的决策——可能在后续咬你一口\"。\n\n---\n\n## 第10步：分支收尾\n\n**所有任务完成且验证通过后，处理 worktree 和分支。**\n\n通过 AskUserQuestion 展示选项：\n\n```\n实现完成。如何处理分支？\n\n1. 合并回主分支 — git merge 到 main，删除 worktree\n2. 推送并创建 PR — git push + gh pr create，删除 worktree\n3. 保留分支 — 不清理，稍后处理\n4. 丢弃 — 删除分支和 worktree（需二次确认）\n```\n\n### 选项 1：合并回主分支\n\n```bash\ncd \"$(git worktree list | head -1 | awk '{print $1}')\"  # 回到主目录\ngit checkout main && git pull\ngit merge {branch-name}\n# 运行测试验证合并结果\nnpm test 2>/dev/null || python -m pytest 2>/dev/null\n# 通过后清理\ngit branch -d {branch-name}\ngit worktree remove {worktree-path}\n```\n\n### 选项 2：推送并创建 PR\n\n```bash\ngit push -u origin {branch-name}\ngh pr create --title \"eng: {feature-name}\" --body \"$(cat <<'EOF'\n## Summary\n- {变更摘要}\n\n## Test Plan\n- [ ] {验证步骤}\nEOF\n)\"\ngit worktree remove {worktree-path}\n```\n\n### 选项 3：保留\n\n不做任何清理。报告路径和分支名。\n\n### 选项 4：丢弃\n\n**必须二次确认**，展示将删除的分支和提交列表，用户确认后：\n```bash\ncd \"$(git worktree list | head -1 | awk '{print $1}')\"\ngit worktree remove {worktree-path} --force\ngit branch -D {branch-name}\n```\n\n---\n\n## Feature 状态管理（.features/ 架构，仅完整模式）\n\n### 核心原则\n\n**领域文档（ENGINEERING.md）只存内容，不存运行状态。** 运行状态写入 `.features/{feature-id}/status.md`。\n\n### 状态标记协议\n\n| 标记 | 含义 |\n|------|------|\n| `[⏳ 待处理]` | 已规划，未开始 |\n| `[🔄 进行中]` | 当前正在执行 |\n| `[✅ 已完成]` | 执行完成 |\n| `[❌ 失败]` | 执行失败，需干预 |\n| `[⏸️ 暂停]` | 等待用户确认或外部依赖 |\n\n### 操作规则\n\n1. **启动时（第0步）**：读取 status.md，确认前序依赖已完成，将 eng 行更新为 `[🔄 进行中]`\n2. **第6步任务拆分完成后**：在 status.md 中追加 Engineering Tasks 表\n3. **每个任务开始/完成/失败时**：更新任务行状态\n4. **Wave 间验证**：当前 Wave 所有任务为 `[✅ 已完成]` 后才启动下一 Wave\n5. **全部完成后**：eng 行状态改为 `[✅ 已完成]`\n\n### 跨 Agent 协作\n\n- forge-dev 调度器通过 status.md 感知工程进度\n- forge-qa 启动前确认 eng 行为 `[✅ 已完成]`\n- 多个会话可以同时在不同 feature 上执行 forge-eng（各自有独立 worktree）\n\n---\n\n## 格式规则\n\n- 问题编号（1, 2, 3...），选项字母（A, B, C...）\n- 每个选项一句话，5 秒能做决定\n- 每个章节结束后暂停，等用户反馈\n\n---\n\n## 资源\n\n- **工程文档模板**：[references/engineering-template.md](references/engineering-template.md)\n- **TDD 指南**：[references/tdd-guide.md](references/tdd-guide.md) — 红绿重构、分级 TDD、rationalization 对照表、测试框架安装\n- **Worktree 指南**：[references/worktree-guide.md](references/worktree-guide.md) — 创建/清理命令、安全检查、分支收尾\n- **Verification 检查清单**：[references/verification-checklist.md](references/verification-checklist.md) — 验证门控流程、禁用措辞、失败处理","tags":["forge","eng","skills","yike-gunshi","agent-skills","ai-development","claude-code","skill-md","skillsmp"],"capabilities":["skill","source-yike-gunshi","skill-forge-eng","topic-agent-skills","topic-ai-development","topic-claude-code","topic-forge","topic-skill-md","topic-skillsmp"],"categories":["forge-skills"],"synonyms":[],"warnings":[],"endpointUrl":"https://skills.sh/yike-gunshi/forge-skills/forge-eng","protocol":"skill","transport":"skills-sh","auth":{"type":"none","details":{"cli":"npx skills add yike-gunshi/forge-skills","source_repo":"https://github.com/yike-gunshi/forge-skills","install_from":"skills.sh"}},"qualityScore":"0.455","qualityRationale":"deterministic score 0.46 from registry signals: · indexed on github topic:agent-skills · 11 github stars · SKILL.md body (15,647 chars)","verified":false,"liveness":"unknown","lastLivenessCheck":null,"agentReviews":{"count":0,"score_avg":null,"cost_usd_avg":null,"success_rate":null,"latency_p50_ms":null,"narrative_summary":null,"summary_updated_at":null},"enrichmentModel":"deterministic:skill-github:v1","enrichmentVersion":1,"enrichedAt":"2026-04-25T19:02:44.818Z","embedding":null,"createdAt":"2026-04-24T07:03:38.427Z","updatedAt":"2026-04-25T19:02:44.818Z","lastSeenAt":"2026-04-25T19:02:44.818Z","tsv":"'+1':636 '-01':1280,1687 '-02':1282,1689 '-03':1284,1693 '-04':1695 '-05':1286 '-1':1781,1871 '-2':147 '-3':1157,1180 '/assets':331 '/dev/null':747,762,826,831,930,1072,1081,1800,1805 '/docs':313,340,344 '/docs/design.md':307 '/docs/engineering.md':338 '/docs/prd.md':301 '/engineering':347 '/forge-eng':50 '/forge-qa':627 '/jest-dom':1111 '/next.js':1098 '/qa':877 '/react':1107 '/status.md':1575,1903 '/tmp/forge-dev-status.txt':948,963 '/visual-decision.md':327 '0':1475,1479,1504 '1':141,146,218,257,296,422,469,515,651,694,738,975,1135,1173,1179,1251,1272,1391,1416,1436,1453,1466,1560,1616,1685,1745,1773,1784,1874,1920,1983 '100':453 '100x':191 '15分钟':190,194,203 '1周':197 '1天':193,212 '2':149,223,276,302,425,433,460,474,489,529,656,697,746,751,761,825,830,929,986,1071,1080,1137,1156,1176,1255,1275,1378,1394,1418,1438,1455,1469,1565,1618,1691,1753,1799,1804,1820,1930,1984 '20x':204 '2天':189,207 '3':156,227,287,288,308,428,479,552,660,700,777,1007,1141,1185,1278,1397,1420,1440,1457,1471,1483,1485,1568,1592,1594,1620,1763,1855,1938,1985 '30x':199 '30分钟':198 '3x':214 '3小时':213 '4':166,231,291,320,438,484,559,664,705,803,1014,1144,1188,1402,1428,1444,1767,1860,1943 '4小时':202,208 '4章':1658 '5':234,333,493,563,671,711,821,1026,1147,1183,1404,1431,1447,1952,1991 '5.5':414 '5.7':846 '50x':195 '5x':209 '6':241,349,496,714,1039,1407 '7':247,356,502,716,1410 '8':431,458,508 'a/b':237 'add':767,773,797,1150,1520 'agent':504,517,1326,1330,1335,1338,1580,1958 'ai':179,449 'ai协助':174 'ai辅助':185 'api':35,586,665,669,708,1205 'app':874,987,996 'ascii':534,589,608,654 'askuserquest':138,367,464,574,596,613,631,643,649,1084,1309,1633,1730,1741 'auto':1239 'awk':1782,1872 'b':169,381,691,799,1112,1988 'backend':864 'bash':737,920,953,956,959,1051,1064,1518,1775,1823,1865 'bodi':1839 'branch':781,800,857,1794,1808,1811,1829,1883,1886 'branch-nam':856,1793,1810,1828,1885 'bug':1222 'bug修复':200 'c':170,1126,1989 'cat':1526,1840 'cd':801,924,1776,1866 'changelog':10,352,355,409,499,562,685,1724 'check':757 'check-ignor':756 'checkout':1787 'chore':772,1149,1549 'ci':244 'code':263,1474,1503 'command':1356,1443 'commit':44,265,403,770,1413,1434,1450,1460,1464,1478,1505,1515,1524,1583 'config':1218 'cov':1117,1125 'creat':1760,1833 'criteria':1359 'css':1216 'curl':991,1262 'cwd':1021,1023 'd':744,789,1074,1102,1130,1809,1884 'date':786 'decis':1373 'deliver/visual-decision.md':328 'demo':393 'design':1367 'design.md':32,58,304,476,1366,1381 'dev':89,119,318,326,881,895,903,912,916,933,938,942,945,967,979,983,999,1002,1032,1048,1962 'dev-stack':1001,1031 'do-dev':324 'doc':329,1363,1368,1547 'download':820 'dri':602 'dx就是产品质量':242 'e2e':1079 'echo':763,832,965 'elif':949 'els':964 'eng':3,729,782,1362,1835,1927,1954,1970,1978 'engin':9,341,351,354,498,561,684,1723,1935 'engineering-changelog':8,1722 'engineering.md':6,54,335,371,406,495,514,554,693,1361,1718,1895 'eof':1527,1541,1841,1847 'exit':262,1473,1502 'explor':505,518 'f':806,810,816 'feat':1544 'featur':410,784,793,886,1382,1571,1573,1837,1888,1890,1899,1901,1974 'feature-id':1572,1900 'feature-nam':885,1836 'feature-slug':783,792 'fi':973 'figma':490 'file':1249,1253,1522 'fix':271,1493,1545,1584 'forc':1881 'forg':2,317,728,993,1961,1967,1977 'forge-dev':316,1960 'forge-eng':1,727,1976 'forge-qa':992,1966 'framework':1152 'frontend':869 'full':853 'full-path':852 'gate':27,66,1321,1412,1433,1449,1459,1462,1700 'gh':1758,1831 'git':43,526,755,766,769,795,1511,1514,1519,1523,1696,1747,1756,1777,1786,1789,1791,1807,1813,1824,1848,1867,1875,1882 'gitignor':754,765,768,776 'go':818,1203 'go.mod':817 'grep':931,1020 'head':1780,1870 'id':1574,1902 'ignor':758 'imag':488,1377 'instal':809,813,1121 'issu':1587 'jest.config':1067 'json':1220 'jsx':1212 'level':1349 'librari':1094,1106,1110 'list':1779,1869 'log':527 'ls':743,1066,1073 'lsof':1017 'm':771,788,828,1525,1537,1802 'main':1035,1750,1788 'manual':1240 'markdown':1228 'md':348,1219 'merg':1748,1792 'meta.json':332 'mkdir':748 'mod':819 'model':1207 'n':635,861,1230,1534,1590 'name':858,887,1531,1795,1812,1830,1838,1887 'next':911 'node.js':1097 'node.js/next.js':1096 'npm':808,823,914,927,936,940,943,977,981,1046,1100,1797 'origin':1827 'p':749,1018 'package.json':807 'pass':1496 'path':854,1250,1254,1342,1364,1369,1374,1818,1853,1880 'pid':1019,1056 'pid/cwd/url':972 'pip':812,1120 'plan':1845 'poc':394 'port':917 'pr':1755,1759,1822,1832 'prd':30,57,298,370,471 'print':1783,1873 'probabl':270,1492 'prompt':1336 'pull':1790 'push':1757,1825 'py':1202 'pytest':829,1114,1116,1122,1124,1803 'pytest-cov':1115,1123 'pytest.ini':1070,1140 'python':827,1118,1801 'q':759,932 'qa':994,1968 'r':814 'ration':2006 'refactor':1546 'references/engineering-template.md':557,558,1997,1998 'references/tdd-guide.md':285,286,1166,1167,2001,2002 'references/verification-checklist.md':274,275,2019,2020 'references/worktree-guide.md':734,735,2011,2012 'remov':1815,1850,1877 'requirements.txt':811,815 'research':314 'research.md':310,481 'resolv':1586 'rs':1204 'rspec':1069 'run':915,928,937,941,944,978,982,1047 'schema':523 'scope':1529,1550,1585 'scripts/dev-stack.sh':951,954,957,960,984,1052 'scss':1217 'seem':1494 'server':90,120,896,904,968 'servic':1206 'skill' 'skill-forge-eng' 'slug':785,794 'source-yike-gunshi' 'spec':1077,1383 'stack':1003,1033 'start':958 'status':882,934,939,946,955,961,980,1000,1004 'status.md':1924,1933,1964 'stop':1049,1053 'summari':1842 'superpow':255 'task':1229,1243,1246,1279,1281,1283,1521,1530,1533,1589,1686,1688,1692,1694,1936 'task-i':1245 'task-x':1242 'task.done':1358 'task.files':1351 'task.instructions':1353 'task.name':1345 'task.tdd':1348 'task.verify':1355,1442 'tdd':22,64,100,130,279,388,400,1088,1163,1190,1193,1209,1215,1226,1232,1314,1319,1346,1387,1390,1415,1452,1673,1676,1999,2005 'tee':947,962 'test':824,1075,1076,1078,1093,1105,1109,1151,1548,1798,1844 'testing-librari':1092,1104,1108 'titl':1834 'todo':439,1628,1631 'todos.md':442 'topic-agent-skills' 'topic-ai-development' 'topic-claude-code' 'topic-forge' 'topic-skill-md' 'topic-skillsmp' 'tsx':1210 'type':1528,1542 'u':1826 'url':865,870,875,879,988,997 'uvicorn':909 'ux':617 'v2':52 'verif':26,65,101,131,1320,1411,1432,1448,1458,1461,1699,2017 'visual':1372 'vite':910 'vitest':1091,1103 'vitest.config':1068 'vitest.config.ts':1139 'vitest/pytest':1153 'vue':1211 'vx.y':1643 'wave':40,889,1170,1269,1271,1274,1277,1294,1297,1299,1304,1311,1317,1324,1536,1552,1555,1558,1600,1671,1682,1684,1690,1944,1947,1951 'wave执行':99,129 'work':269,1491 'worktre':19,61,385,397,417,721,731,741,745,750,760,764,774,779,790,791,796,798,802,849,891,900,907,922,925,1010,1025,1028,1037,1041,1044,1058,1332,1341,1647,1738,1752,1762,1770,1778,1814,1817,1849,1852,1868,1876,1879,1980,2009 'worktree-path':1816,1851,1878 'x':160,173,950,1244,1704,1712 'x/10':165 'y':175,787,1247,1707,1714 'z':1709,1716 '一句话原因':162 '一句话描述做了什么':1532 '三条铁律':253 '上执行':1975 '不做任何清理':1857 '不做任何验证':1132 '不先写失败测试就不准写实现':277 '不先验证就不准声称完成':258 '不区分大小写':342 '不可跳过':1516 '不可违反':256 '不同':1303 '不在主工作目录写代码':724 '不存运行状态':1897 '不得凭常见端口猜测':1006 '不得抢这些端口':1038 '不得猜':883 '不截断输出':1468 '不推荐':1133 '不是':154 '不是语法错误':1401 '不清理':1765 '不要在':906 '不要尝试第':290 '不要重复启动同一套前后端':1013 '不需要用户确认的内容':674 '与用户多轮确认':530 '与用户确认关键技术决策后将实现拆分为原子任务':39 '且用户拒绝安装':1197 '且输出正确':1476 '业务逻辑说明':710 '丢弃':1768,1861 '严格':23,278,1208,1225,1234,1389,1672 '严格tdd':1287 '严重缺口':1626 '个':862,1184,1670,1674,1677,1679,1681 '个任务':1668 '个原子提交':1698 '个已有测试文件':1158 '个文件':1181,1705 '个文件或引入超过':432 '个新类':434 '个问题':1660 '中完成以下任务':1343 '中追加':1934 '为凌晨3点疲惫的工程师设计':233 '主分支端口固定':1027 '主动建议缩减范围':465 '了解架构演进':528 '交互实现说明':704 '交叉检查':440 '产出':553 '产出了调研报告':319 '产出工程方案并实现':59 '产出架构设计':33 '人工':172 '人工团队':184 '什么状态算':1266 '仅完整模式':1892 '从测试重新开始':283 '从零创建':513 '代码变更':1703 '代码组织和模块结构':601 '代码质量':569 '代码质量审查':599 '以及方案是复用了它们还是重复建设':1611 '任何类型':1224 '任务':1344 '任务名':1231 '任务定义格式':1227 '任务执行模板':1334 '任务拆分':96,126,387,399,1666 '任务拆分与':1169 '任务拆分原则':1172 '任务类型':183 '优先于任何手写启动命令':985 '会话一个':730 '会话级隔离':20,722 '但':902 '作为单独':1632 '你需要在项目':1340 '使用':628,1164 '使用固定端口':1036 '使用显式非默认端口并记录':971 '使用的':878 '使用验证驱动模式':1128 '供':626 '供后续':1162 '供浏览器':876 '依赖':1241 '依赖关系图和耦合问题':580 '保持测试绿色':1409 '保留':1856 '保留分支':1764 '保留所有版本':699 '修复':1223 '修复后创建新':1582 '修复成功后继续下一':1599 '修改':1708 '修改同一文件':1302 '修改的':668 '修改的文件及其职责':663 '倍':454 '做什么':153 '做什么改动':1252,1256 '做完了':1267 '做完整':181 '做热点分析':501 '停下来和用户讨论设计方案是否有根本问题':293 '停止':593,611,629,641,1487 '允许':1477 '先回答这些问题':421 '先让修改变简单':248 '先重构':250 '入口':969 '全程中文':136 '全部任务使用':1198 '全部完成后':1953 '共':1667 '关键决策':690 '关键技术决策需用户确认后再实现':137 '关键数据流的流转路径':548 '关键流程是否值得用':588 '其他一切用成熟技术':226 '具体代码实现细节':675 '具体实现指令':1258 '内任务互相不依赖':1300 '内存使用问题':638 '内的任务使用':1325 '再做简单的修改':249 '再实现':251 '写一个示例测试':1142 '写了实现再补测试':281 '写关键交互':1421 '写失败测试':1395 '写最小实现让测试通过':1403 '写测试':192 '准备开始实现':884 '函数签名':677 '分':1669 '分支':780,855,1649 '分支判断':357 '分支名':1650 '分支和正在设计':144 '分支收尾':107,135,404,1735,2016 '分析前后端代码组织方式':524 '分级':21,63,2004 '分组':1270 '分组规则':1292 '列出':1731 '列出一种现实中可能的失败方式':1614 '列出检测到的框架':539 '列出选项':167 '创建':416,720,740,778,2013 '创建worktre':86,116 '创建工程文档':378 '创建模式':361 '创建配置文件':1138 '创建隔离副本':725 '初稿':555 '删掉实现':282 '删除':1751,1761 '删除分支和':1769 '删除或合并':1043 '到':1749 '前':1559 '前后端合并':55 '前必须执行':1465 '前端模块':544 '前端章节':701 '前端组件':1213 '前运行':1045 '功能实现':196 '功能开关':236 '包括每个任务的':1313 '协作':1959 '单独调用':595 '压缩比':186 '原子':402,1510 '原子提交':390 '参考':556 '变更摘要':1843 '变量命名':676 '句':148 '只作观感参考':1379 '只修改任务列出的文件':1507 '只做':384 '只存内容':1896 '叫什么':155 '可以并行':901 '可并行':1301 '可执行的验证命令':1260 '可能在后续咬你一口':1733 '可逆性偏好':235 '各自有独立':1979 '合并回主分支':1746,1774 '同一':1298,1323 '同样的目标能用更少的活动部件实现吗':437 '后才启动下一':1950 '后才能':264 '后端模块的边界确认':545 '后端章节':706 '后续所有':888 '向用户总结当前工程状态':509 '否':1196 '含tdd级别':97,127 '含义':1906 '启动前先看状态':1008 '启动前确认':1969 '启动新':1579 '启动时':1921 '命令':1499 '和':7,31 '和分支':1739 '和轻量模式':16 '哪些工作可以推迟而不阻碍核心目标':427 '哪些现有代码已经部分或完全解决了每个子问题':423 '哪些真实截图是验收证据':492 '四章审查':79,408 '四章工程审查':566 '回到主目录':1785 '回归测试':201 '因为':161 '图':609 '图只是观感参考':491 '图展示模块关系和数据流':655 '图说明':590 '在':1932 '在设计任何方案之前':420 '垂直切片优先':1174 '基于':29,56 '基线测试':822,859 '基线测试结果处理':834 '增量而非革命':228 '处理':1737 '复杂度检查':429 '复用':1012 '多个会话可以同时在不同':1973 '多会话互不冲突':732 '失败':1713,1914 '失败原因是功能缺失':1400 '失败处理':2023 '失败时':1941 '如何处理分支':1744 '如已启动则填写':866,871 '如必须启动应用':970 '如有':322,477,482,486,500,1365,1370 '如有变更':713 '如果':315 '如果复杂度检查触发':457 '如果存在':443 '如果已有测试框架':1154 '如果当前':1009 '如果方案涉及超过':430 '如果方案选择了捷径而只省了几分钟':455 '如果无测试框架':1082 '如果有':1563 '如果用户未回答某个':1729 '如果用户选择安装':1134 '如果选择轻量模式':412 '如果项目':1030 '如果验证失败':1577 '如项目需要运行应用':898 '学习命名惯例':1159 '安全架构':583 '安全检查':752,2015 '安装':1090,1113 '安装依赖':804 '安装依赖包':1136 '完成':1295,1940 '完成后':1556 '完成标准':1265,1357 '完整':451,1645 '完整度':164 '完整度检查':446 '完整性原则':176 '完整模式':68,377,1655,1661 '完整模式下':1576 '定位':297,303,309,334,350 '定位失败的任务':1578 '定位文档':70,110 '定位视觉决策索引':321 '定位项目文档':295 '实现':15,48,1456 '实现功能':1419,1439 '实现完成':1743 '实现流程':1385 '实现清单':37,661 '实现的内容':145 '实现目标所需的最小变更集是什么':426 '实现要求':1257,1352 '审查':14,1659 '审查完成后':624 '对每一项':621 '对每个变更点':647 '对每个新代码路径':591,1613 '对照表':2007 '导入风格':1160 '将':1926 '就绪':850 '展示':533 '展示任务拆分和':1310 '展示将删除的分支和提交列表':1863 '展示选项':1742 '属于当前':1024 '工具':541 '工具并行执行':1327 '工程':47,345 '工程上下文':1360 '工程交付完成':1639 '工程思维框架':217 '工程文档模板':1996 '工程文档管理与代码实现':4,51 '工程方案设计':645 '已创建':1720,1726 '已存在的内容':1607 '已完成':1912,1949,1956,1972 '已更新':1719 '已有':1663 '已有对应服务':1011 '已有的代码':1609 '已知技术债':550 '已规划':1908 '已规定':1034 '已追加':1725 '并行':1273,1276 '并行执行':41,1318 '并说明':1615 '库':540 '归入当前':1296 '当前':1946 '当前代码中的问题':551 '当前正在执行':1911 '当完整方案只比捷径多几分钟时':215 '影响多少系统和人':222 '待处理':1907 '必需产出':103,1602 '必须二次确认':1862 '必须使用':1497 '必须可验证':1268 '必须在':921 '必须来自状态输出':989 '必须由项目统一入口分配和复用端口':905 '必须看到测试失败':1399 '必须证明监听进程':1022 '必须运行验证命令':259 '快速实验':395 '性能':571 '性能审查':633 '感知工程进度':1965 '慢':243 '或':1050 '或临时':913 '或合并为一个任务':1306 '或声称成功':266 '或通过':366 '所有':1329 '所有任务为':1948 '所有任务完成且验证通过后':1736 '所有级别通用':1463 '执行':1683 '执行失败':1915 '执行完成':1913 '执行方式':1322 '执行都在':890 '执行项目测试套件':1562 '执行验证命令':1441 '扩展性和单点故障':582 '扫描项目源码':506 '扫描项目结构':519 '技术债热点':606 '技术方案':689 '技术栈确认':538 '技术选型':657 '把测试矩阵写入工程文档':625 '把湖烧干':177 '报告失败原因':1488 '报告失败数量':841 '报告就绪':838 '报告格式':848 '报告给用户':1597 '报告路径和分支名':1858 '指南':2000,2010 '按任务文件类型判断':1201 '按依赖顺序列出需要创建':662 '按记录的':1055 '探索':211 '接受':1653 '推荐':158,1095 '推荐做完整版':456 '推荐安装以启用':1087 '推送并创建':1754,1821 '描述一个真实的生产故障场景':592 '提交':1148,1424,1512,1697 '提交格式':1517 '提取工程相关变更':473 '提取技术调研结论':483 '提取设计约束':478 '提议安装':1085 '提议选择':375 '提问':1634 '搜索':299,305,311,323 '搜索模式':336 '操作':836 '操作规则':1919 '支持完整模式':12 '收到的完整指令':1339 '收尾':391 '收尾前停本':1040 '改动后还准确吗':610 '故障模式清单':1612 '数据库':522 '数据模型':709 '数据流':34,547 '数据流模式和潜在瓶颈':581 '数据访问':585 '整体系统设计和组件边界':579 '文件':1248,1350,1717 '文件或':459 '文档':13 '断言模式':1161 '新代码路径':619 '新增':667,1706,1715 '新安装':1664 '新建':560 '新数据流':618 '新的分支逻辑的图':620 '新类':461 '方案是在做完整版还是捷径版':447 '方案设计':81 '无':360,374,1376 '无依赖或依赖已在前序':1293 '无测试':1623 '无测试框架':833,843,863 '无聊优先':224 '无错误处理':1624 '日期':696 '时间':687 '明确哪些':487 '是':1200 '暂停':1596,1917 '更差的软件':246 '更新':683,692,707,1570,1629 '更新任务行状态':1942 '更新实现清单和测试矩阵':715 '更新工程文档':681 '更新文档':83 '更新架构图':712 '更新版本号':695 '更新组件':702 '更新迭代摘要区':698 '替代':512 '最坏情况是什么':221 '最多':1182,1482,1591 '最新迭代摘要':472 '最终以':1380 '有':178,358,372 '有明确的验证方式':1187 '有没有推迟项可以顺带做了':445 '有没有推迟项在阻塞此方案':444 '有没有测试覆盖这种失败':1617 '有没有错误处理':1619 '有统一入口就必须用统一入口':976 '服务':435,462,1042 '未发现统一':966 '未启动':868,873 '未启动则写':867,872 '未开始':1909 '未纳入范围':1603 '未解决决策':1728 '未解决的决策':1732 '来自':254,880 '架构':205,568,1891 '架构图':535 '架构审查':577 '架构概览':532 '架构设计':652 '查看':525 '查询和数据库访问模式':637 '标注每个选项的':163 '标记':1905 '样板':187 '核心原则':723,899,1893 '根据':1386 '根据文件类型自动判断':1192 '根据项目状态自动判断':365 '根目录执行':923 '格式规则':1981 '格式规范':139 '检查':739,1472 '检查冲突':1566 '检查是否有':369 '检查清单':2018 '检测到项目无测试框架':1086 '检测已有测试框架':1065 '模块划分':543 '模块名或文件名简写':1551 '模式':1644 '模式匹配':353 '模式选择':73,113,364 '次':1484 '次修复':292 '次修复失败就质疑架构':289 '次修复尝试':1593 '次失败':1486,1595 '次通过':1701 '次重试':1702 '步':72,85,88,93,112,115,118,123,363,415,719,847,894,1061 '每个':726,1337,1554 '每个任务可独立验证':1186 '每个任务在独立上下文中完成':1328 '每个任务完成验证后立刻创建独立的':1513 '每个任务定义可执行验证命令':1129 '每个任务开始':1939 '每个任务有':1189 '每个任务独立':42 '每个任务端到端完成一个功能':1175 '每个任务足够小':1177 '每个公司大约只有三个创新机会':225 '每个决定都评估':220 '每个潜在':1630 '每个章节发现问题后':572 '每个章节结束后暂停':1993 '每个选项一句话':1990 '每个问题单独':612,630,642 '每发现一个问题':594 '每次一个':1636 '每次一个问题':597 '每次提问必须遵循以下结构':140 '每项审查中考虑但明确推迟的工作':1605 '比人工便宜':452 '永远不要同时改结构和行为':252 '永远推荐完整方案':216 '没有统一入口时':1054 '流程':736,1610 '流程总览':67 '测试':238,570,1710 '测试命令':1261 '测试失败':840 '测试审查':615 '测试文件':1508 '测试文件路径随代码文件就近放置':1396 '测试框架':1662 '测试框架安装':2008 '测试框架检测':94,124 '测试框架检测与引导':1062 '测试矩阵':38,672 '测试矩阵产出':623 '测试通过':837 '浏览器截图':1263 '浏览器测试':990 '涉及工作量时同时注明':171 '涉及新依赖或新模式时':658 '涵盖前端和后端':11 '深度阅读项目代码':516 '清单':1604,1608 '清理命令':2014 '灰度发布':239 '灰度发布而非全量切换':230 '点击':1423 '爆炸半径直觉':219 '版本':1642 '状态切换':1425 '状态更新':1569 '状态标记协议':1904 '状态管理':411,1889 '状态输出或':1016 '理解上下文':1393 '理解当前架构':507 '理解现状':77,467 '用':448,503,653 '用户是否会看到清晰的错误':1621 '用户确认':1307 '用户确认后':1864 '用户说':46 '用高中生能听懂的语言解释问题':151 '画出所有新':616 '的':995 '的工作目录为':1331 '的边际成本接近于零':182 '的进程':1059 '目录':742 '目录中进行':892 '真实截图和测试为准':1384 '硬性要求':974 '确认':261,368,650,753 '确认与总结':1638 '确认前序依赖已完成':1925 '确认后再进入下一章节':575 '确认并行任务没有产生代码冲突':1567 '确认总结':105,133 '确认无回归':1564 '确认是否准确':536 '确认是否有对应测试':622 '确认理解是否正确':510 '确认结果正确':1446 '确认通过':1146,1406,1430 '禁止使用':1489 '禁用':267 '禁用措辞':2022 '秒能做决定':1992 '稍后处理':1766 '空值':1426 '章节顺序':567 '端口契约':91,121,897 '端口自动隔离':1029 '端点定义':670 '第0.5':71,111,362 '第0步':69,109,294,1651,1922 '第1':1657 '第1-4章':1656 '第10步':106,134,1734 '第1步':74,418 '第1章':576 '第1轮':531 '第2步':76,466,511 '第2章':598 '第2轮':537 '第3步':78,565 '第3章':614 '第3轮':542 '第4步':80,644 '第4章':632 '第4轮':546 '第5.5':84,114,718 '第5.6':87,117,893 '第5.7':92,122,1060 '第5步':82,680 '第5轮':549 '第6步':95,125,1168 '第6步任务拆分完成后':1931 '第7步':98,128,1316 '第8步':102,1601 '第9步':104,132,1637 '等待用户确认或外部依赖':1918 '等措辞':272 '等用户反馈':1994 '管理':407 '管理项目的':5,53 '类型':1238 '精确停止当前':1057 '糟糕的本地开发环境':245 '系统而非英雄':232 '红绿重构':2003 '级别':1233,1315,1347,1388 '级别标注':1191 '级别自动判断':1194 '级别适用':280 '结果':835,1501 '结果摘要':1540 '给出建议':157 '绝不批量':1635 '绞杀者模式而非大爆炸':229 '统一入口优先级':919 '继续':839 '缓存机会':639 '缩减':1654 '背景':688 '能复用还是在重建':424 '脚手架':188 '脚本':1264 '自动检测项目类型':805 '自洽性检查':717 '范围挑战':75,419,1652 '行为':1971 '行更新为':1928 '行状态改为':1955 '表':1937 '被修改文件中已有的':607 '要有侵略性':604 '规划':1171,1312 '规则':1506 '规范':1543 '视为警告信号':436 '视觉决策索引':1371 '触发方式':45 '认证':584 '讨论':330 '让犯错的代价变低':240 '设计':36,206,666 '证据先于断言':28 '评估':578,600,634 '诊断修复':1480 '诊断和修复':1581 '询问是否继续':842 '详细命令参考见':733 '详细框架安装指引见':1165 '详见':273,284 '说明当前项目':143 '说明选型理由':659 '说清楚':152 '读取':441,470,475,480,497,1155,1923 '读取完整':494 '读取完整输出':260,1445,1470 '读取核心源码':520 '读取涉及的文件':1392,1417,1437,1454 '读取视觉决策索引':485 '调度器通过':1963 '调研':210 '质疑设计方案':1598 '资源':1995 '走完整流程':379 '超长':1427 '跨':1957 '路径':851,1333,1648 '跳转到第':413 '跳过':844,1127,1131,1221,1237,1451,1680,1721,1727 '跳过tdd':1288 '跳过文档直接实现':17 '跳过文档管理':383 '轻量':24,1214,1235,1414,1646,1675 '轻量tdd':1289 '轻量模式':108,382 '轻量模式保留的能力':396 '轻量模式跳过的内容':405 '辅助':450 '辅助时':180 '输出':1500 '输出读取':1005 '边界':587 '边界测试':1422 '运行全量验证':1561 '运行测试':1145,1398,1405,1429 '运行测试验证合并结果':1796 '运行状态写入':1898 '运行验证命令':1467 '还是静默失败':1622 '进入下一':1557 '进入第':845 '进程身份必须核对':1015 '进行中':1910,1929 '违反':603 '迭代模式':359,468 '追加本次变更记录':686 '适合小':392 '适合正式项目':380 '选择':159 '选项':1772,1819,1854,1859 '选项字母':1986 '逐一通过':573 '逐节确认后写入文件':564 '通俗解释':150 '通常':1178 '通过':463,648,860,1083,1308,1711,1740 '通过后清理':1806 '遵循项目已有模式':679 '遵循项目已有的代码风格':1509 '都从':998 '配置文件':521 '里裸跑':908 '重新聚焦':142 '重新验证':1481 '重构':1408 '错误处理模式和缺失的边界情况':605 '错误处理的具体策略':678 '问题编号':1982 '间验证':1553,1945 '附一句话原因':1606 '除非项目没有统一入口':918 '隔离':62,386,398 '集成':18,60 '需二次确认':1771 '需干预':1916 '需要标红':1627 '需要用户确认的关键技术决策':646 '需要覆盖的测试场景':673 '静默失败':1625 '页面':703 '项目':1099,1119,1640 '项目名':1641 '项目有测试框架':1195 '项目目录':300,306,312,337,339,343,346 '顺序执行':1305 '领域文档':1894 '首次检测到项目无测试框架时触发':1063 '驱动':1291 '验证':1290,1538 '验证命令':1259,1354,1539 '验证框架正常工作':1143 '验证步骤':1846 '验证通过':1498 '验证门控流程':2021 '验证驱动':25,389,401,1199,1236,1435,1665,1678 '高时间复杂度代码路径':640 '默认完整模式':373","prices":[{"id":"7353ff6b-c620-4d5d-933d-d9b27a368d0b","listingId":"0c5ca7c3-bc80-4d29-bf3b-4a4649173a66","amountUsd":"0","unit":"free","nativeCurrency":null,"nativeAmount":null,"chain":null,"payTo":null,"paymentMethod":"skill-free","isPrimary":true,"details":{"org":"yike-gunshi","category":"forge-skills","install_from":"skills.sh"},"createdAt":"2026-04-24T07:03:38.427Z"}],"sources":[{"listingId":"0c5ca7c3-bc80-4d29-bf3b-4a4649173a66","source":"github","sourceId":"yike-gunshi/forge-skills/forge-eng","sourceUrl":"https://github.com/yike-gunshi/forge-skills/tree/main/skills/forge-eng","isPrimary":false,"firstSeenAt":"2026-04-24T07:03:38.427Z","lastSeenAt":"2026-04-25T19:02:44.818Z"}],"details":{"listingId":"0c5ca7c3-bc80-4d29-bf3b-4a4649173a66","quickStartSnippet":null,"exampleRequest":null,"exampleResponse":null,"schema":null,"openapiUrl":null,"agentsTxtUrl":null,"citations":[],"useCases":[],"bestFor":[],"notFor":[],"kindDetails":{"org":"yike-gunshi","slug":"forge-eng","github":{"repo":"yike-gunshi/forge-skills","stars":11,"topics":["agent-skills","ai-development","claude-code","forge","skill-md","skillsmp"],"license":"mit","html_url":"https://github.com/yike-gunshi/forge-skills","pushed_at":"2026-04-25T10:22:48Z","description":"Forge — 文档驱动的 AI 辅助开发框架 | Document-driven AI development framework with 14 Skills covering brainstorm → PRD → design → engineering → QA → review → ship → retrospective","skill_md_sha":"923dc08066c15c35b743e9e225eb5f94789d9a8e","skill_md_path":"skills/forge-eng/SKILL.md","default_branch":"main","skill_tree_url":"https://github.com/yike-gunshi/forge-skills/tree/main/skills/forge-eng"},"layout":"multi","source":"github","category":"forge-skills","frontmatter":{"name":"forge-eng","description":"工程文档管理与代码实现。管理项目的 ENGINEERING.md 和 ENGINEERING-CHANGELOG，涵盖前端和后端。支持完整模式（文档+审查+实现）和轻量模式（跳过文档直接实现）。集成 Worktree 会话级隔离、分级 TDD（严格/轻量/验证驱动）、Verification Gate（证据先于断言）。基于 PRD 和 DESIGN.md 产出架构设计、数据流、API 设计、实现清单、测试矩阵，与用户确认关键技术决策后将实现拆分为原子任务、Wave 并行执行、每个任务独立 git commit。触发方式：用户说\"工程\"、\"实现\"、\"forge-eng\"、forge-dev 调度器调用、需要实现代码变更时使用。"},"skills_sh_url":"https://skills.sh/yike-gunshi/forge-skills/forge-eng"},"updatedAt":"2026-04-25T19:02:44.818Z"}}