soloforge 1.3.2 → 1.3.4

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 (124) hide show
  1. package/README.md +14 -0
  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 +385 -15
  6. package/dist/adapters/claude_code/tools.js.map +1 -1
  7. package/dist/adapters/shared/workflow_template.d.ts.map +1 -1
  8. package/dist/adapters/shared/workflow_template.js +3 -2
  9. package/dist/adapters/shared/workflow_template.js.map +1 -1
  10. package/dist/bin/soloforge.d.ts.map +1 -1
  11. package/dist/bin/soloforge.js +296 -1
  12. package/dist/bin/soloforge.js.map +1 -1
  13. package/dist/engine/asset_manifest.d.ts.map +1 -1
  14. package/dist/engine/asset_manifest.js +24 -0
  15. package/dist/engine/asset_manifest.js.map +1 -1
  16. package/dist/engine/backend_implementation_contract.d.ts +51 -0
  17. package/dist/engine/backend_implementation_contract.d.ts.map +1 -0
  18. package/dist/engine/backend_implementation_contract.js +142 -0
  19. package/dist/engine/backend_implementation_contract.js.map +1 -0
  20. package/dist/engine/code_maintainability_observability_contract.d.ts +74 -0
  21. package/dist/engine/code_maintainability_observability_contract.d.ts.map +1 -0
  22. package/dist/engine/code_maintainability_observability_contract.js +473 -0
  23. package/dist/engine/code_maintainability_observability_contract.js.map +1 -0
  24. package/dist/engine/config_write_boundary.d.ts +29 -0
  25. package/dist/engine/config_write_boundary.d.ts.map +1 -0
  26. package/dist/engine/config_write_boundary.js +69 -0
  27. package/dist/engine/config_write_boundary.js.map +1 -0
  28. package/dist/engine/consumable_asset_registry.d.ts.map +1 -1
  29. package/dist/engine/consumable_asset_registry.js +182 -1
  30. package/dist/engine/consumable_asset_registry.js.map +1 -1
  31. package/dist/engine/diagnostic_registry.d.ts +12 -0
  32. package/dist/engine/diagnostic_registry.d.ts.map +1 -1
  33. package/dist/engine/diagnostic_registry.js +62 -0
  34. package/dist/engine/diagnostic_registry.js.map +1 -1
  35. package/dist/engine/dual_layer_mechanism_registry.d.ts.map +1 -1
  36. package/dist/engine/dual_layer_mechanism_registry.js +318 -1
  37. package/dist/engine/dual_layer_mechanism_registry.js.map +1 -1
  38. package/dist/engine/explicit_asset_registry.d.ts.map +1 -1
  39. package/dist/engine/explicit_asset_registry.js +338 -0
  40. package/dist/engine/explicit_asset_registry.js.map +1 -1
  41. package/dist/engine/implementation_roadmap_registry.d.ts.map +1 -1
  42. package/dist/engine/implementation_roadmap_registry.js +112 -2
  43. package/dist/engine/implementation_roadmap_registry.js.map +1 -1
  44. package/dist/engine/knowledge_governance_gate.d.ts +38 -0
  45. package/dist/engine/knowledge_governance_gate.d.ts.map +1 -0
  46. package/dist/engine/knowledge_governance_gate.js +123 -0
  47. package/dist/engine/knowledge_governance_gate.js.map +1 -0
  48. package/dist/engine/log_governance.d.ts +25 -0
  49. package/dist/engine/log_governance.d.ts.map +1 -0
  50. package/dist/engine/log_governance.js +76 -0
  51. package/dist/engine/log_governance.js.map +1 -0
  52. package/dist/engine/mechanism_contract_registry.d.ts +1 -0
  53. package/dist/engine/mechanism_contract_registry.d.ts.map +1 -1
  54. package/dist/engine/mechanism_contract_registry.js +172 -0
  55. package/dist/engine/mechanism_contract_registry.js.map +1 -1
  56. package/dist/engine/mechanism_health_check.d.ts +23 -0
  57. package/dist/engine/mechanism_health_check.d.ts.map +1 -0
  58. package/dist/engine/mechanism_health_check.js +140 -0
  59. package/dist/engine/mechanism_health_check.js.map +1 -0
  60. package/dist/engine/next_action_planner.d.ts +19 -0
  61. package/dist/engine/next_action_planner.d.ts.map +1 -0
  62. package/dist/engine/next_action_planner.js +453 -0
  63. package/dist/engine/next_action_planner.js.map +1 -0
  64. package/dist/engine/observability.js +1 -1
  65. package/dist/engine/observability.js.map +1 -1
  66. package/dist/engine/ood_solid_contract.d.ts +51 -0
  67. package/dist/engine/ood_solid_contract.d.ts.map +1 -0
  68. package/dist/engine/ood_solid_contract.js +115 -0
  69. package/dist/engine/ood_solid_contract.js.map +1 -0
  70. package/dist/engine/project_stage_detector.d.ts +17 -0
  71. package/dist/engine/project_stage_detector.d.ts.map +1 -0
  72. package/dist/engine/project_stage_detector.js +185 -0
  73. package/dist/engine/project_stage_detector.js.map +1 -0
  74. package/dist/engine/release_issue_scenario_registry.d.ts.map +1 -1
  75. package/dist/engine/release_issue_scenario_registry.js +230 -1
  76. package/dist/engine/release_issue_scenario_registry.js.map +1 -1
  77. package/dist/engine/release_readiness_gate.d.ts +3 -0
  78. package/dist/engine/release_readiness_gate.d.ts.map +1 -1
  79. package/dist/engine/release_readiness_gate.js +407 -9
  80. package/dist/engine/release_readiness_gate.js.map +1 -1
  81. package/dist/engine/stale_current_task_detector.d.ts +30 -0
  82. package/dist/engine/stale_current_task_detector.d.ts.map +1 -0
  83. package/dist/engine/stale_current_task_detector.js +168 -0
  84. package/dist/engine/stale_current_task_detector.js.map +1 -0
  85. package/dist/engine/task_stage_detector.d.ts +19 -0
  86. package/dist/engine/task_stage_detector.d.ts.map +1 -0
  87. package/dist/engine/task_stage_detector.js +201 -0
  88. package/dist/engine/task_stage_detector.js.map +1 -0
  89. package/dist/engine/team_awareness.js +6 -6
  90. package/dist/engine/team_awareness.js.map +1 -1
  91. package/dist/engine/tool_invocation_contract_registry.d.ts.map +1 -1
  92. package/dist/engine/tool_invocation_contract_registry.js +10 -0
  93. package/dist/engine/tool_invocation_contract_registry.js.map +1 -1
  94. package/dist/engine/workflow_navigation_contract.d.ts +115 -0
  95. package/dist/engine/workflow_navigation_contract.d.ts.map +1 -0
  96. package/dist/engine/workflow_navigation_contract.js +39 -0
  97. package/dist/engine/workflow_navigation_contract.js.map +1 -0
  98. package/dist/types.d.ts +12 -0
  99. package/dist/types.d.ts.map +1 -1
  100. package/package.json +1 -1
  101. package/templates/knowledge/acceptance_templates/OOD/350/256/276/350/256/241/346/221/230/350/246/201/346/250/241/347/211/210.md +60 -0
  102. 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
  103. package/templates/knowledge/acceptance_templates//345/220/216/347/253/257/345/256/236/347/216/260/351/252/214/346/224/266/346/270/205/345/215/225.md +46 -0
  104. package/templates/knowledge/procedures/OOD/350/256/276/350/256/241/345/267/245/344/275/234/346/265/201.md +50 -0
  105. package/templates/knowledge/procedures//345/205/250/347/224/237/345/221/275/345/221/250/346/234/237/345/267/245/344/275/234/346/265/201/345/257/274/350/210/252.md +100 -0
  106. package/templates/knowledge/procedures//345/220/216/347/253/257/346/216/245/345/217/243/345/256/236/347/216/260/345/267/245/344/275/234/346/265/201.md +50 -0
  107. 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
  108. package/templates/knowledge/review_rules/SOLID/344/273/243/347/240/201/345/256/241/346/237/245/350/247/204/345/210/231.md +40 -0
  109. package/templates/knowledge/review_rules//345/220/216/347/253/257/345/256/236/347/216/260/345/267/245/347/250/213/345/256/241/346/237/245/350/247/204/345/210/231.md +38 -0
  110. package/templates/knowledge/rules/OOD/344/270/216SOLID/350/256/276/350/256/241/350/247/204/345/210/231.md +62 -0
  111. 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 +121 -0
  112. package/templates/knowledge/rules//345/220/216/347/253/257/345/256/236/347/216/260/345/267/245/347/250/213/345/245/221/347/272/246/350/247/204/345/210/231.md +55 -0
  113. package/templates/knowledge/rules//345/267/245/344/275/234/346/265/201/345/257/274/350/210/252/345/245/221/347/272/246/350/247/204/345/210/231.md +113 -0
  114. 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
  115. 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
  116. 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
  117. package/templates/knowledge/rules//346/240/207/345/207/206/350/265/204/344/272/247/350/246/206/347/233/226/350/247/204/345/210/231.md +43 -0
  118. package/templates/knowledge/rules//346/250/241/346/235/277/350/265/204/344/272/247/345/217/257/350/247/201/346/200/247/350/247/204/345/210/231.md +44 -0
  119. 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
  120. package/templates/knowledge/rules//351/200/232/347/224/250/345/206/263/347/255/226/347/240/224/350/256/250/350/247/204/345/210/231.md +47 -0
  121. 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
  122. package/templates/knowledge/rules//351/252/214/346/224/266/346/250/241/346/235/277/350/276/223/345/207/272/345/245/221/347/272/246/350/247/204/345/210/231.md +46 -0
  123. package/templates/patterns/SOLID/350/256/276/350/256/241/350/247/204/350/214/203.md +39 -0
  124. package/templates/patterns//345/220/216/347/253/257/345/256/236/347/216/260/345/267/245/347/250/213/350/247/204/350/214/203.md +39 -0
package/README.md CHANGED
@@ -8,6 +8,15 @@ AI 编程助手的项目工作流配置器。SoloForge 帮你把 Claude Code、C
8
8
  - 你希望每个项目都有稳定的 AI 工作流规则,而不是每次从零解释。
9
9
  - 你希望 AI 修改代码前先理解项目边界,生成产物时不要误改源码。
10
10
  - 你希望配置可以自动推断,但不要在低置信度时乱写项目配置。
11
+ - 你希望 AI 写业务代码时能遵守必要注释、结构化日志、敏感信息脱敏和交付复验要求。
12
+
13
+ ## 核心能力
14
+
15
+ - **下一步导航**: `soloforge next` 会根据当前阶段、阻断项和已有证据提示下一步,而不是只报告状态。
16
+ - **设计产物包审计**: 架构、数据库、API、OpenAPI、SQL/migration 和一致性报告按统一合同审计,避免文档之间漂移。
17
+ - **工程实现契约**: 编码阶段会约束 OOD/SOLID、Controller 入参出参、参数校验、事务、幂等、权限、日志和错误处理等实现细节。
18
+ - **注释与日志治理**: 关键业务规则、状态变更、支付/权限/安全路径、异常处理和迁移脚本需要可定位日志或必要注释;敏感信息不得进入日志。
19
+ - **长期机制化门禁**: SoloForge 自身发布前会检查机制消费链路、知识治理、配置落盘边界、日志治理和诊断码集中注册,防止只靠文档或测试自证。
11
20
 
12
21
  ## 最短成功路径
13
22
 
@@ -75,6 +84,8 @@ SoloForge 不会覆盖已有知识文件。重新运行 `soloforge init` 可刷
75
84
  ```bash
76
85
  soloforge validate # 检查项目配置和知识文件
77
86
  soloforge status # 查看当前项目状态和配置来源
87
+ soloforge next # 查看当前阶段、阻断项和下一步可执行工作包
88
+ soloforge stage # 查看项目阶段与当前任务阶段
78
89
  soloforge config resolve # 查看配置解析结果和来源
79
90
  soloforge config explain # 解释某项配置为什么是当前值
80
91
  soloforge version # 查看版本
@@ -153,6 +164,9 @@ soloforge migrate --apply --confirm # 确认后迁移
153
164
  - **施工指令约束** — AI 写代码前必须先明确目标、范围、非目标和验收标准,不会跳过定义直接动手写实现。
154
165
  - **证据驱动** — AI 不得无证据声称项目事实。默认模板和通用规则不算项目证据;架构分析必须有真实代码依据或你的人工确认。
155
166
  - **存量设计复验** — 升级 SoloForge 后,已有架构/数据库/API 文档不会被默认信任。运行 `soloforge audit-design-artifacts` 可得到差距报告;需要升级时先 dry-run,再经 `--apply --confirm` 归档旧文件并写入升级契约,修订后的文档必须重新复验。
167
+ - **下一步导航** — 不确定接下来该做什么时,运行 `soloforge next`,或向 AI 直接说“下一步/继续/现在能写代码吗”。SoloForge 会依据配置、设计验收、当前任务、修复指令和验证证据输出阶段、阻断原因与工作包;陈旧任务不会被静默绕过。
168
+ - **OOD 与 SOLID 编码约束** — 复杂业务、领域服务、策略和重构类实现会先要求对象职责、接口与依赖方向摘要;代码审查可识别职责膨胀、直接依赖基础设施、宽接口和替换违约。文案或简单配置修改不会被强行复杂化。
169
+ - **后端实现工程约束** — 实现后端接口前会要求 DTO/校验、响应与分页、事务与幂等、安全审计、OpenAPI/数据库对齐和测试证据;实体泄漏、写接口无校验、事务内外调、关键写入无幂等或敏感接口无安全证据会阻断交付。
156
170
  - **日志清晰** — 用户可见输出中文优先;JSON 模式(`--json`)输出保持纯 JSON,不混入内部日志。
157
171
  - 写代码类任务会更明确 scope、验收项和验证命令。
158
172
  - 生成文档、提取说明、分析日志等产物型任务会默认输出到 `.soloforge/output/`,不会默认修改 `src/`。
@@ -32,7 +32,7 @@ export async function startServer(deps) {
32
32
  await transport.close?.();
33
33
  }
34
34
  catch (e) {
35
- console.debug("[soloForge]", e);
35
+ debug("server", "关闭资源失败", e);
36
36
  }
37
37
  process.exit(0);
38
38
  };
@@ -1 +1 @@
1
- {"version":3,"file":"server.js","sourceRoot":"","sources":["../../../src/adapters/claude_code/server.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AACpE,OAAO,EAAE,oBAAoB,EAAE,MAAM,2CAA2C,CAAC;AACjF,OAAO,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAI3C,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACvC,OAAO,EAAE,KAAK,EAAE,YAAY,EAAE,MAAM,wBAAwB,CAAC;AAC7D,MAAM,UAAU,GAAW,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,IAAI,GAAG,CAAC,uBAAuB,EAAE,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC;AAmBxH;;;;;GAKG;AACH,MAAM,CAAC,KAAK,UAAU,WAAW,CAAC,IAAgB;IAC9C,KAAK,CAAC,QAAQ,EAAE,oBAAoB,CAAC,CAAC;IACxC,MAAM,EAAE,MAAM,EAAE,cAAc,EAAE,WAAW,EAAE,GAAG,IAAI,CAAC;IAErD,MAAM,MAAM,GAAG,IAAI,SAAS,CAAC;QAC3B,IAAI,EAAE,WAAW;QACjB,OAAO,EAAE,UAAU;KACpB,CAAC,CAAC;IAEH,MAAM,aAAa,CAAC,MAAM,EAAE,EAAE,MAAM,EAAE,cAAc,EAAE,WAAW,EAAE,CAAC,CAAC;IAErE,MAAM,SAAS,GAAG,IAAI,oBAAoB,EAAE,CAAC;IAC7C,MAAM,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;IAEhC,IAAI,YAAY,GAAG,KAAK,CAAC;IACzB,4BAA4B;IAC5B,MAAM,QAAQ,GAAG,KAAK,IAAI,EAAE;QAC1B,IAAI,YAAY;YAAE,OAAO;QACzB,YAAY,GAAG,IAAI,CAAC;QACpB,IAAI,CAAC;YACH,IAAI,cAAc;gBAAE,MAAM,cAAc,CAAC,KAAK,EAAE,CAAC;YACjD,MAAM,SAAS,CAAC,KAAK,EAAE,EAAE,CAAC;QAC5B,CAAC;QAAC,OAAO,CAAC,EAAE,CAAC;YACX,OAAO,CAAC,KAAK,CAAC,aAAa,EAAE,CAAC,CAAC,CAAC;QAClC,CAAC;QACD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC,CAAC;IAEF,OAAO,CAAC,EAAE,CAAC,SAAS,EAAE,QAAQ,CAAC,CAAC;IAChC,OAAO,CAAC,EAAE,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC;IAC/B,8BAA8B;IAC9B,OAAO,CAAC,EAAE,CAAC,SAAS,EAAE,GAAG,EAAE;QACzB,QAAQ,EAAE,CAAC;IACb,CAAC,CAAC,CAAC;IAEH,sCAAsC;IACtC,OAAO,CAAC,EAAE,CAAC,mBAAmB,EAAE,CAAC,GAAG,EAAE,EAAE;QACtC,YAAY,CAAC,QAAQ,EAAE,QAAQ,EAAE,GAAG,CAAC,CAAC;QACtC,yBAAyB;QACzB,OAAO,CAAC,QAAQ,GAAG,CAAC,CAAC;QACrB,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC,CAAC,CAAC;IACH,4BAA4B;IAC5B,OAAO,CAAC,EAAE,CAAC,oBAAoB,EAAE,CAAC,MAAM,EAAE,EAAE;QAC1C,YAAY,CAAC,QAAQ,EAAE,kBAAkB,EAAE,MAAM,CAAC,CAAC;QACnD,OAAO,CAAC,QAAQ,GAAG,CAAC,CAAC;QACrB,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC,CAAC,CAAC;AACL,CAAC"}
1
+ {"version":3,"file":"server.js","sourceRoot":"","sources":["../../../src/adapters/claude_code/server.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AACpE,OAAO,EAAE,oBAAoB,EAAE,MAAM,2CAA2C,CAAC;AACjF,OAAO,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAI3C,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACvC,OAAO,EAAE,KAAK,EAAE,YAAY,EAAE,MAAM,wBAAwB,CAAC;AAC7D,MAAM,UAAU,GAAW,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,IAAI,GAAG,CAAC,uBAAuB,EAAE,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC;AAmBxH;;;;;GAKG;AACH,MAAM,CAAC,KAAK,UAAU,WAAW,CAAC,IAAgB;IAC9C,KAAK,CAAC,QAAQ,EAAE,oBAAoB,CAAC,CAAC;IACxC,MAAM,EAAE,MAAM,EAAE,cAAc,EAAE,WAAW,EAAE,GAAG,IAAI,CAAC;IAErD,MAAM,MAAM,GAAG,IAAI,SAAS,CAAC;QAC3B,IAAI,EAAE,WAAW;QACjB,OAAO,EAAE,UAAU;KACpB,CAAC,CAAC;IAEH,MAAM,aAAa,CAAC,MAAM,EAAE,EAAE,MAAM,EAAE,cAAc,EAAE,WAAW,EAAE,CAAC,CAAC;IAErE,MAAM,SAAS,GAAG,IAAI,oBAAoB,EAAE,CAAC;IAC7C,MAAM,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;IAEhC,IAAI,YAAY,GAAG,KAAK,CAAC;IACzB,4BAA4B;IAC5B,MAAM,QAAQ,GAAG,KAAK,IAAI,EAAE;QAC1B,IAAI,YAAY;YAAE,OAAO;QACzB,YAAY,GAAG,IAAI,CAAC;QACpB,IAAI,CAAC;YACH,IAAI,cAAc;gBAAE,MAAM,cAAc,CAAC,KAAK,EAAE,CAAC;YACjD,MAAM,SAAS,CAAC,KAAK,EAAE,EAAE,CAAC;QAC5B,CAAC;QAAC,OAAO,CAAC,EAAE,CAAC;YACX,KAAK,CAAC,QAAQ,EAAE,QAAQ,EAAE,CAAC,CAAC,CAAC;QAC/B,CAAC;QACD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC,CAAC;IAEF,OAAO,CAAC,EAAE,CAAC,SAAS,EAAE,QAAQ,CAAC,CAAC;IAChC,OAAO,CAAC,EAAE,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC;IAC/B,8BAA8B;IAC9B,OAAO,CAAC,EAAE,CAAC,SAAS,EAAE,GAAG,EAAE;QACzB,QAAQ,EAAE,CAAC;IACb,CAAC,CAAC,CAAC;IAEH,sCAAsC;IACtC,OAAO,CAAC,EAAE,CAAC,mBAAmB,EAAE,CAAC,GAAG,EAAE,EAAE;QACtC,YAAY,CAAC,QAAQ,EAAE,QAAQ,EAAE,GAAG,CAAC,CAAC;QACtC,yBAAyB;QACzB,OAAO,CAAC,QAAQ,GAAG,CAAC,CAAC;QACrB,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC,CAAC,CAAC;IACH,4BAA4B;IAC5B,OAAO,CAAC,EAAE,CAAC,oBAAoB,EAAE,CAAC,MAAM,EAAE,EAAE;QAC1C,YAAY,CAAC,QAAQ,EAAE,kBAAkB,EAAE,MAAM,CAAC,CAAC;QACnD,OAAO,CAAC,QAAQ,GAAG,CAAC,CAAC;QACrB,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC,CAAC,CAAC;AACL,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"tools.d.ts","sourceRoot":"","sources":["../../../src/adapters/claude_code/tools.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"tools.d.ts","sourceRoot":"","sources":["../../../src/adapters/claude_code/tools.ts"],"names":[],"mappings":"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"}
@@ -6,6 +6,7 @@ import crypto from "node:crypto";
6
6
  import { verifyArtifact } from "../../engine/artifact_contract_registry.js";
7
7
  import { verifyRouteDecisionContract } from "../../engine/route_decision_contract_verifier.js";
8
8
  import { findToolInvocationContractByName, createToolTrace, validateToolInvocation, hasWriteSideEffect, } from "../../engine/tool_invocation_contract_registry.js";
9
+ import { TOOL_DIAGNOSTIC_CODES } from "../../engine/diagnostic_registry.js";
9
10
  function createLazy(loader) {
10
11
  let mod = { loaded: null, promise: null };
11
12
  return () => {
@@ -38,7 +39,6 @@ const lazyDebugger = createLazy(() => import("../../engine/debugger.js"));
38
39
  const lazyObservability = createLazy(() => import("../../engine/observability.js"));
39
40
  const lazyGovernance = createLazy(() => import("../../engine/governance_report.js"));
40
41
  const lazyMigration = createLazy(() => import("../../engine/migration_guard.js"));
41
- const lazyPlanGate = createLazy(() => import("../../engine/plan_proposal_gate.js"));
42
42
  const lazyTestGen = createLazy(() => import("../../engine/test_generator.js"));
43
43
  const lazyTestQuality = createLazy(() => import("../../engine/test_quality.js"));
44
44
  const lazyDepScan = createLazy(() => import("../../engine/dependency_scanner.js"));
@@ -59,7 +59,6 @@ const lazyCapState = createLazy(() => import("../../engine/capability_state_stor
59
59
  const lazyMainPath = createLazy(() => import("../../engine/main_path_integration_contract.js"));
60
60
  const lazyDualLayer = createLazy(() => import("../../engine/dual_layer_mechanism_registry.js"));
61
61
  const lazyInputMaterial = createLazy(() => import("../../engine/input_material_contract_registry.js"));
62
- const lazyConfigCmd = createLazy(() => import("../../bin/config_commands.js"));
63
62
  const lazyConfigPrecedence = createLazy(() => import("../../engine/config_precedence_contract.js"));
64
63
  const lazyEnforcementGuard = createLazy(() => import("../../engine/enforcement_guard.js"));
65
64
  const lazyWorkspaceLease = createLazy(() => import("../../engine/workspace_lease.js"));
@@ -67,8 +66,6 @@ const lazyDeliveryReadiness = createLazy(() => import("../../engine/delivery_rea
67
66
  const lazyVerificationContract = createLazy(() => import("../../engine/verification_contract.js"));
68
67
  const lazyFailureReport = createLazy(() => import("../../engine/failure_report.js"));
69
68
  const lazyDegradation = createLazy(() => import("../../engine/degradation.js"));
70
- const lazyRetentionPolicy = createLazy(() => import("../../engine/retention_policy.js"));
71
- const lazyDiagnosticRegistry = createLazy(() => import("../../engine/diagnostic_registry.js"));
72
69
  const lazyArchitectureDesign = createLazy(() => import("../../engine/architecture_design_contract.js"));
73
70
  const lazyExistingSystemAnalysis = createLazy(() => import("../../engine/existing_system_analysis.js"));
74
71
  const lazyCodingReadiness = createLazy(() => import("../../engine/coding_readiness_gate.js"));
@@ -81,8 +78,11 @@ const lazyBrainstormContract = createLazy(() => import("../../engine/brainstorm_
81
78
  const lazyArchitectureWorkshop = createLazy(() => import("../../engine/architecture_decision_workshop.js"));
82
79
  const lazyDesignArtifactPack = createLazy(() => import("../../engine/design_artifact_pack.js"));
83
80
  const lazyStandardAssetContract = createLazy(() => import("../../engine/standard_asset_contract.js"));
84
- const lazyTemplateVisibility = createLazy(() => import("../../engine/template_asset_visibility.js"));
85
81
  const lazyDecisionWorkshop = createLazy(() => import("../../engine/decision_workshop.js"));
82
+ const lazyNavigation = createLazy(() => import("../../engine/next_action_planner.js"));
83
+ const lazyOodSolid = createLazy(() => import("../../engine/ood_solid_contract.js"));
84
+ const lazyBackendImplementation = createLazy(() => import("../../engine/backend_implementation_contract.js"));
85
+ const lazyCodeObservability = createLazy(() => import("../../engine/code_maintainability_observability_contract.js"));
86
86
  // ── Zod Schema 定义 ──
87
87
  const ClassifySchema = {
88
88
  intent: z.string().describe("开发者意图描述"),
@@ -95,6 +95,9 @@ const ExpandSchema = {
95
95
  architecture_decision_workshop: z.unknown().optional().describe("架构设计前已讨论并确认的六域决策记录"),
96
96
  decision_workshop: z.unknown().optional().describe("通用决策研讨合同(技术选型/数据迁移/安全策略/部署/重构/第三方集成等)"),
97
97
  design_artifact_pack: z.unknown().optional().describe("设计产物包路径映射或已复验状态"),
98
+ ood_solid_summary: z.unknown().optional().describe("复杂编码任务的 OOD/SOLID 设计摘要"),
99
+ backend_implementation_work_package: z.unknown().optional().describe("后端接口实现的工程工作包"),
100
+ code_observability_work_package: z.unknown().optional().describe("代码可维护性与可观测性工作包"),
98
101
  };
99
102
  const VerifySchema = {
100
103
  task_id: z.string().describe("任务 ID"),
@@ -235,7 +238,7 @@ export function checkWriteToolPlanGate(params) {
235
238
  if (!params.ctx || !params.ctx.plan_proposal_gate) {
236
239
  return {
237
240
  allowed: false,
238
- diagnostic_code: "SF-PLAN-5001",
241
+ diagnostic_code: TOOL_DIAGNOSTIC_CODES.planGate,
239
242
  violation_type: "guard_blocked",
240
243
  reason: `工具 ${params.toolName} 执行前缺少 Plan Proposal Gate`,
241
244
  };
@@ -782,7 +785,7 @@ export async function assessCepForRepairReverify(params) {
782
785
  */
783
786
  export async function assessCepForUserFeedback(params) {
784
787
  const cepModule = await import("../../engine/core_experience_principle.js");
785
- return cepModule.evaluateUserVisibleOutput({
788
+ const cep = cepModule.evaluateUserVisibleOutput({
786
789
  has_conclusion_first: params.has_conclusion_first,
787
790
  has_clear_summary: params.has_clear_summary,
788
791
  has_actionable_next_step: params.has_actionable_next_step,
@@ -790,6 +793,22 @@ export async function assessCepForUserFeedback(params) {
790
793
  hides_critical_failure: params.hides_critical_failure,
791
794
  chinese_semantic_first: params.chinese_semantic_first,
792
795
  });
796
+ const logGov = await import("../../engine/log_governance.js");
797
+ const logReport = logGov.evaluateFeedbackOutputQuality({
798
+ output: [
799
+ params.has_conclusion_first ? "结论优先" : "缺少结论",
800
+ params.has_clear_summary ? "摘要清晰" : "摘要不足",
801
+ params.has_actionable_next_step ? "下一步明确" : "下一步缺失",
802
+ ].join(";"),
803
+ critical_failure_hidden: params.hides_critical_failure,
804
+ });
805
+ return {
806
+ passed: cep.passed && logReport.passed,
807
+ issues_zh: [
808
+ ...cep.issues_zh,
809
+ ...logReport.findings.map((f) => f.message_zh),
810
+ ],
811
+ };
793
812
  }
794
813
  /**
795
814
  * 注册所有 MCP 工具到服务器实例。
@@ -977,7 +996,7 @@ export async function registerTools(server, deps) {
977
996
  content: [{ type: "text", text: JSON.stringify({
978
997
  error: planViolation.reason,
979
998
  violation: planViolation,
980
- diagnostic_code: pgResult.diagnostic_code ?? "SF-PLAN-5001",
999
+ diagnostic_code: pgResult.diagnostic_code ?? TOOL_DIAGNOSTIC_CODES.planGate,
981
1000
  recovery: planViolation.recovery,
982
1001
  }) }],
983
1002
  isError: true,
@@ -1003,7 +1022,7 @@ export async function registerTools(server, deps) {
1003
1022
  content: [{ type: "text", text: JSON.stringify({
1004
1023
  error: planViolation.reason,
1005
1024
  violation: planViolation,
1006
- diagnostic_code: "SF-PLAN-5001",
1025
+ diagnostic_code: TOOL_DIAGNOSTIC_CODES.planGate,
1007
1026
  recovery: planViolation.recovery,
1008
1027
  }) }],
1009
1028
  isError: true,
@@ -1032,7 +1051,7 @@ export async function registerTools(server, deps) {
1032
1051
  content: [{ type: "text", text: JSON.stringify({
1033
1052
  error: instrViolation.reason,
1034
1053
  violation: instrViolation,
1035
- diagnostic_code: instrResult.diagnostic_code ?? "SF-INSTR-5801",
1054
+ diagnostic_code: instrResult.diagnostic_code ?? TOOL_DIAGNOSTIC_CODES.instructionContract,
1036
1055
  recovery: instrViolation.recovery,
1037
1056
  }) }],
1038
1057
  isError: true,
@@ -1250,9 +1269,33 @@ export async function registerTools(server, deps) {
1250
1269
  debug("工具注册", "批量注册核心/辅助/知识维护工具...");
1251
1270
  // ── sf_classify: 意图分类入口,创建任务上下文并返回分类结果 ──
1252
1271
  registerSafeTool("sf_classify", "分析开发者意图,返回任务类型、风险、复杂度和执行策略", ClassifySchema, async (args) => {
1272
+ const asksForNavigation = /(?:下一步|继续(?:做|执行|开发)?|现在(?:可以|能)(?:开始)?(?:写代码|编码|开发|测试|交付)|接下来(?:做什么|该做什么)|该(?:做什么|怎么继续))/i.test(args.intent);
1273
+ if (asksForNavigation) {
1274
+ const navigation = await (await lazyNavigation()).planNextAction(projectPath);
1275
+ return {
1276
+ result: {
1277
+ status: "navigation_required",
1278
+ reason_zh: "检测到阶段推进意图,必须先依据 SoloForge 状态规划下一步",
1279
+ navigation,
1280
+ },
1281
+ };
1282
+ }
1253
1283
  // 检查是否存在进行中的任务
1254
1284
  const existing = await taskContext.getCurrentTask();
1255
1285
  if (existing && !["done", "failed"].includes(existing.status)) {
1286
+ const navigation = await (await lazyNavigation()).planNextAction(projectPath);
1287
+ if (navigation.stale_task?.is_stale) {
1288
+ return {
1289
+ result: {
1290
+ status: "stale_task_requires_resolution",
1291
+ error: "存在陈旧任务指针,必须先选择恢复、归档或开始新任务",
1292
+ existing_task_id: existing.task_id,
1293
+ existing_status: existing.status,
1294
+ navigation,
1295
+ hint: "先调用 sf_navigation 查看可执行处理步骤,不得绕过 SoloForge 状态直接分析或编码",
1296
+ },
1297
+ };
1298
+ }
1256
1299
  return {
1257
1300
  result: {
1258
1301
  error: "存在未完成的任务",
@@ -1295,7 +1338,17 @@ export async function registerTools(server, deps) {
1295
1338
  if (args.design_artifact_pack) {
1296
1339
  ctx.design_artifact_pack = args.design_artifact_pack;
1297
1340
  }
1298
- if (args.architecture_decision_workshop || args.decision_workshop || args.design_artifact_pack) {
1341
+ if (args.ood_solid_summary) {
1342
+ ctx.ood_solid_summary = args.ood_solid_summary;
1343
+ }
1344
+ if (args.backend_implementation_work_package) {
1345
+ ctx.backend_implementation_work_package = args.backend_implementation_work_package;
1346
+ }
1347
+ if (args.code_observability_work_package) {
1348
+ ctx.code_observability_work_package = args.code_observability_work_package;
1349
+ }
1350
+ if (args.architecture_decision_workshop || args.decision_workshop || args.design_artifact_pack
1351
+ || args.ood_solid_summary || args.backend_implementation_work_package || args.code_observability_work_package) {
1299
1352
  await taskContext.save(ctx);
1300
1353
  }
1301
1354
  // 状态守卫:classifying/expanding/clarifying → expanding
@@ -1668,6 +1721,82 @@ export async function registerTools(server, deps) {
1668
1721
  };
1669
1722
  }
1670
1723
  }
1724
+ // 问题六十六: 复杂业务编码必须先具备对象职责、接口和依赖方向摘要。
1725
+ {
1726
+ const oodModule = await lazyOodSolid();
1727
+ const oodGate = oodModule.evaluateOodDesignGate({
1728
+ task_id: args.task_id,
1729
+ intent: ctx.intent,
1730
+ route: expansionRoute,
1731
+ summary: ctx.ood_solid_summary,
1732
+ });
1733
+ if (oodGate.applicable) {
1734
+ ctx.ood_solid_summary = oodGate.required_summary;
1735
+ await taskContext.save(ctx);
1736
+ }
1737
+ if (!oodGate.allowed) {
1738
+ return {
1739
+ result: {
1740
+ error: oodGate.reason_zh,
1741
+ status: "awaiting_ood_design",
1742
+ diagnostic_code: TOOL_DIAGNOSTIC_CODES.oodMissingSummary,
1743
+ ood_solid_summary: oodGate.required_summary,
1744
+ recovery: "请确认对象职责、接口边界、依赖方向、变化点和 SOLID 风险后重新调用 sf_expand",
1745
+ },
1746
+ };
1747
+ }
1748
+ }
1749
+ // 问题六十七: 后端接口编码必须先确认工程边界与验收证据。
1750
+ {
1751
+ const backendModule = await lazyBackendImplementation();
1752
+ const backendGate = backendModule.evaluateBackendImplementationGate({
1753
+ task_id: args.task_id,
1754
+ intent: ctx.intent,
1755
+ route: expansionRoute,
1756
+ work_package: ctx.backend_implementation_work_package,
1757
+ });
1758
+ if (backendGate.applicable) {
1759
+ ctx.backend_implementation_work_package = backendGate.work_package;
1760
+ await taskContext.save(ctx);
1761
+ }
1762
+ if (!backendGate.allowed) {
1763
+ return {
1764
+ result: {
1765
+ error: backendGate.reason_zh,
1766
+ status: "awaiting_backend_contract",
1767
+ diagnostic_code: TOOL_DIAGNOSTIC_CODES.backendMissingSummary,
1768
+ backend_implementation_work_package: backendGate.work_package,
1769
+ recovery: "请补齐 DTO/校验、事务一致性、安全审计、契约对齐与测试证据后重新调用 sf_expand",
1770
+ },
1771
+ };
1772
+ }
1773
+ }
1774
+ // 问题六十八: 业务编码必须确认代码可维护性与可观测性约束。
1775
+ {
1776
+ const obsModule = await lazyCodeObservability();
1777
+ const obsGate = obsModule.evaluateCodeObservabilityGate({
1778
+ task_id: args.task_id,
1779
+ intent: ctx.intent,
1780
+ route: expansionRoute,
1781
+ changed_files: ctx.execution?.changed_files,
1782
+ work_package: ctx.code_observability_work_package,
1783
+ });
1784
+ if (obsGate.applicable) {
1785
+ ctx.code_observability_work_package = obsGate.work_package;
1786
+ await taskContext.save(ctx);
1787
+ }
1788
+ if (!obsGate.allowed) {
1789
+ return {
1790
+ result: {
1791
+ error: obsGate.reason_zh,
1792
+ status: "awaiting_code_observability_contract",
1793
+ diagnostic_code: TOOL_DIAGNOSTIC_CODES.codeObservabilityWorkPackage,
1794
+ code_observability_work_package: obsGate.work_package,
1795
+ recovery: "请确认必要注释、结构化日志、敏感信息脱敏和项目 logger 使用后重新调用 sf_expand",
1796
+ },
1797
+ };
1798
+ }
1799
+ }
1671
1800
  // Input Material Contract: 处理 hard-blocking 结果
1672
1801
  // Privacy Gate: 隐私/敏感信息策略阻断
1673
1802
  const isBlocked = expansion.prompt.startsWith("## 阻塞:输入材料禁止读取")
@@ -1872,6 +2001,121 @@ export async function registerTools(server, deps) {
1872
2001
  result: { error: "任务不存在" },
1873
2002
  };
1874
2003
  }
2004
+ const implementationFiles = args.changed_files.filter((file) => /\.(?:ts|tsx|js|jsx|java|kt|cs|go|py)$/.test(file)
2005
+ && !/(?:^|\/)tests?\//.test(file));
2006
+ if (implementationFiles.length > 0) {
2007
+ const implementationContents = {};
2008
+ for (const changedFile of implementationFiles) {
2009
+ const absoluteFile = path.resolve(projectPath, changedFile);
2010
+ try {
2011
+ if (absoluteFile.startsWith(`${path.resolve(projectPath)}${path.sep}`) && fss.statSync(absoluteFile).isFile()) {
2012
+ implementationContents[changedFile] = fss.readFileSync(absoluteFile, "utf-8");
2013
+ }
2014
+ }
2015
+ catch {
2016
+ // 文件缺失会由验证命令或现有产物检查报告。
2017
+ }
2018
+ }
2019
+ const oodModule = await lazyOodSolid();
2020
+ const oodGate = oodModule.evaluateOodDesignGate({
2021
+ task_id: args.task_id,
2022
+ intent: ctx.intent,
2023
+ route: ctx.expansion?.workflow_trace?.route,
2024
+ changed_files: implementationFiles,
2025
+ summary: ctx.ood_solid_summary,
2026
+ });
2027
+ if (!oodGate.allowed) {
2028
+ return {
2029
+ result: {
2030
+ error: oodGate.reason_zh,
2031
+ status: "blocked",
2032
+ diagnostic_code: TOOL_DIAGNOSTIC_CODES.oodMissingSummary,
2033
+ ood_solid_summary: oodGate.required_summary,
2034
+ recovery: "完成 OOD/SOLID 摘要后重新执行 sf_expand 与 sf_verify",
2035
+ },
2036
+ };
2037
+ }
2038
+ const backendModule = await lazyBackendImplementation();
2039
+ const backendGate = backendModule.evaluateBackendImplementationGate({
2040
+ task_id: args.task_id,
2041
+ intent: ctx.intent,
2042
+ route: ctx.expansion?.workflow_trace?.route,
2043
+ changed_files: implementationFiles,
2044
+ work_package: ctx.backend_implementation_work_package,
2045
+ });
2046
+ if (!backendGate.allowed) {
2047
+ return {
2048
+ result: {
2049
+ error: backendGate.reason_zh,
2050
+ status: "blocked",
2051
+ diagnostic_code: TOOL_DIAGNOSTIC_CODES.backendMissingSummary,
2052
+ backend_implementation_work_package: backendGate.work_package,
2053
+ recovery: "完成后端工程工作包后重新执行 sf_expand 与 sf_verify",
2054
+ },
2055
+ };
2056
+ }
2057
+ const solidFindings = oodGate.applicable ? oodModule.reviewSolidCode(implementationContents) : [];
2058
+ const backendFindings = backendGate.applicable ? backendModule.reviewBackendImplementationFiles(implementationContents) : [];
2059
+ if (backendGate.applicable) {
2060
+ const openApiPath = path.join(projectPath, "docs", "api", "openapi.yaml");
2061
+ const apiMarkdownPath = path.join(projectPath, "docs", "architecture", "03-API接口规格文档.md");
2062
+ const migrationDirectory = path.join(projectPath, "db", "migrations");
2063
+ const openapiText = fss.existsSync(openApiPath) ? fss.readFileSync(openApiPath, "utf-8") : undefined;
2064
+ const apiDocumentText = fss.existsSync(apiMarkdownPath) ? fss.readFileSync(apiMarkdownPath, "utf-8") : undefined;
2065
+ const migrationText = fss.existsSync(migrationDirectory)
2066
+ ? fss.readdirSync(migrationDirectory).filter((name) => /\.sql$/i.test(name))
2067
+ .map((name) => fss.readFileSync(path.join(migrationDirectory, name), "utf-8")).join("\n")
2068
+ : undefined;
2069
+ backendFindings.push(...backendModule.verifyBackendArtifactAlignment({
2070
+ openapiText,
2071
+ apiDocumentText,
2072
+ migrationText,
2073
+ sourceFiles: implementationContents,
2074
+ }));
2075
+ }
2076
+ ctx.ood_solid_findings = solidFindings;
2077
+ ctx.backend_implementation_findings = backendFindings;
2078
+ await taskContext.save(ctx);
2079
+ if (oodModule.hasBlockingSolidFindings(solidFindings)) {
2080
+ return {
2081
+ result: {
2082
+ error: "OOD/SOLID 代码复验发现阻断项,需修复后重验",
2083
+ status: "blocked",
2084
+ diagnostic_code: TOOL_DIAGNOSTIC_CODES.oodDeliveryBlock,
2085
+ ood_solid_findings: solidFindings,
2086
+ },
2087
+ };
2088
+ }
2089
+ if (backendModule.hasBlockingBackendFindings(backendFindings)) {
2090
+ return {
2091
+ result: {
2092
+ error: "后端实现工程复验发现阻断项,需修复后重验",
2093
+ status: "blocked",
2094
+ diagnostic_code: TOOL_DIAGNOSTIC_CODES.backendDeliveryBlock,
2095
+ backend_implementation_findings: backendFindings,
2096
+ },
2097
+ };
2098
+ }
2099
+ // 问题六十八: 代码可维护性与可观测性契约
2100
+ const codeObsModule = await lazyCodeObservability();
2101
+ const obsFindings = codeObsModule.verifyChangedFilesObservability({
2102
+ changed_files: implementationFiles,
2103
+ file_contents: implementationContents,
2104
+ intent: ctx.intent,
2105
+ });
2106
+ ctx.code_observability_findings = obsFindings;
2107
+ await taskContext.save(ctx);
2108
+ if (codeObsModule.hasBlockingObservabilityFindings(obsFindings)) {
2109
+ return {
2110
+ result: {
2111
+ error: "代码可维护性/可观测性复验发现阻断项,需修复后重验",
2112
+ status: "blocked",
2113
+ diagnostic_code: TOOL_DIAGNOSTIC_CODES.codeObservabilityFinding,
2114
+ code_observability_findings: obsFindings,
2115
+ },
2116
+ };
2117
+ }
2118
+ }
1875
2119
  // 问题六十二: 设计产物验证必须读取用户项目真实文件,不接受占位合同自证通过。
1876
2120
  const verifyWorkflowIntent = ctx.route_decision?.workflow_intent ?? ctx.classification?.route_decision?.workflow_intent;
1877
2121
  const touchesDesignArtifacts = args.changed_files.some((file) => /docs\/architecture\/|docs\/api\/|openapi|db\/(?:migrations|schema)|架构设计|数据库设计|API接口规格/i.test(file));
@@ -1961,7 +2205,7 @@ export async function registerTools(server, deps) {
1961
2205
  result: {
1962
2206
  error: `文件 ${changedFile} 模板契约验证未通过,进入修复重验闭环`,
1963
2207
  status: "blocked",
1964
- diagnostic_code: "SF-CONTRACT-0003",
2208
+ diagnostic_code: TOOL_DIAGNOSTIC_CODES.contractDraft,
1965
2209
  template_contract_id: perFileContract.asset_id,
1966
2210
  missing_fields: contractResult.missing_fields,
1967
2211
  messages: contractResult.messages,
@@ -2252,8 +2496,8 @@ export async function registerTools(server, deps) {
2252
2496
  if (args.plan_id !== currentPlan.plan_id) {
2253
2497
  return {
2254
2498
  result: {
2255
- error: `plan_id 不匹配: 请求 "${args.plan_id}",当前任务计划 "${currentPlan.plan_id}" [SF-VERIFY-5002]`,
2256
- diagnostic_code: "SF-VERIFY-5002",
2499
+ error: `plan_id 不匹配: 请求 "${args.plan_id}",当前任务计划 "${currentPlan.plan_id}" [${TOOL_DIAGNOSTIC_CODES.verifyPlanMismatch}]`,
2500
+ diagnostic_code: TOOL_DIAGNOSTIC_CODES.verifyPlanMismatch,
2257
2501
  },
2258
2502
  };
2259
2503
  }
@@ -2633,12 +2877,64 @@ export async function registerTools(server, deps) {
2633
2877
  }, tracker);
2634
2878
  result.task_id = args.task_id;
2635
2879
  await taskContext.setCodeReview(args.task_id, result);
2880
+ const contractContents = { ...(args.file_contents ?? {}) };
2881
+ for (const changedFile of args.changed_files) {
2882
+ if (contractContents[changedFile] !== undefined)
2883
+ continue;
2884
+ const absoluteFile = path.resolve(projectPath, changedFile);
2885
+ try {
2886
+ if (absoluteFile.startsWith(`${path.resolve(projectPath)}${path.sep}`) && fss.statSync(absoluteFile).isFile()) {
2887
+ contractContents[changedFile] = fss.readFileSync(absoluteFile, "utf-8");
2888
+ }
2889
+ }
2890
+ catch {
2891
+ // 无法读取的文件留给现有 reviewer 报告,不制造假结论。
2892
+ }
2893
+ }
2894
+ const oodModule = await lazyOodSolid();
2895
+ const solidFindings = oodModule.requiresOodSolidContract(ctx.intent, ctx.expansion?.workflow_trace?.route, args.changed_files)
2896
+ || ctx.ood_solid_summary
2897
+ ? [
2898
+ ...oodModule.reviewSolidCode(contractContents),
2899
+ ...oodModule.evaluateOverdesignRisk(ctx.intent, ctx.ood_solid_summary),
2900
+ ]
2901
+ : [];
2902
+ const backendModule = await lazyBackendImplementation();
2903
+ const backendFindings = backendModule.requiresBackendImplementationContract(ctx.intent, ctx.expansion?.workflow_trace?.route, args.changed_files)
2904
+ || ctx.backend_implementation_work_package
2905
+ ? backendModule.reviewBackendImplementationFiles(contractContents)
2906
+ : [];
2907
+ // 问题六十八: 代码可维护性与可观测性审查
2908
+ const obsModule = await lazyCodeObservability();
2909
+ const obsFindings = obsModule.requiresCodeObservabilityContract(ctx.intent, ctx.expansion?.workflow_trace?.route, args.changed_files)
2910
+ || ctx.code_observability_work_package
2911
+ ? obsModule.reviewCodeObservability(contractContents)
2912
+ : [];
2913
+ if (solidFindings.length > 0 || backendFindings.length > 0 || obsFindings.length > 0) {
2914
+ const updatedCtx = await taskContext.load(args.task_id);
2915
+ if (updatedCtx) {
2916
+ updatedCtx.ood_solid_findings = solidFindings;
2917
+ updatedCtx.backend_implementation_findings = backendFindings;
2918
+ updatedCtx.code_observability_findings = obsFindings;
2919
+ await taskContext.save(updatedCtx);
2920
+ }
2921
+ }
2636
2922
  // 决策契约 advisory: 校验 review 输出
2637
2923
  const decisionContract = (await lazyDecision()).validateDecisionOutput(result);
2638
2924
  const reviewExtras = {};
2639
2925
  if (!decisionContract.passed) {
2640
2926
  reviewExtras.decision_contract_advisory = decisionContract.advisory;
2641
2927
  }
2928
+ if (solidFindings.length > 0)
2929
+ reviewExtras.ood_solid_findings = solidFindings;
2930
+ if (backendFindings.length > 0)
2931
+ reviewExtras.backend_implementation_findings = backendFindings;
2932
+ if (obsFindings.length > 0)
2933
+ reviewExtras.code_observability_findings = obsFindings;
2934
+ if (oodModule.hasBlockingSolidFindings(solidFindings) || backendModule.hasBlockingBackendFindings(backendFindings) || obsModule.hasBlockingObservabilityFindings(obsFindings)) {
2935
+ reviewExtras.delivery_blocked = true;
2936
+ reviewExtras.diagnostic_code = "SF-IMPLEMENTATION-CONTRACT-REVIEW-BLOCKED";
2937
+ }
2642
2938
  return { result: Object.keys(reviewExtras).length > 0 ? { ...result, ...reviewExtras } : result };
2643
2939
  });
2644
2940
  // ── sf_scaffold: 生成标准化代码骨架 ──
@@ -2783,7 +3079,7 @@ export async function registerTools(server, deps) {
2783
3079
  return {
2784
3080
  result: {
2785
3081
  error: "存在未清零的模板契约修复指令,需完成修复重验后才能交付",
2786
- diagnostic_code: "SF-CONTRACT-0003",
3082
+ diagnostic_code: TOOL_DIAGNOSTIC_CODES.contractDraft,
2787
3083
  repair_directive: ctx.repair_reverify_directive,
2788
3084
  recovery: "修复文档缺口后重新执行 sf_verify,验证通过后 repair_reverify_directive 自动清零",
2789
3085
  recovery_next_tools: ["sf_learn", "sf_verify", "sf_status"],
@@ -2791,6 +3087,42 @@ export async function registerTools(server, deps) {
2791
3087
  },
2792
3088
  };
2793
3089
  }
3090
+ // 问题六十六/六十七: 审查或验证阶段产生的工程硬失败不得进入交付。
3091
+ const oodModule = await lazyOodSolid();
3092
+ if (oodModule.hasBlockingSolidFindings(ctx.ood_solid_findings ?? [])) {
3093
+ return {
3094
+ result: {
3095
+ error: "OOD/SOLID 契约仍存在硬失败,不得交付",
3096
+ diagnostic_code: TOOL_DIAGNOSTIC_CODES.oodDeliveryBlock,
3097
+ findings: ctx.ood_solid_findings,
3098
+ recovery: "按 finding 修复职责或依赖边界,并重新执行 sf_review 与 sf_verify",
3099
+ },
3100
+ };
3101
+ }
3102
+ const backendModule = await lazyBackendImplementation();
3103
+ if (backendModule.hasBlockingBackendFindings(ctx.backend_implementation_findings ?? [])) {
3104
+ return {
3105
+ result: {
3106
+ error: "后端实现工程契约仍存在硬失败,不得交付",
3107
+ diagnostic_code: TOOL_DIAGNOSTIC_CODES.backendDeliveryBlock,
3108
+ findings: ctx.backend_implementation_findings,
3109
+ recovery: "按 finding 修复后端边界、安全或一致性问题,并重新执行 sf_review 与 sf_verify",
3110
+ },
3111
+ };
3112
+ }
3113
+ // 问题六十八: 代码可维护性与可观测性 P0 阻断交付。
3114
+ const obsModule = await lazyCodeObservability();
3115
+ const obsDeliveryBlock = obsModule.evaluateDeliveryBlock(ctx.code_observability_findings ?? []);
3116
+ if (obsDeliveryBlock.blocked) {
3117
+ return {
3118
+ result: {
3119
+ error: `代码可维护性/可观测性存在阻断: ${obsDeliveryBlock.reason_zh}`,
3120
+ diagnostic_code: TOOL_DIAGNOSTIC_CODES.codeObservabilityFinding,
3121
+ findings: obsDeliveryBlock.blocking_findings,
3122
+ recovery: "按 finding 修复敏感信息泄漏、缺失日志或吞异常问题,并重新执行 sf_review 与 sf_verify",
3123
+ },
3124
+ };
3125
+ }
2794
3126
  // 产物状态门控: deliver 需要产物状态为 accepted 且有证据
2795
3127
  if (ctx.artifact_output) {
2796
3128
  const status = ctx.artifact_output.status;
@@ -3463,5 +3795,43 @@ export async function registerTools(server, deps) {
3463
3795
  result: { text: lines.join("\n") },
3464
3796
  };
3465
3797
  });
3798
+ // ── sf_navigation: 工作流导航 — 问题六十五 ──
3799
+ const NavigationSchema = {
3800
+ type: "object",
3801
+ properties: {
3802
+ project_path: { type: "string", description: "项目路径(可选,默认当前目录)" },
3803
+ },
3804
+ required: [],
3805
+ };
3806
+ registerSafeTool("sf_navigation", "查询工作流导航: 当前项目阶段、任务阶段、下一步操作和禁止操作。用于\"下一步\"\"继续\"\"现在能写代码吗\"等模糊推进意图。不得靠模型经验回答,必须调用此工具获取真实导航状态", NavigationSchema, async (args) => {
3807
+ const projectPath = args.project_path || config._projectPath || process.cwd();
3808
+ const { planNextAction } = await import("../../engine/next_action_planner.js");
3809
+ const plan = await planNextAction(projectPath);
3810
+ return {
3811
+ result: {
3812
+ project_stage: plan.project_stage,
3813
+ task_stage: plan.task_stage,
3814
+ current_task_id: plan.current_task_id,
3815
+ confidence: plan.confidence,
3816
+ stage_evidence: plan.stage_evidence,
3817
+ blocking_reasons: plan.blocking_reasons,
3818
+ stale_task: plan.stale_task,
3819
+ work_package: plan.work_package ? {
3820
+ id: plan.work_package.id,
3821
+ goal_zh: plan.work_package.goal_zh,
3822
+ description_zh: plan.work_package.description_zh,
3823
+ action: plan.work_package.action,
3824
+ tool_name: plan.work_package.tool_name,
3825
+ must_read: plan.work_package.must_read,
3826
+ forbidden_changes: plan.work_package.forbidden_changes,
3827
+ expected_outputs: plan.work_package.expected_outputs,
3828
+ acceptance_commands: plan.work_package.acceptance_commands,
3829
+ } : null,
3830
+ disallowed_actions: plan.disallowed_actions,
3831
+ recommended_commands: plan.recommended_commands,
3832
+ recommended_prompt_zh: plan.recommended_prompt_zh,
3833
+ },
3834
+ };
3835
+ });
3466
3836
  }
3467
3837
  //# sourceMappingURL=tools.js.map