create-dwy 0.15.0 → 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 (51) hide show
  1. package/CHANGELOG.md +8 -0
  2. package/bin/index.js +5 -3
  3. package/package.json +1 -1
  4. package/src/skills-install.js +48 -7
  5. package/src/sync-all.js +6 -18
  6. package/templates/ai-tools/CLAUDE.md +27 -0
  7. package/templates/ai-tools/rules/Android/dwy-android-pitfalls.md +52 -0
  8. package/templates/ai-tools/rules/Python/dwy-python-backend.md +16 -63
  9. package/templates/ai-tools/rules/Python/dwy-python-base-lib.md +89 -0
  10. package/templates/ai-tools/rules/Python/dwy-python-pitfalls.md +49 -0
  11. package/templates/ai-tools/rules/Vue/dwy-vue-base-lib.md +127 -0
  12. package/templates/ai-tools/rules/Vue/dwy-vue-core.md +22 -86
  13. package/templates/ai-tools/rules/Vue/dwy-vue-pitfalls.md +66 -0
  14. package/templates/ai-tools/rules//345/274/200/345/217/221/346/265/201/347/250/213/dwy-dependency-freshness.md +59 -0
  15. package/templates/ai-tools/rules//345/274/200/345/217/221/346/265/201/347/250/213/dwy-tdd-development.md +47 -2
  16. package/templates/ai-tools/skills//344/272/247/345/223/2010/345/210/2601/dwy-acceptance/SKILL.md +3 -2
  17. package/templates/ai-tools/skills//344/272/247/345/223/2010/345/210/2601/dwy-architecture/SKILL.md +51 -9
  18. package/templates/ai-tools/skills//344/272/247/345/223/2010/345/210/2601/dwy-commercial/SKILL.md +58 -0
  19. package/templates/ai-tools/skills//344/272/247/345/223/2010/345/210/2601/dwy-competitor/SKILL.md +2 -1
  20. package/templates/ai-tools/skills//344/272/247/345/223/2010/345/210/2601/dwy-explore/SKILL.md +83 -0
  21. package/templates/ai-tools/skills//344/272/247/345/223/2010/345/210/2601/dwy-mvp/SKILL.md +2 -1
  22. package/templates/ai-tools/skills//344/272/247/345/223/2010/345/210/2601/dwy-prd/SKILL.md +1 -0
  23. package/templates/ai-tools/skills//344/272/247/345/223/2010/345/210/2601/dwy-product-launcher/SKILL.md +14 -9
  24. package/templates/ai-tools/skills//344/272/247/345/223/2010/345/210/2601/dwy-product-launcher/references/state-and-contract.md +65 -13
  25. package/templates/ai-tools/skills//344/272/247/345/223/2010/345/210/2601/dwy-prototype/SKILL.md +30 -11
  26. package/templates/ai-tools/skills//344/272/247/345/223/2010/345/210/2601/dwy-release/SKILL.md +3 -2
  27. package/templates/ai-tools/skills//344/272/247/345/223/2010/345/210/2601/dwy-stage-design/SKILL.md +17 -10
  28. package/templates/ai-tools/skills//344/272/247/345/223/2010/345/210/2601/dwy-stage-dev/SKILL.md +42 -10
  29. package/templates/ai-tools/skills//344/272/247/345/223/2010/345/210/2601/dwy-stage-launch/SKILL.md +22 -10
  30. package/templates/ai-tools/skills//344/272/247/345/223/2010/345/210/2601/dwy-stage-prd/SKILL.md +13 -4
  31. package/templates/ai-tools/skills//344/272/247/345/223/2010/345/210/2601/dwy-stage-ship/SKILL.md +13 -4
  32. package/templates/ai-tools/skills//344/272/247/345/223/2010/345/210/2601/dwy-tasks/SKILL.md +12 -2
  33. package/templates/ai-tools/skills//344/272/247/345/223/2010/345/210/2601/dwy-tdd-dev/SKILL.md +15 -6
  34. package/templates/ai-tools/skills//344/272/247/345/223/2010/345/210/2601/dwy-validate/SKILL.md +2 -1
  35. package/templates/ai-tools/skills//344/272/247/345/223/2010/345/210/2601/dwy-version/SKILL.md +1 -0
  36. package/templates/ai-tools/skills//344/272/247/345/223/2010/345/210/2601/dwy-ideate/SKILL.md +0 -21
  37. package/templates/ai-tools/skills//345/274/200/345/217/221/346/265/201/347/250/213/dwy-0to1/SKILL.md +0 -113
  38. package/templates/ai-tools/skills//345/274/200/345/217/221/346/265/201/347/250/213/dwy-0to1/templates/STATE.md +0 -56
  39. package/templates/ai-tools/skills//345/274/200/345/217/221/346/265/201/347/250/213/dwy-dev-qa/SKILL.md +0 -117
  40. package/templates/ai-tools/skills//345/274/200/345/217/221/346/265/201/347/250/213/dwy-market-analysis/SKILL.md +0 -92
  41. package/templates/ai-tools/skills//345/274/200/345/217/221/346/265/201/347/250/213/dwy-prd-coarse/SKILL.md +0 -72
  42. 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
  43. package/templates/ai-tools/skills//345/274/200/345/217/221/346/265/201/347/250/213/dwy-prd-detailed/SKILL.md +0 -76
  44. 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
  45. package/templates/ai-tools/skills//345/274/200/345/217/221/346/265/201/347/250/213/dwy-prototype/SKILL.md +0 -104
  46. package/templates/ai-tools/skills//345/274/200/345/217/221/346/265/201/347/250/213/dwy-spike/SKILL.md +0 -81
  47. package/templates/ai-tools/skills//345/274/200/345/217/221/346/265/201/347/250/213/dwy-tdd-dev/SKILL.md +0 -212
  48. 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
  49. package/templates/ai-tools/skills//345/274/200/345/217/221/346/265/201/347/250/213/dwy-tech-feasibility/SKILL.md +0 -105
  50. package/templates/ai-tools/skills//345/274/200/345/217/221/346/265/201/347/250/213/dwy-version-plan/SKILL.md +0 -64
  51. 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
@@ -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 的事。
@@ -1,81 +0,0 @@
1
- ---
2
- name: dwy-spike
3
- description: 丢弃式技术验证(spike/POC):写最简代码只验核心流程跑不跑得通,让用户真机测,只产结论不留代码。涉及以下场景使用此 skill(即使没点名 'dwy-spike'):用户说『先写个 demo 验证下这个技术行不行』『做个 POC/spike 试试』『这个第三方 API/算法/性能能不能满足』『真机跑跑看能不能通』。代码隔离丢弃,产出实测结论(可行/不可行/换方案)。区分:本 skill 真写代码实测;只做纸面选型对比用 dwy-tech-feasibility;正式 TDD 开发落地用 dwy-tdd-dev;完整 0→1 流水线用 dwy-0to1。
4
- ---
5
-
6
- # dwy-spike · 丢弃式技术实测
7
-
8
- 写一个最简版本只验证核心流程跑不跑得通,让用户真机测。这步**只产结论,不产代码**——spike 是丢弃式 POC,用完即弃。
9
-
10
- ## 运行模式
11
-
12
- 上下文自适应,两种调用方式:
13
-
14
- - **单独调用(默认)**:用户直接让你验证某技术行不行。从用户描述的技术风险点起步;spike 代码放 `./spike/`、结论落 `./spike-result.md`(或用户指定);**不读写 STATE.md、不依赖 `docs/0to1/`**。做完跑下方「门」即结束。
15
- - **流水线调用**:`dwy-0to1` 调用,指令含「流水线模式」+ 前序产物路径(技术可行性)+ 落盘路径(代码 `docs/0to1/spike/`、结论 `docs/0to1/03-spike-result.md`)。**STATE 记账(含 target_platform 记录)由 dwy-0to1 负责,本 skill 不碰 STATE.md**。
16
-
17
- ## 输入(验什么)
18
-
19
- - 单独模式:从用户描述拎出要验的技术风险点;不清楚就问一句「主要担心哪个环节跑不通」。
20
- - 流水线模式:读编排器给的技术可行性产物,看「是否实测建议」和选定方案,确定要验的风险点。
21
-
22
- ## 怎么做
23
-
24
- 1. **先确定做哪一端**(决定 spike 写哪个平台)。用 `AskUserQuestion`:
25
-
26
- > 这个产品主要做哪一端?iOS / 安卓 / 桌面 / Web
27
-
28
- 端没定,spike 写哪个平台都是赌。(流水线模式下编排器会把选定的端记进 STATE。)
29
-
30
- 2. **写最简单的 spike(探针)**:
31
- - 只验**核心流程跑不跑得通**——那个技术风险点(新算法能不能算对、第三方 API 行为符不符合预期、性能够不够、硬件能不能集成)。
32
- - 砍到不能再砍:一条主链路,没 UI 美化、没边界处理、没配置项、没错误兜底。
33
- - 能验证流程就行,**别追求质量、别写测试**。
34
-
35
- 3. **代码隔离在 spike 目录**(单独 `./spike/`、流水线 `docs/0to1/spike/`):
36
- - 全部 spike 代码只放这个目录,跟正式工程隔开。
37
- - 目录里放个 `README` 一行字标清:**这是丢弃式 POC,正式开发不继承这里的代码。**
38
-
39
- 4. **让用户真机测核心流程**:
40
- - 把 spike 跑起来,让用户在**真实环境/真机**上走一遍核心流程。
41
- - 收集结果:通了 / 没通 / 哪卡住了 / 性能数字。
42
-
43
- ## 产物
44
-
45
- 落盘实测结论(单独默认 `./spike-result.md`;流水线按编排器给的路径)。frontmatter:
46
-
47
- ```markdown
48
- ---
49
- status: done
50
- updated: <date +%Y-%m-%d>
51
- ---
52
- ```
53
-
54
- 正文**记结论,不是代码**:
55
-
56
- | 块 | 内容 |
57
- |----|------|
58
- | 验的是什么 | 这次 spike 要验证的核心流程/技术风险点 |
59
- | 端 | iOS / 安卓 / 桌面 / Web |
60
- | 实测结论 | 核心流程**通 / 不通**,真机表现、关键性能数字 |
61
- | 踩了什么 | 实测中暴露的坑、限制、意外行为 |
62
- | 技术裁决 | **确认可行 / 不可行 / 要换方案**,一句话定性 |
63
-
64
- ❌ 把 spike 源码贴进结论文档
65
- ✅ 只写「核心流程通了,端到端 1.2s,第三方 API 偶发 429 需退避重试」这类结论
66
-
67
- ## 门(过门确认)
68
-
69
- 落盘后先**自己核一遍**(先验证再声称):结论是「通/不通」的明确定性吗、技术裁决给了吗、没把代码当结论塞进去吧。
70
-
71
- 然后 `AskUserQuestion` 摆**实测结论**,问:
72
-
73
- > 技术验证通过,可以往下走?还是没通过,回去换方案?
74
-
75
- ## 边界 / 禁止
76
-
77
- - **spike 是丢弃式**——只验流程,验完就扔。正式开发(dwy-tdd-dev)**只继承结论、不继承 spike 代码**。
78
- - **TDD 铁律**:正式开发没有失败测试不写生产代码。spike 代码没测试、没质量,**绝不能**当成开发起点直接往上加。
79
- - **spike 不写测试、不追求质量**——能跑通核心流程就够,别在这步过度工程。
80
- - **产物记结论不记代码**——结论文档里写「行/不行/为什么」,源码留在 spike 目录,不进结论文档。
81
- - 选端是**第一件事**,必须先问再写 spike。