create-dwy 0.14.7 → 0.16.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 (95) hide show
  1. package/CHANGELOG.md +17 -0
  2. package/bin/index.js +8 -2
  3. package/package.json +1 -1
  4. package/src/skills-install.js +154 -0
  5. package/src/sync-all.js +7 -0
  6. package/templates/ai-tools/CLAUDE.md +28 -1
  7. package/templates/ai-tools/hooks/Git/pre-git-commit-sensitive-check.sh +10 -2
  8. package/templates/ai-tools/rules/Android/dwy-android-pitfalls.md +52 -0
  9. package/templates/ai-tools/rules/HarmonyOS/dwy-arkts-strict.md +221 -0
  10. package/templates/ai-tools/rules/HarmonyOS/dwy-arkts-ui-build.md +193 -0
  11. package/templates/ai-tools/rules/Python/dwy-python-backend.md +16 -63
  12. package/templates/ai-tools/rules/Python/dwy-python-base-lib.md +89 -0
  13. package/templates/ai-tools/rules/Python/dwy-python-pitfalls.md +49 -0
  14. package/templates/ai-tools/rules/Vue/dwy-vue-base-lib.md +127 -0
  15. package/templates/ai-tools/rules/Vue/dwy-vue-core.md +22 -86
  16. package/templates/ai-tools/rules/Vue/dwy-vue-pitfalls.md +66 -0
  17. package/templates/ai-tools/rules/iOS/dwy-ios-pitfalls.md +159 -0
  18. package/templates/ai-tools/rules/iOS/dwy-swift-core.md +35 -0
  19. package/templates/ai-tools/rules//345/274/200/345/217/221/346/265/201/347/250/213/dwy-dependency-freshness.md +59 -0
  20. package/templates/ai-tools/rules//345/274/200/345/217/221/346/265/201/347/250/213/dwy-tdd-development.md +47 -2
  21. package/templates/ai-tools/skills//344/272/247/345/223/2010/345/210/2601/dwy-acceptance/SKILL.md +24 -0
  22. package/templates/ai-tools/skills//344/272/247/345/223/2010/345/210/2601/dwy-architecture/SKILL.md +70 -0
  23. package/templates/ai-tools/skills//344/272/247/345/223/2010/345/210/2601/dwy-commercial/SKILL.md +58 -0
  24. package/templates/ai-tools/skills//344/272/247/345/223/2010/345/210/2601/dwy-competitor/SKILL.md +23 -0
  25. package/templates/ai-tools/skills//344/272/247/345/223/2010/345/210/2601/dwy-explore/SKILL.md +83 -0
  26. package/templates/ai-tools/skills//344/272/247/345/223/2010/345/210/2601/dwy-mvp/SKILL.md +24 -0
  27. package/templates/ai-tools/skills//344/272/247/345/223/2010/345/210/2601/dwy-poc/SKILL.md +24 -0
  28. package/templates/ai-tools/skills//344/272/247/345/223/2010/345/210/2601/dwy-prd/SKILL.md +23 -0
  29. package/templates/ai-tools/skills//344/272/247/345/223/2010/345/210/2601/dwy-product-launcher/SKILL.md +73 -0
  30. package/templates/ai-tools/skills//344/272/247/345/223/2010/345/210/2601/dwy-product-launcher/references/state-and-contract.md +155 -0
  31. package/templates/ai-tools/skills//344/272/247/345/223/2010/345/210/2601/dwy-prototype/SKILL.md +42 -0
  32. package/templates/ai-tools/skills//344/272/247/345/223/2010/345/210/2601/dwy-release/SKILL.md +27 -0
  33. package/templates/ai-tools/skills//344/272/247/345/223/2010/345/210/2601/dwy-stage-design/SKILL.md +30 -0
  34. package/templates/ai-tools/skills//344/272/247/345/223/2010/345/210/2601/dwy-stage-dev/SKILL.md +54 -0
  35. package/templates/ai-tools/skills//344/272/247/345/223/2010/345/210/2601/dwy-stage-launch/SKILL.md +37 -0
  36. package/templates/ai-tools/skills//344/272/247/345/223/2010/345/210/2601/dwy-stage-prd/SKILL.md +31 -0
  37. package/templates/ai-tools/skills//344/272/247/345/223/2010/345/210/2601/dwy-stage-ship/SKILL.md +30 -0
  38. package/templates/ai-tools/skills//344/272/247/345/223/2010/345/210/2601/dwy-tasks/SKILL.md +32 -0
  39. package/templates/ai-tools/skills//344/272/247/345/223/2010/345/210/2601/dwy-tdd-dev/SKILL.md +34 -0
  40. package/templates/ai-tools/skills//344/272/247/345/223/2010/345/210/2601/dwy-validate/SKILL.md +29 -0
  41. package/templates/ai-tools/skills//344/272/247/345/223/2010/345/210/2601/dwy-version/SKILL.md +24 -0
  42. package/templates/ai-tools/skills//345/217/221/345/270/203/345/217/221/347/211/210/dwy-github-action-publish/SKILL.md +365 -0
  43. package/templates/ai-tools/skills//345/217/221/345/270/203/345/217/221/347/211/210/dwy-github-action-publish/references/electron-release-workflow-template.yml +98 -0
  44. package/templates/ai-tools/skills//{350/277/220/347/273/264/345/217/221/345/270/203/dwy-cibuildwheel → 345/217/221/345/270/203/345/217/221/347/211/210/dwy-github-action-publish}/references/release-workflow-template.yml +3 -3
  45. package/templates/ai-tools/skills//345/217/221/345/270/203/345/217/221/347/211/210/dwy-publish/SKILL.md +31 -0
  46. package/templates/ai-tools/skills//345/217/221/345/270/203/345/217/221/347/211/210/dwy-publish/references/android.md +31 -0
  47. package/templates/ai-tools/skills//345/217/221/345/270/203/345/217/221/347/211/210/dwy-publish/references/backend-deploy.md +23 -0
  48. package/templates/ai-tools/skills//345/217/221/345/270/203/345/217/221/347/211/210/dwy-publish/references/changelog.md +37 -0
  49. package/templates/ai-tools/skills//345/217/221/345/270/203/345/217/221/347/211/210/dwy-publish/references/frontend-deploy.md +23 -0
  50. package/templates/ai-tools/skills//345/217/221/345/270/203/345/217/221/347/211/210/dwy-publish/references/generic-release.md +27 -0
  51. package/templates/ai-tools/skills//345/217/221/345/270/203/345/217/221/347/211/210/dwy-publish/references/harmony.md +25 -0
  52. package/templates/ai-tools/skills//345/217/221/345/270/203/345/217/221/347/211/210/dwy-publish/references/ios.md +32 -0
  53. package/templates/ai-tools/skills//345/217/221/345/270/203/345/217/221/347/211/210/dwy-publish/references/monitor-notify.md +36 -0
  54. package/templates/ai-tools/skills//345/217/221/345/270/203/345/217/221/347/211/210/dwy-publish/references/publish-config.md +65 -0
  55. package/templates/ai-tools/skills//345/217/221/345/270/203/345/217/221/347/211/210/dwy-publish/references/version-sync.md +30 -0
  56. package/templates/ai-tools/skills//345/217/221/345/270/203/345/217/221/347/211/210/dwy-publish/scripts/release_config.sh +115 -0
  57. package/templates/ai-tools/skills//345/{256/211/345/205/250 → 217/221/345/270/203/345/217/221/347/211/210}/dwy-sdk-spec/SKILL.md +31 -21
  58. package/templates/ai-tools/skills//345/{256/211/345/205/250 → 217/221/345/270/203/345/217/221/347/211/210}/dwy-sdk-spec/references/python-commercial-guide.md +1 -1
  59. package/templates/ai-tools/skills//345/{256/211/345/205/250 → 217/221/345/270/203/345/217/221/347/211/210}/dwy-sdk-spec/references/sensitive-patterns.md +1 -1
  60. package/templates/ai-tools/skills//345/217/221/345/270/203/345/217/221/347/211/210/dwy-sdk-spec/scripts/init_config.sh +91 -0
  61. package/templates/ai-tools/skills//345/274/200/345/217/221/346/265/201/347/250/213/dwy-whiteboard-prototype/SKILL.md +70 -0
  62. package/templates/ai-tools/skills//345/274/200/345/217/221/346/265/201/347/250/213/dwy-whiteboard-prototype/assets/template.html +353 -0
  63. package/templates/ai-tools/skills//345/256/211/345/205/250/dwy-sdk-spec/scripts/init_config.sh +0 -97
  64. package/templates/ai-tools/skills//345/274/200/345/217/221/346/265/201/347/250/213/dwy-0to1/SKILL.md +0 -113
  65. package/templates/ai-tools/skills//345/274/200/345/217/221/346/265/201/347/250/213/dwy-0to1/templates/STATE.md +0 -56
  66. package/templates/ai-tools/skills//345/274/200/345/217/221/346/265/201/347/250/213/dwy-dev-qa/SKILL.md +0 -117
  67. package/templates/ai-tools/skills//345/274/200/345/217/221/346/265/201/347/250/213/dwy-market-analysis/SKILL.md +0 -92
  68. package/templates/ai-tools/skills//345/274/200/345/217/221/346/265/201/347/250/213/dwy-prd-coarse/SKILL.md +0 -72
  69. package/templates/ai-tools/skills//345/274/200/345/217/221/346/265/201/347/250/213/dwy-prd-coarse/templates/prd-coarse.md +0 -61
  70. package/templates/ai-tools/skills//345/274/200/345/217/221/346/265/201/347/250/213/dwy-prd-detailed/SKILL.md +0 -76
  71. package/templates/ai-tools/skills//345/274/200/345/217/221/346/265/201/347/250/213/dwy-prd-detailed/templates/prd-detailed.md +0 -119
  72. package/templates/ai-tools/skills//345/274/200/345/217/221/346/265/201/347/250/213/dwy-prototype/SKILL.md +0 -104
  73. package/templates/ai-tools/skills//345/274/200/345/217/221/346/265/201/347/250/213/dwy-publish/SKILL.md +0 -50
  74. package/templates/ai-tools/skills//345/274/200/345/217/221/346/265/201/347/250/213/dwy-publish/references/application-release.md +0 -106
  75. package/templates/ai-tools/skills//345/274/200/345/217/221/346/265/201/347/250/213/dwy-publish/references/sdk-release.md +0 -93
  76. package/templates/ai-tools/skills//345/274/200/345/217/221/346/265/201/347/250/213/dwy-spike/SKILL.md +0 -81
  77. package/templates/ai-tools/skills//345/274/200/345/217/221/346/265/201/347/250/213/dwy-tdd-dev/SKILL.md +0 -212
  78. package/templates/ai-tools/skills//345/274/200/345/217/221/346/265/201/347/250/213/dwy-tdd-dev/templates/impl-plan.md +0 -115
  79. package/templates/ai-tools/skills//345/274/200/345/217/221/346/265/201/347/250/213/dwy-tech-feasibility/SKILL.md +0 -105
  80. package/templates/ai-tools/skills//345/274/200/345/217/221/346/265/201/347/250/213/dwy-version-plan/SKILL.md +0 -64
  81. package/templates/ai-tools/skills//345/274/200/345/217/221/346/265/201/347/250/213/dwy-version-plan/templates/version-plan.md +0 -72
  82. package/templates/ai-tools/skills//350/277/220/347/273/264/345/217/221/345/270/203/dwy-cibuildwheel/SKILL.md +0 -356
  83. /package/templates/ai-tools/skills//345/{256/211/345/205/250 → 217/221/345/270/203/345/217/221/347/211/210}/dwy-sdk-spec/assets/files-whitelist-snippet.json" +0 -0
  84. /package/templates/ai-tools/skills//345/{256/211/345/205/250 → 217/221/345/270/203/345/217/221/347/211/210}/dwy-sdk-spec/assets/js-commercial.npmignore" +0 -0
  85. /package/templates/ai-tools/skills//345/{256/211/345/205/250 → 217/221/345/270/203/345/217/221/347/211/210}/dwy-sdk-spec/assets/python-commercial-MANIFEST.in" +0 -0
  86. /package/templates/ai-tools/skills//345/{256/211/345/205/250 → 217/221/345/270/203/345/217/221/347/211/210}/dwy-sdk-spec/assets/python-commercial.gitignore" +0 -0
  87. /package/templates/ai-tools/skills//345/{256/211/345/205/250 → 217/221/345/270/203/345/217/221/347/211/210}/dwy-sdk-spec/references/js-commercial-guide.md" +0 -0
  88. /package/templates/ai-tools/skills//345/{256/211/345/205/250 → 217/221/345/270/203/345/217/221/347/211/210}/dwy-sdk-spec/references/publish-blacklist.md" +0 -0
  89. /package/templates/ai-tools/skills//345/{256/211/345/205/250 → 217/221/345/270/203/345/217/221/347/211/210}/dwy-sdk-spec/scripts/check_comments.py" +0 -0
  90. /package/templates/ai-tools/skills//345/{256/211/345/205/250 → 217/221/345/270/203/345/217/221/347/211/210}/dwy-sdk-spec/scripts/check_js_publish.sh" +0 -0
  91. /package/templates/ai-tools/skills//345/{256/211/345/205/250 → 217/221/345/270/203/345/217/221/347/211/210}/dwy-sdk-spec/scripts/check_python_publish.sh" +0 -0
  92. /package/templates/ai-tools/skills//345/{256/211/345/205/250 → 217/221/345/270/203/345/217/221/347/211/210}/dwy-sdk-spec/scripts/detect_sdk.sh" +0 -0
  93. /package/templates/ai-tools/skills//345/{274/200/345/217/221/346/265/201/347/250/213 → 217/221/345/270/203/345/217/221/347/211/210}/dwy-semver/SKILL.md" +0 -0
  94. /package/templates/ai-tools/skills//345/{274/200/345/217/221/346/265/201/347/250/213 → 217/221/345/270/203/345/217/221/347/211/210}/dwy-semver/references/semver-spec.md" +0 -0
  95. /package/templates/ai-tools/skills//345/{274/200/345/217/221/346/265/201/347/250/213 → 217/221/345/270/203/345/217/221/347/211/210}/dwy-semver/scripts/bump.py" +0 -0
@@ -1,117 +0,0 @@
1
- ---
2
- name: dwy-dev-qa
3
- description: "功能开发完成后的通用质量保障流程。触发条件:完成新功能、修复 bug、重构代码后,准备提交前。"
4
- ---
5
-
6
- # 开发完成后质量保障流程
7
-
8
- 功能开发完成后,按以下 9 步流程逐步执行。**不可跳步,不可调换顺序。**
9
-
10
- ## 流程总览
11
-
12
- ```
13
- 功能完成 → 构建验证 → 写测试 → 跑测试 → Code Review → 修复问题 → 性能优化 → 文档同步 → 集成测试 → 输出报告
14
- ```
15
-
16
- ## 第 1 步:构建验证
17
-
18
- 确认代码能编译通过,没有语法错误或类型错误。
19
-
20
- 执行项目的构建命令(查看 `package.json` scripts 或 `Makefile` 确定具体命令)。
21
-
22
- **不通过 → 修复编译错误,不进入下一步。**
23
-
24
- ## 第 2 步:编写测试用例
25
-
26
- 为本次新增/修改的代码编写测试:
27
-
28
- - 新组件/模块:至少覆盖核心功能、关键输入输出
29
- - 新函数:覆盖正常输入、边界条件、异常输入
30
- - Bug 修复:先写复现 bug 的测试用例,确认失败,再确认修复后通过
31
- - 只测新增/修改的部分,不给未改动的代码补测试
32
-
33
- ## 第 3 步:运行测试
34
-
35
- 执行项目的测试命令,确认所有测试通过。
36
-
37
- **有失败 → 修复代码或测试,不进入下一步。**
38
-
39
- ## 第 4 步:Code Review
40
-
41
- 审查本次所有变更(代码 + 测试),检查:
42
-
43
- - [ ] 逻辑正确性:边界条件、竞态风险、空值处理
44
- - [ ] 安全性:XSS、注入、硬编码凭证、敏感数据泄露
45
- - [ ] 向后兼容:已有 API 是否被破坏(参数重命名/删除、返回值结构变更)
46
- - [ ] 代码风格:是否符合项目规范
47
- - [ ] 测试质量:测试是否真正验证了功能
48
-
49
- 输出 Review 问题清单。
50
-
51
- ## 第 5 步:修复 Review 问题
52
-
53
- 逐条修复第 4 步发现的问题。每修一条,跑相关测试确认无回归。
54
-
55
- **有未修复的问题 → 不进入下一步。**
56
-
57
- ## 第 6 步:性能优化
58
-
59
- 审查本次变更的性能影响:
60
-
61
- - [ ] 是否有不必要的重复计算或重复请求
62
- - [ ] 是否有大数据集缺少分页、虚拟滚动或懒加载
63
- - [ ] 是否有 N+1 查询或缺少索引
64
- - [ ] 是否有不必要的深拷贝或大对象序列化
65
- - [ ] 前端:是否有不必要的重渲染或未做 memo/computed 优化
66
-
67
- 发现优化点:
68
- 1. 实施优化
69
- 2. 跑测试确认无回归
70
- 3. 如果发现了通用的性能规范不在项目文档中,更新 CLAUDE.md 或 rules
71
-
72
- ## 第 7 步:文档同步
73
-
74
- 检查以下文档是否需要更新:
75
-
76
- - [ ] **API 文档 / Skills** — 新增或修改了对外接口?更新对应文档
77
- - [ ] **示例 / Demo** — 新增了用户可感知的功能?补充示例
78
- - [ ] **项目 CLAUDE.md** — 模块结构、命令、架构发生变化?更新
79
- - [ ] **导航 / 索引** — 新增了页面或模块?注册到路由和导航
80
-
81
- 如果项目有专门的文档检查 skill(如 `dwy-docs-check`),调用它自动执行。
82
-
83
- ## 第 8 步:集成测试
84
-
85
- 运行全量测试套件 + 构建验证,确认无回归。
86
-
87
- **任何失败 → 回到第 5 步修复。**
88
-
89
- ## 第 9 步:输出报告
90
-
91
- 向用户输出以下报告,等待审查确认后才能 commit:
92
-
93
- ```
94
- ## 质量保障报告
95
-
96
- ### 变更概要
97
- - 涉及文件:X 个
98
- - 新增/修改行数:+X / -X
99
-
100
- ### 测试结果
101
- - 单元测试:X 通过 / X 失败
102
- - 集成测试:全量 X 用例通过
103
-
104
- ### Code Review
105
- - 发现问题:X 条
106
- - 已修复:X 条
107
- - 遗留:0 条
108
-
109
- ### 性能优化
110
- - 优化项:(具体优化点,或"无需优化")
111
-
112
- ### 文档同步
113
- - 更新了:(文件列表,或"无需更新")
114
-
115
- ### 待用户确认
116
- - [ ] 确认可以提交
117
- ```
@@ -1,92 +0,0 @@
1
- ---
2
- name: dwy-market-analysis
3
- description: 需求真伪判断 + 市场/竞品调研 + 差异化建议,给「做不做」结论。涉及以下场景使用此 skill(即使没点名 'dwy-market-analysis'):用户说『帮我分析下这个需求/想法靠不靠谱』『做个市场分析/竞品调研』『这个方向值不值得做』『帮我看看有没有人做过 X』,或丢一个想法让我判断真伪需求、市场空间、怎么差异化。一次一问的协作对话摸清需求 + WebSearch 拿市场证据,产出市场分析文档。区分:完整 0→1 产品孵化流水线请用 dwy-0to1;只想写代码验证某个技术能不能跑通用 dwy-spike。
4
- ---
5
-
6
- # dwy-market-analysis · 需求 & 市场分析
7
-
8
- 跟用户一起把「这是不是真需求」想清楚,再用 WebSearch 扒市场和竞品,给差异化建议和「做不做」结论。伪需求和红海早杀,省掉后面全部白干。
9
-
10
- ## 运行模式
11
-
12
- 上下文自适应,两种调用方式:
13
-
14
- - **单独调用(默认)**:用户直接丢一个想法让你分析。从用户那句想法起步;产物落用户指定位置,没指定就用 `./market-analysis.md` 或问一句;**不读写 STATE.md、不依赖 `docs/0to1/`**。做完跑下方「门」即结束,不自动转入别的 skill。
15
- - **流水线调用**:`dwy-0to1` 通过 Skill 工具调用,指令含「流水线模式」+ 落盘路径(如 `docs/0to1/01-market.md`)。按指令落盘;照常跑「门」;**STATE 记账与进入下一步由 dwy-0to1 负责,本 skill 不碰 STATE.md**。
16
-
17
- ## 怎么做
18
-
19
- 两部分:先**协作对话**把需求想清,再叠**市场调研**拿证据。
20
-
21
- ### 一、协作对话(一次一问,温和把需求摸清)
22
-
23
- 不是审问,是陪用户把模糊想法捋成清晰需求。纪律:**一条消息只问一个问题**。
24
-
25
- 1. **探索上下文**:先弄清想法到底是什么、给谁用、解决什么痛点。当前项目有相关文件/代码就先看一眼。
26
- 2. **评估范围,先拆再钻**:想法其实是好几个独立子系统(「做个平台,带聊天 + 存储 + 计费 + 分析」)→ **立刻指出来**,帮用户拆成独立部分,问清谁先做。别急着钻某一块的细节,那等于给一个该拆的项目修地基。
27
- - ❌ 用户说「做个带社交的电商平台」→ 直接问「商品详情页要展示哪些字段」
28
- - ✅ 先说「这其实是电商 + 社交两个子系统,建议先把电商主链路做通,社交后置。先聚焦电商对吗?」
29
- 3. **一次只问一个问题**(关键纪律):
30
- - 一条消息**只问一个**,别一次甩五个。用 `AskUserQuestion`,**优先做成选择题**(比开放题好答),开放题也行。
31
- - 聚焦理解三件事:**目的 / 约束 / 成功标准**。
32
- - 一个话题没问透,拆成多条消息分次问,别塞进一条。
33
- - ❌ 「目标用户是谁?预算多少?要支持哪些平台?什么时候上线?」(一次四问)
34
- - ✅ 「先定目标用户——主要给哪类人用?」(一次一问,等答完再问下一个)
35
- 4. **提 2-3 个差异化方向**:摸清需求后,给 2-3 个不同切入方向,每个带取舍。**亮明推荐哪个、为什么**,别都列出来让用户自己选。
36
- 5. **分段呈现、逐段确认**:把结论拆成几段(需求理解 / 真需求判断 / 差异化建议),一段一段摆,每段问一句「这样对吗」。哪段不对就回去改,别一口气甩完整篇。
37
-
38
- ### 二、市场 & 竞品调研(WebSearch,对话法没有、这步独有)
39
-
40
- 对话摸清需求后,拿外部证据验证:
41
-
42
- 1. **WebSearch 查这个领域**:有哪些现成产品 / 竞品、它们怎么做、市场大概多大、是蓝海还是红海。多关键词搜(中英文都搜,竞品官网 / 测评 / 讨论区)。
43
- 2. **真需求判断**(结合用户回答 + 市场证据):给三选一结论,**说清依据**——
44
- | 结论 | 什么情况 |
45
- |------|---------|
46
- | 真需求 | 痛点真实、有人在为它付费/费劲找替代,市场有空间 |
47
- | 伪需求 | 想当然的「应该有人要」,查不到真实付费意愿或替代行为 |
48
- | 需要收窄 | 方向对但太大/太泛,得砍到一个具体人群或场景才成立 |
49
- 3. **差异化建议**:值得做的话,差异化从哪个角度切——功能 / 人群 / 定价 / 体验,挑一两个能立住的,别样样都想赢。
50
-
51
- ## 产物
52
-
53
- 落盘市场分析文档(单独模式默认 `./market-analysis.md`;流水线模式按编排器给的路径,如 `docs/0to1/01-market.md`)。顶部 frontmatter:
54
-
55
- ```markdown
56
- ---
57
- status: done # 落盘且过门后才填 done;过门前 awaiting-approval
58
- updated: <date +%Y-%m-%d>
59
- ---
60
- ```
61
-
62
- 正文必含八块:
63
-
64
- | 块 | 内容 |
65
- |----|------|
66
- | 需求理解 | 想法是什么、给谁用、解决什么痛点(对话捋出来的) |
67
- | 真需求判断 | 真 / 伪 / 收窄 三选一 + **依据**(用户回答 + 市场证据) |
68
- | 市场情况 | 领域多大、蓝海还是红海、WebSearch 拿到的关键数据 |
69
- | 竞品清单 | 表格:谁 / 怎么做 / 优 / 劣 |
70
- | 差异化建议 | 从哪个角度切(功能/人群/定价/体验),为什么这个角度立得住 |
71
- | 核心能力/最大技术风险 | 一句话点出最该被技术可行性验证的技术核心(供 dwy-tech-feasibility 锚定调研对象) |
72
- | 硬约束识别 | 合规 / PII / 实时性 / 规模水位等会反向决定技术选型的硬约束;没有就写「无」 |
73
- | 做不做建议 | 明确结论 + 一句话理由 |
74
-
75
- ## 门(过门确认)
76
-
77
- 落盘后先**自己核一遍**(先验证再声称):八块齐了吗、真需求判断有依据吗、竞品清单不是空表吗、核心能力/最大技术风险点出来了吗、硬约束识别过了吗(没有也要明写「无」)。核完再声称完成,别说「应该写好了」。
78
-
79
- 然后 `AskUserQuestion` 把**「做不做 + 怎么差异化」**摆给用户,问:
80
-
81
- > 按这个方向继续 / 调整方向 / 放弃?
82
-
83
- 用户要调整 → 回去改文档重新摆。
84
-
85
- ## 边界 / 禁止
86
-
87
- - **一次只问一个问题**——这是这步的命脉,一条消息甩多问直接破坏对话节奏。
88
- - **不用对抗式六问诊断**——温和协作,不是审问用户的想法值不值得做。
89
- - **真需求判断必须带依据**——不能只写「这是真需求」,要有用户回答 + 市场证据支撑。
90
- - **竞品清单不许是空表**——查不到竞品本身就是信号(要么蓝海要么伪需求),写清是哪种。
91
- - **做不做建议必须给明确结论**——不和稀泥、不「视情况而定」。该劝退就劝退。
92
- - 这步**只分析判断,不写任何代码、不碰技术选型**(那是 dwy-tech-feasibility / dwy-spike 的事)。
@@ -1,72 +0,0 @@
1
- ---
2
- name: dwy-prd-coarse
3
- description: 粗粒度产品定义(功能级 PRD):协作对话敲定产品定位、哲学、目标人群、定价、核心功能详述、非目标,不下到页面级。涉及以下场景使用此 skill(即使没点名 'dwy-prd-coarse'):用户说『帮我写个 PRD/产品文档』『定义下这个产品』『梳理产品定位和核心功能』『这个产品怎么定价/给谁用』。brainstorming 逐块谈定,产出粗 PRD。区分:本 skill 是功能级总纲(定位/功能/非目标),也是 PRD 的起点——用户笼统说『写个 PRD/产品文档』时默认先从这里(功能级)谈起,定稿后再用 dwy-prd-detailed 下到页面级;只有明确要页面级开发蓝本(元素/文案/状态/输入校验)才直接用 dwy-prd-detailed;完整 0→1 流水线用 dwy-0to1。
4
- ---
5
-
6
- # dwy-prd-coarse · 粗 PRD
7
-
8
- 和用户一起敲定**功能级**的产品定义:定位、哲学、人群、定价、核心功能详述。这是后面原型和细 PRD 的总纲——纲领定歪了,后面全白做。颗粒度停在功能层面,**不下到页面级**(页面是细 PRD 的事)。
9
-
10
- ## 运行模式
11
-
12
- 上下文自适应,两种调用方式:
13
-
14
- - **单独调用(默认)**:用户直接让你写/梳理产品 PRD。从用户描述起步;产物落 `./prd-coarse.md` 或用户指定位置;**不读写 STATE.md、不依赖 `docs/0to1/`**。做完跑下方「门」即结束。
15
- - **流水线调用**:`dwy-0to1` 调用,指令含「流水线模式」+ 前序产物路径(市场分析)+ 落盘路径(如 `docs/0to1/04-prd-coarse.md`)。**STATE 记账由 dwy-0to1 负责,本 skill 不碰 STATE.md**。
16
-
17
- ## 输入(定位/定价/功能边界的依据)
18
-
19
- 定位、定价、差异化、功能边界**不能空想**,要有市场依据 + 技术依据:
20
-
21
- - 流水线模式:**必须先 Read 编排器给的市场分析产物**,定位看市场空位、定价对标竞品价、功能边界参考竞品;**再 Read `02-tech-feasibility.md`**(定价受 license/infra 成本约束、核心功能边界受推荐方案能力约束)+ **存在时 Read `03-spike-result.md`**(spike 证伪/受限的能力 → 据此砍功能或写进非目标)。技术上做不到或太贵的,别写进核心功能。
22
- - 单独模式:有市场分析 / 技术可行性文档就读;没有就先用一两个问题问清目标人群、已知竞品、大致定价区间、核心能力技术上有没有现成方案,别凭空拍脑袋。
23
-
24
- ## 怎么做(brainstorming 对话法,逐块敲定)
25
-
26
- 不要一口气甩一份完整 PRD 让用户看。用对话一块一块谈,谈一块定一块,最后才成稿。对话纪律:
27
-
28
- - **一次只问一个问题**,优先选择题(A/B/C 带取舍),比开放题好答。
29
- - 理解清楚后,**提 2-3 个方向带取舍、亮出推荐**那个并说为什么。别替用户默默选,也别什么都「看你」。
30
- - **分段呈现、逐段确认**:每块(定位 / 哲学 / 人群 / 定价 / 功能)谈完先确认这块对不对,再进下一块。
31
- - **YAGNI**:用户列的功能里,砍掉不属于核心的,问清是不是 v1 真需要。
32
-
33
- 按这个顺序逐块敲定(套 `templates/prd-coarse.md` 的章节):
34
-
35
- 1. **产品定位** — 一句话说清「给谁、解决什么、凭什么是你」。从市场空位推。
36
- 2. **产品哲学** — 坚持什么、拒绝什么,3-5 条。这是后面所有取舍的判据。
37
- 3. **目标人群** — 具体到能想象出一个真人,别写「所有需要 X 的人」。
38
- 4. **定价策略** — 档位 + 每档含什么 + 对标竞品。**结合竞品价**,不许凭空标价。
39
- 5. **核心功能详述** — 每个功能讲清「是什么、用户拿它干什么、关键规则、边界」。详细到功能层面(输入输出、核心规则、限制),但**不画页面、不定字段长度**。
40
- 6. **非目标** — 明确不做什么,挡住后面无穷的「要不要也加个 X」。
41
-
42
- 每块谈定后,把结论写进产物对应章节(边谈边落,不要等全谈完才动笔)。
43
-
44
- ## 产物
45
-
46
- 落盘粗 PRD(单独默认 `./prd-coarse.md`;流水线按编排器给的路径)。套 `templates/prd-coarse.md`。frontmatter:
47
-
48
- ```
49
- ---
50
- status: done # 成稿前 draft,过门后 done
51
- updated: <date +%Y-%m-%d>
52
- ---
53
- ```
54
-
55
- 成稿要件:六个章节齐全;定位/定价能追溯到市场依据;功能详述到功能级;非目标非空。
56
-
57
- ## 门(过门确认)
58
-
59
- 分两层确认:
60
-
61
- 1. **逐块确认**(对话中已做):每块谈完即时确认,有异议当场改。
62
- 2. **整体过门**:六块都谈定、产物已落盘且内容完整后(先验证再声称),用 `AskUserQuestion` 把整份粗 PRD 摆给用户:
63
- - 摆什么:定位一句话、定价档位、核心功能清单、非目标清单。
64
- - 问什么:「粗 PRD 这样定,通过 / 哪块要改 / 换方向?」
65
-
66
- ## 边界 / 禁止
67
-
68
- - **禁止脱离市场依据凭空写**:定位/定价要能追溯到竞品和市场空位。
69
- - **禁止下到页面级**:不画页面、不定字段长度/行数(那是 dwy-prd-detailed)。停在功能级。
70
- - **禁止一次甩完整 PRD**:必须 brainstorming 逐块谈、逐块确认。
71
- - **禁止凭空定价**:每个价格档位都要对标竞品。
72
- - 这步**不写任何代码**。
@@ -1,61 +0,0 @@
1
- ---
2
- status: draft # draft | done
3
- updated: <YYYY-MM-DD>
4
- ---
5
-
6
- # <产品名> · 粗 PRD
7
-
8
- > 粗粒度,功能级。定「做什么、给谁、为什么、卖多少钱」,**不下到页面级**(页面级是细 PRD 的事)。每块都和用户分段敲定过、综合了市场分析。
9
-
10
- ## 产品定位
11
-
12
- <一句话说清这是什么、解决谁的什么问题。结合市场分析的市场空位和竞品差异。例:给独立开发者的「单文件部署的轻量监控面板」,主打装起来五分钟、不依赖数据库。>
13
-
14
- ## 产品哲学
15
-
16
- <这产品坚持什么、拒绝什么。3-5 条原则,每条一句。这是后面所有取舍的判据。例:① 默认零配置能跑 ② 数据本地优先 ③ 不做社交/不做会员等级。>
17
-
18
- ## 目标人群(画像)
19
-
20
- <谁会用、什么场景下用、现在用什么替代。具体到能想象出一个真人,别写「所有需要 X 的人」。>
21
-
22
- | 维度 | 内容 |
23
- |---|---|
24
- | 主画像 | <身份 + 一句话场景> |
25
- | 次画像 | <可选> |
26
- | 现在怎么解决 | <替代方案:手动 / 竞品 / 不解决> |
27
- | 切入的痛点 | <最痛的那一个> |
28
-
29
- ## 定价策略
30
-
31
- <免费 / 一次性买断 / 订阅 / 增值。给出价格档位和每档包含什么。**必须结合市场分析的竞品定价**,说清为什么这么定。>
32
-
33
- | 档位 | 价格 | 包含 | 对标竞品 |
34
- |---|---|---|---|
35
- | <免费/基础> | <¥> | <功能边界> | <竞品同档> |
36
- | <进阶> | <¥> | <多了什么> | <竞品同档> |
37
-
38
- ## 核心功能详述(功能级)
39
-
40
- <列核心功能,每个功能讲清「是什么、用户拿它干什么、关键规则」。详细到功能层面——输入输出、核心规则、边界都说清,但**不画页面、不定字段长度**(那是细 PRD)。一次性想全的功能,不在 v1 也先记下,标清优先级。>
41
-
42
- ### 功能 1:<名称>
43
-
44
- - **用户拿它干什么**:<一句话>
45
- - **核心规则**:<关键逻辑、限制、约束>
46
- - **优先级**:<v1 必须 / 后续>
47
-
48
- ### 功能 2:<名称>
49
-
50
- - **用户拿它干什么**:
51
- - **核心规则**:
52
- - **优先级**:
53
-
54
- <按需继续,功能 3、4……>
55
-
56
- ## 非目标(明确不做什么)
57
-
58
- <刻意不做的清单,越明确越好。挡住后面无穷的「要不要也加个 X」。每条一句话,可带一句为什么不做。>
59
-
60
- - 不做 <X>:<理由,如 偏离产品哲学第 N 条 / 留给后续版本 / 不是目标人群的需求>
61
- - 不做 <Y>:
@@ -1,76 +0,0 @@
1
- ---
2
- name: dwy-prd-detailed
3
- description: 页面级细 PRD:对着高保真原型逐页写到能照着写代码——每页元素清单、文案字数上限/行数、每种状态、每个输入的前后端双层长度上限、跳转和边界。涉及以下场景使用此 skill(即使没点名 'dwy-prd-detailed'):用户说『把 PRD 写细一点/到页面级』『写详细的产品需求文档』『把每个页面的元素和交互列清楚』『定义各字段的校验规则』。区分:本 skill 是页面级开发蓝本(细到元素/字数/状态/校验),前提是功能级总纲已定(最好有高保真原型);用户只笼统说『写个 PRD/产品文档』、还没有功能级定义时,先用 dwy-prd-coarse 而非本 skill;功能级定位/定价/非目标也用 dwy-prd-coarse;完整 0→1 流水线用 dwy-0to1。
4
- ---
5
-
6
- # dwy-prd-detailed · 细 PRD(页面级)
7
-
8
- 对着高保真原型**逐页**写到**页面级**的 PRD。颗粒度要细到开发能照着写代码:每个页面有哪些元素、每条文案的字数上限和行数、每种状态、每个输入的长度上限、每个边界和跳转。这是开发的蓝本,空一处后面就要返工一次。
9
-
10
- ## 运行模式
11
-
12
- 上下文自适应,两种调用方式:
13
-
14
- - **单独调用(默认)**:用户直接让你写细 PRD。从用户给的原型/页面或描述起步;产物落 `./prd-detailed.md` 或用户指定位置;**不读写 STATE.md、不依赖 `docs/0to1/`**。做完跑下方「门」即结束。
15
- - **流水线调用**:`dwy-0to1` 调用,指令含「流水线模式」+ 前序产物路径(粗 PRD + 高保真原型目录)+ 落盘路径(如 `docs/0to1/05-prd-detailed.md`)。**STATE 记账由 dwy-0to1 负责,本 skill 不碰 STATE.md**。
16
-
17
- ## 输入(对着原型逐页写)
18
-
19
- - **逐页打开高保真原型的每个 HTML** — 细 PRD 一页对一页地写,原型画了什么就写什么。原型是事实依据,**不对着原型 = 空对空,禁止**。
20
- - 读粗 PRD(功能规则总纲)。
21
- - 确认目标端,输入约束按端定(移动端键盘、桌面粘贴等)。
22
- - 单独模式:用户没给原型就先问清有没有原型/设计稿可对照;实在没有就基于用户描述的页面逐页写,但要提醒「没有原型底稿,状态/极端 case 容易漏」。
23
-
24
- ## 怎么做(具体步骤)
25
-
26
- 套 `templates/prd-detailed.md`,**每个页面一节**,每节写全这几块:
27
-
28
- 1. **页面名 + 用途 + 入口/出口** — 这页让用户干什么、从哪进来、各动作去哪。
29
- 2. **元素 & 区块清单** — 对着原型把每个区块、每个元素列全(顶栏、列表、按钮、计数器…),标清各自规则(如「正文空时发布按钮置灰」)。
30
- 3. **列表项文案约束** — 每条会展示用户内容的地方,定:**字数上限 / 行数 / 溢出处理**(折叠?`…` 截断?展开?)。对着原型里画的超长文本态定。
31
- 4. **各状态** — 空 / 加载中 / 错误 / 无数据 / 无权限 / 超长 / 极端数据,每种写清表现。原型已画全,这里逐一文字化。
32
- 5. **输入校验(长度上限,前后端双层)** — 见下方专节,**这是硬规范**。
33
- 6. **交互 & 跳转** — 点什么去哪、二次确认、成功后路由。动效在这里用文字描述(原型没做动画)。
34
- 7. **边界** — 零结果、网络失败、超长、并发、空输入……每个都写清怎么处理。
35
-
36
- ## 特别提醒:所有用户输入必须限长(前端 + 后端双层)
37
-
38
- dwy 全局规范硬要求——**凡接收用户输入的地方都要限长,前端即时反馈 + 后端防绕过,缺一不可**。细 PRD 里每个输入框 / textarea / 列表 / 分页都要写清:
39
-
40
- | 位置 | 必须写明 |
41
- |---|---|
42
- | `input` / `textarea` / 富文本 | 字数上限(前端 `maxlength` + schema 兜底防粘贴绕过;后端再校验返回 422) |
43
- | 列表项展示用户内容 | 字数上限 + 行数 + 溢出处理 |
44
- | 分页 | `page_size` 默认值 + **上限**(防 DoS) |
45
- | 文件 / 图片上传 | 数量上限 + 单个大小上限 + **图片额外校验像素尺寸**(防 decompression bomb) |
46
- | Query / Path / Header | 长度上限 |
47
-
48
- 按业务语义定数:用户名几十字符、描述几百、正文几千、图片几 MB。**禁止任一字段无上限就过门。**
49
-
50
- ## 产物
51
-
52
- 落盘细 PRD(单独默认 `./prd-detailed.md`;流水线按编排器给的路径)。套 `templates/prd-detailed.md`(含一个填好的示例页 + 空白页模板)。frontmatter:
53
-
54
- ```
55
- ---
56
- status: done
57
- updated: <date +%Y-%m-%d>
58
- ---
59
- ```
60
-
61
- 成稿要件:原型里每个页面都有对应一节;每页七块齐全;每个输入都有前后端双层长度上限;每页的状态覆盖空/加载/错误/超长。落盘后**逐页核对原型**——原型有的页面 PRD 是否都写了、是否有输入漏写上限,再声称完成(先验证再声称)。
62
-
63
- ## 门(过门确认)
64
-
65
- 用 `AskUserQuestion` 把细 PRD 摆给用户:
66
- - 摆什么:页面清单(与原型对齐)、关键约束(各输入长度上限、各列表折叠规则)、状态覆盖情况。
67
- - 问什么:「细 PRD 这样定够细吗?通过 / 哪页要补 / 哪个约束要调?」
68
-
69
- 要改就改,直到用户确认。
70
-
71
- ## 边界 / 禁止
72
-
73
- - **禁止脱离原型空写**——一页对一页,原型是事实依据。
74
- - **禁止颗粒度停在功能级**——必须到页面级:具体元素、具体字数、具体行数、具体状态。
75
- - **禁止任一用户输入无长度上限**(前端 + 后端双层),分页无 `page_size` 上限,图片不校验像素——违反 dwy 全局硬规范。
76
- - **禁止漏状态**——空/加载/错误/超长/极端,每页都要覆盖到。
@@ -1,119 +0,0 @@
1
- ---
2
- status: draft # draft | done
3
- updated: <YYYY-MM-DD>
4
- ---
5
-
6
- # <产品名> · 细 PRD(页面级)
7
-
8
- > 对着高保真原型逐页写。细到能照着写代码:每个元素、每条文案约束、每种状态、每个输入的长度上限、每个跳转。这是开发的蓝本。
9
-
10
- ## 页面索引
11
-
12
- | # | 页面 | 对应原型文件 | 入口 |
13
- |---|------|-------------|------|
14
- | 1 | <页面名> | `prototype-hifi/<file>.html` | <从哪进来> |
15
- | 2 | | | |
16
-
17
- ## 全局约定
18
-
19
- <跨页面共用的约束,写一次后面引用,别每页重复。例:列表分页 page_size 默认 20、上限 100;所有 toast 文案上限 30 字;时间统一 YYYY-MM-DD HH:mm。>
20
-
21
- ---
22
-
23
- ## 示例页(填好的样板,照这个颗粒度写每一页)
24
-
25
- ### 页面 2:发布动态
26
-
27
- - **用途**:用户写一条动态并发布。
28
- - **入口 / 出口**:首页右下「+」进入;发布成功 → 回首页并置顶新动态;取消 → 返回首页不保存。
29
-
30
- **元素 & 区块清单**
31
-
32
- | 区块 | 元素 | 说明 |
33
- |---|---|---|
34
- | 顶栏 | 取消按钮 / 标题「发布」/ 发布按钮 | 正文为空时发布按钮置灰禁用 |
35
- | 正文区 | 多行 textarea | 占位文案「分享点什么…」 |
36
- | 图片区 | 缩略图九宫格 + 加号 | 最多 9 张,加号在满 9 张时隐藏 |
37
- | 字数 | 右下角计数 `0/2000` | 实时更新,超限标红 |
38
-
39
- **列表项 / 文案约束**
40
-
41
- | 内容 | 上限 | 行数 | 溢出处理 |
42
- |---|---|---|---|
43
- | 动态正文(列表态展示) | 2000 字 | 列表最多 6 行 | 超 6 行折叠,尾部「全文」展开 |
44
- | 图片说明(可选) | 100 字 | 1 行 | 超出 `…` 截断 |
45
-
46
- **各状态**
47
-
48
- | 状态 | 表现 |
49
- |---|---|
50
- | 空 | textarea 显示占位文案,发布按钮置灰 |
51
- | 加载中(发布请求) | 发布按钮转 loading,禁止重复点 |
52
- | 成功 | toast「已发布」→ 回首页 |
53
- | 错误(网络失败) | toast「发布失败,请重试」,正文不清空 |
54
- | 超长(贴入超 2000 字) | 截断到 2000 + 计数标红 + toast「最多 2000 字」 |
55
-
56
- **输入校验(长度上限,前后端双层)**
57
-
58
- | 字段 | 前端限制 | 后端校验 | 超限行为 |
59
- |---|---|---|---|
60
- | 正文 text | `maxlength=2000` + schema 兜底(防粘贴绕过) | 必填,1–2000 字 | 前端截断+提示;后端拒绝返回 422 |
61
- | 图片 | 最多 9 张,单张 ≤ 5MB | 数量 ≤ 9,大小 ≤ 5MB,**校验像素尺寸防 decompression bomb** | 超出禁止选择 / 后端拒收 |
62
-
63
- **交互 & 跳转**
64
-
65
- - 点图片缩略图 → 全屏预览,可左右滑。
66
- - 点取消且正文非空 → 二次确认「放弃这条动态?」。
67
- - 发布成功 → 路由回首页,新动态置顶高亮 2 秒。
68
-
69
- **边界**
70
-
71
- - 正文为空 + 无图:发布按钮禁用。
72
- - 网络失败:保留草稿在内存,不丢用户已输入内容。
73
- - 零图片:允许纯文字发布。
74
-
75
- ---
76
-
77
- ## 空白页模板(每个真实页面复制一份填)
78
-
79
- ### 页面 N:<页面名>
80
-
81
- - **用途**:<这页让用户完成什么>
82
- - **入口 / 出口**:<从哪进来、各动作去哪>
83
-
84
- **元素 & 区块清单**
85
-
86
- | 区块 | 元素 | 说明 |
87
- |---|---|---|
88
- | | | |
89
-
90
- **列表项 / 文案约束**
91
-
92
- | 内容 | 上限 | 行数 | 溢出处理 |
93
- |---|---|---|---|
94
- | | | | |
95
-
96
- **各状态**(每种都要写,没有的标「不适用」)
97
-
98
- | 状态 | 表现 |
99
- |---|---|
100
- | 空 | |
101
- | 加载中 | |
102
- | 成功 | |
103
- | 错误 | |
104
- | 无权限 | |
105
- | 超长 / 极端数据 | |
106
-
107
- **输入校验(长度上限,前后端双层)**
108
-
109
- | 字段 | 前端限制 | 后端校验 | 超限行为 |
110
- |---|---|---|---|
111
- | | | | |
112
-
113
- **交互 & 跳转**
114
-
115
- - <点 X → 去 Y>
116
-
117
- **边界**
118
-
119
- - <零结果 / 网络失败 / 超长 / 并发……>
@@ -1,104 +0,0 @@
1
- ---
2
- name: dwy-prototype
3
- description: 画产品原型(低保真 + 高保真两阶段):低保真用灰阶可点线框验流程和信息架构;高保真按端套壳、真实内容、画全状态(空/加载/错误/超长),作为细 PRD 底稿。涉及以下场景**必须**使用此 skill(即使没点名 'dwy-prototype'):用户说『帮我画个原型/线框图』『做个低保真/高保真原型』『把这个页面/流程画出来看看』『做个可点的 mockup』。HTML 产出、浏览器可看。区分:本 skill 画的是验证产品形态的原型(丢弃式/底稿),不是上线代码;要写生产级前端代码用 frontend-design;完整 0→1 流水线用 dwy-0to1。
4
- ---
5
-
6
- # dwy-prototype · 产品原型(低保真 + 高保真)
7
-
8
- 把产品画成能看能点的原型。两个阶段、两个不同目的:
9
-
10
- - **低保真**:灰阶可点线框,验**「是不是用户要的流程和信息架构」**——不验视觉,快是第一目标。
11
- - **高保真**:按端套壳、真实内容、全状态都画出来,①让用户确认视觉和交互细节 ②**作为细 PRD 的底稿**。
12
-
13
- ## 运行模式
14
-
15
- 上下文自适应,两种调用方式:
16
-
17
- - **单独调用(默认)**:用户直接让你画原型。**先问要哪个阶段**——「低保真验流程,还是高保真做视觉/底稿?」(或两者都要就先低保真再高保真)。从用户描述/已有 PRD 起步;产物落 `./prototype-lowfi/`、`./prototype-hifi/` 或用户指定位置;**不读写 STATE.md、不依赖 `docs/0to1/`**。做完跑对应阶段的「门」即结束。
18
- - **流水线调用**:`dwy-0to1` 调用,指令含「流水线模式」+ `phase=lowfi|hifi` + 前序产物路径 + 落盘路径。按 `phase` 只做指定阶段(编排器会在低保真、高保真各调一次、各卡一道门);**STATE 记账由 dwy-0to1 负责,本 skill 不碰 STATE.md**。
19
-
20
- ## 输入(画什么的依据)
21
-
22
- - 流水线模式:读编排器给的粗 PRD 拿核心功能;高保真阶段还要看已验过的低保真原型(在它基础上长出来)和目标端。
23
- - 单独模式:有 PRD/低保真就读;没有就先问清要画哪些页面/流程、做哪一端。
24
-
25
- ---
26
-
27
- ## 阶段一:低保真原型
28
-
29
- 用最快的方式画出可点的灰阶线框,让用户在浏览器点一遍确认走向对不对。这阶段是丢弃式的,**别在好不好看上浪费一分钟**。
30
-
31
- ### 怎么做
32
-
33
- 1. 从核心功能拎出**主流程**(用户从进入到完成核心任务走的那条线)。
34
- 2. 列出这条线上的页面 + 页面间跳转关系。低保真只覆盖主流程,边角页面先不画。
35
- 3. 写**一个 HTML 文件**画出来,规范:
36
- - **灰阶**:只用黑白灰,方框 + 边框代表区块。
37
- - **真实文案占位**:按钮、标题写真实文字(「发布」「登录」),别用色块代替文字、别 lorem。
38
- - **可点跳转**:用锚点 / 简单 JS 切换 div 模拟页面跳转,能点着走完整条流程。
39
- - **无颜色、无动画、无样式打磨**:不配色、不做圆角阴影、不写过渡动效。
40
- - **丢弃式**:只为这轮验证,过门后不进开发,别当代码维护。
41
- 4. 画完自己在浏览器点一遍,确认整条主流程能走通、没断点,再交给用户。
42
-
43
- ### 降级(无 GUI 产品 / 单页小工具)
44
-
45
- | 产品形态 | 这阶段怎么办 |
46
- |---|---|
47
- | CLI 工具 | 降级为**终端会话 mock**:写一段「用户敲什么命令 → 终端回显什么」的示例对话(纯文本/markdown),验证命令设计和输出格式 |
48
- | 后端 / 库 / SDK | 降级为 **API 契约示例**:列核心接口的请求/响应示例,验证接口形状和调用方式 |
49
- | 完全无 UI(守护进程等) | 跳过原型(流水线模式标 `skipped(无GUI)`) |
50
- | 单页小工具 | 低保真和高保真**合并成一轮**,一次画到位 |
51
-
52
- 降级产物仍落原型目录(如 `cli-session.md` / `api-contract.md`)。
53
-
54
- ### 产物 + 门
55
-
56
- - 路径:`prototype-lowfi/index.html`(单独默认 `./prototype-lowfi/`;流水线按编排器给的路径)。
57
- - HTML 顶部注释:`<!-- phase: lowfi | status: done | updated: <date +%Y-%m-%d> -->`
58
- - 落盘后**先自己在浏览器验证能点通**再声称完成(先验证再声称)。
59
- - 让用户**在浏览器打开点一遍**(给完整文件路径)。用 `AskUserQuestion`:摆主流程页面清单 + 跳转走向,问「流程对不对、是不是想要的信息架构?通过 / 哪步要改 / 流程重排?」要改就**迭代这个 HTML**再让用户看,直到点头。
60
-
61
- ---
62
-
63
- ## 阶段二:高保真原型
64
-
65
- 把低保真验过的流程,做成**像成品一样的高保真原型**。它不是「好看一点的低保真」,是细 PRD 的事实依据——**底稿越具体、越覆盖极端情况,细 PRD 越能细到照着写代码**。
66
-
67
- ### 怎么做
68
-
69
- 1. 确定端,**按端套壳**:
70
-
71
- | 端 | 套壳 |
72
- |---|---|
73
- | iOS | 手机视口(如 390×844)+ iPhone 设备框 |
74
- | 安卓 | 手机视口 + 安卓设备框 |
75
- | 桌面 | 窗口框(标题栏 + 内容区) |
76
- | Web | 响应式,画关键断点(移动 / 桌面至少两套) |
77
-
78
- 2. 用**真实内容**填充——真实文案、真实数据、真实头像占位图,**不是 lorem**。
79
- 3. **每个页面把全状态都画出来**(这是底稿价值所在,别只画「正常态」):
80
- - 空状态(列表为空、首次进入)
81
- - 加载中(骨架屏 / loading)
82
- - 错误(网络失败、请求出错)
83
- - 超长文本(标题/正文塞到最长,看怎么折叠/截断)
84
- - 极端数据(数字很大、列表很多项、零结果)
85
- 4. **仍然不做动画**——动效留到开发期,在细 PRD 里用文字描述(如「点赞后图标放大回弹 200ms」)。
86
- 5. 用 **HTML** 写(AI 生成 + 浏览器直接看最快),可上颜色、上真实视觉风格。
87
- 6. 按页面 / 状态拆多文件,方便逐页对照写细 PRD。
88
-
89
- ### 产物 + 门
90
-
91
- - 路径:`prototype-hifi/`(多文件,如 `home.html`、`home-empty.html`、`publish.html`、`publish-error.html`),建一个 `index.html` 或 `README.md` 做导航。
92
- - 每个 HTML 顶部注释:`<!-- phase: hifi | page: <页面名> | state: <normal/empty/error...> | updated: <date +%Y-%m-%d> -->`
93
- - 落盘后**自己在浏览器逐页看一遍**,确认全状态都画了、套壳对、内容真实,再声称完成。
94
- - 让用户**在浏览器逐页看**(给完整路径和导航)。用 `AskUserQuestion`:摆页面清单 + 每页画了哪些状态 + 套的什么端壳,问「视觉和交互细节确认吗?通过 / 哪页要改 / 哪个状态没覆盖到?」要改就迭代直到确认。
95
-
96
- ---
97
-
98
- ## 边界 / 禁止
99
-
100
- - **低保真禁止上颜色、做动画、打磨样式、用 lorem 假文、多文件工程化**——只验流程,一个丢弃式 HTML 搞定,快为先。
101
- - **高保真禁止用 lorem 假数据、禁止只画正常态**——真实内容 + 空/加载/错误/超长/极端全状态,才能当细 PRD 底稿。
102
- - **两阶段都不做动画**——动效留到开发期,用文字写进细 PRD。
103
- - **高保真不改流程方向**——流程在低保真已定,要改回低保真重画,别在高保真里偷偷改信息架构。
104
- - **原型不是上线代码**——验证产品形态用;写生产级前端代码是 frontend-design 的事。