soloforge 1.3.4 → 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 (96) hide show
  1. package/README.md +12 -5
  2. package/dist/adapters/claude_code/tools.d.ts.map +1 -1
  3. package/dist/adapters/claude_code/tools.js +80 -44
  4. package/dist/adapters/claude_code/tools.js.map +1 -1
  5. package/dist/adapters/shared/workflow_template.js +1 -1
  6. package/dist/bin/soloforge.d.ts.map +1 -1
  7. package/dist/bin/soloforge.js +83 -1
  8. package/dist/bin/soloforge.js.map +1 -1
  9. package/dist/engine/backend_implementation_contract.d.ts +1 -1
  10. package/dist/engine/backend_implementation_contract.d.ts.map +1 -1
  11. package/dist/engine/backend_implementation_contract.js +22 -0
  12. package/dist/engine/backend_implementation_contract.js.map +1 -1
  13. package/dist/engine/brainstorm_contract.d.ts +1 -1
  14. package/dist/engine/brainstorm_contract.js +1 -1
  15. package/dist/engine/code_maintainability_observability_contract.d.ts +1 -1
  16. package/dist/engine/code_maintainability_observability_contract.d.ts.map +1 -1
  17. package/dist/engine/code_maintainability_observability_contract.js +241 -3
  18. package/dist/engine/code_maintainability_observability_contract.js.map +1 -1
  19. package/dist/engine/contract_registry.js +1 -1
  20. package/dist/engine/diagnostic_registry.d.ts +1 -0
  21. package/dist/engine/diagnostic_registry.d.ts.map +1 -1
  22. package/dist/engine/diagnostic_registry.js +6 -0
  23. package/dist/engine/diagnostic_registry.js.map +1 -1
  24. package/dist/engine/dual_layer_mechanism_registry.js +1 -1
  25. package/dist/engine/extension_scenario_registry.js +4 -4
  26. package/dist/engine/extension_scenario_registry.js.map +1 -1
  27. package/dist/engine/foundation_scenario_runners.d.ts.map +1 -1
  28. package/dist/engine/foundation_scenario_runners.js +4 -2
  29. package/dist/engine/foundation_scenario_runners.js.map +1 -1
  30. package/dist/engine/historical_issue_mechanization_matrix.d.ts +28 -0
  31. package/dist/engine/historical_issue_mechanization_matrix.d.ts.map +1 -0
  32. package/dist/engine/historical_issue_mechanization_matrix.js +134 -0
  33. package/dist/engine/historical_issue_mechanization_matrix.js.map +1 -0
  34. package/dist/engine/implementation_roadmap_registry.d.ts.map +1 -1
  35. package/dist/engine/implementation_roadmap_registry.js +70 -13
  36. package/dist/engine/implementation_roadmap_registry.js.map +1 -1
  37. package/dist/engine/intent_expander.d.ts.map +1 -1
  38. package/dist/engine/intent_expander.js +151 -1
  39. package/dist/engine/intent_expander.js.map +1 -1
  40. package/dist/engine/next_action_planner.d.ts.map +1 -1
  41. package/dist/engine/next_action_planner.js +72 -4
  42. package/dist/engine/next_action_planner.js.map +1 -1
  43. package/dist/engine/project_knowledge_contract.d.ts +58 -0
  44. package/dist/engine/project_knowledge_contract.d.ts.map +1 -0
  45. package/dist/engine/project_knowledge_contract.js +298 -0
  46. package/dist/engine/project_knowledge_contract.js.map +1 -0
  47. package/dist/engine/project_knowledge_system_regression_matrix.d.ts +27 -0
  48. package/dist/engine/project_knowledge_system_regression_matrix.d.ts.map +1 -0
  49. package/dist/engine/project_knowledge_system_regression_matrix.js +295 -0
  50. package/dist/engine/project_knowledge_system_regression_matrix.js.map +1 -0
  51. package/dist/engine/release_issue_scenario_registry.d.ts.map +1 -1
  52. package/dist/engine/release_issue_scenario_registry.js +297 -102
  53. package/dist/engine/release_issue_scenario_registry.js.map +1 -1
  54. package/dist/engine/release_readiness_gate.d.ts +1 -0
  55. package/dist/engine/release_readiness_gate.d.ts.map +1 -1
  56. package/dist/engine/release_readiness_gate.js +384 -5
  57. package/dist/engine/release_readiness_gate.js.map +1 -1
  58. package/dist/engine/technology_decision.js +5 -5
  59. package/dist/engine/technology_decision.js.map +1 -1
  60. package/dist/engine/template_asset_contract_registry.d.ts.map +1 -1
  61. package/dist/engine/template_asset_contract_registry.js +6 -5
  62. package/dist/engine/template_asset_contract_registry.js.map +1 -1
  63. package/dist/engine/verifier.js +1 -1
  64. package/dist/engine/verifier.js.map +1 -1
  65. package/dist/engine/workflow_navigation_contract.d.ts +10 -0
  66. package/dist/engine/workflow_navigation_contract.d.ts.map +1 -1
  67. package/dist/knowledge/loader.d.ts +3 -1
  68. package/dist/knowledge/loader.d.ts.map +1 -1
  69. package/dist/knowledge/loader.js +2 -2
  70. package/dist/knowledge/loader.js.map +1 -1
  71. package/dist/types.d.ts +19 -0
  72. package/dist/types.d.ts.map +1 -1
  73. package/package.json +1 -1
  74. 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
  75. 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
  76. package/templates/knowledge/domain//346/224/257/344/273/230/350/247/204/345/210/231.md +1 -1
  77. 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
  78. 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
  79. package/templates/knowledge/procedures//351/207/215/346/236/204/346/265/201/346/260/264/347/272/277.md +1 -1
  80. 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
  81. 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
  82. 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 +32 -3
  83. 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
  84. 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
  85. 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
  86. package/templates/patterns/Git/346/223/215/344/275/234/350/247/204/350/214/203.md +1 -1
  87. package/templates/scaffolds/react/Form.tsx.hbs +11 -3
  88. package/templates/scaffolds/react/List.tsx.hbs +11 -3
  89. package/templates/scaffolds/react/Page.tsx.hbs +1 -1
  90. package/templates/scaffolds/react/types.ts.hbs +4 -1
  91. package/templates/scaffolds/spring-boot/Controller.java.hbs +18 -4
  92. package/templates/scaffolds/spring-boot/DTO.java.hbs +4 -1
  93. package/templates/scaffolds/spring-boot/Entity.java.hbs +8 -3
  94. package/templates/scaffolds/spring-boot/Mapper.java.hbs +4 -1
  95. package/templates/scaffolds/spring-boot/ServiceImpl.java.hbs +34 -10
  96. package/templates/scaffolds/spring-boot/ServiceTest.java.hbs +0 -1
@@ -109,7 +109,7 @@ export function validateWorkflowRuleSources(rootDir) {
109
109
  };
110
110
  }
111
111
  /** 当前嵌入的权威规则校验和 — 由 `npm run update-workflow-checksum` 更新。 */
112
- const EMBEDDED_CHECKSUM = "96160c0b6c30ae6e";
112
+ const EMBEDDED_CHECKSUM = "557e7282efda3e13";
113
113
  function getEmbeddedChecksum() {
114
114
  return EMBEDDED_CHECKSUM;
115
115
  }
@@ -1 +1 @@
1
- {"version":3,"file":"soloforge.d.ts","sourceRoot":"","sources":["../../src/bin/soloforge.ts"],"names":[],"mappings":";AAwzBA,OAAO,EAAE,0BAA0B,EAAE,MAAM,gDAAgD,CAAC"}
1
+ {"version":3,"file":"soloforge.d.ts","sourceRoot":"","sources":["../../src/bin/soloforge.ts"],"names":[],"mappings":";AA4zBA,OAAO,EAAE,0BAA0B,EAAE,MAAM,gDAAgD,CAAC"}
@@ -84,6 +84,9 @@ async function main() {
84
84
  case "audit-template-visibility":
85
85
  await cmdAuditTemplateVisibility();
86
86
  break;
87
+ case "audit-project-knowledge":
88
+ await cmdAuditProjectKnowledge();
89
+ break;
87
90
  case "sync-templates":
88
91
  await cmdSyncTemplates();
89
92
  break;
@@ -165,6 +168,7 @@ async function main() {
165
168
  validate-mechanisms 验证双层机制承载模型完整性(模板层 + 机制层)
166
169
  audit-template-mechanisms 扫描模板与机制注册表交叉校验(--json 输出完整报告,--changed-only 仅检查变更文件)
167
170
  audit-design-artifacts 审计架构/数据库/API 设计产物包(只读,--json 输出报告)
171
+ audit-project-knowledge 审计用户项目 .soloforge/knowledge 自定义规则承载与消费
168
172
  upgrade-design-artifacts 生成存量设计资产升级计划(默认 dry-run,--apply --confirm 仅建立已归档迁移基线)
169
173
  validate-release 验证发布门禁(契约、场景矩阵、消费 trace、双层机制、回归基线)
170
174
  validate-batch1 [历史] 仅基础契约验证,不代表正式发布通过
@@ -936,6 +940,20 @@ async function cmdValidate() {
936
940
  finally {
937
941
  await index.close();
938
942
  }
943
+ const { auditProjectKnowledge } = await import("../engine/project_knowledge_contract.js");
944
+ const pkReport = auditProjectKnowledge(projectPath, config);
945
+ if (pkReport.hard_fail_count > 0) {
946
+ userInfo(`❌ 项目知识承载: ${pkReport.hard_fail_count} hard_fail`);
947
+ for (const asset of pkReport.assets) {
948
+ for (const finding of asset.findings.filter((f) => f.severity === "hard_fail")) {
949
+ userInfo(` - ${asset.rel_path}: [${finding.code}] ${finding.message_zh}`);
950
+ }
951
+ }
952
+ hasHardFail = true;
953
+ }
954
+ else {
955
+ userInfo(`✅ 项目知识承载: ${pkReport.total} 条,${pkReport.injectable} 条可注入,${pkReport.index_only} 条仅索引,0 hard_fail`);
956
+ }
939
957
  }
940
958
  // 扩展清单校验 (problem-39: validateExtensionManifest)
941
959
  try {
@@ -1992,7 +2010,7 @@ async function cmdValidateNewIssue() {
1992
2010
  // label 精确匹配
1993
2011
  if (p.label.toLowerCase() === lower)
1994
2012
  matched = true;
1995
- // label 前缀匹配: "问题四十一" 匹配 "问题四十一(Brainstorm)"
2013
+ // label 前缀匹配: "问题四十二" 匹配 "问题四十二"
1996
2014
  if (p.label.toLowerCase().startsWith(lower + "("))
1997
2015
  matched = true;
1998
2016
  // 完整 title 的包含匹配(title 是长描述,子串匹配合理)
@@ -2208,8 +2226,10 @@ async function cmdNext() {
2208
2226
  confidence: plan.confidence,
2209
2227
  stage_evidence: plan.stage_evidence,
2210
2228
  blocking_reasons: plan.blocking_reasons,
2229
+ warnings: plan.warnings,
2211
2230
  recommended_commands: plan.recommended_commands,
2212
2231
  recommended_prompt: plan.recommended_prompt_zh,
2232
+ project_knowledge_context: plan.project_knowledge_context,
2213
2233
  disallowed_next_actions: plan.disallowed_actions.map((da) => ({
2214
2234
  rule_id: da.rule_id,
2215
2235
  blocked_actions: da.blocked_actions,
@@ -2245,6 +2265,22 @@ async function cmdNext() {
2245
2265
  userInfo(` - ${ev}`);
2246
2266
  }
2247
2267
  }
2268
+ if (plan.warnings.length > 0) {
2269
+ userInfo(`\n提示:`);
2270
+ for (const warning of plan.warnings) {
2271
+ userInfo(` - [${warning.code}] ${warning.message_zh}`);
2272
+ }
2273
+ }
2274
+ if (plan.project_knowledge_context && plan.project_knowledge_context.total > 0) {
2275
+ userInfo(`\n项目规则上下文:`);
2276
+ userInfo(` 项目知识: ${plan.project_knowledge_context.total} 条,hard_fail: ${plan.project_knowledge_context.hard_fail_count}`);
2277
+ if (plan.project_knowledge_context.selected.length > 0) {
2278
+ userInfo(" 下一步会优先参考:");
2279
+ for (const item of plan.project_knowledge_context.selected) {
2280
+ userInfo(` - ${item.name} (${item.rel_path}, ${item.consumption})`);
2281
+ }
2282
+ }
2283
+ }
2248
2284
  // 陈旧任务
2249
2285
  if (plan.stale_task?.is_stale) {
2250
2286
  userInfo(`\n⚠️ 检测到陈旧任务: ${plan.stale_task.reason_zh}`);
@@ -2563,6 +2599,7 @@ async function cmdAuditTemplateVisibility() {
2563
2599
  const isJson = args.includes("--json");
2564
2600
  const result = {
2565
2601
  total_assets: report.total_assets,
2602
+ registered_contracts: coverageReport.total_contracts,
2566
2603
  contract_covered: coverageReport.contract_covered,
2567
2604
  uncovered_assets: coverageReport.uncovered,
2568
2605
  user_visible_count: userVisibleCount,
@@ -2574,6 +2611,8 @@ async function cmdAuditTemplateVisibility() {
2574
2611
  missing_consumer: report.missing_consumer,
2575
2612
  missing_owner: report.missing_owner,
2576
2613
  unregistered: report.unregistered_assets,
2614
+ consumption_evidence_verified: coverageReport.consumption_evidence_verified,
2615
+ consumption_evidence_failures: coverageReport.consumption_evidence_failures,
2577
2616
  };
2578
2617
  if (isJson) {
2579
2618
  userJson(JSON.stringify(result, null, 2));
@@ -2581,6 +2620,7 @@ async function cmdAuditTemplateVisibility() {
2581
2620
  else {
2582
2621
  userInfo("═══ 模板资产可见性审计报告 ═══");
2583
2622
  userInfo(`总资产数: ${report.total_assets}`);
2623
+ userInfo(`注册合同数: ${coverageReport.total_contracts}(包含非文件运行时资产)`);
2584
2624
  userInfo(`合同覆盖: ${coverageReport.contract_covered}`);
2585
2625
  userInfo(`未覆盖: ${coverageReport.uncovered}`);
2586
2626
  userInfo(`用户可见: ${userVisibleCount}`);
@@ -2591,6 +2631,48 @@ async function cmdAuditTemplateVisibility() {
2591
2631
  userInfo(`缺消费者: ${report.missing_consumer}`);
2592
2632
  userInfo(`缺 owner: ${report.missing_owner}`);
2593
2633
  userInfo(`未注册: ${report.unregistered_assets}`);
2634
+ userInfo(`消费证据验证: ${coverageReport.consumption_evidence_verified ? "通过" : "失败"}`);
2635
+ for (const failure of coverageReport.consumption_evidence_failures) {
2636
+ userInfo(` - ${failure}`);
2637
+ }
2638
+ }
2639
+ }
2640
+ async function cmdAuditProjectKnowledge() {
2641
+ const projectPathArg = getArgValue("--project-path");
2642
+ const projectPath = projectPathArg ? path.resolve(projectPathArg) : (process.env.SOLOFORGE_PROJECT ?? process.cwd());
2643
+ const { auditProjectKnowledge } = await import("../engine/project_knowledge_contract.js");
2644
+ const { userInfo, userJson } = await import("../engine/logger.js");
2645
+ const isJson = args.includes("--json");
2646
+ const { config } = await resolveProjectConfig(projectPath, { quiet: isJson });
2647
+ const report = auditProjectKnowledge(projectPath, config);
2648
+ if (isJson) {
2649
+ userJson(JSON.stringify(report, null, 2));
2650
+ return;
2651
+ }
2652
+ userInfo(`用户项目知识审计: ${projectPath}`);
2653
+ userInfo(` 总数: ${report.total}`);
2654
+ userInfo(` 用户自建: ${report.user_authored}`);
2655
+ userInfo(` 内置同步: ${report.builtin_synced}`);
2656
+ userInfo(` 用户修改内置: ${report.user_modified_builtin}`);
2657
+ userInfo(` 冲突: ${report.conflict}`);
2658
+ userInfo(` hard_rule: ${report.hard_rule}`);
2659
+ userInfo(` injectable: ${report.injectable}`);
2660
+ userInfo(` index_only: ${report.index_only}`);
2661
+ userInfo(` hard_fail: ${report.hard_fail_count}`);
2662
+ userInfo(` warning: ${report.warning_count}`);
2663
+ for (const asset of report.assets) {
2664
+ if (asset.findings.length === 0)
2665
+ continue;
2666
+ userInfo(` - ${asset.rel_path} (${asset.identity}/${asset.consumption})`);
2667
+ for (const finding of asset.findings) {
2668
+ const mark = finding.severity === "hard_fail" ? "❌" : finding.severity === "warning" ? "⚠️" : "ℹ️";
2669
+ userInfo(` ${mark} [${finding.code}] ${finding.message_zh}`);
2670
+ }
2671
+ }
2672
+ if (report.recommended_next_steps.length > 0) {
2673
+ userInfo(" 下一步:");
2674
+ for (const step of report.recommended_next_steps)
2675
+ userInfo(` - ${step}`);
2594
2676
  }
2595
2677
  }
2596
2678
  //# sourceMappingURL=soloforge.js.map