@modus-ai/modus 0.2.8 → 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.
- package/dist/generators/claude.js +2 -2
- package/dist/generators/claude.js.map +1 -1
- package/dist/generators/cursor.d.ts.map +1 -1
- package/dist/generators/cursor.js +7 -2
- package/dist/generators/cursor.js.map +1 -1
- package/dist/utils/config.js +1 -1
- package/dist/utils/config.js.map +1 -1
- package/package.json +1 -1
- package/templates/commands/cr.md +74 -0
- package/templates/commands/plan.md +36 -13
- package/templates/skills/modus-cr/SKILL.md +386 -0
- package/templates/skills/modus-plan/SKILL.md +327 -39
|
@@ -8,7 +8,7 @@ const CLAUDE_MD = 'CLAUDE.md';
|
|
|
8
8
|
// ---------------------------------------------------------------------------
|
|
9
9
|
// Commands — Claude slash commands under .claude/commands/modus/
|
|
10
10
|
// ---------------------------------------------------------------------------
|
|
11
|
-
const COMMAND_IDS = ['init', 'vibe', 'plan', 'spec', 'auto', 'harness', 'platform'];
|
|
11
|
+
const COMMAND_IDS = ['init', 'vibe', 'plan', 'spec', 'auto', 'harness', 'platform', 'cr'];
|
|
12
12
|
// ---------------------------------------------------------------------------
|
|
13
13
|
// Harness sub-agents — Native .claude/agents/ sub-agent definitions
|
|
14
14
|
// ---------------------------------------------------------------------------
|
|
@@ -135,7 +135,7 @@ function buildConstitutionBlock(config) {
|
|
|
135
135
|
if (keyPatterns) {
|
|
136
136
|
lines.push('**Key Patterns:**', keyPatterns, '');
|
|
137
137
|
}
|
|
138
|
-
lines.push('**Modus Commands:** `/modus:init` · `/modus:vibe` · `/modus:plan` · `/modus:spec` · `/modus:auto` · `/modus:harness`', '', '**Auto-Vibe Mode (always active):** For every conversation in this project, automatically', 'apply vibe-mode behavior without waiting for `/modus:vibe`. Read `modus/knowledge-catalog.md`,', 'identify relevant domains from the user\'s request, load the corresponding', '`.claude/agents/modus-biz-{domain}.md` sub-agent context, and respond as a developer', 'who deeply understands this codebase. Switch to plan/spec/harness mode only when', 'the user explicitly triggers those commands.', '', CLAUDE_MD_SECTION_END);
|
|
138
|
+
lines.push('**Modus Commands:** `/modus:init` · `/modus:vibe` · `/modus:plan` · `/modus:spec` · `/modus:auto` · `/modus:harness` · `/modus:cr`', '', '**Auto-Vibe Mode (always active):** For every conversation in this project, automatically', 'apply vibe-mode behavior without waiting for `/modus:vibe`. Read `modus/knowledge-catalog.md`,', 'identify relevant domains from the user\'s request, load the corresponding', '`.claude/agents/modus-biz-{domain}.md` sub-agent context, and respond as a developer', 'who deeply understands this codebase. Switch to plan/spec/harness mode only when', 'the user explicitly triggers those commands.', '', CLAUDE_MD_SECTION_END);
|
|
139
139
|
return lines.join('\n');
|
|
140
140
|
}
|
|
141
141
|
function generateClaudeMd(projectRoot, config) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"claude.js","sourceRoot":"","sources":["../../src/generators/claude.ts"],"names":[],"mappings":"AAIA,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,SAAS,EAAE,YAAY,EAAE,UAAU,EAAE,QAAQ,EAAa,MAAM,yBAAyB,CAAC;AAInG,MAAM,aAAa,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,UAAU,EAAE,OAAO,CAAC,CAAC;AAChE,MAAM,WAAW,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,QAAQ,CAAC,CAAC;AACnD,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;AACjD,MAAM,aAAa,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,eAAe,CAAC,CAAC;AAC5D,MAAM,SAAS,GAAG,WAAW,CAAC;AAE9B,8EAA8E;AAC9E,iEAAiE;AACjE,8EAA8E;AAE9E,MAAM,WAAW,GAAG,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,UAAU,CAAU,CAAC;
|
|
1
|
+
{"version":3,"file":"claude.js","sourceRoot":"","sources":["../../src/generators/claude.ts"],"names":[],"mappings":"AAIA,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,SAAS,EAAE,YAAY,EAAE,UAAU,EAAE,QAAQ,EAAa,MAAM,yBAAyB,CAAC;AAInG,MAAM,aAAa,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,UAAU,EAAE,OAAO,CAAC,CAAC;AAChE,MAAM,WAAW,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,QAAQ,CAAC,CAAC;AACnD,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;AACjD,MAAM,aAAa,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,eAAe,CAAC,CAAC;AAC5D,MAAM,SAAS,GAAG,WAAW,CAAC;AAE9B,8EAA8E;AAC9E,iEAAiE;AACjE,8EAA8E;AAE9E,MAAM,WAAW,GAAG,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,UAAU,EAAE,IAAI,CAAU,CAAC;AAEnG,8EAA8E;AAC9E,oEAAoE;AACpE,8EAA8E;AAE9E,MAAM,cAAc,GAAG;IACrB,qBAAqB;IACrB,eAAe;IACf,iBAAiB;IACjB,cAAc;IACd,oBAAoB;IACpB,wBAAwB;IACxB,gBAAgB;IAChB,gBAAgB;CACR,CAAC;AAEX,8EAA8E;AAC9E,6CAA6C;AAC7C,8EAA8E;AAE9E,MAAM,SAAS,GAAG,CAAC,gBAAgB,EAAE,oBAAoB,CAAU,CAAC;AAEpE,8EAA8E;AAC9E,aAAa;AACb,8EAA8E;AAE9E,MAAM,UAAU,mBAAmB,CACjC,WAAmB,EACnB,MAAmB,EACnB,QAAyB,EAAE;IAE3B,sBAAsB,CAAC,WAAW,EAAE,MAAM,CAAC,CAAC;IAC5C,oBAAoB,CAAC,WAAW,CAAC,CAAC;IAClC,mBAAmB,CAAC,WAAW,EAAE,MAAM,CAAC,CAAC;IACzC,gBAAgB,CAAC,WAAW,EAAE,MAAM,CAAC,CAAC;IACtC,sBAAsB,CAAC,WAAW,EAAE,MAAM,CAAC,CAAC;AAC9C,CAAC;AAED,8EAA8E;AAC9E,qDAAqD;AACrD,8EAA8E;AAE9E,SAAS,sBAAsB,CAAC,WAAmB,EAAE,MAAmB;IACtE,qBAAqB;IACrB,IAAI,CAAC;QACH,MAAM,WAAW,GAAG,YAAY,CAAC,mBAAmB,CAAC,CAAC;QACtD,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,SAAS,EAAE,UAAU,EAAE,UAAU,CAAC,EAAE,WAAW,CAAC,CAAC;IACpF,CAAC;IAAC,MAAM,CAAC;QACP,iCAAiC;IACnC,CAAC;IAED,MAAM,OAAO,GAAG,IAAI,GAAG,CAAC,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;IACjD,KAAK,MAAM,KAAK,IAAI,WAAW,EAAE,CAAC;QAChC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC;YAAE,SAAS;QAClC,IAAI,CAAC;YACH,MAAM,OAAO,GAAG,YAAY,CAAC,YAAY,KAAK,KAAK,CAAC,CAAC;YACrD,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,aAAa,EAAE,GAAG,KAAK,KAAK,CAAC,EAAE,OAAO,CAAC,CAAC;QAC3E,CAAC;QAAC,MAAM,CAAC;YACP,iCAAiC;QACnC,CAAC;IACH,CAAC;AACH,CAAC;AAED,8EAA8E;AAC9E,qEAAqE;AACrE,8EAA8E;AAE9E,SAAS,oBAAoB,CAAC,WAAmB;IAC/C,KAAK,MAAM,OAAO,IAAI,cAAc,EAAE,CAAC;QACrC,IAAI,CAAC;YACH,MAAM,OAAO,GAAG,YAAY,CAAC,UAAU,OAAO,KAAK,CAAC,CAAC;YACrD,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,WAAW,EAAE,GAAG,OAAO,KAAK,CAAC,EAAE,OAAO,CAAC,CAAC;QAC3E,CAAC;QAAC,MAAM,CAAC;YACP,iCAAiC;QACnC,CAAC;IACH,CAAC;AACH,CAAC;AAED,8EAA8E;AAC9E,6BAA6B;AAC7B,8EAA8E;AAE9E,SAAS,mBAAmB,CAAC,WAAmB,EAAE,MAAmB;IACnE,KAAK,MAAM,OAAO,IAAI,SAAS,EAAE,CAAC;QAChC,IAAI,CAAC;YACH,IAAI,OAAO,GAAG,YAAY,CAAC,SAAS,OAAO,WAAW,CAAC,CAAC;YACxD,IAAI,OAAO,KAAK,oBAAoB,EAAE,CAAC;gBACrC,OAAO,GAAG,wBAAwB,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;YACtD,CAAC;YACD,mEAAmE;YACnE,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,UAAU,EAAE,GAAG,OAAO,KAAK,CAAC,EAAE,OAAO,CAAC,CAAC;QAC1E,CAAC;QAAC,MAAM,CAAC;YACP,iCAAiC;QACnC,CAAC;IACH,CAAC;AACH,CAAC;AAED,8EAA8E;AAC9E,8CAA8C;AAC9C,8EAA8E;AAE9E,MAAM,uBAAuB,GAAG,mCAAmC,CAAC;AACpE,MAAM,qBAAqB,GAAG,iCAAiC,CAAC;AAEhE,SAAS,sBAAsB,CAAC,MAAmB;IACjD,MAAM,GAAG,GAAG,MAA4C,CAAC;IACzD,MAAM,YAAY,GAAI,GAAG,CAAC,cAAc,CAAyC,IAAI,EAAE,CAAC;IACxF,MAAM,SAAS,GAAG,MAAM,CAAC,YAAY,CAAC,YAAY,CAAC,IAAI,MAAM,CAAC,SAAS,IAAI,EAAE,CAAC,CAAC;IAC/E,MAAM,QAAQ,GAAG,MAAM,CAAC,YAAY,CAAC,eAAe,CAAC,IAAI,EAAE,CAAC,CAAC;IAC7D,MAAM,OAAO,GAAG,MAAM,CAAC,YAAY,CAAC,cAAc,CAAC,IAAI,EAAE,CAAC,CAAC;IAC3D,MAAM,SAAS,GAAG,KAAK,CAAC,OAAO,CAAC,YAAY,CAAC,YAAY,CAAC,CAAC;QACzD,CAAC,CAAE,YAAY,CAAC,YAAY,CAAc,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC;QAC1E,CAAC,CAAC,EAAE,CAAC;IACP,MAAM,WAAW,GAAG,KAAK,CAAC,OAAO,CAAC,YAAY,CAAC,cAAc,CAAC,CAAC;QAC7D,CAAC,CAAE,YAAY,CAAC,cAAc,CAAc,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC;QAC5E,CAAC,CAAC,EAAE,CAAC;IACP,MAAM,OAAO,GAAG,MAAM,CAAC,OAAO,IAAI,EAAE,CAAC;IAErC,MAAM,KAAK,GAAa;QACtB,uBAAuB;QACvB,EAAE;QACF,+BAA+B;QAC/B,EAAE;KACH,CAAC;IACF,IAAI,OAAO,EAAE,CAAC;QAAC,KAAK,CAAC,IAAI,CAAC,KAAK,OAAO,EAAE,EAAE,EAAE,CAAC,CAAC;IAAC,CAAC;IAChD,IAAI,SAAS,EAAE,CAAC;QAAC,KAAK,CAAC,IAAI,CAAC,mBAAmB,SAAS,EAAE,EAAE,EAAE,CAAC,CAAC;IAAC,CAAC;IAClE,IAAI,QAAQ,EAAE,CAAC;QAAC,KAAK,CAAC,IAAI,CAAC,wBAAwB,QAAQ,IAAI,EAAE,EAAE,CAAC,CAAC;IAAC,CAAC;IACvE,IAAI,OAAO,EAAE,CAAC;QAAC,KAAK,CAAC,IAAI,CAAC,uBAAuB,OAAO,IAAI,EAAE,EAAE,CAAC,CAAC;IAAC,CAAC;IACpE,IAAI,SAAS,EAAE,CAAC;QAAC,KAAK,CAAC,IAAI,CAAC,sCAAsC,EAAE,SAAS,EAAE,EAAE,CAAC,CAAC;IAAC,CAAC;IACrF,IAAI,WAAW,EAAE,CAAC;QAAC,KAAK,CAAC,IAAI,CAAC,mBAAmB,EAAE,WAAW,EAAE,EAAE,CAAC,CAAC;IAAC,CAAC;IACtE,KAAK,CAAC,IAAI,CACR,oIAAoI,EACpI,EAAE,EACF,2FAA2F,EAC3F,gGAAgG,EAChG,4EAA4E,EAC5E,sFAAsF,EACtF,kFAAkF,EAClF,8CAA8C,EAC9C,EAAE,EACF,qBAAqB,CACtB,CAAC;IACF,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC1B,CAAC;AAED,SAAS,gBAAgB,CAAC,WAAmB,EAAE,MAAmB;IAChE,MAAM,YAAY,GAAG,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,SAAS,CAAC,CAAC;IACvD,MAAM,KAAK,GAAG,sBAAsB,CAAC,MAAM,CAAC,CAAC;IAE7C,IAAI,CAAC,UAAU,CAAC,YAAY,CAAC,EAAE,CAAC;QAC9B,SAAS,CAAC,YAAY,EAAE,KAAK,GAAG,IAAI,CAAC,CAAC;QACtC,OAAO;IACT,CAAC;IAED,IAAI,QAAQ,GAAG,QAAQ,CAAC,YAAY,CAAC,CAAC;IAEtC,yCAAyC;IACzC,IAAI,QAAQ,CAAC,QAAQ,CAAC,uBAAuB,CAAC,EAAE,CAAC;QAC/C,MAAM,QAAQ,GAAG,QAAQ,CAAC,OAAO,CAAC,uBAAuB,CAAC,CAAC;QAC3D,MAAM,MAAM,GAAG,QAAQ,CAAC,OAAO,CAAC,qBAAqB,CAAC,CAAC;QACvD,IAAI,MAAM,KAAK,CAAC,CAAC,EAAE,CAAC;YAClB,QAAQ;gBACN,QAAQ,CAAC,KAAK,CAAC,CAAC,EAAE,QAAQ,CAAC;oBAC3B,KAAK;oBACL,QAAQ,CAAC,KAAK,CAAC,MAAM,GAAG,qBAAqB,CAAC,MAAM,CAAC,CAAC;QAC1D,CAAC;IACH,CAAC;SAAM,CAAC;QACN,QAAQ,GAAG,QAAQ,CAAC,OAAO,EAAE,GAAG,MAAM,GAAG,KAAK,GAAG,IAAI,CAAC;IACxD,CAAC;IAED,SAAS,CAAC,YAAY,EAAE,QAAQ,CAAC,CAAC;AACpC,CAAC;AAED,8EAA8E;AAC9E,0DAA0D;AAC1D,8EAA8E;AAE9E,SAAS,sBAAsB,CAAC,WAAmB,EAAE,MAAmB;IACtE,IAAI,CAAC,MAAM,CAAC,UAAU,IAAI,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO;IAE9E,MAAM,YAAY,GAAG,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,aAAa,CAAC,CAAC;IAC3D,IAAI,QAAQ,GAA4B,EAAE,CAAC;IAE3C,IAAI,UAAU,CAAC,YAAY,CAAC,EAAE,CAAC;QAC7B,IAAI,CAAC;YACH,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,YAAY,CAAC,CAA4B,CAAC;QAC3E,CAAC;QAAC,MAAM,CAAC;YACP,QAAQ,GAAG,EAAE,CAAC;QAChB,CAAC;IACH,CAAC;IAED,kDAAkD;IAClD,MAAM,eAAe,GAAI,QAAQ,CAAC,YAAY,CAA6B,IAAI,EAAE,CAAC;IAClF,QAAQ,CAAC,YAAY,CAAC,GAAG,EAAE,GAAG,MAAM,CAAC,UAAU,EAAE,GAAG,eAAe,EAAE,CAAC;IAEtE,SAAS,CAAC,YAAY,EAAE,IAAI,CAAC,SAAS,CAAC,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC;AACpE,CAAC;AAED,8EAA8E;AAC9E,UAAU;AACV,8EAA8E;AAE9E,SAAS,wBAAwB,CAAC,QAAgB,EAAE,MAAmB;IACrE,MAAM,GAAG,GAAG,MAA4C,CAAC;IACzD,MAAM,YAAY,GAAI,GAAG,CAAC,cAAc,CAAyC,IAAI,EAAE,CAAC;IAExF,MAAM,SAAS,GAAG,MAAM,CAAC,YAAY,CAAC,YAAY,CAAC,IAAI,MAAM,CAAC,SAAS,IAAI,oDAAoD,CAAC,CAAC;IACjI,MAAM,QAAQ,GAAG,MAAM,CAAC,YAAY,CAAC,eAAe,CAAC,IAAI,uDAAuD,CAAC,CAAC;IAClH,MAAM,OAAO,GAAG,MAAM,CAAC,YAAY,CAAC,cAAc,CAAC,IAAI,sDAAsD,CAAC,CAAC;IAE/G,MAAM,SAAS,GAAG,KAAK,CAAC,OAAO,CAAC,YAAY,CAAC,YAAY,CAAC,CAAC;QACzD,CAAC,CAAE,YAAY,CAAC,YAAY,CAAc,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC;QAC1E,CAAC,CAAC,oDAAoD,CAAC;IAEzD,MAAM,WAAW,GAAG,KAAK,CAAC,OAAO,CAAC,YAAY,CAAC,cAAc,CAAC,CAAC;QAC7D,CAAC,CAAE,YAAY,CAAC,cAAc,CAAc,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC;QAC5E,CAAC,CAAC,yDAAyD,CAAC;IAE9D,OAAO,QAAQ;SACZ,OAAO,CAAC,gBAAgB,EAAE,SAAS,CAAC;SACpC,OAAO,CAAC,mBAAmB,EAAE,QAAQ,CAAC;SACtC,OAAO,CAAC,kBAAkB,EAAE,OAAO,CAAC;SACpC,OAAO,CAAC,gBAAgB,EAAE,SAAS,CAAC;SACpC,OAAO,CAAC,kBAAkB,EAAE,WAAW,CAAC,CAAC;AAC9C,CAAC;AAED,8EAA8E;AAC9E,gEAAgE;AAChE,8EAA8E;AAE9E;;;GAGG;AACH,MAAM,UAAU,oBAAoB,CAClC,WAAmB,EACnB,MAAc,EACd,YAAoB;IAEpB,MAAM,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,WAAW,EAAE,aAAa,MAAM,KAAK,CAAC,CAAC;IAChF,MAAM,MAAM,GAAG,eAAe,MAAM,0CAA0C,MAAM,gBAAgB,CAAC;IACrG,SAAS,CAAC,SAAS,EAAE,MAAM,GAAG,YAAY,CAAC,CAAC;AAC9C,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cursor.d.ts","sourceRoot":"","sources":["../../src/generators/cursor.ts"],"names":[],"mappings":"AAUA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACtD,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAC;
|
|
1
|
+
{"version":3,"file":"cursor.d.ts","sourceRoot":"","sources":["../../src/generators/cursor.ts"],"names":[],"mappings":"AAUA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACtD,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAC;AA0EtD,wBAAgB,mBAAmB,CACjC,WAAW,EAAE,MAAM,EACnB,MAAM,EAAE,WAAW,EACnB,KAAK,GAAE,eAAoB,GAC1B,IAAI,CAMN;AAqKD;;;;GAIG;AACH,wBAAgB,oBAAoB,CAClC,WAAW,EAAE,MAAM,EACnB,MAAM,EAAE,MAAM,EACd,YAAY,EAAE,MAAM,GACnB,IAAI,CAON"}
|
|
@@ -42,6 +42,11 @@ const COMMAND_SKILLS = [
|
|
|
42
42
|
templatePath: 'skills/modus-platform/SKILL.md',
|
|
43
43
|
description: 'Run /modus:platform -add to add a new AI platform adapter via online research',
|
|
44
44
|
},
|
|
45
|
+
{
|
|
46
|
+
id: 'modus-cr',
|
|
47
|
+
templatePath: 'skills/modus-cr/SKILL.md',
|
|
48
|
+
description: 'Run /modus:cr --doc to review code changes against a design document with consistency check and quality CR',
|
|
49
|
+
},
|
|
45
50
|
];
|
|
46
51
|
// ---------------------------------------------------------------------------
|
|
47
52
|
// Harness SubAgent skills → .cursor/skills/modus-harness-{id}/SKILL.md
|
|
@@ -76,7 +81,7 @@ function generateCursorCommandSkills(projectRoot, config) {
|
|
|
76
81
|
const enabled = new Set(config.commands.enabled);
|
|
77
82
|
for (const skill of COMMAND_SKILLS) {
|
|
78
83
|
const cmdId = skill.id.replace('modus-', '');
|
|
79
|
-
if (['init', 'vibe', 'plan', 'spec', 'auto', 'harness', 'platform'].includes(cmdId) && !enabled.has(cmdId)) {
|
|
84
|
+
if (['init', 'vibe', 'plan', 'spec', 'auto', 'harness', 'platform', 'cr'].includes(cmdId) && !enabled.has(cmdId)) {
|
|
80
85
|
continue;
|
|
81
86
|
}
|
|
82
87
|
let body;
|
|
@@ -145,7 +150,7 @@ function generateCursorConstitution(projectRoot, config) {
|
|
|
145
150
|
if (keyPatterns) {
|
|
146
151
|
lines.push('**Key Patterns:**', keyPatterns, '');
|
|
147
152
|
}
|
|
148
|
-
lines.push('**Modus Commands:** `/modus:init` · `/modus:vibe` · `/modus:plan` · `/modus:spec` · `/modus:auto` · `/modus:harness`');
|
|
153
|
+
lines.push('**Modus Commands:** `/modus:init` · `/modus:vibe` · `/modus:plan` · `/modus:spec` · `/modus:auto` · `/modus:harness` · `/modus:cr`');
|
|
149
154
|
const content = buildMdcFile('Modus project constitution — tech stack, hard rules, and key patterns', true, lines.join('\n'));
|
|
150
155
|
writeFile(path.join(projectRoot, RULES_BASE, 'modus-constitution.mdc'), content);
|
|
151
156
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cursor.js","sourceRoot":"","sources":["../../src/generators/cursor.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"cursor.js","sourceRoot":"","sources":["../../src/generators/cursor.ts"],"names":[],"mappings":"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"}
|
package/dist/utils/config.js
CHANGED
|
@@ -5,7 +5,7 @@ import { fileExists, readFile, writeFile } from './file-system.js';
|
|
|
5
5
|
const DEFAULT_CONFIG = {
|
|
6
6
|
version: '1',
|
|
7
7
|
commands: {
|
|
8
|
-
enabled: ['init', 'vibe', 'plan', 'spec', 'auto', 'harness'],
|
|
8
|
+
enabled: ['init', 'vibe', 'plan', 'spec', 'auto', 'harness', 'cr'],
|
|
9
9
|
},
|
|
10
10
|
};
|
|
11
11
|
export function getConfigPath(projectRoot) {
|
package/dist/utils/config.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/utils/config.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,MAAM,SAAS,CAAC;AACzB,OAAO,IAAI,MAAM,SAAS,CAAC;AAC3B,OAAO,EAAE,UAAU,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAqFnE,MAAM,cAAc,GAAgB;IAClC,OAAO,EAAE,GAAG;IACZ,QAAQ,EAAE;QACR,OAAO,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,SAAS,CAAC;
|
|
1
|
+
{"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/utils/config.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,MAAM,SAAS,CAAC;AACzB,OAAO,IAAI,MAAM,SAAS,CAAC;AAC3B,OAAO,EAAE,UAAU,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAqFnE,MAAM,cAAc,GAAgB;IAClC,OAAO,EAAE,GAAG;IACZ,QAAQ,EAAE;QACR,OAAO,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,IAAI,CAAC;KACnE;CACF,CAAC;AAEF,MAAM,UAAU,aAAa,CAAC,WAAmB;IAC/C,OAAO,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,OAAO,EAAE,aAAa,CAAC,CAAC;AACxD,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,YAAY;IAC1B,OAAO,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,EAAE,YAAY,EAAE,QAAQ,CAAC,CAAC;AACzD,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,UAAU,CAAC,QAAgB;IACzC,OAAO,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,EAAE,YAAY,EAAE,MAAM,EAAE,QAAQ,CAAC,CAAC;AACjE,CAAC;AAED,MAAM,UAAU,UAAU,CAAC,WAAmB;IAC5C,MAAM,UAAU,GAAG,aAAa,CAAC,WAAW,CAAC,CAAC;IAC9C,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC;QAAE,OAAO,EAAE,GAAG,cAAc,EAAE,CAAC;IAC1D,MAAM,GAAG,GAAG,QAAQ,CAAC,UAAU,CAAC,CAAC;IACjC,MAAM,MAAM,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,CAAgB,CAAC;IAC7C,4EAA4E;IAC5E,IAAI,CAAC,MAAM,CAAC,QAAQ,EAAE,CAAC;QACrB,MAAM,CAAC,QAAQ,GAAG,EAAE,GAAG,cAAc,CAAC,QAAQ,EAAE,CAAC;IACnD,CAAC;SAAM,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE,CAAC;QACnD,MAAM,CAAC,QAAQ,CAAC,OAAO,GAAG,CAAC,GAAG,cAAc,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;IACjE,CAAC;IACD,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,MAAM,UAAU,UAAU,CAAC,WAAmB,EAAE,MAAmB;IACjE,MAAM,UAAU,GAAG,aAAa,CAAC,WAAW,CAAC,CAAC;IAC9C,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,EAAE,SAAS,EAAE,GAAG,EAAE,CAAC,CAAC;IACtD,SAAS,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC;AACjC,CAAC"}
|
package/package.json
CHANGED
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
# /modus:cr — 代码评审(含文档一致性检查)
|
|
2
|
+
|
|
3
|
+
**用途:** 基于技术方案文档(design.md / plan.md)和可选的 PRD,对代码变更进行「文档-代码一致性检查」与「代码质量 CR」,输出分级问题报告,可选自动创建 TAPD Bug 单。
|
|
4
|
+
|
|
5
|
+
**借鉴自:** speckit.analyze(文档一致性自检)+ modus-reviewer(代码质量 CR 框架)+ opsx:apply(contextFiles 上下文加载)
|
|
6
|
+
|
|
7
|
+
## 参数说明
|
|
8
|
+
|
|
9
|
+
```
|
|
10
|
+
/modus:cr --doc <文档路径> [参数]
|
|
11
|
+
|
|
12
|
+
--doc <路径> 参考文档路径(支持多个,用空格分隔)
|
|
13
|
+
支持:design.md / plan.md / tasks.md / PRD 文档路径
|
|
14
|
+
--diff <文件|目录> 指定评审代码范围(默认:git diff HEAD 获取变更文件)
|
|
15
|
+
--story <tapd-url> 从 TAPD Story 加载 PRD,补充 --doc(需配置 TAPD MCP)
|
|
16
|
+
--quick 跳过一致性检查,只做代码质量 CR(适合无设计文档的场景)
|
|
17
|
+
--help 显示完整帮助(中文)
|
|
18
|
+
```
|
|
19
|
+
|
|
20
|
+
## 使用示例
|
|
21
|
+
|
|
22
|
+
```
|
|
23
|
+
/modus:cr --doc modus/plans/batch-export/design.md
|
|
24
|
+
/modus:cr --doc modus/plans/batch-export/design.md --story https://tapd.cn/.../123
|
|
25
|
+
/modus:cr --doc "modus/plans/feat/design.md modus/plans/feat/tasks.md"
|
|
26
|
+
/modus:cr --quick --diff src/order/
|
|
27
|
+
/modus:cr --doc modus/plans/refactor/design.md --diff src/payment/
|
|
28
|
+
```
|
|
29
|
+
|
|
30
|
+
## 执行流程概览
|
|
31
|
+
|
|
32
|
+
```
|
|
33
|
+
① 加载上下文:读取参考文档 + 业务 Skill + constitution
|
|
34
|
+
② 获取代码变更:git diff HEAD(或 --diff 指定范围)
|
|
35
|
+
③ 一致性检查:需求覆盖率矩阵(需求 × 代码实现)
|
|
36
|
+
--quick 时跳过此步
|
|
37
|
+
④ 代码质量 CR:架构 / 事务 / 安全 / 性能 / 业务规则
|
|
38
|
+
⑤ 生成 cr-report.md(P1/P2/P3 分级,兼容 harness 格式)
|
|
39
|
+
⑥ 可选:自动创建 TAPD Bug 单(需配置 tapdProjectId)
|
|
40
|
+
```
|
|
41
|
+
|
|
42
|
+
## 产出物
|
|
43
|
+
|
|
44
|
+
```
|
|
45
|
+
modus/cr/{YYYYMMDD}-{feature-name}/
|
|
46
|
+
└── cr-report.md — 评审报告(HANDOFF 格式,含一致性摘要 + P1/P2/P3 问题)
|
|
47
|
+
```
|
|
48
|
+
|
|
49
|
+
## 与 harness 内置 CR 的对比
|
|
50
|
+
|
|
51
|
+
| 场景 | 推荐命令 |
|
|
52
|
+
|------|---------|
|
|
53
|
+
| 独立评审(有设计文档,非 harness 流程) | `/modus:cr --doc`(本命令) |
|
|
54
|
+
| harness 全流程内置评审 | harness 自动触发 modus-reviewer |
|
|
55
|
+
| 快速代码质量扫描(无文档) | `/modus:cr --quick --diff <目录>` |
|
|
56
|
+
| 评审完成后需要修复 | `/modus:vibe` 修复 cr-report.md 中的问题 |
|
|
57
|
+
|
|
58
|
+
## 与其他命令的配合链路
|
|
59
|
+
|
|
60
|
+
```
|
|
61
|
+
/modus:plan --design → 生成 design.md + tasks.md
|
|
62
|
+
↓ 评审通过
|
|
63
|
+
/modus:plan --code <设计文档> → 按任务清单编码,tasks.md `- [ ]` → `- [x]`
|
|
64
|
+
↓ 编码完成
|
|
65
|
+
/modus:cr --doc <设计文档> → 代码评审,输出 cr-report.md
|
|
66
|
+
↓ 有 P1/P2 问题
|
|
67
|
+
/modus:vibe → 修复问题
|
|
68
|
+
↓ 无 P1/P2
|
|
69
|
+
合入代码
|
|
70
|
+
```
|
|
71
|
+
|
|
72
|
+
## 执行此命令
|
|
73
|
+
|
|
74
|
+
读取并执行 `.codebuddy/skills/modus-cr/SKILL.md` 中的完整流程。
|
|
@@ -12,10 +12,14 @@
|
|
|
12
12
|
--help 显示完整帮助(中文)
|
|
13
13
|
--story <tapd-url> 关联 TAPD Story(自动填写背景,写入 HANDOFF story_id)
|
|
14
14
|
--project <name> 指定项目(多项目 workspace 使用)
|
|
15
|
-
--design
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
15
|
+
--design 设计评审模式:生成多 artifact 技术设计文档(research.md +
|
|
16
|
+
design.md + tasks.md),不触发代码生成
|
|
17
|
+
(★ 适合复杂需求在开发前做技术评审,结合 speckit.plan/opsx:propose 理念)
|
|
18
|
+
--code <技术方案> 任务驱动编码模式:读取已有设计文档(design.md / plan.md)和
|
|
19
|
+
tasks.md,按 T-ID 逐任务执行代码生成,支持断点续跑
|
|
20
|
+
(★ 适合评审通过后直接按任务清单编码,结合 speckit.implement/opsx:apply 理念)
|
|
21
|
+
--continue <name> 接力模式:读取已批准的 design.md,自动触发
|
|
22
|
+
/modus:harness --from-plan <name>(跳过 SA01+SA02)
|
|
19
23
|
--quick 跳过澄清 3 问,直接生成 plan(适合简单任务)
|
|
20
24
|
--enhance 生成 plan 前强制刷新相关 Skill(hash 检查)
|
|
21
25
|
--no-build 归档模式:生成 plan.md 但不触发 Build 确认循环
|
|
@@ -30,8 +34,10 @@
|
|
|
30
34
|
/modus:plan 需要支持歌曲批量导出为 Excel
|
|
31
35
|
/modus:plan --story https://tapd.cn/.../stories/view/123 新增艺人等级评定功能
|
|
32
36
|
/modus:plan --design 评估版权对账系统的重构方案
|
|
33
|
-
/modus:plan --design --story https://tapd.cn/.../123456
|
|
34
|
-
/modus:plan --continue my-feature
|
|
37
|
+
/modus:plan --design --story https://tapd.cn/.../123456 # 设计评审模式,关联 TAPD
|
|
38
|
+
/modus:plan --continue my-feature # 评审通过,接力 harness 开发
|
|
39
|
+
/modus:plan --code modus/plans/batch-export/design.md # 按 design.md 任务清单编码(★ 新增)
|
|
40
|
+
/modus:plan --code modus/plans/batch-export/ # 自动定位目录下的设计文档(★ 新增)
|
|
35
41
|
/modus:plan --quick 修复版权审核列表分页 bug
|
|
36
42
|
/modus:plan --read-only 分析中央曲库同步的架构方案
|
|
37
43
|
/modus:plan --resume batch-export 继续上次中断的规划
|
|
@@ -42,13 +48,20 @@
|
|
|
42
48
|
```
|
|
43
49
|
/modus:plan --design [story-url]
|
|
44
50
|
↓
|
|
45
|
-
生成
|
|
46
|
-
|
|
47
|
-
|
|
51
|
+
生成 research.md(复杂度 ≥ medium)+ design.md + tasks.md
|
|
52
|
+
(status: pending_review,不触发代码生成)
|
|
53
|
+
↓ 人工评审通过后(两种路径可选)
|
|
54
|
+
|
|
55
|
+
路径 A:任务驱动编码(轻量,无 harness)
|
|
56
|
+
/modus:plan --code modus/plans/{name}/design.md
|
|
57
|
+
↓ 按 tasks.md 中的 T-ID 逐任务执行,`- [ ]` → `- [x]`
|
|
58
|
+
↓ 完成后建议 /modus:cr --doc
|
|
59
|
+
|
|
60
|
+
路径 B:接力 harness 全流程(重量,含测试/安全/部署)
|
|
61
|
+
/modus:plan --continue {name}
|
|
48
62
|
↓ 自动调用
|
|
49
|
-
/modus:harness --from-plan {name}(跳过 SA01 需求分析 + SA02 设计方案)
|
|
50
|
-
↓
|
|
51
|
-
直接从 SA03 代码开发开始
|
|
63
|
+
/modus:harness --from-plan {name}(跳过 SA01 需求分析 + SA02 设计方案)
|
|
64
|
+
↓ 直接从 SA03 代码开发开始
|
|
52
65
|
```
|
|
53
66
|
|
|
54
67
|
## 执行流程概览
|
|
@@ -67,13 +80,23 @@
|
|
|
67
80
|
|
|
68
81
|
## 产出物
|
|
69
82
|
|
|
83
|
+
**标准模式(无 --design):**
|
|
70
84
|
```
|
|
71
85
|
modus/plans/{name}/
|
|
72
86
|
├── .modus-state.yaml — 状态文件(含 complexity,支持断点续跑)
|
|
73
87
|
└── plan.md — 规划文档(概述/风险/方案对比/Todos/影响文件)
|
|
88
|
+
```
|
|
74
89
|
|
|
75
|
-
|
|
90
|
+
**--design 模式(多 artifact):**
|
|
76
91
|
```
|
|
92
|
+
modus/plans/{name}/
|
|
93
|
+
├── .modus-state.yaml — 状态文件(含 artifacts DAG 状态)
|
|
94
|
+
├── research.md — 技术可行性研究(复杂度 ≥ medium 时生成)
|
|
95
|
+
├── design.md — 技术设计文档(9 节:5W1H/3方案/影响范围/API/数据模型/约束/风险/估时)
|
|
96
|
+
└── tasks.md — 任务清单(spec-kit T-ID 格式,供 --code 模式消费)
|
|
97
|
+
```
|
|
98
|
+
|
|
99
|
+
归档后移动到:`modus/plans/archive/{date}-{name}/`
|
|
77
100
|
|
|
78
101
|
## 与其他命令的对比
|
|
79
102
|
|
|
@@ -0,0 +1,386 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: modus-cr
|
|
3
|
+
description: Use this skill when executing /modus:cr command to perform standalone code review backed by design documents (design.md / plan.md). Runs a two-phase review — (1) document-code consistency check (speckit.analyze style) and (2) code quality CR (modus-reviewer style) — then outputs a cr-report.md compatible with the harness HANDOFF format. Optionally creates TAPD Bug units for P1/P2 issues. Trigger on /modus:cr command or when user wants to review code changes against a design document.
|
|
4
|
+
allowed-tools: Read, Write, Glob, Bash
|
|
5
|
+
disable: false
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
# modus-cr(独立代码评审)
|
|
9
|
+
|
|
10
|
+
**触发条件:** 用户运行 `/modus:cr --doc <文档路径>` 时使用此 Skill。
|
|
11
|
+
|
|
12
|
+
## 职责
|
|
13
|
+
|
|
14
|
+
独立代码评审入口,不依赖 harness 流程。接受技术方案文档(design.md / plan.md)和可选的 PRD,对当前代码变更进行两阶段评审:
|
|
15
|
+
|
|
16
|
+
1. **一致性检查**(来源:speckit.analyze):文档需求 vs 代码实现的覆盖率矩阵,识别「缺失实现」「超出范围」「任务完成率」
|
|
17
|
+
2. **代码质量 CR**(来源:modus-reviewer 独立版本):架构/事务/安全/性能/业务规则,P1/P2/P3 分级
|
|
18
|
+
|
|
19
|
+
产出物 `cr-report.md` 与 harness 内部 cr-report.md 格式完全兼容,可复用 TAPD Bug 创建逻辑。
|
|
20
|
+
|
|
21
|
+
---
|
|
22
|
+
|
|
23
|
+
## 参数解析(优先执行)
|
|
24
|
+
|
|
25
|
+
**首先**检测用户输入中的参数标志:
|
|
26
|
+
|
|
27
|
+
```
|
|
28
|
+
--help → 输出帮助文档,结束执行
|
|
29
|
+
--doc X → DOC_PATHS=X(支持多路径,空格分隔)
|
|
30
|
+
--diff X → DIFF_TARGET=X(指定评审代码范围)
|
|
31
|
+
--story X → STORY_URL=X(从 TAPD 加载 PRD)
|
|
32
|
+
--quick → QUICK_MODE=true(跳过一致性检查)
|
|
33
|
+
```
|
|
34
|
+
|
|
35
|
+
**必要参数校验:**
|
|
36
|
+
- 若无 `--doc` 且非 `--quick` 模式:提示「`--doc` 是必填参数。若无设计文档请使用 `--quick` 模式」
|
|
37
|
+
- `--quick` 模式可以不提供 `--doc`,但需提供 `--diff` 或存在 git 变更
|
|
38
|
+
|
|
39
|
+
---
|
|
40
|
+
|
|
41
|
+
## 执行流程
|
|
42
|
+
|
|
43
|
+
### Step 0:加载参考文档(contextFiles)
|
|
44
|
+
|
|
45
|
+
> **来源:opsx:apply contextFiles** — 先读完所有上下文,再执行评审
|
|
46
|
+
|
|
47
|
+
**按以下顺序依次读取(类 opsx:apply):**
|
|
48
|
+
|
|
49
|
+
1. `--doc` 指定的每个文档路径(design.md / plan.md / tasks.md / PRD):
|
|
50
|
+
- 若路径不存在,输出警告并继续(不阻塞)
|
|
51
|
+
- 若路径是目录,自动在目录内查找:`design.md` > `plan.md`,以及同级 `tasks.md`
|
|
52
|
+
2. 若有 `--story`,调用 TAPD MCP(`tapd_mcp_http`)读取 Story 描述作为 PRD 补充
|
|
53
|
+
3. `modus/config.yaml`:读取 `constitution`(`hard_rules`、`tech_stack`、`key_patterns`)
|
|
54
|
+
4. `modus/knowledge-catalog.md`:识别相关业务域,加载对应 `modus/knowledge/biz-{domain}/SKILL.md`(仅 hash 检查,不更新)
|
|
55
|
+
|
|
56
|
+
**输出上下文加载摘要:**
|
|
57
|
+
|
|
58
|
+
```
|
|
59
|
+
📚 上下文加载完成
|
|
60
|
+
参考文档:{doc_path1}、{doc_path2}({功能名称})
|
|
61
|
+
TAPD PRD:{story_url 或「未指定」}
|
|
62
|
+
业务域:{domain1}, {domain2}
|
|
63
|
+
代码约束:{constitution.hard_rules 摘要(前 3 条)}
|
|
64
|
+
```
|
|
65
|
+
|
|
66
|
+
---
|
|
67
|
+
|
|
68
|
+
### Step 1:获取代码变更范围
|
|
69
|
+
|
|
70
|
+
**获取变更文件列表(按优先级):**
|
|
71
|
+
|
|
72
|
+
```
|
|
73
|
+
情形 A:--diff 指定了文件/目录
|
|
74
|
+
→ 读取指定路径的文件(若是目录则 Glob 扫描其中的源码文件)
|
|
75
|
+
|
|
76
|
+
情形 B:默认模式(无 --diff)
|
|
77
|
+
→ 执行:git diff HEAD --name-only
|
|
78
|
+
→ 获取所有变更文件列表
|
|
79
|
+
|
|
80
|
+
情形 C:无 git,且无 --diff
|
|
81
|
+
→ Glob 扫描主要源码目录(src/、app/、lib/ 等),取最近修改文件
|
|
82
|
+
→ 输出警告:⚠️ 未检测到 git 仓库,使用文件修改时间作为变更范围参考
|
|
83
|
+
```
|
|
84
|
+
|
|
85
|
+
**过滤规则(自动排除):**
|
|
86
|
+
- `*.lock`、`*.sum`、`node_modules/`、`.git/`、`dist/`、`target/`、`build/`
|
|
87
|
+
- 测试数据文件(`*.json` in test fixtures,`*.sql` in resources)
|
|
88
|
+
|
|
89
|
+
**输出变更范围摘要:**
|
|
90
|
+
|
|
91
|
+
```
|
|
92
|
+
📝 代码变更范围
|
|
93
|
+
变更文件:{N} 个(已过滤 {M} 个非源码文件)
|
|
94
|
+
主要变更:
|
|
95
|
+
{文件路径1}({新增/修改/删除})
|
|
96
|
+
{文件路径2}({新增/修改/删除})
|
|
97
|
+
...(超过 10 个时折叠)
|
|
98
|
+
```
|
|
99
|
+
|
|
100
|
+
---
|
|
101
|
+
|
|
102
|
+
### Step 2:一致性检查(speckit.analyze 风格,只读)
|
|
103
|
+
|
|
104
|
+
> **来源:speckit.analyze** — 禁止修改任何文件;`--quick` 时跳过此步
|
|
105
|
+
|
|
106
|
+
**Phase 2-1:需求覆盖率矩阵**
|
|
107
|
+
|
|
108
|
+
从参考文档中提取需求点列表:
|
|
109
|
+
- 从 `design.md` 第 3 节「影响范围」和第 4 节「API 契约草稿」提取具体需求
|
|
110
|
+
- 从 `plan.md` 的「实现 Todos」提取任务项
|
|
111
|
+
- 若有 `tasks.md`,提取所有 `T{ID}` 任务条目
|
|
112
|
+
- 若有 TAPD PRD,提取「验收标准」或「功能描述」中的需求点
|
|
113
|
+
|
|
114
|
+
对每个需求点,检查代码变更中是否有对应实现(基于文件名、类名、方法名关键词匹配):
|
|
115
|
+
|
|
116
|
+
| 需求点 | 状态 | 代码位置 |
|
|
117
|
+
|--------|------|---------|
|
|
118
|
+
| {需求描述} | ✅ 已覆盖 | `{文件路径}:{行号}` |
|
|
119
|
+
| {需求描述} | ❌ 缺失实现 | — |
|
|
120
|
+
| (代码变更中有实现但文档无对应需求) | ⚠️ 超出范围 | `{文件路径}` |
|
|
121
|
+
|
|
122
|
+
**覆盖率计算:**
|
|
123
|
+
```
|
|
124
|
+
consistency_score = 已覆盖需求数 / 总需求数 × 100%
|
|
125
|
+
```
|
|
126
|
+
|
|
127
|
+
**Phase 2-2:tasks.md 完成率(若存在)**
|
|
128
|
+
|
|
129
|
+
统计 tasks.md 中 `- [x]` vs `- [ ]` 的比例,输出任务完成情况。
|
|
130
|
+
|
|
131
|
+
**Phase 2-3:一致性问题分级**
|
|
132
|
+
|
|
133
|
+
| 问题类型 | 严重度 | 说明 |
|
|
134
|
+
|----------|--------|------|
|
|
135
|
+
| 核心功能缺失(P1/P2 需求未实现) | HIGH | 对应 CR P1 |
|
|
136
|
+
| 接口契约变更未实现 | HIGH | 对应 CR P1 |
|
|
137
|
+
| 次要需求缺失(P3 任务未完成) | MEDIUM | 对应 CR P2 |
|
|
138
|
+
| 超出范围的代码变更 | MEDIUM | 注意:可能合理(如重构优化),仅提示 |
|
|
139
|
+
| 文档需求模糊无法验证 | LOW | 仅记录 |
|
|
140
|
+
|
|
141
|
+
**输出一致性检查报告(内联展示,不落盘):**
|
|
142
|
+
|
|
143
|
+
```
|
|
144
|
+
📊 一致性检查结果
|
|
145
|
+
需求覆盖率:{N}/{total}({score}%)
|
|
146
|
+
任务完成率:{M}/{tasks}(若存在 tasks.md)
|
|
147
|
+
|
|
148
|
+
❌ 缺失实现(HIGH):
|
|
149
|
+
- {需求点 1}(对应 design.md § {节号})
|
|
150
|
+
- {需求点 2}
|
|
151
|
+
|
|
152
|
+
⚠️ 超出范围的变更(MEDIUM):
|
|
153
|
+
- {文件路径}(建议确认是否属于本次需求范围)
|
|
154
|
+
|
|
155
|
+
✅ 已覆盖:{N} 个需求点
|
|
156
|
+
```
|
|
157
|
+
|
|
158
|
+
---
|
|
159
|
+
|
|
160
|
+
### Step 3:代码质量 CR(modus-reviewer 独立版本)
|
|
161
|
+
|
|
162
|
+
> **来源:modus-reviewer** — 评审维度与 harness 内部保持一致;P1/P2/P3 分级规则相同
|
|
163
|
+
|
|
164
|
+
对 Step 1 获取的每个变更文件,依次执行以下维度的代码审查:
|
|
165
|
+
|
|
166
|
+
#### 维度 1:需求符合性(仅在有 --doc 时执行)
|
|
167
|
+
|
|
168
|
+
将 Step 2 的一致性检查结果转化为 CR 问题:
|
|
169
|
+
- 核心功能缺失 → P1 问题
|
|
170
|
+
- 次要需求缺失 → P2 问题
|
|
171
|
+
|
|
172
|
+
#### 维度 2:代码质量
|
|
173
|
+
|
|
174
|
+
**命名规范:**
|
|
175
|
+
- 类名、方法名、变量名是否语义清晰
|
|
176
|
+
- 是否遵循业务 Skill 中的命名约定(`[guideline]` 标签)
|
|
177
|
+
|
|
178
|
+
**架构规范:**
|
|
179
|
+
- 文件放置位置是否正确(包结构/目录层次)
|
|
180
|
+
- 是否存在跨层调用(如 Controller 直接调 Mapper)
|
|
181
|
+
- 职责分离是否清晰(业务逻辑是否在正确的层)
|
|
182
|
+
|
|
183
|
+
**事务与并发:**
|
|
184
|
+
- `@Transactional` 是否在正确位置(Manager 层,避免同类内部调用失效)
|
|
185
|
+
- 是否存在事务嵌套或传播问题
|
|
186
|
+
- 分布式锁使用是否正确(加锁范围、锁粒度、释放时机)
|
|
187
|
+
|
|
188
|
+
**防御性编程:**
|
|
189
|
+
- 关键参数是否有非空校验(`@NotNull`、`Assert.notNull`)
|
|
190
|
+
- 数据库结果是否处理了 null/empty 情况
|
|
191
|
+
- 集合操作前是否判空(`CollectionUtils.isEmpty`)
|
|
192
|
+
|
|
193
|
+
**异常处理:**
|
|
194
|
+
- 是否使用项目统一异常类(从 constitution/business Skill 获取规范)
|
|
195
|
+
- 是否存在异常吞咽(`catch (Exception e) {}`)
|
|
196
|
+
- 关键操作是否有完整日志(入参/出参/异常信息)
|
|
197
|
+
|
|
198
|
+
**金额处理:**
|
|
199
|
+
- 金额字段类型是否符合 `constitution.hard_rules` 规范
|
|
200
|
+
- 若 hard_rules 未明确,默认检查是否使用 BigDecimal,并在报告中标注「未找到金额规范配置,使用默认规则」
|
|
201
|
+
|
|
202
|
+
#### 维度 3:安全(多租户隔离)
|
|
203
|
+
|
|
204
|
+
- `tenantId` 是否来自 `UserContext`(而非 request 参数)
|
|
205
|
+
- Facade/Controller 层是否有权限校验(`@UserAuthorization`)
|
|
206
|
+
- 日志中是否有敏感信息泄露(银行卡号、身份证、手机号明文)
|
|
207
|
+
- 是否存在 SQL 拼接风险(`${}` 而非 `#{}`)
|
|
208
|
+
|
|
209
|
+
#### 维度 4:性能
|
|
210
|
+
|
|
211
|
+
- 是否存在 N+1 查询(循环内数据库调用)
|
|
212
|
+
- 批量操作是否缺少 batch 方法(逐条 insert 替代 batchInsert)
|
|
213
|
+
- 大数据量查询是否缺少分页保护
|
|
214
|
+
- 列表接口是否有最大条数限制
|
|
215
|
+
|
|
216
|
+
#### 维度 5:业务规则(来自 Skill)
|
|
217
|
+
|
|
218
|
+
从已加载业务域 Skill 的 `[pitfall]` 和 `[guideline]` 标签中,检查代码变更是否违反已知规则:
|
|
219
|
+
- 每个相关 `[pitfall]` 检查代码中是否有对应的保护措施
|
|
220
|
+
- 每个相关 `[guideline]` 检查代码是否遵循约定
|
|
221
|
+
|
|
222
|
+
---
|
|
223
|
+
|
|
224
|
+
### Step 4:生成 cr-report.md
|
|
225
|
+
|
|
226
|
+
**确定产出路径:**
|
|
227
|
+
|
|
228
|
+
```
|
|
229
|
+
modus/cr/{YYYYMMDD}-{feature-name}/cr-report.md
|
|
230
|
+
|
|
231
|
+
feature-name 来源(按优先级):
|
|
232
|
+
1. --doc 文档的目录名(如 modus/plans/batch-export/ → batch-export)
|
|
233
|
+
2. --story URL 中的 story ID
|
|
234
|
+
3. git branch 名称中的 feature 部分
|
|
235
|
+
4. 默认:cr-{YYYYMMDD}
|
|
236
|
+
```
|
|
237
|
+
|
|
238
|
+
**cr-report.md 格式(与 harness 完全兼容):**
|
|
239
|
+
|
|
240
|
+
```markdown
|
|
241
|
+
---
|
|
242
|
+
schema_version: "1.2"
|
|
243
|
+
agent: "cr-standalone"
|
|
244
|
+
run_id: "{YYYYMMDD}-{feature-name}"
|
|
245
|
+
source_docs:
|
|
246
|
+
- "{doc_path1}"
|
|
247
|
+
- "{doc_path2}"
|
|
248
|
+
story_id: "{story-id 或空字符串}"
|
|
249
|
+
domains: ["{domain1}", "{domain2}"]
|
|
250
|
+
consistency_score: "{N}/{total}"
|
|
251
|
+
gate_status: "{passed|failed}"
|
|
252
|
+
artifact_status: "complete"
|
|
253
|
+
issues:
|
|
254
|
+
- level: "P1"
|
|
255
|
+
code: "P1-01"
|
|
256
|
+
agent: "cr-standalone"
|
|
257
|
+
location: "{文件名}:{行号}"
|
|
258
|
+
summary: "{一句话问题摘要}"
|
|
259
|
+
suggestion: "{修复建议}"
|
|
260
|
+
category: "{consistency|quality|security|performance|business-rule}"
|
|
261
|
+
- level: "P2"
|
|
262
|
+
code: "P2-01"
|
|
263
|
+
agent: "cr-standalone"
|
|
264
|
+
location: "{文件名}:{行号}"
|
|
265
|
+
summary: "{一句话问题摘要}"
|
|
266
|
+
suggestion: "{修复建议}"
|
|
267
|
+
category: "{category}"
|
|
268
|
+
skill_refs:
|
|
269
|
+
- "modus-biz-{domain}@{version}"
|
|
270
|
+
---
|
|
271
|
+
|
|
272
|
+
# 代码评审报告(独立模式)
|
|
273
|
+
|
|
274
|
+
## 评审摘要
|
|
275
|
+
- 评审时间: {YYYY-MM-DD HH:mm}
|
|
276
|
+
- 参考文档:{doc_paths}
|
|
277
|
+
- 代码变更:{N} 个文件
|
|
278
|
+
- 需求覆盖率:{consistency_score}({quick_mode 时:「--quick 模式,已跳过一致性检查」})
|
|
279
|
+
- P1 问题: {N} 个 | P2 问题: {N} 个 | P3 建议: {N} 个
|
|
280
|
+
- **合入结论: {✅ 可合入 / ❌ 需修复后重审}**
|
|
281
|
+
|
|
282
|
+
## 一致性检查(需求覆盖率矩阵)
|
|
283
|
+
|
|
284
|
+
| 需求点 | 状态 | 代码位置 |
|
|
285
|
+
|--------|------|---------|
|
|
286
|
+
| {需求描述} | ✅ 已覆盖 | `{文件路径}:{行号}` |
|
|
287
|
+
| {需求描述} | ❌ 缺失实现 | — |
|
|
288
|
+
| {代码变更描述} | ⚠️ 超出范围 | `{文件路径}` |
|
|
289
|
+
|
|
290
|
+
(--quick 模式时此节显示「已跳过(--quick 模式)」)
|
|
291
|
+
|
|
292
|
+
## P1 问题(必须修复)
|
|
293
|
+
|
|
294
|
+
### [P1-01] {问题标题}
|
|
295
|
+
- **位置:** `{文件名}:{行号}`
|
|
296
|
+
- **类别:** {consistency | quality | security | performance | business-rule}
|
|
297
|
+
- **问题描述:** {详细说明问题是什么,为什么有问题}
|
|
298
|
+
- **代码片段:**
|
|
299
|
+
```{language}
|
|
300
|
+
// 有问题的代码
|
|
301
|
+
```
|
|
302
|
+
- **修复方案:**
|
|
303
|
+
```{language}
|
|
304
|
+
// 正确的代码
|
|
305
|
+
```
|
|
306
|
+
|
|
307
|
+
## P2 问题(必须修复)
|
|
308
|
+
...(与 P1 格式相同)
|
|
309
|
+
|
|
310
|
+
## P3 建议(建议修复)
|
|
311
|
+
...(格式同上,可精简描述)
|
|
312
|
+
|
|
313
|
+
## 正向确认
|
|
314
|
+
- ✅ {正确的做法,鼓励延续的好实践}
|
|
315
|
+
|
|
316
|
+
## 下一步
|
|
317
|
+
{如有 P1/P2 → "需修复以下问题后重新评审,建议运行 /modus:vibe 修复"}
|
|
318
|
+
{如无 P1/P2 → "通过评审,可直接合入代码"}
|
|
319
|
+
```
|
|
320
|
+
|
|
321
|
+
**HANDOFF 块填写规则(与 harness cr-report.md 相同):**
|
|
322
|
+
- `gate_status`:无 P1/P2 → `passed`;有 P1/P2 → `failed`
|
|
323
|
+
- `issues`:仅列 P1/P2(P3 不阻塞);无 P1/P2 时写空列表 `issues: []`
|
|
324
|
+
- 新增字段:`consistency_score`(一致性检查覆盖率)、`category`(问题来源类别)
|
|
325
|
+
|
|
326
|
+
---
|
|
327
|
+
|
|
328
|
+
### Step 5(可选):创建 TAPD Bug 单
|
|
329
|
+
|
|
330
|
+
> **前置条件:** `modus/config.yaml` 中 `tapdProjectId` 非空,且 TAPD MCP(`tapd_mcp_http`)可用。
|
|
331
|
+
|
|
332
|
+
> **协调说明:** 如果 workspace 中已安装独立的 `tapd-bug-creator` Skill,**优先使用外部 Skill** 创建 Bug 单,本节逻辑作为降级兜底。
|
|
333
|
+
|
|
334
|
+
满足前置条件时,对 P1/P2 问题自动创建 TAPD Bug 单:
|
|
335
|
+
|
|
336
|
+
- Bug 标题:`[Modus CR] {问题标题}`
|
|
337
|
+
- 关联 Story:若有 `--story`,填入对应 Story ID
|
|
338
|
+
- 描述:包含代码位置(`location` 字段)、问题代码片段、修复方案(`suggestion` 字段)
|
|
339
|
+
- 严重程度:P1 → 严重,P2 → 一般
|
|
340
|
+
- 优先级:P1 → 高,P2 → 中
|
|
341
|
+
|
|
342
|
+
创建完成后将 Bug ID 写入 cr-report.md 末尾的 `tapd_bugs` 列表:
|
|
343
|
+
|
|
344
|
+
```markdown
|
|
345
|
+
## TAPD Bug 单
|
|
346
|
+
| CR 问题 | Bug ID | 链接 |
|
|
347
|
+
|---------|--------|------|
|
|
348
|
+
| P1-01 {标题} | {bugId} | {tapd_url} |
|
|
349
|
+
```
|
|
350
|
+
|
|
351
|
+
---
|
|
352
|
+
|
|
353
|
+
## 产出物目录结构
|
|
354
|
+
|
|
355
|
+
```
|
|
356
|
+
modus/
|
|
357
|
+
└── cr/
|
|
358
|
+
└── {YYYYMMDD}-{feature-name}/
|
|
359
|
+
└── cr-report.md ← 评审报告(HANDOFF 格式)
|
|
360
|
+
```
|
|
361
|
+
|
|
362
|
+
---
|
|
363
|
+
|
|
364
|
+
## 问题分级规则
|
|
365
|
+
|
|
366
|
+
| 级别 | 定义 | 处理 |
|
|
367
|
+
|------|------|------|
|
|
368
|
+
| **P1(严重)** | 核心功能缺失、数据安全漏洞、会导致生产故障的 Bug、多租户数据泄露 | 必须修复,`gate_status: failed` |
|
|
369
|
+
| **P2(高风险)** | 架构规范违反、事务/并发问题、安全隐患、性能高风险、次要需求缺失 | 必须修复,`gate_status: failed` |
|
|
370
|
+
| **P3(建议)** | 代码质量改进、命名优化、日志完善、低风险性能建议 | 建议修复,不阻塞合入 |
|
|
371
|
+
|
|
372
|
+
**性能问题分级映射(来自 modus-reviewer 规则):**
|
|
373
|
+
|
|
374
|
+
| 原始级别 | CR 级别 | 触发条件 |
|
|
375
|
+
|----------|---------|---------|
|
|
376
|
+
| 高风险 | P2(或 P1) | 影响 SLA 则升为 P1 |
|
|
377
|
+
| 中风险 | P3 | 建议优化 |
|
|
378
|
+
| 低风险 | P3 | 建议优化 |
|
|
379
|
+
|
|
380
|
+
**安全问题分级映射:**
|
|
381
|
+
|
|
382
|
+
| 原始级别 | CR 级别 |
|
|
383
|
+
|----------|---------|
|
|
384
|
+
| 严重 | P1 |
|
|
385
|
+
| 高风险 | P2 |
|
|
386
|
+
| 低风险 | P3 |
|
|
@@ -27,6 +27,7 @@ disable: false
|
|
|
27
27
|
--help → 输出帮助文档,结束执行
|
|
28
28
|
--design → DESIGN_MODE=true(进入设计评审分支,见「Design Mode 流程」)
|
|
29
29
|
--continue X → CONTINUE_MODE=true,PLAN_NAME=X(进入接力分支,见「Continue 流程」)
|
|
30
|
+
--code X → CODE_MODE=true,CODE_PLAN=X(进入任务驱动编码分支,见「Code Mode 流程」)
|
|
30
31
|
--quick → QUICK_MODE=true(跳过域确认和澄清问题)
|
|
31
32
|
--story X → STORY_ID=X(关联 TAPD Story)
|
|
32
33
|
--project X → PROJECT=X(多项目指定)
|
|
@@ -43,8 +44,11 @@ disable: false
|
|
|
43
44
|
检测到 --continue X?
|
|
44
45
|
是 → 跳转到「Continue 流程」(完整独立流程,不执行 Step 0-9)
|
|
45
46
|
|
|
47
|
+
检测到 --code X?
|
|
48
|
+
是 → 跳转到「Code Mode 流程」(完整独立流程,不执行 Step 0-9)
|
|
49
|
+
|
|
46
50
|
检测到 --design?
|
|
47
|
-
是 → 执行 Step 0→Step 1→Step 2→Step 3→Step 4→Step 5→Step 6→Design Mode Step 7(生成
|
|
51
|
+
是 → 执行 Step 0→Step 1→Step 2→Step 3→Step 4→Step 5→Step 6→Design Mode Step 7(生成 design.md + tasks.md 后暂停)
|
|
48
52
|
否 → 执行标准流程(Step 0 → Step 9)
|
|
49
53
|
```
|
|
50
54
|
|
|
@@ -383,82 +387,226 @@ created: {ISO8601时间戳}
|
|
|
383
387
|
|
|
384
388
|
---
|
|
385
389
|
|
|
386
|
-
### Step 7(Design Mode
|
|
390
|
+
### Step 7(Design Mode 分支):多 Artifact 设计文档生成 ⏸️ 【人工审批节点】
|
|
387
391
|
|
|
388
392
|
> **仅在 DESIGN_MODE=true 时执行此分支,替代标准 Step 8(Build 循环)。**
|
|
393
|
+
> 参考:speckit.plan 三阶段 + opsx:propose DAG 状态机
|
|
394
|
+
|
|
395
|
+
---
|
|
396
|
+
|
|
397
|
+
#### Phase R:Research(技术可行性研究)
|
|
389
398
|
|
|
390
|
-
|
|
399
|
+
> **来源:speckit.plan Phase 0** — 先消除所有「NEEDS CLARIFICATION」再进入设计
|
|
391
400
|
|
|
392
|
-
|
|
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`:
|
|
393
412
|
|
|
394
413
|
```markdown
|
|
395
|
-
|
|
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
|
+
---
|
|
396
468
|
|
|
397
|
-
|
|
469
|
+
# Design: {功能名称}
|
|
470
|
+
|
|
471
|
+
## 1. 需求解读(5W1H)
|
|
398
472
|
| 维度 | 内容 |
|
|
399
473
|
|------|------|
|
|
400
|
-
| Who
|
|
474
|
+
| Who | {谁发起/谁受益} |
|
|
401
475
|
| What | {要做什么} |
|
|
402
|
-
| Why
|
|
476
|
+
| Why | {业务价值/驱动因素} |
|
|
403
477
|
| When | {预期上线时间/Sprint} |
|
|
404
478
|
| Where | {涉及系统/服务范围} |
|
|
405
|
-
| How
|
|
479
|
+
| How | {核心实现思路} |
|
|
406
480
|
|
|
407
|
-
|
|
481
|
+
## 2. 技术方案对比(3 个候选方案)
|
|
408
482
|
|
|
409
483
|
| | 方案 A(推荐) | 方案 B | 方案 C |
|
|
410
484
|
|---|---|---|---|
|
|
411
485
|
| 实现思路 | ... | ... | ... |
|
|
412
|
-
| 优点
|
|
486
|
+
| 优点 | ... | ... | ... |
|
|
413
487
|
| 缺点/风险 | ... | ... | ... |
|
|
414
488
|
| 实现成本 | ... | ... | ... |
|
|
415
489
|
|
|
416
|
-
**推荐方案:方案 A**
|
|
490
|
+
**推荐方案:方案 A**
|
|
417
491
|
理由:{1-2 句话}
|
|
418
492
|
|
|
419
|
-
|
|
493
|
+
## 3. 影响范围(方法级)
|
|
420
494
|
| 文件 | 类/方法 | 变更类型 | 影响说明 |
|
|
421
495
|
|------|--------|---------|---------|
|
|
422
496
|
| {路径} | {类名.方法名} | 新增/修改/删除 | {说明} |
|
|
423
497
|
|
|
424
|
-
|
|
425
|
-
{
|
|
498
|
+
## 4. API 契约草稿
|
|
499
|
+
{若有接口新增/修改,列出方法签名和请求/响应结构}
|
|
500
|
+
|
|
501
|
+
## 5. 数据模型变更(如有)
|
|
502
|
+
{DDL 变更 / 实体字段新增 / 枚举定义}
|
|
426
503
|
|
|
427
|
-
|
|
428
|
-
|
|
429
|
-
|
|
430
|
-
|
|
504
|
+
## 6. 关键约束(来自项目宪法)
|
|
505
|
+
- {constitution.hard_rules 中与本次相关的规则}
|
|
506
|
+
|
|
507
|
+
## 7. 已知风险 ⚠️
|
|
508
|
+
| 风险 | 等级 | 应对方案 | 来源 Skill |
|
|
509
|
+
|------|------|---------|-----------|
|
|
510
|
+
| {风险描述} | P1/P2 | {方案} | {Skill 名称} |
|
|
431
511
|
|
|
432
|
-
|
|
512
|
+
## 8. 估时
|
|
433
513
|
- 预估工作量:{XS/S/M/L/XL}({N 个工作日})
|
|
434
514
|
- 主要耗时点:{1-2 句话}
|
|
515
|
+
|
|
516
|
+
## 9. 相关文档
|
|
517
|
+
- research.md: {存在时附路径,否则「已跳过(simple 复杂度)」}
|
|
518
|
+
- tasks.md: {路径}
|
|
435
519
|
```
|
|
436
520
|
|
|
437
|
-
|
|
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`
|
|
438
555
|
|
|
439
|
-
```yaml
|
|
440
|
-
---
|
|
441
|
-
schema_version: "1.2"
|
|
442
|
-
agent: "plan"
|
|
443
|
-
design_mode: true
|
|
444
|
-
status: "pending_review"
|
|
445
|
-
risk_level: "{low|medium|high}"
|
|
446
|
-
estimated_effort: "{XS|S|M|L|XL}"
|
|
447
|
-
continue_token: ""
|
|
448
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]
|
|
449
588
|
```
|
|
450
589
|
|
|
451
|
-
|
|
590
|
+
- **用户确认修正** → 自动更新对应文件,重新执行 Phase A 检查
|
|
591
|
+
- **用户跳过** → 直接进入暂停节点
|
|
592
|
+
|
|
593
|
+
---
|
|
594
|
+
|
|
595
|
+
#### Design Mode 暂停节点 ⏸️
|
|
452
596
|
|
|
453
597
|
```
|
|
454
|
-
✅
|
|
455
|
-
|
|
598
|
+
✅ 设计文档已就绪:modus/plans/{name}/
|
|
599
|
+
├── research.md — {已生成 | 已跳过(simple 复杂度)}
|
|
600
|
+
├── design.md — 待评审 | 风险:{level} | 估时:{effort}
|
|
601
|
+
└── tasks.md — {N} 个任务(P1: {n1} / P2: {n2} / P3: {n3})
|
|
456
602
|
|
|
457
603
|
──────────────────────────────────────────
|
|
458
|
-
📋
|
|
604
|
+
📋 设计文档包含:5W1H / 3 个候选方案 / 方法级影响范围 / API 草稿 / 风险点 / 估时
|
|
605
|
+
📋 任务清单:{N} 个带 T-ID 和优先级的任务,按 phase 分组
|
|
459
606
|
|
|
460
|
-
⏸️
|
|
461
|
-
/modus:plan --continue {name}
|
|
607
|
+
⏸️ 等待人工技术评审。评审通过后可运行:
|
|
608
|
+
A. /modus:plan --continue {name} → 接力 harness 全流程开发
|
|
609
|
+
B. /modus:plan --code modus/plans/{name}/design.md → 直接任务驱动编码
|
|
462
610
|
──────────────────────────────────────────
|
|
463
611
|
```
|
|
464
612
|
|
|
@@ -585,12 +733,15 @@ plan.md 生成后,展示结果并进入确认循环:
|
|
|
585
733
|
modus/
|
|
586
734
|
├── plans/
|
|
587
735
|
│ ├── add-batch-approve/ ← 活跃计划(未归档)
|
|
588
|
-
│ │ ├── .modus-state.yaml ←
|
|
589
|
-
│ │
|
|
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 时生成)
|
|
590
741
|
│ └── archive/
|
|
591
742
|
│ └── 2026-04-20-add-batch-approve/
|
|
592
743
|
│ ├── .modus-state.yaml ← status: archived
|
|
593
|
-
│ └── plan.md
|
|
744
|
+
│ └── plan.md / design.md / tasks.md / research.md
|
|
594
745
|
```
|
|
595
746
|
|
|
596
747
|
---
|
|
@@ -681,3 +832,140 @@ SA03 将读取 plan.md 中的「实现 Todos」作为代码开发计划。
|
|
|
681
832
|
```json
|
|
682
833
|
{"ts":"{ISO8601}","type":"plan_relay","plan_name":"{name}","continue_token":"{token}","skipped_stages":["01-analysis","02-design"]}
|
|
683
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
|
+
|
|
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(不强制)。
|