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
@@ -0,0 +1,58 @@
1
+ ---
2
+ name: dwy-commercial
3
+ description: "【dwy·商业分析】产品 0 到 1 立项阶段(闸1 之后)。触发场景:用户说『商业分析 / 商业模式 / 怎么赚钱 / 变现 / 定价 / 单位经济 / CAC/LTV / GTM 获客 / 商业可行性 / commercial』,要在需求验证后判断商业模式跑不跑得通、能不能赚钱时。startup(创业/产品)模式下是硬闸门:商业不可行即停流程;builder(练手/学习)模式跳过不挡流程。"
4
+ ---
5
+
6
+ ## 职责(单一)
7
+ 盘商业模式 + 变现路径 + 定价 + 单位经济 + GTM 获客,给商业可行性 **pass/fail** 结论。**startup 模式硬闸门**:过不了流程停,不进闸 2(POC)。**builder 模式跳过**:读 `confirmed.idea.mode`,builder 直接回 skipped、不挡流程、不产出。
8
+
9
+ ## 输入(从哪读)
10
+ - state.json 的 `confirmed.idea`(含 `mode` = startup/builder、`target_user`、`narrowest_wedge`、`value_prop`、`key_assumptions`——变现与定价对着这个人和这点切入定)
11
+ - state.json 的 `confirmed.competitors`(竞品定价、现有变现方式对着它定差异化)
12
+ - `.dwy/prod/[项目]/01-立项/想法收敛.md`、`竞品分析.md`、`需求市场验证.md`
13
+
14
+ ## 模式分流(开工第一步)
15
+ 读 `confirmed.idea.mode`:
16
+ - **builder**(练手 / 学习 / 开源 / hackathon / 纯兴趣)→ 不逼商业,回写 `confirmed.commercial = { mode: "builder", pass: true, skipped: true, reason: "builder 模式不评估商业可行性" }`,不产出文件、不挡流程,直接放行进闸 2
17
+ - **startup**(奔着有人用、可能收钱、要做成产品)→ 走下面完整商业分析
18
+
19
+ ## 实现
20
+ [包装型] 用全局本地 skill(位于 `~/.dwy/skills/<外部skill名>/`):
21
+ 读其 `SKILL.md`(及同目录 scripts/、配套 .md),按它的方式与用户交互/提问,产出按下方「产出契约」落地。
22
+ - **提问形式(Claude Code 下强制)**:借用外部 skill 的「问什么、怎么一步步收敛」方法论,但**每个要用户选择/拍板的问题用 `AskUserQuestion` 工具弹点选卡片**,不在正文列 A/B/C/D 让用户打字;保留「一次一问、答完再问下一个」的节奏,开放式补充靠卡片的「Other」兜底。其他工具(Codex 等无此组件)退回外部 skill 原生的正文问答。
23
+ - 本 skill 依赖的外部 skill(各对应 `~/.dwy/skills/<名>/`):
24
+ - `startup-canvas` — 整体盘点(战略 9 节 + 商业模式 2 节),作为引子框架,先跑它把商业全貌摸一遍
25
+ - `business-model` — 商业模式画布 9 模块(详细展开成本结构 / 收入流)
26
+ - `monetization-strategy` — 3-5 个变现方案(含 CAC/LTV/回本/毛利单位经济 + 低成本验证实验)
27
+ - `pricing-strategy` — 定价模型选型 + 分层 + 价值计量 + 价格敏感度
28
+ - `porters-five-forces` — 赛道竞争结构(补「赛道」维度,判断利润空间是否被结构压扁)
29
+ - `gtm-strategy` — 首批用户从哪来、渠道、获客成本估算、90 天路线
30
+ - 若 `~/.dwy/skills/<名>/` 不存在:提示用户先跑 `dwy skills install`(或 `dwy claude sync` 会自动装),不要自己用内置能力顶替。
31
+
32
+ ### 推荐跑法(顺序,可按上下文跳)
33
+ 1. `startup-canvas` 先出整体画布(摸商业全貌 + 战略一致性)
34
+ 2. `monetization-strategy` 出 3-5 个变现方案 + 各自单位经济 → 用户选 1-2 个主攻
35
+ 3. `pricing-strategy` 对选定方案细化定价
36
+ 4. `porters-five-forces` 判赛道结构是否压扁利润(利润空间 → 可行性)
37
+ 5. `gtm-strategy` 出首批获客路径
38
+ 6. 综合给可行性结论(pass/fail)
39
+
40
+ ### 可行性判据(pass/fail 怎么判)
41
+ startup 模式给 pass 至少满足:
42
+ - 能讲通一条**具体变现路径**(不是「以后可以收钱」)
43
+ - 单位经济估算**合理**:LTV/CAC ≥ 3(或能说清到达该值的路径),毛利率不为负
44
+ - 有**低成本验证实验**可证伪付费意愿(落地页/预售/访谈愿付价)
45
+ - `porters-five-forces` 没暴露致命结构(如:供方垄断 + 买方集中 + 无差异化壁垒 → 利润被压扁)
46
+ 四条任一明显不成立 → fail,写清哪条挂了、缺什么证据。
47
+
48
+ ## 产出契约(硬约束)
49
+ - 落到:`.dwy/prod/[项目]/01-立项/商业分析.md`
50
+ - 固定章节:
51
+ - 商业模式画布(9 模块 或 startup-canvas 摘要)
52
+ - 变现路径(3-5 个方案,每个含:怎么收钱 + 单位经济 CAC/LTV/毛利率/回本周期估算 + 风险;**标注用户主攻的 1-2 个**)
53
+ - 定价策略(模型选型 + 2-4 层分层 + 价值计量 + 价格敏感度判断)
54
+ - 赛道结构(波特五力摘要 + 利润空间判断)
55
+ - GTM 获客路径(首批用户来源 + 渠道 + 获客成本估算 + 90 天动作)
56
+ - **可行性结论 pass/fail**(含理由 + 必须先验证的关键假设 + 对应低成本实验)
57
+ - 回写 state.json:`confirmed.commercial`(含 `mode`、`pass` 布尔、`skipped` 布尔、`monetization` 主攻方案、`unit_economics` 关键数字、`gtm` 首批渠道)
58
+ - **startup 模式 fail 时流程必须中断**,不进闸 2(POC);builder 模式不写 fail
@@ -7,12 +7,13 @@ description: "【dwy·竞品分析】产品 0 到 1 立项阶段。触发场景
7
7
  盘点已有竞品 + 估算市场规模,找出差异化切入点。
8
8
 
9
9
  ## 输入(从哪读)
10
- - state.json 的 `confirmed.idea`
10
+ - state.json 的 `confirmed.idea`(含 explore 逼出的具体目标人 target_user、最窄切入 narrowest_wedge——差异化对着这个人定)
11
11
  - `.dwy/prod/[项目]/01-立项/想法收敛.md`
12
12
 
13
13
  ## 实现
14
14
  [包装型] 用全局本地 skill(位于 `~/.dwy/skills/<外部skill名>/`):
15
15
  读其 `SKILL.md`(及同目录 scripts/、配套 .md),按它的方式与用户交互/提问,产出按下方「产出契约」落地。
16
+ - **提问形式(Claude Code 下强制)**:借用外部 skill 的「问什么、怎么一步步收敛」方法论,但**每个要用户选择/拍板的问题用 `AskUserQuestion` 工具弹点选卡片**,不在正文列 A/B/C/D 让用户打字;保留「一次一问、答完再问下一个」的节奏,开放式补充靠卡片的「Other」兜底。其他工具(Codex 等无此组件)退回外部 skill 原生的正文问答。
16
17
  - 本 skill 依赖的外部 skill:`competitor-analysis`、`market-sizing`(各对应 `~/.dwy/skills/<名>/`)
17
18
  - 若 `~/.dwy/skills/<名>/` 不存在:提示用户先跑 `dwy skills install`(或 `dwy claude sync` 会自动装),不要自己用内置能力顶替。
18
19
 
@@ -0,0 +1,83 @@
1
+ ---
2
+ name: dwy-explore
3
+ description: "【dwy·想法探索收敛】产品 0 到 1 立项第一步,帮『想做但还不清楚』的人想清楚做什么、值不值得做,并收敛成结构化想法定义。触发场景:用户说『我想做个东西 / 有个想法但不清楚 / 帮我想想做什么 / 这个值不值得做 / 想做但没想好 / 想法收敛 / explore / ideate』,在还没想清楚要做什么、写任何代码或文档之前。借鉴 YC office-hours 的 forcing questions 方法论(自写,无外部依赖)。"
4
+ ---
5
+
6
+ ## 职责(单一)
7
+ 立项第一步,一次干完两件事:① 用 YC 式 forcing questions 逼用户把模糊想法想清楚(做什么、给谁、值不值、最窄切入);② 把想清楚的结论**收敛成结构化的产品想法定义**。"想不清楚或不值得"的想法在这里就被劝退,想清楚的直接产出可供下游用的 `confirmed.idea`。
8
+
9
+ ## 输入(从哪读)
10
+ - 用户口述的模糊想法(立项最前端,无上游产出)
11
+
12
+ ## 实现(自写,内化方法论)
13
+
14
+ 借鉴 gstack 的 office-hours(Garry Tan / YC,MIT),把它的 forcing questions 方法论内化到这里。**不装 gstack、不依赖任何外部 skill**。
15
+
16
+ ### 提问形式(Claude Code 下强制)
17
+ - 每个问题用 `AskUserQuestion` 工具弹点选卡片,**一次只问一个**,答完再问下一个,不在正文列 A/B/C/D 让用户打字。
18
+ - 开放式补充靠卡片的「Other」兜底。
19
+ - 其他工具(Codex 等无此组件)退回正文逐问。
20
+
21
+ ### 第一步:判模式
22
+ 先判断用户在做什么,决定走哪条线:
23
+ - **创业/产品线(startup)**:奔着有人用、可能收钱、要做成产品 → 走六个 forcing questions
24
+ - **Builder 线**:练手 / 学习 / 开源 / hackathon / 纯兴趣 → **不逼商业**,走轻量设计思维 brainstorm(帮想清楚要做成什么样、技术怎么选、范围多大),跳过下面六问
25
+
26
+ ### 六个 forcing questions(startup 线,一次一问)
27
+ 逐个问,**追问到答案具体、有证据、让人不舒服为止**。舒服 = 没想够深。
28
+
29
+ - **Q1 需求真实性**:「最强的证据是什么——证明真有人要这个?不是『感兴趣』、不是 waitlist,而是没了会抓狂、要重新凑合。」
30
+ - 逼到:具体行为、有人付钱、有人扩大使用、有人把工作流搭在上面。
31
+ - 红旗:「大家说有意思」「攒了 500 个 waitlist」「VC 看好这赛道」——这些都不是需求。
32
+ - 追问后还要查:关键词有没有定义清楚(「AI 化」「无缝体验」要能量化)?藏了什么没验证的假设?是真痛点还是脑补(「我觉得开发者会想要」是假设,「我前公司三个开发者每周花 10 小时干这个」是真的)。
33
+ - **Q2 现状替代**:「用户现在怎么凑合解决这个问题——哪怕很烂?这个凑合花他多少时间/钱?」
34
+ - 逼到:具体工作流、花的小时数、浪费的钱、拼凑的工具、专门雇人手工做。
35
+ - 红旗:「现在没方案,所以机会大」——真没人凑合,往往是痛点不够痛、不值得行动。
36
+ - **Q3 极致具体**:「点名最需要它的那个**具体的人**。什么头衔?什么让他升职、什么让他被开、什么让他失眠?」
37
+ - 逼到:一个名字、一个角色、一个不解决会面临的具体后果,最好是亲耳从那人嘴里听到的。
38
+ - 红旗:类别级答案——「医疗企业」「中小公司」「营销团队」。类别不是人,你没法给一个类别发邮件。
39
+ - B2B 说职业影响、消费品说日常痛点/社交时刻、个人/开源说被解锁的周末项目——后果要贴合领域,但绝不能停在「用户」「产品经理」。
40
+ - **Q4 最窄切入**:「本周就有人肯付真钱的最小版本是什么?不是建完整个平台之后。」
41
+ - 逼到:一个功能、一个工作流,可能简单到一封周报邮件或一个自动化。能在几天内发出去、有人愿意付。
42
+ - 红旗:「得先建完整平台才能用」「砍了就没差异化了」——这是迷恋架构、不是迷恋价值。
43
+ - 加问:「如果用户什么都不用做就能拿到价值——不登录、不集成、不配置——会是什么样?」
44
+ - **Q5 观察意外**:「你真坐下来看过别人用、且没在旁边帮忙吗?他做了什么让你意外的?」
45
+ - 逼到:一个具体的意外,用户做了违背你假设的事。没有意外 = 要么没看、要么没在意。
46
+ - 红旗:「发了问卷」「做了几个 demo 电话」「没啥意外,符合预期」——问卷会撒谎、demo 是表演、「符合预期」= 被既有假设过滤了。
47
+ - 金矿:用户拿产品干了它没被设计来干的事——那常是真正的产品在冒头。
48
+ - **Q6 未来契合**:「3 年后世界明显不同了(一定会),你的产品变更必需、还是更没用?」
49
+ - 逼到:关于用户世界如何变、为什么这个变化让产品更有价值的具体主张。
50
+ - 红旗:「市场每年涨 20%」(增长率不是愿景)、「AI 越来越好我们就越好」(每个对手都能这么说的水涨船高论)。
51
+
52
+ ### Smart routing(按阶段只问相关的,不是每次六问全砸)
53
+ - 纯想法 / 还没产品 → Q1, Q2, Q3
54
+ - 已有用户 → Q2, Q4, Q5
55
+ - 已有付费客户 → Q4, Q5, Q6
56
+ - 纯工程 / 基建 → Q2, Q4
57
+ - 内部项目(intrapreneurship)→ Q4 改问「让你 VP/赞助人点头的最小 demo 是什么」,Q6 改问「换个领导/重组后它还活得下来吗」
58
+ - 前面答案已覆盖后面的问题 → 跳过,只问还不清楚的
59
+
60
+ ### Anti-sycophancy(不拍马屁,硬性)
61
+ - 好答案 → 点名哪里好,**立刻换更狠的追问**,不停留。最好的奖励是下一个更难的问题。
62
+ - 答案模糊 → 先重述帮用户看清「我理解你其实想做的是 X,对吗」,再逼具体,别耗 10 分钟。
63
+ - 用户不耐烦(「别问了直接做」)→ 说「硬问题才是价值,跳过等于不考试直接开药。再问两个最关键的就走」,按该阶段 routing 挑最关键的 2 个,问完直接进结论。第二次还推 → 尊重,立即进结论,不问第三次。
64
+ - 只有用户给出完整方案 + 真证据(现有用户/收入数字/具体客户名)才允许全跳,但仍要给出结论。
65
+
66
+ ## 问运行模式(idea 收敛后,需求讨论完的点)
67
+ idea 收敛、放行进竞品分析前,**问一次运行模式**(`AskUserQuestion`:`standard` 逐步推进、每阶段我介入确认 / `auto` 全自动跑到底、AI 自主决策最后出结果,适合 demo)。写回 `state.json` 顶层 `run_mode`。
68
+ - 这是**运行模式**(怎么跑),区别于本 skill 判的 `confirmed.idea.mode`(startup/builder **产品类型**),两者独立。
69
+ - 后续总控阶段间询问 + 各 stage 内门控都读 `run_mode`;`auto` 下仍保留硬闸门(validate/poc/高风险不可逆)。
70
+
71
+ ## 产出契约(硬约束)
72
+ - 落到:`.dwy/prod/[项目]/01-立项/想法收敛.md`
73
+ - 固定章节(前半逼问纪要 + 后半结构化定义,一次产出):
74
+ - 模式判定(startup / builder + 理由)
75
+ - 六问答案纪要(实际问了哪几个 + 用户答案 + 逼出的具体结论;builder 模式写设计思维结论)
76
+ - **核心问题**(一句话:这产品解决什么)
77
+ - **目标用户**(Q3 逼出的那个具体的人,不是类别)
78
+ - **价值主张**(为什么用户非用不可)
79
+ - **关键假设**(成立则产品成立的几条前提,供下游 validate 去验)
80
+ - **最窄切入**(Q4:本周就有人付钱的最小版本,供下游 mvp 砍范围)
81
+ - **边界与不做什么**
82
+ - 红旗与是否放行(触红旗的答案;想清楚 → 放行进竞品分析;想不清楚或明显不值 → 建议停下重想)
83
+ - 回写 state.json:`confirmed.idea`(含产品类型 mode / 是否放行 pass + 上述结构化定义;原 exploration 的方向并入此字段,不另列)+ 顶层 `run_mode`(standard/auto)
@@ -7,12 +7,13 @@ description: "【dwy·MVP定义】产品 0 到 1 立项阶段(闸3)。触发
7
7
  从想法+验证结果,收敛出第一版 MVP 功能清单。**功能硬上限 ≤7 个**,超出的进后续版本。
8
8
 
9
9
  ## 输入(从哪读)
10
- - state.json 的 `confirmed.idea`、`confirmed.validation`、`confirmed.poc`
10
+ - state.json 的 `confirmed.idea`(含 explore 逼出的最窄切入 narrowest_wedge——MVP 砍 ≤7 直接对着它砍)、`confirmed.validation`、`confirmed.poc`
11
11
  - `.dwy/prod/[项目]/01-立项/想法收敛.md`、`需求市场验证.md`、`技术验证.md`
12
12
 
13
13
  ## 实现
14
14
  [包装型] 用全局本地 skill(位于 `~/.dwy/skills/<外部skill名>/`):
15
15
  读其 `SKILL.md`(及同目录 scripts/、配套 .md),按它的方式与用户交互/提问,产出按下方「产出契约」落地。
16
+ - **提问形式(Claude Code 下强制)**:借用外部 skill 的「问什么、怎么一步步收敛」方法论,但**每个要用户选择/拍板的问题用 `AskUserQuestion` 工具弹点选卡片**,不在正文列 A/B/C/D 让用户打字;保留「一次一问、答完再问下一个」的节奏,开放式补充靠卡片的「Other」兜底。其他工具(Codex 等无此组件)退回外部 skill 原生的正文问答。
16
17
  - 本 skill 依赖的外部 skill:`prioritize-features`、`opportunity-solution-tree`(各对应 `~/.dwy/skills/<名>/`)
17
18
  - 若 `~/.dwy/skills/<名>/` 不存在:提示用户先跑 `dwy skills install`(或 `dwy claude sync` 会自动装),不要自己用内置能力顶替。
18
19
 
@@ -13,6 +13,7 @@ description: "【dwy·PRD生成】产品 0 到 1 需求规划阶段。触发场
13
13
  ## 实现
14
14
  [包装型] 用全局本地 skill(位于 `~/.dwy/skills/<外部skill名>/`):
15
15
  读其 `SKILL.md`(及同目录 scripts/、配套 .md),按它的方式与用户交互/提问,产出按下方「产出契约」落地。
16
+ - **提问形式(Claude Code 下强制)**:借用外部 skill 的「问什么、怎么一步步收敛」方法论,但**每个要用户选择/拍板的问题用 `AskUserQuestion` 工具弹点选卡片**,不在正文列 A/B/C/D 让用户打字;保留「一次一问、答完再问下一个」的节奏,开放式补充靠卡片的「Other」兜底。其他工具(Codex 等无此组件)退回外部 skill 原生的正文问答。
16
17
  - 本 skill 依赖的外部 skill:`create-prd`(对应 `~/.dwy/skills/create-prd/`)
17
18
  - 若 `~/.dwy/skills/create-prd/` 不存在:提示用户先跑 `dwy skills install`(或 `dwy claude sync` 会自动装),不要自己用内置能力顶替。
18
19
 
@@ -6,8 +6,10 @@ description: "【dwy·全流程总控】从模糊想法到上线产品的唯一
6
6
  ## 职责(总控·编排层)
7
7
  从模糊想法到产品的唯一入口。按顺序串 5 个阶段 skill,维护 state.json(进度 + 已确认结论),并做多版本子 Agent 编排。**不掺产出内容**,产出由阶段内原子 skill 落地。
8
8
 
9
- ## 渐进式推进(核心交互)
10
- **不在入口预问"走到哪个阶段"。** 直接从立项第一步开始往下走,一步一步推进,每个阶段准出后问一句「继续下一步 / 到此为止」,由用户当场决定走不走。终点不预设——走一步看一步,用户随时可喊停。
9
+ ## 渐进式推进(核心交互,读 run_mode)
10
+ **不在入口预问"走到哪个阶段"。** 直接从立项第一步开始往下走。`dwy-explore` 在 idea 收敛后会问一次 `run_mode`(standard/auto),之后推进节奏读它:
11
+ - **standard**:每个阶段准出后问一句「继续下一步 / 到此为止」,用户当场决定。终点不预设、随时可喊停。
12
+ - **auto**:阶段间不问,自动连跑到底、最后出结果;**仅硬闸门未过才停**(立项的 validate/poc、高风险不可逆操作)。
11
13
 
12
14
  ```
13
15
  开始 → dwy-stage-launch(立项·三闸门)
@@ -23,12 +25,12 @@ description: "【dwy·全流程总控】从模糊想法到上线产品的唯一
23
25
 
24
26
  规则:
25
27
  - **从第一步直接开始**,不让用户提前选终点
26
- - 每阶段准出后**只问"继不继续"**,不问"要走到哪"
27
- - 闸门内(立项的需求验证/POC)若没过,自动停在当前阶段,不往下走
28
+ - standard 下每阶段准出后**只问"继不继续"**,不问"要走到哪";auto 下不问、直接流转
29
+ - 闸门内(立项的需求验证/POC)若没过,**无论 standard/auto 都自动停**在当前阶段,不往下走
28
30
  - 用户喊停时,已完成阶段的产出和 state.json 都已落盘,下次可断点续跑
29
31
 
30
32
  按序的五阶段:
31
- 1. **dwy-stage-launch** — 立项(三闸门:需求验证 → POC → MVP)
33
+ 1. **dwy-stage-launch** — 立项(闸门:需求验证 → 商业可行性[startup 硬闸] → POC → MVP)
32
34
  2. **dwy-stage-prd** — 需求版本
33
35
  3. **dwy-stage-design** — 设计架构
34
36
  4. **dwy-stage-dev** — TDD 开发
@@ -36,20 +38,23 @@ description: "【dwy·全流程总控】从模糊想法到上线产品的唯一
36
38
 
37
39
  进度以 `state.json` 的 `current_stage` 为准;可从任意阶段断点续跑。
38
40
 
41
+ ## 读 state 先检 schema 版本(老项目升级入口)
42
+ 读到**已存在**的 `state.json` 时,**先检 `schema_version`**:缺失或低于当前(`"3"`)→ 按 `references/state-and-contract.md`「七、schema 版本与迁移」逐级迁移(v1→v2→v3),迁移后再续跑。这是老用户旧 state 无感升级的入口。
43
+
39
44
  ## 首次初始化(只建根,不建阶段目录)
40
45
  新项目首次进入时,**只**做两件最小事:
41
- - 建项目根目录 `.dwy/prod/[项目]/`(不建 01~04 任何阶段子目录)
42
- - 初始化 `state.json`
46
+ - 建项目根目录 `.dwy/prod/[项目]/`(不建 01~05 任何阶段子目录)
47
+ - 初始化 `state.json`(写 `schema_version = "3"`)
43
48
 
44
49
  产品产出 `.dwy/prod/[项目]/` 入库,无需改 `.gitignore`(外部 skill 在全局 `~/.dwy/skills/`,不落项目)。若包装型原子 skill 触发时 `~/.dwy/skills/<name>/` 不存在,提示用户先跑 `dwy skills install`。
45
50
 
46
- **阶段目录渐进式按需建**:`01-立项/` 进立项时才建,`02-需求规划/` 进需求阶段才建……不要一次把四个阶段目录全建出来(那不是渐进式)。state schema、各 skill 的 `confirmed.*` 字段契约、外部 skill 全局安装见 `references/state-and-contract.md`。
51
+ **阶段目录渐进式按需建**:`01-立项/` 进立项时才建,`02-需求规划/` 进需求阶段才建……不要一次把五个阶段目录全建出来(那不是渐进式)。state schema、各 skill 的 `confirmed.*` 字段契约、外部 skill 全局安装见 `references/state-and-contract.md`。
47
52
 
48
53
  ## state.json(进度 + 结论)
49
54
  落 `.dwy/prod/[项目]/state.json`,含:
50
55
  - `current_stage` — 当前阶段
51
56
  - `current_version` — 当前版本(如 `V1.0`)
52
- - `confirmed.*` — 各原子的已确认结论引用(idea / competitors / validation / poc / mvp_features / prd / version_plan / tasks / prototype / architecture / dev_progress / acceptance / release)
57
+ - `confirmed.*` — 各原子的已确认结论引用(idea / competitors / validation / commercial / poc / mvp_features / prd / version_plan / tasks / prototype / architecture / dev_progress / acceptance / release)
53
58
  - `versions` — 各版本状态(路线图 + 完成情况)
54
59
 
55
60
  ## 多版本编排逻辑
@@ -4,15 +4,16 @@
4
4
 
5
5
  ## 一、产出与缓存目录(最终全貌,**渐进式按需创建**)
6
6
 
7
- 下面是流程全部走完后的**目标结构**,不是初始化时一次建好的。**渐进式原则:每个阶段真正开始时,才创建它自己那一级目录和文件**——初始化只建项目根 + state.json,`01-立项/` 进立项才建,`02-需求规划/` 进需求阶段才建,以此类推。不要上来就把 01~04 四个阶段目录全建出来。
7
+ 下面是流程全部走完后的**目标结构**,不是初始化时一次建好的。**渐进式原则:每个阶段真正开始时,才创建它自己那一级目录和文件**——初始化只建项目根 + state.json,`01-立项/` 进立项才建,`02-需求规划/` 进需求阶段才建,以此类推。不要上来就把 01~05 五个阶段目录全建出来。
8
8
 
9
9
  ```
10
10
  .dwy/prod/
11
11
  [项目名]/ # 产品产出,入库(git 跟踪)
12
12
  01-立项/
13
- 想法收敛.md
13
+ 想法收敛.md # dwy-explore:YC 6问逼清 + 收敛成结构化定义
14
14
  竞品分析.md
15
15
  需求市场验证.md # 闸1·总闸门
16
+ 商业分析.md # 商业闸门·startup 硬闸(builder 跳过)
16
17
  技术验证.md # 闸2
17
18
  poc/ # 最小 POC 代码
18
19
  MVP清单.md # 闸3·≤7
@@ -20,12 +21,14 @@
20
21
  PRD.md
21
22
  版本路线图.md
22
23
  开发任务拆解.md
23
- 03-设计与架构/
24
- prototypes/ # dwy-whiteboard-prototype 白板 HTML
24
+ 03-原型设计/
25
+ wireframe/ # dwy-prototype 第一轮:低保真线框初稿(静态 HTML,一页一图)
26
+ hifi/ # dwy-prototype 第二轮:高保真平面图(静态 HTML,一页一图)
27
+ 04-架构设计/
25
28
  技术架构.md
26
- 数据库设计.md
29
+ 数据库设计.md # 有后端时才出
27
30
  接口契约.md
28
- 04-上线交付/
31
+ 05-上线交付/
29
32
  验收报告.md
30
33
  上架物料.md
31
34
  埋点与指标.md
@@ -48,41 +51,50 @@
48
51
 
49
52
  ```json
50
53
  {
54
+ "schema_version": "3",
51
55
  "version": "1.0",
52
56
  "project_name": "...",
53
57
  "current_stage": 1,
54
58
  "current_round": "stage1_round1",
59
+ "run_mode": "standard | auto",
55
60
  "confirmed": {
56
- "idea": {},
61
+ "idea": { "mode": "startup | builder", "pass": true, "core_problem": "...", "target_user": "...", "value_prop": "...", "key_assumptions": [], "narrowest_wedge": "...", "boundaries": "..." },
57
62
  "competitors": {},
58
63
  "validation": { "pass": true, "evidence": "...", "method": "..." },
64
+ "commercial": { "mode": "startup | builder", "pass": true, "skipped": false, "monetization": "...", "unit_economics": {}, "gtm": "..." },
59
65
  "poc": { "pass": true, "deadlock": "...", "result": "..." },
60
66
  "mvp_features": [],
61
67
  "prd": {},
62
68
  "version_plan": {},
63
69
  "tasks": {},
70
+ "wireframe": {},
64
71
  "prototype": {},
65
72
  "architecture": {},
66
- "dev_progress": { "<module>": "todo | done" },
73
+ "dev_progress": { "<module>": { "<task>": "todo | done" } },
67
74
  "acceptance": {},
68
75
  "release": {}
69
76
  }
70
77
  }
71
78
  ```
72
79
 
80
+ - `schema_version` — **state 结构版本**,当前 `"3"`,升级破坏性结构时 bump(迁移见第七节)。
81
+ - `version` — **产品版本**(用户 app 的 V1.0/V1.1 迭代号),与 schema_version 无关,别混。
82
+
73
83
  字段名是各 skill 的对外契约,**回写方与读取方必须用同一名字**:
74
84
 
75
85
  | 原子 skill | 回写字段 | 下游读取方 |
76
86
  |---|---|---|
77
- | dwy-ideate | confirmed.idea | dwy-competitor |
87
+ | dwy-explore | confirmed.idea(逼问理清 + 收敛成结构化定义) | dwy-competitor(target_user/wedge 定位)+ dwy-validate(core_problem/assumptions 转定量)+ dwy-mvp(wedge 砍范围)+ dwy-prd |
78
88
  | dwy-competitor | confirmed.competitors | dwy-validate |
79
- | dwy-validate | confirmed.validation | dwy-poc(仅 pass=true 才执行) |
89
+ | dwy-validate | confirmed.validation | dwy-commercial(仅 pass=true 才执行) + dwy-poc |
90
+ | dwy-commercial | confirmed.commercial | dwy-poc(startup 模式仅 pass=true 或 skipped 才执行;builder 跳过) |
80
91
  | dwy-poc | confirmed.poc | dwy-mvp |
81
92
  | dwy-mvp | confirmed.mvp_features | dwy-stage-prd |
82
93
  | dwy-prd | confirmed.prd | dwy-version |
83
94
  | dwy-version | confirmed.version_plan | dwy-tasks / dwy-stage-design |
84
95
  | dwy-tasks | confirmed.tasks | dwy-stage-dev |
85
- | dwy-prototype | confirmed.prototype | — |
96
+ | dwy-prototype(第一轮·线框初稿) | confirmed.wireframe | dwy-prototype 第二轮(基于线框升保真) |
97
+ | dwy-prototype(第二轮·高保真平面图) | confirmed.prototype | dwy-architecture(原型定稿后才进架构) |
86
98
  | dwy-architecture | confirmed.architecture | dwy-stage-dev |
87
99
  | dwy-tdd-dev | confirmed.dev_progress | dwy-stage-ship |
88
100
  | dwy-acceptance | confirmed.acceptance | dwy-release |
@@ -90,7 +102,7 @@
90
102
 
91
103
  ## 四、外部 skill 全局安装 `~/.dwy/skills/`
92
104
 
93
- 包装型原子 skill(dwy-ideate / dwy-competitor / dwy-validate / dwy-mvp / dwy-prd / dwy-version / dwy-tasks / dwy-tdd-dev / dwy-acceptance / dwy-release)依赖 pm-skills / superpowers 的外部 skill,装在**全局** `~/.dwy/skills/<name>/`:
105
+ 包装型原子 skill(dwy-competitor / dwy-validate / dwy-commercial / dwy-mvp / dwy-prd / dwy-version / dwy-tasks / dwy-tdd-dev / dwy-acceptance / dwy-release)依赖 pm-skills / superpowers 的外部 skill,装在**全局** `~/.dwy/skills/<name>/`:
94
106
 
95
107
  - 每个外部 skill 是**整个目录**(含 scripts/ 与配套 .md,不止 SKILL.md)
96
108
  - 由 cli 命令 `dwy skills install` 安装/更新(clone 两仓库的指定 stable tag → 搬整目录 + LICENSE → 写 `VERSIONS.json`)
@@ -98,6 +110,46 @@
98
110
  - 当前 stable:pm-skills **v2.0.0** | superpowers **v6.0.3**(升级改 cli 的 `skills-install.js` 清单 tag)
99
111
  - 原子 skill 运行时**只读** `~/.dwy/skills/<name>/`,缺失则提示用户先 `dwy skills install`,不自己拉、不降级
100
112
 
101
- ## 五、断点续跑
113
+ ## 五、运行模式与流转(run_mode)
114
+
115
+ `state.json` 顶层 `run_mode`,取值 `standard | auto`,由 `dwy-explore` 在 idea 收敛后问一次写入(区别于 `confirmed.idea.mode` 的 startup/builder **产品类型**,`run_mode` 是**怎么跑**)。总控与每个 `dwy-stage-*` 都读它:
116
+
117
+ | run_mode | 阶段间 | stage 内门控(原型两轮 / PRD 确认等) | 硬闸门(validate 没人要 / poc 做不出 / 高风险不可逆) |
118
+ |---|---|---|---|
119
+ | `standard` | 每阶段准出后问「继续 / 停」 | 照常问用户 | 停 |
120
+ | `auto` | 不问,自动连跑到底出结果 | 全部 AI 自动决策、不问 | **仍停**(auto 不绕硬闸门) |
121
+
122
+ **流转规则**:每个 stage 准出 = 回写 `current_stage` + 按 `run_mode` 决定「问后流转」(standard)或「直接触发下一 `dwy-stage-*`」(auto)。总控 `dwy-product-launcher` 与单独触发某 stage **行为一致**,都走这套流转。最后一阶段 ship 无下游,正常结束。
123
+
124
+ **stage 独立触发 + 上游补齐**:单独触发某 `dwy-stage-*` 时上游 `confirmed.*` 缺失 → 不报错,基于已聊上下文 + 现有产出文件**轻量补齐**够本阶段用的上游结论,写回对应 `confirmed.*` 标注「上下文补齐」。**安全边界**:可补产出文档/范围类(prd/version_plan/tasks/prototype/architecture/mvp_features 范围);**禁止**凭空标硬闸门 `pass=true`(`validation`/`poc` 只能由 launch 真实跑出)。
125
+
126
+ ## 六、断点续跑
102
127
 
103
128
  会话中断后,总控读 `state.json` 的 `current_stage` + `current_round`,从中断处续跑。已确认字段不重做。
129
+
130
+ ## 七、schema 版本与迁移(单一来源)
131
+
132
+ **当前 `schema_version = "3"`。** 缺失或 `< 3` = 老结构,**读 state 的 skill(总控 / 任一 stage)必须先迁移再继续**——这是老用户无感升级的唯一入口。迁移**逐级叠加**(v1 项目走 v1→v2→v3)。新建项目直接写 `schema_version = "3"`。
133
+
134
+ ### v1 → v2 迁移规则(AI 执行,幂等)
135
+ 老 state(无 `schema_version`,或 dev_progress 是平层)按序处理:
136
+
137
+ 1. **dev_progress 平层 → 嵌套**:`{"<module>": "todo|done"}` → `{"<module>": {"_legacy": "todo|done"}}`(旧模块整体视为一个已完成/待办任务占位;本版本新任务在该 module 下追加 `<task>`)
138
+ 2. **旧 prototypes/ 原型归档**:`prototypes/` 目录下的旧原型文件 → 移到 `prototypes/wireframe/`,在该目录 `index` 注明「旧版原型(可交互白板),仅历史保留」;旧 `confirmed.prototype` **保留**,但标注「旧版产物,新两轮(线框 → 高保真平面图)可按需重跑」
139
+ 3. **补 `confirmed.wireframe`**(若无)= 引用迁移后的 `prototypes/wireframe/`
140
+ 4. **补顶层 `run_mode`**(若无)= `"standard"`
141
+ 5. **写 `schema_version = "2"`**(继续走 v2→v3)
142
+ 6. 迁移完在 `09-开发日志.md` 记一行(迁移前版本 / 改了什么)
143
+
144
+ ### v2 → v3 迁移规则(AI 执行,幂等)
145
+ v2 把原型与架构拆成独立平级阶段目录、上线交付目录顺延。`schema_version = "2"`(或 v1→v2 刚处理完)的项目按序处理:
146
+
147
+ 1. **原型目录独立**:`03-设计与架构/prototypes/wireframe|hifi/` → 移到 `03-原型设计/wireframe|hifi/`
148
+ 2. **架构文档独立**:`03-设计与架构/{技术架构,数据库设计,接口契约}.md` → 移到 `04-架构设计/`
149
+ 3. **上线交付顺延**:`04-上线交付/` 整体改名 `05-上线交付/`
150
+ 4. 删空的 `03-设计与架构/`
151
+ 5. **写 `schema_version = "3"`**
152
+ 6. 迁移完在 `09-开发日志.md` 记一行
153
+
154
+ ### 未来再升级
155
+ bump `schema_version` + 在本节追加 `vN → vN+1` 规则;**旧规则保留**,以支持跨多版本逐级迁移(v1→v2→v3→…)。
@@ -1,23 +1,42 @@
1
1
  ---
2
2
  name: dwy-prototype
3
- description: "【dwy·UI原型】产品 0 到 1 设计与架构阶段。触发场景:用户说『画原型 / 出原型 / 做 UI 原型 / 把页面画出来 / prototype』,要在写 UI 代码前把页面与交互流程画成白板原型时。"
3
+ description: "【dwy·UI原型】产品 0 到 1 设计与架构阶段。触发场景:用户说『画原型 / 出原型 / 做 UI 原型 / 把页面画出来 / prototype』,要在写 UI 代码前把页面画成静态原型图时。两轮串行门控:先低保真线框初稿,用户讨论通过后再做高保真平面图,过了才进架构。"
4
4
  ---
5
5
 
6
6
  ## 职责(单一)
7
- 把 PRD 的页面与交互画成白板 HTML 原型。**不重复造**,直接调用现有的 `dwy-whiteboard-prototype` skill。
7
+ 把 PRD 的页面画成**静态原型图**,两轮串行、每轮门控:**① 线框初稿(低保真)→ 用户讨论通过 → ② 高保真平面图 → 用户讨论通过**。
8
+
9
+ 两轮都是**静态、按页出图**,区别只在保真度——都不做可交互(无拖拽/缩放/连线/点击跳转),浏览器直接展示,速度优先。本流程不调用白板引擎,纯静态 HTML 自写。
8
10
 
9
11
  ## 输入(从哪读)
10
12
  - state.json 的 `confirmed.prd`、`confirmed.tasks`
11
13
  - `.dwy/prod/[项目]/02-需求规划/PRD.md`
12
14
 
13
- ## 实现
14
- [自写型]
15
- 1. 直接调用现有 skill `dwy-whiteboard-prototype`(位于 `skills/开发流程/dwy-whiteboard-prototype/`)
16
- 2. 按其规范画白板:每页一个 HTML,状态全、跳转清
17
- 3. **不另起炉灶手搓白板引擎**,复用其 `assets/template.html`
18
- 4. 产出目录改为本阶段约定路径(见产出契约)
15
+ ## 判设备形态(两轮共用,先做)
16
+ 读 PRD/上下文判目标端,决定页面外框,**不写死尺寸**:
17
+ - 移动端 → 套手机框(iOS 用 iPhone 逻辑尺寸如 390×844、鸿蒙用对应 vp)
18
+ - 网页端 → 不套设备框,用浏览器视口比例
19
+ - 平板 → 用平板真实比例
20
+
21
+ ## 第一轮·线框初稿(低保真静态)
22
+ 1. 一个页面一张**低保真静态线框图**:灰阶/占位块表达布局结构,重点让用户看**页面齐不齐、布局对不对、信息层级合不合理**,不纠结视觉、不上色、不做交互。
23
+ 2. 图标用占位(稳定图标库的字符或内联 SVG 占位),**不用 emoji** 作功能性图标。
24
+ 3. 每图带一句**用途说明** + 关键**边界**(空态/加载/错误等该页适用项),纯文字描述。
25
+ 4. 形式:静态 HTML,一页一文件 `<页面>.html` + 总览 `index.html`(平铺各页缩略,可点下钻到单页,仅此导航,无页面内交互)。设备外框按上面判得的形态(网页端不套框)。
26
+ 5. 产出:`.dwy/prod/[项目]/03-原型设计/wireframe/`
27
+ 6. **门控**:产出后向用户汇报线框覆盖情况,明确问「线框初稿是否通过,可进高保真?」。未通过按反馈改,改完再问。通过后回写 `confirmed.wireframe`。
28
+
29
+ ## 第二轮·高保真平面图(静态,一页一图)
30
+ 1. 前置校验 `confirmed.wireframe` 存在,否则报错提示先过线框初稿。
31
+ 2. **基于已定稿的线框逐页升保真**:保持线框确定的页面清单与布局,上真实色板/明暗调/真实图标(稳定图标库,不用 emoji)/真实文案。仍是静态、不做可交互。
32
+ 3. 配色按产品定位定(金融稳重 / 社交活泼 / 工具中性);**反 AI 套路**:不堆渐变 blob、不用 emoji 功能图标、用语义色板、≤2 字体。
33
+ 4. **每图必带说明**:用途 + 关键交互说明(文字描述「点 X 去 Y」即可,不做可点跳转)+ 边界。
34
+ 5. 形式:静态 HTML,一页一文件 `<页面>.html` + 总览 `index.html`,浏览器直接展示。**速度优先**。
35
+ 6. 产出:`.dwy/prod/[项目]/03-原型设计/hifi/`
36
+ 7. **门控**:产出后汇报,问「高保真平面图是否通过,可进架构?」。通过后回写 `confirmed.prototype`。
19
37
 
20
38
  ## 产出契约(硬约束)
21
- - 落到:`.dwy/prod/[项目]/03-设计与架构/prototypes/`,每页一个 `<页面>-spec.html` + `index-spec.html` 总览
22
- - 固定要求:覆盖 PRD 所有页面、状态全、跨白板跳转清
23
- - 回写 state.json:`confirmed.prototype`
39
+ - 两轮目录分开:`03-原型设计/wireframe/` 与 `03-原型设计/hifi/`,各含每页 `<页面>.html` + `index.html` 总览
40
+ - 两轮都要:覆盖 PRD 所有页面、每图带说明、设备形态贴合目标端
41
+ - 高保真轮额外:布局与线框定稿一致
42
+ - 回写 state.json:线框轮 `confirmed.wireframe`、高保真轮 `confirmed.prototype`
@@ -8,17 +8,18 @@ description: "【dwy·上架迭代】产品 0 到 1 上架迭代阶段(终点
8
8
 
9
9
  ## 输入(从哪读)
10
10
  - state.json 的 `confirmed.acceptance`、`confirmed.prd`、`confirmed.version_plan`
11
- - `.dwy/prod/[项目]/04-上线交付/验收报告.md`
11
+ - `.dwy/prod/[项目]/05-上线交付/验收报告.md`
12
12
  - `.dwy/prod/[项目]/02-需求规划/版本路线图.md`
13
13
 
14
14
  ## 实现
15
15
  [包装型] 用全局本地 skill(位于 `~/.dwy/skills/<外部skill名>/`):
16
16
  读其 `SKILL.md`(及同目录 scripts/、配套 .md),按它的方式与用户交互/提问,产出按下方「产出契约」落地。
17
+ - **提问形式(Claude Code 下强制)**:借用外部 skill 的「问什么、怎么一步步收敛」方法论,但**每个要用户选择/拍板的问题用 `AskUserQuestion` 工具弹点选卡片**,不在正文列 A/B/C/D 让用户打字;保留「一次一问、答完再问下一个」的节奏,开放式补充靠卡片的「Other」兜底。其他工具(Codex 等无此组件)退回外部 skill 原生的正文问答。
17
18
  - 本 skill 依赖的外部 skill:`release-notes`、`gtm-strategy`、`metrics-dashboard`、`north-star-metric`(各对应 `~/.dwy/skills/<名>/`)
18
19
  - 若 `~/.dwy/skills/<名>/` 不存在:提示用户先跑 `dwy skills install`(或 `dwy claude sync` 会自动装),不要自己用内置能力顶替。
19
20
 
20
21
  ## 产出契约(硬约束)
21
- - 落到:`.dwy/prod/[项目]/04-上线交付/上架物料.md`、`埋点与指标.md`、`下一版迭代规划.md`
22
+ - 落到:`.dwy/prod/[项目]/05-上线交付/上架物料.md`、`埋点与指标.md`、`下一版迭代规划.md`
22
23
  - 固定章节:
23
24
  - 上架物料.md:发布说明 / GTM 策略 / 渠道文案
24
25
  - 埋点与指标.md:北极星指标 / 埋点清单 / 指标看板设计
@@ -1,23 +1,30 @@
1
1
  ---
2
2
  name: dwy-stage-design
3
- description: "【dwy·设计架构阶段】产品 0 到 1 的第三阶段编排。触发场景:用户说『画原型 + 定架构 / 做设计 / 出原型出架构 / 需求定了开始设计 / 设计和技术架构一起搞』,要把 PRD 同时展开成交互原型和技术架构时。可独立触发——需求已定,只想做设计架构,就触发我。"
3
+ description: "【dwy·设计架构阶段】产品 0 到 1 的第三阶段编排。触发场景:用户说『画原型 + 定架构 / 做设计 / 出原型出架构 / 需求定了开始设计 / 设计和技术架构一起搞』,要把 PRD 先展开成原型、原型定稿后再做技术架构时。可独立触发——需求已定,只想做设计架构,就触发我。"
4
4
  ---
5
5
 
6
6
  ## 职责(单一·编排层)
7
- 并行调度设计架构阶段的两条原子线,不掺产出内容。设计线与架构线互不依赖,**两线并行**。
7
+ **串行**调度设计架构阶段,不掺产出内容:先原型(内部两轮门控),原型全部确认后才进架构。**架构依赖原型定稿**,原型未定不进架构。
8
8
 
9
9
  ## 前置校验(开工前读 state)
10
10
  - 读 `.dwy/prod/[项目]/state.json`
11
- - 校验上游完整:`confirmed.prd` + `confirmed.version_plan` 必须存在
12
- - 缺失 → 报错中断,提示先跑 dwy-stage-prd
11
+ - **先检 `schema_version`**:缺失或低于当前版本 → 按 `dwy-product-launcher/references/state-and-contract.md`「schema 版本与迁移」升级 state 再继续
12
+ - 上游 `confirmed.prd` / `confirmed.version_plan` 缺失(如单独触发本阶段)→ **不报错**,基于已聊上下文 + 现有产出**轻量补齐**够本阶段用的简版 PRD / 版本范围,写回对应 `confirmed.*` 标注「上下文补齐」。仅当上下文完全不足才提示用户补信息。
13
+ - `run_mode` 缺失 → 默认 `standard`,或按用户当下意图问一次。
13
14
 
14
- ## 编排(并行两线)
15
- 两条线无依赖,**用子 Agent 并发执行**(各自独立上下文):
16
- - **dwy-prototype** — 交互原型设计
17
- - **dwy-architecture** — 技术架构设计
15
+ ## 编排(串行两步)
16
+ 1. 调 **dwy-prototype** 走「线框初稿 → 高保真平面图」两轮门控;两轮分别回写 `confirmed.wireframe`、`confirmed.prototype`。
17
+ 2. `confirmed.prototype` 写入后,才调 **dwy-architecture** 出技术架构。
18
18
 
19
- 两个子 Agent 只向主窗口返回成果摘要,产出落各自文件。
19
+ 子 skill 只向主窗口返回成果摘要,产出落各自文件。
20
+
21
+ ## run_mode 感知
22
+ - `standard`:原型两轮门控照常问用户「线框是否通过 / 高保真是否通过」。
23
+ - `auto`:两轮门控由 AI 自动决策推进、不问用户,仍按「线框定稿 → 高保真 → 架构」顺序串。
24
+
25
+ ## 自动流转(准出后)
26
+ - 回写 `current_stage = "dev"`,按 `run_mode`:`standard` 问「继续 TDD 开发 / 停」、`auto` 直接触发 `dwy-stage-dev`。
20
27
 
21
28
  ## 准出条件(硬约束)
22
29
  - 设计与架构**均确认**:`confirmed.prototype` + `confirmed.architecture` 均写入
23
- - 回写 `state.json`:`current_stage = "dev"`
30
+ - 回写 `state.json`:`current_stage = "dev"`,按 run_mode 流转下一阶段
@@ -4,19 +4,51 @@ description: "【dwy·TDD开发阶段】产品 0 到 1 的第四阶段编排。
4
4
  ---
5
5
 
6
6
  ## 职责(单一·编排层)
7
- 调度 TDD 开发原子 skill 按模块循环,不掺产出内容。版本内互不依赖的模块**多模块并发**。
7
+ **任务级 block 分析 + 动态调度**,不掺产出内容。读任务依赖图,无 block 的任务多 Agent 并发、有 block 的串行,逐任务验收推进。
8
8
 
9
9
  ## 前置校验(开工前读 state)
10
10
  - 读 `.dwy/prod/[项目]/state.json`
11
- - 校验上游完整:`confirmed.prototype` + `confirmed.architecture` + `confirmed.tasks` 必须存在
12
- - 缺失 → 报错中断,提示先跑 dwy-stage-design
11
+ - **先检 `schema_version`**:缺失或低于当前版本 → 按 `dwy-product-launcher/references/state-and-contract.md`「schema 版本与迁移」升级 state 再继续
12
+ - 上游 `confirmed.prototype` / `confirmed.architecture` / `confirmed.tasks` 缺失(如单独触发本阶段)→ **不报错**,基于已聊上下文 + 现有产出**轻量补齐**够本阶段用的架构/任务拆解结论,写回对应 `confirmed.*` 标注「上下文补齐」。仅当上下文完全不足才提示用户补信息。
13
+ - `run_mode` 缺失 → 默认 `standard`,或按用户当下意图问一次。
14
+ - `auto` 下开发全程自动跑(block 分析 → agent 池 → 逐任务验收 → 覆盖回查);`standard` 同样自动跑(开发阶段本就无逐模块人工验收),区别仅在准出后是否问「继续上架」。
13
15
 
14
- ## 编排(按模块循环 + 并发)
15
- - 按 `confirmed.tasks` 的模块清单逐个调 **dwy-tdd-dev**
16
- - 互不依赖的模块用多个子 Agent 并发;改同一批文件时各自独立 worktree 防冲突
17
- - 有依赖的模块按依赖顺序串行
16
+ ## 编排(block 分析 → agent 池调度)
17
+
18
+ ### 第一步·block 分析(硬约束,先做)
19
+ 调度前**必须先分析每个任务的前后 block 关系**(由任务 Interfaces 推出:`Consumes`=被谁 block、`Produces`=block 谁)。判定铁律:
20
+ - **无 block 的任务 → 多 Agent 并行**
21
+ - **有 block 的任务 → 串行**,被 block 的下游必须等其所有前置 block 任务 done 才能启动
22
+ - 与 `ai-tools/CLAUDE.md`「任务执行前必须先分析 block;无 block 的任务用多 Agent 并行」一致
23
+
24
+ ### 第二步·agent 池调度
25
+ - 按 block 分析结果建 **ready 队列**(所有前置 block 已 done 的任务,即当前无 block 的)
26
+ - 多个子 Agent 并发领取 ready 队列任务,每个 agent 调 **dwy-tdd-dev** 跑单任务 RED→GREEN→REFACTOR
27
+ - 任务 done → 解锁被它 block 的下游 → 下游 block 全清进 ready → 空闲 agent 继续领;任务多时吞吐高
28
+ - **冲突隔离**:改同一批文件的并行任务各自独立 git worktree,完成后按 block 顺序合并;无文件交叠的并行任务无需隔离
29
+ - 落地用 Claude Code 原生 Agent 工具并发派发 + worktree
30
+
31
+ ### 第三步·逐任务验收闭环(防漏需求)
32
+ - 每个任务 done 时,承做 agent 走闭环:**核验**(对照验证标准跑通,未过保持 `todo` 不跳过)→ **标记** `confirmed.dev_progress.<module>.<task> = done` → **记日志**(`09-开发日志.md` 一行:任务/验证结果/关键决策)→ **独立提交**(该任务源码+测试单独 commit,一任务一 commit,并发时各自在 worktree 内提交)
33
+ - worktree 内提交后,编排层按 block 顺序合并各任务分支
34
+
35
+ ### 第四步·合并后全量收口闸(硬约束,编排层独占执行)
36
+
37
+ 并发的根本问题:各 agent 在**自己 worktree、自己领任务那一刻的代码态**下自报「全绿」,但它们并发提交、互相看到的是中间失败态——**单任务绿是必要不充分**,真实准出态只能由「全部分支合并后、在同一棵统一工作树上、一次性跑的全量」定义。所以所有任务分支合并完成后、覆盖回查之前,**必须由编排层自己跑一道收口闸**,不派给任何承做 agent(杜绝「自述全绿」):
38
+
39
+ 1. **统一工作树**:确认所有任务分支已按 block 顺序合并到主干,在合并后的统一工作树上执行(不在任何子 worktree 内)。
40
+ 2. **跑全量**:在合并后代码上**一次性跑全量单测 + 构建打包**(含项目级类型检查——类型错应在 build/打包这条线暴露)。**命令读项目上下文 + 基线自行判定**(前端/后端/全栈各异),不写死具体命令。目标=**消除合并后才暴露的报错,产物可运行**。
41
+ 3. **失败 → 编排层修复 + 重跑整闸**:任何失败由编排层走 systematic-debugging 修(典型来源:跨任务共享类型/接口签名变更、共享 fixture、合并冲突遗留),**修完重跑整道闸**(不是只跑挂的那条),循环到**一次性全绿**才算过。此闸是硬闸,`auto` 模式也必须修到绿,不跳过。
42
+ 4. **记录**:收口结果记 `09-开发日志.md` 一行(跑了什么、修了什么)。
43
+
44
+ ### 第五步·收尾覆盖回查
45
+ - 收口闸全绿后,对照 `开发任务拆解.md` 任务清单 + PRD 页面/功能逐项点检,确认无遗漏任务、无「标 done 实则未实现」
46
+ - 发现缺口 → 补任务再跑(补完重过第四步收口闸),不直接进 ship
47
+
48
+ ## 自动流转(准出后)
49
+ - 回写 `current_stage = "ship"`,按 `run_mode`:`standard` 问「继续上架迭代 / 停」、`auto` 直接触发 `dwy-stage-ship`。
18
50
 
19
51
  ## 准出条件(硬约束)
20
- - 当前版本(V1.0)**全模块测试通过**
21
- - `confirmed.dev_progress` 写入(记录已完成模块与测试状态)
22
- - 回写 `state.json`:`current_stage = "ship"`
52
+ - 当前版本(V1.0)**合并后全量收口闸一次性全绿**(全量单测 + 构建打包通过,非各 agent 自报)+ 覆盖回查无遗漏
53
+ - `confirmed.dev_progress` 全 done(任务级记录 `<module>.<task>`)
54
+ - 回写 `state.json`:`current_stage = "ship"`,按 run_mode 流转下一阶段