soloforge 1.1.45 → 1.1.46

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 (269) hide show
  1. package/README.md +3 -3
  2. package/dist/context/contracts/lifecycle_knowledge_contract.d.ts.map +1 -1
  3. package/dist/context/contracts/lifecycle_knowledge_contract.js +2 -2
  4. package/dist/context/contracts/lifecycle_knowledge_contract.js.map +1 -1
  5. package/dist/core/task_context/manager.d.ts +0 -8
  6. package/dist/core/task_context/manager.d.ts.map +1 -1
  7. package/dist/core/task_context/manager.js +1 -19
  8. package/dist/core/task_context/manager.js.map +1 -1
  9. package/dist/core/task_context/state_fact_classifier.d.ts +0 -8
  10. package/dist/core/task_context/state_fact_classifier.d.ts.map +1 -1
  11. package/dist/core/task_context/state_fact_classifier.js +0 -36
  12. package/dist/core/task_context/state_fact_classifier.js.map +1 -1
  13. package/dist/domain/contracts/design_artifact_pack.d.ts +0 -1
  14. package/dist/domain/contracts/design_artifact_pack.d.ts.map +1 -1
  15. package/dist/domain/contracts/design_artifact_pack.js +1 -4
  16. package/dist/domain/contracts/design_artifact_pack.js.map +1 -1
  17. package/dist/domain/index.d.ts +1 -1
  18. package/dist/domain/index.d.ts.map +1 -1
  19. package/dist/domain/registry.d.ts +2 -2
  20. package/dist/domain/registry.d.ts.map +1 -1
  21. package/dist/domain/types.d.ts +1 -12
  22. package/dist/domain/types.d.ts.map +1 -1
  23. package/dist/domain/types.js +3 -0
  24. package/dist/domain/types.js.map +1 -1
  25. package/dist/gate/contracts/capability_registry.d.ts.map +1 -1
  26. package/dist/gate/contracts/capability_registry.js +0 -26
  27. package/dist/gate/contracts/capability_registry.js.map +1 -1
  28. package/dist/gate/contracts/control_plane_contract.d.ts +1 -1
  29. package/dist/gate/contracts/control_plane_contract.d.ts.map +1 -1
  30. package/dist/gate/contracts/control_plane_contract.js +1 -10
  31. package/dist/gate/contracts/control_plane_contract.js.map +1 -1
  32. package/dist/gate/contracts/tool_invocation_contract_registry.d.ts +1 -0
  33. package/dist/gate/contracts/tool_invocation_contract_registry.d.ts.map +1 -1
  34. package/dist/gate/contracts/tool_invocation_contract_registry.js +1 -1
  35. package/dist/gate/contracts/tool_invocation_contract_registry.js.map +1 -1
  36. package/dist/gate/index.d.ts +0 -2
  37. package/dist/gate/index.d.ts.map +1 -1
  38. package/dist/gate/index.js +0 -1
  39. package/dist/gate/index.js.map +1 -1
  40. package/dist/server/tools/index.d.ts.map +1 -1
  41. package/dist/server/tools/index.js +1 -3
  42. package/dist/server/tools/index.js.map +1 -1
  43. package/dist/server/tools/lazy_loaders.d.ts +0 -23
  44. package/dist/server/tools/lazy_loaders.d.ts.map +1 -1
  45. package/dist/server/tools/lazy_loaders.js +2 -33
  46. package/dist/server/tools/lazy_loaders.js.map +1 -1
  47. package/dist/server/tools/middleware.d.ts +2 -5
  48. package/dist/server/tools/middleware.d.ts.map +1 -1
  49. package/dist/server/tools/middleware.js +3 -33
  50. package/dist/server/tools/middleware.js.map +1 -1
  51. package/dist/server/tools/sf_task.js +2 -7
  52. package/dist/server/tools/sf_task.js.map +1 -1
  53. package/dist/server/tools/types.d.ts +0 -2
  54. package/dist/server/tools/types.d.ts.map +1 -1
  55. package/dist/types/pipeline_types.d.ts +1 -9
  56. package/dist/types/pipeline_types.d.ts.map +1 -1
  57. package/dist/verify/audit/verifier.d.ts.map +1 -1
  58. package/dist/verify/audit/verifier.js +0 -33
  59. package/dist/verify/audit/verifier.js.map +1 -1
  60. package/dist/verify/index.d.ts +1 -4
  61. package/dist/verify/index.d.ts.map +1 -1
  62. package/dist/verify/index.js +0 -3
  63. package/dist/verify/index.js.map +1 -1
  64. package/dist/verify/types.d.ts +0 -21
  65. package/dist/verify/types.d.ts.map +1 -1
  66. package/package.json +1 -1
  67. package/templates/shared//345/206/263/347/255/226/347/275/221/345/205/263.md +7 -21
  68. package/dist/context/engine/dependency_scanner.d.ts +0 -23
  69. package/dist/context/engine/dependency_scanner.d.ts.map +0 -1
  70. package/dist/context/engine/dependency_scanner.js +0 -309
  71. package/dist/context/engine/dependency_scanner.js.map +0 -1
  72. package/dist/context/engine/exploration.d.ts +0 -194
  73. package/dist/context/engine/exploration.d.ts.map +0 -1
  74. package/dist/context/engine/exploration.js +0 -712
  75. package/dist/context/engine/exploration.js.map +0 -1
  76. package/dist/context/knowledge/knowledge_acceptance_registry.d.ts +0 -42
  77. package/dist/context/knowledge/knowledge_acceptance_registry.d.ts.map +0 -1
  78. package/dist/context/knowledge/knowledge_acceptance_registry.js +0 -249
  79. package/dist/context/knowledge/knowledge_acceptance_registry.js.map +0 -1
  80. package/dist/context/knowledge/knowledge_scenario_registry.d.ts +0 -26
  81. package/dist/context/knowledge/knowledge_scenario_registry.d.ts.map +0 -1
  82. package/dist/context/knowledge/knowledge_scenario_registry.js +0 -267
  83. package/dist/context/knowledge/knowledge_scenario_registry.js.map +0 -1
  84. package/dist/context/knowledge/knowledge_sovereignty.d.ts +0 -65
  85. package/dist/context/knowledge/knowledge_sovereignty.d.ts.map +0 -1
  86. package/dist/context/knowledge/knowledge_sovereignty.js +0 -199
  87. package/dist/context/knowledge/knowledge_sovereignty.js.map +0 -1
  88. package/dist/context/team_awareness.d.ts +0 -42
  89. package/dist/context/team_awareness.d.ts.map +0 -1
  90. package/dist/context/team_awareness.js +0 -154
  91. package/dist/context/team_awareness.js.map +0 -1
  92. package/dist/context/templates/template_asset_visibility.d.ts +0 -116
  93. package/dist/context/templates/template_asset_visibility.d.ts.map +0 -1
  94. package/dist/context/templates/template_asset_visibility.js +0 -310
  95. package/dist/context/templates/template_asset_visibility.js.map +0 -1
  96. package/dist/gate/conflict_gate.d.ts +0 -53
  97. package/dist/gate/conflict_gate.d.ts.map +0 -1
  98. package/dist/gate/conflict_gate.js +0 -96
  99. package/dist/gate/conflict_gate.js.map +0 -1
  100. package/dist/gate/contracts/capability_action_advisor.d.ts +0 -34
  101. package/dist/gate/contracts/capability_action_advisor.d.ts.map +0 -1
  102. package/dist/gate/contracts/capability_action_advisor.js +0 -165
  103. package/dist/gate/contracts/capability_action_advisor.js.map +0 -1
  104. package/dist/gate/contracts/capability_state_store.d.ts +0 -121
  105. package/dist/gate/contracts/capability_state_store.d.ts.map +0 -1
  106. package/dist/gate/contracts/capability_state_store.js +0 -188
  107. package/dist/gate/contracts/capability_state_store.js.map +0 -1
  108. package/dist/gate/contracts/contract_guard.d.ts +0 -50
  109. package/dist/gate/contracts/contract_guard.d.ts.map +0 -1
  110. package/dist/gate/contracts/contract_guard.js +0 -611
  111. package/dist/gate/contracts/contract_guard.js.map +0 -1
  112. package/dist/gate/contracts/escape_report.d.ts +0 -103
  113. package/dist/gate/contracts/escape_report.d.ts.map +0 -1
  114. package/dist/gate/contracts/escape_report.js +0 -145
  115. package/dist/gate/contracts/escape_report.js.map +0 -1
  116. package/dist/gate/feasibility_checker.d.ts +0 -27
  117. package/dist/gate/feasibility_checker.d.ts.map +0 -1
  118. package/dist/gate/feasibility_checker.js +0 -114
  119. package/dist/gate/feasibility_checker.js.map +0 -1
  120. package/dist/gate/migration_guard.d.ts +0 -22
  121. package/dist/gate/migration_guard.d.ts.map +0 -1
  122. package/dist/gate/migration_guard.js +0 -277
  123. package/dist/gate/migration_guard.js.map +0 -1
  124. package/dist/gate/scope_lease.d.ts +0 -94
  125. package/dist/gate/scope_lease.d.ts.map +0 -1
  126. package/dist/gate/scope_lease.js +0 -180
  127. package/dist/gate/scope_lease.js.map +0 -1
  128. package/dist/git/git_deps.d.ts +0 -85
  129. package/dist/git/git_deps.d.ts.map +0 -1
  130. package/dist/git/git_deps.js +0 -22
  131. package/dist/git/git_deps.js.map +0 -1
  132. package/dist/git/operations.d.ts +0 -173
  133. package/dist/git/operations.d.ts.map +0 -1
  134. package/dist/git/operations.js +0 -350
  135. package/dist/git/operations.js.map +0 -1
  136. package/dist/server/tools/gate_engine.d.ts +0 -17
  137. package/dist/server/tools/gate_engine.d.ts.map +0 -1
  138. package/dist/server/tools/gate_engine.js +0 -17
  139. package/dist/server/tools/gate_engine.js.map +0 -1
  140. package/dist/server/tools/middleware/budget_check.d.ts +0 -35
  141. package/dist/server/tools/middleware/budget_check.d.ts.map +0 -1
  142. package/dist/server/tools/middleware/budget_check.js +0 -69
  143. package/dist/server/tools/middleware/budget_check.js.map +0 -1
  144. package/dist/shared/contracts/contract_registry/builtin_contracts_core.d.ts +0 -16
  145. package/dist/shared/contracts/contract_registry/builtin_contracts_core.d.ts.map +0 -1
  146. package/dist/shared/contracts/contract_registry/builtin_contracts_core.js +0 -306
  147. package/dist/shared/contracts/contract_registry/builtin_contracts_core.js.map +0 -1
  148. package/dist/shared/contracts/contract_registry/builtin_contracts_core_2.d.ts +0 -16
  149. package/dist/shared/contracts/contract_registry/builtin_contracts_core_2.d.ts.map +0 -1
  150. package/dist/shared/contracts/contract_registry/builtin_contracts_core_2.js +0 -304
  151. package/dist/shared/contracts/contract_registry/builtin_contracts_core_2.js.map +0 -1
  152. package/dist/shared/contracts/contract_registry/builtin_contracts_extended.d.ts +0 -16
  153. package/dist/shared/contracts/contract_registry/builtin_contracts_extended.d.ts.map +0 -1
  154. package/dist/shared/contracts/contract_registry/builtin_contracts_extended.js +0 -434
  155. package/dist/shared/contracts/contract_registry/builtin_contracts_extended.js.map +0 -1
  156. package/dist/shared/contracts/contract_registry/index.d.ts +0 -8
  157. package/dist/shared/contracts/contract_registry/index.d.ts.map +0 -1
  158. package/dist/shared/contracts/contract_registry/index.js +0 -7
  159. package/dist/shared/contracts/contract_registry/index.js.map +0 -1
  160. package/dist/shared/contracts/contract_registry/registry.d.ts +0 -62
  161. package/dist/shared/contracts/contract_registry/registry.d.ts.map +0 -1
  162. package/dist/shared/contracts/contract_registry/registry.js +0 -191
  163. package/dist/shared/contracts/contract_registry/registry.js.map +0 -1
  164. package/dist/shared/contracts/contract_registry/registry_internal.d.ts +0 -19
  165. package/dist/shared/contracts/contract_registry/registry_internal.d.ts.map +0 -1
  166. package/dist/shared/contracts/contract_registry/registry_internal.js +0 -54
  167. package/dist/shared/contracts/contract_registry/registry_internal.js.map +0 -1
  168. package/dist/shared/contracts/contract_registry/types.d.ts +0 -47
  169. package/dist/shared/contracts/contract_registry/types.d.ts.map +0 -1
  170. package/dist/shared/contracts/contract_registry/types.js +0 -5
  171. package/dist/shared/contracts/contract_registry/types.js.map +0 -1
  172. package/dist/shared/contracts/contract_registry/validation.d.ts +0 -25
  173. package/dist/shared/contracts/contract_registry/validation.d.ts.map +0 -1
  174. package/dist/shared/contracts/contract_registry/validation.js +0 -363
  175. package/dist/shared/contracts/contract_registry/validation.js.map +0 -1
  176. package/dist/shared/llm_gateway.d.ts +0 -186
  177. package/dist/shared/llm_gateway.d.ts.map +0 -1
  178. package/dist/shared/llm_gateway.js +0 -393
  179. package/dist/shared/llm_gateway.js.map +0 -1
  180. package/dist/verify/audit/audit_sampler.d.ts +0 -29
  181. package/dist/verify/audit/audit_sampler.d.ts.map +0 -1
  182. package/dist/verify/audit/audit_sampler.js +0 -42
  183. package/dist/verify/audit/audit_sampler.js.map +0 -1
  184. package/dist/verify/audit/debt_reporter.d.ts +0 -22
  185. package/dist/verify/audit/debt_reporter.d.ts.map +0 -1
  186. package/dist/verify/audit/debt_reporter.js +0 -107
  187. package/dist/verify/audit/debt_reporter.js.map +0 -1
  188. package/dist/verify/audit/debugger.d.ts +0 -25
  189. package/dist/verify/audit/debugger.d.ts.map +0 -1
  190. package/dist/verify/audit/debugger.js +0 -429
  191. package/dist/verify/audit/debugger.js.map +0 -1
  192. package/dist/verify/audit/degradation.d.ts +0 -62
  193. package/dist/verify/audit/degradation.d.ts.map +0 -1
  194. package/dist/verify/audit/degradation.js +0 -78
  195. package/dist/verify/audit/degradation.js.map +0 -1
  196. package/dist/verify/audit/developer_sovereignty.d.ts +0 -29
  197. package/dist/verify/audit/developer_sovereignty.d.ts.map +0 -1
  198. package/dist/verify/audit/developer_sovereignty.js +0 -137
  199. package/dist/verify/audit/developer_sovereignty.js.map +0 -1
  200. package/dist/verify/audit/failure_report.d.ts +0 -76
  201. package/dist/verify/audit/failure_report.d.ts.map +0 -1
  202. package/dist/verify/audit/failure_report.js +0 -145
  203. package/dist/verify/audit/failure_report.js.map +0 -1
  204. package/dist/verify/audit/governance_report.d.ts +0 -110
  205. package/dist/verify/audit/governance_report.d.ts.map +0 -1
  206. package/dist/verify/audit/governance_report.js +0 -194
  207. package/dist/verify/audit/governance_report.js.map +0 -1
  208. package/dist/verify/audit/mutation_audit.d.ts +0 -40
  209. package/dist/verify/audit/mutation_audit.d.ts.map +0 -1
  210. package/dist/verify/audit/mutation_audit.js +0 -154
  211. package/dist/verify/audit/mutation_audit.js.map +0 -1
  212. package/dist/verify/audit/risk_sampler.d.ts +0 -44
  213. package/dist/verify/audit/risk_sampler.d.ts.map +0 -1
  214. package/dist/verify/audit/risk_sampler.js +0 -80
  215. package/dist/verify/audit/risk_sampler.js.map +0 -1
  216. package/dist/verify/audit/runtime_safety.d.ts +0 -89
  217. package/dist/verify/audit/runtime_safety.d.ts.map +0 -1
  218. package/dist/verify/audit/runtime_safety.js +0 -209
  219. package/dist/verify/audit/runtime_safety.js.map +0 -1
  220. package/dist/verify/audit/semantic_evidence.d.ts +0 -36
  221. package/dist/verify/audit/semantic_evidence.d.ts.map +0 -1
  222. package/dist/verify/audit/semantic_evidence.js +0 -90
  223. package/dist/verify/audit/semantic_evidence.js.map +0 -1
  224. package/dist/verify/audit/test_generator.d.ts +0 -23
  225. package/dist/verify/audit/test_generator.d.ts.map +0 -1
  226. package/dist/verify/audit/test_generator.js +0 -278
  227. package/dist/verify/audit/test_generator.js.map +0 -1
  228. package/dist/verify/audit/test_quality.d.ts +0 -49
  229. package/dist/verify/audit/test_quality.d.ts.map +0 -1
  230. package/dist/verify/audit/test_quality.js +0 -684
  231. package/dist/verify/audit/test_quality.js.map +0 -1
  232. package/dist/verify/change_coordinator.d.ts +0 -45
  233. package/dist/verify/change_coordinator.d.ts.map +0 -1
  234. package/dist/verify/change_coordinator.js +0 -168
  235. package/dist/verify/change_coordinator.js.map +0 -1
  236. package/dist/verify/contracts/decision_contract.d.ts +0 -51
  237. package/dist/verify/contracts/decision_contract.d.ts.map +0 -1
  238. package/dist/verify/contracts/decision_contract.js +0 -70
  239. package/dist/verify/contracts/decision_contract.js.map +0 -1
  240. package/dist/verify/contracts/mechanism_contract_registry/contracts-audit.d.ts +0 -17
  241. package/dist/verify/contracts/mechanism_contract_registry/contracts-audit.d.ts.map +0 -1
  242. package/dist/verify/contracts/mechanism_contract_registry/contracts-audit.js +0 -428
  243. package/dist/verify/contracts/mechanism_contract_registry/contracts-audit.js.map +0 -1
  244. package/dist/verify/contracts/mechanism_contract_registry/contracts-governance.d.ts +0 -17
  245. package/dist/verify/contracts/mechanism_contract_registry/contracts-governance.d.ts.map +0 -1
  246. package/dist/verify/contracts/mechanism_contract_registry/contracts-governance.js +0 -429
  247. package/dist/verify/contracts/mechanism_contract_registry/contracts-governance.js.map +0 -1
  248. package/dist/verify/contracts/mechanism_contract_registry/contracts-pipeline.d.ts +0 -17
  249. package/dist/verify/contracts/mechanism_contract_registry/contracts-pipeline.d.ts.map +0 -1
  250. package/dist/verify/contracts/mechanism_contract_registry/contracts-pipeline.js +0 -194
  251. package/dist/verify/contracts/mechanism_contract_registry/contracts-pipeline.js.map +0 -1
  252. package/dist/verify/contracts/mechanism_contract_registry/contracts-platform.d.ts +0 -17
  253. package/dist/verify/contracts/mechanism_contract_registry/contracts-platform.d.ts.map +0 -1
  254. package/dist/verify/contracts/mechanism_contract_registry/contracts-platform.js +0 -365
  255. package/dist/verify/contracts/mechanism_contract_registry/contracts-platform.js.map +0 -1
  256. package/dist/verify/contracts/mechanism_contract_registry/index.d.ts +0 -19
  257. package/dist/verify/contracts/mechanism_contract_registry/index.d.ts.map +0 -1
  258. package/dist/verify/contracts/mechanism_contract_registry/index.js +0 -21
  259. package/dist/verify/contracts/mechanism_contract_registry/index.js.map +0 -1
  260. package/dist/verify/contracts/mechanism_contract_registry/types.d.ts +0 -33
  261. package/dist/verify/contracts/mechanism_contract_registry/types.d.ts.map +0 -1
  262. package/dist/verify/contracts/mechanism_contract_registry/types.js +0 -5
  263. package/dist/verify/contracts/mechanism_contract_registry/types.js.map +0 -1
  264. package/dist/verify/contracts/mechanism_contract_registry/validation.d.ts +0 -38
  265. package/dist/verify/contracts/mechanism_contract_registry/validation.d.ts.map +0 -1
  266. package/dist/verify/contracts/mechanism_contract_registry/validation.js +0 -136
  267. package/dist/verify/contracts/mechanism_contract_registry/validation.js.map +0 -1
  268. package/templates/shared/LLM/351/242/204/347/256/227/347/275/221/345/205/263.md +0 -54
  269. package/templates/shared//346/265/201/345/274/217/345/277/203/350/267/263.md +0 -64
@@ -1,137 +0,0 @@
1
- /**
2
- * Developer Sovereignty — 审计层模块。
3
- *
4
- * 职责边界:
5
- * - 负责:vetoDelivery 等 审计层职责
6
- * - 不负责:不属于本模块的职责由对应模块承担
7
- *
8
- * 被谁调用:发布门禁、质量检查
9
- * 调用谁:index、delivery、git_deps、semantic_evidence、logger
10
- *
11
- * 数据流:审计输入(代码/配置) → 检查 → 评分/报告
12
- * 持久化:无持久化(纯计算/内存态)
13
- */
14
- import { buildDeliveryEvidenceChain } from "./semantic_evidence.js";
15
- import { debug } from "../../shared/logger.js";
16
- /**
17
- * 交付前预览 — 收集 raw diff、风险摘要、证据链、回滚命令。
18
- * 使用 git_deps.GitOperations 获取真实 diff 统计和 commit/branch 信息。
19
- */
20
- export async function preDeliveryReview(taskContext, gitOps, projectPath) {
21
- debug("开发者主权", "preDeliveryReview() 开始 — taskId:", taskContext.task_id);
22
- const changedFiles = taskContext.execution?.changed_files ?? [];
23
- const attemptCount = taskContext.execution?.attempt_count ?? 0;
24
- const failureCount = taskContext.execution?.failure_history?.length ?? 0;
25
- const risk = taskContext.classification?.risk ?? "low";
26
- // Diff 摘要 — 合并 unstaged 和 cached diff(按文件)
27
- const [unstaged, staged] = await Promise.all([
28
- gitOps.getDiff(projectPath, { cached: false }),
29
- gitOps.getDiff(projectPath, { cached: true }),
30
- ]);
31
- const diffFiles = new Set(changedFiles);
32
- // 合并by file: sum additions/deletions from both sources
33
- const merged = new Map();
34
- for (const h of [...unstaged, ...staged]) {
35
- if (!diffFiles.has(h.file))
36
- continue;
37
- const existing = merged.get(h.file);
38
- if (existing) {
39
- existing.additions += h.additions;
40
- existing.deletions += h.deletions;
41
- }
42
- else {
43
- merged.set(h.file, { file_path: h.file, additions: h.additions, deletions: h.deletions });
44
- }
45
- }
46
- // 未出现在 diff 输出中的变更文件,补充零计数字段
47
- for (const f of changedFiles) {
48
- if (!merged.has(f)) {
49
- merged.set(f, { file_path: f, additions: 0, deletions: 0 });
50
- }
51
- }
52
- const fileDetails = [...merged.values()];
53
- const totalAdditions = fileDetails.reduce((s, d) => s + d.additions, 0);
54
- const totalDeletions = fileDetails.reduce((s, d) => s + d.deletions, 0);
55
- const diffSummary = {
56
- changed_files: changedFiles,
57
- additions: totalAdditions,
58
- deletions: totalDeletions,
59
- file_details: fileDetails,
60
- };
61
- // 风险摘要
62
- const riskFactors = [];
63
- if (risk === "high")
64
- riskFactors.push(`任务风险: ${risk}`);
65
- if (attemptCount > 1)
66
- riskFactors.push(`多次尝试: ${attemptCount} 次`);
67
- if (failureCount > 0)
68
- riskFactors.push(`历史失败: ${failureCount} 次`);
69
- if (changedFiles.length > 10)
70
- riskFactors.push(`变更文件多: ${changedFiles.length} 个`);
71
- const riskLevel = riskFactors.length === 0 ? "low" : riskFactors.length <= 2 ? "medium" : "high";
72
- debug("开发者主权", "风险评估 — level:", riskLevel, "factors:", riskFactors.join(", "));
73
- // 证据链
74
- const chain = buildDeliveryEvidenceChain(taskContext);
75
- const evidenceChain = chain
76
- ? {
77
- requirements: chain.requirement_points,
78
- coverage_summary: chain.completeness.advisory,
79
- uncovered_points: chain.completeness.uncovered_points,
80
- }
81
- : null;
82
- // 回滚命令 — 绑定真实 commit hash
83
- let commitHash = "HEAD";
84
- try {
85
- commitHash = await gitOps.getHeadCommitHash(projectPath);
86
- }
87
- catch (e) {
88
- debug("开发者主权", "获取commit hash失败,使用默认值 —", e);
89
- }
90
- const rollbackCommand = `git revert ${commitHash} --no-edit`;
91
- // can_deliver advisory 逻辑: advisory 级阻断,非 hard block
92
- const deliveryBlockers = [];
93
- if (riskLevel === "high") {
94
- deliveryBlockers.push("advisory: 高风险 — 建议交付前人工审查");
95
- }
96
- if (evidenceChain && evidenceChain.uncovered_points.length > 0) {
97
- deliveryBlockers.push(`advisory: 个未覆盖的需求点`);
98
- }
99
- debug("开发者主权", "delivery blockers:", deliveryBlockers.length > 0 ? deliveryBlockers.join("; ") : "无");
100
- // can_deliver 始终为 true(advisory 模式,非 hard block),但阻断信息供开发者参考
101
- const canDeliver = true;
102
- return {
103
- task_id: taskContext.task_id,
104
- diff_summary: diffSummary,
105
- risk_summary: {
106
- risk_level: riskLevel,
107
- factors: riskFactors,
108
- advisory: riskLevel === "high"
109
- ? "advisory: 高风险交付,建议人工审查后再继续"
110
- : riskLevel === "medium"
111
- ? "advisory: 中等风险,交付前请审查变更"
112
- : "低风险,可安全继续",
113
- },
114
- evidence_chain: evidenceChain,
115
- rollback_command: rollbackCommand,
116
- can_deliver: canDeliver,
117
- delivery_blockers: deliveryBlockers,
118
- advisory: deliveryBlockers.length > 0
119
- ? deliveryBlockers.join("; ")
120
- : "确认交付前请审查 diff 和证据链",
121
- };
122
- }
123
- /**
124
- * 否决交付 — 开发者行使否决权。
125
- * 返回 VetoResult 记录否决事件,不修改任何状态。
126
- */
127
- export function vetoDelivery(taskId, reason) {
128
- debug("开发者主权", "vetoDelivery() — taskId:", taskId, "原因:", reason);
129
- return {
130
- vetoed: true,
131
- task_id: taskId,
132
- reason,
133
- timestamp: new Date().toISOString(),
134
- advisory: "交付已被开发者否决 — 未提交或推送任何代码变更",
135
- };
136
- }
137
- //# sourceMappingURL=developer_sovereignty.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"developer_sovereignty.js","sourceRoot":"","sources":["../../../src/verify/audit/developer_sovereignty.ts"],"names":[],"mappings":"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"}
@@ -1,76 +0,0 @@
1
- /**
2
- * Failure Report — 审计层模块。
3
- *
4
- * 职责边界:
5
- * - 负责:FailureClass 等 审计层职责
6
- * - 不负责:不属于本模块的职责由对应模块承担
7
- *
8
- * 被谁调用:发布门禁、质量检查
9
- * 调用谁:diagnostic_registry、node:crypto
10
- *
11
- * 数据流:审计输入(代码/配置) → 检查 → 评分/报告
12
- * 持久化:无持久化(纯计算/内存态)
13
- */
14
- import { type DiagnosticEvent } from "../../shared/diagnostic_registry.js";
15
- export type FailureClass = "deterministic" | "fixable" | "scope_insufficient" | "external_side_effect" | "state_inconsistent" | "human_required" | "unknown";
16
- export type RecoveryAction = "retry" | "escalate" | "expand_scope" | "require_human" | "rollback" | "abort";
17
- export interface FailureReport {
18
- failure_id: string;
19
- task_id: string;
20
- contract_id?: string;
21
- failure_class: FailureClass;
22
- /** 脱敏后的摘要,不含 raw output */
23
- redacted_summary: string;
24
- /** 稳定内容哈希,用于去重和追溯 */
25
- error_output_hash: string;
26
- /** 原始输出不保留,只存 evidence ref */
27
- evidence_ref?: string;
28
- retry_count: number;
29
- retry_budget: number;
30
- retry_remaining: number;
31
- occurred_at: string;
32
- actions_taken: string[];
33
- external_side_effects?: string[];
34
- diagnostic_event: DiagnosticEvent | null;
35
- }
36
- export interface RecoveryPolicy {
37
- policy_id: string;
38
- failure_class: FailureClass;
39
- max_retries: number;
40
- action: RecoveryAction;
41
- requires_new_evidence: boolean;
42
- requires_human_confirmation: boolean;
43
- diagnostic_code: string;
44
- }
45
- export interface RecoveryAttempt {
46
- attempt_id: string;
47
- failure_id: string;
48
- policy_id: string;
49
- action: RecoveryAction;
50
- new_evidence_ids: string[];
51
- result: "success" | "failure" | "in_progress";
52
- attempted_at: string;
53
- }
54
- /** 按 FailureClass 获取恢复策略 */
55
- export declare function getRecoveryPolicy(failureClass: FailureClass): RecoveryPolicy | undefined;
56
- /** 列出所有恢复策略 */
57
- export declare function listRecoveryPolicies(): RecoveryPolicy[];
58
- /** 检查是否包含敏感内容 */
59
- export declare function containsSensitiveContent(content: string): boolean;
60
- /** 创建失败报告(含自检: 脱敏后仍含敏感内容时强制二次脱敏) */
61
- export declare function createFailureReport(taskId: string, failureClass: FailureClass, errorOutput: string, retryCount: number, retryBudget: number, contractId?: string, externalSideEffects?: string[]): FailureReport;
62
- /**
63
- * 判断是否允许重试。
64
- * - deterministic 不允许
65
- * - 超预算不允许
66
- * - human_required 不允许
67
- */
68
- export declare function canRetry(failureClass: FailureClass, retryCount: number, retryBudget: number): boolean;
69
- /**
70
- * 验证失败处理规则。
71
- */
72
- export declare function validateFailureHandling(report: FailureReport): Array<{
73
- error: string;
74
- severity: "hard_fail" | "warning";
75
- }>;
76
- //# sourceMappingURL=failure_report.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"failure_report.d.ts","sourceRoot":"","sources":["../../../src/verify/audit/failure_report.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAEH,OAAO,EAAyB,KAAK,eAAe,EAAE,MAAM,qCAAqC,CAAC;AAGlG,MAAM,MAAM,YAAY,GACpB,eAAe,GACf,SAAS,GACT,oBAAoB,GACpB,sBAAsB,GACtB,oBAAoB,GACpB,gBAAgB,GAChB,SAAS,CAAC;AAEd,MAAM,MAAM,cAAc,GAAG,OAAO,GAAG,UAAU,GAAG,cAAc,GAAG,eAAe,GAAG,UAAU,GAAG,OAAO,CAAC;AAE5G,MAAM,WAAW,aAAa;IAC5B,UAAU,EAAE,MAAM,CAAC;IACnB,OAAO,EAAE,MAAM,CAAC;IAChB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,aAAa,EAAE,YAAY,CAAC;IAC5B,2BAA2B;IAC3B,gBAAgB,EAAE,MAAM,CAAC;IACzB,qBAAqB;IACrB,iBAAiB,EAAE,MAAM,CAAC;IAC1B,8BAA8B;IAC9B,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,WAAW,EAAE,MAAM,CAAC;IACpB,YAAY,EAAE,MAAM,CAAC;IACrB,eAAe,EAAE,MAAM,CAAC;IACxB,WAAW,EAAE,MAAM,CAAC;IACpB,aAAa,EAAE,MAAM,EAAE,CAAC;IACxB,qBAAqB,CAAC,EAAE,MAAM,EAAE,CAAC;IACjC,gBAAgB,EAAE,eAAe,GAAG,IAAI,CAAC;CAC1C;AAED,MAAM,WAAW,cAAc;IAC7B,SAAS,EAAE,MAAM,CAAC;IAClB,aAAa,EAAE,YAAY,CAAC;IAC5B,WAAW,EAAE,MAAM,CAAC;IACpB,MAAM,EAAE,cAAc,CAAC;IACvB,qBAAqB,EAAE,OAAO,CAAC;IAC/B,2BAA2B,EAAE,OAAO,CAAC;IACrC,eAAe,EAAE,MAAM,CAAC;CACzB;AAED,MAAM,WAAW,eAAe;IAC9B,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,cAAc,CAAC;IACvB,gBAAgB,EAAE,MAAM,EAAE,CAAC;IAC3B,MAAM,EAAE,SAAS,GAAG,SAAS,GAAG,aAAa,CAAC;IAC9C,YAAY,EAAE,MAAM,CAAC;CACtB;AAoBD,4BAA4B;AAC5B,wBAAgB,iBAAiB,CAAC,YAAY,EAAE,YAAY,GAAG,cAAc,GAAG,SAAS,CAExF;AAED,eAAe;AACf,wBAAgB,oBAAoB,IAAI,cAAc,EAAE,CAEvD;AAiCD,iBAAiB;AACjB,wBAAgB,wBAAwB,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAEjE;AAED,oCAAoC;AACpC,wBAAgB,mBAAmB,CACjC,MAAM,EAAE,MAAM,EACd,YAAY,EAAE,YAAY,EAC1B,WAAW,EAAE,MAAM,EACnB,UAAU,EAAE,MAAM,EAClB,WAAW,EAAE,MAAM,EACnB,UAAU,CAAC,EAAE,MAAM,EACnB,mBAAmB,CAAC,EAAE,MAAM,EAAE,GAC7B,aAAa,CAkCf;AAED;;;;;GAKG;AACH,wBAAgB,QAAQ,CAAC,YAAY,EAAE,YAAY,EAAE,UAAU,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,GAAG,OAAO,CAKrG;AAED;;GAEG;AACH,wBAAgB,uBAAuB,CAAC,MAAM,EAAE,aAAa,GAAG,KAAK,CAAC;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,WAAW,GAAG,SAAS,CAAA;CAAE,CAAC,CAiC1H"}
@@ -1,145 +0,0 @@
1
- /**
2
- * Failure Report — 审计层模块。
3
- *
4
- * 职责边界:
5
- * - 负责:FailureClass 等 审计层职责
6
- * - 不负责:不属于本模块的职责由对应模块承担
7
- *
8
- * 被谁调用:发布门禁、质量检查
9
- * 调用谁:diagnostic_registry、node:crypto
10
- *
11
- * 数据流:审计输入(代码/配置) → 检查 → 评分/报告
12
- * 持久化:无持久化(纯计算/内存态)
13
- */
14
- import { createDiagnosticEvent } from "../../shared/diagnostic_registry.js";
15
- import { createHash } from "node:crypto";
16
- // 内置恢复策略
17
- const BUILTIN_RECOVERY_POLICIES = [
18
- { policy_id: "rp-deterministic", failure_class: "deterministic", max_retries: 0, action: "escalate",
19
- requires_new_evidence: true, requires_human_confirmation: true, diagnostic_code: "SF-FAILURE-0001" },
20
- { policy_id: "rp-fixable", failure_class: "fixable", max_retries: 3, action: "retry",
21
- requires_new_evidence: true, requires_human_confirmation: false, diagnostic_code: "SF-FAILURE-0001" },
22
- { policy_id: "rp-scope-insufficient", failure_class: "scope_insufficient", max_retries: 1, action: "require_human",
23
- requires_new_evidence: true, requires_human_confirmation: true, diagnostic_code: "SF-FAILURE-0001" },
24
- { policy_id: "rp-external-side-effect", failure_class: "external_side_effect", max_retries: 0, action: "rollback",
25
- requires_new_evidence: true, requires_human_confirmation: true, diagnostic_code: "SF-FAILURE-0002" },
26
- { policy_id: "rp-state-inconsistent", failure_class: "state_inconsistent", max_retries: 0, action: "abort",
27
- requires_new_evidence: true, requires_human_confirmation: true, diagnostic_code: "SF-STATE-0001" },
28
- { policy_id: "rp-human-required", failure_class: "human_required", max_retries: 0, action: "require_human",
29
- requires_new_evidence: false, requires_human_confirmation: true, diagnostic_code: "SF-FAILURE-0001" },
30
- { policy_id: "rp-unknown", failure_class: "unknown", max_retries: 0, action: "escalate",
31
- requires_new_evidence: true, requires_human_confirmation: true, diagnostic_code: "SF-FAILURE-0001" },
32
- ];
33
- /** 按 FailureClass 获取恢复策略 */
34
- export function getRecoveryPolicy(failureClass) {
35
- return BUILTIN_RECOVERY_POLICIES.find((p) => p.failure_class === failureClass);
36
- }
37
- /** 列出所有恢复策略 */
38
- export function listRecoveryPolicies() {
39
- return [...BUILTIN_RECOVERY_POLICIES];
40
- }
41
- // 敏感内容模式 — raw output/secret/PII
42
- const SENSITIVE_PATTERNS = [
43
- /sk-[a-zA-Z0-9]{20,}/, // API key
44
- /\b\d{11}\b/, // 手机号
45
- /password\s*[:=]\s*\S+/i, // password=
46
- /secret\s*[:=]\s*\S+/i, // secret=
47
- /api_key\s*[:=]\s*\S+/i, // api_key=
48
- /token\s*[:=]\s*\S+/i, // token=
49
- /raw_stdout/i, // raw stdout 标记
50
- /raw_stderr/i, // raw stderr 标记
51
- ];
52
- /** 脱敏: 全局替换所有敏感内容,返回 redacted summary */
53
- function redactErrorOutput(raw) {
54
- let result = raw;
55
- // 全局替换所有敏感模式(使用 replaceAll 语义,确保多次出现都处理)
56
- for (const pattern of SENSITIVE_PATTERNS) {
57
- result = result.replace(new RegExp(pattern.source, pattern.flags.includes("g") ? pattern.flags : pattern.flags + "g"), "[REDACTED]");
58
- }
59
- // 截断防止大段输出
60
- if (result.length > 200) {
61
- result = result.substring(0, 200) + "...[truncated]";
62
- }
63
- return result;
64
- }
65
- /** 稳定内容哈希 — TAR-003: 前 32 字符(128bit)避免碰撞 */
66
- function stableHash(content) {
67
- return createHash("sha256").update(content).digest("hex").substring(0, 32);
68
- }
69
- /** 检查是否包含敏感内容 */
70
- export function containsSensitiveContent(content) {
71
- return SENSITIVE_PATTERNS.some((p) => p.test(content));
72
- }
73
- /** 创建失败报告(含自检: 脱敏后仍含敏感内容时强制二次脱敏) */
74
- export function createFailureReport(taskId, failureClass, errorOutput, retryCount, retryBudget, contractId, externalSideEffects) {
75
- const policy = getRecoveryPolicy(failureClass);
76
- const diagCode = policy?.diagnostic_code ?? "SF-FAILURE-0001";
77
- const diagEvent = createDiagnosticEvent(diagCode, { failure_class: failureClass, retry_count: retryCount }, contractId, taskId);
78
- const hash = stableHash(errorOutput);
79
- let redacted = redactErrorOutput(errorOutput);
80
- // 自检: 脱敏后仍含敏感内容时强制替换为占位符
81
- if (containsSensitiveContent(redacted)) {
82
- redacted = "[内容已全部脱敏,原始输出不可展示]";
83
- }
84
- return {
85
- failure_id: `fr-${taskId}-${hash}`,
86
- task_id: taskId,
87
- contract_id: contractId,
88
- failure_class: failureClass,
89
- redacted_summary: redacted,
90
- error_output_hash: hash,
91
- evidence_ref: undefined,
92
- retry_count: retryCount,
93
- retry_budget: retryBudget,
94
- retry_remaining: Math.max(0, retryBudget - retryCount),
95
- occurred_at: new Date().toISOString(),
96
- actions_taken: [],
97
- external_side_effects: externalSideEffects,
98
- diagnostic_event: diagEvent,
99
- };
100
- }
101
- /**
102
- * 判断是否允许重试。
103
- * - deterministic 不允许
104
- * - 超预算不允许
105
- * - human_required 不允许
106
- */
107
- export function canRetry(failureClass, retryCount, retryBudget) {
108
- if (failureClass === "deterministic" || failureClass === "human_required" || failureClass === "unknown") {
109
- return false;
110
- }
111
- return retryCount < retryBudget;
112
- }
113
- /**
114
- * 验证失败处理规则。
115
- */
116
- export function validateFailureHandling(report) {
117
- const errors = [];
118
- if (report.failure_class === "deterministic" && report.retry_count > 0) {
119
- errors.push({
120
- error: `deterministic 失败不应重试,但已重试 ${report.retry_count} 次`,
121
- severity: "hard_fail",
122
- });
123
- }
124
- if (report.failure_class === "external_side_effect" && !report.external_side_effects) {
125
- errors.push({
126
- error: "external_side_effect 失败必须记录已发生动作",
127
- severity: "hard_fail",
128
- });
129
- }
130
- if (report.retry_remaining < 0) {
131
- errors.push({
132
- error: `重试次数超过预算: ${report.retry_count}/${report.retry_budget}`,
133
- severity: "hard_fail",
134
- });
135
- }
136
- // 红线: redacted_summary 不得包含敏感原文
137
- if (containsSensitiveContent(report.redacted_summary)) {
138
- errors.push({
139
- error: "FailureReport redacted_summary 仍包含敏感内容(secret/PII/raw output)",
140
- severity: "hard_fail",
141
- });
142
- }
143
- return errors;
144
- }
145
- //# sourceMappingURL=failure_report.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"failure_report.js","sourceRoot":"","sources":["../../../src/verify/audit/failure_report.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAEH,OAAO,EAAE,qBAAqB,EAAwB,MAAM,qCAAqC,CAAC;AAClG,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAqDzC,SAAS;AACT,MAAM,yBAAyB,GAA8B;IAC3D,EAAE,SAAS,EAAE,kBAAkB,EAAE,aAAa,EAAE,eAAe,EAAE,WAAW,EAAE,CAAC,EAAE,MAAM,EAAE,UAAU;QACjG,qBAAqB,EAAE,IAAI,EAAE,2BAA2B,EAAE,IAAI,EAAE,eAAe,EAAE,iBAAiB,EAAE;IACtG,EAAE,SAAS,EAAE,YAAY,EAAE,aAAa,EAAE,SAAS,EAAE,WAAW,EAAE,CAAC,EAAE,MAAM,EAAE,OAAO;QAClF,qBAAqB,EAAE,IAAI,EAAE,2BAA2B,EAAE,KAAK,EAAE,eAAe,EAAE,iBAAiB,EAAE;IACvG,EAAE,SAAS,EAAE,uBAAuB,EAAE,aAAa,EAAE,oBAAoB,EAAE,WAAW,EAAE,CAAC,EAAE,MAAM,EAAE,eAAe;QAChH,qBAAqB,EAAE,IAAI,EAAE,2BAA2B,EAAE,IAAI,EAAE,eAAe,EAAE,iBAAiB,EAAE;IACtG,EAAE,SAAS,EAAE,yBAAyB,EAAE,aAAa,EAAE,sBAAsB,EAAE,WAAW,EAAE,CAAC,EAAE,MAAM,EAAE,UAAU;QAC/G,qBAAqB,EAAE,IAAI,EAAE,2BAA2B,EAAE,IAAI,EAAE,eAAe,EAAE,iBAAiB,EAAE;IACtG,EAAE,SAAS,EAAE,uBAAuB,EAAE,aAAa,EAAE,oBAAoB,EAAE,WAAW,EAAE,CAAC,EAAE,MAAM,EAAE,OAAO;QACxG,qBAAqB,EAAE,IAAI,EAAE,2BAA2B,EAAE,IAAI,EAAE,eAAe,EAAE,eAAe,EAAE;IACpG,EAAE,SAAS,EAAE,mBAAmB,EAAE,aAAa,EAAE,gBAAgB,EAAE,WAAW,EAAE,CAAC,EAAE,MAAM,EAAE,eAAe;QACxG,qBAAqB,EAAE,KAAK,EAAE,2BAA2B,EAAE,IAAI,EAAE,eAAe,EAAE,iBAAiB,EAAE;IACvG,EAAE,SAAS,EAAE,YAAY,EAAE,aAAa,EAAE,SAAS,EAAE,WAAW,EAAE,CAAC,EAAE,MAAM,EAAE,UAAU;QACrF,qBAAqB,EAAE,IAAI,EAAE,2BAA2B,EAAE,IAAI,EAAE,eAAe,EAAE,iBAAiB,EAAE;CACvG,CAAC;AAEF,4BAA4B;AAC5B,MAAM,UAAU,iBAAiB,CAAC,YAA0B;IAC1D,OAAO,yBAAyB,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,aAAa,KAAK,YAAY,CAAC,CAAC;AACjF,CAAC;AAED,eAAe;AACf,MAAM,UAAU,oBAAoB;IAClC,OAAO,CAAC,GAAG,yBAAyB,CAAC,CAAC;AACxC,CAAC;AAED,iCAAiC;AACjC,MAAM,kBAAkB,GAAa;IACnC,qBAAqB,EAAiB,UAAU;IAChD,YAAY,EAA2B,MAAM;IAC7C,wBAAwB,EAAc,YAAY;IAClD,sBAAsB,EAAe,UAAU;IAC/C,uBAAuB,EAAc,WAAW;IAChD,qBAAqB,EAAgB,SAAS;IAC9C,aAAa,EAA0B,gBAAgB;IACvD,aAAa,EAA0B,gBAAgB;CACxD,CAAC;AAEF,yCAAyC;AACzC,SAAS,iBAAiB,CAAC,GAAW;IACpC,IAAI,MAAM,GAAG,GAAG,CAAC;IACjB,yCAAyC;IACzC,KAAK,MAAM,OAAO,IAAI,kBAAkB,EAAE,CAAC;QACzC,MAAM,GAAG,MAAM,CAAC,OAAO,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,OAAO,CAAC,KAAK,GAAG,GAAG,CAAC,EAAE,YAAY,CAAC,CAAC;IACvI,CAAC;IACD,WAAW;IACX,IAAI,MAAM,CAAC,MAAM,GAAG,GAAG,EAAE,CAAC;QACxB,MAAM,GAAG,MAAM,CAAC,SAAS,CAAC,CAAC,EAAE,GAAG,CAAC,GAAG,gBAAgB,CAAC;IACvD,CAAC;IACD,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,4CAA4C;AAC5C,SAAS,UAAU,CAAC,OAAe;IACjC,OAAO,UAAU,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,SAAS,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;AAC7E,CAAC;AAED,iBAAiB;AACjB,MAAM,UAAU,wBAAwB,CAAC,OAAe;IACtD,OAAO,kBAAkB,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC;AACzD,CAAC;AAED,oCAAoC;AACpC,MAAM,UAAU,mBAAmB,CACjC,MAAc,EACd,YAA0B,EAC1B,WAAmB,EACnB,UAAkB,EAClB,WAAmB,EACnB,UAAmB,EACnB,mBAA8B;IAE9B,MAAM,MAAM,GAAG,iBAAiB,CAAC,YAAY,CAAC,CAAC;IAC/C,MAAM,QAAQ,GAAG,MAAM,EAAE,eAAe,IAAI,iBAAiB,CAAC;IAC9D,MAAM,SAAS,GAAG,qBAAqB,CACrC,QAAQ,EACR,EAAE,aAAa,EAAE,YAAY,EAAE,WAAW,EAAE,UAAU,EAAE,EACxD,UAAU,EACV,MAAM,CACP,CAAC;IAEF,MAAM,IAAI,GAAG,UAAU,CAAC,WAAW,CAAC,CAAC;IACrC,IAAI,QAAQ,GAAG,iBAAiB,CAAC,WAAW,CAAC,CAAC;IAE9C,yBAAyB;IACzB,IAAI,wBAAwB,CAAC,QAAQ,CAAC,EAAE,CAAC;QACvC,QAAQ,GAAG,oBAAoB,CAAC;IAClC,CAAC;IAED,OAAO;QACL,UAAU,EAAE,MAAM,MAAM,IAAI,IAAI,EAAE;QAClC,OAAO,EAAE,MAAM;QACf,WAAW,EAAE,UAAU;QACvB,aAAa,EAAE,YAAY;QAC3B,gBAAgB,EAAE,QAAQ;QAC1B,iBAAiB,EAAE,IAAI;QACvB,YAAY,EAAE,SAAS;QACvB,WAAW,EAAE,UAAU;QACvB,YAAY,EAAE,WAAW;QACzB,eAAe,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,WAAW,GAAG,UAAU,CAAC;QACtD,WAAW,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;QACrC,aAAa,EAAE,EAAE;QACjB,qBAAqB,EAAE,mBAAmB;QAC1C,gBAAgB,EAAE,SAAS;KAC5B,CAAC;AACJ,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,QAAQ,CAAC,YAA0B,EAAE,UAAkB,EAAE,WAAmB;IAC1F,IAAI,YAAY,KAAK,eAAe,IAAI,YAAY,KAAK,gBAAgB,IAAI,YAAY,KAAK,SAAS,EAAE,CAAC;QACxG,OAAO,KAAK,CAAC;IACf,CAAC;IACD,OAAO,UAAU,GAAG,WAAW,CAAC;AAClC,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,uBAAuB,CAAC,MAAqB;IAC3D,MAAM,MAAM,GAAgE,EAAE,CAAC;IAE/E,IAAI,MAAM,CAAC,aAAa,KAAK,eAAe,IAAI,MAAM,CAAC,WAAW,GAAG,CAAC,EAAE,CAAC;QACvE,MAAM,CAAC,IAAI,CAAC;YACV,KAAK,EAAE,6BAA6B,MAAM,CAAC,WAAW,IAAI;YAC1D,QAAQ,EAAE,WAAW;SACtB,CAAC,CAAC;IACL,CAAC;IAED,IAAI,MAAM,CAAC,aAAa,KAAK,sBAAsB,IAAI,CAAC,MAAM,CAAC,qBAAqB,EAAE,CAAC;QACrF,MAAM,CAAC,IAAI,CAAC;YACV,KAAK,EAAE,kCAAkC;YACzC,QAAQ,EAAE,WAAW;SACtB,CAAC,CAAC;IACL,CAAC;IAED,IAAI,MAAM,CAAC,eAAe,GAAG,CAAC,EAAE,CAAC;QAC/B,MAAM,CAAC,IAAI,CAAC;YACV,KAAK,EAAE,aAAa,MAAM,CAAC,WAAW,IAAI,MAAM,CAAC,YAAY,EAAE;YAC/D,QAAQ,EAAE,WAAW;SACtB,CAAC,CAAC;IACL,CAAC;IAED,gCAAgC;IAChC,IAAI,wBAAwB,CAAC,MAAM,CAAC,gBAAgB,CAAC,EAAE,CAAC;QACtD,MAAM,CAAC,IAAI,CAAC;YACV,KAAK,EAAE,+DAA+D;YACtE,QAAQ,EAAE,WAAW;SACtB,CAAC,CAAC;IACL,CAAC;IAED,OAAO,MAAM,CAAC;AAChB,CAAC"}
@@ -1,110 +0,0 @@
1
- /**
2
- * Governance Report — 审计层模块。
3
- *
4
- * 职责边界:
5
- * - 负责:PolicySummary 等 审计层职责
6
- * - 不负责:不属于本模块的职责由对应模块承担
7
- *
8
- * 被谁调用:发布门禁、质量检查
9
- * 调用谁:audit_pool、escape_report、capability_action_advisor、risk_sampler、index、artifact_contract_registry
10
- *
11
- * 数据流:审计输入(代码/配置) → 检查 → 评分/报告
12
- * 持久化:无持久化(纯计算/内存态)
13
- */
14
- import type { AuditItem, AuditPoolStats } from "./audit_pool.js";
15
- import type { EscapeReport, EscapeReportStats } from "../../gate/contracts/escape_report.js";
16
- import type { ActionDecision } from "../../gate/contracts/capability_action_advisor.js";
17
- import type { SamplingDecision } from "./risk_sampler.js";
18
- import type { DualLayerGovernanceFinding } from "../../types/index.js";
19
- import { type OutputArtifact, type ArtifactGovernanceFinding } from "../../domain/contracts/artifact_contract_registry.js";
20
- import type { Conflict, Redundancy } from "../../context/config/conflicts.js";
21
- import { type CorePrinciplesReport } from "./core_engineering_principles.js";
22
- import { type ContractGovernanceFinding } from "../../shared/contracts/contract_registry/types.js";
23
- export interface PolicySummary {
24
- policy_id: string;
25
- escape_count: number;
26
- false_positive_count: number;
27
- action: ActionDecision;
28
- }
29
- export interface TopFix {
30
- escape_id: string;
31
- policy_id: string;
32
- failure_type: string;
33
- fix_required: string;
34
- owner: string;
35
- due_date: string;
36
- }
37
- export interface DualLayerSummary {
38
- total_mechanisms: number;
39
- dual_layer_enforced_count: number;
40
- hard_fail_count: number;
41
- advisory_count: number;
42
- findings: DualLayerGovernanceFinding[];
43
- }
44
- export interface GovernanceReport {
45
- generated_at: string;
46
- total_tasks: number;
47
- audit_by_risk: Record<string, number>;
48
- sampled_count: number | null;
49
- total_escapes: number;
50
- total_false_positives: number;
51
- escape_by_type: Record<string, number>;
52
- danger_policies: PolicySummary[];
53
- downgrade_candidates: PolicySummary[];
54
- top_fixes: TopFix[];
55
- dual_layer_summary?: DualLayerSummary;
56
- artifact_governance?: {
57
- artifact_count: number;
58
- hard_fail_count: number;
59
- advisory_count: number;
60
- findings: ArtifactGovernanceFinding[];
61
- };
62
- config_governance?: {
63
- conflict_count: number;
64
- redundancy_count: number;
65
- conflicts: Conflict[];
66
- redundancies: Redundancy[];
67
- };
68
- core_principles_governance?: {
69
- task_level: string;
70
- overall_passed: boolean;
71
- principles: Array<{
72
- principle_id: string;
73
- status: string;
74
- findings: string[];
75
- }>;
76
- };
77
- contract_governance?: {
78
- total_contracts: number;
79
- hard_fail_count: number;
80
- warning_count: number;
81
- advisory_count: number;
82
- findings: ContractGovernanceFinding[];
83
- };
84
- }
85
- /**
86
- * 生成治理健康报告。
87
- * 汇总审计池、逃逸报告、能力决策和抽样决策的统计数据,识别危险策略和降级候选。
88
- * 支持双层机制、制品契约、配置优先级契约和核心原则的治理检查。
89
- * @param auditStats - 审计池统计数据
90
- * @param auditItems - 审计条目列表
91
- * @param escapeReports - 逃逸报告列表
92
- * @param escapeStats - 逃逸报告统计数据
93
- * @param decisions - 能力动作决策列表
94
- * @param now - 报告生成时间(可选,默认当前时间)
95
- * @param sampleDecisions - 抽样决策列表(可选)
96
- * @param dualLayerFindings - 双层机制发现列表(可选)
97
- * @param dualLayerMechanismCount - 双层机制总数(可选)
98
- * @param artifacts - 输出制品列表(可选,用于制品契约检查)
99
- * @param configConflicts - 配置冲突列表(可选,来自 detectConflicts)
100
- * @param configRedundancies - 配置冗余列表(可选,来自 detectRedundancies)
101
- * @param corePrinciples - 核心原则遵循性报告列表(可选)
102
- * @returns 完整的治理健康报告
103
- */
104
- /**
105
- * 生成治理健康报告。
106
- * @param options - 报告选项,包含审计池和能力状态存储
107
- * @returns 治理报告,包含任务统计、逃逸分析和降级建议
108
- */
109
- export declare function generateReport(auditStats: AuditPoolStats, _auditItems: AuditItem[], escapeReports: EscapeReport[], escapeStats: EscapeReportStats, decisions: ActionDecision[], now?: Date, sampleDecisions?: SamplingDecision[], dualLayerFindings?: DualLayerGovernanceFinding[], dualLayerMechanismCount?: number, artifacts?: OutputArtifact[], configConflicts?: Conflict[], configRedundancies?: Redundancy[], corePrinciples?: CorePrinciplesReport[], contractFindings?: ContractGovernanceFinding[], totalRegistryContracts?: number): GovernanceReport;
110
- //# sourceMappingURL=governance_report.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"governance_report.d.ts","sourceRoot":"","sources":["../../../src/verify/audit/governance_report.ts"],"names":[],"mappings":"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"}