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