soloforge 1.1.48 → 1.1.49

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 (161) hide show
  1. package/README.md +4 -4
  2. package/dist/cli/scope_check.d.ts.map +1 -1
  3. package/dist/cli/scope_check.js +10 -0
  4. package/dist/cli/scope_check.js.map +1 -1
  5. package/dist/context/adapters/shared/integration_guide.d.ts +3 -3
  6. package/dist/context/adapters/shared/integration_guide.js +4 -4
  7. package/dist/core/adversarial_review_store.d.ts +44 -44
  8. package/dist/core/adversarial_review_store.d.ts.map +1 -1
  9. package/dist/core/adversarial_review_store.js +43 -43
  10. package/dist/core/adversarial_review_store.js.map +1 -1
  11. package/dist/core/gate_record_store.d.ts.map +1 -1
  12. package/dist/core/gate_record_store.js +9 -4
  13. package/dist/core/gate_record_store.js.map +1 -1
  14. package/dist/core/git_utils.d.ts.map +1 -1
  15. package/dist/core/git_utils.js +7 -3
  16. package/dist/core/git_utils.js.map +1 -1
  17. package/dist/core/task_context/constants.d.ts.map +1 -1
  18. package/dist/core/task_context/constants.js +3 -1
  19. package/dist/core/task_context/constants.js.map +1 -1
  20. package/dist/core/task_context/manager.d.ts +0 -4
  21. package/dist/core/task_context/manager.d.ts.map +1 -1
  22. package/dist/core/task_context/manager.js +21 -32
  23. package/dist/core/task_context/manager.js.map +1 -1
  24. package/dist/core/task_context/stage_fact_ownership.js +1 -1
  25. package/dist/core/task_context/stage_fact_ownership.js.map +1 -1
  26. package/dist/core/task_context/status_transitions.js +5 -5
  27. package/dist/core/task_context/status_transitions.js.map +1 -1
  28. package/dist/core/types.d.ts +10 -0
  29. package/dist/core/types.d.ts.map +1 -1
  30. package/dist/core/waiver_store.d.ts +100 -0
  31. package/dist/core/waiver_store.d.ts.map +1 -0
  32. package/dist/core/waiver_store.js +185 -0
  33. package/dist/core/waiver_store.js.map +1 -0
  34. package/dist/domain/asset_registry/derived_registry.d.ts +10 -0
  35. package/dist/domain/asset_registry/derived_registry.d.ts.map +1 -1
  36. package/dist/domain/asset_registry/derived_registry.js +10 -0
  37. package/dist/domain/asset_registry/derived_registry.js.map +1 -1
  38. package/dist/domain/asset_registry/derived_types.d.ts +10 -0
  39. package/dist/domain/asset_registry/derived_types.d.ts.map +1 -1
  40. package/dist/domain/asset_registry/derived_types.js +10 -0
  41. package/dist/domain/asset_registry/derived_types.js.map +1 -1
  42. package/dist/gate/certainty_gate.d.ts +10 -0
  43. package/dist/gate/certainty_gate.d.ts.map +1 -1
  44. package/dist/gate/certainty_gate.js.map +1 -1
  45. package/dist/gate/contracts/tool_actions.d.ts +10 -1
  46. package/dist/gate/contracts/tool_actions.d.ts.map +1 -1
  47. package/dist/gate/contracts/tool_actions.js +11 -1
  48. package/dist/gate/contracts/tool_actions.js.map +1 -1
  49. package/dist/gate/contracts/tool_invocation_contract_registry.d.ts.map +1 -1
  50. package/dist/gate/contracts/tool_invocation_contract_registry.js +11 -1
  51. package/dist/gate/contracts/tool_invocation_contract_registry.js.map +1 -1
  52. package/dist/gate/executors/executors_annotation.d.ts +33 -10
  53. package/dist/gate/executors/executors_annotation.d.ts.map +1 -1
  54. package/dist/gate/executors/executors_annotation.js +119 -64
  55. package/dist/gate/executors/executors_annotation.js.map +1 -1
  56. package/dist/gate/executors/executors_artifact.d.ts +1 -1
  57. package/dist/gate/executors/executors_artifact.d.ts.map +1 -1
  58. package/dist/gate/executors/executors_artifact.js +1 -138
  59. package/dist/gate/executors/executors_artifact.js.map +1 -1
  60. package/dist/gate/executors/executors_build.d.ts +2 -2
  61. package/dist/gate/executors/executors_build.d.ts.map +1 -1
  62. package/dist/gate/executors/executors_build.js +11 -111
  63. package/dist/gate/executors/executors_build.js.map +1 -1
  64. package/dist/gate/executors/executors_deploy.d.ts.map +1 -1
  65. package/dist/gate/executors/executors_deploy.js +35 -7
  66. package/dist/gate/executors/executors_deploy.js.map +1 -1
  67. package/dist/gate/executors/executors_external_command.d.ts.map +1 -1
  68. package/dist/gate/executors/executors_external_command.js +25 -5
  69. package/dist/gate/executors/executors_external_command.js.map +1 -1
  70. package/dist/gate/executors/executors_field_mapping.d.ts.map +1 -1
  71. package/dist/gate/executors/executors_field_mapping.js +78 -66
  72. package/dist/gate/executors/executors_field_mapping.js.map +1 -1
  73. package/dist/gate/executors/executors_jacoco.d.ts +3 -0
  74. package/dist/gate/executors/executors_jacoco.d.ts.map +1 -0
  75. package/dist/gate/executors/executors_jacoco.js +70 -0
  76. package/dist/gate/executors/executors_jacoco.js.map +1 -0
  77. package/dist/gate/executors/executors_prerequisite.d.ts +1 -1
  78. package/dist/gate/executors/executors_prerequisite.d.ts.map +1 -1
  79. package/dist/gate/executors/executors_prerequisite.js +1 -61
  80. package/dist/gate/executors/executors_prerequisite.js.map +1 -1
  81. package/dist/gate/executors/executors_probe.d.ts +1 -0
  82. package/dist/gate/executors/executors_probe.d.ts.map +1 -1
  83. package/dist/gate/executors/executors_probe.js +1 -0
  84. package/dist/gate/executors/executors_probe.js.map +1 -1
  85. package/dist/gate/executors/executors_scope.d.ts +7 -3
  86. package/dist/gate/executors/executors_scope.d.ts.map +1 -1
  87. package/dist/gate/executors/executors_scope.js +18 -171
  88. package/dist/gate/executors/executors_scope.js.map +1 -1
  89. package/dist/gate/executors/executors_trace.d.ts.map +1 -1
  90. package/dist/gate/executors/executors_trace.js +111 -1
  91. package/dist/gate/executors/executors_trace.js.map +1 -1
  92. package/dist/gate/executors/index.js +2 -2
  93. package/dist/gate/executors/index.js.map +1 -1
  94. package/dist/gate/gate_engine.d.ts +11 -0
  95. package/dist/gate/gate_engine.d.ts.map +1 -1
  96. package/dist/gate/gate_engine.js +43 -6
  97. package/dist/gate/gate_engine.js.map +1 -1
  98. package/dist/gate/gate_registry_bridge.d.ts +10 -0
  99. package/dist/gate/gate_registry_bridge.d.ts.map +1 -1
  100. package/dist/gate/gate_registry_bridge.js +2 -3
  101. package/dist/gate/gate_registry_bridge.js.map +1 -1
  102. package/dist/gate/release/gate_checks/checkAssetAntiBloat.d.ts.map +1 -1
  103. package/dist/gate/release/gate_checks/checkAssetAntiBloat.js +3 -0
  104. package/dist/gate/release/gate_checks/checkAssetAntiBloat.js.map +1 -1
  105. package/dist/server/tools/index.d.ts.map +1 -1
  106. package/dist/server/tools/index.js +4 -2
  107. package/dist/server/tools/index.js.map +1 -1
  108. package/dist/server/tools/middleware.d.ts.map +1 -1
  109. package/dist/server/tools/middleware.js +1 -0
  110. package/dist/server/tools/middleware.js.map +1 -1
  111. package/dist/server/tools/schemas.d.ts +10 -0
  112. package/dist/server/tools/schemas.d.ts.map +1 -1
  113. package/dist/server/tools/schemas.js +10 -0
  114. package/dist/server/tools/schemas.js.map +1 -1
  115. package/dist/server/tools/sf_doctor.d.ts +7 -0
  116. package/dist/server/tools/sf_doctor.d.ts.map +1 -1
  117. package/dist/server/tools/sf_doctor.js +38 -2
  118. package/dist/server/tools/sf_doctor.js.map +1 -1
  119. package/dist/server/tools/sf_waiver.d.ts +31 -0
  120. package/dist/server/tools/sf_waiver.d.ts.map +1 -0
  121. package/dist/server/tools/sf_waiver.js +139 -0
  122. package/dist/server/tools/sf_waiver.js.map +1 -0
  123. package/dist/server/tools/sf_work.d.ts +28 -37
  124. package/dist/server/tools/sf_work.d.ts.map +1 -1
  125. package/dist/server/tools/sf_work.js +155 -83
  126. package/dist/server/tools/sf_work.js.map +1 -1
  127. package/dist/shared/paths.d.ts +4 -0
  128. package/dist/shared/paths.d.ts.map +1 -1
  129. package/dist/shared/paths.js +6 -0
  130. package/dist/shared/paths.js.map +1 -1
  131. package/dist/types/pipeline_types.d.ts +4 -1
  132. package/dist/types/pipeline_types.d.ts.map +1 -1
  133. package/dist/verify/audit/probe_executor.d.ts +4 -1
  134. package/dist/verify/audit/probe_executor.d.ts.map +1 -1
  135. package/dist/verify/audit/probe_executor.js +4 -1
  136. package/dist/verify/audit/probe_executor.js.map +1 -1
  137. package/dist/verify/audit/probe_rule.d.ts +3 -0
  138. package/dist/verify/audit/probe_rule.d.ts.map +1 -1
  139. package/dist/verify/audit/probe_rule.js +3 -0
  140. package/dist/verify/audit/probe_rule.js.map +1 -1
  141. package/dist/verify/contracts/runtime_state_recovery_registry.d.ts.map +1 -1
  142. package/dist/verify/contracts/runtime_state_recovery_registry.js +0 -1
  143. package/dist/verify/contracts/runtime_state_recovery_registry.js.map +1 -1
  144. package/package.json +1 -1
  145. package/templates/build/enforced.md +30 -22
  146. package/templates/build//346/265/213/350/257/225/344/274/230/345/205/210/347/274/226/347/240/201.md +1 -0
  147. package/templates/build//347/274/226/347/240/201/347/272/252/345/276/213.md +2 -1
  148. package/templates/design//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 +5 -5
  149. package/templates/design//345/210/207/347/211/207/350/247/204/345/210/222.md +3 -1
  150. package/templates/design//345/274/200/345/217/221/345/210/207/347/211/207/350/256/241/345/210/222.md +2 -1
  151. package/templates/operate/UI/350/247/206/350/247/211/351/252/214/346/224/266/347/272/252/345/276/213.md +13 -2
  152. package/templates/operate/enforced.md +2 -2
  153. package/templates/shared/enforced.md +1 -1
  154. package/templates/shared//345/267/245/344/275/234/346/265/201/347/241/254/350/247/204/345/210/231/345/245/221/347/272/246.md +2 -2
  155. package/templates/verify/enforced.md +11 -2
  156. package/templates/verify//344/273/243/347/240/201/345/256/241/346/237/245/346/212/245/345/221/212.md +2 -2
  157. package/templates/verify//345/256/241/346/237/245/346/270/205/345/215/225.md +3 -1
  158. package/dist/gate/executors/executors_openapi_sync.d.ts +0 -23
  159. package/dist/gate/executors/executors_openapi_sync.d.ts.map +0 -1
  160. package/dist/gate/executors/executors_openapi_sync.js +0 -145
  161. package/dist/gate/executors/executors_openapi_sync.js.map +0 -1
@@ -35,6 +35,8 @@ extra:
35
35
  > 合并旧的十几个审查碎拆(SOLID/性能/并发/错误处理/数据隐私/可维护性等)。
36
36
  > verify-gate 的 SEC/PER/CON/API 是确定性正则门禁;本清单是审查者的维度指引。
37
37
  > 注入到代码审查报告(review_report)产出时。
38
+ >
39
+ > **对抗审查独立于此**:verify 后 `sf_work action=adversarial_review` 做 K=3 次独立采样取交集(每轮独立 session 不互参、取多数复现),findings 留痕不阻断(不追求"零 error 收敛")。本清单是单次审查维度,对抗审查是多次独立交叉验证。
38
40
 
39
41
  ## 审查维度(每类都要过一遍)
40
42
 
@@ -57,7 +59,7 @@ extra:
57
59
  ### 架构(对应 ARC-*)
58
60
  - 分层依赖、循环依赖、单一职责、Controller 不含业务逻辑
59
61
 
60
- ### 接口契约(对应 API-01~10
62
+ ### 接口契约(对应 API-03/04/06/07/08/09
61
63
  - DTO 不暴露 Entity、写操作事务、权限注解、参数校验、RESTful、统一响应、分页、版本号、文档
62
64
 
63
65
  ### 可维护性(AI 盲区,重点人工复核)
@@ -1,23 +0,0 @@
1
- /**
2
- * openapi_sync_check 执行器 — 比对 openapi.yaml 与详细设计文档的接口一致性。
3
- *
4
- * 职责边界:
5
- * - 负责:解析 openapi.yaml 和详细设计文档,比对路径/方法/参数/返回值
6
- * - 不负责:文档质量评估(语义层面的完整性由 AI 判断)
7
- *
8
- * 被谁调用:gate_engine evaluateCheck → gateExecutors.get("openapi_sync_check")
9
- * 调用谁:fs(读取文件)、yaml 解析(解析 openapi.yaml)
10
- *
11
- * 数据流:openapi.yaml + 详细设计文档 → 结构化比对 → 一致/不一致
12
- * 持久化:无
13
- */
14
- import type { GateExecutorFn } from "../gate_executors.js";
15
- /**
16
- * openapi_sync_check 执行器入口。
17
- *
18
- * 比对 openapi.yaml 与详细设计文档,检查:
19
- * 1. 设计文档引用的 endpoint 在 openapi.yaml 中存在
20
- * 2. 方法一致(GET/POST/PUT/DELETE 等)
21
- */
22
- export declare const executeOpenApiSyncCheck: GateExecutorFn;
23
- //# sourceMappingURL=executors_openapi_sync.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"executors_openapi_sync.d.ts","sourceRoot":"","sources":["../../../src/gate/executors/executors_openapi_sync.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAKH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAsE3D;;;;;;GAMG;AACH,eAAO,MAAM,uBAAuB,EAAE,cA+ErC,CAAC"}
@@ -1,145 +0,0 @@
1
- /**
2
- * openapi_sync_check 执行器 — 比对 openapi.yaml 与详细设计文档的接口一致性。
3
- *
4
- * 职责边界:
5
- * - 负责:解析 openapi.yaml 和详细设计文档,比对路径/方法/参数/返回值
6
- * - 不负责:文档质量评估(语义层面的完整性由 AI 判断)
7
- *
8
- * 被谁调用:gate_engine evaluateCheck → gateExecutors.get("openapi_sync_check")
9
- * 调用谁:fs(读取文件)、yaml 解析(解析 openapi.yaml)
10
- *
11
- * 数据流:openapi.yaml + 详细设计文档 → 结构化比对 → 一致/不一致
12
- * 持久化:无
13
- */
14
- import fs from "node:fs";
15
- import path from "node:path";
16
- /** 从 openapi.yaml 提取所有 endpoint(路径 + 方法) */
17
- function extractOpenApiEndpoints(content) {
18
- const endpoints = new Map();
19
- // 简易 YAML 解析:提取 paths 下的 path 和 method
20
- const lines = content.split("\n");
21
- let inPaths = false;
22
- let currentPath = "";
23
- for (const line of lines) {
24
- const trimmed = line.trim();
25
- // 进入 paths section
26
- if (trimmed === "paths:") {
27
- inPaths = true;
28
- continue;
29
- }
30
- if (!inPaths)
31
- continue;
32
- // paths 下的顶级 key 就是 path(以 / 开头)
33
- if (line.startsWith(" /")) {
34
- currentPath = trimmed.replace(/:$/, "");
35
- endpoints.set(currentPath, new Set());
36
- continue;
37
- }
38
- // path 下的 method(get/post/put/delete/patch)
39
- if (currentPath && line.startsWith(" ")) {
40
- const methodMatch = trimmed.match(/^(get|post|put|delete|patch|options|head):$/);
41
- if (methodMatch) {
42
- endpoints.get(currentPath)?.add(methodMatch[1].toLowerCase());
43
- }
44
- }
45
- // 离开 paths section(遇到非空行且缩进 <= 1)
46
- if (trimmed.length > 0 && !line.startsWith(" ") && trimmed !== "paths:") {
47
- break;
48
- }
49
- }
50
- return endpoints;
51
- }
52
- /** 从详细设计文档提取 endpoint 引用(路径 + 方法) */
53
- function extractDesignDocEndpoints(content) {
54
- const endpoints = new Map();
55
- // 匹配常见格式:GET /api/xxx、POST /api/xxx、`GET /xxx` 等
56
- const endpointRegex = /`?(GET|POST|PUT|DELETE|PATCH|OPTIONS|HEAD)\s+(\/[^\s`<,,)]+)/gi;
57
- let match;
58
- while ((match = endpointRegex.exec(content)) !== null) {
59
- const method = match[1].toLowerCase();
60
- const url = match[2];
61
- // 提取 path(去掉 query string)
62
- const pathOnly = url.split("?")[0].split("{")[0].replace(/\/+$/, "") || "/";
63
- if (!endpoints.has(pathOnly)) {
64
- endpoints.set(pathOnly, new Set());
65
- }
66
- endpoints.get(pathOnly)?.add(method);
67
- }
68
- return endpoints;
69
- }
70
- /**
71
- * openapi_sync_check 执行器入口。
72
- *
73
- * 比对 openapi.yaml 与详细设计文档,检查:
74
- * 1. 设计文档引用的 endpoint 在 openapi.yaml 中存在
75
- * 2. 方法一致(GET/POST/PUT/DELETE 等)
76
- */
77
- export const executeOpenApiSyncCheck = async (check, ctx) => {
78
- const projectRoot = ctx.projectRoot;
79
- // 定位文件
80
- const openApiPath = path.join(projectRoot, "docs", "api", "openapi.yaml");
81
- const designDocPath = path.join(projectRoot, "docs", "design", "03-详细设计文档.md");
82
- if (!fs.existsSync(openApiPath)) {
83
- return {
84
- check_id: check.id,
85
- executed_by: "code",
86
- passed: false,
87
- error: "openapi.yaml 不存在",
88
- };
89
- }
90
- if (!fs.existsSync(designDocPath)) {
91
- // 详细设计是可选产物,不存在时通过
92
- return {
93
- check_id: check.id,
94
- executed_by: "code",
95
- passed: true,
96
- evidence: "详细设计文档不存在(可选产物),跳过检查",
97
- };
98
- }
99
- // 容错读取:路径偶发为目录(EISDIR)或无权限(EACCES),裸 readFileSync 会崩整个 executor
100
- let openApiContent;
101
- let designDocContent;
102
- try {
103
- openApiContent = fs.readFileSync(openApiPath, "utf-8");
104
- designDocContent = fs.readFileSync(designDocPath, "utf-8");
105
- }
106
- catch (err) {
107
- return {
108
- check_id: check.id,
109
- executed_by: "code",
110
- passed: false,
111
- error: `openapi/design 文档读取失败(EISDIR/EACCES): ${err instanceof Error ? err.message : String(err)}`,
112
- };
113
- }
114
- const openApiEndpoints = extractOpenApiEndpoints(openApiContent);
115
- const designEndpoints = extractDesignDocEndpoints(designDocContent);
116
- // 比对:设计文档引用的 endpoint 必须在 openapi.yaml 中存在
117
- const mismatches = [];
118
- for (const [designPath, methods] of designEndpoints) {
119
- const openApiMethods = openApiEndpoints.get(designPath);
120
- if (!openApiMethods) {
121
- mismatches.push(`路径 ${designPath} 在 openapi.yaml 中不存在`);
122
- continue;
123
- }
124
- for (const method of methods) {
125
- if (!openApiMethods.has(method)) {
126
- mismatches.push(`${method.toUpperCase()} ${designPath} 在 openapi.yaml 中不存在`);
127
- }
128
- }
129
- }
130
- if (mismatches.length === 0) {
131
- return {
132
- check_id: check.id,
133
- executed_by: "code",
134
- passed: true,
135
- evidence: `设计文档 ${designEndpoints.size} 个 endpoint 全部与 openapi.yaml 一致`,
136
- };
137
- }
138
- return {
139
- check_id: check.id,
140
- executed_by: "code",
141
- passed: false,
142
- evidence: `发现 ${mismatches.length} 处不一致:\n${mismatches.slice(0, 20).join("\n")}`,
143
- };
144
- };
145
- //# sourceMappingURL=executors_openapi_sync.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"executors_openapi_sync.js","sourceRoot":"","sources":["../../../src/gate/executors/executors_openapi_sync.ts"],"names":[],"mappings":"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"}