soloforge 1.1.47 → 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.
- package/README.md +11 -7
- package/dist/cli/adapter_writers.d.ts +5 -0
- package/dist/cli/adapter_writers.d.ts.map +1 -1
- package/dist/cli/adapter_writers.js +25 -0
- package/dist/cli/adapter_writers.js.map +1 -1
- package/dist/cli/init.d.ts.map +1 -1
- package/dist/cli/init.js +3 -1
- package/dist/cli/init.js.map +1 -1
- package/dist/cli/scope_check.d.ts +4 -0
- package/dist/cli/scope_check.d.ts.map +1 -0
- package/dist/cli/scope_check.js +51 -0
- package/dist/cli/scope_check.js.map +1 -0
- package/dist/context/adapters/claude_code/hooks.d.ts +5 -7
- package/dist/context/adapters/claude_code/hooks.d.ts.map +1 -1
- package/dist/context/adapters/claude_code/hooks.js +11 -9
- package/dist/context/adapters/claude_code/hooks.js.map +1 -1
- package/dist/context/adapters/shared/integration_guide.d.ts +3 -3
- package/dist/context/adapters/shared/integration_guide.js +18 -8
- package/dist/context/adapters/shared/integration_guide.js.map +1 -1
- package/dist/context/adapters/shared/workflow_template.js +1 -1
- package/dist/context/config/intent_schema.d.ts +793 -6
- package/dist/context/config/intent_schema.d.ts.map +1 -1
- package/dist/context/config/intent_schema.js +9 -0
- package/dist/context/config/intent_schema.js.map +1 -1
- package/dist/context/config/resolver.d.ts +9 -0
- package/dist/context/config/resolver.d.ts.map +1 -1
- package/dist/context/config/resolver.js +5 -0
- package/dist/context/config/resolver.js.map +1 -1
- package/dist/core/adversarial_review_store.d.ts +133 -0
- package/dist/core/adversarial_review_store.d.ts.map +1 -0
- package/dist/core/adversarial_review_store.js +161 -0
- package/dist/core/adversarial_review_store.js.map +1 -0
- package/dist/core/domain_transition.d.ts.map +1 -1
- package/dist/core/domain_transition.js +3 -0
- package/dist/core/domain_transition.js.map +1 -1
- package/dist/core/gate_record_store.d.ts +2 -0
- package/dist/core/gate_record_store.d.ts.map +1 -1
- package/dist/core/gate_record_store.js +17 -4
- package/dist/core/gate_record_store.js.map +1 -1
- package/dist/core/git_utils.d.ts +1 -1
- package/dist/core/git_utils.d.ts.map +1 -1
- package/dist/core/git_utils.js +8 -4
- package/dist/core/git_utils.js.map +1 -1
- package/dist/core/observer.d.ts.map +1 -1
- package/dist/core/observer.js +26 -2
- package/dist/core/observer.js.map +1 -1
- package/dist/core/task_context/constants.d.ts.map +1 -1
- package/dist/core/task_context/constants.js +4 -2
- package/dist/core/task_context/constants.js.map +1 -1
- package/dist/core/task_context/manager.d.ts +4 -4
- package/dist/core/task_context/manager.d.ts.map +1 -1
- package/dist/core/task_context/manager.js +69 -62
- package/dist/core/task_context/manager.js.map +1 -1
- package/dist/core/task_context/manager_setters.d.ts +2 -0
- package/dist/core/task_context/manager_setters.d.ts.map +1 -1
- package/dist/core/task_context/manager_setters.js +10 -0
- package/dist/core/task_context/manager_setters.js.map +1 -1
- package/dist/core/task_context/stage_fact_ownership.js +1 -1
- package/dist/core/task_context/stage_fact_ownership.js.map +1 -1
- package/dist/core/task_context/status_transitions.js +5 -5
- package/dist/core/task_context/status_transitions.js.map +1 -1
- package/dist/core/types.d.ts +29 -0
- package/dist/core/types.d.ts.map +1 -1
- package/dist/core/waiver_store.d.ts +100 -0
- package/dist/core/waiver_store.d.ts.map +1 -0
- package/dist/core/waiver_store.js +185 -0
- package/dist/core/waiver_store.js.map +1 -0
- package/dist/domain/asset_registry/derived_registry.d.ts +10 -0
- package/dist/domain/asset_registry/derived_registry.d.ts.map +1 -1
- package/dist/domain/asset_registry/derived_registry.js +10 -0
- package/dist/domain/asset_registry/derived_registry.js.map +1 -1
- package/dist/domain/asset_registry/derived_types.d.ts +27 -0
- package/dist/domain/asset_registry/derived_types.d.ts.map +1 -1
- package/dist/domain/asset_registry/derived_types.js +10 -0
- package/dist/domain/asset_registry/derived_types.js.map +1 -1
- package/dist/domain/build/engine.d.ts +1 -0
- package/dist/domain/build/engine.d.ts.map +1 -1
- package/dist/domain/build/engine.js +34 -4
- package/dist/domain/build/engine.js.map +1 -1
- package/dist/domain/contracts/design_lifecycle_contract.d.ts.map +1 -1
- package/dist/domain/contracts/design_lifecycle_contract.js +11 -4
- package/dist/domain/contracts/design_lifecycle_contract.js.map +1 -1
- package/dist/domain/design/contract.d.ts.map +1 -1
- package/dist/domain/design/contract.js +11 -0
- package/dist/domain/design/contract.js.map +1 -1
- package/dist/domain/design/engine.d.ts +1 -0
- package/dist/domain/design/engine.d.ts.map +1 -1
- package/dist/domain/design/engine.js +35 -3
- package/dist/domain/design/engine.js.map +1 -1
- package/dist/domain/engine_helpers.d.ts +37 -0
- package/dist/domain/engine_helpers.d.ts.map +1 -1
- package/dist/domain/engine_helpers.js +86 -0
- package/dist/domain/engine_helpers.js.map +1 -1
- package/dist/domain/operate/engine.d.ts +1 -0
- package/dist/domain/operate/engine.d.ts.map +1 -1
- package/dist/domain/operate/engine.js +19 -2
- package/dist/domain/operate/engine.js.map +1 -1
- package/dist/domain/types.d.ts +6 -0
- package/dist/domain/types.d.ts.map +1 -1
- package/dist/domain/types.js.map +1 -1
- package/dist/domain/verify/engine.d.ts +1 -0
- package/dist/domain/verify/engine.d.ts.map +1 -1
- package/dist/domain/verify/engine.js +18 -1
- package/dist/domain/verify/engine.js.map +1 -1
- package/dist/gate/certainty_gate.d.ts +10 -0
- package/dist/gate/certainty_gate.d.ts.map +1 -1
- package/dist/gate/certainty_gate.js.map +1 -1
- package/dist/gate/contracts/tool_actions.d.ts +11 -2
- package/dist/gate/contracts/tool_actions.d.ts.map +1 -1
- package/dist/gate/contracts/tool_actions.js +12 -2
- package/dist/gate/contracts/tool_actions.js.map +1 -1
- package/dist/gate/contracts/tool_invocation_contract_registry.d.ts.map +1 -1
- package/dist/gate/contracts/tool_invocation_contract_registry.js +11 -1
- package/dist/gate/contracts/tool_invocation_contract_registry.js.map +1 -1
- package/dist/gate/executors/executors_annotation.d.ts +33 -10
- package/dist/gate/executors/executors_annotation.d.ts.map +1 -1
- package/dist/gate/executors/executors_annotation.js +119 -64
- package/dist/gate/executors/executors_annotation.js.map +1 -1
- package/dist/gate/executors/executors_artifact.d.ts +20 -1
- package/dist/gate/executors/executors_artifact.d.ts.map +1 -1
- package/dist/gate/executors/executors_artifact.js +83 -123
- package/dist/gate/executors/executors_artifact.js.map +1 -1
- package/dist/gate/executors/executors_build.d.ts +2 -2
- package/dist/gate/executors/executors_build.d.ts.map +1 -1
- package/dist/gate/executors/executors_build.js +28 -126
- package/dist/gate/executors/executors_build.js.map +1 -1
- package/dist/gate/executors/executors_deploy.d.ts.map +1 -1
- package/dist/gate/executors/executors_deploy.js +35 -7
- package/dist/gate/executors/executors_deploy.js.map +1 -1
- package/dist/gate/executors/executors_external_command.d.ts.map +1 -1
- package/dist/gate/executors/executors_external_command.js +54 -2
- package/dist/gate/executors/executors_external_command.js.map +1 -1
- package/dist/gate/executors/executors_field_mapping.d.ts +7 -0
- package/dist/gate/executors/executors_field_mapping.d.ts.map +1 -0
- package/dist/gate/executors/executors_field_mapping.js +191 -0
- package/dist/gate/executors/executors_field_mapping.js.map +1 -0
- package/dist/gate/executors/executors_jacoco.d.ts +3 -0
- package/dist/gate/executors/executors_jacoco.d.ts.map +1 -0
- package/dist/gate/executors/executors_jacoco.js +70 -0
- package/dist/gate/executors/executors_jacoco.js.map +1 -0
- package/dist/gate/executors/executors_prerequisite.d.ts +1 -1
- package/dist/gate/executors/executors_prerequisite.d.ts.map +1 -1
- package/dist/gate/executors/executors_prerequisite.js +2 -62
- package/dist/gate/executors/executors_prerequisite.js.map +1 -1
- package/dist/gate/executors/executors_probe.d.ts +1 -0
- package/dist/gate/executors/executors_probe.d.ts.map +1 -1
- package/dist/gate/executors/executors_probe.js +1 -0
- package/dist/gate/executors/executors_probe.js.map +1 -1
- package/dist/gate/executors/executors_regex_scan.d.ts.map +1 -1
- package/dist/gate/executors/executors_regex_scan.js +34 -13
- package/dist/gate/executors/executors_regex_scan.js.map +1 -1
- package/dist/gate/executors/executors_scope.d.ts +7 -3
- package/dist/gate/executors/executors_scope.d.ts.map +1 -1
- package/dist/gate/executors/executors_scope.js +20 -173
- package/dist/gate/executors/executors_scope.js.map +1 -1
- package/dist/gate/executors/executors_trace.d.ts +5 -0
- package/dist/gate/executors/executors_trace.d.ts.map +1 -1
- package/dist/gate/executors/executors_trace.js +295 -4
- package/dist/gate/executors/executors_trace.js.map +1 -1
- package/dist/gate/executors/index.d.ts.map +1 -1
- package/dist/gate/executors/index.js +4 -2
- package/dist/gate/executors/index.js.map +1 -1
- package/dist/gate/gate_engine.d.ts +20 -0
- package/dist/gate/gate_engine.d.ts.map +1 -1
- package/dist/gate/gate_engine.js +58 -6
- package/dist/gate/gate_engine.js.map +1 -1
- package/dist/gate/gate_registry_bridge.d.ts +12 -2
- package/dist/gate/gate_registry_bridge.d.ts.map +1 -1
- package/dist/gate/gate_registry_bridge.js +7 -5
- package/dist/gate/gate_registry_bridge.js.map +1 -1
- package/dist/gate/middleware_gates.js +1 -1
- package/dist/gate/middleware_gates.js.map +1 -1
- package/dist/gate/release/gate_checks/checkAssetAntiBloat.d.ts.map +1 -1
- package/dist/gate/release/gate_checks/checkAssetAntiBloat.js +3 -0
- package/dist/gate/release/gate_checks/checkAssetAntiBloat.js.map +1 -1
- package/dist/gate/scope_resolver.d.ts +7 -0
- package/dist/gate/scope_resolver.d.ts.map +1 -1
- package/dist/gate/scope_resolver.js +1 -1
- package/dist/gate/scope_resolver.js.map +1 -1
- package/dist/index.js +5 -0
- package/dist/index.js.map +1 -1
- package/dist/server/tools/index.d.ts.map +1 -1
- package/dist/server/tools/index.js +4 -2
- package/dist/server/tools/index.js.map +1 -1
- package/dist/server/tools/middleware.d.ts.map +1 -1
- package/dist/server/tools/middleware.js +1 -0
- package/dist/server/tools/middleware.js.map +1 -1
- package/dist/server/tools/schemas.d.ts +10 -0
- package/dist/server/tools/schemas.d.ts.map +1 -1
- package/dist/server/tools/schemas.js +10 -0
- package/dist/server/tools/schemas.js.map +1 -1
- package/dist/server/tools/sf_doctor.d.ts +8 -0
- package/dist/server/tools/sf_doctor.d.ts.map +1 -1
- package/dist/server/tools/sf_doctor.js +58 -2
- package/dist/server/tools/sf_doctor.js.map +1 -1
- package/dist/server/tools/sf_task.d.ts +83 -0
- package/dist/server/tools/sf_task.d.ts.map +1 -1
- package/dist/server/tools/sf_task.js +121 -4
- package/dist/server/tools/sf_task.js.map +1 -1
- package/dist/server/tools/sf_waiver.d.ts +31 -0
- package/dist/server/tools/sf_waiver.d.ts.map +1 -0
- package/dist/server/tools/sf_waiver.js +139 -0
- package/dist/server/tools/sf_waiver.js.map +1 -0
- package/dist/server/tools/sf_work.d.ts +194 -0
- package/dist/server/tools/sf_work.d.ts.map +1 -1
- package/dist/server/tools/sf_work.js +603 -40
- package/dist/server/tools/sf_work.js.map +1 -1
- package/dist/shared/paths.d.ts +4 -0
- package/dist/shared/paths.d.ts.map +1 -1
- package/dist/shared/paths.js +6 -0
- package/dist/shared/paths.js.map +1 -1
- package/dist/shared/traceability_id_utils.js +3 -3
- package/dist/shared/traceability_id_utils.js.map +1 -1
- package/dist/types/pipeline_types.d.ts +4 -1
- package/dist/types/pipeline_types.d.ts.map +1 -1
- package/dist/verify/audit/probe_executor.d.ts +4 -1
- package/dist/verify/audit/probe_executor.d.ts.map +1 -1
- package/dist/verify/audit/probe_executor.js +4 -1
- package/dist/verify/audit/probe_executor.js.map +1 -1
- package/dist/verify/audit/probe_rule.d.ts +3 -0
- package/dist/verify/audit/probe_rule.d.ts.map +1 -1
- package/dist/verify/audit/probe_rule.js +3 -0
- package/dist/verify/audit/probe_rule.js.map +1 -1
- package/dist/verify/contracts/decision_workshop.d.ts.map +1 -1
- package/dist/verify/contracts/decision_workshop.js +4 -3
- package/dist/verify/contracts/decision_workshop.js.map +1 -1
- package/dist/verify/contracts/runtime_state_recovery_registry.d.ts.map +1 -1
- package/dist/verify/contracts/runtime_state_recovery_registry.js +0 -1
- package/dist/verify/contracts/runtime_state_recovery_registry.js.map +1 -1
- package/package.json +1 -1
- package/templates/build/enforced.md +263 -68
- package/templates/build//346/263/250/351/207/212/347/272/252/345/276/213.md +48 -0
- package/templates/build//346/265/213/350/257/225/344/274/230/345/205/210/347/274/226/347/240/201.md +1 -0
- package/templates/build//346/265/213/350/257/225/350/256/241/345/210/222.md +9 -4
- package/templates/build//347/274/226/347/240/201/347/272/252/345/276/213.md +28 -1
- package/templates/design/API/346/216/245/345/217/243/350/247/204/346/240/274/346/226/207/346/241/243.md +7 -0
- package/templates/design/enforced.md +204 -14
- 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 +9 -7
- package/templates/design//345/210/207/347/211/207/350/247/204/345/210/222.md +4 -0
- package/templates/design//345/274/200/345/217/221/345/210/207/347/211/207/350/256/241/345/210/222.md +76 -0
- package/templates/design//346/225/260/346/215/256/345/272/223/350/256/276/350/256/241/346/226/207/346/241/243.md +2 -0
- package/templates/design//346/236/266/346/236/204/350/256/276/350/256/241.md +24 -0
- package/templates/design//350/256/276/350/256/241/345/206/263/347/255/226/347/272/252/345/276/213.md +58 -0
- package/templates/design//350/256/276/350/256/241/350/264/250/351/207/217/350/246/201/347/202/271.md +58 -0
- package/templates/design//351/234/200/346/261/202/345/210/206/346/236/220.md +24 -0
- package/templates/operate/UI/350/247/206/350/247/211/351/252/214/346/224/266/347/272/252/345/276/213.md +85 -0
- package/templates/operate/enforced.md +42 -6
- package/templates/operate//345/217/221/345/270/203/350/257/264/346/230/216.md +19 -1
- package/templates/operate//351/203/250/347/275/262/351/205/215/347/275/256.md +10 -0
- package/templates/shared/enforced.md +37 -0
- package/templates/shared//345/267/245/344/275/234/346/265/201/345/257/274/350/210/252/345/245/221/347/272/246.md +1 -1
- 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
- package/templates/shared//347/240/224/350/256/250/350/256/260/345/275/225.md +54 -0
- package/templates/verify/enforced.md +92 -262
- package/templates/verify//344/272/244/344/273/230/345/256/214/345/244/207/346/200/247/345/256/241/346/237/245.md +1 -0
- package/templates/verify//344/273/243/347/240/201/345/256/241/346/237/245/346/212/245/345/221/212.md +12 -2
- package/templates/verify//345/256/241/346/237/245/346/270/205/345/215/225.md +3 -1
- package/templates/verify//346/236/266/346/236/204/350/257/255/344/271/211/347/272/242/347/272/277.md +60 -0
- package/dist/core/scope_checker.d.ts +0 -29
- package/dist/core/scope_checker.d.ts.map +0 -1
- package/dist/core/scope_checker.js +0 -53
- package/dist/core/scope_checker.js.map +0 -1
- package/dist/gate/executors/executors_openapi_sync.d.ts +0 -23
- package/dist/gate/executors/executors_openapi_sync.d.ts.map +0 -1
- package/dist/gate/executors/executors_openapi_sync.js +0 -145
- package/dist/gate/executors/executors_openapi_sync.js.map +0 -1
|
@@ -10,114 +10,14 @@ extra:
|
|
|
10
10
|
checks:
|
|
11
11
|
- id: SOLID-DIP
|
|
12
12
|
executor: regex_pattern_scan
|
|
13
|
-
rule: "禁止直接构造依赖(new Service/Repository/Dao
|
|
13
|
+
rule: "禁止直接构造依赖(new Service/Repository/Dao),必须依赖注入(Java/Spring;TS 无 DI 容器不适用)"
|
|
14
14
|
severity: error
|
|
15
15
|
check_type: deterministic
|
|
16
16
|
pattern: '/\bnew\s+\w*(Service|Repository|Repo|Dao|Mapper|Manager)\s*\(/'
|
|
17
|
-
languages: [
|
|
17
|
+
languages: [java]
|
|
18
18
|
evidence_required: ["regex_pattern_scan 扫描结果(git diff 变更文件无直接构造依赖命中)"]
|
|
19
19
|
gate: verify-gate
|
|
20
20
|
target: "self"
|
|
21
|
-
- id: CON-01
|
|
22
|
-
executor: regex_pattern_scan
|
|
23
|
-
rule: "共享可变状态必须有并发保护"
|
|
24
|
-
severity: error
|
|
25
|
-
check_type: deterministic
|
|
26
|
-
pattern: '/\b(public|private|protected)\s+static\s+[\w<>,\s]*\b(HashMap|ArrayList|HashSet|LinkedList)\b/'
|
|
27
|
-
languages: [java]
|
|
28
|
-
evidence_required: ["regex_pattern_scan 扫描结果(git diff 变更文件无未保护共享状态命中)"]
|
|
29
|
-
gate: build-gate
|
|
30
|
-
target: "self"
|
|
31
|
-
- id: CON-02
|
|
32
|
-
executor: regex_pattern_scan
|
|
33
|
-
rule: "分布式环境禁止使用 JVM 级锁"
|
|
34
|
-
severity: error
|
|
35
|
-
check_type: deterministic
|
|
36
|
-
pattern: '/\bsynchronized\s*\(/'
|
|
37
|
-
languages: [java]
|
|
38
|
-
evidence_required: ["regex_pattern_scan 扫描结果(git diff 变更文件无 JVM 级锁误用命中)"]
|
|
39
|
-
gate: build-gate
|
|
40
|
-
target: "self"
|
|
41
|
-
- id: CON-03
|
|
42
|
-
executor: regex_pattern_scan
|
|
43
|
-
rule: "先查后改(如库存/计数)必须用原子操作"
|
|
44
|
-
severity: error
|
|
45
|
-
check_type: deterministic
|
|
46
|
-
pattern: '/\.(findById|getById|getOne|selectById)\s*\([^)]*\)/'
|
|
47
|
-
languages: [java]
|
|
48
|
-
evidence_required: ["regex_pattern_scan 扫描结果(git diff 变更文件无非原子先查后改命中)"]
|
|
49
|
-
gate: build-gate
|
|
50
|
-
target: "self"
|
|
51
|
-
- id: CON-04
|
|
52
|
-
executor: regex_pattern_scan
|
|
53
|
-
rule: "禁止 @Transactional 同类内部调用导致事务失效"
|
|
54
|
-
severity: error
|
|
55
|
-
check_type: deterministic
|
|
56
|
-
pattern: '/\bthis\.\w+\s*\(/'
|
|
57
|
-
languages: [java]
|
|
58
|
-
evidence_required: ["regex_pattern_scan 扫描结果(git diff 变更文件无事务自调用命中)"]
|
|
59
|
-
gate: build-gate
|
|
60
|
-
target: "self"
|
|
61
|
-
- id: CON-05
|
|
62
|
-
executor: regex_pattern_scan
|
|
63
|
-
rule: "事务内禁止执行外部调用(HTTP/RPC)"
|
|
64
|
-
severity: error
|
|
65
|
-
check_type: deterministic
|
|
66
|
-
pattern: '/\.(getForObject|postForObject|exchange|execute)\s*\(/'
|
|
67
|
-
languages: [java]
|
|
68
|
-
evidence_required: ["regex_pattern_scan 扫描结果(git diff 变更文件无事务内外部调用命中)"]
|
|
69
|
-
gate: build-gate
|
|
70
|
-
target: "self"
|
|
71
|
-
- id: CON-06
|
|
72
|
-
executor: regex_pattern_scan
|
|
73
|
-
rule: "SimpleDateFormat 非线程安全,禁止作为共享成员"
|
|
74
|
-
severity: error
|
|
75
|
-
check_type: deterministic
|
|
76
|
-
pattern: '/\bstatic\s+[\w<>,\s]*SimpleDateFormat\b/'
|
|
77
|
-
languages: [java]
|
|
78
|
-
evidence_required: ["regex_pattern_scan 扫描结果(git diff 变更文件无 SimpleDateFormat 共享命中)"]
|
|
79
|
-
gate: build-gate
|
|
80
|
-
target: "self"
|
|
81
|
-
- id: CON-07
|
|
82
|
-
executor: regex_pattern_scan
|
|
83
|
-
rule: "ThreadLocal 必须清理避免内存泄漏"
|
|
84
|
-
severity: error
|
|
85
|
-
check_type: deterministic
|
|
86
|
-
pattern: '/\bnew\s+ThreadLocal\b/'
|
|
87
|
-
languages: [java]
|
|
88
|
-
evidence_required: ["regex_pattern_scan 扫描结果(git diff 变更文件无 ThreadLocal 未清理命中)"]
|
|
89
|
-
gate: build-gate
|
|
90
|
-
target: "self"
|
|
91
|
-
- id: CON-08
|
|
92
|
-
executor: regex_pattern_scan
|
|
93
|
-
rule: "HashMap/ArrayList 等禁止作为共享可变类成员"
|
|
94
|
-
severity: error
|
|
95
|
-
check_type: deterministic
|
|
96
|
-
pattern: '/\b(private|protected|public)\s+(?!static)[\w<>,\s]*\b(HashMap|ArrayList|HashSet|LinkedList)\s*[=;]/'
|
|
97
|
-
languages: [java]
|
|
98
|
-
evidence_required: ["regex_pattern_scan 扫描结果(git diff 变更文件无非线程安全集合成员命中)"]
|
|
99
|
-
gate: build-gate
|
|
100
|
-
target: "self"
|
|
101
|
-
- id: CON-09
|
|
102
|
-
executor: regex_pattern_scan
|
|
103
|
-
rule: "CompletableFuture 链必须处理异常"
|
|
104
|
-
severity: error
|
|
105
|
-
check_type: deterministic
|
|
106
|
-
pattern: '/\.(runAsync|supplyAsync)\s*\(/'
|
|
107
|
-
languages: [java]
|
|
108
|
-
evidence_required: ["regex_pattern_scan 扫描结果(git diff 变更文件无未处理异常命中)"]
|
|
109
|
-
gate: build-gate
|
|
110
|
-
target: "self"
|
|
111
|
-
- id: CON-10
|
|
112
|
-
executor: regex_pattern_scan
|
|
113
|
-
rule: "线程池必须正确配置拒绝策略"
|
|
114
|
-
severity: error
|
|
115
|
-
check_type: deterministic
|
|
116
|
-
pattern: '/\bnew\s+ThreadPoolExecutor\s*\(/'
|
|
117
|
-
languages: [java]
|
|
118
|
-
evidence_required: ["regex_pattern_scan 扫描结果(git diff 变更文件无未配置拒绝策略命中)"]
|
|
119
|
-
gate: build-gate
|
|
120
|
-
target: "self"
|
|
121
21
|
- id: PER-01
|
|
122
22
|
executor: regex_pattern_scan
|
|
123
23
|
rule: "禁止循环内逐条数据库调用(N+1 问题)"
|
|
@@ -208,112 +108,13 @@ checks:
|
|
|
208
108
|
evidence_required: ["regex_pattern_scan 扫描结果(git diff 变更文件无未优化图片命中)"]
|
|
209
109
|
gate: verify-gate
|
|
210
110
|
target: "self"
|
|
211
|
-
- id:
|
|
212
|
-
executor:
|
|
213
|
-
rule: "
|
|
214
|
-
severity: error
|
|
215
|
-
check_type: deterministic
|
|
216
|
-
pattern: '/\bpublic\s+\w*Entity\b\s+\w+\s*\(/'
|
|
217
|
-
languages: [java]
|
|
218
|
-
evidence_required: ["regex_pattern_scan 扫描结果(git diff 变更文件无 Entity 直接返回命中)"]
|
|
219
|
-
gate: build-gate
|
|
220
|
-
target: "self"
|
|
221
|
-
- id: API-02
|
|
222
|
-
executor: regex_pattern_scan
|
|
223
|
-
rule: "写操作(POST/PUT/DELETE)必须有 @Transactional"
|
|
224
|
-
severity: error
|
|
225
|
-
check_type: deterministic
|
|
226
|
-
pattern: '/\.(save|insert|update|delete|remove)\s*\(/'
|
|
227
|
-
languages: [java]
|
|
228
|
-
evidence_required: ["regex_pattern_scan 扫描结果(git diff 变更文件无写操作缺事务命中)"]
|
|
229
|
-
gate: build-gate
|
|
230
|
-
target: "self"
|
|
231
|
-
- id: API-03
|
|
232
|
-
executor: regex_pattern_scan
|
|
233
|
-
rule: "接口必须有权限注解"
|
|
234
|
-
severity: error
|
|
235
|
-
check_type: deterministic
|
|
236
|
-
pattern: '/@(Get|Post|Put|Delete|Request)Mapping\s*\(/'
|
|
237
|
-
languages: [java]
|
|
238
|
-
evidence_required: ["regex_pattern_scan 扫描结果(git diff 变更文件无接口缺权限注解命中)"]
|
|
239
|
-
gate: build-gate
|
|
240
|
-
target: "self"
|
|
241
|
-
- id: API-04
|
|
242
|
-
executor: regex_pattern_scan
|
|
243
|
-
rule: "禁止硬编码分页参数,必须参数化"
|
|
244
|
-
severity: error
|
|
245
|
-
check_type: deterministic
|
|
246
|
-
pattern: '/\b(pageNum|pageSize)\s*=\s*\d/'
|
|
247
|
-
languages: [java]
|
|
248
|
-
evidence_required: ["regex_pattern_scan 扫描结果(git diff 变更文件无硬编码分页命中)"]
|
|
249
|
-
gate: build-gate
|
|
250
|
-
target: "self"
|
|
251
|
-
- id: API-05
|
|
252
|
-
executor: regex_pattern_scan
|
|
253
|
-
rule: "请求参数必须有 @Valid/@RequestBody 等校验注解"
|
|
254
|
-
severity: error
|
|
255
|
-
check_type: deterministic
|
|
256
|
-
pattern: '/@RequestBody\b/'
|
|
257
|
-
languages: [java]
|
|
258
|
-
evidence_required: ["regex_pattern_scan 扫描结果(git diff 变更文件无缺参数校验命中)"]
|
|
259
|
-
gate: build-gate
|
|
260
|
-
target: "self"
|
|
261
|
-
- id: API-06
|
|
262
|
-
executor: regex_pattern_scan
|
|
263
|
-
rule: "接口路径须符合 RESTful 规范"
|
|
264
|
-
severity: error
|
|
265
|
-
check_type: deterministic
|
|
266
|
-
pattern: '/@(Get|Post|Put|Delete)Mapping\s*\(\s*[^\)]*(get|list|create|delete|update)/i'
|
|
267
|
-
languages: [java]
|
|
268
|
-
evidence_required: ["regex_pattern_scan 扫描结果(git diff 变更文件无路径违规命中)"]
|
|
269
|
-
gate: build-gate
|
|
270
|
-
target: "self"
|
|
271
|
-
- id: API-07
|
|
272
|
-
executor: regex_pattern_scan
|
|
273
|
-
rule: "接口必须使用统一响应包装(ApiResult/Result/R)"
|
|
111
|
+
- id: REVIEW-STRUCT
|
|
112
|
+
executor: document_structure
|
|
113
|
+
rule: "代码审查报告须含「审查信息」「维度覆盖矩阵」「发现项」「审查清单校验」「完成判定」章节"
|
|
274
114
|
severity: error
|
|
275
115
|
check_type: deterministic
|
|
276
|
-
|
|
277
|
-
|
|
278
|
-
evidence_required: ["regex_pattern_scan 扫描结果(git diff 变更文件无裸返回命中)"]
|
|
279
|
-
gate: build-gate
|
|
280
|
-
target: "self"
|
|
281
|
-
- id: API-08
|
|
282
|
-
executor: regex_pattern_scan
|
|
283
|
-
rule: "分页接口必须返回标准分页结构"
|
|
284
|
-
severity: error
|
|
285
|
-
check_type: deterministic
|
|
286
|
-
pattern: '/\.(findAll|listAll)\s*\(\s*\d/'
|
|
287
|
-
languages: [java]
|
|
288
|
-
evidence_required: ["regex_pattern_scan 扫描结果(git diff 变更文件无非标准分页命中)"]
|
|
289
|
-
gate: build-gate
|
|
290
|
-
target: "self"
|
|
291
|
-
- id: API-09
|
|
292
|
-
executor: regex_pattern_scan
|
|
293
|
-
rule: "接口路径须含版本号"
|
|
294
|
-
severity: error
|
|
295
|
-
check_type: deterministic
|
|
296
|
-
pattern: '/@(Get|Post|Put|Delete|Request)Mapping\s*\(\s*"\/(?!api\/v\d)/i'
|
|
297
|
-
languages: [java]
|
|
298
|
-
evidence_required: ["regex_pattern_scan 扫描结果(git diff 变更文件无缺版本号命中)"]
|
|
299
|
-
gate: build-gate
|
|
300
|
-
target: "self"
|
|
301
|
-
- id: API-10
|
|
302
|
-
executor: regex_pattern_scan
|
|
303
|
-
rule: "接口必须有 Swagger/OpenAPI 文档注解"
|
|
304
|
-
severity: error
|
|
305
|
-
check_type: deterministic
|
|
306
|
-
pattern: '/@(Get|Post|Put|Delete)Mapping\s*\([^)]*\)[\s\S]{0,200}(?!.*@ApiOperation)/'
|
|
307
|
-
languages: [java]
|
|
308
|
-
evidence_required: ["regex_pattern_scan 扫描结果(git diff 变更文件无缺文档注解命中)"]
|
|
309
|
-
gate: build-gate
|
|
310
|
-
target: "self"
|
|
311
|
-
- id: VRF-G02
|
|
312
|
-
executor: semantic
|
|
313
|
-
rule: "所有信任分级为黑盒的审查项必须有人类签署确认(人工签署判断,不可代码确定性判定)"
|
|
314
|
-
severity: info
|
|
315
|
-
check_type: semantic
|
|
316
|
-
evidence_required: ["LLM/人工语义评估结论(pending 标记,advisory 不阻断,随 Reflexion 反馈供客户端 AI 评判)"]
|
|
116
|
+
required_artifact: 代码审查报告模版
|
|
117
|
+
evidence_required: ["docs/audits/02-代码审查报告.md"]
|
|
317
118
|
gate: verify-gate
|
|
318
119
|
target: "self"
|
|
319
120
|
- id: VRF-G03
|
|
@@ -334,15 +135,15 @@ checks:
|
|
|
334
135
|
target: "self"
|
|
335
136
|
- id: VRF-G05
|
|
336
137
|
executor: file_evidence
|
|
337
|
-
rule: "
|
|
338
|
-
severity:
|
|
138
|
+
rule: "产出验收证据文件(file_evidence 验证存在+非空);正常/边界/异常三类覆盖须人工确认(每类≥1条)"
|
|
139
|
+
severity: warning
|
|
339
140
|
check_type: deterministic
|
|
340
141
|
evidence_required: ["正常路径验收证据","边界条件验收证据","异常路径验收证据","场景覆盖统计(3 类均有 >=1 条证据)"]
|
|
341
142
|
gate: verify-gate
|
|
342
143
|
target: "self"
|
|
343
144
|
- id: VRF-G06
|
|
344
145
|
executor: report_structure
|
|
345
|
-
rule: "
|
|
146
|
+
rule: "代码审查报告结构完整非空壳(report_structure 验证≥200字+≥2章节);integrated 无孤岛 + 部署审批须人工确认"
|
|
346
147
|
severity: error
|
|
347
148
|
check_type: deterministic
|
|
348
149
|
required_artifact: 代码审查报告模版
|
|
@@ -351,79 +152,108 @@ checks:
|
|
|
351
152
|
target: "self"
|
|
352
153
|
- id: ARC-09
|
|
353
154
|
executor: external_command
|
|
155
|
+
command: grep
|
|
156
|
+
args: ["-rl", "--include=*.java", "@RestControllerAdvice", "src/"]
|
|
354
157
|
rule: "项目须配置全局异常处理器;grep 项目级存在性,找到(@RestControllerAdvice/@ControllerAdvice)=exitCode 0 通过,缺失=exitCode 1 失败"
|
|
355
158
|
severity: warning
|
|
356
159
|
check_type: deterministic
|
|
357
160
|
evidence_required: ["external_command 结果(项目存在全局异常处理器 = exitCode 0 通过)"]
|
|
358
161
|
gate: verify-gate
|
|
359
162
|
target: "self"
|
|
360
|
-
-
|
|
361
|
-
|
|
362
|
-
|
|
163
|
+
# —— ARCH-DEP 已删(假覆盖:external_command 缺 command → dependency-cruiser 从未真跑、永远 fail-closed)。
|
|
164
|
+
# 分层依赖 / 组件行数非确定性(需 AST / 项目特定规则 / 跨语言工具 dependency-cruiser·ArchUnit),
|
|
165
|
+
# 降级软下限《架构语义红线》+ AI/人工审查。ARC-05(组件<300行)幽灵 check 引用同步清除 ——
|
|
166
|
+
- id: XVAL-REVIEW-REQ
|
|
167
|
+
executor: cross_validation
|
|
168
|
+
rule: "REQ-* 一致性"
|
|
169
|
+
severity: warning
|
|
170
|
+
check_type: deterministic
|
|
171
|
+
required_artifact: 代码审查报告模版
|
|
172
|
+
evidence_required: ["需求分析模版"]
|
|
173
|
+
gate: verify-gate
|
|
174
|
+
target: "self"
|
|
175
|
+
- id: XVAL-REVIEW-API
|
|
176
|
+
executor: cross_validation
|
|
177
|
+
rule: "DD-A* 一致性"
|
|
178
|
+
severity: warning
|
|
179
|
+
check_type: deterministic
|
|
180
|
+
required_artifact: 代码审查报告模版
|
|
181
|
+
evidence_required: ["API接口规格文档模版"]
|
|
182
|
+
gate: verify-gate
|
|
183
|
+
target: "self"
|
|
184
|
+
- id: XVAL-REVIEW-DB
|
|
185
|
+
executor: cross_validation
|
|
186
|
+
rule: "DD-T* 一致性"
|
|
187
|
+
severity: warning
|
|
188
|
+
check_type: deterministic
|
|
189
|
+
required_artifact: 代码审查报告模版
|
|
190
|
+
evidence_required: ["数据库设计文档模版"]
|
|
191
|
+
gate: verify-gate
|
|
192
|
+
target: "self"
|
|
193
|
+
# —— 前端承接一致性(XVAL-REVIEW-FE:审查报告引用的 FE-* 须与架构 §6.3 一致;纯后端双方无 FE-* warning 可忽略)——
|
|
194
|
+
- id: XVAL-REVIEW-FE
|
|
195
|
+
executor: cross_validation
|
|
196
|
+
rule: "FE-* 一致性"
|
|
363
197
|
severity: warning
|
|
364
198
|
check_type: deterministic
|
|
365
|
-
|
|
199
|
+
required_artifact: 代码审查报告模版
|
|
200
|
+
evidence_required: ["架构设计模版"]
|
|
366
201
|
gate: verify-gate
|
|
367
202
|
target: "self"
|
|
368
|
-
|
|
203
|
+
# —— 附件校验(openapi.yaml,redocly lint)——
|
|
204
|
+
- id: OPENAPI-LINT
|
|
369
205
|
executor: external_command
|
|
370
|
-
|
|
206
|
+
command: npx
|
|
207
|
+
args: ["@redocly/cli", "lint", "--config", "redocly.yaml", "docs/api/openapi.yaml"]
|
|
208
|
+
rule: "openapi.yaml 须通过 redocly lint --config redocly.yaml(SoloForge 锁定规则;YAML 语法+OpenAPI 规范)"
|
|
209
|
+
severity: warning
|
|
210
|
+
check_type: deterministic
|
|
211
|
+
evidence_required: ["redocly lint 输出(exitCode 0 通过)"]
|
|
212
|
+
gate: verify-gate
|
|
213
|
+
target: "self"
|
|
214
|
+
# —— 字段映射复审(数据库 §3/§7 ↔ schema.sql,verify 域复审一致)——
|
|
215
|
+
- id: FMAP-REVIEW
|
|
216
|
+
executor: field_mapping_validation
|
|
217
|
+
rule: "表.字段 一致性+覆盖率"
|
|
371
218
|
severity: warning
|
|
372
219
|
check_type: deterministic
|
|
373
|
-
|
|
220
|
+
required_artifact: 数据库设计文档模版
|
|
221
|
+
evidence_required: ["docs/design/schema.sql"]
|
|
222
|
+
gate: verify-gate
|
|
223
|
+
target: "self"
|
|
224
|
+
# —— 验收点↔测试覆盖校验(REQ-* 验收点须有 @covers 标注覆盖,治测试凑数 / coverage theater)——
|
|
225
|
+
- id: AC-COVERAGE
|
|
226
|
+
executor: acceptance_coverage
|
|
227
|
+
rule: "REQ-* 覆盖率"
|
|
228
|
+
severity: error
|
|
229
|
+
check_type: deterministic
|
|
230
|
+
evidence_required: ["需求分析模版"]
|
|
374
231
|
gate: verify-gate
|
|
375
232
|
target: "self"
|
|
376
|
-
- id:
|
|
377
|
-
executor:
|
|
378
|
-
|
|
379
|
-
severity:
|
|
380
|
-
check_type: semantic
|
|
381
|
-
evidence_required: ["LLM 语义评估结论(pending 标记,advisory 不阻断,随 Reflexion 反馈供客户端 AI 评判/重试)"]
|
|
233
|
+
- id: CODEREVIEW-BLOCK
|
|
234
|
+
executor: document_structure
|
|
235
|
+
check_type: deterministic
|
|
236
|
+
severity: error
|
|
382
237
|
gate: verify-gate
|
|
238
|
+
required_artifact: 代码审查报告模版
|
|
239
|
+
rule: "审查维度矩阵/发现项章节须有表格行(反退化:禁只列前几条后省略/其余见附件)"
|
|
240
|
+
block_check:
|
|
241
|
+
item_pattern: '^##\s+(2|3)\.'
|
|
242
|
+
require_table: true
|
|
243
|
+
min_table_rows: 1
|
|
244
|
+
evidence_required: ["代码审查报告模版"]
|
|
383
245
|
target: "self"
|
|
384
246
|
---
|
|
385
247
|
|
|
386
248
|
# verify-gate 强制检查清单
|
|
387
249
|
|
|
388
|
-
|
|
250
|
+
24 条确定性检查(ARCH-DEP 已删:external_command 缺 command → dependency-cruiser 从未真跑,降级软下限;ARC-05 幽灵引用已清)。bridge 按 check.gate 聚合(CON-*/API-* 并发与 API 规范已归位 build/enforced.md——gate 本就是 build-gate;API-01/02 与 build ARC-02/03 重复已删;VRF-G02/ARCH-C-REVIEW semantic advisory 移至 guidance《架构语义红线》)。
|
|
389
251
|
|
|
390
252
|
对应工程经验:
|
|
391
|
-
- SOLID-DIP
|
|
392
|
-
-
|
|
393
|
-
-
|
|
394
|
-
-
|
|
395
|
-
-
|
|
396
|
-
-
|
|
397
|
-
-
|
|
398
|
-
- CON-07
|
|
399
|
-
- CON-08
|
|
400
|
-
- CON-09
|
|
401
|
-
- CON-10
|
|
402
|
-
- PER-01
|
|
403
|
-
- PER-02
|
|
404
|
-
- PER-03
|
|
405
|
-
- PER-04
|
|
406
|
-
- PER-05
|
|
407
|
-
- PER-06
|
|
408
|
-
- PER-07
|
|
409
|
-
- PER-08
|
|
410
|
-
- PER-09
|
|
411
|
-
- API-01
|
|
412
|
-
- API-02
|
|
413
|
-
- API-03
|
|
414
|
-
- API-04
|
|
415
|
-
- API-05
|
|
416
|
-
- API-06
|
|
417
|
-
- API-07
|
|
418
|
-
- API-08
|
|
419
|
-
- API-09
|
|
420
|
-
- API-10
|
|
421
|
-
- VRF-G02
|
|
422
|
-
- VRF-G03
|
|
423
|
-
- VRF-G04
|
|
424
|
-
- VRF-G05
|
|
425
|
-
- VRF-G06
|
|
426
|
-
- ARC-09
|
|
427
|
-
- ARC-05
|
|
428
|
-
- ARCH-DEP
|
|
429
|
-
- ARCH-C-REVIEW
|
|
253
|
+
- SOLID-DIP(依赖注入,Java/Spring;TS 无 DI 容器不适用)
|
|
254
|
+
- PER-01~09(性能:N+1/SELECT */分页/循环/重渲染/useMemo/连接池/大事务/图片)
|
|
255
|
+
- VRF-G03(vitest E1+)/ VRF-G04(tsc)/ VRF-G05(验收三类覆盖)/ VRF-G06(主链路无孤岛+部署审批)
|
|
256
|
+
- ARC-09(全局异常处理器,grep 项目级存在性)
|
|
257
|
+
- XVAL-REVIEW-REQ/API/DB/FE(审查报告↔需求/API/DB/前端 一致性)
|
|
258
|
+
- OPENAPI-LINT / FMAP-REVIEW
|
|
259
|
+
- 分层依赖 / 组件行数:非确定性(需 AST/项目规则/跨语言工具),归软下限《架构语义红线》+ AI/人工审查
|
package/templates/verify//344/273/243/347/240/201/345/256/241/346/237/245/346/212/245/345/221/212.md
CHANGED
|
@@ -21,6 +21,7 @@ extra:
|
|
|
21
21
|
|
|
22
22
|
> **产物定位**:verify 阶段必出。代码审查的最终裁决——发现项按严重度分级,黑盒项须人类签署。
|
|
23
23
|
> **核心纪律**:审查 Agent 与编码 Agent 须独立([[证据驱动与反幻觉]]);黑盒项未经 `[Human-Audit: APPROVED]` 不得判通过([[开发者宪法]])。
|
|
24
|
+
> **反退化纪律**:发现项表须逐条填写(维度/严重度/信任分级/文件/描述/建议/来源),禁止只列前几条后省略、禁止用「其余发现见附件」代替;维度覆盖矩阵每个维度都要标注覆盖状态。
|
|
24
25
|
|
|
25
26
|
# 代码审查报告
|
|
26
27
|
|
|
@@ -41,13 +42,14 @@ extra:
|
|
|
41
42
|
| 安全 | SEC-01~SEC-12 | ✅/❌ | <!-- 数量 --> | |
|
|
42
43
|
| 性能 | PER-01~PER-09 | ✅/❌ | <!-- 数量 --> | |
|
|
43
44
|
| 并发 | CON-01~CON-10 | ✅/❌ | <!-- 数量 --> | |
|
|
44
|
-
| 架构 | ARC-
|
|
45
|
+
| 架构 | ARC-02/04/06/08(build-gate;ARC-03 事务降级编码纪律) | ✅/❌ | <!-- 数量 --> | |
|
|
45
46
|
| SOLID | SOLID-SRP~SOLID-OCP | ✅/❌ | <!-- 数量 --> | |
|
|
46
|
-
| 接口契约 | API-
|
|
47
|
+
| 接口契约 | API-03/04/06/07/08/09(build-gate) | ✅/❌ | <!-- 数量 --> | <!-- 接口审查规则 --> |
|
|
47
48
|
| 可维护性 | MNT-01~MNT-05 | ✅/❌ | <!-- 数量 --> | **AI 盲区** |
|
|
48
49
|
| 交付完备 | DEL-01~DEL-05, SEL-01~SEL-02, TRA-01~TRA-02 | ✅/❌ | <!-- 数量 --> | |
|
|
49
50
|
| 决策完整性 | DEC-01~DEC-04 | ✅/❌ | <!-- 数量 --> | **AI 盲区** |
|
|
50
51
|
| 上游交叉验证 | UCV-REV-01~UCV-REV-04 | ✅/❌ | <!-- 数量 --> | |
|
|
52
|
+
| 前端工程 | FE-SKELETON/FE-CONTRACT/FE-AUTH | ✅/❌ | <!-- 数量 --> | 涉及 FE-* 时:骨架完整/前后端契约一致/前端权限承接(XVAL-REVIEW-FE + 交付完备性审查前端维度) |
|
|
51
53
|
|
|
52
54
|
> **AI 盲区维度标注**:design(设计意图)/ maintainability(可维护性深层)/ documentation(文档完备)——这些维度 AI 审查置信度较低,建议人类重点复核。
|
|
53
55
|
|
|
@@ -67,3 +69,11 @@ extra:
|
|
|
67
69
|
| 检查项 | 通过 |
|
|
68
70
|
|---|---|
|
|
69
71
|
| <!-- 检查项 --> | 是/否 |
|
|
72
|
+
|
|
73
|
+
## 完成判定
|
|
74
|
+
|
|
75
|
+
- [ ] 审查覆盖所有变更文件
|
|
76
|
+
- [ ] 发现项按严重度分级(error/warning/info)
|
|
77
|
+
- [ ] 审查清单全部校验通过
|
|
78
|
+
- [ ] 无未处理的 error 级发现
|
|
79
|
+
- [ ] 发现项表逐条完整填写,维度覆盖矩阵无遗漏维度
|
|
@@ -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-
|
|
62
|
+
### 接口契约(对应 API-03/04/06/07/08/09)
|
|
61
63
|
- DTO 不暴露 Entity、写操作事务、权限注解、参数校验、RESTful、统一响应、分页、版本号、文档
|
|
62
64
|
|
|
63
65
|
### 可维护性(AI 盲区,重点人工复核)
|
package/templates/verify//346/236/266/346/236/204/350/257/255/344/271/211/347/272/242/347/272/277.md
ADDED
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
---
|
|
2
|
+
id: ka-guidance-架构语义红线
|
|
3
|
+
kind: guidance
|
|
4
|
+
title: 架构语义红线
|
|
5
|
+
sync_policy: engine_only
|
|
6
|
+
status: active
|
|
7
|
+
triggers:
|
|
8
|
+
- 架构红线
|
|
9
|
+
- 跨服务
|
|
10
|
+
- 跨边界
|
|
11
|
+
- 幂等
|
|
12
|
+
- 审计记录
|
|
13
|
+
- 绕过认证
|
|
14
|
+
- 部署方案
|
|
15
|
+
- 风险登记
|
|
16
|
+
- 黑盒审查
|
|
17
|
+
- 人工确认
|
|
18
|
+
- 人工签署
|
|
19
|
+
extra:
|
|
20
|
+
name: architecture-semantic-redline
|
|
21
|
+
scope:
|
|
22
|
+
- '*'
|
|
23
|
+
products:
|
|
24
|
+
- '*'
|
|
25
|
+
type: constraint
|
|
26
|
+
lifecycle_status: active
|
|
27
|
+
version: 1.0.0
|
|
28
|
+
domain: verify
|
|
29
|
+
owner_mechanism: mc-stage-gate-engine
|
|
30
|
+
---
|
|
31
|
+
|
|
32
|
+
# 架构语义红线
|
|
33
|
+
|
|
34
|
+
> **来源**:从 verify/enforced.md 的 `ARCH-C-REVIEW`(架构语义红线 9 条)+ `VRF-G02`(黑盒审查须人工确认)拆出。
|
|
35
|
+
> 这些规则**不可代码确定性判定**(需业务上下文 / 人工判断),故归软下限(triggers 注入 + AI/人工评判),不进 gate。确定性架构检查仅 ARC-09(全局异常处理器,grep 项目级存在性);**分层依赖 / 组件行数同样不可代码确定性判定**(需 AST / 项目特定规则 / 跨语言工具 dependency-cruiser·ArchUnit),归本软下限 + AI/人工审查(原 ARCH-DEP enforced 假覆盖已删,ARC-05 幽灵引用已清)。
|
|
36
|
+
|
|
37
|
+
## 架构语义红线(原 ARCH-C-REVIEW 9 条)
|
|
38
|
+
|
|
39
|
+
客户端 AI 结合业务上下文评判:
|
|
40
|
+
|
|
41
|
+
1. **禁止 Patch JAR / docker commit / 运行时文件替换交付代码** —— 交付物须可重建、可追溯
|
|
42
|
+
2. **禁止跨服务边界直访持久化** —— 前端 / Controller / 定时任务不得绕过服务层直接访问数据库实现
|
|
43
|
+
3. **禁止绕过统一认证与数据范围控制暴露业务接口** —— 所有业务接口须经认证 + 数据权限
|
|
44
|
+
4. **新增写操作须有可追溯审计记录** —— 谁 / 何时 / 改了什么
|
|
45
|
+
5. **异步消息 / 定时任务 / 补偿逻辑须幂等** —— 重复执行不产生副作用
|
|
46
|
+
6. **模块边界单一职责无过度耦合**(ARCH-R04)
|
|
47
|
+
7. **NFR 目标值可测量**(ARCH-R07)—— 性能 / 容量指标有具体数值可验证
|
|
48
|
+
8. **部署方案环境规划 / CI-CD 完整**(ARCH-R09)
|
|
49
|
+
9. **风险登记覆盖度充分**(ARCH-R10)
|
|
50
|
+
10. **模块依赖遵循分层方向、无循环依赖**(原 ARCH-DEP 降级)—— 表现层不得直接访问数据层、service 不得跨层直访;分层违规 / 循环依赖须 AI/人工审查(dependency-cruiser/ArchUnit 项目特定,不进确定性 gate)
|
|
51
|
+
|
|
52
|
+
## 黑盒审查须人工确认(原 VRF-G02)
|
|
53
|
+
|
|
54
|
+
所有信任分级为**黑盒**的审查项,必须有人类签署确认(人工签署判断,不可代码确定性判定)。
|
|
55
|
+
|
|
56
|
+
> 为何软:机器无法判定"黑盒审查是否经人工签署"。靠本纪律提醒 AI 主动要求人工确认,并在审查报告记录签署人/时间。
|
|
57
|
+
|
|
58
|
+
## 关联
|
|
59
|
+
- 确定性架构检查:仅 ARC-09(全局异常处理器)。分层依赖 / 组件行数 → 本软下限 + AI/人工(非确定性,原 ARCH-DEP enforced 假覆盖已删)
|
|
60
|
+
- [[证据驱动与反幻觉]] / [[开发者宪法]]
|
|
@@ -1,29 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Scope 检查器 — 写路径 scope 硬检查(工具层拦截)。
|
|
3
|
-
*
|
|
4
|
-
* 职责边界:
|
|
5
|
-
* - 负责:判断文件路径是否在任务允许的写范围内
|
|
6
|
-
* - 不负责:门禁检查、业务逻辑、状态派生
|
|
7
|
-
*
|
|
8
|
-
* 被谁调用:sf_work(act 动作,写入前拦截)
|
|
9
|
-
* 调用谁:无(纯计算)
|
|
10
|
-
*
|
|
11
|
-
* 数据流:文件路径 + allowed_paths → boolean
|
|
12
|
-
* 持久化:无
|
|
13
|
-
*/
|
|
14
|
-
/** Scope 检查结果 */
|
|
15
|
-
export interface ScopeCheckResult {
|
|
16
|
-
/** 是否在范围内 */
|
|
17
|
-
allowed: boolean;
|
|
18
|
-
/** 拒绝原因(allowed=false 时有值) */
|
|
19
|
-
reason?: string;
|
|
20
|
-
}
|
|
21
|
-
/**
|
|
22
|
-
* 检查文件路径是否在允许范围内。
|
|
23
|
-
* 规则:
|
|
24
|
-
* 1. 不能匹配全局禁止模式
|
|
25
|
-
* 2. 必须匹配 allowed_paths 中的至少一个前缀/glob
|
|
26
|
-
* 3. read_only_paths 只允许读,不允许写
|
|
27
|
-
*/
|
|
28
|
-
export declare function checkScope(filePath: string, allowedPaths: string[], readOnlyPaths?: string[]): ScopeCheckResult;
|
|
29
|
-
//# sourceMappingURL=scope_checker.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"scope_checker.d.ts","sourceRoot":"","sources":["../../src/core/scope_checker.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAIH,iBAAiB;AACjB,MAAM,WAAW,gBAAgB;IAC/B,aAAa;IACb,OAAO,EAAE,OAAO,CAAC;IACjB,8BAA8B;IAC9B,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAWD;;;;;;GAMG;AACH,wBAAgB,UAAU,CACxB,QAAQ,EAAE,MAAM,EAChB,YAAY,EAAE,MAAM,EAAE,EACtB,aAAa,GAAE,MAAM,EAAO,GAC3B,gBAAgB,CA2BlB"}
|
|
@@ -1,53 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Scope 检查器 — 写路径 scope 硬检查(工具层拦截)。
|
|
3
|
-
*
|
|
4
|
-
* 职责边界:
|
|
5
|
-
* - 负责:判断文件路径是否在任务允许的写范围内
|
|
6
|
-
* - 不负责:门禁检查、业务逻辑、状态派生
|
|
7
|
-
*
|
|
8
|
-
* 被谁调用:sf_work(act 动作,写入前拦截)
|
|
9
|
-
* 调用谁:无(纯计算)
|
|
10
|
-
*
|
|
11
|
-
* 数据流:文件路径 + allowed_paths → boolean
|
|
12
|
-
* 持久化:无
|
|
13
|
-
*/
|
|
14
|
-
/** 全局禁止写入的路径模式 */
|
|
15
|
-
const DENIED_PATTERNS = [
|
|
16
|
-
/\.soloforge\/tasks\//, // 任务文件由 TaskStore 管理
|
|
17
|
-
/\.soloforge\/gates\//, // 门禁记录由 GateRecordStore 管理
|
|
18
|
-
/\.env/, // 环境变量文件
|
|
19
|
-
/\.git\//, // git 内部文件
|
|
20
|
-
/node_modules\//, // 依赖目录
|
|
21
|
-
];
|
|
22
|
-
/**
|
|
23
|
-
* 检查文件路径是否在允许范围内。
|
|
24
|
-
* 规则:
|
|
25
|
-
* 1. 不能匹配全局禁止模式
|
|
26
|
-
* 2. 必须匹配 allowed_paths 中的至少一个前缀/glob
|
|
27
|
-
* 3. read_only_paths 只允许读,不允许写
|
|
28
|
-
*/
|
|
29
|
-
export function checkScope(filePath, allowedPaths, readOnlyPaths = []) {
|
|
30
|
-
// 规则 1:全局禁止
|
|
31
|
-
for (const pattern of DENIED_PATTERNS) {
|
|
32
|
-
if (pattern.test(filePath)) {
|
|
33
|
-
return { allowed: false, reason: `路径匹配全局禁止模式:${pattern.source}` };
|
|
34
|
-
}
|
|
35
|
-
}
|
|
36
|
-
// 规则 2:只读路径
|
|
37
|
-
for (const roPath of readOnlyPaths) {
|
|
38
|
-
if (filePath.startsWith(roPath) || filePath.includes(roPath)) {
|
|
39
|
-
return { allowed: false, reason: `路径为只读:${roPath}` };
|
|
40
|
-
}
|
|
41
|
-
}
|
|
42
|
-
// 规则 3:必须在允许范围内
|
|
43
|
-
if (allowedPaths.length === 0) {
|
|
44
|
-
return { allowed: true }; // 未设限制 = 允许全部(除全局禁止外)
|
|
45
|
-
}
|
|
46
|
-
for (const allowed of allowedPaths) {
|
|
47
|
-
if (filePath.startsWith(allowed) || filePath.includes(allowed)) {
|
|
48
|
-
return { allowed: true };
|
|
49
|
-
}
|
|
50
|
-
}
|
|
51
|
-
return { allowed: false, reason: `路径不在允许范围内:${filePath}` };
|
|
52
|
-
}
|
|
53
|
-
//# sourceMappingURL=scope_checker.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"scope_checker.js","sourceRoot":"","sources":["../../src/core/scope_checker.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAYH,kBAAkB;AAClB,MAAM,eAAe,GAAG;IACtB,sBAAsB,EAAY,qBAAqB;IACvD,sBAAsB,EAAY,2BAA2B;IAC7D,OAAO,EAA4B,SAAS;IAC5C,SAAS,EAA0B,WAAW;IAC9C,gBAAgB,EAAmB,OAAO;CAC3C,CAAC;AAEF;;;;;;GAMG;AACH,MAAM,UAAU,UAAU,CACxB,QAAgB,EAChB,YAAsB,EACtB,gBAA0B,EAAE;IAE5B,YAAY;IACZ,KAAK,MAAM,OAAO,IAAI,eAAe,EAAE,CAAC;QACtC,IAAI,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC;YAC3B,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,cAAc,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC;QACpE,CAAC;IACH,CAAC;IAED,YAAY;IACZ,KAAK,MAAM,MAAM,IAAI,aAAa,EAAE,CAAC;QACnC,IAAI,QAAQ,CAAC,UAAU,CAAC,MAAM,CAAC,IAAI,QAAQ,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC;YAC7D,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,SAAS,MAAM,EAAE,EAAE,CAAC;QACvD,CAAC;IACH,CAAC;IAED,gBAAgB;IAChB,IAAI,YAAY,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC9B,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC,sBAAsB;IAClD,CAAC;IAED,KAAK,MAAM,OAAO,IAAI,YAAY,EAAE,CAAC;QACnC,IAAI,QAAQ,CAAC,UAAU,CAAC,OAAO,CAAC,IAAI,QAAQ,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE,CAAC;YAC/D,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;QAC3B,CAAC;IACH,CAAC;IAED,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,aAAa,QAAQ,EAAE,EAAE,CAAC;AAC7D,CAAC"}
|
|
@@ -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"}
|