ethan-skill 1.6.0 → 1.7.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (42) hide show
  1. package/dist/cli/index.js +21 -21
  2. package/dist/cli/index.js.map +1 -1
  3. package/dist/loader/custom-pipeline-loader.d.ts +15 -0
  4. package/dist/loader/custom-pipeline-loader.d.ts.map +1 -0
  5. package/dist/loader/custom-pipeline-loader.js +131 -0
  6. package/dist/loader/custom-pipeline-loader.js.map +1 -0
  7. package/dist/skills/11-api-design.d.ts +3 -0
  8. package/dist/skills/11-api-design.d.ts.map +1 -0
  9. package/dist/skills/11-api-design.js +214 -0
  10. package/dist/skills/11-api-design.js.map +1 -0
  11. package/dist/skills/12-security-review.d.ts +3 -0
  12. package/dist/skills/12-security-review.d.ts.map +1 -0
  13. package/dist/skills/12-security-review.js +194 -0
  14. package/dist/skills/12-security-review.js.map +1 -0
  15. package/dist/skills/13-deployment.d.ts +3 -0
  16. package/dist/skills/13-deployment.d.ts.map +1 -0
  17. package/dist/skills/13-deployment.js +189 -0
  18. package/dist/skills/13-deployment.js.map +1 -0
  19. package/dist/skills/14-prd.d.ts +3 -0
  20. package/dist/skills/14-prd.d.ts.map +1 -0
  21. package/dist/skills/14-prd.js +214 -0
  22. package/dist/skills/14-prd.js.map +1 -0
  23. package/dist/skills/index.d.ts +4 -0
  24. package/dist/skills/index.d.ts.map +1 -1
  25. package/dist/skills/index.js +17 -1
  26. package/dist/skills/index.js.map +1 -1
  27. package/dist/skills/pipeline.d.ts +2 -1
  28. package/dist/skills/pipeline.d.ts.map +1 -1
  29. package/dist/skills/pipeline.js +41 -3
  30. package/dist/skills/pipeline.js.map +1 -1
  31. package/package.json +1 -1
  32. package/rules/claude-code/CLAUDE.md +640 -2
  33. package/rules/cline/.clinerules +577 -1
  34. package/rules/codebuddy/CODEBUDDY.md +617 -1
  35. package/rules/continue/.continuerules +577 -1
  36. package/rules/copilot/copilot-instructions.md +605 -1
  37. package/rules/cursor/.cursorrules +635 -1
  38. package/rules/cursor/smart-flow.mdc +635 -1
  39. package/rules/jetbrains/smart-flow.md +605 -1
  40. package/rules/lingma/smart-flow.md +614 -2
  41. package/rules/windsurf/.windsurf/rules/smart-flow.md +606 -2
  42. package/rules/zed/smart-flow.rules +573 -1
@@ -1,11 +1,11 @@
1
1
  # Ethan v1.6.0
2
2
 
3
- > Auto-generated from src/skills/ | 2026-03-26T15:25:56.504Z
3
+ > Auto-generated from src/skills/ | 2026-03-31T07:56:06.363Z
4
4
  > Do not edit manually. Source: src/skills/
5
5
 
6
6
  ## Ethan
7
7
 
8
- 本文件配置了 10 个标准化工作流节点(Skill)。当用户输入触发词时,严格按对应 Skill 的步骤执行,输出遵循各 Skill 的格式模板。
8
+ 本文件配置了 14 个标准化工作流节点(Skill)。当用户输入触发词时,严格按对应 Skill 的步骤执行,输出遵循各 Skill 的格式模板。
9
9
 
10
10
  ## 执行原则
11
11
 
@@ -813,4 +813,642 @@ Why 5: 为什么没有自动化?→ CI/CD 流程中没有这个步骤
813
813
 
814
814
  ---
815
815
 
816
+ ### 11. 接口设计 (`api-design`)
817
+
818
+ **描述**: 基于业务需求设计清晰、可演进的 RESTful / GraphQL 接口规范,输出接口文档
819
+
820
+ **触发词**: `接口设计`, `API 设计`, `api design`, `设计接口`, `接口规范`, `RESTful 设计`, `GraphQL 设计`, `设计 REST API`, `设计 API`, `@ethan api`, `@ethan 接口`, `/接口设计`
821
+
822
+ **执行步骤**:
823
+
824
+ #### 1. 明确业务边界与资源模型
825
+
826
+ - 梳理本次需要暴露的**核心业务实体**(资源)
827
+ - 确定资源间的关联关系:一对一 / 一对多 / 多对多
828
+ - 识别操作类型:CRUD、操作型动作(如 /activate、/cancel)
829
+ - 确认调用方(Web / App / 第三方 / 内部服务)
830
+ - 确认认证方式:JWT / OAuth2 / API Key / Session
831
+
832
+ #### 2. 设计 URL 路径与 HTTP 方法
833
+
834
+ 遵循 REST 语义设计路径:
835
+
836
+ **命名规范**
837
+ - 使用复数名词表示集合:`/users`、`/orders`
838
+ - 资源嵌套不超过 2 层:`/users/{id}/orders`
839
+ - 动作使用子资源表达:`POST /orders/{id}/cancel`
840
+ - 使用小写 kebab-case:`/user-profiles`
841
+
842
+ **HTTP 方法映射**
843
+ | 方法 | 场景 | 幂等性 |
844
+ |------|------|--------|
845
+ | GET | 查询(单个/列表) | ✅ |
846
+ | POST | 创建 / 触发动作 | ❌ |
847
+ | PUT | 全量更新 | ✅ |
848
+ | PATCH | 局部更新 | ✅ |
849
+ | DELETE | 删除 | ✅ |
850
+
851
+ **版本控制**
852
+ - URL 版本:`/api/v1/users`(推荐,可见性高)
853
+ - Header 版本:`Accept: application/vnd.api+json;version=1`
854
+
855
+ #### 3. 设计请求与响应体
856
+
857
+ **请求体规范**
858
+ - Content-Type 统一 `application/json`
859
+ - 字段使用 camelCase(Web 侧)或 snake_case(按团队规范统一)
860
+ - 必填字段明确标注,给出示例值
861
+ - 枚举值给出完整列表和含义
862
+
863
+ **统一响应体格式**
864
+ ```json
865
+ {
866
+ "code": 0, // 0=成功,非0=错误码
867
+ "message": "ok", // 描述信息
868
+ "data": { ... }, // 业务数据(成功时)
869
+ "requestId": "uuid" // 链路追踪 ID
870
+ }
871
+ ```
872
+
873
+ **分页响应**
874
+ ```json
875
+ {
876
+ "code": 0,
877
+ "data": {
878
+ "list": [...],
879
+ "total": 100,
880
+ "page": 1,
881
+ "pageSize": 20
882
+ }
883
+ }
884
+ ```
885
+
886
+ **HTTP 状态码使用**
887
+ - 200 OK / 201 Created / 204 No Content
888
+ - 400 Bad Request(参数错误)/ 401 Unauthorized / 403 Forbidden
889
+ - 404 Not Found / 409 Conflict / 422 Unprocessable Entity
890
+ - 500 Internal Server Error(不暴露内部细节)
891
+
892
+ #### 4. 设计错误码体系
893
+
894
+ 建立业务错误码规范,避免所有错误都返回 500:
895
+
896
+ **错误码设计**
897
+ ```
898
+ 模块前缀 + 序号:
899
+ 1001xx — 用户模块
900
+ 1002xx — 订单模块
901
+ 1003xx — 支付模块
902
+ ```
903
+
904
+ **示例**
905
+ ```json
906
+ {
907
+ "code": 100101,
908
+ "message": "用户不存在",
909
+ "data": null,
910
+ "requestId": "abc-123"
911
+ }
912
+ ```
913
+
914
+ - 错误信息面向**开发者**(不直接展示给终端用户)
915
+ - 敏感错误(如数据库异常)统一返回 `"系统繁忙,请稍后重试"`
916
+ - 提供错误码文档(维护在 API 文档中)
917
+
918
+ #### 5. 安全与性能设计
919
+
920
+ **安全**
921
+ - 所有修改类操作(POST/PUT/PATCH/DELETE)必须鉴权
922
+ - 列表接口加入数据权限隔离(用户只能看自己的数据)
923
+ - 文件上传接口限制文件类型和大小
924
+ - 敏感字段(手机号、身份证)在响应中脱敏:`138****8888`
925
+ - 接口加入速率限制(Rate Limiting)
926
+
927
+ **性能**
928
+ - 列表接口支持分页(禁止无限制全量返回)
929
+ - 大数据量接口提供游标分页(cursor-based)
930
+ - 支持字段过滤:`?fields=id,name,email`
931
+ - 耗时操作改为异步:POST 立即返回 `taskId`,GET 轮询状态
932
+
933
+ #### 6. 输出接口规范文档
934
+
935
+ 按以下格式输出每个接口的文档:
936
+
937
+ ```markdown
938
+ ## POST /api/v1/users — 创建用户
939
+
940
+ **描述**:注册新用户账号
941
+
942
+ **认证**:不需要
943
+
944
+ **请求体**
945
+ | 字段 | 类型 | 必填 | 描述 |
946
+ |------|------|------|------|
947
+ | username | string | ✅ | 用户名,3-20字符,字母数字下划线 |
948
+ | email | string | ✅ | 邮箱地址 |
949
+ | password | string | ✅ | 密码,最少8位 |
950
+
951
+ **响应示例(201 Created)**
952
+ ```json
953
+ {
954
+ "code": 0,
955
+ "message": "ok",
956
+ "data": {
957
+ "id": "usr_abc123",
958
+ "username": "john_doe",
959
+ "email": "john@example.com",
960
+ "createdAt": "2024-01-01T00:00:00Z"
961
+ }
962
+ }
963
+ ```
964
+
965
+ **错误码**
966
+ | code | message | 场景 |
967
+ |------|---------|------|
968
+ | 100101 | 邮箱已被注册 | 邮箱重复 |
969
+ | 100102 | 用户名不合法 | 格式校验失败 |
970
+ ```
971
+
972
+ **输出格式**: Markdown 接口规范文档,含路径设计、请求/响应体、错误码表、安全说明,风格参考 OpenAPI 3.0
973
+
974
+ **注意事项**:
975
+ - URL 路径不使用动词,操作语义由 HTTP 方法表达
976
+ - GraphQL 场景用 Schema First 原则,先定义类型再实现 resolver
977
+ - 接口变更优先保持向后兼容,破坏性变更必须升版本号
978
+ - 内部服务间调用(RPC/gRPC)可不遵循 REST 规范
979
+
980
+ ---
981
+
982
+ ### 12. 安全审查 (`security-review`)
983
+
984
+ **描述**: 基于 OWASP Top 10 对代码和依赖进行安全扫描,识别漏洞并给出修复建议
985
+
986
+ **触发词**: `安全审查`, `安全扫描`, `安全检查`, `漏洞扫描`, `security review`, `security audit`, `OWASP`, `安全风险`, `代码安全`, `@ethan 安全`, `@ethan security`, `/安全审查`
987
+
988
+ **执行步骤**:
989
+
990
+ #### 1. 确定审查范围
991
+
992
+ - 明确审查对象:代码变更 / 整个模块 / 依赖包 / 部署配置
993
+ - 确认技术栈(Node.js / Java / Python / 前端框架等)
994
+ - 了解数据敏感程度:是否涉及 PII(用户个人信息)、金融数据
995
+ - 确认暴露面:公网 API / 内部服务 / 用户上传入口
996
+ - 收集现有安全策略(如 CSP、CORS 配置)
997
+
998
+ #### 2. OWASP Top 10 逐项检查
999
+
1000
+ 按 OWASP 2021 Top 10 逐项扫描:
1001
+
1002
+ **A01 失效的访问控制**
1003
+ - 垂直越权:普通用户能否访问管理员接口?
1004
+ - 水平越权:用户A能否读取用户B的数据?
1005
+ - IDOR(不安全的直接对象引用):接口参数是否直接暴露内部 ID?
1006
+ - 前端隐藏菜单 ≠ 权限控制,后端必须强制校验
1007
+
1008
+ **A02 加密失效**
1009
+ - 密码是否使用 bcrypt/argon2(禁止 MD5/SHA1)
1010
+ - 传输层是否强制 HTTPS
1011
+ - 敏感字段(身份证、银行卡)是否静态加密存储
1012
+ - Cookie 是否设置 Secure + HttpOnly + SameSite
1013
+
1014
+ **A03 注入**
1015
+ - SQL 注入:是否使用 ORM 参数化查询(禁止字符串拼接)
1016
+ - XSS:用户输入是否经过 HTML 转义后再输出
1017
+ - Command 注入:是否调用 shell 命令且参数含用户输入
1018
+ - LDAP/XML/NOSQL 注入场景检查
1019
+
1020
+ **A04 不安全设计**
1021
+ - 是否存在无限重试(暴力破解风险)
1022
+ - 重要操作缺少二次确认(如删除账号、大额转账)
1023
+ - 密码重置流程是否可被枚举
1024
+
1025
+ **A05 安全配置错误**
1026
+ - 生产环境是否关闭 Debug 模式、详细错误堆栈
1027
+ - 是否暴露 `.env`、`.git`、`node_modules` 等目录
1028
+ - 默认账号/密码是否修改
1029
+ - CORS 是否配置为 `*`(应按域名白名单)
1030
+
1031
+ **A06 自带缺陷和过时的组件**
1032
+ - 运行 `npm audit` / `pip-audit` / `mvn dependency-check`
1033
+ - 检查高危 CVE(CVSS ≥ 7.0)
1034
+ - 框架和运行时是否在安全维护期内
1035
+
1036
+ **A07 身份识别和认证失败**
1037
+ - JWT 是否验证签名和过期时间
1038
+ - Session 是否在登出时服务端失效
1039
+ - 多因素认证(MFA)是否支持
1040
+
1041
+ **A08 软件和数据完整性失败**
1042
+ - 第三方 CDN 资源是否加 SRI(Subresource Integrity)
1043
+ - CI/CD 管道是否允许未授权修改部署配置
1044
+ - 序列化数据是否来自可信来源
1045
+
1046
+ **A09 安全日志和监控失败**
1047
+ - 登录成功/失败是否记录 IP 和时间戳
1048
+ - 高危操作(删除、权限变更)是否有审计日志
1049
+ - 日志中是否意外记录了密码或 Token
1050
+
1051
+ **A10 服务端请求伪造(SSRF)**
1052
+ - 接受 URL 参数的接口是否限制可访问的域名/IP
1053
+ - 是否阻断对内网地址(10.x/172.x/192.168.x/127.x)的请求
1054
+
1055
+ #### 3. 密钥与凭据扫描
1056
+
1057
+ - 扫描代码中是否硬编码了:API Key、数据库密码、JWT Secret、云账号 AK/SK
1058
+ - 检查 `.env` 文件是否被提交到 Git(查 `.gitignore`)
1059
+ - 历史 commit 是否包含敏感信息(可用 `git log -S "password"` 搜索)
1060
+ - 推荐工具:
1061
+ - `gitleaks` — 扫描 git 历史中的密钥
1062
+ - `trufflehog` — 高熵字符串检测
1063
+ - GitHub Secret Scanning(如在 GitHub 托管)
1064
+
1065
+ #### 4. 依赖漏洞扫描
1066
+
1067
+ 根据技术栈运行对应命令:
1068
+
1069
+ ```bash
1070
+ # Node.js
1071
+ npm audit --audit-level=high
1072
+ npx audit-ci --high
1073
+
1074
+ # Python
1075
+ pip install pip-audit && pip-audit
1076
+
1077
+ # Java/Maven
1078
+ mvn dependency-check:check
1079
+
1080
+ # Docker 镜像
1081
+ trivy image your-image:tag
1082
+ ```
1083
+
1084
+ 重点关注:
1085
+ - CVSS Score ≥ 7.0 的高危/严重漏洞
1086
+ - 直接依赖优先修复(间接依赖通过升级父包解决)
1087
+ - 有修复版本的立即升级,无修复的评估缓解措施
1088
+
1089
+ #### 5. 按风险级别输出报告
1090
+
1091
+ ```markdown
1092
+ ## 安全审查报告
1093
+
1094
+ **审查范围**:[模块/文件/PR]
1095
+ **审查日期**:[日期]
1096
+ **整体风险等级**:🔴 Critical / 🟠 High / 🟡 Medium / 🟢 Low
1097
+
1098
+ ---
1099
+
1100
+ ### 🔴 Critical(立即修复,阻止上线)
1101
+
1102
+ - [ ] `auth.ts:45` SQL 注入漏洞:用户 ID 直接拼接查询字符串
1103
+ **修复**:使用 ORM 参数化查询 `db.query('SELECT * FROM users WHERE id = ?', [id])`
1104
+ **CVE**:— **CVSS**:9.8
1105
+
1106
+ ### 🟠 High(本次迭代修复)
1107
+
1108
+ - [ ] `upload.ts:23` 文件上传未限制类型,可上传 .php 执行文件
1109
+ **修复**:白名单校验扩展名,并检查 MIME type
1110
+
1111
+ ### 🟡 Medium(计划修复)
1112
+
1113
+ - [ ] 缺少登录频率限制(Rate Limiting),存在暴力破解风险
1114
+ **修复**:引入 express-rate-limit,5次失败后锁定15分钟
1115
+
1116
+ ### 🟢 Low(建议改进)
1117
+
1118
+ - [ ] Session Cookie 缺少 SameSite=Strict 属性
1119
+
1120
+ ### ✅ 已做好的安全措施
1121
+ - [值得肯定的安全实践]
1122
+
1123
+ ### 统计
1124
+ Critical: X | High: Y | Medium: Z | Low: W
1125
+ ```
1126
+
1127
+ **输出格式**: Markdown 安全审查报告,含 OWASP 维度检查结果、风险级别(Critical/High/Medium/Low)、修复建议和优先级
1128
+
1129
+ **注意事项**:
1130
+ - Critical 问题必须在上线前修复,不接受任何例外
1131
+ - 前端安全校验只是 UX 辅助,所有安全逻辑必须在后端实现
1132
+ - 依赖漏洞扫描建议加入 CI 流程自动运行(每次 PR 触发)
1133
+ - 安全审查不能替代专业渗透测试,重大系统上线前建议委托专业团队
1134
+
1135
+ ---
1136
+
1137
+ ### 13. 部署上线 (`deployment`)
1138
+
1139
+ **描述**: 系统化执行部署上线流程,覆盖预检、发布、验证和回滚,保障变更安全落地
1140
+
1141
+ **触发词**: `部署上线`, `上线`, `发布`, `deploy`, `发版`, `部署`, `上线流程`, `发布流程`, `怎么上线`, `准备上线`, `@ethan 上线`, `@ethan deploy`, `/部署上线`
1142
+
1143
+ **执行步骤**:
1144
+
1145
+ #### 1. 上线前预检(Pre-flight)
1146
+
1147
+ 在发布代码前完成以下检查,任何一项 ❌ 不得上线:
1148
+
1149
+ **代码质量**
1150
+ - [ ] 所有 CI 检查通过(单测、集成测试、Lint)
1151
+ - [ ] Code Review 已完成,无 Blocker 问题
1152
+ - [ ] 安全扫描无 Critical/High 级别漏洞(`npm audit`)
1153
+ - [ ] 变更已在 Staging/预生产环境验证通过
1154
+
1155
+ **配置核查**
1156
+ - [ ] 生产环境配置(数据库、Redis、MQ 地址)已更新
1157
+ - [ ] 环境变量已在目标环境注入(不含硬编码的密钥)
1158
+ - [ ] Feature Flag 配置正确(灰度开关状态)
1159
+
1160
+ **数据库变更**
1161
+ - [ ] 数据库迁移脚本已备份原表结构
1162
+ - [ ] 迁移脚本已在 Staging 执行并验证
1163
+ - [ ] 大表 DDL 变更(加字段/加索引)在低峰期执行,评估锁表时间
1164
+
1165
+ **依赖与基础设施**
1166
+ - [ ] 第三方服务(支付/短信/CDN)已确认可用
1167
+ - [ ] 新增的 Redis Key / MQ Topic 已提前创建
1168
+ - [ ] 容器镜像已构建并推送到镜像仓库
1169
+
1170
+ **通知**
1171
+ - [ ] 上线时间已知会相关团队(QA / 前端 / 产品 / 运维)
1172
+ - [ ] 回滚预案已准备(上个版本的镜像 Tag 或 SQL 回滚脚本)
1173
+
1174
+ #### 2. 选择发布策略
1175
+
1176
+ 根据变更风险等级选择合适的发布策略:
1177
+
1178
+ **🟢 滚动发布(Rolling Update)**
1179
+ - 场景:低风险常规迭代
1180
+ - 方式:逐个 Pod/实例替换,始终保持一定数量可用
1181
+ - Kubernetes:`kubectl set image deployment/app app=image:v2`
1182
+ - 优点:无停机;缺点:同时存在新旧版本(需兼容)
1183
+
1184
+ **🟡 蓝绿部署(Blue/Green)**
1185
+ - 场景:中风险版本,需要快速回滚能力
1186
+ - 方式:并行运行两套环境,切换负载均衡流量
1187
+ - 优点:回滚只需切流量(秒级);缺点:资源成本翻倍
1188
+
1189
+ **🟠 灰度发布(Canary Release)**
1190
+ - 场景:高风险变更,需验证真实流量
1191
+ - 方式:先放 5%-10% 流量到新版本,观察监控后逐步扩量
1192
+ - 关键指标:错误率、P99 延迟、业务转化率
1193
+ - Nginx 示例:`split_clients "${remote_addr}" $upstream { 10% backend_v2; * backend_v1; }`
1194
+
1195
+ **🔴 停机发布(Maintenance Window)**
1196
+ - 场景:强破坏性变更(如数据库大规模迁移)
1197
+ - 提前在状态页通知用户,维护窗口选在凌晨低峰期
1198
+
1199
+ #### 3. 执行发布
1200
+
1201
+ **自动化流水线(推荐)**
1202
+ ```bash
1203
+ # GitOps 方式:更新镜像 Tag 触发 CD
1204
+ git tag v1.2.3 && git push origin v1.2.3
1205
+
1206
+ # 手动触发 GitHub Actions
1207
+ gh workflow run deploy.yml --field environment=production --field version=v1.2.3
1208
+ ```
1209
+
1210
+ **发布过程监控要点**
1211
+ - 实时观察 Pod 滚动状态:`kubectl rollout status deployment/app`
1212
+ - 监控健康检查端点(Liveness/Readiness Probe)
1213
+ - 观察 APM 工具(Datadog/SkyWalking)中错误率和延迟变化
1214
+ - 若部署过程中出现 CrashLoopBackOff,立即暂停并触发回滚
1215
+
1216
+ **数据库迁移执行顺序**
1217
+ 1. 先执行 向后兼容的迁移(如加字段,设默认值)
1218
+ 2. 发布新代码
1219
+ 3. 确认新代码运行稳定后,再执行清理旧逻辑的迁移
1220
+ (Expand-Contract 模式,避免新旧代码不兼容)
1221
+
1222
+ #### 4. 上线后验证
1223
+
1224
+ 发布完成后,在 **15 分钟内**完成以下验证:
1225
+
1226
+ **基础健康检查**
1227
+ - [ ] 所有实例健康检查端点 `/health` 返回 200
1228
+ - [ ] Pod/实例数量与预期一致(未发生缩减)
1229
+ - [ ] 无 OOMKilled 或高 CPU 异常
1230
+
1231
+ **监控告警**
1232
+ - [ ] 错误率(5xx)在基线水平(< 0.1%)
1233
+ - [ ] P99 响应时间未劣化(对比上线前)
1234
+ - [ ] 关键业务指标(下单量、登录量)趋势正常
1235
+
1236
+ **核心链路冒烟测试**
1237
+ - [ ] 用最高风险的 1-3 个核心功能人工验证
1238
+ - 示例:登录 → 查看商品 → 加购 → 提交订单
1239
+ - [ ] 检查日志无新增 ERROR 级别错误
1240
+
1241
+ **灰度扩量(Canary 场景)**
1242
+ ```
1243
+ 5% → 稳定 10min → 20% → 稳定 10min → 50% → 100%
1244
+ ```
1245
+
1246
+ #### 5. 回滚方案
1247
+
1248
+ **触发回滚的条件(满足任一立即回滚)**
1249
+ - 错误率超过基线 3 倍以上
1250
+ - P99 延迟超过告警阈值 2 倍
1251
+ - 核心业务指标断崖式下跌
1252
+ - 出现 Critical 级别报错
1253
+
1254
+ **回滚操作**
1255
+ ```bash
1256
+ # Kubernetes 快速回滚
1257
+ kubectl rollout undo deployment/app
1258
+ kubectl rollout undo deployment/app --to-revision=3 # 回滚到指定版本
1259
+
1260
+ # Docker Compose 回滚
1261
+ docker-compose up -d --no-deps --scale app=2 # 拉起旧版本
1262
+ ```
1263
+
1264
+ **数据库回滚**
1265
+ - 向后兼容的迁移(加字段)通常不需要回滚
1266
+ - 破坏性迁移回滚需执行预先准备的 SQL 脚本
1267
+ - 数据删除操作必须在回滚脚本中用 INSERT 恢复(从备份)
1268
+
1269
+ **上线后记录**
1270
+ - 记录上线时间、版本号、发布人
1271
+ - 若出现问题,触发故障排查(`ethan debug`)和事后复盘(`ethan oncall`)
1272
+
1273
+ **输出格式**: Markdown 上线 Checklist + 执行记录,含预检清单、发布策略建议、验证结果和回滚记录
1274
+
1275
+ **注意事项**:
1276
+ - 生产环境首次部署必须有专人在线值守,完成后才能离开
1277
+ - 数据库变更是最高风险项,大表 DDL 操作务必在低峰期执行
1278
+ - 回滚方案必须提前验证可用,不能到了出问题才发现回滚脚本有 bug
1279
+ - 蓝绿和灰度部署需要基础设施支持,提前确认 K8s/Nginx 配置
1280
+
1281
+ ---
1282
+
1283
+ ### 14. PRD 编写 (`prd`)
1284
+
1285
+ **描述**: 从用户故事和业务目标出发,结构化生成产品需求文档(PRD),支撑研发高效落地
1286
+
1287
+ **触发词**: `PRD`, `产品需求`, `写 PRD`, `需求文档`, `prd 编写`, `产品文档`, `写需求`, `功能需求`, `生成 PRD`, `@ethan PRD`, `@ethan 需求文档`, `/prd`, `/PRD`
1288
+
1289
+ **执行步骤**:
1290
+
1291
+ #### 1. 背景与目标
1292
+
1293
+ 明确以下关键信息(询问或推导):
1294
+
1295
+ **业务背景**
1296
+ - 这个功能/产品要解决什么业务问题?
1297
+ - 当前用户的痛点是什么?(现有方案的不足)
1298
+ - 有哪些量化的数据支撑这个问题的存在?
1299
+
1300
+ **目标用户**
1301
+ - 主要用户角色:[角色名称 + 典型特征描述]
1302
+ - 次要用户角色:[如有]
1303
+ - 用户当前的操作路径是什么(Before)?
1304
+
1305
+ **成功指标(OKR/KPI)**
1306
+ - 核心业务指标:如 "注册转化率提升 15%"、"客服工单减少 30%"
1307
+ - 次要指标:NPS、页面停留时长等
1308
+ - 不追求的指标(避免过度设计):明确 out-of-scope
1309
+
1310
+ **优先级与时间**
1311
+ - P0(必须有,MVP 核心)/ P1(重要但非必须)/ P2(锦上添花)
1312
+ - 目标上线日期:[日期]
1313
+ - 里程碑节点:[设计完成 / 研发完成 / 灰度 / 全量]
1314
+
1315
+ #### 2. 用户故事与功能范围
1316
+
1317
+ 用标准用户故事格式描述每个功能点:
1318
+
1319
+ **用户故事格式**
1320
+ > 作为 [用户角色],
1321
+ > 我需要 [完成某事],
1322
+ > 以便 [获得某种价值]。
1323
+
1324
+ **示例**
1325
+ > 作为新注册用户,我需要通过邮箱验证激活账号,以便确保账号安全并接收通知邮件。
1326
+
1327
+ **功能列表模板**
1328
+
1329
+ | # | 功能模块 | 用户故事 | 优先级 | 研发工作量估算 |
1330
+ |---|---------|---------|--------|----------------|
1331
+ | 1 | 注册激活 | 新用户通过邮件激活账号 | P0 | M(3-5天)|
1332
+ | 2 | 邮件模板 | 支持品牌化邮件样式 | P1 | S(1-2天)|
1333
+ | 3 | 批量导入 | 管理员批量导入用户 | P2 | L(5-8天)|
1334
+
1335
+ **明确 Out-of-Scope(本期不做的)**
1336
+ - [功能 A]:原因 / 延后到 v2
1337
+ - [功能 B]:超出本期范围
1338
+
1339
+ #### 3. 详细功能描述与验收标准
1340
+
1341
+ 为每个 P0/P1 功能编写详细说明和可测试的验收标准:
1342
+
1343
+ **功能详细描述模板**
1344
+
1345
+ ---
1346
+
1347
+ #### 功能:[功能名称]
1348
+
1349
+ **触发场景**:[用户在什么情况下使用此功能]
1350
+
1351
+ **操作流程**(主流程 Happy Path)
1352
+ 1. 用户进入 [入口页面]
1353
+ 2. 操作 [步骤]
1354
+ 3. 系统 [处理逻辑]
1355
+ 4. 用户看到 [结果/反馈]
1356
+
1357
+ **异常流程**
1358
+ - [条件] → 系统提示 "[错误信息]"
1359
+ - 网络超时 → 提示重试,不重复提交
1360
+
1361
+ **验收标准(AC)**
1362
+ > Given [前置条件]
1363
+ > When [用户操作]
1364
+ > Then [系统行为 + 可量化结果]
1365
+
1366
+ 示例:
1367
+ - AC1: Given 用户输入正确邮箱和密码,When 点击登录,Then 3秒内跳转到首页
1368
+ - AC2: Given 用户连续5次密码错误,When 第6次尝试,Then 账号锁定15分钟并发送通知邮件
1369
+
1370
+ ---
1371
+
1372
+ #### 4. 非功能性需求
1373
+
1374
+ 明确产品的质量属性约束:
1375
+
1376
+ **性能**
1377
+ - 核心页面首屏加载时间:< 2秒(P75)
1378
+ - 核心接口响应时间:< 500ms(P99)
1379
+ - 并发支持:峰值 QPS XXX
1380
+
1381
+ **可用性与可靠性**
1382
+ - SLA:99.9%(每月不超过 44 分钟停机)
1383
+ - 容灾:支持单机房故障切换
1384
+ - 数据备份:每日全量 + 实时增量
1385
+
1386
+ **安全**
1387
+ - 涉及 PII 数据字段列表:[手机号、身份证号]
1388
+ - 合规要求:[GDPR / 等保二级 / 金融监管要求]
1389
+ - 脱敏规则:手机号显示 138****8888
1390
+
1391
+ **兼容性**
1392
+ - 浏览器:Chrome 90+, Safari 14+, Firefox 88+(不支持 IE)
1393
+ - 移动端:iOS 13+, Android 8+
1394
+ - 屏幕适配:最小支持 375px 宽度
1395
+
1396
+ **国际化**
1397
+ - 语言:简体中文(v1)/ 英文(v2规划)
1398
+ - 时区:UTC+8(如有跨时区需求需说明)
1399
+
1400
+ #### 5. UI/UX 与交互说明
1401
+
1402
+ **设计资源**
1403
+ - Figma/Sketch 链接:[填写]
1404
+ - 设计规范:遵循 [设计系统名称] 组件库
1405
+ - 标注版本:[v1.2 / 待定]
1406
+
1407
+ **关键交互说明**
1408
+ 列出容易被研发忽略的交互细节:
1409
+
1410
+ - 空状态设计:列表无数据时展示 [空态图 + 引导文案]
1411
+ - Loading 状态:核心操作需要骨架屏(Skeleton),不用转圈
1412
+ - 错误状态:区分网络错误(可重试)和业务错误(不可重试)
1413
+ - 表单校验:实时校验(onBlur)还是提交时校验(onSubmit)
1414
+ - 动效要求:页面切换 fade-in 200ms,按钮点击 100ms 响应反馈
1415
+
1416
+ **无障碍要求(A11y)**
1417
+ - 图片必须有 alt 属性
1418
+ - 颜色对比度不低于 4.5:1(WCAG AA 标准)
1419
+ - 核心操作支持键盘导航
1420
+
1421
+ #### 6. 数据埋点与监控
1422
+
1423
+ **埋点方案**
1424
+
1425
+ | 事件名 | 触发时机 | 属性 | 说明 |
1426
+ |--------|---------|------|------|
1427
+ | page_view | 进入页面 | page_name, user_id | 必填 |
1428
+ | btn_click | 点击按钮 | btn_name, page | 所有 CTA 按钮 |
1429
+ | form_submit | 表单提交 | form_name, is_success | 含失败原因 |
1430
+ | feature_use | 使用核心功能 | feature_name, duration | 用于功能价值评估 |
1431
+
1432
+ **业务监控告警**
1433
+
1434
+ | 指标 | 告警阈值 | 负责人 |
1435
+ |------|---------|--------|
1436
+ | 注册成功率 | < 85% 触发告警 | PM + 后端 |
1437
+ | 支付成功率 | < 95% 立即告警 | PM + 后端 + 运维 |
1438
+ | 页面崩溃率 | > 0.1% 告警 | 前端 |
1439
+
1440
+ **数据分析需求**
1441
+ - 上线后第 3/7/30 天分析用户路径漏斗
1442
+ - 功能使用率(功能激活用户 / 总用户)
1443
+
1444
+ **输出格式**: Markdown PRD 文档,含背景目标、用户故事、功能详情(含验收标准 AC)、非功能性需求、UI/UX 说明和埋点方案
1445
+
1446
+ **注意事项**:
1447
+ - PRD 应明确 Out-of-Scope,避免研发范围蔓延
1448
+ - 验收标准必须可测试,"用户体验好" 不是有效的 AC
1449
+ - 非功能性需求经常被遗漏,但对系统架构选型影响很大
1450
+ - 埋点方案尽早与数据团队对齐,避免上线后补埋导致历史数据断层
1451
+
1452
+ ---
1453
+
816
1454
  *Ethan - Your AI Workflow Assistant | 让每一步都有据可依*