Claude Skill

pdlc-adopt

旧项目接入 PDLC

LLM Mart · 0 points · 0 views 0 listing impressions 0 install-command copies
Virus-scanned Reviewed automatically before listing.

Full trust report

Download kanfu-panda-pdlc-skills-skills_pdlc-adopt-3cd2f02.zip · 14 KB
Part of kanfu-panda/pdlc-skills — 36 skills

Install

skills CLI npx skills add https://github.com/kanfu-panda/pdlc-skills/tree/main/skills/pdlc-adopt
Claude Code claude plugin marketplace add https://llmmart.ai/marketplace.json && claude plugin install kanfu-panda-pdlc-skills@llmmart
Git git clone https://github.com/kanfu-panda/pdlc-skills.git

The skills CLI installs just this skill, for any of its supported agents. Claude Code installs the whole kanfu-panda/pdlc-skills collection as a plugin from our marketplace. Git is the plain clone.

Skill manifest

旧项目接入 PDLC

IRON LAW · 不可违反的硬门禁

以下规则为不可协商的执行约束:

  1. 文件必须落盘:所有带编号(功能ID / 缺陷ID)的文档,必须作为实际文件写入磁盘,不可仅在对话中输出。
  2. 阶段必须落章:每个阶段完成后必须在状态机 docs/.pdlc-state/<feature-id>.json 追加 history,不可跳过。
  3. 测试必须存在:进入 /pdlc-implement 前,对应测试必须存在且处于红灯状态。违反则中止。
  4. 自检必须执行:段二自检为强制步骤,不得以"已经很好了"为由跳过。
  5. 防循环:段三修复为单次,不递归。无法自动修复的问题记录到报告,继续往下走。
  6. 状态必推进:成功执行某 phase 后 current_stage 必须变更。收尾时若发现 current_stage 未推进,视为失败并报错,不得静默返回(防止外层循环拿滞后的状态空转烧额度)。唯一例外:命中人工点主动 block 时,current_stage 保持不变但必须写 last_phase_result.ok=false + blocked_reason

违反任一条 = 立即中止当前命令,输出违规详情,等待人工介入。

扫描现有项目结构,逆向生成基线文档,并进行健康检查发现潜在问题。让旧项目平滑接入 PDLC 流程。

核心原则

  • 只生文档,不动代码:不修改任何现有代码,仅生成基线文档
  • 增量接入:旧代码标记为"已接入基线",只有新功能走完整 PDLC
  • 守卫畅通:生成的基线文档满足守卫检查,后续命令不再被阻断

子命令解析

从本命令的参数中解析子命令:

子命令 说明
scan 扫描项目,输出接入报告 + 健康检查报告(不写任何文件,只读分析)
init 根据扫描结果,逆向生成基线文档到 docs/ 目录

如果未提供子命令或无法识别,输出以上帮助信息后停止。


scan 子命令

全程只读,不创建/修改任何文件,只在终端输出报告。

第一步:项目结构识别

  1. 技术栈检测

    • 检查特征文件:package.jsonpom.xmlbuild.gradlego.modrequirements.txtPipfileCargo.tomlmix.exs
    • 识别框架:Spring Boot、Express、NestJS、FastAPI、Gin、Echo、Django、Rails 等
    • 检查前端框架:reactvuenextangular(从 package.json 依赖推断)
  2. 服务/应用识别

    • 微服务:扫描 backend/services/ 或具有独立启动入口的子目录
    • 单体服务:根目录即为服务
    • 前端应用:扫描 frontend/web/app/ 或具有前端框架特征的目录
    • 记录每个服务/应用的名称、技术栈、入口文件
  3. 数据库识别

    • 从配置文件推断数据库类型(MySQL/PostgreSQL/MongoDB/Redis 等)
    • 扫描 ORM 配置(TypeORM/Sequelize/GORM/SQLAlchemy/MyBatis/JPA 等)
    • 检查已有 migration 目录

第二步:API 接口提取

按技术栈扫描路由定义:

技术栈 扫描目标
Spring Boot @RequestMapping@GetMapping@PostMapping 等注解
Express/NestJS router.get/post/put/delete@Get/@Post 装饰器
FastAPI @app.get/post/put/delete@router.get/post
Go (Gin/Echo) r.GET/POST/PUT/DELETEe.GET/POST
Django urlpatternspath()re_path()

提取信息:HTTP 方法、路径、处理函数名、参数(如能识别)。

第三步:数据库结构提取

来源 提取方式
ORM Model 扫描实体类/模型定义,提取表名、字段名、字段类型、关联关系
Migration 文件 扫描 migrations/db/migrate/ 等目录,提取 DDL 变更历史
SQL 文件 扫描 *.sql 文件,提取 CREATE TABLE 语句

第四步:已有文档检测

  • 检查 README.md 内容丰富度
  • 检查 docs/ 目录及子目录
  • 检查是否已有 PDLC 文档(docs/01_requirements/docs/02_design/ 等)
  • 如已有 PDLC 文档,标记为"已存在,跳过生成"

第五步:健康检查(潜在问题扫描)

对代码进行静态分析级别的检查,按严重程度分级:

🔴 阻断级(必须修复才能安全上线)

  • 安全漏洞
    • SQL 拼接(字符串拼接构建 SQL 而非参数化查询)
    • 硬编码密钥/密码(代码中直接写死的 secret、password、api_key)
    • 未鉴权的敏感接口(涉及用户数据的接口无鉴权中间件)

🟠 严重级(高风险,建议尽快修复)

  • 数据风险
    • 高频查询字段无索引(WHERE/JOIN 条件中的字段无对应索引)
    • 外键关系逻辑不一致(代码中的关联关系与数据库定义不匹配)
    • 无软删除机制(直接物理删除,无法恢复)
  • API 风险
    • 接口无参数校验(直接使用用户输入,无 validation)
    • 接口无错误处理(缺少 try-catch 或错误中间件)

🟡 一般级(影响质量,建议改进)

  • 一致性问题
    • 文档与代码不一致(如 README 描述的接口与实际不符)
    • Model 定义与数据库 schema 不一致
    • 命名不规范(混用 camelCase 和 snake_case)
  • 代码质量
    • N+1 查询模式(循环中执行数据库查询)
    • 未使用的依赖包
    • 重复代码块

🔵 建议级(优化项)

  • 缺少日志记录
  • 缺少监控指标
  • 缺少 API 文档注解
  • 测试覆盖率不足

输出格式

📊 项目扫描报告
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

## 一、项目结构

| 项目 | 详情 |
|------|------|
| 技术栈 | Java Spring Boot 2.7 + MySQL 8.0 |
| 后端服务 | 3 个(user-service, order-service, product-service) |
| 前端应用 | 1 个(web-admin, React 18) |
| 数据库 | MySQL(12 张表) |
| 已有文档 | README.md(简略)、无 PDLC 文档 |

## 二、可生成的基线文档

| 文档类型 | 是否可生成 | 内容预估 |
|---------|-----------|---------|
| 基线 PRD | ✅ 可生成 | 从 README + 服务结构推断,需人工补充业务目标 |
| API 设计文档 | ✅ 可生成 | 提取到 45 个接口定义 |
| DB 设计文档 | ✅ 可生成 | 提取到 12 张表结构 |
| 架构概要 | ✅ 可生成 | 3 服务 + 1 前端的依赖关系图 |

## 三、健康检查报告

### 🔴 阻断 (2)

| # | 位置 | 问题 | 风险 | 修复建议 |
|---|------|------|------|---------|
| 1 | user-service/src/.../UserDao.java:45 | SQL 字符串拼接 | SQL 注入 | 改用 PreparedStatement 参数化查询 |
| 2 | config/application.yml:12 | 数据库密码明文硬编码 | 凭证泄露 | 使用环境变量或密钥管理服务 |

### 🟠 严重 (3)
...

### 🟡 一般 (5)
...

### 🔵 建议 (4)
...

━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
统计:🔴 2 | 🟠 3 | 🟡 5 | 🔵 4 | 总计 14 个问题

💡 建议:先修复 🔴 阻断级问题,再运行 /pdlc-adopt init 生成基线文档。

init 子命令

建议先运行 scan 查看报告,再运行 init 生成文档。

执行流程

  1. 执行与 scan 相同的扫描逻辑(收集项目信息)
  2. 检查 docs/ 下是否已有同名基线文档,已存在则跳过(避免覆盖)
  3. 创建 PDLC 标准目录结构(如不存在):
    docs/
    ├── 00_standards/
    ├── 01_requirements/prd/
    ├── 02_design/
    │   ├── api/
    │   ├── architecture/
    │   └── database/
    ├── 03_development/
    ├── 04_testing/
    ├── 05_deployment/
    └── 07_reviews/
    
  4. 逆向生成基线文档(详见下方)
  5. 生成接入状态文件
  6. 输出生成结果摘要

基线文档生成规则

所有基线文档以 ADOPTED- 前缀命名,与正常 PDLC 文档区分。

所有文档头部包含接入标记:

<!-- PDLC-TRACE -->
<!-- PDLC-ADOPTED -->
<!-- 项目名称: my-project -->
<!-- 接入日期: YYYY-MM-DD -->
<!-- 阶段: 接入基线 -->
<!-- 说明: 由 /pdlc-adopt init 自动生成,内容基于代码逆向推断,需人工审核补充 -->

基线 PRD

  • 路径:docs/01_requirements/prd/ADOPTED-<项目名>-prd.md
  • 内容来源:README + 服务列表 + API 接口分组推断功能模块
  • 包含:项目背景(从 README 提取)、功能模块清单(从代码推断)、技术栈说明
  • 明确标注> ⚠️ 以下内容由代码逆向推断,业务目标和用户故事需人工补充

基线 API 设计文档

  • 路径:docs/02_design/api/ADOPTED-<服务名>-api.md(每个服务一个)
  • 内容来源:路由定义扫描结果
  • 包含:接口列表表格(方法、路径、描述、参数)、按模块分组
  • 使用 本 skill 目录下的 assets/api-design-template.md 的格式
  • 明确标注> ⚠️ 接口描述基于函数名推断,请核对补充

基线 DB 设计文档

  • 路径:docs/02_design/database/ADOPTED-<服务名>-db.md(每个服务一个)
  • 内容来源:ORM Model / Migration / SQL 文件
  • 包含:ER 关系图(文本格式)、表结构定义、索引设计、公共字段约定
  • 使用 本 skill 目录下的 assets/db-design-template.md 的格式
  • 明确标注> ⚠️ 表结构从代码提取,请核对与实际数据库是否一致

基线架构文档

  • 路径:docs/02_design/architecture/ADOPTED-<项目名>-arch.md
  • 内容来源:服务列表 + 依赖关系 + 配置文件
  • 包含:系统架构图(文本格式)、服务清单和职责、技术栈说明、服务间通信方式
  • 明确标注> ⚠️ 架构描述基于代码结构推断,请核对补充

接入状态文件

  • 路径:docs/00_standards/adopt-status.md
  • 记录各模块的 PDLC 接入状态:
# PDLC 接入状态

> 由 `/pdlc-adopt init` 生成于 YYYY-MM-DD

## 接入概况

| 模块 | 基线 PRD | API 设计 | DB 设计 | 架构文档 | 测试覆盖 | 状态 |
|------|---------|---------|---------|---------|---------|------|
| user-service | ✅ | ✅ | ✅ | ✅ | ⚠️ 待补充 | 基线完成 |
| order-service | ✅ | ✅ | ✅ | ✅ | ⚠️ 待补充 | 基线完成 |

## 健康检查问题跟踪

| # | 级别 | 位置 | 问题 | 状态 |
|---|------|------|------|------|
| 1 | 🔴 | UserDao.java:45 | SQL 拼接 | 待修复 |
| 2 | 🔴 | application.yml:12 | 密码硬编码 | 待修复 |

## 后续建议

1. 人工审核基线文档,补充业务目标和用户故事
2. 修复 🔴 阻断级健康问题
3. 新功能开发使用 `/pdlc-feature` 走完整 PDLC 流程
4. 旧功能改造时从 `/pdlc-design` 开始(基线 PRD 已满足守卫检查)
5. 逐步为核心模块补充单元测试(使用 `/pdlc-tdd`)

要求

🌐 Output language for generated artifacts

All generated artifacts (PRDs, design docs, code comments, review reports, test plans, deployment manuals, changelog entries, etc.) follow this policy:

  1. Default — match the conversation language exactly:

    • 用户用中文与 Claude 对话 → 产中文文档、中文代码注释、中文报告
    • User talks to Claude in English → produce English artifacts
    • User talks in another language → produce artifacts in that language
    • Never silently default to a fixed language regardless of the user's input.
  2. Explicit override always wins: when the user specifies a language for an artifact (e.g. "write the PRD in English", "用英文写 API 设计文档", "output the deploy doc in Japanese"), use that language for that artifact, regardless of conversation language.

  3. Mixed-language requirements: if the user wants some artifacts in one language and others in a different language (common: Chinese PRD + English API docs for partners), honour each per-artifact instruction.

  4. Uncertain: if you cannot reliably detect the conversation language, ask once before producing the first artifact.

This policy applies to content (prose, comments, headings). It does not override technical conventions like English variable names, English git commit subjects, or English error codes when the project's conventions require them.

  • scan 子命令严格只读,不创建/修改任何文件
  • init 子命令不修改任何现有代码文件,只在 docs/ 目录下创建文档
  • 已存在的文档不覆盖,跳过并提示
  • 基线文档中需人工补充的部分用 > ⚠️ 引用块明确标注
  • 健康检查问题必须给出具体的文件路径和行号
  • 读取 本 skill 目录下的 assets/adopt-report-template.md 模板作为格式参考

接入操作: $ARGUMENTS

段四:交接(Handoff)

命令完成后必须输出以下格式的最终消息:

✅ <阶段名> 完成:<主要产出物路径>
📊 自检:<通过数>/<总数> 通过(若有未通过,附要点)
📦 状态快照:docs/.pdlc-state/<feature-id>.json
👉 下一步:/pdlc-<next_step>
   (如果有分叉)或 /pdlc-<alt>(条件:<选择依据>)

规则:

  • 主流程命令(写状态机的命令;下一跳见正文里「本命令的状态机取值」)必须显式输出"下一步",不可省略
  • 工具型命令(Layer 3)可以没有 next_step,此时输出 👉 下一步:(本次流程结束,无后续)
  • 分叉场景必须说明选择条件,例如"若需补充测试用例 → /pdlc-tdd;若测试已齐 → /pdlc-review"

本命令的 handoff 输出:

✅ PDLC 接入基线文档 完成
📦 产出:docs/**(基线文档集)
👉 下一步:(本次流程结束,无后续)
Files (pdlc-skills)
  • assets
    • adopt-report-template.md 6 KB
      # 旧项目接入报告模板
      
      > 本模板供 `/pdlc-adopt` 命令生成扫描报告和基线文档时参考。
      
      ---
      
      ## 1. 扫描报告格式
      
      ```markdown
      # 项目扫描报告
      
      > 扫描时间:YYYY-MM-DD HH:MM
      > 项目路径:/path/to/project
      
      ## 一、项目结构
      
      | 项目 | 详情 |
      |------|------|
      | 项目名称 | <从 package.json/pom.xml/go.mod 或目录名获取> |
      | 技术栈 | <语言 + 框架 + 版本> |
      | 后端服务 | <N> 个(<服务名列表>) |
      | 前端应用 | <N> 个(<应用名列表>) |
      | 数据库 | <类型>(<N> 张表) |
      | 已有文档 | <描述已有文档的情况> |
      
      ## 二、可生成的基线文档
      
      | 文档类型 | 可否生成 | 内容预估 | 备注 |
      |---------|---------|---------|------|
      | 基线 PRD | ✅ / ❌ | <描述> | <需人工补充的部分> |
      | API 设计文档 | ✅ / ❌ | 提取到 N 个接口 | - |
      | DB 设计文档 | ✅ / ❌ | 提取到 N 张表 | - |
      | 架构概要 | ✅ / ❌ | <描述> | - |
      
      ## 三、健康检查报告
      
      ### 🔴 阻断(N)
      
      | # | 位置 | 问题 | 风险 | 修复建议 |
      |---|------|------|------|---------|
      | 1 | <文件:行号> | <描述> | <风险说明> | <修复方案> |
      
      ### 🟠 严重(N)
      
      | # | 位置 | 问题 | 风险 | 修复建议 |
      |---|------|------|------|---------|
      
      ### 🟡 一般(N)
      
      | # | 位置 | 问题 | 风险 | 修复建议 |
      |---|------|------|------|---------|
      
      ### 🔵 建议(N)
      
      | # | 位置 | 问题 | 修复建议 |
      |---|------|------|---------|
      
      ---
      
      统计:🔴 N | 🟠 N | 🟡 N | 🔵 N | 总计 N 个问题
      ```
      
      ---
      
      ## 2. 基线 PRD 骨架
      
      ```markdown
      <!-- PDLC-TRACE -->
      <!-- PDLC-ADOPTED -->
      <!-- 项目名称: <项目名> -->
      <!-- 接入日期: YYYY-MM-DD -->
      <!-- 阶段: 接入基线 -->
      <!-- 说明: 由 /pdlc-adopt init 自动生成,内容基于代码逆向推断,需人工审核补充 -->
      
      # PRD(基线):<项目名称>
      
      > ⚠️ 本文档由代码逆向推断生成,业务目标、用户故事和验收标准需人工审核补充。
      
      ## 1. 背景与目标
      
      ### 1.1 背景
      <从 README.md 提取的项目描述,如无则标注"待补充">
      
      ### 1.2 目标
      > ⚠️ 待人工补充:项目的核心业务目标
      
      ## 2. 功能模块
      
      > 以下功能模块从代码结构逆向推断:
      
      | 模块 | 所属服务 | 接口数 | 数据表 | 描述 |
      |------|---------|--------|--------|------|
      | <模块名> | <服务名> | N | N | <从代码推断的描述> |
      
      ## 3. 技术架构
      
      | 项目 | 说明 |
      |------|------|
      | 后端技术栈 | <语言 + 框架> |
      | 前端技术栈 | <框架 + 版本> |
      | 数据库 | <类型 + 版本> |
      | 缓存 | <如检测到> |
      | 消息队列 | <如检测到> |
      
      ## 4. 非功能需求
      > ⚠️ 待人工补充:性能要求、安全要求、可用性要求等
      ```
      
      ---
      
      ## 3. 基线 API 设计文档骨架
      
      ```markdown
      <!-- PDLC-TRACE -->
      <!-- PDLC-ADOPTED -->
      <!-- 项目名称: <项目名> -->
      <!-- 服务名称: <服务名> -->
      <!-- 接入日期: YYYY-MM-DD -->
      <!-- 阶段: 接入基线 -->
      <!-- 说明: 由 /pdlc-adopt init 自动生成,接口信息从路由定义提取 -->
      
      # API 设计文档(基线):<服务名>
      
      > ⚠️ 本文档从代码路由定义逆向提取,接口描述基于函数名推断,请核对补充。
      
      ## 1. 概述
      
      | 项目 | 说明 |
      |------|------|
      | 基础路径 | <从代码提取> |
      | 认证方式 | <从中间件推断,如未检测到则标注"待确认"> |
      
      ## 2. 接口总览
      
      | 方法 | 路径 | 描述 | 处理函数 | 备注 |
      |------|------|------|---------|------|
      | GET | /api/users | <推断> | UserController.list | - |
      | POST | /api/users | <推断> | UserController.create | - |
      
      ## 3. 接口详情
      
      > ⚠️ 请求参数和响应结构需人工补充完善
      
      ### 3.1 <接口描述>
      
      - **方法**: GET
      - **路径**: /api/users
      - **处理函数**: UserController.list
      - **参数**: > ⚠️ 待补充
      - **响应**: > ⚠️ 待补充
      ```
      
      ---
      
      ## 4. 基线 DB 设计文档骨架
      
      ```markdown
      <!-- PDLC-TRACE -->
      <!-- PDLC-ADOPTED -->
      <!-- 项目名称: <项目名> -->
      <!-- 服务名称: <服务名> -->
      <!-- 接入日期: YYYY-MM-DD -->
      <!-- 阶段: 接入基线 -->
      <!-- 说明: 由 /pdlc-adopt init 自动生成,表结构从 ORM/Migration 提取 -->
      
      # 数据库设计文档(基线):<服务名>
      
      > ⚠️ 本文档从代码中的 Model/Migration 逆向提取,请核对与实际数据库是否一致。
      
      ## 1. 概述
      
      | 项目 | 说明 |
      |------|------|
      | 数据库类型 | <类型 + 版本> |
      | 字符集 | <如能检测到> |
      | 表数量 | N |
      
      ## 2. ER 关系图
      
      > 从代码中的外键/关联关系推断:
      
      ```
      [表A] 1──N [表B] N──N [表C]
      ```
      
      ## 3. 表结构定义
      
      ### 3.1 表名:<table_name>
      
      | 字段 | 类型 | 可空 | 默认值 | 索引 | 描述 |
      |------|------|------|--------|------|------|
      | <从 Model/Migration 提取> |
      
      ## 4. 索引设计
      
      | 表名 | 索引名 | 类型 | 字段 | 用途 |
      |------|--------|------|------|------|
      ```
      
      ---
      
      ## 5. 接入状态追踪表模板
      
      ```markdown
      # PDLC 接入状态
      
      > 由 `/pdlc-adopt init` 生成于 YYYY-MM-DD
      > 最后更新:YYYY-MM-DD
      
      ## 接入概况
      
      | 模块 | 基线 PRD | API 设计 | DB 设计 | 架构文档 | 测试覆盖 | 状态 |
      |------|---------|---------|---------|---------|---------|------|
      | <服务名> | ✅ / ❌ | ✅ / ❌ | ✅ / ❌ | ✅ / ❌ | ⚠️ 待补充 | 基线完成 / 部分完成 |
      
      状态说明:
      - **基线完成**:基线文档已生成,可开始使用 PDLC 命令
      - **部分完成**:部分文档已生成,其余待补充
      - **已完善**:基线文档已人工审核补充完成
      
      ## 健康检查问题跟踪
      
      | # | 级别 | 位置 | 问题 | 状态 | 修复记录 |
      |---|------|------|------|------|---------|
      | 1 | 🔴 | <文件:行号> | <描述> | 待修复 / 已修复 | - |
      
      ## 后续行动建议
      
      1. 人工审核基线文档,补充 `> ⚠️` 标注的待补充内容
      2. 修复 🔴 阻断级健康问题(可使用 `/pdlc-fix`)
      3. 新功能开发使用 `/pdlc-feature` 走完整 PDLC 流程
      4. 旧功能改造时从 `/pdlc-design` 开始(基线 PRD 已满足守卫检查)
      5. 逐步为核心模块补充单元测试(使用 `/pdlc-tdd`)
      ```
      
    • api-design-template.md 10 KB
      # API 设计文档:[模块名称]
      
      > 关联需求:REQ-YYYYMM-XXX
      > 创建日期:
      > 作者:
      > 评审人:
      > 状态:草稿 | 已评审 | 已批准
      > 版本:v1.0
      
      ---
      
      ## 1. 概述
      
      简要说明本模块提供的 API 能力、使用场景和接入方。
      
      | 项目 | 说明 |
      |------|------|
      | 基础路径 | `/api/v1/[模块名]` |
      | 生产环境 | `https://api.example.com` |
      | 测试环境 | `https://api-staging.example.com` |
      | 认证方式 | Bearer Token(JWT) |
      | 数据格式 | JSON(`Content-Type: application/json`) |
      | 字符编码 | UTF-8 |
      | 接口数量 | N 个 |
      
      ---
      
      ## 2. 接口总览
      
      | 方法 | 路径 | 描述 | 需求编号 | 权限 | 状态 |
      |------|------|------|----------|------|------|
      | POST | `/api/v1/orders` | 创建订单 | REQ-202603-001 | 已登录用户 | 待开发 |
      | GET  | `/api/v1/orders/{orderId}` | 查询订单详情 | REQ-202603-002 | 已登录用户 | 待开发 |
      | GET  | `/api/v1/orders` | 查询订单列表 | REQ-202603-003 | 已登录用户 | 待开发 |
      | PUT  | `/api/v1/orders/{orderId}/cancel` | 取消订单 | REQ-202603-004 | 已登录用户 | 待开发 |
      
      ---
      
      ## 3. 通用约定
      
      ### 3.1 请求头
      
      | Header | 必填 | 说明 |
      |--------|------|------|
      | `Authorization` | 是 | `Bearer <token>` |
      | `Content-Type` | 是(有 Body 时) | `application/json` |
      | `X-Request-Id` | 否 | 调用方传入的请求唯一标识,用于链路追踪 |
      | `X-Idempotency-Key` | 是(写接口) | 幂等键,防止重复提交,建议使用 UUID |
      
      ### 3.2 统一响应结构
      
      ```json
      {
        "code": 0,
        "message": "success",
        "data": {},
        "requestId": "abc-123",
        "timestamp": 1711382400000
      }
      ```
      
      | 字段 | 类型 | 说明 |
      |------|------|------|
      | `code` | int | 业务状态码,0 表示成功 |
      | `message` | string | 提示信息 |
      | `data` | object / array / null | 响应数据 |
      | `requestId` | string | 请求唯一标识 |
      | `timestamp` | long | 服务器时间戳(毫秒) |
      
      ### 3.3 分页结构
      
      列表接口统一使用以下分页参数和响应结构:
      
      **请求参数:**
      
      | 参数 | 类型 | 必填 | 默认值 | 说明 |
      |------|------|------|--------|------|
      | `page` | int | 否 | 1 | 页码,从 1 开始 |
      | `pageSize` | int | 否 | 20 | 每页数量,最大 100 |
      
      **响应 `data` 结构:**
      
      ```json
      {
        "list": [],
        "total": 100,
        "page": 1,
        "pageSize": 20,
        "totalPages": 5
      }
      ```
      
      ### 3.4 错误码定义
      
      | code | HTTP 状态码 | 含义 | 说明 |
      |------|------------|------|------|
      | 0 | 200 | 成功 | - |
      | 10001 | 400 | 参数错误 | 请求参数校验失败 |
      | 10002 | 401 | 未认证 | Token 缺失或已过期 |
      | 10003 | 403 | 无权限 | 无操作权限 |
      | 10004 | 404 | 资源不存在 | - |
      | 10005 | 409 | 资源冲突 | 如重复提交 |
      | 10006 | 429 | 请求过于频繁 | 触发限流 |
      | 50000 | 500 | 服务器内部错误 | - |
      | 50001 | 503 | 服务不可用 | 依赖服务故障 |
      
      > 业务模块错误码在模块内自定义,格式建议:`模块码(3位)+ 错误序号(3位)`,如订单模块 `201001`。
      
      ---
      
      ## 4. 接口详情
      
      ### 4.1 创建订单
      
      **需求编号**:REQ-202603-001
      
      ```
      POST /api/v1/orders
      ```
      
      **描述**:用户提交订单,系统创建订单并返回订单编号。
      
      **权限**:已登录用户
      
      **请求参数:**
      
      | 参数 | 类型 | 必填 | 说明 |
      |------|------|------|------|
      | `addressId` | long | 是 | 收货地址 ID |
      | `items` | array | 是 | 商品列表 |
      | `items[].productId` | long | 是 | 商品 ID |
      | `items[].quantity` | int | 是 | 购买数量,最小值 1 |
      | `remark` | string | 否 | 订单备注,最大 500 字符 |
      
      **请求示例:**
      
      ```json
      {
        "addressId": 10086,
        "items": [
          { "productId": 1001, "quantity": 2 },
          { "productId": 1002, "quantity": 1 }
        ],
        "remark": "尽快发货"
      }
      ```
      
      **响应参数:**
      
      | 参数 | 类型 | 说明 |
      |------|------|------|
      | `orderId` | long | 订单 ID |
      | `orderNo` | string | 订单编号 |
      | `totalAmount` | int | 订单总金额(分) |
      | `status` | int | 订单状态(0=待支付) |
      | `createdAt` | string | 创建时间(ISO 8601) |
      
      **响应示例:**
      
      ```json
      {
        "code": 0,
        "message": "success",
        "data": {
          "orderId": 88888,
          "orderNo": "ORD20260318000001",
          "totalAmount": 19900,
          "status": 0,
          "createdAt": "2026-03-18T10:00:00+08:00"
        },
        "requestId": "abc-123",
        "timestamp": 1742266800000
      }
      ```
      
      **错误码:**
      
      | code | 说明 |
      |------|------|
      | 10001 | 参数校验失败(如 quantity < 1) |
      | 201001 | 商品不存在或已下架 |
      | 201002 | 库存不足 |
      | 201003 | 收货地址不存在 |
      
      ---
      
      ### 4.2 查询订单详情
      
      **需求编号**:REQ-202603-002
      
      ```
      GET /api/v1/orders/{orderId}
      ```
      
      **描述**:根据订单 ID 查询订单详情,仅允许查询本人订单。
      
      **权限**:已登录用户
      
      **路径参数:**
      
      | 参数 | 类型 | 必填 | 说明 |
      |------|------|------|------|
      | `orderId` | long | 是 | 订单 ID |
      
      **响应参数:**
      
      | 参数 | 类型 | 说明 |
      |------|------|------|
      | `orderId` | long | 订单 ID |
      | `orderNo` | string | 订单编号 |
      | `status` | int | 订单状态(见枚举) |
      | `totalAmount` | int | 订单总金额(分) |
      | `payAmount` | int | 实付金额(分) |
      | `items` | array | 商品列表 |
      | `items[].productId` | long | 商品 ID |
      | `items[].productName` | string | 商品名称 |
      | `items[].quantity` | int | 数量 |
      | `items[].unitPrice` | int | 单价(分) |
      | `createdAt` | string | 创建时间 |
      | `paidAt` | string / null | 支付时间 |
      
      **订单状态枚举:**
      
      | 值 | 含义 |
      |----|------|
      | 0 | 待支付 |
      | 1 | 已支付 |
      | 2 | 已发货 |
      | 3 | 已完成 |
      | 9 | 已取消 |
      
      **响应示例:**
      
      ```json
      {
        "code": 0,
        "message": "success",
        "data": {
          "orderId": 88888,
          "orderNo": "ORD20260318000001",
          "status": 0,
          "totalAmount": 19900,
          "payAmount": 19900,
          "items": [
            {
              "productId": 1001,
              "productName": "示例商品 A",
              "quantity": 2,
              "unitPrice": 9000
            },
            {
              "productId": 1002,
              "productName": "示例商品 B",
              "quantity": 1,
              "unitPrice": 1900
            }
          ],
          "createdAt": "2026-03-18T10:00:00+08:00",
          "paidAt": null
        },
        "requestId": "abc-124",
        "timestamp": 1742266900000
      }
      ```
      
      **错误码:**
      
      | code | 说明 |
      |------|------|
      | 10003 | 无权限(非本人订单) |
      | 10004 | 订单不存在 |
      
      ---
      
      ### 4.3 查询订单列表
      
      **需求编号**:REQ-202603-003
      
      ```
      GET /api/v1/orders
      ```
      
      **描述**:分页查询当前用户的订单列表,支持按状态筛选。
      
      **权限**:已登录用户
      
      **Query 参数:**
      
      | 参数 | 类型 | 必填 | 默认值 | 说明 |
      |------|------|------|--------|------|
      | `status` | int | 否 | - | 订单状态筛选,不传则查询全部 |
      | `page` | int | 否 | 1 | 页码 |
      | `pageSize` | int | 否 | 20 | 每页数量 |
      
      **响应参数(`data.list[]` 单条字段):**
      
      | 参数 | 类型 | 说明 |
      |------|------|------|
      | `orderId` | long | 订单 ID |
      | `orderNo` | string | 订单编号 |
      | `status` | int | 订单状态(见枚举) |
      | `totalAmount` | int | 订单总金额(分) |
      | `createdAt` | string | 创建时间 |
      
      **响应示例:**
      
      ```json
      {
        "code": 0,
        "message": "success",
        "data": {
          "list": [
            {
              "orderId": 88888,
              "orderNo": "ORD20260318000001",
              "status": 0,
              "totalAmount": 19900,
              "createdAt": "2026-03-18T10:00:00+08:00"
            }
          ],
          "total": 1,
          "page": 1,
          "pageSize": 20,
          "totalPages": 1
        },
        "requestId": "abc-125",
        "timestamp": 1742267000000
      }
      ```
      
      ---
      
      ### 4.4 取消订单
      
      **需求编号**:REQ-202603-004
      
      ```
      PUT /api/v1/orders/{orderId}/cancel
      ```
      
      **描述**:取消待支付状态的订单,其他状态不允许取消。
      
      **权限**:已登录用户
      
      **路径参数:**
      
      | 参数 | 类型 | 必填 | 说明 |
      |------|------|------|------|
      | `orderId` | long | 是 | 订单 ID |
      
      **请求参数:**
      
      | 参数 | 类型 | 必填 | 说明 |
      |------|------|------|------|
      | `reason` | string | 否 | 取消原因,最大 200 字符 |
      
      **请求示例:**
      
      ```json
      {
        "reason": "不想买了"
      }
      ```
      
      **响应示例:**
      
      ```json
      {
        "code": 0,
        "message": "success",
        "data": null,
        "requestId": "abc-126",
        "timestamp": 1742267100000
      }
      ```
      
      **错误码:**
      
      | code | 说明 |
      |------|------|
      | 10003 | 无权限(非本人订单) |
      | 10004 | 订单不存在 |
      | 201004 | 订单状态不允许取消(非待支付状态) |
      
      ---
      
      ## 5. 数据模型
      
      ### 5.1 OrderVO(订单视图对象)
      
      | 字段 | 类型 | 说明 |
      |------|------|------|
      | `orderId` | long | 订单 ID |
      | `orderNo` | string | 订单编号 |
      | `status` | int | 订单状态 |
      | `totalAmount` | int | 订单总金额(分) |
      | `payAmount` | int | 实付金额(分) |
      | `remark` | string | 备注 |
      | `createdAt` | string | 创建时间(ISO 8601) |
      | `paidAt` | string / null | 支付时间 |
      | `items` | array\<OrderItemVO\> | 商品明细 |
      
      ### 5.2 OrderItemVO(订单明细视图对象)
      
      | 字段 | 类型 | 说明 |
      |------|------|------|
      | `productId` | long | 商品 ID |
      | `productName` | string | 商品名称 |
      | `quantity` | int | 数量 |
      | `unitPrice` | int | 单价(分) |
      | `subtotal` | int | 小计(分) |
      
      ---
      
      ## 6. 限流与安全
      
      | 接口 | 限流规则 | 说明 |
      |------|----------|------|
      | POST `/api/v1/orders` | 10次/分钟/用户 | 防止重复提交 |
      | GET `/api/v1/orders` | 60次/分钟/用户 | 正常查询 |
      | PUT `.../cancel` | 5次/分钟/用户 | 防止频繁操作 |
      
      - 所有写接口需携带幂等键(`X-Idempotency-Key`),服务端保证相同 key 重复请求只处理一次
      - 敏感字段(如金额)在日志中脱敏处理
      
      ---
      
      ## 7. 变更记录
      
      | 版本 | 日期 | 变更内容 | 作者 |
      |------|------|----------|------|
      | v1.0 | | 初始版本 | |
      
      ---
      
      ## 8. 评审记录
      
      | 日期 | 评审人 | 问题 | 处理结果 |
      |------|--------|------|----------|
      
      ---
      
      **关联文档:**
      - 需求文档:`docs/01_requirements/prd/`
      - 数据库设计:`docs/02_design/database/`
      - 架构设计:`docs/02_design/architecture/`
      
    • db-design-template.md 5.3 KB
      # 数据库设计文档:[模块名称]
      
      > 关联需求:REQ-YYYYMM-XXX
      > 创建日期:
      > 作者:
      > 评审人:
      > 状态:草稿 | 已评审 | 已批准
      
      ---
      
      ## 1. 概述
      
      简要说明本模块涉及的数据存储设计,数据量预估,读写比例。
      
      | 项目 | 说明 |
      |------|------|
      | 数据库类型 | MySQL 8.0 |
      | 字符集 | utf8mb4 |
      | 排序规则 | utf8mb4_general_ci |
      | 存储引擎 | InnoDB |
      | 预估数据量 | 100 万行/年 |
      | 读写比例 | 读多写少(约 8:2) |
      
      ---
      
      ## 2. ER 关系图
      
      ```
      ┌──────────┐       1:N       ┌──────────────┐
      │  users   │────────────────▶│   orders     │
      └──────────┘                 └──────┬───────┘
                                          │ 1:N
                                   ┌──────▼───────┐       N:1    ┌──────────┐
                                   │ order_items  │─────────────▶│ products │
                                   └──────────────┘              └──────────┘
      ```
      
      ---
      
      ## 3. 公共字段约定
      
      > 所有表统一包含以下公共字段:
      
      | 字段 | 类型 | 可空 | 默认值 | 说明 |
      |------|------|------|--------|------|
      | id | bigint | NOT NULL | 自增 | 主键 |
      | created_at | datetime | NOT NULL | CURRENT_TIMESTAMP | 创建时间 |
      | updated_at | datetime | NOT NULL | CURRENT_TIMESTAMP ON UPDATE | 更新时间 |
      | created_by | varchar(64) | NULL | NULL | 创建人 |
      | updated_by | varchar(64) | NULL | NULL | 更新人 |
      | is_deleted | tinyint(1) | NOT NULL | 0 | 逻辑删除(0=正常,1=删除) |
      
      ---
      
      ## 4. 表结构定义
      
      ### 4.1 表名:orders(订单主表)
      
      **用途**:存储订单主信息
      
      | 字段 | 类型 | 可空 | 默认值 | 索引 | 说明 |
      |------|------|------|--------|------|------|
      | id | bigint | NOT NULL | AUTO_INCREMENT | PK | 主键 |
      | order_no | varchar(32) | NOT NULL | - | UK | 订单编号 |
      | user_id | bigint | NOT NULL | - | IDX | 下单用户 |
      | status | tinyint | NOT NULL | 0 | IDX | 订单状态(见枚举) |
      | total_amount | int | NOT NULL | 0 | - | 订单金额(分) |
      | pay_amount | int | NOT NULL | 0 | - | 实付金额(分) |
      | remark | varchar(500) | NULL | NULL | - | 备注 |
      | paid_at | datetime | NULL | NULL | - | 支付时间 |
      | ... | ... | ... | ... | ... | 公共字段 |
      
      **枚举值说明:**
      
      | 字段 | 值 | 含义 |
      |------|-----|------|
      | status | 0 | 待支付 |
      | status | 1 | 已支付 |
      | status | 2 | 已发货 |
      | status | 3 | 已完成 |
      | status | 9 | 已取消 |
      
      ### 4.2 表名:order_items(订单明细表)
      
      **用途**:存储订单商品明细
      
      | 字段 | 类型 | 可空 | 默认值 | 索引 | 说明 |
      |------|------|------|--------|------|------|
      | id | bigint | NOT NULL | AUTO_INCREMENT | PK | 主键 |
      | order_id | bigint | NOT NULL | - | IDX | 所属订单 |
      | product_id | bigint | NOT NULL | - | IDX | 商品 ID |
      | product_name | varchar(200) | NOT NULL | - | - | 商品名称(冗余) |
      | quantity | int | NOT NULL | 1 | - | 数量 |
      | unit_price | int | NOT NULL | 0 | - | 单价(分) |
      | ... | ... | ... | ... | ... | 公共字段 |
      
      ---
      
      ## 5. 索引设计
      
      | 表名 | 索引名 | 类型 | 字段 | 用途 |
      |------|--------|------|------|------|
      | orders | pk_orders | 主键 | id | 主键 |
      | orders | uk_orders_order_no | 唯一 | order_no | 订单号唯一 |
      | orders | idx_orders_user_id | 普通 | user_id | 按用户查订单 |
      | orders | idx_orders_status_created | 联合 | status, created_at | 按状态+时间查询 |
      | order_items | idx_order_items_order_id | 普通 | order_id | 按订单查明细 |
      
      ---
      
      ## 6. 分库分表策略
      
      > 如数据量较小可跳过本节。
      
      | 维度 | 策略 | 说明 |
      |------|------|------|
      | 分库 | 按 user_id 取模 | 16 库 |
      | 分表 | 按 order_id 取模 | 每库 64 表 |
      | 路由规则 | user_id % 16 → 库,order_id % 64 → 表 | - |
      
      ---
      
      ## 7. 数据迁移方案
      
      ### 7.1 DDL 变更脚本
      
      ```sql
      -- V1.0.0 初始化
      CREATE TABLE orders (
          id BIGINT NOT NULL AUTO_INCREMENT,
          order_no VARCHAR(32) NOT NULL,
          user_id BIGINT NOT NULL,
          status TINYINT NOT NULL DEFAULT 0,
          total_amount INT NOT NULL DEFAULT 0,
          pay_amount INT NOT NULL DEFAULT 0,
          remark VARCHAR(500) DEFAULT NULL,
          paid_at DATETIME DEFAULT NULL,
          created_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
          updated_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
          created_by VARCHAR(64) DEFAULT NULL,
          updated_by VARCHAR(64) DEFAULT NULL,
          is_deleted TINYINT(1) NOT NULL DEFAULT 0,
          PRIMARY KEY (id),
          UNIQUE KEY uk_orders_order_no (order_no),
          KEY idx_orders_user_id (user_id),
          KEY idx_orders_status_created (status, created_at)
      ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='订单主表';
      ```
      
      ### 7.2 回滚脚本
      
      ```sql
      DROP TABLE IF EXISTS orders;
      DROP TABLE IF EXISTS order_items;
      ```
      
      ---
      
      ## 8. 评审记录
      
      | 日期 | 评审人 | 问题 | 处理结果 |
      |------|--------|------|----------|
      
      ---
      
      **关联文档:**
      - 需求文档:`docs/01_requirements/prd/`
      - API 设计:`docs/02_design/api/`
      - 架构设计:`docs/02_design/architecture/`
      
  • SKILL.md 14.3 KB
    ---
    name: pdlc-adopt
    description: 旧项目接入 PDLC
    argument-hint: [项目目录]
    allowed-tools: Read, Write, Edit, Glob, Grep, Bash
    layer: 3
    stage: lifecycle
    produces:
      - docs/**
    requires: []
    next_step: null
    terminal_state: null
    ---
    
    # 旧项目接入 PDLC
    
    <!-- @include templates/prompts/iron-law.md(已内联于下方,无需另读) -->
    ⛔ **IRON LAW · 不可违反的硬门禁**
    
    以下规则为**不可协商**的执行约束:
    
    1. **文件必须落盘**:所有带编号(功能ID / 缺陷ID)的文档,必须作为实际文件写入磁盘,不可仅在对话中输出。
    2. **阶段必须落章**:每个阶段完成后必须在状态机 `docs/.pdlc-state/<feature-id>.json` 追加 history,不可跳过。
    3. **测试必须存在**:进入 `/pdlc-implement` 前,对应测试必须存在且处于红灯状态。违反则中止。
    4. **自检必须执行**:段二自检为强制步骤,不得以"已经很好了"为由跳过。
    5. **防循环**:段三修复为单次,不递归。无法自动修复的问题记录到报告,继续往下走。
    6. **状态必推进**:成功执行某 phase 后 `current_stage` 必须变更。收尾时若发现 `current_stage` 未推进,视为失败并报错,**不得静默返回**(防止外层循环拿滞后的状态空转烧额度)。唯一例外:命中人工点主动 block 时,`current_stage` 保持不变但必须写 `last_phase_result.ok=false` + `blocked_reason`。
    
    **违反任一条 = 立即中止当前命令,输出违规详情,等待人工介入。**
    <!-- @include-end templates/prompts/iron-law.md -->
    
    扫描现有项目结构,逆向生成基线文档,并进行健康检查发现潜在问题。让旧项目平滑接入 PDLC 流程。
    
    ## 核心原则
    
    - **只生文档,不动代码**:不修改任何现有代码,仅生成基线文档
    - **增量接入**:旧代码标记为"已接入基线",只有新功能走完整 PDLC
    - **守卫畅通**:生成的基线文档满足守卫检查,后续命令不再被阻断
    
    ## 子命令解析
    
    从本命令的参数中解析子命令:
    
    | 子命令 | 说明 |
    |--------|------|
    | `scan` | 扫描项目,输出接入报告 + 健康检查报告(不写任何文件,只读分析) |
    | `init` | 根据扫描结果,逆向生成基线文档到 docs/ 目录 |
    
    如果未提供子命令或无法识别,输出以上帮助信息后停止。
    
    ---
    
    ## scan 子命令
    
    **全程只读,不创建/修改任何文件,只在终端输出报告。**
    
    ### 第一步:项目结构识别
    
    1. **技术栈检测**
       - 检查特征文件:`package.json`、`pom.xml`、`build.gradle`、`go.mod`、`requirements.txt`、`Pipfile`、`Cargo.toml`、`mix.exs` 等
       - 识别框架:Spring Boot、Express、NestJS、FastAPI、Gin、Echo、Django、Rails 等
       - 检查前端框架:`react`、`vue`、`next`、`angular`(从 package.json 依赖推断)
    
    2. **服务/应用识别**
       - 微服务:扫描 `backend/services/` 或具有独立启动入口的子目录
       - 单体服务:根目录即为服务
       - 前端应用:扫描 `frontend/`、`web/`、`app/` 或具有前端框架特征的目录
       - 记录每个服务/应用的名称、技术栈、入口文件
    
    3. **数据库识别**
       - 从配置文件推断数据库类型(MySQL/PostgreSQL/MongoDB/Redis 等)
       - 扫描 ORM 配置(TypeORM/Sequelize/GORM/SQLAlchemy/MyBatis/JPA 等)
       - 检查已有 migration 目录
    
    ### 第二步:API 接口提取
    
    按技术栈扫描路由定义:
    
    | 技术栈 | 扫描目标 |
    |--------|---------|
    | Spring Boot | `@RequestMapping`、`@GetMapping`、`@PostMapping` 等注解 |
    | Express/NestJS | `router.get/post/put/delete`、`@Get/@Post` 装饰器 |
    | FastAPI | `@app.get/post/put/delete`、`@router.get/post` |
    | Go (Gin/Echo) | `r.GET/POST/PUT/DELETE`、`e.GET/POST` |
    | Django | `urlpatterns`、`path()`、`re_path()` |
    
    提取信息:HTTP 方法、路径、处理函数名、参数(如能识别)。
    
    ### 第三步:数据库结构提取
    
    | 来源 | 提取方式 |
    |------|---------|
    | ORM Model | 扫描实体类/模型定义,提取表名、字段名、字段类型、关联关系 |
    | Migration 文件 | 扫描 `migrations/`、`db/migrate/` 等目录,提取 DDL 变更历史 |
    | SQL 文件 | 扫描 `*.sql` 文件,提取 CREATE TABLE 语句 |
    
    ### 第四步:已有文档检测
    
    - 检查 `README.md` 内容丰富度
    - 检查 `docs/` 目录及子目录
    - 检查是否已有 PDLC 文档(`docs/01_requirements/`、`docs/02_design/` 等)
    - 如已有 PDLC 文档,标记为"已存在,跳过生成"
    
    ### 第五步:健康检查(潜在问题扫描)
    
    对代码进行静态分析级别的检查,按严重程度分级:
    
    #### 🔴 阻断级(必须修复才能安全上线)
    
    - **安全漏洞**
      - SQL 拼接(字符串拼接构建 SQL 而非参数化查询)
      - 硬编码密钥/密码(代码中直接写死的 secret、password、api_key)
      - 未鉴权的敏感接口(涉及用户数据的接口无鉴权中间件)
    
    #### 🟠 严重级(高风险,建议尽快修复)
    
    - **数据风险**
      - 高频查询字段无索引(WHERE/JOIN 条件中的字段无对应索引)
      - 外键关系逻辑不一致(代码中的关联关系与数据库定义不匹配)
      - 无软删除机制(直接物理删除,无法恢复)
    - **API 风险**
      - 接口无参数校验(直接使用用户输入,无 validation)
      - 接口无错误处理(缺少 try-catch 或错误中间件)
    
    #### 🟡 一般级(影响质量,建议改进)
    
    - **一致性问题**
      - 文档与代码不一致(如 README 描述的接口与实际不符)
      - Model 定义与数据库 schema 不一致
      - 命名不规范(混用 camelCase 和 snake_case)
    - **代码质量**
      - N+1 查询模式(循环中执行数据库查询)
      - 未使用的依赖包
      - 重复代码块
    
    #### 🔵 建议级(优化项)
    
    - 缺少日志记录
    - 缺少监控指标
    - 缺少 API 文档注解
    - 测试覆盖率不足
    
    ### 输出格式
    
    ```
    📊 项目扫描报告
    ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
    
    ## 一、项目结构
    
    | 项目 | 详情 |
    |------|------|
    | 技术栈 | Java Spring Boot 2.7 + MySQL 8.0 |
    | 后端服务 | 3 个(user-service, order-service, product-service) |
    | 前端应用 | 1 个(web-admin, React 18) |
    | 数据库 | MySQL(12 张表) |
    | 已有文档 | README.md(简略)、无 PDLC 文档 |
    
    ## 二、可生成的基线文档
    
    | 文档类型 | 是否可生成 | 内容预估 |
    |---------|-----------|---------|
    | 基线 PRD | ✅ 可生成 | 从 README + 服务结构推断,需人工补充业务目标 |
    | API 设计文档 | ✅ 可生成 | 提取到 45 个接口定义 |
    | DB 设计文档 | ✅ 可生成 | 提取到 12 张表结构 |
    | 架构概要 | ✅ 可生成 | 3 服务 + 1 前端的依赖关系图 |
    
    ## 三、健康检查报告
    
    ### 🔴 阻断 (2)
    
    | # | 位置 | 问题 | 风险 | 修复建议 |
    |---|------|------|------|---------|
    | 1 | user-service/src/.../UserDao.java:45 | SQL 字符串拼接 | SQL 注入 | 改用 PreparedStatement 参数化查询 |
    | 2 | config/application.yml:12 | 数据库密码明文硬编码 | 凭证泄露 | 使用环境变量或密钥管理服务 |
    
    ### 🟠 严重 (3)
    ...
    
    ### 🟡 一般 (5)
    ...
    
    ### 🔵 建议 (4)
    ...
    
    ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
    统计:🔴 2 | 🟠 3 | 🟡 5 | 🔵 4 | 总计 14 个问题
    
    💡 建议:先修复 🔴 阻断级问题,再运行 /pdlc-adopt init 生成基线文档。
    ```
    
    ---
    
    ## init 子命令
    
    **建议先运行 `scan` 查看报告,再运行 `init` 生成文档。**
    
    ### 执行流程
    
    1. 执行与 `scan` 相同的扫描逻辑(收集项目信息)
    2. 检查 `docs/` 下是否已有同名基线文档,已存在则跳过(避免覆盖)
    3. 创建 PDLC 标准目录结构(如不存在):
       ```
       docs/
       ├── 00_standards/
       ├── 01_requirements/prd/
       ├── 02_design/
       │   ├── api/
       │   ├── architecture/
       │   └── database/
       ├── 03_development/
       ├── 04_testing/
       ├── 05_deployment/
       └── 07_reviews/
       ```
    4. 逆向生成基线文档(详见下方)
    5. 生成接入状态文件
    6. 输出生成结果摘要
    
    ### 基线文档生成规则
    
    所有基线文档以 `ADOPTED-` 前缀命名,与正常 PDLC 文档区分。
    
    所有文档头部包含接入标记:
    ```markdown
    <!-- PDLC-TRACE -->
    <!-- PDLC-ADOPTED -->
    <!-- 项目名称: my-project -->
    <!-- 接入日期: YYYY-MM-DD -->
    <!-- 阶段: 接入基线 -->
    <!-- 说明: 由 /pdlc-adopt init 自动生成,内容基于代码逆向推断,需人工审核补充 -->
    ```
    
    #### 基线 PRD
    
    - 路径:`docs/01_requirements/prd/ADOPTED-<项目名>-prd.md`
    - 内容来源:README + 服务列表 + API 接口分组推断功能模块
    - 包含:项目背景(从 README 提取)、功能模块清单(从代码推断)、技术栈说明
    - **明确标注**:`> ⚠️ 以下内容由代码逆向推断,业务目标和用户故事需人工补充`
    
    #### 基线 API 设计文档
    
    - 路径:`docs/02_design/api/ADOPTED-<服务名>-api.md`(每个服务一个)
    - 内容来源:路由定义扫描结果
    - 包含:接口列表表格(方法、路径、描述、参数)、按模块分组
    - 使用 本 skill 目录下的 `assets/api-design-template.md` 的格式
    - **明确标注**:`> ⚠️ 接口描述基于函数名推断,请核对补充`
    
    #### 基线 DB 设计文档
    
    - 路径:`docs/02_design/database/ADOPTED-<服务名>-db.md`(每个服务一个)
    - 内容来源:ORM Model / Migration / SQL 文件
    - 包含:ER 关系图(文本格式)、表结构定义、索引设计、公共字段约定
    - 使用 本 skill 目录下的 `assets/db-design-template.md` 的格式
    - **明确标注**:`> ⚠️ 表结构从代码提取,请核对与实际数据库是否一致`
    
    #### 基线架构文档
    
    - 路径:`docs/02_design/architecture/ADOPTED-<项目名>-arch.md`
    - 内容来源:服务列表 + 依赖关系 + 配置文件
    - 包含:系统架构图(文本格式)、服务清单和职责、技术栈说明、服务间通信方式
    - **明确标注**:`> ⚠️ 架构描述基于代码结构推断,请核对补充`
    
    #### 接入状态文件
    
    - 路径:`docs/00_standards/adopt-status.md`
    - 记录各模块的 PDLC 接入状态:
    
    ```markdown
    # PDLC 接入状态
    
    > 由 `/pdlc-adopt init` 生成于 YYYY-MM-DD
    
    ## 接入概况
    
    | 模块 | 基线 PRD | API 设计 | DB 设计 | 架构文档 | 测试覆盖 | 状态 |
    |------|---------|---------|---------|---------|---------|------|
    | user-service | ✅ | ✅ | ✅ | ✅ | ⚠️ 待补充 | 基线完成 |
    | order-service | ✅ | ✅ | ✅ | ✅ | ⚠️ 待补充 | 基线完成 |
    
    ## 健康检查问题跟踪
    
    | # | 级别 | 位置 | 问题 | 状态 |
    |---|------|------|------|------|
    | 1 | 🔴 | UserDao.java:45 | SQL 拼接 | 待修复 |
    | 2 | 🔴 | application.yml:12 | 密码硬编码 | 待修复 |
    
    ## 后续建议
    
    1. 人工审核基线文档,补充业务目标和用户故事
    2. 修复 🔴 阻断级健康问题
    3. 新功能开发使用 `/pdlc-feature` 走完整 PDLC 流程
    4. 旧功能改造时从 `/pdlc-design` 开始(基线 PRD 已满足守卫检查)
    5. 逐步为核心模块补充单元测试(使用 `/pdlc-tdd`)
    ```
    
    ---
    
    ## 要求
    
    <!-- @include templates/prompts/output-language.md(已内联于下方,无需另读) -->
    🌐 **Output language for generated artifacts**
    
    All generated artifacts (PRDs, design docs, code comments, review reports,
    test plans, deployment manuals, changelog entries, etc.) follow this policy:
    
    1. **Default — match the conversation language exactly**:
       - 用户用中文与 Claude 对话 → 产中文文档、中文代码注释、中文报告
       - User talks to Claude in English → produce English artifacts
       - User talks in another language → produce artifacts in that language
       - **Never silently default to a fixed language regardless of the user's input.**
    
    2. **Explicit override always wins**: when the user specifies a language for
       an artifact (e.g. "write the PRD in English", "用英文写 API 设计文档",
       "output the deploy doc in Japanese"), use that language for that artifact,
       regardless of conversation language.
    
    3. **Mixed-language requirements**: if the user wants some artifacts in one
       language and others in a different language (common: Chinese PRD + English
       API docs for partners), honour each per-artifact instruction.
    
    4. **Uncertain**: if you cannot reliably detect the conversation language,
       ask once before producing the first artifact.
    
    This policy applies to **content** (prose, comments, headings). It does
    **not** override technical conventions like English variable names, English
    git commit subjects, or English error codes when the project's conventions
    require them.
    <!-- @include-end templates/prompts/output-language.md -->
    - scan 子命令**严格只读**,不创建/修改任何文件
    - init 子命令不修改任何现有代码文件,只在 `docs/` 目录下创建文档
    - 已存在的文档不覆盖,跳过并提示
    - 基线文档中需人工补充的部分用 `> ⚠️` 引用块明确标注
    - 健康检查问题必须给出具体的文件路径和行号
    - 读取 本 skill 目录下的 `assets/adopt-report-template.md` 模板作为格式参考
    
    接入操作: $ARGUMENTS
    
    <!-- @include templates/prompts/handoff.md(已内联于下方,无需另读) -->
    ## 段四:交接(Handoff)
    
    命令完成后必须输出以下格式的最终消息:
    
    ```
    ✅ <阶段名> 完成:<主要产出物路径>
    📊 自检:<通过数>/<总数> 通过(若有未通过,附要点)
    📦 状态快照:docs/.pdlc-state/<feature-id>.json
    👉 下一步:/pdlc-<next_step>
       (如果有分叉)或 /pdlc-<alt>(条件:<选择依据>)
    ```
    
    **规则:**
    - 主流程命令(写状态机的命令;下一跳见正文里「本命令的状态机取值」)必须显式输出"下一步",不可省略
    - 工具型命令(Layer 3)可以没有 `next_step`,此时输出 `👉 下一步:(本次流程结束,无后续)`
    - 分叉场景必须说明**选择条件**,例如"若需补充测试用例 → `/pdlc-tdd`;若测试已齐 → `/pdlc-review`"
    <!-- @include-end templates/prompts/handoff.md -->
    
    **本命令的 handoff 输出:**
    
    ```
    ✅ PDLC 接入基线文档 完成
    📦 产出:docs/**(基线文档集)
    👉 下一步:(本次流程结束,无后续)
    ```
    

Comments (0)

Sign in to join the conversation.

No comments yet.

Reviews (0)

No reviews yet.

Related