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
@@ -35,6 +35,7 @@ const KNOWN_REGISTRIES = new Set([
35
35
  "decision_contract",
36
36
  "dual_layer_mechanism_registry",
37
37
  "contract_registry",
38
+ "explicit_asset_registry",
38
39
  ]);
39
40
  // ── 契约到 LayerMap 的转换 ──
40
41
  function contractToLayerMap(c) {
@@ -1772,6 +1773,321 @@ const MECHANISM_CONTRACTS = [
1772
1773
  },
1773
1774
  status: "dual_layer_enforced",
1774
1775
  },
1776
+ // ── 38. 全生命周期工作流导航契约 ──
1777
+ {
1778
+ mechanism_id: "mc-workflow-navigation-contract",
1779
+ mechanism_name: "全生命周期工作流导航契约",
1780
+ owner_issue_id: "问题六十五",
1781
+ priority: "P0",
1782
+ template_layer: {
1783
+ required: true,
1784
+ assets: [
1785
+ { path: "templates/knowledge/rules/工作流导航契约规则.md", asset_kind: "knowledge_rule", consumption_mode: "required" },
1786
+ { path: "templates/knowledge/procedures/全生命周期工作流导航.md", asset_kind: "knowledge_procedure", consumption_mode: "required" },
1787
+ ],
1788
+ injected_routes: ["*"],
1789
+ injected_workflows: ["sf_navigation", "soloforge_next", "soloforge_stage"],
1790
+ target_hosts: ["claude_code"],
1791
+ language_policy: "zh_first",
1792
+ },
1793
+ enforcement_layer: {
1794
+ required: true,
1795
+ enforcers: ["src/engine/next_action_planner.ts", "src/engine/stale_current_task_detector.ts"],
1796
+ registries: ["dual_layer_mechanism_registry", "mechanism_contract_registry", "consumable_asset_registry"],
1797
+ entrypoints: ["planNextAction", "detectStaleCurrentTask"],
1798
+ state_effects: ["navigation_snapshot", "stale_task_resolution"],
1799
+ hard_fail_conditions: ["设计审计失败仍编码", "配置未确认仍任务", "陈旧任务阻塞新任务", "repair directive 未清零仍交付"],
1800
+ degradation_behavior: "降级为 advisory,不阻断",
1801
+ },
1802
+ evidence_layer: {
1803
+ outputs: ["NextActionPlan", "ExecutableWorkPackage", "StaleCurrentTaskResult"],
1804
+ reports: ["navigation_snapshot"],
1805
+ diagnostic_codes: ["SF-NAV-6501", "SF-NAV-6502", "SF-NAV-6503", "SF-NAV-6504"],
1806
+ task_context_facts: [],
1807
+ },
1808
+ verification_layer: {
1809
+ tests: ["tests/engine/workflow_navigation_contract.test.ts", "tests/bin/cli_next_action.test.ts", "tests/adapters/workflow_navigation_mainpath.test.ts"],
1810
+ runtime_checks: ["validate-release 工作流导航行为验证"],
1811
+ regression_cases: ["未初始化 → sf_init", "陈旧任务 → resume/archive/start_new", "设计失败 → 禁止编码"],
1812
+ drift_checks: ["adapter prompt 包含导航规则", "status/validate 消费同一模块"],
1813
+ },
1814
+ status: "dual_layer_enforced",
1815
+ },
1816
+ {
1817
+ mechanism_id: "mc-ood-solid-contract",
1818
+ mechanism_name: "OOD 与 SOLID 实现契约",
1819
+ owner_issue_id: "问题六十六",
1820
+ priority: "P1",
1821
+ template_layer: {
1822
+ required: true,
1823
+ assets: [
1824
+ { path: "templates/knowledge/rules/OOD与SOLID设计规则.md", asset_kind: "knowledge_rule", consumption_mode: "required" },
1825
+ { path: "templates/knowledge/procedures/OOD设计工作流.md", asset_kind: "knowledge_procedure", consumption_mode: "required" },
1826
+ { path: "templates/knowledge/review_rules/SOLID代码审查规则.md", asset_kind: "review_rule", consumption_mode: "required" },
1827
+ { path: "templates/knowledge/acceptance_templates/OOD设计摘要模版.md", asset_kind: "acceptance_template", consumption_mode: "supporting" },
1828
+ { path: "templates/patterns/SOLID设计规范.md", asset_kind: "pattern", consumption_mode: "supporting" },
1829
+ ],
1830
+ injected_routes: ["code_change", "artifact_generation", "multi_stage_plan"],
1831
+ injected_workflows: ["sf_expand", "sf_review", "sf_verify", "sf_deliver"],
1832
+ target_hosts: ["claude_code"],
1833
+ language_policy: "zh_first",
1834
+ },
1835
+ enforcement_layer: {
1836
+ required: true,
1837
+ enforcers: ["src/engine/ood_solid_contract.ts", "src/adapters/claude_code/tools.ts"],
1838
+ registries: ["dual_layer_mechanism_registry", "mechanism_contract_registry", "consumable_asset_registry"],
1839
+ entrypoints: ["evaluateOodDesignGate", "reviewSolidCode", "hasBlockingSolidFindings"],
1840
+ state_effects: ["ood_solid_summary", "ood_solid_findings"],
1841
+ hard_fail_conditions: ["复杂编码无设计摘要", "SRP/LSP/ISP/DIP 硬失败仍交付"],
1842
+ degradation_behavior: "简单任务不触发;低风险过度设计只警告",
1843
+ },
1844
+ evidence_layer: {
1845
+ outputs: ["OodDesignSummary", "SolidReviewFinding"],
1846
+ reports: ["ood_solid_findings"],
1847
+ diagnostic_codes: ["SF-OOD-6601", "SF-OOD-6602"],
1848
+ task_context_facts: ["ood_solid_summary", "ood_solid_findings"],
1849
+ },
1850
+ verification_layer: {
1851
+ tests: ["tests/engine/ood_solid_contract.test.ts", "tests/adapters/implementation_contract_mainpath.test.ts"],
1852
+ runtime_checks: ["validate-release OOD/SOLID 行为验证"],
1853
+ regression_cases: ["复杂服务无摘要 → blocked", "Controller 业务逻辑 → blocked", "低风险修改 → not_applicable"],
1854
+ drift_checks: ["模板资产与工具消费一致"],
1855
+ },
1856
+ status: "dual_layer_enforced",
1857
+ },
1858
+ {
1859
+ mechanism_id: "mc-backend-implementation-contract",
1860
+ mechanism_name: "后端实现工程契约",
1861
+ owner_issue_id: "问题六十七",
1862
+ priority: "P1",
1863
+ template_layer: {
1864
+ required: true,
1865
+ assets: [
1866
+ { path: "templates/knowledge/rules/后端实现工程契约规则.md", asset_kind: "knowledge_rule", consumption_mode: "required" },
1867
+ { path: "templates/knowledge/procedures/后端接口实现工作流.md", asset_kind: "knowledge_procedure", consumption_mode: "required" },
1868
+ { path: "templates/knowledge/review_rules/后端实现工程审查规则.md", asset_kind: "review_rule", consumption_mode: "required" },
1869
+ { path: "templates/knowledge/acceptance_templates/后端实现验收清单.md", asset_kind: "acceptance_template", consumption_mode: "supporting" },
1870
+ { path: "templates/patterns/后端实现工程规范.md", asset_kind: "pattern", consumption_mode: "supporting" },
1871
+ ],
1872
+ injected_routes: ["code_change", "artifact_generation", "multi_stage_plan"],
1873
+ injected_workflows: ["sf_expand", "sf_review", "sf_verify", "sf_deliver"],
1874
+ target_hosts: ["claude_code"],
1875
+ language_policy: "zh_first",
1876
+ },
1877
+ enforcement_layer: {
1878
+ required: true,
1879
+ enforcers: ["src/engine/backend_implementation_contract.ts", "src/adapters/claude_code/tools.ts"],
1880
+ registries: ["dual_layer_mechanism_registry", "mechanism_contract_registry", "consumable_asset_registry"],
1881
+ entrypoints: ["evaluateBackendImplementationGate", "reviewBackendImplementationFiles", "hasBlockingBackendFindings"],
1882
+ state_effects: ["backend_implementation_work_package", "backend_implementation_findings"],
1883
+ hard_fail_conditions: ["后端编码无工程工作包", "实体暴露/无校验/事务外调/无幂等/无安全审计仍交付"],
1884
+ degradation_behavior: "非后端或低风险文本任务不触发",
1885
+ },
1886
+ evidence_layer: {
1887
+ outputs: ["BackendImplementationWorkPackage", "BackendImplementationFinding"],
1888
+ reports: ["backend_implementation_findings"],
1889
+ diagnostic_codes: ["SF-BACKEND-6701", "SF-BACKEND-6702"],
1890
+ task_context_facts: ["backend_implementation_work_package", "backend_implementation_findings"],
1891
+ },
1892
+ verification_layer: {
1893
+ tests: ["tests/engine/backend_implementation_contract.test.ts", "tests/adapters/implementation_contract_mainpath.test.ts"],
1894
+ runtime_checks: ["validate-release 后端工程契约行为验证"],
1895
+ regression_cases: ["API 实现无工作包 → blocked", "写接口无 DTO 校验 → blocked", "事务内外部调用 → blocked"],
1896
+ drift_checks: ["模板资产与工具消费一致"],
1897
+ },
1898
+ status: "dual_layer_enforced",
1899
+ },
1900
+ {
1901
+ mechanism_id: "mc-code-maintainability-observability-contract",
1902
+ mechanism_name: "代码可维护性与可观测性契约",
1903
+ owner_issue_id: "问题六十八",
1904
+ priority: "P1",
1905
+ template_layer: {
1906
+ required: true,
1907
+ assets: [
1908
+ { path: "templates/knowledge/rules/代码注释与日志契约规则.md", asset_kind: "knowledge_rule", consumption_mode: "required" },
1909
+ { path: "templates/knowledge/rules/敏感信息日志规则.md", asset_kind: "knowledge_rule", consumption_mode: "required" },
1910
+ { path: "templates/knowledge/review/代码可维护性与可观测性审查.md", asset_kind: "review_rule", consumption_mode: "required" },
1911
+ { path: "templates/knowledge/acceptance_templates/代码注释与日志验收模板.md", asset_kind: "acceptance_template", consumption_mode: "supporting" },
1912
+ ],
1913
+ injected_routes: ["code_change", "artifact_generation", "multi_stage_plan"],
1914
+ injected_workflows: ["sf_expand", "sf_review", "sf_verify", "sf_deliver"],
1915
+ target_hosts: ["claude_code"],
1916
+ language_policy: "zh_first",
1917
+ },
1918
+ enforcement_layer: {
1919
+ required: true,
1920
+ enforcers: ["src/engine/code_maintainability_observability_contract.ts", "src/adapters/claude_code/tools.ts"],
1921
+ registries: ["dual_layer_mechanism_registry", "mechanism_contract_registry", "consumable_asset_registry"],
1922
+ entrypoints: ["evaluateCodeObservabilityGate", "reviewCodeObservability", "detectSensitiveLogs", "hasBlockingObservabilityFindings"],
1923
+ state_effects: ["code_observability_work_package", "code_observability_findings"],
1924
+ hard_fail_conditions: [
1925
+ "敏感信息泄漏日志 (SF-OBS-6801)",
1926
+ "catch 吞异常无日志 (SF-OBS-6802)",
1927
+ "支付/金额/权限变更无日志 (SF-OBS-6803)",
1928
+ "数据修复/迁移无审计日志 (SF-OBS-6804)",
1929
+ "前端生产代码裸 console.log",
1930
+ ],
1931
+ degradation_behavior: "纯样式、文案、简单 getter/setter、测试 fixture、低风险只读查询不触发",
1932
+ },
1933
+ evidence_layer: {
1934
+ outputs: ["CodeObservabilityWorkPackage", "CodeObservabilityFinding"],
1935
+ reports: ["code_observability_findings"],
1936
+ diagnostic_codes: ["SF-OBS-6801", "SF-OBS-6802", "SF-OBS-6803", "SF-OBS-6804"],
1937
+ task_context_facts: ["code_observability_work_package", "code_observability_findings"],
1938
+ },
1939
+ verification_layer: {
1940
+ tests: ["tests/engine/code_maintainability_observability_contract.test.ts", "tests/adapters/implementation_contract_mainpath.test.ts"],
1941
+ runtime_checks: ["validate-release 代码可维护性与可观测性行为验证"],
1942
+ regression_cases: ["支付无日志 → blocked", "敏感信息进日志 → blocked", "catch 吞异常 → blocked", "简单 getter 不误拦 → not_applicable"],
1943
+ drift_checks: ["模板资产与工具消费一致"],
1944
+ },
1945
+ status: "dual_layer_enforced",
1946
+ },
1947
+ {
1948
+ mechanism_id: "mc-mechanism-health",
1949
+ mechanism_name: "机制运行时健康度",
1950
+ owner_issue_id: "Q5长期机制化",
1951
+ priority: "P1",
1952
+ template_layer: {
1953
+ required: true,
1954
+ assets: [{ path: "templates/knowledge/rules/机制自治理规则.md", asset_kind: "knowledge_rule", consumption_mode: "required" }],
1955
+ injected_routes: ["verification", "operation"],
1956
+ injected_workflows: ["validate-mechanisms", "validate-release"],
1957
+ target_hosts: ["claude_code"],
1958
+ language_policy: "zh_first",
1959
+ },
1960
+ enforcement_layer: {
1961
+ required: true,
1962
+ enforcers: ["src/engine/mechanism_health_check.ts"],
1963
+ registries: ["dual_layer_mechanism_registry", "mechanism_contract_registry", "explicit_asset_registry"],
1964
+ entrypoints: ["runFullHealthCheck", "detectLazyDeadImports", "detectUnconsumedMechanismIds"],
1965
+ state_effects: [],
1966
+ hard_fail_conditions: ["lazy import 未调用", "机制资产未注册", "机制身份未消费"],
1967
+ degradation_behavior: "离线治理机制,仅发布和维护命令阻断",
1968
+ },
1969
+ evidence_layer: {
1970
+ outputs: ["MechanismHealthReport"],
1971
+ reports: ["mechanism_health_report"],
1972
+ diagnostic_codes: [],
1973
+ task_context_facts: [],
1974
+ },
1975
+ verification_layer: {
1976
+ tests: ["tests/engine/mechanism_health_check.test.ts"],
1977
+ runtime_checks: ["validate-release 历史问题长期机制化行为验证"],
1978
+ regression_cases: ["lazy import 未调用 → hard_fail", "机制资产缺失 → hard_fail"],
1979
+ drift_checks: ["注册表与消费路径一致"],
1980
+ },
1981
+ status: "dual_layer_enforced",
1982
+ },
1983
+ {
1984
+ mechanism_id: "mc-config-write-boundary",
1985
+ mechanism_name: "配置落盘边界",
1986
+ owner_issue_id: "Q6长期机制化",
1987
+ priority: "P2",
1988
+ template_layer: {
1989
+ required: true,
1990
+ assets: [{ path: "templates/knowledge/rules/配置落盘边界规则.md", asset_kind: "knowledge_rule", consumption_mode: "required" }],
1991
+ injected_routes: ["operation"],
1992
+ injected_workflows: ["init", "sync-templates"],
1993
+ target_hosts: ["claude_code"],
1994
+ language_policy: "zh_first",
1995
+ },
1996
+ enforcement_layer: {
1997
+ required: true,
1998
+ enforcers: ["src/engine/config_write_boundary.ts"],
1999
+ registries: ["mechanism_contract_registry", "explicit_asset_registry"],
2000
+ entrypoints: ["classifyConfigContext", "isWriteAllowed", "validateWriteBoundary"],
2001
+ state_effects: [],
2002
+ hard_fail_conditions: ["运行时推断自动落盘", "已有项目未确认写入"],
2003
+ degradation_behavior: "空项目初始化允许,已有项目需要确认",
2004
+ },
2005
+ evidence_layer: {
2006
+ outputs: ["ConfigWriteDecision"],
2007
+ reports: ["write_boundary_violation"],
2008
+ diagnostic_codes: [],
2009
+ task_context_facts: [],
2010
+ },
2011
+ verification_layer: {
2012
+ tests: ["tests/engine/config_write_boundary.test.ts"],
2013
+ runtime_checks: ["validate-release 历史问题长期机制化行为验证"],
2014
+ regression_cases: ["runtime inference 写配置 → blocked", "greenfield init → allowed"],
2015
+ drift_checks: ["CLI 写入路径与边界一致"],
2016
+ },
2017
+ status: "dual_layer_enforced",
2018
+ },
2019
+ {
2020
+ mechanism_id: "mc-knowledge-governance",
2021
+ mechanism_name: "知识治理统一入口",
2022
+ owner_issue_id: "Q7/Q10/Q14/Q21/Q41长期机制化",
2023
+ priority: "P0",
2024
+ template_layer: {
2025
+ required: true,
2026
+ assets: [{ path: "templates/knowledge/rules/知识治理规则.md", asset_kind: "knowledge_rule", consumption_mode: "required" }],
2027
+ injected_routes: ["verification", "operation", "knowledge_update"],
2028
+ injected_workflows: ["validate", "sync-templates", "validate-release"],
2029
+ target_hosts: ["claude_code"],
2030
+ language_policy: "zh_first",
2031
+ },
2032
+ enforcement_layer: {
2033
+ required: true,
2034
+ enforcers: ["src/engine/knowledge_governance_gate.ts"],
2035
+ registries: ["mechanism_contract_registry", "explicit_asset_registry"],
2036
+ entrypoints: ["runKnowledgeGovernanceCheck", "checkSemanticCompliance", "checkEvolutionEvidence", "checkDocumentationGovernance"],
2037
+ state_effects: [],
2038
+ hard_fail_conditions: ["知识晋级无证据", "中文语义污染", "设计文档承载未验证事实"],
2039
+ degradation_behavior: "validate 输出治理报告,apply 与 release gate 执行阻断",
2040
+ },
2041
+ evidence_layer: {
2042
+ outputs: ["KnowledgeGovernanceReport"],
2043
+ reports: ["knowledge_governance_report"],
2044
+ diagnostic_codes: [],
2045
+ task_context_facts: [],
2046
+ },
2047
+ verification_layer: {
2048
+ tests: ["tests/engine/knowledge_governance_gate.test.ts"],
2049
+ runtime_checks: ["validate-release 历史问题长期机制化行为验证"],
2050
+ regression_cases: ["知识晋级无证据 → hard_fail", "中文语义污染 → warning"],
2051
+ drift_checks: ["知识治理入口调用下游模块"],
2052
+ },
2053
+ status: "dual_layer_enforced",
2054
+ },
2055
+ {
2056
+ mechanism_id: "mc-log-governance",
2057
+ mechanism_name: "日志治理与用户输出纯净",
2058
+ owner_issue_id: "Q59/Q29长期机制化",
2059
+ priority: "P0",
2060
+ template_layer: {
2061
+ required: true,
2062
+ assets: [{ path: "templates/knowledge/rules/日志治理规则.md", asset_kind: "knowledge_rule", consumption_mode: "required" }],
2063
+ injected_routes: ["verification", "operation"],
2064
+ injected_workflows: ["sf_learn", "sf_deliver", "validate-release"],
2065
+ target_hosts: ["claude_code"],
2066
+ language_policy: "zh_first",
2067
+ },
2068
+ enforcement_layer: {
2069
+ required: true,
2070
+ enforcers: ["src/engine/log_governance.ts"],
2071
+ registries: ["mechanism_contract_registry", "explicit_asset_registry"],
2072
+ entrypoints: ["enforceLogGovernance", "evaluateFeedbackOutputQuality", "assessOutputNoise"],
2073
+ state_effects: [],
2074
+ hard_fail_conditions: ["内部噪音输出", "JSON stdout 污染", "直接 console 输出"],
2075
+ degradation_behavior: "默认不影响正常输出,仅阻断噪音和污染",
2076
+ },
2077
+ evidence_layer: {
2078
+ outputs: ["LogGovernanceReport"],
2079
+ reports: ["log_governance_report"],
2080
+ diagnostic_codes: [],
2081
+ task_context_facts: [],
2082
+ },
2083
+ verification_layer: {
2084
+ tests: ["tests/engine/log_governance.test.ts"],
2085
+ runtime_checks: ["validate-release 历史问题长期机制化行为验证"],
2086
+ regression_cases: ["内部噪音 → hard_fail", "正常中文输出 → pass"],
2087
+ drift_checks: ["logger 与输出治理一致"],
2088
+ },
2089
+ status: "dual_layer_enforced",
2090
+ },
1775
2091
  ];
1776
2092
  // ── 已废弃机制 ID 别名映射 ──
1777
2093
  // 旧 ID → 正式 ID。旧 ID 在 MC 中标记为 deprecated,模板/知识资产必须指向正式 ID。
@@ -2042,7 +2358,8 @@ export function validateMechanismLayerMaps(maps = MECHANISM_CONTRACTS.map(contra
2042
2358
  const workflowMechanismIds = new Set(listWorkflowContracts().flatMap((w) => w.required_mechanisms));
2043
2359
  for (const ce of m.code_enforcers) {
2044
2360
  const ceNorm = ce.replace(/\\/g, "/");
2045
- const isKnown = knownMechanismIds.size > 0 && listMechanismContracts().some((mc) => mc.owner_module.replace(/\\/g, "/") === ceNorm);
2361
+ const isKnown = knownMechanismIds.size > 0 && listMechanismContracts().some((mc) => mc.owner_module.replace(/\\/g, "/") === ceNorm
2362
+ || (mc.owner_files ?? []).some((ownerFile) => ownerFile.replace(/\\/g, "/") === ceNorm));
2046
2363
  const isCapKnown = knownCapabilityIds.size > 0 && getAllCapabilities().some((cap) => cap.code_files.some((cf) => cf.replace(/\\/g, "/") === ceNorm));
2047
2364
  // 检查此机制是否被任何工作流的 required_mechanisms 引用
2048
2365
  const isWorkflowKnown = workflowMechanismIds.has(m.mechanism_id);