@modus-ai/modus 0.2.7 → 0.2.9

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.
@@ -1,6 +1,6 @@
1
1
  ---
2
2
  name: modus-plan
3
- description: Use this skill when executing /modus:plan command to generate a single structured plan.md backed by up-to-date business Skills. Trigger on /modus:plan command or when user wants to plan a feature with full business context. Loads Skill domains first, falls back to platform rules + source scan, then asks 0-3 targeted questions (no padding — only ask when truly needed) before generating the plan. Ends with a Build confirmation loop where user can iterate on plan.md before executing code generation.
3
+ description: Use this skill when executing /modus:plan command to generate a single structured plan.md backed by up-to-date business Skills. Trigger on /modus:plan command or when user wants to plan a feature with full business context. Loads Skill domains first, falls back to platform rules + source scan, then asks 0-3 targeted questions (no padding — only ask when truly needed) before generating the plan. Ends with a Build confirmation loop where user can iterate on plan.md before executing code generation. Also handles --design mode (design-review-only, no code gen) and --continue mode (relay plan.md to harness).
4
4
  allowed-tools: Read, Write, Glob, Bash
5
5
  disable: false
6
6
  ---
@@ -13,6 +13,45 @@ disable: false
13
13
 
14
14
  功能规划入口。通过**两层知识检索**获取业务上下文,先评估需求复杂度自动分级(simple/medium/complex),再基于加载的知识向用户提出 0–3 个精准澄清问题(按需提问,禁止凑数),最终生成单一 `plan.md` 规划文档。文档生成后进入 Build 确认循环,用户可反复修改直至满意后触发代码执行,并将本次规划中的新知识回写到 Skill(后置更新)。
15
15
 
16
+ 支持两种特殊模式(v4.0 新增):
17
+ - **`--design` 设计评审模式**:仅生成技术评审文档,`status: pending_review`,不触发代码生成
18
+ - **`--continue <name>` 接力模式**:读取已批准的 plan.md,直接接力触发 `harness --from-plan`
19
+
20
+ ---
21
+
22
+ ## 参数解析(优先执行,Step 0 之前)
23
+
24
+ **首先**检测用户输入中的参数标志,决定执行路径:
25
+
26
+ ```
27
+ --help → 输出帮助文档,结束执行
28
+ --design → DESIGN_MODE=true(进入设计评审分支,见「Design Mode 流程」)
29
+ --continue X → CONTINUE_MODE=true,PLAN_NAME=X(进入接力分支,见「Continue 流程」)
30
+ --code X → CODE_MODE=true,CODE_PLAN=X(进入任务驱动编码分支,见「Code Mode 流程」)
31
+ --quick → QUICK_MODE=true(跳过域确认和澄清问题)
32
+ --story X → STORY_ID=X(关联 TAPD Story)
33
+ --project X → PROJECT=X(多项目指定)
34
+ --enhance X → ENHANCE_DOMAIN=X(前置强制刷新指定域 Skill)
35
+ --no-build → NO_BUILD=true(生成 plan.md 后跳过 Build 循环)
36
+ --read-only → READ_ONLY=true(同 NO_BUILD,永远不触发代码生成)
37
+ --resume X → RESUME_NAME=X(断点续跑)
38
+ --complexity X → FORCED_COMPLEXITY=X
39
+ ```
40
+
41
+ **路由决策树:**
42
+
43
+ ```
44
+ 检测到 --continue X?
45
+ 是 → 跳转到「Continue 流程」(完整独立流程,不执行 Step 0-9)
46
+
47
+ 检测到 --code X?
48
+ 是 → 跳转到「Code Mode 流程」(完整独立流程,不执行 Step 0-9)
49
+
50
+ 检测到 --design?
51
+ 是 → 执行 Step 0→Step 1→Step 2→Step 3→Step 4→Step 5→Step 6→Design Mode Step 7(生成 design.md + tasks.md 后暂停)
52
+ 否 → 执行标准流程(Step 0 → Step 9)
53
+ ```
54
+
16
55
  ---
17
56
 
18
57
  ## 执行流程
@@ -348,6 +387,233 @@ created: {ISO8601时间戳}
348
387
 
349
388
  ---
350
389
 
390
+ ### Step 7(Design Mode 分支):多 Artifact 设计文档生成 ⏸️ 【人工审批节点】
391
+
392
+ > **仅在 DESIGN_MODE=true 时执行此分支,替代标准 Step 8(Build 循环)。**
393
+ > 参考:speckit.plan 三阶段 + opsx:propose DAG 状态机
394
+
395
+ ---
396
+
397
+ #### Phase R:Research(技术可行性研究)
398
+
399
+ > **来源:speckit.plan Phase 0** — 先消除所有「NEEDS CLARIFICATION」再进入设计
400
+
401
+ **复杂度 ≥ medium 时执行,生成 `research.md`;simple 时跳过(研究内容内联融入 design.md)。**
402
+
403
+ 执行步骤:
404
+ 1. 基于 Step 4/5 已加载的业务 Skill,定位关键源码文件(`key_files` + 额外 Glob 扫描)
405
+ 2. 扫描目标:
406
+ - 现有代码中与本需求相关的类/方法(复用点 + 修改点)
407
+ - 依赖库版本与 API 兼容性
408
+ - 数据库现有表结构(如有变更)
409
+ - 外部接口契约(如有跨服务调用)
410
+ 3. 识别所有「NEEDS CLARIFICATION」点,若有未澄清项且 Step 6 未覆盖,补问(最多 2 个)
411
+ 4. 复杂度 ≥ medium 时落盘 `modus/plans/{name}/research.md`:
412
+
413
+ ```markdown
414
+ # Research: {功能名称}
415
+
416
+ ## 现有代码分析
417
+ | 类/方法 | 文件路径 | 与本需求的关系 | 变更类型 |
418
+ |---|---|---|---|
419
+ | {ClassName#method} | {路径} | {复用/修改/新建} | {说明} |
420
+
421
+ ## 技术可行性
422
+ - **依赖版本**:{版本信息与兼容性说明}
423
+ - **现有模式**:{项目已有的相似实现,可复用的设计模式}
424
+ - **技术障碍**:{如有,列出并说明解决思路}
425
+
426
+ ## 已消除的模糊点
427
+ | 原问题 | 澄清结果 | 来源 |
428
+ |---|---|---|
429
+ | {模糊点描述} | {明确结论} | {Skill/代码扫描/用户确认} |
430
+
431
+ ## 数据库影响(如有)
432
+ - {表名}:{新增字段/新建表/索引变更}
433
+
434
+ ## 外部依赖(如有)
435
+ - {服务/接口}:{调用方式/影响说明}
436
+ ```
437
+
438
+ **更新 `.modus-state.yaml` 中的 artifact 状态:**
439
+ ```yaml
440
+ artifacts:
441
+ research: done # 或 skipped(simple 复杂度时)
442
+ design: ready
443
+ tasks: blocked # 依赖 design
444
+ ```
445
+
446
+ ---
447
+
448
+ #### Phase D:Design(DAG 顺序生成 design.md + tasks.md)
449
+
450
+ > **来源:opsx:propose DAG 状态机 + speckit.tasks T-ID 任务格式**
451
+
452
+ **DAG 依赖:** `research(done|skipped) → design(ready) → tasks(ready after design done)`
453
+
454
+ **Artifact 1:`modus/plans/{name}/design.md`**
455
+
456
+ 生成完整技术设计文档(9 节结构):
457
+
458
+ ```markdown
459
+ ---
460
+ schema_version: "1.2"
461
+ agent: "plan"
462
+ design_mode: true
463
+ status: "pending_review"
464
+ risk_level: "{low|medium|high}"
465
+ estimated_effort: "{XS|S|M|L|XL}"
466
+ continue_token: ""
467
+ ---
468
+
469
+ # Design: {功能名称}
470
+
471
+ ## 1. 需求解读(5W1H)
472
+ | 维度 | 内容 |
473
+ |------|------|
474
+ | Who | {谁发起/谁受益} |
475
+ | What | {要做什么} |
476
+ | Why | {业务价值/驱动因素} |
477
+ | When | {预期上线时间/Sprint} |
478
+ | Where | {涉及系统/服务范围} |
479
+ | How | {核心实现思路} |
480
+
481
+ ## 2. 技术方案对比(3 个候选方案)
482
+
483
+ | | 方案 A(推荐) | 方案 B | 方案 C |
484
+ |---|---|---|---|
485
+ | 实现思路 | ... | ... | ... |
486
+ | 优点 | ... | ... | ... |
487
+ | 缺点/风险 | ... | ... | ... |
488
+ | 实现成本 | ... | ... | ... |
489
+
490
+ **推荐方案:方案 A**
491
+ 理由:{1-2 句话}
492
+
493
+ ## 3. 影响范围(方法级)
494
+ | 文件 | 类/方法 | 变更类型 | 影响说明 |
495
+ |------|--------|---------|---------|
496
+ | {路径} | {类名.方法名} | 新增/修改/删除 | {说明} |
497
+
498
+ ## 4. API 契约草稿
499
+ {若有接口新增/修改,列出方法签名和请求/响应结构}
500
+
501
+ ## 5. 数据模型变更(如有)
502
+ {DDL 变更 / 实体字段新增 / 枚举定义}
503
+
504
+ ## 6. 关键约束(来自项目宪法)
505
+ - {constitution.hard_rules 中与本次相关的规则}
506
+
507
+ ## 7. 已知风险 ⚠️
508
+ | 风险 | 等级 | 应对方案 | 来源 Skill |
509
+ |------|------|---------|-----------|
510
+ | {风险描述} | P1/P2 | {方案} | {Skill 名称} |
511
+
512
+ ## 8. 估时
513
+ - 预估工作量:{XS/S/M/L/XL}({N 个工作日})
514
+ - 主要耗时点:{1-2 句话}
515
+
516
+ ## 9. 相关文档
517
+ - research.md: {存在时附路径,否则「已跳过(simple 复杂度)」}
518
+ - tasks.md: {路径}
519
+ ```
520
+
521
+ **更新 `.modus-state.yaml`:** `artifacts.design: done`,`artifacts.tasks: ready`
522
+
523
+ **Artifact 2:`modus/plans/{name}/tasks.md`**
524
+
525
+ 生成 spec-kit 风格的带 T-ID 任务清单:
526
+
527
+ ```markdown
528
+ # Tasks: {功能名称}
529
+ > 来源:design.md | 生成时间:{YYYY-MM-DD}
530
+
531
+ ## Phase 1:数据层
532
+ - [ ] T001 [P1] [Req:数据模型] 创建/修改 {表名} — `{路径/文件名}`
533
+ - [ ] T002 [P1] [Req:数据模型] 新增 {MapperClass}#{method} — `{路径}`
534
+
535
+ ## Phase 2:服务层
536
+ - [ ] T003 [P1] [Req:核心逻辑] 实现 {ManagerClass}#{method}(@Transactional) — `{路径}`
537
+ - [ ] T004 [P2] [Req:核心逻辑] 单元测试:{TestClass}#{testMethod} — `{路径}`
538
+
539
+ ## Phase 3:接口层
540
+ - [ ] T005 [P1] [Req:接口契约] 实现 {FacadeClass}#{method}(含参数校验) — `{路径}`
541
+ - [ ] T006 [P2] [Req:接口契约] 接口测试:{TestClass}#{integrationTest} — `{路径}`
542
+
543
+ ## Phase 4:配套工作
544
+ - [ ] T007 [P3] [Req:可观测性] 补充关键日志(入参/出参/异常) — `{路径}`
545
+ ```
546
+
547
+ **任务格式规范(强制):**
548
+ - 任务 ID:`T{三位数字}`,在本 tasks.md 内唯一递增
549
+ - 优先级:`[P1]`(必须完成)、`[P2]`(应该完成)、`[P3]`(建议完成)
550
+ - 需求引用:`[Req:{简短描述}]`,对应 design.md 中的需求点
551
+ - 文件路径:以 `— \`{相对路径}\`` 结尾(供 `--code` 模式快速定位)
552
+ - 测试任务(含「测试」「Test」关键词)在同 phase 内置于实现任务之后
553
+
554
+ **更新 `.modus-state.yaml`:** `artifacts.tasks: done`
555
+
556
+ ---
557
+
558
+ #### Phase A:Analyze(自检一致性,只读)
559
+
560
+ > **来源:speckit.analyze** — 禁止修改任何文件,仅输出内联分析报告
561
+
562
+ **交叉检查 design.md × tasks.md:**
563
+
564
+ | 检查项 | 说明 | 严重度 |
565
+ |--------|------|--------|
566
+ | 任务覆盖缺失 | design.md 中某需求点在 tasks.md 无对应任务 | HIGH |
567
+ | 任务冗余 | tasks.md 中某任务无法追溯到 design.md 需求点 | MEDIUM |
568
+ | 风险未对应任务 | design.md「已知风险」中 P1 风险无对应防护任务 | HIGH |
569
+ | 估时与任务量不匹配 | 任务总量与估时明显不符(如 XS 却有 20+ 任务) | MEDIUM |
570
+ | 关键约束未落地 | constitution.hard_rules 中某规则在任务中无体现 | HIGH |
571
+ | 测试任务缺失 | Phase 2/3 无任何测试任务 | MEDIUM |
572
+
573
+ **严重度处理规则:**
574
+ - **HIGH** → 输出警告,列出具体缺失项,**暂停并询问用户是否修正**
575
+ - **MEDIUM** → 列出建议,但**不阻塞**,继续到暂停节点
576
+ - **LOW** → 仅记录,不展示
577
+
578
+ **输出示例:**
579
+ ```
580
+ 🔍 一致性自检完成
581
+ HIGH(需确认):
582
+ ⚠️ design.md 第 7 节风险「并发写入需加分布式锁」在 tasks.md 中无对应任务
583
+ 建议:在 Phase 2 新增 T00X [P1] 实现分布式锁保护
584
+ MEDIUM(建议):
585
+ ℹ️ Phase 3 缺少接口集成测试任务,建议补充
586
+
587
+ 是否根据以上建议更新 design.md / tasks.md?[Y/n]
588
+ ```
589
+
590
+ - **用户确认修正** → 自动更新对应文件,重新执行 Phase A 检查
591
+ - **用户跳过** → 直接进入暂停节点
592
+
593
+ ---
594
+
595
+ #### Design Mode 暂停节点 ⏸️
596
+
597
+ ```
598
+ ✅ 设计文档已就绪:modus/plans/{name}/
599
+ ├── research.md — {已生成 | 已跳过(simple 复杂度)}
600
+ ├── design.md — 待评审 | 风险:{level} | 估时:{effort}
601
+ └── tasks.md — {N} 个任务(P1: {n1} / P2: {n2} / P3: {n3})
602
+
603
+ ──────────────────────────────────────────
604
+ 📋 设计文档包含:5W1H / 3 个候选方案 / 方法级影响范围 / API 草稿 / 风险点 / 估时
605
+ 📋 任务清单:{N} 个带 T-ID 和优先级的任务,按 phase 分组
606
+
607
+ ⏸️ 等待人工技术评审。评审通过后可运行:
608
+ A. /modus:plan --continue {name} → 接力 harness 全流程开发
609
+ B. /modus:plan --code modus/plans/{name}/design.md → 直接任务驱动编码
610
+ ──────────────────────────────────────────
611
+ ```
612
+
613
+ ⏸️ **等待人工确认** — 此时**不触发任何代码生成**,整个 Design Mode 流程到此结束。
614
+
615
+ ---
616
+
351
617
  ### Step 8:Build 确认循环 ⏸️ 【人工审批节点】
352
618
 
353
619
  plan.md 生成后,展示结果并进入确认循环:
@@ -467,10 +733,239 @@ plan.md 生成后,展示结果并进入确认循环:
467
733
  modus/
468
734
  ├── plans/
469
735
  │ ├── add-batch-approve/ ← 活跃计划(未归档)
470
- │ │ ├── .modus-state.yaml ← 状态文件(断点续跑用)
471
- │ │ └── plan.md ← 唯一规划文档(概述/风险/方案对比/Todos/影响文件)
736
+ │ │ ├── .modus-state.yaml ← 状态文件(含 artifacts DAG 状态)
737
+ │ │ ├── plan.md ← 标准模式产出(概述/风险/方案对比/Todos/影响文件)
738
+ │ │ ├── design.md ← --design 模式产出(9 节技术设计文档)
739
+ │ │ ├── tasks.md ← --design 模式产出(spec-kit T-ID 任务清单)
740
+ │ │ └── research.md ← --design 模式产出(复杂度 ≥ medium 时生成)
472
741
  │ └── archive/
473
742
  │ └── 2026-04-20-add-batch-approve/
474
743
  │ ├── .modus-state.yaml ← status: archived
475
- │ └── plan.md
744
+ │ └── plan.md / design.md / tasks.md / research.md
745
+ ```
746
+
747
+ ---
748
+
749
+ ## Continue 流程(--continue 模式,独立完整流程)
750
+
751
+ > **触发条件:** 用户运行 `/modus:plan --continue <name>` 时进入此流程。
752
+
753
+ ### Continue Step 1:读取 plan.md 并验证状态
754
+
755
+ ```
756
+ 读取 modus/plans/{name}/plan.md 的 HANDOFF frontmatter:
757
+ → 检查 design_mode = true(不是 design 模式的 plan 不能用 --continue)
758
+ → 检查 status ∈ {pending_review, approved}(已完成或已 continued 的不重复触发)
759
+ → 若 status = continued:提示「此 plan 已接力,是否重新触发?[y/N]」
760
+
761
+ 若 plan.md 不存在 → 报错:
762
+ ❌ 未找到 plan:modus/plans/{name}/plan.md
763
+ 请先运行 /modus:plan --design 生成技术评审文档
764
+ ```
765
+
766
+ ### Continue Step 2:展示接力确认
767
+
768
+ ```
769
+ 准备接力 harness:
770
+
771
+ 📋 plan:{name}
772
+ 状态:{pending_review → 即将变更为 approved}
773
+ 业务域:{domains}
774
+ 风险等级:{risk_level}
775
+ 估时:{estimated_effort}
776
+
777
+ ⚡ 接力后将跳过:SA01(需求分析)+ SA02(设计方案)
778
+ 直接从:SA03 代码开发 开始
779
+
780
+ SA03 将读取 plan.md 中的「实现 Todos」作为代码开发计划。
781
+ 是否确认接力?[Y/n](--force 时自动确认)
782
+ ```
783
+
784
+ ### Continue Step 3:生成 continue_token 并更新状态
785
+
786
+ ```
787
+ 生成 continue_token:{name}:{YYYYMMDD}
788
+ 更新 plan.md frontmatter:
789
+ status: "approved" → 写入后立即变更为 "continued"
790
+ continue_token: "{name}:{YYYYMMDD}"
791
+
792
+ 写入 .modus-state.yaml:
793
+ status: continued
794
+ continued_at: {ISO8601 时间戳}
795
+ harness_triggered: true
796
+ ```
797
+
798
+ ### Continue Step 4:接力触发 harness
799
+
800
+ 输出启动提示:
801
+
802
+ ```
803
+ 🚀 plan --continue 接力启动
804
+ 规划文件:modus/plans/{name}/plan.md
805
+ 传递标记:[FROM_PLAN: {name} | token: {continue_token}]
806
+ 跳过阶段:SA01(需求分析)+ SA02(设计方案)
807
+ 直接启动:SA03 代码开发
808
+
809
+ 启动 /modus:harness --from-plan {name}...
810
+ ```
811
+
812
+ 以如下格式构造 harness 的入参(在**当前上下文中**直接继续执行 modus-harness Skill):
813
+
814
+ ```
815
+ /modus:harness --from-plan {name}
816
+
817
+ 传递上下文:
818
+ plan_file: modus/plans/{name}/plan.md
819
+ continue_token: {token}
820
+ domains: {plan.md 中的 domains}
821
+ constitution: {当前 config.yaml constitution}
822
+ skip_agents: ["01", "02"]
823
+ ```
824
+
825
+ `modus-harness` Skill 检测到 `--from-plan` 时,读取 plan.md 中的以下内容作为 SA03 的输入:
826
+ - 「实现 Todos」→ 作为代码开发计划(替代 01-analysis.md + 02-design-brief.md 中的 Sprint 拆分)
827
+ - 「技术方案评审 → 推荐方案」→ 作为架构决策(替代 SA02 的设计方案)
828
+ - 「已知风险」→ 传递给 SA07(代码评审)作为审查重点
829
+
830
+ ### Continue Step 5:写入进度事件(若 events.jsonl 存在)
831
+
832
+ ```json
833
+ {"ts":"{ISO8601}","type":"plan_relay","plan_name":"{name}","continue_token":"{token}","skipped_stages":["01-analysis","02-design"]}
834
+ ```
835
+
836
+ ---
837
+
838
+ ## Code Mode 流程(--code 模式,独立完整流程)
839
+
840
+ > **触发条件:** 用户运行 `/modus:plan --code <技术方案路径或描述>` 时进入此流程。
841
+ > **来源:** opsx:apply contextFiles 状态机 + speckit.implement TDD 逐任务执行
842
+
843
+ ### Code Step 0:解析 [技术方案] 参数
844
+
845
+ 判断 `CODE_PLAN` 参数的输入类型并选择处理路径:
846
+
476
847
  ```
848
+ 1. 文件路径(以 .md 结尾)→ FILE_MODE
849
+ - 读取该文件作为技术方案(design.md 或 plan.md)
850
+ - 在同目录查找 tasks.md
851
+
852
+ 2. 目录路径(以 / 结尾,或目录存在)→ DIR_MODE
853
+ - 在目录内按优先级查找主文档:design.md > plan.md
854
+ - 在同目录查找 tasks.md
855
+
856
+ 3. 内联描述(非路径字符串)→ INLINE_MODE
857
+ - 提示:
858
+ 📋 未找到设计文档文件。建议:
859
+ A. 先运行 /modus:plan --design <描述> 生成设计文档,再运行 --code
860
+ B. 在此基础上继续,将自动生成简版 tasks.md(仅含基本任务结构)
861
+ 请选择 [A/b]:
862
+ - 用户选 B 时:基于描述生成简版 tasks.md(跳过 research 和 design 阶段)
863
+ ```
864
+
865
+ ---
866
+
867
+ ### Code Step 1:加载上下文(contextFiles)
868
+
869
+ 按 opsx:apply 的 contextFiles 模式,依次读取:
870
+
871
+ 1. 技术方案主文档(design.md / plan.md)
872
+ 2. tasks.md(任务清单,含 checkbox 和 T-ID;若不存在则提示生成)
873
+ 3. research.md(若存在,作为代码上下文补充)
874
+ 4. `modus/config.yaml` constitution
875
+ 5. 相关业务 Skill(从 `knowledge-catalog.md` 按域匹配,仅 hash 检查,不触发全量更新)
876
+
877
+ 加载完成后输出上下文摘要:
878
+
879
+ ```
880
+ 📚 上下文加载完成
881
+ 主文档:{design.md 路径}({功能名称})
882
+ 任务清单:{tasks.md 路径}(共 {N} 个任务,已完成 {M} 个)
883
+ 业务域:{domain1}, {domain2}
884
+ 约束:{constitution.hard_rules 摘要}
885
+ ```
886
+
887
+ ---
888
+
889
+ ### Code Step 2:任务状态检查(state machine)
890
+
891
+ 扫描 tasks.md 中所有 `- [ ]` 和 `- [x]` 任务,计算状态:
892
+
893
+ ```
894
+ state = all_done → 所有任务已完成(无 [ ] 任务)
895
+ state = blocked → 存在依赖未满足(tasks.md 中存在 <!-- blocked: {原因} --> 注释)
896
+ state = ready → 存在可执行的待完成任务
897
+ ```
898
+
899
+ | state | 输出 |
900
+ |-------|------|
901
+ | `all_done` | ✅ 所有 {N} 个任务已完成!建议运行 `/modus:cr --doc {design.md 路径}` 进行代码评审 |
902
+ | `blocked` | ⚠️ 发现阻塞:{阻塞原因}。请先解决阻塞再继续 |
903
+ | `ready` | 展示待执行任务列表,确认后进入 Step 3 |
904
+
905
+ **state=ready 时的确认输出:**
906
+
907
+ ```
908
+ 📋 待执行任务({N} 个):
909
+ Phase {X}:{phase 名称}
910
+ ○ T001 [P1] {任务描述} — {文件路径}
911
+ ○ T002 [P1] {任务描述} — {文件路径}
912
+ ○ T003 [P2] {任务描述(测试)} — {文件路径}
913
+
914
+ 共 {M} 个 Phase,{N} 个任务(P1: {n1} / P2: {n2} / P3: {n3})
915
+ 是否开始执行?[Y/n](--force 时自动确认)
916
+ ```
917
+
918
+ ---
919
+
920
+ ### Code Step 3:分 Phase 逐任务执行
921
+
922
+ > **TDD 原则(来自 speckit.implement):** 同 Phase 内先实现接口/类签名,再写测试,最后完善实现。
923
+
924
+ **Phase 执行循环:**
925
+
926
+ ```
927
+ for each Phase(按顺序):
928
+ 输出:── Phase {X}:{phase 名称}({N} 个任务)──
929
+
930
+ for each Task in Phase(按 T-ID 顺序):
931
+ if 任务含「测试」「Test」关键词:
932
+ ← 先建类/方法骨架,再写测试,最后补全逻辑
933
+ else:
934
+ ← 根据 design.md 对应需求点和 business Skill 直接实现代码
935
+
936
+ 执行完成后:
937
+ 1. 将 tasks.md 中该任务的 `- [ ]` 改为 `- [x]`
938
+ 2. 输出:✓ {T-ID} 已完成:{一句话说明变更内容}
939
+ 3. 重新检查 state(出现 blocked 时暂停并说明原因)
940
+
941
+ Phase 完成后输出:
942
+ ✅ Phase {X} 完成({已完成数}/{Total} 个任务)
943
+ ```
944
+
945
+ **单任务执行规范:**
946
+ - 根据任务的 `— \`{路径}\`` 定位目标文件
947
+ - 参考 design.md 中 `[Req:{...}]` 对应的需求点作为实现依据
948
+ - 遵循 constitution.hard_rules 和业务 Skill 中的 `[guideline]`/`[pitfall]`
949
+ - 遵循「外科手术式修改(Surgical Changes)」原则:只改必改的文件
950
+
951
+ ---
952
+
953
+ ### Code Step 4:完成确认 + 后续建议
954
+
955
+ 所有 Phase 完成后输出:
956
+
957
+ ```
958
+ 🎉 编码完成!执行摘要:
959
+ ✅ 共完成 {N} 个任务(P1: {n1} / P2: {n2} / P3: {n3})
960
+ 📝 修改文件:{已修改文件列表}
961
+ ⏱️ 实际耗时对比:设计估时 {effort}
962
+
963
+ ── 建议后续操作 ──────────────────────────────────
964
+ A. /modus:cr --doc {design.md 路径} → 代码评审(推荐)
965
+ B. /modus:plan --continue {name} → 接力 harness 完整流程
966
+ C. /modus:vibe → 修复评审后的问题
967
+ ────────────────────────────────────────────────
968
+ ```
969
+
970
+ **后置知识回写(与标准 plan Step 9 相同逻辑):**
971
+ 扫描编码过程中新发现的 pitfall/decision,询问用户是否写回 Skill(不强制)。