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
|
@@ -11,10 +11,15 @@
|
|
|
11
11
|
* 数据流:GateCheck + EvaluationContext → 读取引用方/定义方两个产物 → ID 交叉比对 → CheckResult
|
|
12
12
|
* 持久化:读取本地文件(docs/)
|
|
13
13
|
*/
|
|
14
|
-
import { existsSync, readFileSync } from "node:fs";
|
|
15
|
-
import { join } from "node:path";
|
|
14
|
+
import { existsSync, readFileSync, readdirSync, statSync } from "node:fs";
|
|
15
|
+
import { join, relative } from "node:path";
|
|
16
16
|
import { gateExecutors } from "../gate_executors.js";
|
|
17
|
+
import { GateRecordStore } from "../../core/gate_record_store.js";
|
|
18
|
+
import { getFileGitHash } from "../../core/git_utils.js";
|
|
17
19
|
import { containsGlob, resolveArtifactsByGlob } from "../../shared/glob_path.js";
|
|
20
|
+
import { deliberationRecordPath } from "../../domain/engine_helpers.js";
|
|
21
|
+
import { DESIGN_LIFECYCLE_SLICE_PLAN_PATH } from "../../domain/contracts/design_lifecycle_contract.js";
|
|
22
|
+
import { resolveConfig } from "../../context/config/resolver.js";
|
|
18
23
|
// ── 交叉校验相关常量和辅助函数 ──
|
|
19
24
|
/** 产物模版名 → docs/ 真实路径候选(统一 docs/ 子目录体系,无向后兼容兜底)。
|
|
20
25
|
* 归属:architecture/(决策/架构/切片) · design/(DB/API/详细设计) · audits/(审查) · context/(需求) · analyze/*(原型多端) · api/(openapi)
|
|
@@ -37,7 +42,7 @@ export const CROSS_VALIDATION_ARTIFACT_PATHS = {
|
|
|
37
42
|
"测试报告模版": ["docs/audits/03-测试报告.md"],
|
|
38
43
|
"发布说明模版": ["docs/audits/04-发布说明.md"],
|
|
39
44
|
// 测试计划:canonical 路径见 artifact_aliases.ts:212
|
|
40
|
-
"测试计划模版": ["docs/architecture/07-测试计划.md"],
|
|
45
|
+
"测试计划模版": ["docs/build/测试计划.md", "docs/architecture/07-测试计划.md"],
|
|
41
46
|
"架构决策记录": ["docs/architecture/00-架构决策记录.md"],
|
|
42
47
|
"迁移评估": ["docs/existing-system/现有系统分析.md"],
|
|
43
48
|
};
|
|
@@ -45,7 +50,7 @@ export const CROSS_VALIDATION_ARTIFACT_PATHS = {
|
|
|
45
50
|
* 解析产物名/路径到真实文件路径。
|
|
46
51
|
* 候选 1:模版名映射;候选 2:直接作为 docs/ 下路径;候选 3:作为项目根相对路径。
|
|
47
52
|
*/
|
|
48
|
-
function resolveCrossValidationArtifact(artifact, projectRoot) {
|
|
53
|
+
export function resolveCrossValidationArtifact(artifact, projectRoot) {
|
|
49
54
|
if (!artifact)
|
|
50
55
|
return [];
|
|
51
56
|
const resolved = [];
|
|
@@ -124,6 +129,47 @@ function extractIdsByPrefixes(content, prefixes) {
|
|
|
124
129
|
}
|
|
125
130
|
return ids;
|
|
126
131
|
}
|
|
132
|
+
/** 扫描项目测试文件(跨语言),排除依赖/构建产物/非源码目录。
|
|
133
|
+
* 供 acceptance_coverage 提取 @covers 标注。
|
|
134
|
+
* @covers 标注用各语言行注释(// @covers REQ-xxx 或 # @covers REQ-xxx),executor 正则只看 @covers 部分,跨语言通用。 */
|
|
135
|
+
function resolveTestFiles(projectRoot) {
|
|
136
|
+
const results = [];
|
|
137
|
+
// 排除依赖/构建产物/IDE 目录(target=Maven, bin/out=编译产物, .gradle/.idea=IDE/构建缓存)
|
|
138
|
+
const SKIP = new Set(["node_modules", "dist", ".soloforge", "docs", ".git", "build", "target", "bin", "out", ".gradle", ".idea"]);
|
|
139
|
+
const isTestFile = (name) => /\.(test|spec)\.[tj]sx?$/.test(name) // TS/JS: *.test.ts / *.spec.tsx
|
|
140
|
+
|| /^.+[Tt]est(s|Case)?\.java$/.test(name) // Java JUnit: *Test.java / *Tests.java / *TestCase.java
|
|
141
|
+
|| /^.+[Tt]ests?\.kt$/.test(name) // Kotlin
|
|
142
|
+
|| /^test_.+\.py$/.test(name) || /^.+_test\.py$/.test(name) // Python pytest
|
|
143
|
+
|| /^.+_test\.go$/.test(name); // Go
|
|
144
|
+
const walk = (dir) => {
|
|
145
|
+
let entries;
|
|
146
|
+
try {
|
|
147
|
+
entries = readdirSync(dir);
|
|
148
|
+
}
|
|
149
|
+
catch {
|
|
150
|
+
return;
|
|
151
|
+
}
|
|
152
|
+
for (const e of entries) {
|
|
153
|
+
const full = join(dir, e);
|
|
154
|
+
let st;
|
|
155
|
+
try {
|
|
156
|
+
st = statSync(full);
|
|
157
|
+
}
|
|
158
|
+
catch {
|
|
159
|
+
continue;
|
|
160
|
+
}
|
|
161
|
+
if (st.isDirectory()) {
|
|
162
|
+
if (!SKIP.has(e))
|
|
163
|
+
walk(full);
|
|
164
|
+
}
|
|
165
|
+
else if (isTestFile(e)) {
|
|
166
|
+
results.push(full);
|
|
167
|
+
}
|
|
168
|
+
}
|
|
169
|
+
};
|
|
170
|
+
walk(projectRoot);
|
|
171
|
+
return results;
|
|
172
|
+
}
|
|
127
173
|
/** 注册交叉校验执行器 */
|
|
128
174
|
export function registerTraceExecutors() {
|
|
129
175
|
// ═══════════════════════════════════════════
|
|
@@ -151,6 +197,27 @@ export function registerTraceExecutors() {
|
|
|
151
197
|
const defArtifact = check.evidence_required[0];
|
|
152
198
|
const defPaths = resolveCrossValidationArtifact(defArtifact, ctx.projectRoot);
|
|
153
199
|
if (defPaths.length === 0) {
|
|
200
|
+
// ② 按需产出:读引用方产物(如 design_doc)的「产物适用性声明」→ 声明「不适用」则放行。
|
|
201
|
+
// 前端/无后端项目 database_design/api_specification 按需不产,XVAL 不应误报「定义方产物不存在」。
|
|
202
|
+
// 正则 declArtifact[::]\s*不适用 精确匹配 AI 明确选「不适用」(模板默认「适用 / 不适用」不会被误匹配)。
|
|
203
|
+
const declArtifact = defArtifact?.replace(/模版$/, "");
|
|
204
|
+
if (declArtifact && refPaths[0] && existsSync(refPaths[0])) {
|
|
205
|
+
try {
|
|
206
|
+
const refContent = readFileSync(refPaths[0], "utf-8");
|
|
207
|
+
const declRe = new RegExp(`${declArtifact.replace(/[.*+?^${}()|[\]\\]/g, "\\$&")}[::]\\s*不适用`);
|
|
208
|
+
if (declRe.test(refContent)) {
|
|
209
|
+
return {
|
|
210
|
+
check_id: check.id,
|
|
211
|
+
executed_by: "code",
|
|
212
|
+
passed: true,
|
|
213
|
+
evidence: `${declArtifact} 声明「不适用」,按需不产(产物适用性声明放行)`,
|
|
214
|
+
};
|
|
215
|
+
}
|
|
216
|
+
}
|
|
217
|
+
catch {
|
|
218
|
+
// 读引用方产物失败 → 维持下方 fail-closed
|
|
219
|
+
}
|
|
220
|
+
}
|
|
154
221
|
return {
|
|
155
222
|
check_id: check.id,
|
|
156
223
|
executed_by: "code",
|
|
@@ -220,5 +287,229 @@ export function registerTraceExecutors() {
|
|
|
220
287
|
evidence: `交叉校验通过(${mode}): 引用方 ${refIds.size} 个 ID,定义方 ${defIds.size} 个 ID [${prefixes.join("/")}]`,
|
|
221
288
|
};
|
|
222
289
|
});
|
|
290
|
+
// ═══════════════════════════════════════════
|
|
291
|
+
// 8.6 产物适用性校验 — design_doc「产物适用性声明」声明的 db/api 须产出对应产物
|
|
292
|
+
// 治本「按需产出」:声明「适用」必产(强制)、声明「不适用」放行(前端/无后端)、未声明强制表态。
|
|
293
|
+
// 复用 cross_validation 的产物解析:required_artifact=声明方(design_doc),evidence_required=待校验产物模版名。
|
|
294
|
+
// 用于 design-gate(②强制)与 build-gate(③兜底)——同逻辑两阶段双保险。
|
|
295
|
+
// ═══════════════════════════════════════════
|
|
296
|
+
gateExecutors.register("applicability_check", async (check, ctx) => {
|
|
297
|
+
const declArtifactName = check.required_artifact ?? "架构设计模版";
|
|
298
|
+
const declPaths = resolveCrossValidationArtifact(declArtifactName, ctx.projectRoot);
|
|
299
|
+
if (declPaths.length === 0) {
|
|
300
|
+
// 声明方产物(design_doc)不存在 → 跳过:design_doc 存在性由 ARCH-STRUCT/document_structure 管;
|
|
301
|
+
// build 阶段跳 design 的小改无 design_doc,不强制 db/api(避免误伤)。
|
|
302
|
+
return { check_id: check.id, executed_by: "code", passed: true, evidence: `声明方产物 ${declArtifactName} 不存在,跳过适用性校验` };
|
|
303
|
+
}
|
|
304
|
+
const esc = (s) => s.replace(/[.*+?^${}()|[\]\\]/g, "\\$&");
|
|
305
|
+
const readSafe = (p) => { try {
|
|
306
|
+
return readFileSync(p, "utf-8");
|
|
307
|
+
}
|
|
308
|
+
catch {
|
|
309
|
+
return "";
|
|
310
|
+
} };
|
|
311
|
+
const declContent = declPaths.map(readSafe).join("\n");
|
|
312
|
+
const store = new GateRecordStore(ctx.projectRoot);
|
|
313
|
+
const problems = [];
|
|
314
|
+
for (const art of check.evidence_required ?? []) {
|
|
315
|
+
const name = art.replace(/模版$/, "");
|
|
316
|
+
// 声明「不适用」→ 放行(前端/无后端项目按需不产)
|
|
317
|
+
if (new RegExp(`${esc(name)}[::]\\s*不适用`).test(declContent))
|
|
318
|
+
continue;
|
|
319
|
+
const declared = new RegExp(`${esc(name)}[::]\\s*适用`).test(declContent);
|
|
320
|
+
// 第一性原理:声明方域(design)只校验「表态」——design_doc §8 须明确适用/不适用。
|
|
321
|
+
// 「产物存在/verified」的前提「产物已产出并过门禁」只在下游域入口(build-gate BLD-DBAPI)才成立;
|
|
322
|
+
// 在声明方域校验下游产物(不论"不存在"还是"存在未 verify")都与下游产物的产出/验证时序冲突 → 死循环。
|
|
323
|
+
// 故 design 阶段完全不碰下游产物,只强制表态。
|
|
324
|
+
if (ctx.stage === "design") {
|
|
325
|
+
if (!declared) {
|
|
326
|
+
problems.push(`${name}:未声明适用性,须在 design_doc「产物适用性声明」明确「适用」或「不适用」`);
|
|
327
|
+
}
|
|
328
|
+
continue; // 已表态(适用/不适用)→ design 阶段职责完成,不碰下游产物存在/verified
|
|
329
|
+
}
|
|
330
|
+
// 下游域(build 兜底):校验声明适用→产物存在 + verified
|
|
331
|
+
const prodPaths = resolveCrossValidationArtifact(art, ctx.projectRoot);
|
|
332
|
+
if (prodPaths.length === 0) {
|
|
333
|
+
problems.push(declared
|
|
334
|
+
? `${name}:声明「适用」但产物不存在,须产出`
|
|
335
|
+
: `${name}:未声明适用性且产物不存在,须在 design_doc「产物适用性声明」明确「适用/不适用」并按需产出`);
|
|
336
|
+
continue;
|
|
337
|
+
}
|
|
338
|
+
// #2: 校验 verified(不只存在)— 兜底漏验(产物存在但未过门禁,如 design 漏 verify 直接 build)
|
|
339
|
+
// verified = passed && !stale(与 observe 同款:record passed 且 git hash 匹配当前文件,防 stale 退化放过)
|
|
340
|
+
const verified = await Promise.all(prodPaths.map(async (p) => {
|
|
341
|
+
const records = await store.listByArtifact(relative(ctx.projectRoot, p));
|
|
342
|
+
const currentHash = await getFileGitHash(p, ctx.projectRoot);
|
|
343
|
+
return records.some((r) => r.passed && !store.isStale(r, currentHash));
|
|
344
|
+
}));
|
|
345
|
+
if (!verified.some(Boolean)) {
|
|
346
|
+
problems.push(`${name}:产物存在但未通过门禁验证(或已退化 stale),须 verify`);
|
|
347
|
+
}
|
|
348
|
+
}
|
|
349
|
+
if (problems.length > 0) {
|
|
350
|
+
return { check_id: check.id, executed_by: "code", passed: false, error: problems.join(";") };
|
|
351
|
+
}
|
|
352
|
+
return { check_id: check.id, executed_by: "code", passed: true, evidence: `适用性校验通过: ${(check.evidence_required ?? []).join("、")}` };
|
|
353
|
+
});
|
|
354
|
+
// 超大系统 build 前研讨兜底(补下限):开发切片计划 SLC-* ≥ THRESHOLD 时,须有 build 域研讨记录(deliberate 留痕)。
|
|
355
|
+
// 触发条件:切片计划存在且切片数达标(小任务/无规划跳过)。研讨记录路径与 deliberate 写入/act 读取三处一致(复用 deliberationRecordPath)。
|
|
356
|
+
gateExecutors.register("slice_deliberation_gate", async (check, ctx) => {
|
|
357
|
+
const THRESHOLD = 5;
|
|
358
|
+
const slicePlanPath = join(ctx.projectRoot, DESIGN_LIFECYCLE_SLICE_PLAN_PATH);
|
|
359
|
+
let content;
|
|
360
|
+
try {
|
|
361
|
+
content = readFileSync(slicePlanPath, "utf-8");
|
|
362
|
+
}
|
|
363
|
+
catch {
|
|
364
|
+
return { check_id: check.id, executed_by: "code", passed: true, evidence: "开发切片计划不存在,非大任务,跳过" };
|
|
365
|
+
}
|
|
366
|
+
// 精确数 ### SLC-NN 切片块;PHASE 表格里的 SLC-01~03 范围引用不以 ### 开头,不会误数
|
|
367
|
+
const sliceCount = (content.match(/^###\s+SLC-\d/gm) || []).length;
|
|
368
|
+
if (sliceCount < THRESHOLD) {
|
|
369
|
+
return { check_id: check.id, executed_by: "code", passed: true, evidence: `切片数 ${sliceCount} < ${THRESHOLD},非超大系统,跳过` };
|
|
370
|
+
}
|
|
371
|
+
const deliberationPath = deliberationRecordPath("build", { path_pattern: "src/" });
|
|
372
|
+
if (!existsSync(join(ctx.projectRoot, deliberationPath))) {
|
|
373
|
+
return {
|
|
374
|
+
check_id: check.id,
|
|
375
|
+
executed_by: "code",
|
|
376
|
+
passed: false,
|
|
377
|
+
error: `超大系统(${sliceCount} 个 SLC 切片 ≥ ${THRESHOLD})build 写代码前须先调 sf_work action="deliberate" target="code" 研讨实现策略并留痕研讨记录(${deliberationPath}),再 act`,
|
|
378
|
+
};
|
|
379
|
+
}
|
|
380
|
+
return { check_id: check.id, executed_by: "code", passed: true, evidence: `超大系统(${sliceCount} 切片)已有实现策略研讨记录(${deliberationPath})` };
|
|
381
|
+
});
|
|
382
|
+
// 系统形态研讨兜底(补下限):需求 §9 声明涉及前端(前后端分离/多端/纯前端 或 端清单有 FE-*)时,
|
|
383
|
+
// 须有需求域研讨记录(deliberate 留痕)。纯后端 API 项目跳过(不需研讨前端形态)。
|
|
384
|
+
// 研讨记录路径与 deliberate 写入/act 读取三处一致(复用 deliberationRecordPath)。
|
|
385
|
+
gateExecutors.register("requirement_deliberation_gate", async (check, ctx) => {
|
|
386
|
+
const requirementPath = join(ctx.projectRoot, "docs/context/需求分析.md"); // design contract requirement_analysis.path_pattern
|
|
387
|
+
let content;
|
|
388
|
+
try {
|
|
389
|
+
content = readFileSync(requirementPath, "utf-8");
|
|
390
|
+
}
|
|
391
|
+
catch {
|
|
392
|
+
return { check_id: check.id, executed_by: "code", passed: true, evidence: "需求分析不存在,跳过" };
|
|
393
|
+
}
|
|
394
|
+
// 纯后端优先判定(§9 形态填「纯后端」即跳过,即使端清单留有模板示例行);否则有前端信号=涉及前端
|
|
395
|
+
if (/纯后端/.test(content)) {
|
|
396
|
+
return { check_id: check.id, executed_by: "code", passed: true, evidence: "系统形态为纯后端 API(无前端),跳过系统形态研讨" };
|
|
397
|
+
}
|
|
398
|
+
const involvesFrontend = /前后端分离|多端|纯前端|FE-[a-z]/i.test(content);
|
|
399
|
+
if (!involvesFrontend) {
|
|
400
|
+
return { check_id: check.id, executed_by: "code", passed: true, evidence: "需求未声明涉及前端,跳过系统形态研讨" };
|
|
401
|
+
}
|
|
402
|
+
const deliberationPath = deliberationRecordPath("design", { path_pattern: "docs/context/需求分析.md" });
|
|
403
|
+
if (!existsSync(join(ctx.projectRoot, deliberationPath))) {
|
|
404
|
+
return {
|
|
405
|
+
check_id: check.id,
|
|
406
|
+
executed_by: "code",
|
|
407
|
+
passed: false,
|
|
408
|
+
error: `需求 §9 声明涉及前端,须先调 sf_work action="deliberate" domain="design" target="requirement_analysis" 与用户研讨系统形态(是否前后端/几个端/各端技术栈)并留痕研讨记录(${deliberationPath}),再产出需求分析`,
|
|
409
|
+
};
|
|
410
|
+
}
|
|
411
|
+
return { check_id: check.id, executed_by: "code", passed: true, evidence: `系统形态已研讨(${deliberationPath} 存在)` };
|
|
412
|
+
});
|
|
413
|
+
// 多工程结构兜底(补下限):intent projects 声明的每个端工程须有 src/ + 独立 .gitignore。
|
|
414
|
+
// 触发:config.projects 非空(多工程)。单工程(无 projects)跳过。逼 build 首切片建工程骨架。
|
|
415
|
+
gateExecutors.register("multi_engine_structure_check", async (check, ctx) => {
|
|
416
|
+
let projects = [];
|
|
417
|
+
try {
|
|
418
|
+
const config = await resolveConfig(ctx.projectRoot);
|
|
419
|
+
projects = config.projects ?? [];
|
|
420
|
+
}
|
|
421
|
+
catch {
|
|
422
|
+
return { check_id: check.id, executed_by: "code", passed: true, evidence: "config 解析失败,跳过多工程结构校验" };
|
|
423
|
+
}
|
|
424
|
+
if (projects.length === 0) {
|
|
425
|
+
return { check_id: check.id, executed_by: "code", passed: true, evidence: "单工程项目(无 projects 声明),跳过" };
|
|
426
|
+
}
|
|
427
|
+
const problems = [];
|
|
428
|
+
for (const p of projects) {
|
|
429
|
+
const dir = p.dir.replace(/\/+$/, "");
|
|
430
|
+
if (!existsSync(join(ctx.projectRoot, dir, "src")))
|
|
431
|
+
problems.push(`${dir}/:缺 src/`);
|
|
432
|
+
if (!existsSync(join(ctx.projectRoot, dir, ".gitignore")))
|
|
433
|
+
problems.push(`${dir}/:缺独立 .gitignore`);
|
|
434
|
+
}
|
|
435
|
+
if (problems.length > 0) {
|
|
436
|
+
return {
|
|
437
|
+
check_id: check.id,
|
|
438
|
+
executed_by: "code",
|
|
439
|
+
passed: false,
|
|
440
|
+
error: `多工程结构不完整(架构 §6.3 + intent projects):${problems.join(";")}。build 首个切片须按端清单建工程骨架(每工程 src/ + 独立 .gitignore + 构建配置)`,
|
|
441
|
+
};
|
|
442
|
+
}
|
|
443
|
+
return { check_id: check.id, executed_by: "code", passed: true, evidence: `多工程结构完整(${projects.length} 工程,各有 src/ + .gitignore)` };
|
|
444
|
+
});
|
|
445
|
+
// ═══════════════════════════════════════════
|
|
446
|
+
// 8.7 验收点↔测试覆盖校验 — design 阶段定义的 REQ-* 验收点须有测试 @covers 标注覆盖
|
|
447
|
+
// 治本"测试凑数":覆盖率%是 LLM 可糊弄的数字门禁(coverage theater);改确定性锚定——
|
|
448
|
+
// 每个 REQ 验收点须被某测试文件 @covers REQ-xxx 显式标注覆盖。
|
|
449
|
+
// 确定性边界:只校验"标注覆盖"(机器可判),不判"断言是否真验证语义"(LLM/人工范畴)。
|
|
450
|
+
// 配置:evidence_required[0]=定义方产物(默认"需求分析模版",提取 REQ-*);rule 声明前缀(REQ-*)。
|
|
451
|
+
// ═══════════════════════════════════════════
|
|
452
|
+
gateExecutors.register("acceptance_coverage", async (check, ctx) => {
|
|
453
|
+
// 定义方产物(提取验收点 ID)= evidence_required[0],默认需求分析
|
|
454
|
+
const defArtifact = check.evidence_required?.[0] ?? "需求分析模版";
|
|
455
|
+
const defPaths = resolveCrossValidationArtifact(defArtifact, ctx.projectRoot);
|
|
456
|
+
if (defPaths.length === 0) {
|
|
457
|
+
// 无需求分析产物(如引擎本身/纯 bug 修复小改,非功能开发)→ 跳过,不强制 REQ 覆盖
|
|
458
|
+
return {
|
|
459
|
+
check_id: check.id,
|
|
460
|
+
executed_by: "code",
|
|
461
|
+
passed: true,
|
|
462
|
+
evidence: `验收点定义方产物「${defArtifact}」不存在,非功能开发任务(无需求分析),跳过验收覆盖校验`,
|
|
463
|
+
};
|
|
464
|
+
}
|
|
465
|
+
// ID 前缀(默认 REQ-)
|
|
466
|
+
let prefixes = extractIdPrefixesFromRule(check.rule);
|
|
467
|
+
if (prefixes.length === 0)
|
|
468
|
+
prefixes = ["REQ-"];
|
|
469
|
+
const readSafe = (p) => { try {
|
|
470
|
+
return readFileSync(p, "utf-8");
|
|
471
|
+
}
|
|
472
|
+
catch {
|
|
473
|
+
return "";
|
|
474
|
+
} };
|
|
475
|
+
const defContent = defPaths.map(readSafe).join("\n");
|
|
476
|
+
const defIds = extractIdsByPrefixes(defContent, prefixes);
|
|
477
|
+
// 空集防御:定义方无 REQ → 需求未声明验收点,fail-closed(防偷懒)
|
|
478
|
+
if (defIds.size === 0) {
|
|
479
|
+
return {
|
|
480
|
+
check_id: check.id,
|
|
481
|
+
executed_by: "code",
|
|
482
|
+
passed: false,
|
|
483
|
+
error: `定义方产物「${defArtifact}」未包含 ${prefixes.join("/")} 验收点编号(须填真实编号如 REQ-001,而非占位符)`,
|
|
484
|
+
};
|
|
485
|
+
}
|
|
486
|
+
// 引用方 = 测试文件 @covers 标注(扫项目测试文件,排除 node_modules/dist/.soloforge/docs)
|
|
487
|
+
const testPaths = resolveTestFiles(ctx.projectRoot);
|
|
488
|
+
const coversRe = /@covers\s+([A-Z]+-\d{1,4})/g;
|
|
489
|
+
const coveredIds = new Set();
|
|
490
|
+
for (const tp of testPaths) {
|
|
491
|
+
const content = readSafe(tp);
|
|
492
|
+
for (const m of content.matchAll(coversRe)) {
|
|
493
|
+
if (prefixes.some((p) => m[1].startsWith(p)))
|
|
494
|
+
coveredIds.add(m[1]);
|
|
495
|
+
}
|
|
496
|
+
}
|
|
497
|
+
// 覆盖率:定义方 REQ 须被 @covers 覆盖
|
|
498
|
+
const missing = [...defIds].filter((id) => !coveredIds.has(id));
|
|
499
|
+
if (missing.length > 0) {
|
|
500
|
+
return {
|
|
501
|
+
check_id: check.id,
|
|
502
|
+
executed_by: "code",
|
|
503
|
+
passed: false,
|
|
504
|
+
error: `验收点未测试覆盖 ${missing.length} 个: ${missing.slice(0, 8).join(", ")}(须在对应测试文件标注 @covers REQ-xxx)`,
|
|
505
|
+
};
|
|
506
|
+
}
|
|
507
|
+
return {
|
|
508
|
+
check_id: check.id,
|
|
509
|
+
executed_by: "code",
|
|
510
|
+
passed: true,
|
|
511
|
+
evidence: `验收点测试覆盖通过: ${defIds.size} 个 ${prefixes.join("/")} 验收点全部被 @covers 标注覆盖`,
|
|
512
|
+
};
|
|
513
|
+
});
|
|
223
514
|
}
|
|
224
515
|
//# sourceMappingURL=executors_trace.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"executors_trace.js","sourceRoot":"","sources":["../../../src/gate/executors/executors_trace.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"executors_trace.js","sourceRoot":"","sources":["../../../src/gate/executors/executors_trace.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/gate/executors/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/gate/executors/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAgBH,gBAAgB;AAChB,wBAAgB,oBAAoB,IAAI,IAAI,CAe3C"}
|
|
@@ -19,9 +19,10 @@ import { registerScopeExecutors } from "./executors_scope.js";
|
|
|
19
19
|
import { registerPrerequisiteExecutors } from "./executors_prerequisite.js";
|
|
20
20
|
import { registerProbeExecutor } from "./executors_probe.js";
|
|
21
21
|
import { registerExternalCommandExecutor } from "./executors_external_command.js";
|
|
22
|
+
import { registerFieldMappingExecutor } from "./executors_field_mapping.js";
|
|
22
23
|
import { executeRegexPatternScan } from "./executors_regex_scan.js";
|
|
23
|
-
import { executeOpenApiSyncCheck } from "./executors_openapi_sync.js";
|
|
24
24
|
import { executeAnnotationCheck } from "./executors_annotation.js";
|
|
25
|
+
import { registerJacocoExecutor } from "./executors_jacoco.js";
|
|
25
26
|
import { gateExecutors } from "../gate_executors.js";
|
|
26
27
|
/** 注册所有内置执行器 */
|
|
27
28
|
export function registerAllExecutors() {
|
|
@@ -33,9 +34,10 @@ export function registerAllExecutors() {
|
|
|
33
34
|
registerPrerequisiteExecutors();
|
|
34
35
|
registerProbeExecutor();
|
|
35
36
|
registerExternalCommandExecutor();
|
|
37
|
+
registerFieldMappingExecutor();
|
|
38
|
+
registerJacocoExecutor();
|
|
36
39
|
// 新增:代码强制执行 executor
|
|
37
40
|
gateExecutors.register("regex_pattern_scan", executeRegexPatternScan);
|
|
38
|
-
gateExecutors.register("openapi_sync_check", executeOpenApiSyncCheck);
|
|
39
41
|
gateExecutors.register("ast_annotation_check", executeAnnotationCheck);
|
|
40
42
|
}
|
|
41
43
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/gate/executors/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAEH,OAAO,EAAE,uBAAuB,EAAE,MAAM,uBAAuB,CAAC;AAChE,OAAO,EAAE,yBAAyB,EAAE,MAAM,yBAAyB,CAAC;AACpE,OAAO,EAAE,sBAAsB,EAAE,MAAM,sBAAsB,CAAC;AAC9D,OAAO,EAAE,sBAAsB,EAAE,MAAM,sBAAsB,CAAC;AAC9D,OAAO,EAAE,sBAAsB,EAAE,MAAM,sBAAsB,CAAC;AAC9D,OAAO,EAAE,6BAA6B,EAAE,MAAM,6BAA6B,CAAC;AAC5E,OAAO,EAAE,qBAAqB,EAAE,MAAM,sBAAsB,CAAC;AAC7D,OAAO,EAAE,+BAA+B,EAAE,MAAM,iCAAiC,CAAC;AAClF,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/gate/executors/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAEH,OAAO,EAAE,uBAAuB,EAAE,MAAM,uBAAuB,CAAC;AAChE,OAAO,EAAE,yBAAyB,EAAE,MAAM,yBAAyB,CAAC;AACpE,OAAO,EAAE,sBAAsB,EAAE,MAAM,sBAAsB,CAAC;AAC9D,OAAO,EAAE,sBAAsB,EAAE,MAAM,sBAAsB,CAAC;AAC9D,OAAO,EAAE,sBAAsB,EAAE,MAAM,sBAAsB,CAAC;AAC9D,OAAO,EAAE,6BAA6B,EAAE,MAAM,6BAA6B,CAAC;AAC5E,OAAO,EAAE,qBAAqB,EAAE,MAAM,sBAAsB,CAAC;AAC7D,OAAO,EAAE,+BAA+B,EAAE,MAAM,iCAAiC,CAAC;AAClF,OAAO,EAAE,4BAA4B,EAAE,MAAM,8BAA8B,CAAC;AAC5E,OAAO,EAAE,uBAAuB,EAAE,MAAM,2BAA2B,CAAC;AACpE,OAAO,EAAE,sBAAsB,EAAE,MAAM,2BAA2B,CAAC;AACnE,OAAO,EAAE,sBAAsB,EAAE,MAAM,uBAAuB,CAAC;AAC/D,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAErD,gBAAgB;AAChB,MAAM,UAAU,oBAAoB;IAClC,uBAAuB,EAAE,CAAC;IAC1B,yBAAyB,EAAE,CAAC;IAC5B,sBAAsB,EAAE,CAAC;IACzB,sBAAsB,EAAE,CAAC;IACzB,sBAAsB,EAAE,CAAC;IACzB,6BAA6B,EAAE,CAAC;IAChC,qBAAqB,EAAE,CAAC;IACxB,+BAA+B,EAAE,CAAC;IAClC,4BAA4B,EAAE,CAAC;IAC/B,sBAAsB,EAAE,CAAC;IAEzB,qBAAqB;IACrB,aAAa,CAAC,QAAQ,CAAC,oBAAoB,EAAE,uBAAuB,CAAC,CAAC;IACtE,aAAa,CAAC,QAAQ,CAAC,sBAAsB,EAAE,sBAAsB,CAAC,CAAC;AACzE,CAAC"}
|
|
@@ -15,6 +15,13 @@ import type { SystemType } from "../shared/types.js";
|
|
|
15
15
|
import type { TaskContext } from "../types/index.js";
|
|
16
16
|
import type { ResolvedConfig } from "../context/config/resolver.js";
|
|
17
17
|
import type { ProbeRule } from "../verify/audit/probe_rule.js";
|
|
18
|
+
import type { BlockCheckConfig } from "../domain/asset_registry/derived_types.js";
|
|
19
|
+
/**
|
|
20
|
+
* 计算域门禁规则集指纹(该域全部 enforced check 的 id+executor+severity+rule+block_check 的 hash)。
|
|
21
|
+
* 规则变(加 check/改 rule/改 block_check)→ hash 变 → doctor 标 rules_stale 需重验。
|
|
22
|
+
* verify 写 GateRecord 时记录;doctor 比对当前 hash 判定旧 verified 产物是否需重验。
|
|
23
|
+
*/
|
|
24
|
+
export declare function computeRulesetHash(domain: string, projectRoot?: string): string;
|
|
18
25
|
/** 获取并清空自上次调用以来的门禁加载警告 */
|
|
19
26
|
export declare function drainGateLoadWarnings(): string[];
|
|
20
27
|
/** 门禁 YAML 解析后的结构化定义 */
|
|
@@ -62,6 +69,8 @@ export interface GateCheck {
|
|
|
62
69
|
command?: string;
|
|
63
70
|
/** 外部命令参数(仅 executor="external_command" 携带) */
|
|
64
71
|
args?: string[];
|
|
72
|
+
/** 条目块完整性校验(仅 executor="document_structure" 携带,反退化硬兜底) */
|
|
73
|
+
block_check?: BlockCheckConfig;
|
|
65
74
|
}
|
|
66
75
|
/** 决策模型 */
|
|
67
76
|
export interface DecisionModel {
|
|
@@ -100,6 +109,14 @@ export interface GateResult {
|
|
|
100
109
|
blocking_details: BlockingDetail[];
|
|
101
110
|
/** warning 级未通过的详细信息(含恢复指引,AI 可见) */
|
|
102
111
|
warning_details: BlockingDetail[];
|
|
112
|
+
/** 被豁免(waiver)的失败项详情:不阻断推进,但仍记录供审计/sf_doctor 展示(保留 passed=false 真相) */
|
|
113
|
+
waived_details: BlockingDetail[];
|
|
114
|
+
/** 本次评估应用的豁免(check_id → waiver_id + reason,供 sf_work 填 record.waiver_ids/findings 标记) */
|
|
115
|
+
applied_waivers: Array<{
|
|
116
|
+
check_id: string;
|
|
117
|
+
waiver_id: string;
|
|
118
|
+
reason: string;
|
|
119
|
+
}>;
|
|
103
120
|
/** 整体恢复摘要(一段大白话总览) */
|
|
104
121
|
recovery_summary: string;
|
|
105
122
|
}
|
|
@@ -126,6 +143,9 @@ export interface EvaluationContext {
|
|
|
126
143
|
projectRoot: string;
|
|
127
144
|
/** 当前阶段 */
|
|
128
145
|
stage: string;
|
|
146
|
+
/** 当前验证的产物路径(sf_work verify 按 per-artifact 注入;ODA 探针路径可能为 undefined)。
|
|
147
|
+
* waiver 的 scope=exact 匹配依赖此字段;undefined 时只匹配 scope=check_id 的豁免。 */
|
|
148
|
+
artifactPath?: string;
|
|
129
149
|
/** 当前切片 ID(如有) */
|
|
130
150
|
sliceId?: string;
|
|
131
151
|
/** 系统类型 */
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"gate_engine.d.ts","sourceRoot":"","sources":["../../src/gate/gate_engine.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAOH,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AACrD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AACrD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,+BAA+B,CAAC;AAGpE,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,+BAA+B,CAAC;
|
|
1
|
+
{"version":3,"file":"gate_engine.d.ts","sourceRoot":"","sources":["../../src/gate/gate_engine.ts"],"names":[],"mappings":"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"}
|
package/dist/gate/gate_engine.js
CHANGED
|
@@ -19,6 +19,23 @@ import { gateExecutors } from "./gate_executors.js";
|
|
|
19
19
|
import { debug } from "../shared/logger.js";
|
|
20
20
|
import { loadProjectProbeRules } from "../verify/audit/probe_rule.js";
|
|
21
21
|
import { buildGateFromRegistry } from "./gate_registry_bridge.js";
|
|
22
|
+
import crypto from "node:crypto";
|
|
23
|
+
import { WaiverStore, matchWaiver } from "../core/waiver_store.js";
|
|
24
|
+
import { ALL_DOMAINS } from "../core/types.js";
|
|
25
|
+
/**
|
|
26
|
+
* 计算域门禁规则集指纹(该域全部 enforced check 的 id+executor+severity+rule+block_check 的 hash)。
|
|
27
|
+
* 规则变(加 check/改 rule/改 block_check)→ hash 变 → doctor 标 rules_stale 需重验。
|
|
28
|
+
* verify 写 GateRecord 时记录;doctor 比对当前 hash 判定旧 verified 产物是否需重验。
|
|
29
|
+
*/
|
|
30
|
+
export function computeRulesetHash(domain, projectRoot) {
|
|
31
|
+
const gates = buildGateFromRegistry(domain, projectRoot);
|
|
32
|
+
const fingerprint = gates
|
|
33
|
+
.flatMap((g) => g.checks)
|
|
34
|
+
.map((c) => [c.id, c.executor ?? "", c.severity, c.rule, c.block_check ? JSON.stringify(c.block_check) : ""].join("|"))
|
|
35
|
+
.sort()
|
|
36
|
+
.join("||");
|
|
37
|
+
return crypto.createHash("sha256").update(fingerprint).digest("hex").slice(0, 16);
|
|
38
|
+
}
|
|
22
39
|
// ═══════════════════════════════════════════
|
|
23
40
|
// 门禁加载警告收集(gate YAML 解析/目录读取失败时使用,避免静默跳过)
|
|
24
41
|
// ═══════════════════════════════════════════
|
|
@@ -215,26 +232,54 @@ export async function evaluateGate(gate, ctx) {
|
|
|
215
232
|
const result = await evaluateCheck(check, ctx);
|
|
216
233
|
checkResults.push(result);
|
|
217
234
|
}
|
|
218
|
-
// 收集 error 级 + warning 级未通过的 check + 构建恢复信息
|
|
235
|
+
// 收集 error 级 + warning 级未通过的 check + 被豁免(waiver)的失败项 + 构建恢复信息
|
|
219
236
|
const blockingErrors = [];
|
|
220
237
|
const blockingDetails = [];
|
|
221
238
|
const warningDetails = [];
|
|
239
|
+
const waivedDetails = [];
|
|
240
|
+
const appliedWaivers = [];
|
|
222
241
|
const resultsWithSeverity = [];
|
|
242
|
+
// 懒加载豁免:只在有 failed check 时查(性能);豁免加载失败 → 空列表(gate 仍按原逻辑跑,不阻断)
|
|
243
|
+
const failedIds = new Set(checkResults.filter((r) => !r.passed).map((r) => r.check_id));
|
|
244
|
+
let activeWaivers = [];
|
|
245
|
+
if (failedIds.size > 0) {
|
|
246
|
+
const domain = ALL_DOMAINS.includes(ctx.stage) ? ctx.stage : undefined;
|
|
247
|
+
if (domain) {
|
|
248
|
+
try {
|
|
249
|
+
activeWaivers = await new WaiverStore(ctx.projectRoot).listActive(domain);
|
|
250
|
+
}
|
|
251
|
+
catch {
|
|
252
|
+
activeWaivers = [];
|
|
253
|
+
}
|
|
254
|
+
}
|
|
255
|
+
}
|
|
223
256
|
for (let i = 0; i < checkResults.length; i++) {
|
|
224
257
|
const severity = gate.checks[i]?.severity ?? "error";
|
|
225
|
-
|
|
258
|
+
const cid = checkResults[i].check_id;
|
|
259
|
+
// 失败项才查豁免(matchWaiver:exact 优先,其次 check_id-wide)
|
|
260
|
+
const waiver = !checkResults[i].passed ? matchWaiver(cid, ctx.artifactPath, activeWaivers) : undefined;
|
|
261
|
+
const isWaived = !!waiver;
|
|
262
|
+
// 给 decision model 的视图:waived 视为 passed=true(不进 failedErrors,不 rollback)。
|
|
263
|
+
// 原始 checkResults 里 waived 的 passed 仍为 false(保留真相供 Reflexion 反馈闭环)。
|
|
264
|
+
const effectivePassed = isWaived ? true : checkResults[i].passed;
|
|
265
|
+
resultsWithSeverity.push({ ...checkResults[i], passed: effectivePassed, severity });
|
|
226
266
|
if (!checkResults[i].passed) {
|
|
227
267
|
const check = gate.checks[i];
|
|
228
268
|
const detail = {
|
|
229
|
-
check_id:
|
|
230
|
-
name: check?.name ||
|
|
269
|
+
check_id: cid,
|
|
270
|
+
name: check?.name || cid,
|
|
231
271
|
rule: check?.rule ?? "",
|
|
232
272
|
evidence_required: check?.evidence_required ?? [],
|
|
233
273
|
error: checkResults[i].error ?? "",
|
|
234
274
|
recovery_guide: buildRecoveryGuide(checkResults[i], check, gate, ctx),
|
|
235
275
|
};
|
|
236
|
-
if (
|
|
237
|
-
|
|
276
|
+
if (isWaived && waiver) {
|
|
277
|
+
// 豁免:不阻断,收审计详情;applyDecisionModelWithSeverity 因 effectivePassed 已不计为 failed
|
|
278
|
+
waivedDetails.push(detail);
|
|
279
|
+
appliedWaivers.push({ check_id: cid, waiver_id: waiver.waiver_id, reason: waiver.reason });
|
|
280
|
+
}
|
|
281
|
+
else if (severity === "error") {
|
|
282
|
+
blockingErrors.push(cid);
|
|
238
283
|
blockingDetails.push(detail);
|
|
239
284
|
}
|
|
240
285
|
else {
|
|
@@ -274,6 +319,11 @@ export async function evaluateGate(gate, ctx) {
|
|
|
274
319
|
const warningNote = `\n⚠️ 门禁加载警告:\n${loadWarnings.map(w => `- ${w}`).join("\n")}`;
|
|
275
320
|
recoverySummary = recoverySummary ? recoverySummary + warningNote : warningNote.trim();
|
|
276
321
|
}
|
|
322
|
+
// 豁免提示:让用户/AI 知道有 N 项被豁免(不阻断但需定期复核,sf_doctor 可查 active waivers)
|
|
323
|
+
if (waivedDetails.length > 0) {
|
|
324
|
+
const waivedNote = `\n提示:${waivedDetails.length} 项检查已被豁免(waiver),不阻断推进,但请定期复核(sf_doctor 可查 active waivers / sf_waiver list 可列详情)。`;
|
|
325
|
+
recoverySummary = recoverySummary ? recoverySummary + waivedNote : waivedNote.trim();
|
|
326
|
+
}
|
|
277
327
|
return {
|
|
278
328
|
gate_id: gate.source_file ?? gate.stage,
|
|
279
329
|
passed: decision === "promote",
|
|
@@ -282,6 +332,8 @@ export async function evaluateGate(gate, ctx) {
|
|
|
282
332
|
blocking_errors: blockingErrors,
|
|
283
333
|
blocking_details: blockingDetails,
|
|
284
334
|
warning_details: warningDetails,
|
|
335
|
+
waived_details: waivedDetails,
|
|
336
|
+
applied_waivers: appliedWaivers,
|
|
285
337
|
recovery_summary: recoverySummary,
|
|
286
338
|
};
|
|
287
339
|
}
|