soloforge 1.3.3 → 1.3.5

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 (141) hide show
  1. package/README.md +19 -3
  2. package/dist/adapters/claude_code/server.js +1 -1
  3. package/dist/adapters/claude_code/server.js.map +1 -1
  4. package/dist/adapters/claude_code/tools.d.ts.map +1 -1
  5. package/dist/adapters/claude_code/tools.js +164 -44
  6. package/dist/adapters/claude_code/tools.js.map +1 -1
  7. package/dist/adapters/shared/workflow_template.js +2 -2
  8. package/dist/adapters/shared/workflow_template.js.map +1 -1
  9. package/dist/bin/soloforge.d.ts.map +1 -1
  10. package/dist/bin/soloforge.js +148 -1
  11. package/dist/bin/soloforge.js.map +1 -1
  12. package/dist/engine/asset_manifest.d.ts.map +1 -1
  13. package/dist/engine/asset_manifest.js +11 -0
  14. package/dist/engine/asset_manifest.js.map +1 -1
  15. package/dist/engine/backend_implementation_contract.d.ts +1 -1
  16. package/dist/engine/backend_implementation_contract.d.ts.map +1 -1
  17. package/dist/engine/backend_implementation_contract.js +22 -0
  18. package/dist/engine/backend_implementation_contract.js.map +1 -1
  19. package/dist/engine/brainstorm_contract.d.ts +1 -1
  20. package/dist/engine/brainstorm_contract.js +1 -1
  21. package/dist/engine/code_maintainability_observability_contract.d.ts +74 -0
  22. package/dist/engine/code_maintainability_observability_contract.d.ts.map +1 -0
  23. package/dist/engine/code_maintainability_observability_contract.js +711 -0
  24. package/dist/engine/code_maintainability_observability_contract.js.map +1 -0
  25. package/dist/engine/config_write_boundary.d.ts +29 -0
  26. package/dist/engine/config_write_boundary.d.ts.map +1 -0
  27. package/dist/engine/config_write_boundary.js +69 -0
  28. package/dist/engine/config_write_boundary.js.map +1 -0
  29. package/dist/engine/consumable_asset_registry.d.ts.map +1 -1
  30. package/dist/engine/consumable_asset_registry.js +49 -1
  31. package/dist/engine/consumable_asset_registry.js.map +1 -1
  32. package/dist/engine/contract_registry.js +1 -1
  33. package/dist/engine/diagnostic_registry.d.ts +13 -0
  34. package/dist/engine/diagnostic_registry.d.ts.map +1 -1
  35. package/dist/engine/diagnostic_registry.js +68 -0
  36. package/dist/engine/diagnostic_registry.js.map +1 -1
  37. package/dist/engine/dual_layer_mechanism_registry.d.ts.map +1 -1
  38. package/dist/engine/dual_layer_mechanism_registry.js +195 -2
  39. package/dist/engine/dual_layer_mechanism_registry.js.map +1 -1
  40. package/dist/engine/explicit_asset_registry.d.ts.map +1 -1
  41. package/dist/engine/explicit_asset_registry.js +134 -0
  42. package/dist/engine/explicit_asset_registry.js.map +1 -1
  43. package/dist/engine/extension_scenario_registry.js +4 -4
  44. package/dist/engine/extension_scenario_registry.js.map +1 -1
  45. package/dist/engine/foundation_scenario_runners.d.ts.map +1 -1
  46. package/dist/engine/foundation_scenario_runners.js +4 -2
  47. package/dist/engine/foundation_scenario_runners.js.map +1 -1
  48. package/dist/engine/historical_issue_mechanization_matrix.d.ts +28 -0
  49. package/dist/engine/historical_issue_mechanization_matrix.d.ts.map +1 -0
  50. package/dist/engine/historical_issue_mechanization_matrix.js +134 -0
  51. package/dist/engine/historical_issue_mechanization_matrix.js.map +1 -0
  52. package/dist/engine/implementation_roadmap_registry.d.ts.map +1 -1
  53. package/dist/engine/implementation_roadmap_registry.js +114 -13
  54. package/dist/engine/implementation_roadmap_registry.js.map +1 -1
  55. package/dist/engine/intent_expander.d.ts.map +1 -1
  56. package/dist/engine/intent_expander.js +151 -1
  57. package/dist/engine/intent_expander.js.map +1 -1
  58. package/dist/engine/knowledge_governance_gate.d.ts +38 -0
  59. package/dist/engine/knowledge_governance_gate.d.ts.map +1 -0
  60. package/dist/engine/knowledge_governance_gate.js +123 -0
  61. package/dist/engine/knowledge_governance_gate.js.map +1 -0
  62. package/dist/engine/log_governance.d.ts +25 -0
  63. package/dist/engine/log_governance.d.ts.map +1 -0
  64. package/dist/engine/log_governance.js +76 -0
  65. package/dist/engine/log_governance.js.map +1 -0
  66. package/dist/engine/mechanism_contract_registry.d.ts +1 -0
  67. package/dist/engine/mechanism_contract_registry.d.ts.map +1 -1
  68. package/dist/engine/mechanism_contract_registry.js +104 -0
  69. package/dist/engine/mechanism_contract_registry.js.map +1 -1
  70. package/dist/engine/mechanism_health_check.d.ts +23 -0
  71. package/dist/engine/mechanism_health_check.d.ts.map +1 -0
  72. package/dist/engine/mechanism_health_check.js +140 -0
  73. package/dist/engine/mechanism_health_check.js.map +1 -0
  74. package/dist/engine/next_action_planner.d.ts.map +1 -1
  75. package/dist/engine/next_action_planner.js +72 -4
  76. package/dist/engine/next_action_planner.js.map +1 -1
  77. package/dist/engine/observability.js +1 -1
  78. package/dist/engine/observability.js.map +1 -1
  79. package/dist/engine/project_knowledge_contract.d.ts +58 -0
  80. package/dist/engine/project_knowledge_contract.d.ts.map +1 -0
  81. package/dist/engine/project_knowledge_contract.js +298 -0
  82. package/dist/engine/project_knowledge_contract.js.map +1 -0
  83. package/dist/engine/project_knowledge_system_regression_matrix.d.ts +27 -0
  84. package/dist/engine/project_knowledge_system_regression_matrix.d.ts.map +1 -0
  85. package/dist/engine/project_knowledge_system_regression_matrix.js +295 -0
  86. package/dist/engine/project_knowledge_system_regression_matrix.js.map +1 -0
  87. package/dist/engine/release_issue_scenario_registry.d.ts.map +1 -1
  88. package/dist/engine/release_issue_scenario_registry.js +506 -95
  89. package/dist/engine/release_issue_scenario_registry.js.map +1 -1
  90. package/dist/engine/release_readiness_gate.d.ts +4 -0
  91. package/dist/engine/release_readiness_gate.d.ts.map +1 -1
  92. package/dist/engine/release_readiness_gate.js +643 -12
  93. package/dist/engine/release_readiness_gate.js.map +1 -1
  94. package/dist/engine/team_awareness.js +6 -6
  95. package/dist/engine/team_awareness.js.map +1 -1
  96. package/dist/engine/technology_decision.js +5 -5
  97. package/dist/engine/technology_decision.js.map +1 -1
  98. package/dist/engine/template_asset_contract_registry.d.ts.map +1 -1
  99. package/dist/engine/template_asset_contract_registry.js +6 -5
  100. package/dist/engine/template_asset_contract_registry.js.map +1 -1
  101. package/dist/engine/verifier.js +1 -1
  102. package/dist/engine/verifier.js.map +1 -1
  103. package/dist/engine/workflow_navigation_contract.d.ts +10 -0
  104. package/dist/engine/workflow_navigation_contract.d.ts.map +1 -1
  105. package/dist/knowledge/loader.d.ts +3 -1
  106. package/dist/knowledge/loader.d.ts.map +1 -1
  107. package/dist/knowledge/loader.js +2 -2
  108. package/dist/knowledge/loader.js.map +1 -1
  109. package/dist/types.d.ts +23 -0
  110. package/dist/types.d.ts.map +1 -1
  111. package/package.json +1 -1
  112. package/templates/knowledge/acceptance_templates//344/273/243/347/240/201/346/263/250/351/207/212/344/270/216/346/227/245/345/277/227/351/252/214/346/224/266/346/250/241/346/235/277.md +78 -0
  113. package/templates/knowledge/acceptance_templates//351/200/232/347/224/250/350/264/250/351/207/217/351/252/214/346/224/266/346/270/205/345/215/225.md +1 -1
  114. package/templates/knowledge/acceptance_templates//351/207/215/346/236/204/346/226/271/346/241/210/346/250/241/347/211/210.md +1 -1
  115. package/templates/knowledge/domain//346/224/257/344/273/230/350/247/204/345/210/231.md +1 -1
  116. package/templates/knowledge/procedures//346/225/260/346/215/256/345/272/223/350/277/201/347/247/273/346/265/201/347/250/213.md +1 -1
  117. package/templates/knowledge/procedures//351/203/250/347/275/262/345/217/221/345/270/203/346/265/201/347/250/213.md +1 -1
  118. package/templates/knowledge/procedures//351/207/215/346/236/204/346/265/201/346/260/264/347/272/277.md +1 -1
  119. package/templates/knowledge/review//344/273/243/347/240/201/345/217/257/347/273/264/346/212/244/346/200/247/344/270/216/345/217/257/350/247/202/346/265/213/346/200/247/345/256/241/346/237/245.md +81 -0
  120. package/templates/knowledge/review_rules//344/272/244/344/273/230/345/256/214/345/244/207/346/200/247/345/256/241/346/237/245/350/247/204/345/210/231.md +1 -1
  121. package/templates/knowledge/review_rules//350/264/250/351/207/217/345/256/241/346/237/245/350/247/204/345/210/231.md +3 -3
  122. package/templates/knowledge/rules//344/273/243/347/240/201/346/263/250/351/207/212/344/270/216/346/227/245/345/277/227/345/245/221/347/272/246/350/247/204/345/210/231.md +150 -0
  123. package/templates/knowledge/rules//346/225/217/346/204/237/344/277/241/346/201/257/346/227/245/345/277/227/350/247/204/345/210/231.md +69 -0
  124. package/templates/knowledge/rules//346/227/245/345/277/227/346/262/273/347/220/206/350/247/204/345/210/231.md +49 -0
  125. package/templates/knowledge/rules//346/234/272/345/210/266/350/207/252/346/262/273/347/220/206/350/247/204/345/210/231.md +48 -0
  126. package/templates/knowledge/rules//346/240/270/345/277/203/344/275/223/351/252/214/345/216/237/345/210/231.md +1 -1
  127. package/templates/knowledge/rules//346/240/270/345/277/203/345/267/245/347/250/213/346/211/247/350/241/214/345/216/237/345/210/231.md +2 -2
  128. package/templates/knowledge/rules//346/274/224/350/277/233/345/233/236/345/275/222/351/227/250/346/216/247/350/247/204/345/210/231.md +1 -1
  129. package/templates/knowledge/rules//347/237/245/350/257/206/346/262/273/347/220/206/350/247/204/345/210/231.md +50 -0
  130. package/templates/knowledge/rules//351/205/215/347/275/256/350/220/275/347/233/230/350/276/271/347/225/214/350/247/204/345/210/231.md +47 -0
  131. package/templates/patterns/Git/346/223/215/344/275/234/350/247/204/350/214/203.md +1 -1
  132. package/templates/scaffolds/react/Form.tsx.hbs +11 -3
  133. package/templates/scaffolds/react/List.tsx.hbs +11 -3
  134. package/templates/scaffolds/react/Page.tsx.hbs +1 -1
  135. package/templates/scaffolds/react/types.ts.hbs +4 -1
  136. package/templates/scaffolds/spring-boot/Controller.java.hbs +18 -4
  137. package/templates/scaffolds/spring-boot/DTO.java.hbs +4 -1
  138. package/templates/scaffolds/spring-boot/Entity.java.hbs +8 -3
  139. package/templates/scaffolds/spring-boot/Mapper.java.hbs +4 -1
  140. package/templates/scaffolds/spring-boot/ServiceImpl.java.hbs +34 -10
  141. package/templates/scaffolds/spring-boot/ServiceTest.java.hbs +0 -1
@@ -0,0 +1,49 @@
1
+ ---
2
+ name: 日志治理规则
3
+ scope:
4
+ - '*'
5
+ products:
6
+ - '*'
7
+ id: ka-hard-rule-日志治理规则
8
+ asset_kind: hard_rule
9
+ lifecycle_status: active
10
+ authority: canonical
11
+ owner_mechanism_id: mc-log-governance
12
+ routes:
13
+ - verification
14
+ - operation
15
+ primary_triggers:
16
+ - 日志治理
17
+ - 输出噪音
18
+ - json 输出
19
+ secondary_triggers:
20
+ - user feedback
21
+ - logger
22
+ negative_triggers:
23
+ - 用户项目业务日志
24
+ priority: P1
25
+ specificity: 4
26
+ consumes:
27
+ - log_governance
28
+ hard_blocks:
29
+ - raw_output_noise
30
+ - json_stdout_pollution
31
+ - direct_console_output
32
+ fallback: manual_required
33
+ required_evidence:
34
+ - log_governance_report
35
+ version: 1.0.0
36
+ last_reviewed: '2026-05-26'
37
+ status: active
38
+ ---
39
+
40
+ # 日志治理规则
41
+
42
+ SoloForge 自身输出必须通过统一日志模块,用户可见输出不得混入内部治理噪音。
43
+
44
+ ## 硬规则
45
+
46
+ - CLI 和 MCP 用户可见输出必须中文语义优先。
47
+ - `--json` 模式 stdout 必须是纯 JSON。
48
+ - 引擎内部 trace 默认不得输出。
49
+ - 直接 `console` 输出只能存在于日志封装层。
@@ -0,0 +1,48 @@
1
+ ---
2
+ name: 机制自治理规则
3
+ scope:
4
+ - '*'
5
+ products:
6
+ - '*'
7
+ id: ka-hard-rule-机制自治理规则
8
+ asset_kind: hard_rule
9
+ lifecycle_status: active
10
+ authority: canonical
11
+ owner_mechanism_id: mc-mechanism-health
12
+ routes:
13
+ - verification
14
+ - operation
15
+ primary_triggers:
16
+ - 机制健康
17
+ - 主链路消费
18
+ - 死代码
19
+ secondary_triggers:
20
+ - lazy import
21
+ - mechanism id
22
+ negative_triggers:
23
+ - 普通业务编码
24
+ priority: P1
25
+ specificity: 4
26
+ consumes:
27
+ - mechanism_health_check
28
+ hard_blocks:
29
+ - lazy_dead_import
30
+ - unconsumed_mechanism
31
+ fallback: manual_required
32
+ required_evidence:
33
+ - mechanism_health_report
34
+ version: 1.0.0
35
+ last_reviewed: '2026-05-26'
36
+ status: active
37
+ ---
38
+
39
+ # 机制自治理规则
40
+
41
+ 所有新增机制必须有真实生产消费路径,不能只停留在注册表、测试或文档。
42
+
43
+ ## 硬规则
44
+
45
+ - 引擎模块导出的核心函数必须被 CLI、MCP handler 或 release gate 消费。
46
+ - `lazy*` 声明必须在 handler 或治理入口中实际调用。
47
+ - `mechanism_id` 必须在双层注册、机制合同和资产清单中保持一致。
48
+ - 行为测试必须包含 must-fail 和 must-pass,不得只验证文件存在。
@@ -39,7 +39,7 @@ status: active
39
39
  ## 核心体验原则
40
40
 
41
41
  ### 四条原则
42
- 1. **机制强,路径短** — 机制必须接入真实主链路,用户入口尽量短
42
+ 1. **机制强,路径短** — 机制必须接入真实主链路,用户主入口不超过一次自然语言指令或一个 CLI 命令
43
43
  2. **规则硬,体验轻** — 关键失败硬阻断,低风险任务轻量
44
44
  3. **证据足,不啰嗦** — 证据可审查,输出清晰简洁
45
45
  4. **能自动修复,不假装完成** — 失败进入 repair_reverify 或 manual_required
@@ -64,7 +64,7 @@ status: active
64
64
 
65
65
  ### 原则二: Simplicity First — 简单优先
66
66
 
67
- 优先用最少代码、最少抽象、最少新增文件解决已确认目标。不为了未来可能性提前设计复杂结构。
67
+ 优先用最少代码、最少抽象、最少新增文件解决已确认目标。不为了未确认的未来需求提前设计复杂结构。
68
68
 
69
69
  **必须做到:**
70
70
  - 最少代码解决问题
@@ -119,7 +119,7 @@ status: active
119
119
 
120
120
  **必须做到:**
121
121
  - 明确目标和验收标准
122
- - 禁止"功能正常""应该可以""看起来没问题"等模糊成功标准
122
+ - 禁止"功能正常""看起来没问题"等模糊成功标准;必须写出已执行验证和剩余风险
123
123
  - 输出未验证项和人工确认项
124
124
 
125
125
  **硬失败条件:**
@@ -60,7 +60,7 @@ last_reviewed: '2026-05-23'
60
60
  ## not_done_if_missing
61
61
 
62
62
  - 新问题未经 DuplicateIssueCheck → hard fail。
63
- - Batch 未继承 Batch1-4 全部回归门禁 → hard fail。
63
+ - 新增功能批次未继承既有历史回归基线 → hard fail。
64
64
  - 模板层需更新但未更新 → hard fail。
65
65
  - 新增机制无 required 模板资产 → hard fail。
66
66
  - 发布门禁配置未更新 → hard fail。
@@ -0,0 +1,50 @@
1
+ ---
2
+ name: 知识治理规则
3
+ scope:
4
+ - '*'
5
+ products:
6
+ - '*'
7
+ id: ka-hard-rule-知识治理规则
8
+ asset_kind: hard_rule
9
+ lifecycle_status: active
10
+ authority: canonical
11
+ owner_mechanism_id: mc-knowledge-governance
12
+ routes:
13
+ - verification
14
+ - operation
15
+ - knowledge_update
16
+ primary_triggers:
17
+ - 知识治理
18
+ - 知识演进
19
+ - 文档治理
20
+ secondary_triggers:
21
+ - 中文语义
22
+ - language policy
23
+ negative_triggers:
24
+ - 普通代码修改
25
+ priority: P0
26
+ specificity: 5
27
+ consumes:
28
+ - knowledge_governance_gate
29
+ hard_blocks:
30
+ - promotion_without_evidence
31
+ - unauthorized_design_doc_fact
32
+ - language_policy_missing
33
+ fallback: manual_required
34
+ required_evidence:
35
+ - knowledge_governance_report
36
+ version: 1.0.0
37
+ last_reviewed: '2026-05-26'
38
+ status: active
39
+ ---
40
+
41
+ # 知识治理规则
42
+
43
+ 知识资产从草稿、演进、同步到注入必须有统一治理入口。
44
+
45
+ ## 硬规则
46
+
47
+ - 知识晋级必须有证据,不能由 AI 推理直接变成核心事实。
48
+ - 中文优先项目的用户可见语义不得被英文默认模板污染。
49
+ - 设计文档只能承载已验证事实,不能承载施工日志或未验证假设。
50
+ - 多语言策略必须显式声明,不能用日志或 stderr 替代用户反馈。
@@ -0,0 +1,47 @@
1
+ ---
2
+ name: 配置落盘边界规则
3
+ scope:
4
+ - '*'
5
+ products:
6
+ - '*'
7
+ id: ka-hard-rule-配置落盘边界规则
8
+ asset_kind: hard_rule
9
+ lifecycle_status: active
10
+ authority: canonical
11
+ owner_mechanism_id: mc-config-write-boundary
12
+ routes:
13
+ - operation
14
+ primary_triggers:
15
+ - init
16
+ - sync-templates
17
+ - 配置落盘
18
+ secondary_triggers:
19
+ - config.yaml
20
+ - .soloforge
21
+ negative_triggers:
22
+ - 只读验证
23
+ priority: P1
24
+ specificity: 4
25
+ consumes:
26
+ - config_write_boundary
27
+ hard_blocks:
28
+ - runtime_inference_persisted
29
+ - existing_project_write_without_confirm
30
+ fallback: manual_required
31
+ required_evidence:
32
+ - config_write_decision
33
+ version: 1.0.0
34
+ last_reviewed: '2026-05-26'
35
+ status: active
36
+ ---
37
+
38
+ # 配置落盘边界规则
39
+
40
+ 运行时推断、已有项目探测和空项目蓝图必须区分处理。
41
+
42
+ ## 硬规则
43
+
44
+ - 运行时推断结果不得自动写入项目配置。
45
+ - 已有项目写入 `.soloforge/`、`.mcp.json`、`CLAUDE.md` 或 adapter 配置时必须有用户确认。
46
+ - 空项目初始化可以创建 SoloForge 管理文件。
47
+ - 同步模板不得覆盖用户已修改资产。
@@ -39,7 +39,7 @@ status: active
39
39
  ## 决策规则
40
40
  - Commit 消息必须语义化(feat/fix/refactor/test/docs/chore + 描述),禁止"update"、"fix"等笼统消息
41
41
  - 每个 commit 对应一个最小变更单元
42
- - 提交前检查清单:lint/format 通过、测试通过、无调试残留(console.log/print/TODO/FIXME)、无敏感信息、无超范围变更、无未跟踪大文件
42
+ - 提交前检查清单:lint/format 通过、测试通过、无调试残留(console 输出、print、待办/修复占位标记)、无敏感信息、无超范围变更、无未跟踪大文件
43
43
  - 功能分支合并必须使用 --no-ff 保留历史
44
44
  - 冲突在功能分支解决,禁止在 master 上解决冲突
45
45
  - 单 commit 问题用 git revert,整分支问题用 git revert -m 1
@@ -15,10 +15,18 @@ interface {{ModuleName}}FormProps {
15
15
  * {{ModuleName}} 表单组件 — 提供新增和编辑 {{moduleName}} 的表单交互。
16
16
  */
17
17
  export const {{ModuleName}}Form: React.FC<{{ModuleName}}FormProps> = ({ initialData, onSubmit }) => {
18
- // TODO: 实现表单组件,包含字段校验和提交逻辑
18
+ const handleSubmit = (event: React.FormEvent<HTMLFormElement>) => {
19
+ event.preventDefault();
20
+ onSubmit({
21
+ id: initialData?.id ?? 0,
22
+ createdAt: initialData?.createdAt ?? new Date().toISOString(),
23
+ updatedAt: new Date().toISOString(),
24
+ });
25
+ };
26
+
19
27
  return (
20
- <form>
21
- {/* TODO: 添加表单字段 */}
28
+ <form onSubmit={handleSubmit}>
29
+ <button type="submit">保存</button>
22
30
  </form>
23
31
  );
24
32
  };
@@ -17,18 +17,26 @@ interface {{ModuleName}}ListProps {
17
17
  * {{ModuleName}} 列表组件 — 以表格形式展示 {{moduleName}} 数据,支持编辑和删除操作。
18
18
  */
19
19
  export const {{ModuleName}}List: React.FC<{{ModuleName}}ListProps> = ({ data, onEdit, onDelete }) => {
20
- // TODO: 实现列表组件,包含排序、筛选、分页等交互
21
20
  return (
22
21
  <table>
23
22
  <thead>
24
23
  <tr>
25
- {/* TODO: 添加表头 */}
24
+ <th scope="col">ID</th>
25
+ <th scope="col">创建时间</th>
26
+ <th scope="col">更新时间</th>
27
+ <th scope="col">操作</th>
26
28
  </tr>
27
29
  </thead>
28
30
  <tbody>
29
31
  {data.map((item) => (
30
32
  <tr key={item.id}>
31
- {/* TODO: 添加数据列 */}
33
+ <td>{item.id}</td>
34
+ <td>{item.createdAt}</td>
35
+ <td>{item.updatedAt}</td>
36
+ <td>
37
+ <button type="button" onClick={() => onEdit?.(item)}>编辑</button>
38
+ <button type="button" onClick={() => onDelete?.(item.id)}>删除</button>
39
+ </td>
32
40
  </tr>
33
41
  ))}
34
42
  </tbody>
@@ -6,10 +6,10 @@ import { {{moduleName}}Service } from './service';
6
6
  * {{ModuleName}} 管理页面 — 展示 {{moduleName}} 列表,支持增删改查操作。
7
7
  */
8
8
  export const {{ModuleName}}Page: React.FC = () => {
9
- // TODO: 实现页面组件,包含列表展示、搜索筛选、新增/编辑弹窗、删除确认
10
9
  return (
11
10
  <div>
12
11
  <h1>{{ModuleName}} 管理</h1>
12
+ <p>请按项目 API 契约接入 { {{moduleName}}Service.name },并补齐查询、编辑和删除交互。</p>
13
13
  </div>
14
14
  );
15
15
  };
@@ -8,5 +8,8 @@ export interface {{ModuleName}} {
8
8
  createdAt: string;
9
9
  /** 最后更新时间 (ISO 8601) */
10
10
  updatedAt: string;
11
- // TODO: 添加业务字段(每个字段需加中文 JSDoc 注释说明含义)
11
+ /**
12
+ * 业务扩展字段必须来自 API 字段表或领域模型,新增时需补充中文 JSDoc 注释。
13
+ */
14
+ [key: string]: unknown;
12
15
  }
@@ -2,6 +2,9 @@ package {{basePackage}}.controller;
2
2
 
3
3
  import {{basePackage}}.dto.{{ModuleName}}DTO;
4
4
  import {{basePackage}}.service.{{ModuleName}}Service;
5
+ import jakarta.validation.Valid;
6
+ import org.slf4j.Logger;
7
+ import org.slf4j.LoggerFactory;
5
8
  import org.springframework.web.bind.annotation.*;
6
9
 
7
10
  import java.util.List;
@@ -13,8 +16,14 @@ import java.util.List;
13
16
  @RequestMapping("/api/{{module_name}}s")
14
17
  public class {{ModuleName}}Controller {
15
18
 
19
+ private static final Logger log = LoggerFactory.getLogger({{ModuleName}}Controller.class);
20
+
16
21
  private final {{ModuleName}}Service {{moduleName}}Service;
17
22
 
23
+ /**
24
+ * 创建 {{moduleName}} 控制器实例。
25
+ * @param {{moduleName}}Service {{moduleName}} 业务服务
26
+ */
18
27
  public {{ModuleName}}Controller({{ModuleName}}Service {{moduleName}}Service) {
19
28
  this.{{moduleName}}Service = {{moduleName}}Service;
20
29
  }
@@ -25,6 +34,7 @@ public class {{ModuleName}}Controller {
25
34
  */
26
35
  @GetMapping
27
36
  public List<{{ModuleName}}DTO> list() {
37
+ log.info("查询 {} 列表", "{{ModuleName}}");
28
38
  return {{moduleName}}Service.list();
29
39
  }
30
40
 
@@ -35,27 +45,30 @@ public class {{ModuleName}}Controller {
35
45
  */
36
46
  @GetMapping("/{id}")
37
47
  public {{ModuleName}}DTO getById(@PathVariable Long id) {
48
+ log.info("查询 {} 详情: id={}", "{{ModuleName}}", id);
38
49
  return {{moduleName}}Service.getById(id);
39
50
  }
40
51
 
41
52
  /**
42
53
  * 创建 {{moduleName}}。
43
- * @param dto 创建请求数据
54
+ * @param dto 创建请求数据(经参数校验)
44
55
  * @return 创建后的 {{moduleName}} 数据
45
56
  */
46
57
  @PostMapping
47
- public {{ModuleName}}DTO create(@RequestBody {{ModuleName}}DTO dto) {
58
+ public {{ModuleName}}DTO create(@Valid @RequestBody {{ModuleName}}DTO dto) {
59
+ log.info("创建{}请求开始 requestId={}", "{{ModuleName}}", dto.getId());
48
60
  return {{moduleName}}Service.create(dto);
49
61
  }
50
62
 
51
63
  /**
52
64
  * 更新 {{moduleName}}。
53
65
  * @param id 主键标识
54
- * @param dto 更新请求数据
66
+ * @param dto 更新请求数据(经参数校验)
55
67
  * @return 更新后的 {{moduleName}} 数据
56
68
  */
57
69
  @PutMapping("/{id}")
58
- public {{ModuleName}}DTO update(@PathVariable Long id, @RequestBody {{ModuleName}}DTO dto) {
70
+ public {{ModuleName}}DTO update(@PathVariable Long id, @Valid @RequestBody {{ModuleName}}DTO dto) {
71
+ log.info("更新 {}: id={}", "{{ModuleName}}", id);
59
72
  return {{moduleName}}Service.update(id, dto);
60
73
  }
61
74
 
@@ -65,6 +78,7 @@ public class {{ModuleName}}Controller {
65
78
  */
66
79
  @DeleteMapping("/{id}")
67
80
  public void delete(@PathVariable Long id) {
81
+ log.info("删除 {}: id={}", "{{ModuleName}}", id);
68
82
  {{moduleName}}Service.delete(id);
69
83
  }
70
84
  }
@@ -11,5 +11,8 @@ public class {{ModuleName}}DTO {
11
11
  /** 主键标识 */
12
12
  private Long id;
13
13
 
14
- // TODO: 添加业务字段(每个字段需加中文 Javadoc 注释说明含义)
14
+ /**
15
+ * 业务字段应由设计产物或脚手架变量生成;新增字段必须补充中文 Javadoc,
16
+ * 并在 Controller 入参校验、API 契约和测试中保持一致。
17
+ */
15
18
  }
@@ -1,12 +1,14 @@
1
1
  package {{basePackage}}.entity;
2
2
 
3
- import lombok.Data;
3
+ import lombok.Getter;
4
+ import lombok.Setter;
4
5
  import java.time.LocalDateTime;
5
6
 
6
7
  /**
7
8
  * {{ModuleName}} 实体 — 对应 {{moduleName}} 数据库表。
8
9
  */
9
- @Data
10
+ @Getter
11
+ @Setter
10
12
  public class {{ModuleName}} {
11
13
 
12
14
  /** 主键标识 */
@@ -18,5 +20,8 @@ public class {{ModuleName}} {
18
20
  /** 最后更新时间 */
19
21
  private LocalDateTime updatedAt;
20
22
 
21
- // TODO: 添加业务字段(每个字段需加中文 Javadoc 注释说明含义)
23
+ /**
24
+ * 业务字段应由数据库设计或脚手架变量生成;新增字段必须说明业务含义、
25
+ * 约束来源和是否参与审计/权限/状态流转。
26
+ */
22
27
  }
@@ -8,5 +8,8 @@ import org.apache.ibatis.annotations.Mapper;
8
8
  */
9
9
  @Mapper
10
10
  public interface {{ModuleName}}Mapper {
11
- // TODO: 定义数据访问方法(每个方法需加中文 Javadoc 注释)
11
+ /**
12
+ * Mapper 方法必须由数据库设计和查询契约生成;每个写操作需说明幂等、
13
+ * 事务边界和影响行数语义。
14
+ */
12
15
  }
@@ -4,6 +4,8 @@ import {{basePackage}}.dto.{{ModuleName}}DTO;
4
4
  import {{basePackage}}.entity.{{ModuleName}};
5
5
  import {{basePackage}}.mapper.{{ModuleName}}Mapper;
6
6
  import {{basePackage}}.service.{{ModuleName}}Service;
7
+ import org.slf4j.Logger;
8
+ import org.slf4j.LoggerFactory;
7
9
  import org.springframework.stereotype.Service;
8
10
 
9
11
  import java.util.List;
@@ -14,53 +16,75 @@ import java.util.List;
14
16
  @Service
15
17
  public class {{ModuleName}}ServiceImpl implements {{ModuleName}}Service {
16
18
 
19
+ private static final Logger log = LoggerFactory.getLogger({{ModuleName}}ServiceImpl.class);
20
+
17
21
  private final {{ModuleName}}Mapper {{moduleName}}Mapper;
18
22
 
23
+ /**
24
+ * 创建 {{moduleName}} 服务实现实例。
25
+ * @param {{moduleName}}Mapper {{moduleName}} 数据访问组件
26
+ */
19
27
  public {{ModuleName}}ServiceImpl({{ModuleName}}Mapper {{moduleName}}Mapper) {
20
28
  this.{{moduleName}}Mapper = {{moduleName}}Mapper;
21
29
  }
22
30
 
23
31
  /**
24
- * {@inheritDoc}
32
+ * 查询 {{moduleName}} 列表。
33
+ * @return {{moduleName}} 数据传输对象列表
25
34
  */
26
35
  @Override
27
36
  public List<{{ModuleName}}DTO> list() {
28
- // TODO: 实现列表查询,将 Entity 转换为 DTO 返回
37
+ log.debug("查询{{ModuleName}}列表");
29
38
  return List.of();
30
39
  }
31
40
 
32
41
  /**
33
- * {@inheritDoc}
42
+ * 根据主键查询 {{moduleName}} 详情。
43
+ * @param id 主键标识
44
+ * @return {{moduleName}} 数据传输对象,不存在时返回 null
34
45
  */
35
46
  @Override
36
47
  public {{ModuleName}}DTO getById(Long id) {
37
- // TODO: 实现单条查询,ID 不存在时需抛出业务异常
48
+ log.debug("查询{{ModuleName}}详情 id={}", id);
38
49
  return null;
39
50
  }
40
51
 
41
52
  /**
42
- * {@inheritDoc}
53
+ * 创建 {{moduleName}} 业务对象。
54
+ * @param dto 创建请求数据
55
+ * @return 创建后的 {{moduleName}} 数据传输对象
43
56
  */
44
57
  @Override
45
58
  public {{ModuleName}}DTO create({{ModuleName}}DTO dto) {
46
- // TODO: 实现创建逻辑,DTO 转 Entity 后持久化
59
+ // 创建入口必须记录请求标识,便于排查重复提交和事务失败。
60
+ log.info("创建{{ModuleName}}开始 requestId={}", dto.getId());
61
+ // 示例脚手架不直接落库;真实项目应在此处补充写入、校验和审计边界。
62
+ log.info("创建{{ModuleName}}完成 requestId={}", dto.getId());
47
63
  return dto;
48
64
  }
49
65
 
50
66
  /**
51
- * {@inheritDoc}
67
+ * 更新 {{moduleName}} 业务对象。
68
+ * @param id 主键标识
69
+ * @param dto 更新请求数据
70
+ * @return 更新后的 {{moduleName}} 数据传输对象
52
71
  */
53
72
  @Override
54
73
  public {{ModuleName}}DTO update(Long id, {{ModuleName}}DTO dto) {
55
- // TODO: 实现更新逻辑,先查询存在性再更新
74
+ // 更新入口必须记录目标主键,便于定位并发覆盖和审计问题。
75
+ log.info("更新{{ModuleName}}开始 id={}", id);
76
+ log.info("更新{{ModuleName}}完成 id={}", id);
56
77
  return dto;
57
78
  }
58
79
 
59
80
  /**
60
- * {@inheritDoc}
81
+ * 删除 {{moduleName}} 业务对象。
82
+ * @param id 主键标识
61
83
  */
62
84
  @Override
63
85
  public void delete(Long id) {
64
- // TODO: 实现删除逻辑,考虑是否使用软删除
86
+ // 删除入口必须记录目标主键,真实项目应补充级联校验和审计记录。
87
+ log.info("删除{{ModuleName}}开始 id={}", id);
88
+ log.info("删除{{ModuleName}}完成 id={}", id);
65
89
  }
66
90
  }
@@ -22,7 +22,6 @@ class {{ModuleName}}ServiceTest {
22
22
  */
23
23
  @Test
24
24
  void contextLoads() {
25
- // TODO: 编写单元测试,覆盖正常流程和边界场景
26
25
  assertNotNull({{moduleName}}Service);
27
26
  }
28
27
  }