@modus-ai/modus 0.2.4 → 0.2.6

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 (75) hide show
  1. package/README.md +100 -42
  2. package/dist/cli/index.js +2 -2
  3. package/dist/cli/index.js.map +1 -1
  4. package/dist/commands/config.d.ts.map +1 -1
  5. package/dist/commands/config.js +9 -8
  6. package/dist/commands/config.js.map +1 -1
  7. package/dist/commands/global.js +1 -1
  8. package/dist/commands/global.js.map +1 -1
  9. package/dist/commands/init.d.ts.map +1 -1
  10. package/dist/commands/init.js +37 -7
  11. package/dist/commands/init.js.map +1 -1
  12. package/dist/commands/status.js +2 -2
  13. package/dist/generators/claude.d.ts.map +1 -1
  14. package/dist/generators/claude.js +1 -37
  15. package/dist/generators/claude.js.map +1 -1
  16. package/dist/generators/codebuddy.d.ts.map +1 -1
  17. package/dist/generators/codebuddy.js +3 -1
  18. package/dist/generators/codebuddy.js.map +1 -1
  19. package/dist/generators/codex.d.ts +10 -0
  20. package/dist/generators/codex.d.ts.map +1 -0
  21. package/dist/generators/codex.js +178 -0
  22. package/dist/generators/codex.js.map +1 -0
  23. package/dist/generators/copilot.d.ts.map +1 -1
  24. package/dist/generators/copilot.js +0 -1
  25. package/dist/generators/copilot.js.map +1 -1
  26. package/dist/generators/cursor.d.ts.map +1 -1
  27. package/dist/generators/cursor.js +36 -7
  28. package/dist/generators/cursor.js.map +1 -1
  29. package/dist/generators/custom.d.ts +55 -0
  30. package/dist/generators/custom.d.ts.map +1 -0
  31. package/dist/generators/custom.js +166 -0
  32. package/dist/generators/custom.js.map +1 -0
  33. package/dist/generators/index.d.ts +1 -0
  34. package/dist/generators/index.d.ts.map +1 -1
  35. package/dist/generators/index.js +10 -0
  36. package/dist/generators/index.js.map +1 -1
  37. package/dist/utils/config.d.ts +38 -1
  38. package/dist/utils/config.d.ts.map +1 -1
  39. package/dist/utils/config.js +10 -2
  40. package/dist/utils/config.js.map +1 -1
  41. package/dist/utils/file-system.d.ts.map +1 -1
  42. package/dist/utils/file-system.js +2 -1
  43. package/dist/utils/file-system.js.map +1 -1
  44. package/package.json +1 -1
  45. package/schemas/harness-schema.yaml +178 -53
  46. package/schemas/knowledge-schema.yaml +111 -1
  47. package/templates/agents/modus-analyst.md +1 -1
  48. package/templates/behavior-guard.md +165 -0
  49. package/templates/commands/auto.md +61 -25
  50. package/templates/commands/commit.md +63 -0
  51. package/templates/commands/harness.md +97 -30
  52. package/templates/commands/init.md +43 -10
  53. package/templates/commands/modus.md +55 -28
  54. package/templates/commands/plan.md +60 -18
  55. package/templates/commands/spec.md +69 -25
  56. package/templates/commands/upgrade.md +54 -0
  57. package/templates/commands/vibe.md +56 -6
  58. package/templates/knowledge-catalog.md +74 -32
  59. package/templates/skills/modus-agents/analyst/SKILL.md +18 -3
  60. package/templates/skills/modus-agents/deployer/SKILL.md +114 -62
  61. package/templates/skills/modus-agents/designer/SKILL.md +104 -92
  62. package/templates/skills/modus-agents/developer/SKILL.md +107 -66
  63. package/templates/skills/modus-agents/perf-auditor/SKILL.md +98 -61
  64. package/templates/skills/modus-agents/reviewer/SKILL.md +61 -11
  65. package/templates/skills/modus-agents/security-auditor/SKILL.md +111 -67
  66. package/templates/skills/modus-agents/skill-creator/SKILL.md +30 -12
  67. package/templates/skills/modus-agents/tester/SKILL.md +100 -54
  68. package/templates/skills/modus-auto/SKILL.md +581 -109
  69. package/templates/skills/modus-design-brief/SKILL.md +45 -19
  70. package/templates/skills/modus-harness/SKILL.md +150 -85
  71. package/templates/skills/modus-init/SKILL.md +1145 -319
  72. package/templates/skills/modus-plan/SKILL.md +125 -48
  73. package/templates/skills/modus-platform/SKILL.md +271 -0
  74. package/templates/skills/modus-spec/SKILL.md +175 -331
  75. package/templates/skills/modus-vibe/SKILL.md +256 -55
@@ -1,37 +1,81 @@
1
- # /modus:spec
1
+ # /modus:spec — 规范驱动开发(OpenSpec 行为规格)
2
2
 
3
- OpenSpec-style spec-driven development. Generate behavior specifications (delta specs) + design + tasks, with archive merging specs into the main spec library.
3
+ **用途:** `/plan` 基础上增加行为规格(delta specs),用 GIVEN/WHEN/THEN 明确系统「WHAT」,规格可测试,归档时自动检测冲突并合并到主规格库(Source of Truth)。适用于有接口契约变更、需要可测试验收标准的场景。
4
4
 
5
- ## Instructions
5
+ **借鉴自:** OpenSpec 规范 + Gherkin BDD(Cucumber)的 Feature/Scenario 格式
6
6
 
7
- Read and follow the skill at `.codebuddy/skills/modus-spec/SKILL.md` to execute this command.
7
+ ## 参数说明
8
8
 
9
- ## Quick Summary
9
+ ```
10
+ /modus:spec [需求描述] [参数]
11
+
12
+ --help 显示完整帮助(中文)
13
+ --story <tapd-url> 关联 TAPD Story(自动填写背景,写入 HANDOFF story_id)
14
+ --project <name> 指定项目(多项目 workspace 使用)
15
+ --lite 轻量模式:跳过 design-brief,仅生成 delta-specs + tasks
16
+ --delta 仅生成 delta-specs.md(不生成 design 和 tasks)
17
+ --testcase 归档前同步生成 QA 测试用例文件(testcases.md,JUnit 5 骨架)
18
+ --verify 归档前执行三维验证(完整性/正确性/一致性)
19
+ --resume <name> 从断点继续(读取 .modus-state.yaml)
20
+ --no-archive 跳过归档到主规格库(适合实验性变更)
21
+ ```
22
+
23
+ ## 使用示例
24
+
25
+ ```
26
+ /modus:spec 新增歌曲批量审批功能
27
+ /modus:spec --story https://tapd.cn/.../stories/view/123 艺人等级评定
28
+ /modus:spec --lite 优化版权查询索引
29
+ /modus:spec --testcase 修改支付超时时间从 30 分钟改为 15 分钟
30
+ /modus:spec --verify --story https://tapd.cn/.../123 电子签约批量重签
31
+ /modus:spec --resume batch-approve 继续上次中断的规格
32
+ ```
33
+
34
+ ## 与 `/modus:plan` 的区别
10
35
 
11
- 1. Check for business Skills (same fallback as `/modus:vibe`)
12
- 2. Identify relevant business domains
13
- 3. **Pre-update Skills**: refresh relevant business Skill files
14
- 4. Generate specification documents to `modus/changes/{name}/`:
15
- - `proposal.md` intent and scope
16
- - `specs/{domain}/spec.md` delta specs (ADDED/MODIFIED/REMOVED requirements with Scenarios)
17
- - `design.md` technical approach
18
- - `tasks.md` implementation checklist (includes spec verification tasks)
19
- 5. Ask user whether to archive:
20
- - Delta specs merged into `modus/specs/` (source of truth)
21
- - Change folder moved to `modus/changes/archive/{YYYY-MM-DD}-{name}/`
22
- 6. **Post-update Skills**: write back new business rules and contracts
36
+ | 维度 | `/modus:plan` | `/modus:spec` |
37
+ |------|--------------|----------------|
38
+ | 产出物 | 单一 `plan.md` | `delta-specs.md` + `design.md` + `tasks.md` |
39
+ | 目录 | `modus/plans/{name}/` | `modus/changes/{name}/` |
40
+ | 行为规格 | | 有(ADDED/MODIFIED/REMOVED + GIVEN/WHEN/THEN) |
41
+ | 验收标准 | | 有(可测试 Scenario) |
42
+ | 冲突检测 | | 有(MODIFIED/REMOVED 目标必须存在于主库) |
43
+ | 归档目标 | `modus/plans/archive/` | 合并到 `modus/specs/{domain}/spec.md` |
23
44
 
24
- ## Delta Spec Format
45
+ ## Delta Specs 格式(Gherkin 风格)
25
46
 
26
- Use ADDED/MODIFIED/REMOVED sections with GIVEN/WHEN/THEN scenarios.
27
- Specs describe WHAT the system does, not HOW.
47
+ ```markdown
48
+ Feature: 批量审批订单
28
49
 
29
- ## Output Location
50
+ ## ADDED Requirements
51
+
52
+ ### Scenario: Happy Path
53
+ Given 用户已登录且拥有审批权限
54
+ When 提交包含 ≥1 条订单 ID 的批量审批请求
55
+ Then 所有订单状态变更为 APPROVED,返回成功数量
56
+
57
+ ### Scenario: 超出上限
58
+ Given 请求包含 > 50 条订单 ID
59
+ When 提交批量审批请求
60
+ Then 系统返回 400 错误:"批量操作上限 50 条"
61
+ ```
62
+
63
+ ## 产出物
30
64
 
31
65
  ```
32
66
  modus/changes/{name}/
33
- ├── proposal.md
34
- ├── specs/{domain}/spec.md delta specs
35
- ├── design.md
36
- └── tasks.md
67
+ ├── .modus-state.yaml — 状态文件(支持断点续跑)
68
+ ├── proposal.md 意图与范围
69
+ ├── specs/{domain}/spec.md — delta specs(ADDED/MODIFIED/REMOVED)
70
+ ├── design.md — 技术方案
71
+ ├── design-brief.md — 精确实现指南(Full 模式)
72
+ ├── tasks.md — 实现清单(追踪到 Scenario)
73
+ └── testcases.md — QA 用例(--testcase 时生成)
74
+
75
+ 归档后:modus/changes/archive/{date}-{name}/
76
+ 主规格库:modus/specs/{domain}/spec.md(历次归档合并)
37
77
  ```
78
+
79
+ ## 执行此命令
80
+
81
+ 读取并执行 `.codebuddy/skills/modus-spec/SKILL.md` 中的完整流程。
@@ -0,0 +1,54 @@
1
+ # /modus:upgrade — 框架版本升级
2
+
3
+ **用途:** 检测 Modus 框架新版本,自动执行目录结构迁移和 Skill 格式升级,保持项目与最新规范一致。
4
+
5
+ ## 参数说明
6
+
7
+ ```
8
+ /modus:upgrade [参数]
9
+
10
+ --help 显示完整帮助(中文)
11
+ --check 仅检查当前版本和最新版本,不执行升级
12
+ --dry-run 预览将修改哪些文件,不实际写入
13
+ --changelog 显示从当前版本到最新版的变更日志
14
+ --target <version> 升级到指定版本(默认最新稳定版)
15
+ --project <name> 仅升级指定项目的 Skill 文件(多项目时)
16
+ --migrate-only 仅执行文件结构迁移,不更新框架 Skill 模板
17
+ --backup-dir <path> 指定备份目录(默认 modus/backup/{date}/)
18
+ --force 强制升级(即使版本一致,用于修复损坏的文件)
19
+ ```
20
+
21
+ ## 使用示例
22
+
23
+ ```
24
+ /modus:upgrade # 检查并执行升级到最新版
25
+ /modus:upgrade --check # 仅检查当前和最新版本
26
+ /modus:upgrade --dry-run # 预览升级变更,不实际修改
27
+ /modus:upgrade --changelog # 查看版本变更说明
28
+ /modus:upgrade --target 3.2.0 # 升级到指定版本
29
+ /modus:upgrade --migrate-only # 仅迁移目录结构,不更新模板
30
+ ```
31
+
32
+ ## 版本迁移说明
33
+
34
+ | 版本 | 主要变更 |
35
+ |------|---------|
36
+ | v3.2.0 | 跨 Skill 路径全面统一到 `modus/knowledge/biz-*/`;步骤编号规范化(禁止小数步骤);modus-analyst 产出路径更正到 `modus/stories/{id}/harness/`;modus-plan 双路径产出规则(Story 模式 vs 独立模式) |
37
+ | v3.1.0 | 知识库路径迁移:`.codebuddy/skills/modus-biz-*` → `modus/knowledge/biz-*`;新增工作区顶层路由 `modus/workspace-catalog.md`;HANDOFF 协议升级到 schema v1.1 |
38
+ | v3.0.0 | 多项目工作区支持(modus-workspace.yaml);引用式适配(不复制知识) |
39
+ | v2.x | 初始版本 |
40
+
41
+ ## 升级流程
42
+
43
+ ```
44
+ ① 读取本地 modus/config.yaml 的 modus_version 字段
45
+ ② 对比目标版本,展示差异摘要
46
+ ③ 询问确认(--force 时跳过)
47
+ ④ 备份现有文件到 modus/backup/{date}/
48
+ ⑤ 执行迁移:文件结构调整 + Skill 格式更新
49
+ ⑥ 输出迁移完成报告
50
+ ```
51
+
52
+ ## 执行此命令
53
+
54
+ 读取并执行 `.codebuddy/skills/modus-upgrade/SKILL.md` 中的完整流程。
@@ -1,12 +1,24 @@
1
- # /modus:vibe
1
+ # /modus:vibe — 上下文感知编码(氛围编程)
2
2
 
3
- Context-aware vibe coding. Intelligently loads relevant business Skills, auto-syncs stale knowledge, and applies rule-driven clarification before coding so AI works as a knowledgeable project member.
3
+ **用途:** 执行日常编码任务前,自动加载相关业务 Skill,让 AI 以「懂项目的开发者」身份工作,而非冷启动。适合 Bug 修复、小功能迭代、代码重构等日常任务。
4
4
 
5
- ## Instructions
5
+ > Context-aware vibe coding. Intelligently loads relevant business Skills, auto-syncs stale knowledge, and applies rule-driven clarification before coding so AI works as a knowledgeable project member.
6
6
 
7
- Read and follow the skill at `.codebuddy/skills/modus-vibe/SKILL.md` to execute this command.
7
+ ## 参数说明
8
8
 
9
- ## Quick Summary
9
+ ```
10
+ /modus:vibe [需求描述] [参数]
11
+
12
+ --help 显示完整帮助(中文)
13
+ --domain <name> 强制加载指定业务域(跳过自动匹配,如 --domain biz-track)
14
+ --project <name> 指定项目(多项目 workspace 使用)
15
+ --context <file> 额外加载指定文件作为上下文(相对路径)
16
+ --no-skill 跳过 Skill 加载,直接用原始代码上下文(不推荐)
17
+ --verbose 显示 Skill 加载过程和 token 预估
18
+ --dry-run 仅展示将加载的 Skill 和文件,不执行编码
19
+ ```
20
+
21
+ ## 执行流程(概览)
10
22
 
11
23
  1. Read `modus/config.yaml` for hard constraints (constitution)
12
24
  2. Load `modus/knowledge-catalog.md` (Level 1, ~200 tokens)
@@ -16,7 +28,45 @@ Read and follow the skill at `.codebuddy/skills/modus-vibe/SKILL.md` to execute
16
28
  6. Load matched Skill files as context (Level 2, ~3000 tokens each)
17
29
  7. **Adaptive Design Brief**: Simple tasks → 3-section inline brief; Medium/Complex → full 9-section brief
18
30
  8. Execute the coding task with business context (Level 3 on-demand file reads)
19
- 9. **Auto Skill write-back** (silent): if new knowledge discovered, call skill-creator Mode C to persist; show one-line `[已更新 {domain} 域知识: ...]`; if nothing new, stay silent
31
+ 9. **Buffer new knowledge** (silent): if new knowledge discovered (new enums, pitfalls, rule changes), append to `modus/sessions/pending-knowledge.yaml`; show one-line `[缓冲 {N} 条新知识 → 将在 /modus:commit 时沉淀到 Skill]`; if nothing new, stay silent. **Do NOT write to Skill files directly** — run `/modus:commit` to persist buffered knowledge.
20
32
  10. Append session log to `modus/sessions/vibe-log.md`
21
33
 
22
34
  **Degraded mode** (no business Skills): proceed without domain context, note quality may be lower, show `[降级模式:无业务上下文,建议先运行 /modus:init]`.
35
+
36
+ ## 使用示例
37
+
38
+ ```
39
+ /modus:vibe 给歌曲列表接口加一个按状态筛选的功能
40
+ /modus:vibe 订单支付回调逻辑有个 NPE,帮我排查
41
+ /modus:vibe --domain biz-track 重构歌曲同步的重试机制
42
+ /modus:vibe --verbose 分析专辑发行流程的性能瓶颈
43
+ /modus:vibe --dry-run 优化版权审核的并发处理
44
+ ```
45
+
46
+ ## 知识加载策略(渐进三级)
47
+
48
+ ```
49
+ Level 1(必须,~200 tokens)
50
+ 读 modus/knowledge-catalog.md
51
+ → 了解可用知识域,匹配当前任务相关域
52
+
53
+ Level 2(按需,~3000 tokens/个)
54
+ 仅读与任务语义匹配的 modus/knowledge/biz-*/SKILL.md
55
+ → 不相关的域不加载,节省 ~59% token
56
+
57
+ Level 3(执行时,无上限)
58
+ 从 Skill 的 key_files 索引按需读取实际代码文件
59
+ → 绝不预先全量读取
60
+ ```
61
+
62
+ ## 无业务 Skill 时的兜底
63
+
64
+ ```
65
+ ⚠️ 未找到业务知识库!建议先运行:/modus:init
66
+ A. 现在运行快速初始化
67
+ B. 继续(无业务上下文,结果质量可能降低)
68
+ ```
69
+
70
+ ## 执行此命令
71
+
72
+ 读取并执行 `.codebuddy/skills/modus-vibe/SKILL.md` 中的完整流程。
@@ -1,53 +1,95 @@
1
- # Modus 知识全景目录
1
+ # Modus 知识全景目录 — {project-name}
2
2
  # 所有 Modus 命令启动时先读此文件(Level 1 加载,~200 tokens)
3
- # 按需再读完整 SKILL.md(Level 2),或直接读代码文件(Level 3
3
+ # 框架版本:3.1.0 | 知识库路径:{project}/modus/knowledge/**(Single Source of Truth
4
+ # 多平台适配:CLAUDE.md / AGENTS.md / .cursor/rules/ 均为引用式,修改请直接编辑 modus/knowledge/ 下的文件
4
5
  #
5
- # maturity: draft → verified → proven
6
- # 衰减:proven 12个月未引用→verified;verified 6个月未引用→draft
6
+ # 路由层级:
7
+ # workspace modus/workspace-catalog.md(顶层,~100 tokens)
8
+ # project → 本文件(~200 tokens)
9
+ # domain → modus/knowledge/biz-*/SKILL.md(~3000 tokens/个,按需加载)
10
+ # 按需再读完整 SKILL.md(Level 2,~3000 tokens/个)
11
+ # 或直接读 Skill 引用的实际代码文件(Level 3,按需)
7
12
 
8
13
  updated: {YYYY-MM-DD}
9
14
 
15
+ ## 全局行为守卫 (Layer 0-G)
16
+ # 所有命令 Step 0 加载,优先级:低于 constitution.hard_rules,高于 Skill 建议
17
+ - **behavior-guard**: `modus/behavior-guard.md` — 五条全局行为约束
18
+ (Think Before Coding · Simplicity First · Surgical Changes · Goal-Driven Execution · Token Budget Guard)
19
+ [由 /modus:init 生成,不随项目代码变化,手动维护]
20
+
10
21
  ## 团队约定 (Layer 0-T)
11
- - **modus-team-conventions**: 代码规范/提交规范/硬性约束 [maturity: draft] 更新: {日期}
22
+ - **_conventions**: {规范描述} [maturity: draft] 更新: {日期}
23
+ - 路径:`{project}/modus/knowledge/_conventions/SKILL.md`
12
24
 
13
25
  ## 技术知识 (Layer 1)
14
- - **modus-tech-wiki**: 跨项目架构决策/反模式库/性能优化 [maturity: draft] 更新: {日期}
26
+ - **_tech-wiki**: {技术栈描述} [maturity: draft] 更新: {日期}
27
+ - 路径:`{project}/modus/knowledge/_tech-wiki/SKILL.md`
15
28
 
16
29
  ## 业务知识 (Layer 2)
17
30
  <!-- 由 /modus:init 生成,由各模式工作流自动更新 -->
18
- - **modus-biz-{domain}**: {中文域名} — {核心职责一句话} [maturity: draft] 最近引用: {日期}
31
+ - **biz-{domain}**: {中文域名} — {核心职责一句话} [maturity: draft] 最近引用: {日期}
32
+ - 路径:`{project}/modus/knowledge/biz-{domain}/SKILL.md`
33
+
34
+ ## 域依赖图 (Dependency Graph)
35
+ <!--
36
+ 格式:{下游域} --> {上游域1}, {上游域2}
37
+ 含义:下游域的 Skill 中 upstream_skills 声明了对上游域的依赖。
38
+ 当上游域 hash 变更时,下游域的 stale_cascade 自动置为 true(在 ⚠️ 标注处可见)。
39
+ 由 /modus:init 自动生成,可手动补充跨域调用关系。
40
+ -->
41
+ <!-- example:
42
+ payment --> order, user
43
+ notification --> order, payment
44
+ report --> order, payment, user
45
+ -->
46
+ <!-- 当前依赖关系(/modus:init 扫描后填入):
47
+ {待填入}
48
+ -->
19
49
 
20
50
  ## 渐进加载说明
51
+
21
52
  启动任意 Modus 命令时的加载顺序:
22
- Level 1(必须,~200 tokens): 读本文件,了解有哪些知识可用
23
- Level 2(按需,~3000 tokens/个): 根据任务匹配相关域,读对应 SKILL.md
24
- Level 3(按需,无上限): 执行任务时读 Skill 引用的实际代码文件
53
+ Level 1(必须,~200 tokens): 读本文件,了解有哪些知识可用
54
+ Level 2(按需,~3000 tokens): 根据任务匹配相关域,读对应 SKILL.md
55
+ Level 3(按需,无上限): 执行任务时读 Skill 引用的实际代码文件
25
56
 
26
57
  目标:不相关的 Skill 不加载,大幅降低 token 消耗。
27
58
 
28
- ## Skill 状态生命周期
59
+ ## 框架命令(快速参考)
60
+ - **modus:init** `--help` `--enhance [domain]` `--enhance-all` `--migrate` `--dry-run` `--force` `--platform [list]` `--no-sync` `--verbose` `--reset-maturity` `--project [name]`
61
+ - **modus:vibe** `--help` `--domain [name]` `--project [name]` `--context [file]` `--no-skill` `--verbose` `--dry-run`
62
+ - **modus:plan** `--help` `--story [url]` `--design` `--quick` `--enhance` `--no-build` `--resume [name]` `--complexity [level]` `--project [name]`
63
+ - **modus:spec** `--help` `--story [url]` `--lite` `--delta` `--testcase` `--verify` `--resume [name]` `--no-archive` `--project [name]`
64
+ - **modus:auto** `--help` `--force [mode]` `--no-confirm` `--show-scores` `--project [name]`
65
+ - **modus:harness** `--help` `--story [url]` `--skip [agents]` `--loop1-only` `--resume` `--dry-run` `--force-rebuild-skill` `--no-deploy` `--max-loop2 [n]` `--notify [channel]` `--project [name]`
66
+ - **modus:upgrade** `--help` `--check` `--dry-run` `--changelog` `--target [version]` `--project [name]`
67
+
68
+ ## Skill status 生命周期
29
69
 
30
- ### 成熟度状态(基于 usage_count)
31
- - **draft** → 初始生成,未经验证(usage_count = 0)
32
- - **verified** 经至少1次真实使用验证(usage_count ≥ 1,运行 `/modus:verify` 升级)
33
- - **proven** → 经≥2个不同工作流验证有效(usage_count ≥ 2
34
- - **stale** last_hash 不匹配或距 last_referenced 超过 stale_after_days,需更新(禁止直接引用)
35
- - **archived** 域已废弃,不再维护
70
+ | status | 含义 | 升级方式 |
71
+ |-----------|-------------------------|-----------------------------------|
72
+ | draft | 初始生成,未经验证 | 运行 /modus:verify 且满足四项条件 |
73
+ | verified | 经至少 1 次真实使用验证 | usage_count ≥ 2 且不同工作流 |
74
+ | proven | ≥2 个不同工作流验证 | - |
75
+ | stale | hash 不匹配或衰减超期 | 运行 /modus:refresh 后回到 draft |
76
+ | archived | 域已废弃,不再维护 | -(禁止引用) |
36
77
 
37
- ### 衰减规则(基于 last_referenced)
38
- - proven + 距 last_referenced 超过 12 个月 → verified
39
- - verified + 距 last_referenced 超过 6 个月 → stale
40
- - stale + last_referenced 超过 stale_after_days archived(需人工二次确认)
78
+ ## 衰减规则(活跃度感知,基于 last_referenced + usage_count
79
+
80
+ 衰减阈值根据 usage_count 动态调整:
81
+ - 活跃域(usage_count ≥ 10):verified → stale 12个月 / provenverified 24个月
82
+ - 正常域(usage_count 3-9):verified → stale 6个月 / proven → verified 12个月
83
+ - 冷门域(usage_count ≤ 2):verified → stale 3个月 / proven → verified 6个月
84
+ - stale + 超过 stale_after_days 天 → archived(需人工二次确认)
85
+
86
+ ## 防腐机制核心字段
41
87
 
42
- ### 防腐机制核心字段
43
88
  每个 Skill frontmatter 必须包含以下字段,缺一不可:
44
- - **last_referenced**: 最后引用时间(用于衰减计算)
45
- - **usage_count**: 使用次数(用于成熟度升级)
46
- - **last_hash**: key_files 内容 SHA-1 哈希(用于检测代码变更,初始留空)
47
- - **key_files**: 关键源文件列表(最多20个,用于 hash 计算)
48
-
49
- 缺少任一防腐字段将导致:
50
- - 无法自动检测代码变更
51
- - 无法触发 Skill 更新
52
- - 无法计算知识衰减
53
- - 防腐机制完全失效
89
+ - **last_referenced**: 最后引用时间(每次被命令加载时更新)
90
+ - **usage_count**: 使用次数(每次完成真实开发任务后 +1)
91
+ - **last_hash**: 全局 SHA-1(对每个文件单独计算 SHA-1,将「路径:SHA-1」对按文件路径字母序排序后拼接,再整体计算 SHA-1,禁止内容直接拼接);引用时快速比对,不一致则展开 file_hashes 逐文件定位
92
+ - **file_hashes**: 文件级 hash map(`{路径: SHA-1}`);全局 hash 不一致时使用,精准输出变更文件清单
93
+ - **key_files**: 关键源文件列表(最多 20 个,用于 hash 计算)
94
+
95
+ 详细说明见:modus/templates/skills/modus-init/SKILL.md「防腐机制总览」章节
@@ -9,7 +9,7 @@ disable: false
9
9
 
10
10
  **调用方:** Harness Orchestrator(`modus-harness`)
11
11
  **输入:** TAPD Story URL + 相关业务 Skill 内容
12
- **产出物:** `modus/plans/active/{story-id}/01-analysis.md`
12
+ **产出物:** `modus/stories/{story-id}/harness/01-analysis.md`
13
13
 
14
14
  ## 职责
15
15
 
@@ -23,7 +23,7 @@ disable: false
23
23
 
24
24
  1. 从 TAPD Story URL 获取需求内容(标题、描述、验收标准)
25
25
  2. 读取 Orchestrator 传入的相关业务 Skill 文件
26
- 3. 读取 `modus/config.yaml` 中的项目背景信息
26
+ 3. 使用 Orchestrator 传入的 constitution 内容(来自 `{project}/modus/config.yaml`,无需独立读取)
27
27
 
28
28
  ### Step 2:业务分析
29
29
 
@@ -95,7 +95,19 @@ disable: false
95
95
  ## 产出物格式(01-analysis.md)
96
96
 
97
97
  ```markdown
98
- # 需求分析报告
98
+ ---
99
+ schema_version: "1.1"
100
+ agent: "01-analysis"
101
+ run_id: "{YYYYMMDD}-{story_id_prefix}"
102
+ story_id: "{story-id}"
103
+ task_id: ""
104
+ domains: ["{domain1}", "{domain2}"]
105
+ gate_status: "{passed|failed}"
106
+ artifact_status: "complete"
107
+ issues: []
108
+ skill_refs:
109
+ - "modus-biz-{domain}@{version}"
110
+ ---
99
111
 
100
112
  ## 基本信息
101
113
  - Story ID: {id}
@@ -140,3 +152,6 @@ disable: false
140
152
  - 每个风险点必须附带处理建议
141
153
  - Sprint 计划必须可直接指导 SubAgent 02 开发,不能含糊
142
154
  - 验收标准必须可测试(能直接写成测试用例)
155
+ - **HANDOFF 块必须位于文件最顶部(YAML frontmatter 形式,`---...---`)**,`gate_status` 字段不可省略
156
+ - `gate_status` 赋值规则:分析完整且无重大歧义 → `passed`;存在无法确认的关键信息 → `failed`(Orchestrator 会重入本 SubAgent)
157
+ - `risk_level` 取值:有事务/并发/数据迁移风险 → `high`;有接口变更但逻辑清晰 → `medium`;纯新增无破坏 → `low`
@@ -1,108 +1,160 @@
1
1
  ---
2
2
  name: modus-deployer
3
- description: Use this skill when the Harness orchestrator needs to verify deployment after code review passes (no P1/P2 issues). Monitors CI/CD pipeline status, validates service health across environments (dev→uat→pre→prd), runs smoke tests on P0 interfaces, and generates 07-deploy-status.md. Triggered by modus-harness after Gate C passes.
4
- allowed-tools: Read, Write, Glob, Bash, WebFetch
3
+ description: Use this skill when the Harness orchestrator needs to verify deployment after code review passes. Monitors CI/CD pipeline status, validates service health across gray environments (dev→uat→pre→prd), runs P0 smoke tests, monitors error logs for 30 minutes after go-live, pauses for human confirmation before prd. Generates 07-deploy-status.md with HANDOFF block. Triggered by modus-harness after Gate C passes.
4
+ allowed-tools: Read, Write, Glob, Bash
5
5
  disable: false
6
6
  ---
7
7
 
8
8
  # modus-deployer(部署发布 SubAgent)
9
9
 
10
10
  **调用方:** Harness Orchestrator(Gate C 通过后触发)
11
- **输入:** `cr-report.md`(无 P1/P2)+ `02-sprint-contract.md`
11
+ **输入:** `02-sprint-contract.md` + `modus/config.yaml` 的 harness.environments 配置
12
12
  **产出物:** `modus/plans/active/{story-id}/07-deploy-status.md`
13
13
 
14
14
  ## 职责
15
15
 
16
- 代码合入后的灰度部署验证。监控 CI/CD 流水线,验证各灰度环境服务健康状态,对关键接口执行冒烟测试,监控上线后错误日志变化。
16
+ 验证代码从 CI 到逐级灰度环境的部署过程,执行 P0 接口冒烟测试,监控上线后错误日志,prd 环境等待人工确认后才执行。
17
17
 
18
18
  ---
19
19
 
20
20
  ## 执行流程
21
21
 
22
- ### Step 1:确认部署前提
22
+ ### Step 1:读取部署配置
23
23
 
24
- 1. 确认 `cr-report.md` 结论为「可合入」(无 P1/P2)
25
- 2. 读取 `modus/config.yaml` 中的部署相关配置(如 CI 地址、环境列表)
26
- 3. 提示用户确认已触发 CI/CD 流水线
24
+ 读取 `modus/config.yaml`:
25
+ ```yaml
26
+ harness:
27
+ buildCommand: "mvn clean compile -q"
28
+ environments: [dev, uat, pre] # prd 单独人工确认
29
+ tapdProjectId: "{TAPD项目ID}"
30
+ ```
31
+
32
+ 读取 `02-sprint-contract.md` 的 `changed_files`,确认本次变更的模块范围。
33
+
34
+ ### Step 2:CI 状态轮询
35
+
36
+ 检查 CI/CD 流水线(如有 API/CLI 访问权限):
37
+
38
+ ```bash
39
+ # 轮询 CI 状态(每 30 秒检查一次,超时 10 分钟)
40
+ # 根据项目 CI 工具配置具体命令
41
+ ```
42
+
43
+ **若 CI 失败:**
44
+ ```
45
+ ❌ CI 失败,Harness 无法继续部署验证。
46
+ 请检查:{CI 失败的 job 和错误摘要}
47
+ 修复后重新运行 /modus:harness(断点续跑)。
48
+ ⏸️ 等待用户处理。
49
+ ```
50
+
51
+ ### Step 3:逐环境灰度验证
52
+
53
+ 按 `harness.environments` 顺序逐级验证(dev → uat → pre):
54
+
55
+ **每个环境的验证步骤:**
56
+
57
+ 1. **服务健康检查:** 确认服务实例正常启动(健康检查接口返回 200)
58
+ 2. **P0 冒烟测试:** 执行核心接口的基本功能验证(从 01-analysis.md 验收标准选取最关键的 1-3 个场景)
59
+ 3. **错误日志监控:** 检查部署后 5 分钟内是否有新增 ERROR 日志(基线对比)
27
60
 
28
- ### Step 2:CI 流水线状态监控
61
+ **冒烟测试规范:**
62
+ ```bash
63
+ # 从 01-analysis.md 的验收标准提取 P0 场景
64
+ # 使用 curl / HTTP 客户端执行请求
65
+ # 验证响应码和关键字段
66
+ ```
67
+
68
+ **环境验证通过条件:**
69
+ - 健康检查接口返回 200
70
+ - P0 冒烟测试全部通过
71
+ - 5 分钟内新增 ERROR 日志数 ≤ 基线的 110%(允许少量噪音)
29
72
 
30
- 定期询问或读取 CI 状态:
31
- - 构建是否通过
32
- - 单元测试是否通过
33
- - 代码扫描是否通过
73
+ **环境验证失败 立即停止,上报 Orchestrator 等待人工介入。**
34
74
 
35
- CI 失败,输出失败原因并停止。
75
+ ### Step 4:⏸️ prd 人工确认
36
76
 
37
- ### Step 3:灰度环境验证
77
+ pre 环境验证通过后,暂停等待人工确认:
78
+
79
+ ```
80
+ ✅ pre 环境验证通过
81
+ 冒烟测试: {N}/{N} 通过
82
+ 错误日志: 无新增 ERROR
38
83
 
39
- `dev → test → pre(预发)` 顺序验证(不自动部署 prd,prd 需人工确认):
84
+ ⏸️ prd 部署等待人工确认:
85
+
86
+ 变更摘要:
87
+ - 涉及模块: {模块列表}
88
+ - 变更文件: {N} 个
89
+ - 已验证环境: dev ✅ | uat ✅ | pre ✅
90
+
91
+ 是否继续部署到 prd?[Y/n]
92
+ ```
40
93
 
41
- 对每个环境:
42
- 1. 检查服务健康状态(health check 接口)
43
- 2. 执行 P0 冒烟测试(来自 `01-analysis.md` 的验收 Scenario)
44
- 3. 查询近 15 分钟 ERROR 日志数量,与上线前基线对比
94
+ 等待用户确认后继续。
45
95
 
46
- ### Step 4:生成部署报告
96
+ ### Step 5:prd 上线监控(仅在用户确认后执行)
97
+
98
+ prd 部署后监控 30 分钟:
99
+ - 每 5 分钟检查一次 ERROR 日志数量
100
+ - 若 ERROR 数量显著增加(> 基线 150%),立即告警并暂停
101
+
102
+ ### Step 6:写入部署状态报告
47
103
 
48
104
  ---
49
105
 
50
106
  ## 产出物格式(07-deploy-status.md)
51
107
 
52
108
  ```markdown
53
- # 部署状态报告
109
+ <!--HANDOFF
110
+ agent: "07-deployer"
111
+ story_id: "{story-id}"
112
+ gate_status: "{passed|failed|pending_prd}"
113
+ environments_passed: ["{dev}", "{uat}", "{pre}"]
114
+ prd_status: "{deployed|pending|skipped}"
115
+ -->
116
+
117
+ # 部署状态报告 — {Story 标题}
54
118
 
55
- ## 基本信息
56
- - Story ID: {id}
119
+ ## 部署摘要
57
120
  - 部署时间: {YYYY-MM-DD HH:mm}
58
- - 代码分支: {branch}
121
+ - 触发版本: {commit hash 或构建号}
122
+ - 最终状态: {✅ 全部通过 / ❌ 失败 / ⏸️ 等待 prd}
59
123
 
60
- ## CI 流水线
61
- | 阶段 | 状态 | 耗时 |
62
- |------|------|------|
63
- | 构建 | ✅ | {N}s |
64
- | 单元测试 | ✅ | {N}s |
65
- | 代码扫描 | ✅ | {N}s |
124
+ ## 环境验证结果
66
125
 
67
- ## 灰度环境验证
126
+ | 环境 | 健康检查 | 冒烟测试 | ERROR日志 | 结论 |
127
+ |-----|---------|---------|---------|-----|
128
+ | dev | ✅ | ✅ N/N | 无新增 | ✅ 通过 |
129
+ | uat | ✅ | ✅ N/N | 无新增 | ✅ 通过 |
130
+ | pre | ✅ | ✅ N/N | 无新增 | ✅ 通过 |
131
+ | prd | ⏸️ 待确认 | — | — | ⏸️ 等待人工 |
68
132
 
69
- ### dev 环境
70
- - 服务状态: ✅ 健康
71
- - 冒烟测试: {N}/{N} 通过
72
- - ERROR 日志: 上线前 {N}/h → 上线后 {N}/h({变化})
133
+ ## 冒烟测试详情
73
134
 
74
- ### test 环境
75
- - 服务状态: 健康
76
- - 冒烟测试: {N}/{N} 通过
135
+ ### P0 场景:{场景名}
136
+ - 请求: `{HTTP Method} {path}`
137
+ - 响应: HTTP 200,{关键字段验证}
138
+ - 结果: ✅ 通过
77
139
 
78
- ### pre(预发)环境
79
- - 服务状态: ✅ 健康
80
- - 冒烟测试: {N}/{N} 通过
81
- - ERROR 日志: 上线前 {N}/h → 上线后 {N}/h
140
+ ## prd 监控日志(上线后 30 分钟)
82
141
 
83
- ## prd 环境
84
- ⏸️ 等待人工确认部署
142
+ {prd 部署后补充}
85
143
 
86
- **部署确认单:**
87
- - [ ] pre 环境验证通过
88
- - [ ] 业务方确认冒烟通过
89
- - [ ] 运维确认资源充足
144
+ ## 部署注意事项
90
145
 
91
- ## 冒烟测试详情
92
- | 场景 | 接口 | 状态 |
93
- |------|------|------|
94
- | {验收场景1} | POST /api/v1/{path} | ✅ |
95
- | {验收场景2} | GET /api/v1/{path} | ✅ |
96
-
97
- ## 结论
98
- {✅ 灰度验证通过,可推进 prd 部署}
99
- {❌ 灰度验证失败: {失败原因}}
146
+ {记录部署过程中发现的特殊情况,供知识沉淀使用}
100
147
  ```
101
148
 
149
+ **`gate_status` 赋值规则:**
150
+ - `passed`:所有非 prd 环境通过,prd 也已完成且监控正常
151
+ - `pending_prd`:non-prd 通过,prd 等待人工确认(正常状态)
152
+ - `failed`:任一环境验证失败或 prd 上线后出现 ERROR 激增
153
+
102
154
  ---
103
155
 
104
- ## 注意事项
156
+ ## 质量标准
105
157
 
106
- - prd 环境不自动部署,必须等待人工确认
107
- - 若任意灰度环境冒烟失败,立即停止并上报给 Orchestrator
108
- - ERROR 日志增量超过基线 2 倍时,触发告警提示
158
+ - 冒烟测试场景必须来自 01-analysis.md 的验收标准,不得自行编造
159
+ - prd 环境**必须等待人工确认**,不得自动部署
160
+ - **HANDOFF 块必须位于文件最顶部**,Orchestrator 读取 `prd_status` 决定是否进入 ARCHIVE 阶段