soloforge 1.1.72 → 1.1.74
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/dist/core/types.d.ts +11 -0
- package/dist/core/types.d.ts.map +1 -1
- package/dist/domain/asset_registry/derived_types.d.ts +1 -1
- package/dist/domain/asset_registry/derived_types.d.ts.map +1 -1
- package/dist/gate/contracts/deviation_metrics.d.ts +42 -0
- package/dist/gate/contracts/deviation_metrics.d.ts.map +1 -0
- package/dist/gate/contracts/deviation_metrics.js +40 -0
- package/dist/gate/contracts/deviation_metrics.js.map +1 -0
- package/dist/gate/executors/executors_arch_conduction.d.ts +2 -0
- package/dist/gate/executors/executors_arch_conduction.d.ts.map +1 -0
- package/dist/gate/executors/executors_arch_conduction.js +58 -0
- package/dist/gate/executors/executors_arch_conduction.js.map +1 -0
- package/dist/gate/executors/executors_arch_coverage.d.ts +2 -0
- package/dist/gate/executors/executors_arch_coverage.d.ts.map +1 -0
- package/dist/gate/executors/executors_arch_coverage.js +67 -0
- package/dist/gate/executors/executors_arch_coverage.js.map +1 -0
- package/dist/gate/executors/executors_companion.d.ts +2 -0
- package/dist/gate/executors/executors_companion.d.ts.map +1 -0
- package/dist/gate/executors/executors_companion.js +74 -0
- package/dist/gate/executors/executors_companion.js.map +1 -0
- package/dist/gate/executors/executors_crud.d.ts +4 -0
- package/dist/gate/executors/executors_crud.d.ts.map +1 -0
- package/dist/gate/executors/executors_crud.js +130 -0
- package/dist/gate/executors/executors_crud.js.map +1 -0
- package/dist/gate/executors/executors_deviation_summary.d.ts +2 -0
- package/dist/gate/executors/executors_deviation_summary.d.ts.map +1 -0
- package/dist/gate/executors/executors_deviation_summary.js +56 -0
- package/dist/gate/executors/executors_deviation_summary.js.map +1 -0
- package/dist/gate/executors/executors_field_mapping.d.ts.map +1 -1
- package/dist/gate/executors/executors_field_mapping.js +3 -2
- package/dist/gate/executors/executors_field_mapping.js.map +1 -1
- package/dist/gate/executors/executors_openapi_conformance.d.ts +6 -0
- package/dist/gate/executors/executors_openapi_conformance.d.ts.map +1 -0
- package/dist/gate/executors/executors_openapi_conformance.js +119 -0
- package/dist/gate/executors/executors_openapi_conformance.js.map +1 -0
- package/dist/gate/executors/executors_proto_interaction.d.ts +2 -0
- package/dist/gate/executors/executors_proto_interaction.d.ts.map +1 -0
- package/dist/gate/executors/executors_proto_interaction.js +65 -0
- package/dist/gate/executors/executors_proto_interaction.js.map +1 -0
- package/dist/gate/executors/executors_required_artifact.d.ts +2 -0
- package/dist/gate/executors/executors_required_artifact.d.ts.map +1 -0
- package/dist/gate/executors/executors_required_artifact.js +49 -0
- package/dist/gate/executors/executors_required_artifact.js.map +1 -0
- package/dist/gate/executors/executors_schema_conformance.d.ts +4 -0
- package/dist/gate/executors/executors_schema_conformance.d.ts.map +1 -0
- package/dist/gate/executors/executors_schema_conformance.js +91 -0
- package/dist/gate/executors/executors_schema_conformance.js.map +1 -0
- package/dist/gate/executors/executors_section_integrity.d.ts +2 -0
- package/dist/gate/executors/executors_section_integrity.d.ts.map +1 -0
- package/dist/gate/executors/executors_section_integrity.js +95 -0
- package/dist/gate/executors/executors_section_integrity.js.map +1 -0
- package/dist/gate/executors/executors_slice_contract.d.ts +4 -0
- package/dist/gate/executors/executors_slice_contract.d.ts.map +1 -0
- package/dist/gate/executors/executors_slice_contract.js +62 -0
- package/dist/gate/executors/executors_slice_contract.js.map +1 -0
- package/dist/gate/executors/index.d.ts.map +1 -1
- package/dist/gate/executors/index.js +22 -0
- package/dist/gate/executors/index.js.map +1 -1
- package/dist/gate/gate_engine.d.ts +7 -0
- package/dist/gate/gate_engine.d.ts.map +1 -1
- package/dist/gate/gate_engine.js.map +1 -1
- package/dist/server/tools/sf_work.d.ts.map +1 -1
- package/dist/server/tools/sf_work.js +3 -0
- package/dist/server/tools/sf_work.js.map +1 -1
- package/package.json +1 -1
- package/templates/build/enforced.md +24 -0
- package/templates/design/enforced.md +54 -0
- package/templates/design//346/236/266/346/236/204/350/256/276/350/256/241/346/226/207/346/241/243.md +8 -0
- package/templates/shared/deterministic_executors.json +11 -0
- package/templates/verify/enforced.md +15 -0
- 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 -1
package/dist/core/types.d.ts
CHANGED
|
@@ -80,6 +80,17 @@ export interface GateRecord {
|
|
|
80
80
|
max_retries: number;
|
|
81
81
|
/** 检查发现列表 */
|
|
82
82
|
findings: GateFinding[];
|
|
83
|
+
/** 全量 check 结果(含 passed + metric,供 deviation_summary 汇总偏差率;findings 只含 failed,不够算 total/passed) */
|
|
84
|
+
check_results?: Array<{
|
|
85
|
+
check_id: string;
|
|
86
|
+
passed: boolean;
|
|
87
|
+
skipped?: boolean;
|
|
88
|
+
metric?: {
|
|
89
|
+
passed: number;
|
|
90
|
+
total: number;
|
|
91
|
+
deviation_rate?: number;
|
|
92
|
+
};
|
|
93
|
+
}>;
|
|
83
94
|
/** 修复指引(失败时的恢复指导) */
|
|
84
95
|
recovery_guidance?: string;
|
|
85
96
|
/** 评估时间戳 */
|
package/dist/core/types.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/core/types.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/core/types.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAMH,iBAAiB;AACjB,MAAM,MAAM,UAAU,GAAG,QAAQ,GAAG,OAAO,GAAG,QAAQ,GAAG,SAAS,CAAC;AAEnE,sBAAsB;AACtB,eAAO,MAAM,WAAW,EAAE,SAAS,UAAU,EAAsD,CAAC;AAEpG,2BAA2B;AAC3B,eAAO,MAAM,YAAY,EAAE,SAAS,UAAU,EAAgB,CAAC;AAE/D,eAAe;AACf,eAAO,MAAM,wBAAwB,EAAE,WAAW,CAAC,UAAU,CAA4C,CAAC;AAE1G,eAAe;AACf,eAAO,MAAM,2BAA2B,EAAE,QAAQ,CAAC,MAAM,CAAC,UAAU,EAAE,UAAU,GAAG,IAAI,CAAC,CAKvF,CAAC;AAMF,eAAe;AACf,MAAM,WAAW,aAAa;IAC5B,cAAc;IACd,MAAM,EAAE,UAAU,CAAC;IACnB,wBAAwB;IACxB,eAAe,EAAE,MAAM,CAAC;IACxB,2BAA2B;IAC3B,eAAe,EAAE,MAAM,CAAC;CACzB;AAED,aAAa;AACb,MAAM,WAAW,UAAU;IACzB,UAAU;IACV,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW;IACX,MAAM,EAAE,MAAM,CAAC;IACf,YAAY;IACZ,MAAM,CAAC,EAAE,UAAU,CAAC;IACpB,SAAS;IACT,MAAM,EAAE,MAAM,CAAC;CAChB;AAMD,aAAa;AACb,MAAM,WAAW,WAAW;IAC1B,aAAa;IACb,QAAQ,EAAE,MAAM,CAAC;IACjB,YAAY;IACZ,UAAU,EAAE,MAAM,CAAC;IACnB,WAAW;IACX,MAAM,EAAE,OAAO,CAAC;IAChB,WAAW;IACX,QAAQ,EAAE,OAAO,GAAG,SAAS,GAAG,MAAM,CAAC;IACvC,aAAa;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,mFAAmF;IACnF,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,oCAAoC;IACpC,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,iBAAiB;IACjB,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB;AAED,8CAA8C;AAC9C,MAAM,WAAW,UAAU;IACzB,UAAU;IACV,MAAM,EAAE,UAAU,CAAC;IACnB,sFAAsF;IACtF,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,WAAW;IACX,SAAS,EAAE,MAAM,CAAC;IAClB,eAAe;IACf,aAAa,EAAE,MAAM,CAAC;IACtB,uDAAuD;IACvD,iBAAiB,EAAE,MAAM,CAAC;IAC1B,WAAW;IACX,MAAM,EAAE,OAAO,CAAC;IAChB,uCAAuC;IACvC,WAAW,EAAE,MAAM,CAAC;IACpB,aAAa;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,aAAa;IACb,QAAQ,EAAE,WAAW,EAAE,CAAC;IACxB,mGAAmG;IACnG,aAAa,CAAC,EAAE,KAAK,CAAC;QACpB,QAAQ,EAAE,MAAM,CAAC;QACjB,MAAM,EAAE,OAAO,CAAC;QAChB,OAAO,CAAC,EAAE,OAAO,CAAC;QAClB,MAAM,CAAC,EAAE;YAAE,MAAM,EAAE,MAAM,CAAC;YAAC,KAAK,EAAE,MAAM,CAAC;YAAC,cAAc,CAAC,EAAE,MAAM,CAAA;SAAE,CAAC;KACrE,CAAC,CAAC;IACH,qBAAqB;IACrB,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,YAAY;IACZ,YAAY,EAAE,MAAM,CAAC;IACrB,6EAA6E;IAC7E,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,2FAA2F;IAC3F,eAAe,CAAC,EAAE,WAAW,EAAE,CAAC;IAChC,+BAA+B;IAC/B,UAAU,CAAC,EAAE,MAAM,EAAE,CAAC;CACvB;AAMD,4CAA4C;AAC5C,MAAM,WAAW,mBAAmB;IAClC,iBAAiB;IACjB,IAAI,EAAE,MAAM,CAAC;IACb;+JAC2J;IAC3J,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED,0BAA0B;AAC1B,MAAM,WAAW,mBAAmB;IAClC,qCAAqC;IACrC,IAAI,EAAE,MAAM,CAAC;IACb,qCAAqC;IACrC,YAAY,EAAE,MAAM,CAAC;IACrB,YAAY;IACZ,QAAQ,EAAE,OAAO,CAAC;IAClB,oBAAoB;IACpB,IAAI,EAAE,MAAM,CAAC;IACb,gBAAgB;IAChB,QAAQ,EAAE,MAAM,CAAC;IACjB,+BAA+B;IAC/B,iBAAiB,CAAC,EAAE,MAAM,EAAE,CAAC;IAC7B,oGAAoG;IACpG,QAAQ,CAAC,EAAE,mBAAmB,EAAE,CAAC;IACjC,gGAAgG;IAChG,eAAe,CAAC,EAAE,MAAM,EAAE,CAAC;IAC3B,gEAAgE;IAChE,UAAU,CAAC,EAAE,MAAM,EAAE,CAAC;IACtB;;;mGAG+F;IAC/F,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,aAAa;AACb,MAAM,WAAW,mBAAmB;IAClC,UAAU;IACV,WAAW,EAAE,UAAU,CAAC;IACxB,cAAc;IACd,aAAa,EAAE,MAAM,CAAC;IACtB;mGAC+F;IAC/F,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,8BAA8B;AAC9B,MAAM,WAAW,cAAc;IAC7B,UAAU;IACV,IAAI,EAAE,UAAU,CAAC;IACjB,YAAY;IACZ,WAAW,EAAE,MAAM,CAAC;IACpB,iBAAiB;IACjB,QAAQ,EAAE,mBAAmB,EAAE,CAAC;IAChC,cAAc;IACd,iBAAiB,EAAE,mBAAmB,EAAE,CAAC;CAC1C;AAMD,mCAAmC;AACnC,MAAM,WAAW,YAAY;IAC3B,UAAU;IACV,cAAc,EAAE,UAAU,CAAC;IAC3B,cAAc;IACd,gBAAgB,EAAE,mBAAmB,EAAE,CAAC;IACxC,cAAc;IACd,iBAAiB,EAAE,mBAAmB,EAAE,CAAC;IACzC,kBAAkB;IAClB,oBAAoB,EAAE,mBAAmB,EAAE,CAAC;IAC5C,eAAe;IACf,kBAAkB,EAAE,mBAAmB,EAAE,CAAC;IAC1C,0CAA0C;IAC1C,WAAW,EAAE,UAAU,EAAE,CAAC;IAC1B,iBAAiB;IACjB,cAAc,CAAC,EAAE,aAAa,CAAC;IAC/B,yEAAyE;IACzE,iBAAiB,CAAC,EAAE,KAAK,CAAC;QAAE,QAAQ,EAAE,mBAAmB,CAAC;QAAC,UAAU,EAAE,MAAM,EAAE,CAAA;KAAE,CAAC,CAAC;IACnF,mFAAmF;IACnF,YAAY,CAAC,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,KAAK,GAAG,QAAQ,GAAG,MAAM,CAAC;QAAC,MAAM,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;CAC5F"}
|
|
@@ -29,7 +29,7 @@ export type SyncPolicy = "engine_only" | "copy_to_project" | "internal";
|
|
|
29
29
|
export type AssetStatus = "active" | "retired";
|
|
30
30
|
/** check executor:确定性执行器(与 templates/shared/deterministic_executors.json 单源同步)+ semantic(③注入 AI 自评)+ none(纯注入)。
|
|
31
31
|
* 加新确定性 executor 须同步:deterministic_executors.json + 本类型 + DETERMINISTIC 白名单(check_deterministic_executor.mjs + gate_registry_bridge)。*/
|
|
32
|
-
export type CheckExecutor = "regex_pattern_scan" | "document_structure" | "cross_validation" | "applicability_check" | "slice_deliberation_gate" | "requirement_deliberation_gate" | "artifact_deliberation_gate" | "scope_consistency_check" | "multi_engine_structure_check" | "external_command" | "file_evidence" | "tsc_compile" | "vitest_run" | "upstream_gate_check" | "lazy_pattern_check" | "probe" | "report_structure" | "field_mapping_validation" | "docker_deployment" | "local_http_acceptance" | "coverage_threshold" | "ast_annotation_check" | "slice_verifiability_check" | "acceptance_coverage" | "jacoco_threshold" | "prototype_existence_check" | "slice_prototype_binding_check" | "semantic" | "none";
|
|
32
|
+
export type CheckExecutor = "regex_pattern_scan" | "document_structure" | "cross_validation" | "applicability_check" | "slice_deliberation_gate" | "requirement_deliberation_gate" | "artifact_deliberation_gate" | "scope_consistency_check" | "multi_engine_structure_check" | "external_command" | "file_evidence" | "tsc_compile" | "vitest_run" | "upstream_gate_check" | "lazy_pattern_check" | "probe" | "report_structure" | "field_mapping_validation" | "docker_deployment" | "local_http_acceptance" | "coverage_threshold" | "ast_annotation_check" | "slice_verifiability_check" | "acceptance_coverage" | "jacoco_threshold" | "prototype_existence_check" | "slice_prototype_binding_check" | "crud_completeness" | "arch_translation_coverage" | "arch_contract_conduction" | "companion_consistency" | "openapi_conformance" | "schema_conformance" | "slice_contract_coverage" | "proto_interaction_coverage" | "deviation_summary" | "section_integrity_check" | "required_artifact_check" | "semantic" | "none";
|
|
33
33
|
/** 资产 check 声明(嵌资产 frontmatter,跟主体走) */
|
|
34
34
|
/** document_structure 的条目块完整性校验配置(反退化硬兜底:防「前详后废」「表格→文字」「同上格式」占位) */
|
|
35
35
|
export interface BlockCheckConfig {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"derived_types.d.ts","sourceRoot":"","sources":["../../../src/domain/asset_registry/derived_types.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"derived_types.d.ts","sourceRoot":"","sources":["../../../src/domain/asset_registry/derived_types.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* 偏差度量汇总契约 — 从各确定性偏差 check 的 metric(passed/total)汇总四维偏差率。
|
|
3
|
+
*
|
|
4
|
+
* 职责边界:
|
|
5
|
+
* - 负责:check_id → 维度映射 + summarizeDeviation 汇总各维度偏差率
|
|
6
|
+
* - 不负责:度量样本采集(各 executor 自产 metric)、语义偏差(引擎只度量确定性偏差)
|
|
7
|
+
*
|
|
8
|
+
* 被谁调用:deviation_summary(release_readiness phase)
|
|
9
|
+
* 数据流:各 gate check_results[].metric → 按维度累加 → 偏差率(max 各维度)
|
|
10
|
+
*
|
|
11
|
+
* 偏差四维(对应偏差传播链):架构翻译 / 架构传导 / 契约一致性 / 实现 conformance / 原型交互 / 端到端覆盖。
|
|
12
|
+
* 条件产物(scope≠frontend/persistence/api)的 check 会 skipped → 不计入(按 scope 归零)。
|
|
13
|
+
*/
|
|
14
|
+
/** 偏差样本结构(CheckResult 的子集,兼容 GateRecord.check_results 内联结构,避免 core/types↔gate_engine 循环 import)。 */
|
|
15
|
+
export interface DeviationSample {
|
|
16
|
+
check_id: string;
|
|
17
|
+
passed: boolean;
|
|
18
|
+
skipped?: boolean;
|
|
19
|
+
metric?: {
|
|
20
|
+
passed: number;
|
|
21
|
+
total: number;
|
|
22
|
+
deviation_rate?: number;
|
|
23
|
+
};
|
|
24
|
+
}
|
|
25
|
+
/** 偏差 check_id → 维度映射(与各 enforced.md 的 id 一致)。 */
|
|
26
|
+
export declare const CHECK_DIMENSIONS: Record<string, string>;
|
|
27
|
+
export interface DimensionStat {
|
|
28
|
+
passed: number;
|
|
29
|
+
total: number;
|
|
30
|
+
/** 偏差率 = (total - passed) / total */
|
|
31
|
+
rate: number;
|
|
32
|
+
}
|
|
33
|
+
export interface DeviationSummary {
|
|
34
|
+
/** 总偏差 = max(各维度 rate),最差维度决定整体偏差水位 */
|
|
35
|
+
total_deviation: number;
|
|
36
|
+
dimensions: Record<string, DimensionStat>;
|
|
37
|
+
/** 采样的 check 数(有 metric 且 total>0) */
|
|
38
|
+
sampled_checks: number;
|
|
39
|
+
}
|
|
40
|
+
/** 从 check_results 汇总偏差率(按维度)。跳过 skipped/无 metric/total=0。 */
|
|
41
|
+
export declare function summarizeDeviation(results: DeviationSample[]): DeviationSummary;
|
|
42
|
+
//# sourceMappingURL=deviation_metrics.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"deviation_metrics.d.ts","sourceRoot":"","sources":["../../../src/gate/contracts/deviation_metrics.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AACH,oGAAoG;AACpG,MAAM,WAAW,eAAe;IAC9B,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,OAAO,CAAC;IAChB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,MAAM,CAAC,EAAE;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAC;QAAC,cAAc,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;CACrE;AAED,kDAAkD;AAClD,eAAO,MAAM,gBAAgB,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAWnD,CAAC;AAEF,MAAM,WAAW,aAAa;IAC5B,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;IACd,qCAAqC;IACrC,IAAI,EAAE,MAAM,CAAC;CACd;AAED,MAAM,WAAW,gBAAgB;IAC/B,uCAAuC;IACvC,eAAe,EAAE,MAAM,CAAC;IACxB,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,aAAa,CAAC,CAAC;IAC1C,sCAAsC;IACtC,cAAc,EAAE,MAAM,CAAC;CACxB;AAED,8DAA8D;AAC9D,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,eAAe,EAAE,GAAG,gBAAgB,CAoB/E"}
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
/** 偏差 check_id → 维度映射(与各 enforced.md 的 id 一致)。 */
|
|
2
|
+
export const CHECK_DIMENSIONS = {
|
|
3
|
+
"ARCH-COVERAGE": "架构翻译",
|
|
4
|
+
"ARCH-CONDUCTION": "架构传导",
|
|
5
|
+
"CRUD-COMPLETE": "契约一致性",
|
|
6
|
+
"COMPANION-CONSIST": "契约一致性",
|
|
7
|
+
"FMAP-DB-SCHEMA": "契约一致性",
|
|
8
|
+
"OPENAPI-CONF": "实现conformance",
|
|
9
|
+
"SCHEMA-CONF": "实现conformance",
|
|
10
|
+
"SLICE-CONTRACT": "实现conformance",
|
|
11
|
+
"PROTO-INTERACTION-COV": "原型交互",
|
|
12
|
+
"AC-COVERAGE": "端到端覆盖",
|
|
13
|
+
};
|
|
14
|
+
/** 从 check_results 汇总偏差率(按维度)。跳过 skipped/无 metric/total=0。 */
|
|
15
|
+
export function summarizeDeviation(results) {
|
|
16
|
+
const dims = {};
|
|
17
|
+
let sampled = 0;
|
|
18
|
+
for (const r of results) {
|
|
19
|
+
if (r.skipped || !r.metric || r.metric.total === 0)
|
|
20
|
+
continue;
|
|
21
|
+
const dim = CHECK_DIMENSIONS[r.check_id];
|
|
22
|
+
if (!dim)
|
|
23
|
+
continue;
|
|
24
|
+
if (!dims[dim])
|
|
25
|
+
dims[dim] = { passed: 0, total: 0 };
|
|
26
|
+
dims[dim].passed += r.metric.passed;
|
|
27
|
+
dims[dim].total += r.metric.total;
|
|
28
|
+
sampled++;
|
|
29
|
+
}
|
|
30
|
+
const dimensions = {};
|
|
31
|
+
let totalDeviation = 0;
|
|
32
|
+
for (const [name, s] of Object.entries(dims)) {
|
|
33
|
+
const rate = s.total === 0 ? 0 : (s.total - s.passed) / s.total;
|
|
34
|
+
dimensions[name] = { passed: s.passed, total: s.total, rate };
|
|
35
|
+
if (rate > totalDeviation)
|
|
36
|
+
totalDeviation = rate;
|
|
37
|
+
}
|
|
38
|
+
return { total_deviation: totalDeviation, dimensions, sampled_checks: sampled };
|
|
39
|
+
}
|
|
40
|
+
//# sourceMappingURL=deviation_metrics.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"deviation_metrics.js","sourceRoot":"","sources":["../../../src/gate/contracts/deviation_metrics.ts"],"names":[],"mappings":"AAqBA,kDAAkD;AAClD,MAAM,CAAC,MAAM,gBAAgB,GAA2B;IACtD,eAAe,EAAE,MAAM;IACvB,iBAAiB,EAAE,MAAM;IACzB,eAAe,EAAE,OAAO;IACxB,mBAAmB,EAAE,OAAO;IAC5B,gBAAgB,EAAE,OAAO;IACzB,cAAc,EAAE,eAAe;IAC/B,aAAa,EAAE,eAAe;IAC9B,gBAAgB,EAAE,eAAe;IACjC,uBAAuB,EAAE,MAAM;IAC/B,aAAa,EAAE,OAAO;CACvB,CAAC;AAiBF,8DAA8D;AAC9D,MAAM,UAAU,kBAAkB,CAAC,OAA0B;IAC3D,MAAM,IAAI,GAAsD,EAAE,CAAC;IACnE,IAAI,OAAO,GAAG,CAAC,CAAC;IAChB,KAAK,MAAM,CAAC,IAAI,OAAO,EAAE,CAAC;QACxB,IAAI,CAAC,CAAC,OAAO,IAAI,CAAC,CAAC,CAAC,MAAM,IAAI,CAAC,CAAC,MAAM,CAAC,KAAK,KAAK,CAAC;YAAE,SAAS;QAC7D,MAAM,GAAG,GAAG,gBAAgB,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC;QACzC,IAAI,CAAC,GAAG;YAAE,SAAS;QACnB,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC;YAAE,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,MAAM,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC;QACpD,IAAI,CAAC,GAAG,CAAC,CAAC,MAAM,IAAI,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC;QACpC,IAAI,CAAC,GAAG,CAAC,CAAC,KAAK,IAAI,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC;QAClC,OAAO,EAAE,CAAC;IACZ,CAAC;IACD,MAAM,UAAU,GAAkC,EAAE,CAAC;IACrD,IAAI,cAAc,GAAG,CAAC,CAAC;IACvB,KAAK,MAAM,CAAC,IAAI,EAAE,CAAC,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC;QAC7C,MAAM,IAAI,GAAG,CAAC,CAAC,KAAK,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC;QAChE,UAAU,CAAC,IAAI,CAAC,GAAG,EAAE,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,KAAK,EAAE,CAAC,CAAC,KAAK,EAAE,IAAI,EAAE,CAAC;QAC9D,IAAI,IAAI,GAAG,cAAc;YAAE,cAAc,GAAG,IAAI,CAAC;IACnD,CAAC;IACD,OAAO,EAAE,eAAe,EAAE,cAAc,EAAE,UAAU,EAAE,cAAc,EAAE,OAAO,EAAE,CAAC;AAClF,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"executors_arch_conduction.d.ts","sourceRoot":"","sources":["../../../src/gate/executors/executors_arch_conduction.ts"],"names":[],"mappings":"AAmBA,wBAAgB,8BAA8B,IAAI,IAAI,CAsCrD"}
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* 架构→契约传导执行器 — 架构 §8 引用的下游产物路径真实存在。
|
|
3
|
+
* 确定性偏差:传导层(架构→契约)。堵架构引用错路径(如 docs/architecture/ vs 实际 docs/design/)致下游定位失败。
|
|
4
|
+
*
|
|
5
|
+
* 被谁调用:gate_engine(arch_contract_conduction executor)
|
|
6
|
+
* 数据流:evidence_required[0]=架构设计文档 → 提取 §8 引用路径 → 校验存在 → CheckResult(含 metric)
|
|
7
|
+
*/
|
|
8
|
+
import { gateExecutors } from "../gate_executors.js";
|
|
9
|
+
import { existsSync, readFileSync } from "node:fs";
|
|
10
|
+
import { join } from "node:path";
|
|
11
|
+
/** 从架构文档提取引用的产物路径(反引号包裹的 docs/ 或 deploy/ 路径)。 */
|
|
12
|
+
function extractArchReferences(content) {
|
|
13
|
+
const refs = new Set();
|
|
14
|
+
for (const m of content.matchAll(/`((?:docs|deploy)\/[^`\s|]+)`/g))
|
|
15
|
+
refs.add(m[1]);
|
|
16
|
+
return [...refs];
|
|
17
|
+
}
|
|
18
|
+
export function registerArchConductionExecutor() {
|
|
19
|
+
gateExecutors.register("arch_contract_conduction", async (check, ctx) => {
|
|
20
|
+
try {
|
|
21
|
+
const archRel = check.evidence_required?.[0] ?? "docs/architecture/01-架构设计文档.md";
|
|
22
|
+
const archAbs = join(ctx.projectRoot, archRel);
|
|
23
|
+
if (!existsSync(archAbs)) {
|
|
24
|
+
return { check_id: check.id, executed_by: "code", passed: true, skipped: true,
|
|
25
|
+
evidence: `架构文档不存在(${archRel}),跳过传导校验` };
|
|
26
|
+
}
|
|
27
|
+
const refs = extractArchReferences(readFileSync(archAbs, "utf-8"));
|
|
28
|
+
if (refs.length === 0) {
|
|
29
|
+
return { check_id: check.id, executed_by: "code", passed: true,
|
|
30
|
+
evidence: "架构未引用下游产物路径,跳过传导校验",
|
|
31
|
+
metric: { passed: 0, total: 0, deviation_rate: 0 } };
|
|
32
|
+
}
|
|
33
|
+
const missing = [];
|
|
34
|
+
let existCount = 0;
|
|
35
|
+
for (const r of refs) {
|
|
36
|
+
if (existsSync(join(ctx.projectRoot, r)))
|
|
37
|
+
existCount++;
|
|
38
|
+
else
|
|
39
|
+
missing.push(r);
|
|
40
|
+
}
|
|
41
|
+
const deviationRate = (refs.length - existCount) / refs.length;
|
|
42
|
+
const passed = missing.length === 0;
|
|
43
|
+
return {
|
|
44
|
+
check_id: check.id, executed_by: "code", passed,
|
|
45
|
+
metric: { passed: existCount, total: refs.length, deviation_rate: deviationRate },
|
|
46
|
+
evidence: passed
|
|
47
|
+
? `架构引用产物路径全部存在:${existCount}/${refs.length}`
|
|
48
|
+
: `架构引用路径缺失:${existCount}/${refs.length} 存在;缺失 ${missing.slice(0, 5).join(", ")}`,
|
|
49
|
+
error: passed ? undefined : `架构引用了不存在的产物路径(传导偏差 ${(deviationRate * 100).toFixed(1)}%,如 docs/architecture/ vs docs/design/ 错位):${missing.slice(0, 3).join(", ")}`,
|
|
50
|
+
};
|
|
51
|
+
}
|
|
52
|
+
catch (err) {
|
|
53
|
+
return { check_id: check.id, executed_by: "code", passed: false,
|
|
54
|
+
error: `arch_contract_conduction 执行异常(fail-closed):${err instanceof Error ? err.message : String(err)}` };
|
|
55
|
+
}
|
|
56
|
+
});
|
|
57
|
+
}
|
|
58
|
+
//# sourceMappingURL=executors_arch_conduction.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"executors_arch_conduction.js","sourceRoot":"","sources":["../../../src/gate/executors/executors_arch_conduction.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"executors_arch_coverage.d.ts","sourceRoot":"","sources":["../../../src/gate/executors/executors_arch_coverage.ts"],"names":[],"mappings":"AAaA,wBAAgB,4BAA4B,IAAI,IAAI,CA6CnD"}
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* 架构翻译覆盖执行器 — 需求 REQ-* 在架构设计文档中被承载(模块/状态机/流程引用)的覆盖率。
|
|
3
|
+
* 确定性偏差:翻译层(需求→架构)。架构漏 REQ → 下游 DB/API/实现全漏,是偏差传播链源头注入点。
|
|
4
|
+
*
|
|
5
|
+
* 被谁调用:gate_engine(arch_translation_coverage executor)
|
|
6
|
+
* 数据流:required_artifact=需求分析模版(提取 REQ-*);evidence_required[0]=架构设计文档 → 覆盖率 → CheckResult(含 metric)
|
|
7
|
+
*/
|
|
8
|
+
import { gateExecutors } from "../gate_executors.js";
|
|
9
|
+
import { readFileSync } from "node:fs";
|
|
10
|
+
import { join } from "node:path";
|
|
11
|
+
import { resolveCrossValidationArtifact } from "./executors_trace.js";
|
|
12
|
+
export function registerArchCoverageExecutor() {
|
|
13
|
+
gateExecutors.register("arch_translation_coverage", async (check, ctx) => {
|
|
14
|
+
try {
|
|
15
|
+
// 固定读需求分析(提 REQ);required_artifact 仅作 per-产物路由 key(绑架构设计模版,verify design_doc 才跑)
|
|
16
|
+
const reqPaths = resolveCrossValidationArtifact("需求分析模版", ctx.projectRoot);
|
|
17
|
+
if (reqPaths.length === 0) {
|
|
18
|
+
return { check_id: check.id, executed_by: "code", passed: true, skipped: true,
|
|
19
|
+
evidence: "需求分析产物不存在(非功能开发任务),跳过架构翻译覆盖" };
|
|
20
|
+
}
|
|
21
|
+
const reqContent = reqPaths.map((p) => { try {
|
|
22
|
+
return readFileSync(p, "utf-8");
|
|
23
|
+
}
|
|
24
|
+
catch {
|
|
25
|
+
return "";
|
|
26
|
+
} }).join("\n");
|
|
27
|
+
const reqIds = new Set(reqContent.match(/\bREQ-\d{2,}\b/g) ?? []);
|
|
28
|
+
if (reqIds.size === 0) {
|
|
29
|
+
return { check_id: check.id, executed_by: "code", passed: false,
|
|
30
|
+
error: "需求分析无 REQ-* 验收点(fail-closed,防偷懒不声明需求)" };
|
|
31
|
+
}
|
|
32
|
+
const archRel = check.evidence_required?.[0] ?? "docs/architecture/01-架构设计文档.md";
|
|
33
|
+
let archContent = "";
|
|
34
|
+
try {
|
|
35
|
+
archContent = readFileSync(join(ctx.projectRoot, archRel), "utf-8");
|
|
36
|
+
}
|
|
37
|
+
catch {
|
|
38
|
+
// 架构未产出(如在 requirement_analysis 阶段 verify)→ skip,翻译覆盖待架构产出后校验
|
|
39
|
+
return { check_id: check.id, executed_by: "code", passed: true, skipped: true,
|
|
40
|
+
evidence: `架构设计文档未产出(${archRel}),翻译覆盖待架构产出后校验,跳过` };
|
|
41
|
+
}
|
|
42
|
+
const uncovered = [];
|
|
43
|
+
let covered = 0;
|
|
44
|
+
for (const id of reqIds) {
|
|
45
|
+
if (archContent.includes(id))
|
|
46
|
+
covered++;
|
|
47
|
+
else
|
|
48
|
+
uncovered.push(id);
|
|
49
|
+
}
|
|
50
|
+
const deviationRate = (reqIds.size - covered) / reqIds.size;
|
|
51
|
+
const passed = uncovered.length === 0;
|
|
52
|
+
return {
|
|
53
|
+
check_id: check.id, executed_by: "code", passed,
|
|
54
|
+
metric: { passed: covered, total: reqIds.size, deviation_rate: deviationRate },
|
|
55
|
+
evidence: passed
|
|
56
|
+
? `架构翻译覆盖完整:${covered}/${reqIds.size} REQ 均被架构承载`
|
|
57
|
+
: `架构翻译覆盖不全:${covered}/${reqIds.size} REQ 被承载;未覆盖 ${uncovered.slice(0, 5).join(", ")}${uncovered.length > 5 ? " ..." : ""}`,
|
|
58
|
+
error: passed ? undefined : `架构未承载这些 REQ(翻译偏差 ${(deviationRate * 100).toFixed(1)}%):${uncovered.slice(0, 3).join(", ")}`,
|
|
59
|
+
};
|
|
60
|
+
}
|
|
61
|
+
catch (err) {
|
|
62
|
+
return { check_id: check.id, executed_by: "code", passed: false,
|
|
63
|
+
error: `arch_translation_coverage 执行异常(fail-closed):${err instanceof Error ? err.message : String(err)}` };
|
|
64
|
+
}
|
|
65
|
+
});
|
|
66
|
+
}
|
|
67
|
+
//# sourceMappingURL=executors_arch_coverage.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"executors_arch_coverage.js","sourceRoot":"","sources":["../../../src/gate/executors/executors_arch_coverage.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AACH,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAErD,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACvC,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,8BAA8B,EAAE,MAAM,sBAAsB,CAAC;AAEtE,MAAM,UAAU,4BAA4B;IAC1C,aAAa,CAAC,QAAQ,CACpB,2BAA2B,EAC3B,KAAK,EAAE,KAAgB,EAAE,GAAsB,EAAwB,EAAE;QACvE,IAAI,CAAC;YACH,iFAAiF;YACjF,MAAM,QAAQ,GAAG,8BAA8B,CAAC,QAAQ,EAAE,GAAG,CAAC,WAAW,CAAC,CAAC;YAC3E,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;gBAC1B,OAAO,EAAE,QAAQ,EAAE,KAAK,CAAC,EAAE,EAAE,WAAW,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI;oBAC3E,QAAQ,EAAE,6BAA6B,EAAE,CAAC;YAC9C,CAAC;YACD,MAAM,UAAU,GAAG,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,GAAG,IAAI,CAAC;gBAAC,OAAO,YAAY,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC;YAAC,CAAC;YAAC,MAAM,CAAC;gBAAC,OAAO,EAAE,CAAC;YAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YACrH,MAAM,MAAM,GAAG,IAAI,GAAG,CAAC,UAAU,CAAC,KAAK,CAAC,iBAAiB,CAAC,IAAI,EAAE,CAAC,CAAC;YAClE,IAAI,MAAM,CAAC,IAAI,KAAK,CAAC,EAAE,CAAC;gBACtB,OAAO,EAAE,QAAQ,EAAE,KAAK,CAAC,EAAE,EAAE,WAAW,EAAE,MAAM,EAAE,MAAM,EAAE,KAAK;oBAC7D,KAAK,EAAE,uCAAuC,EAAE,CAAC;YACrD,CAAC;YACD,MAAM,OAAO,GAAG,KAAK,CAAC,iBAAiB,EAAE,CAAC,CAAC,CAAC,IAAI,gCAAgC,CAAC;YACjF,IAAI,WAAW,GAAG,EAAE,CAAC;YACrB,IAAI,CAAC;gBAAC,WAAW,GAAG,YAAY,CAAC,IAAI,CAAC,GAAG,CAAC,WAAW,EAAE,OAAO,CAAC,EAAE,OAAO,CAAC,CAAC;YAAC,CAAC;YAAC,MAAM,CAAC;gBAClF,8DAA8D;gBAC9D,OAAO,EAAE,QAAQ,EAAE,KAAK,CAAC,EAAE,EAAE,WAAW,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI;oBAC3E,QAAQ,EAAE,aAAa,OAAO,mBAAmB,EAAE,CAAC;YACxD,CAAC;YACD,MAAM,SAAS,GAAa,EAAE,CAAC;YAC/B,IAAI,OAAO,GAAG,CAAC,CAAC;YAChB,KAAK,MAAM,EAAE,IAAI,MAAM,EAAE,CAAC;gBACxB,IAAI,WAAW,CAAC,QAAQ,CAAC,EAAE,CAAC;oBAAE,OAAO,EAAE,CAAC;;oBAAM,SAAS,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;YACnE,CAAC;YACD,MAAM,aAAa,GAAG,CAAC,MAAM,CAAC,IAAI,GAAG,OAAO,CAAC,GAAG,MAAM,CAAC,IAAI,CAAC;YAC5D,MAAM,MAAM,GAAG,SAAS,CAAC,MAAM,KAAK,CAAC,CAAC;YACtC,OAAO;gBACL,QAAQ,EAAE,KAAK,CAAC,EAAE,EAAE,WAAW,EAAE,MAAM,EAAE,MAAM;gBAC/C,MAAM,EAAE,EAAE,MAAM,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,CAAC,IAAI,EAAE,cAAc,EAAE,aAAa,EAAE;gBAC9E,QAAQ,EAAE,MAAM;oBACd,CAAC,CAAC,YAAY,OAAO,IAAI,MAAM,CAAC,IAAI,aAAa;oBACjD,CAAC,CAAC,YAAY,OAAO,IAAI,MAAM,CAAC,IAAI,gBAAgB,SAAS,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,SAAS,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE;gBAC7H,KAAK,EAAE,MAAM,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,oBAAoB,CAAC,aAAa,GAAG,GAAG,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,SAAS,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE;aACzH,CAAC;QACJ,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,OAAO,EAAE,QAAQ,EAAE,KAAK,CAAC,EAAE,EAAE,WAAW,EAAE,MAAM,EAAE,MAAM,EAAE,KAAK;gBAC7D,KAAK,EAAE,+CAA+C,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC;QAC/G,CAAC;IACH,CAAC,CACF,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"executors_companion.d.ts","sourceRoot":"","sources":["../../../src/gate/executors/executors_companion.ts"],"names":[],"mappings":"AA4BA,wBAAgB,yBAAyB,IAAI,IAAI,CA+ChD"}
|
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* companion 一致性执行器 — 主产物 md ↔ companion(openapi.yaml/schema.sql)数量一致。
|
|
3
|
+
* 确定性偏差:契约层内部一致性。堵 md↔yaml↔sql 各说各话(如 md 39 endpoint vs yaml 40 operation,且一致地残缺)。
|
|
4
|
+
*
|
|
5
|
+
* 被谁调用:gate_engine(companion_consistency executor)
|
|
6
|
+
* 数据流:evidence_required=[API md, openapi.yaml, DB md, schema.sql] → 数量比对 → CheckResult(含 metric)
|
|
7
|
+
*/
|
|
8
|
+
import { gateExecutors } from "../gate_executors.js";
|
|
9
|
+
import { existsSync, readFileSync } from "node:fs";
|
|
10
|
+
import { join } from "node:path";
|
|
11
|
+
function countMdEndpoints(content) {
|
|
12
|
+
// 认 ### Endpoint(模板规范)+ ##/### METHOD(变体/fixture,如 ## POST /api/register)
|
|
13
|
+
const endpoint = (content.match(/^#{2,3}\s+Endpoint\b/gm) ?? []).length;
|
|
14
|
+
const method = (content.match(/^#{2,3}\s+(GET|POST|PUT|PATCH|DELETE)\b/gm) ?? []).length;
|
|
15
|
+
return Math.max(endpoint, method);
|
|
16
|
+
}
|
|
17
|
+
function countYamlOperations(content) {
|
|
18
|
+
return (content.match(/^ (get|post|put|patch|delete):/gm) ?? []).length;
|
|
19
|
+
}
|
|
20
|
+
function countSqlTables(content) {
|
|
21
|
+
return (content.match(/CREATE\s+TABLE\b/gi) ?? []).length;
|
|
22
|
+
}
|
|
23
|
+
function countDbMdTables(content) {
|
|
24
|
+
return new Set(content.match(/DD-T\d{2,}/g) ?? []).size;
|
|
25
|
+
}
|
|
26
|
+
export function registerCompanionExecutor() {
|
|
27
|
+
gateExecutors.register("companion_consistency", async (check, ctx) => {
|
|
28
|
+
try {
|
|
29
|
+
const apiMd = join(ctx.projectRoot, check.evidence_required?.[0] ?? "docs/design/02-API接口规格文档.md");
|
|
30
|
+
const yaml = join(ctx.projectRoot, check.evidence_required?.[1] ?? "docs/api/openapi.yaml");
|
|
31
|
+
const dbMd = join(ctx.projectRoot, check.evidence_required?.[2] ?? "docs/design/01-数据库设计文档.md");
|
|
32
|
+
const sql = join(ctx.projectRoot, check.evidence_required?.[3] ?? "docs/design/schema.sql");
|
|
33
|
+
const pairs = [];
|
|
34
|
+
if (existsSync(apiMd) && existsSync(yaml)) {
|
|
35
|
+
pairs.push({ name: `API md(${countMdEndpoints(readFileSync(apiMd, "utf-8"))}) vs openapi(${countYamlOperations(readFileSync(yaml, "utf-8"))})`,
|
|
36
|
+
a: countMdEndpoints(readFileSync(apiMd, "utf-8")), b: countYamlOperations(readFileSync(yaml, "utf-8")), tol: 0.3 });
|
|
37
|
+
}
|
|
38
|
+
if (existsSync(dbMd) && existsSync(sql)) {
|
|
39
|
+
pairs.push({ name: `DB md(${countDbMdTables(readFileSync(dbMd, "utf-8"))}) vs schema.sql(${countSqlTables(readFileSync(sql, "utf-8"))})`,
|
|
40
|
+
a: countDbMdTables(readFileSync(dbMd, "utf-8")), b: countSqlTables(readFileSync(sql, "utf-8")), tol: 0.1 });
|
|
41
|
+
}
|
|
42
|
+
if (pairs.length === 0) {
|
|
43
|
+
return { check_id: check.id, executed_by: "code", passed: true, skipped: true,
|
|
44
|
+
evidence: "主产物/companion 不全(scope 未涉及),跳过 companion 一致性",
|
|
45
|
+
metric: { passed: 0, total: 0, deviation_rate: 0 } };
|
|
46
|
+
}
|
|
47
|
+
const problems = [];
|
|
48
|
+
let consistent = 0;
|
|
49
|
+
for (const p of pairs) {
|
|
50
|
+
const max = Math.max(p.a, p.b);
|
|
51
|
+
const diff = max === 0 ? 0 : Math.abs(p.a - p.b) / max;
|
|
52
|
+
if (diff <= p.tol)
|
|
53
|
+
consistent++;
|
|
54
|
+
else
|
|
55
|
+
problems.push(`${p.name} 差异 ${(diff * 100).toFixed(0)}%`);
|
|
56
|
+
}
|
|
57
|
+
const deviationRate = (pairs.length - consistent) / pairs.length;
|
|
58
|
+
const passed = problems.length === 0;
|
|
59
|
+
return {
|
|
60
|
+
check_id: check.id, executed_by: "code", passed,
|
|
61
|
+
metric: { passed: consistent, total: pairs.length, deviation_rate: deviationRate },
|
|
62
|
+
evidence: passed
|
|
63
|
+
? `companion 一致:${consistent}/${pairs.length}(${pairs.map((p) => p.name).join("; ")})`
|
|
64
|
+
: `companion 不一致:${consistent}/${pairs.length};${problems.join("; ")}`,
|
|
65
|
+
error: passed ? undefined : `主产物↔companion 数量偏差(一致性偏差 ${(deviationRate * 100).toFixed(0)}%)`,
|
|
66
|
+
};
|
|
67
|
+
}
|
|
68
|
+
catch (err) {
|
|
69
|
+
return { check_id: check.id, executed_by: "code", passed: false,
|
|
70
|
+
error: `companion_consistency 执行异常(fail-closed):${err instanceof Error ? err.message : String(err)}` };
|
|
71
|
+
}
|
|
72
|
+
});
|
|
73
|
+
}
|
|
74
|
+
//# sourceMappingURL=executors_companion.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"executors_companion.js","sourceRoot":"","sources":["../../../src/gate/executors/executors_companion.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"executors_crud.d.ts","sourceRoot":"","sources":["../../../src/gate/executors/executors_crud.ts"],"names":[],"mappings":"AAwEA;8EAC8E;AAC9E,wBAAgB,oBAAoB,IAAI,IAAI,CA0C3C"}
|
|
@@ -0,0 +1,130 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* CRUD 完整性执行器 — openapi.yaml 资源型接口的操作完整性校验(确定性偏差:契约粒度)。
|
|
3
|
+
*
|
|
4
|
+
* 职责边界:
|
|
5
|
+
* - 负责:解析 openapi.yaml paths/methods,校验资源型接口(GET 列表 + POST 创建)有 PUT/PATCH(改)+ DELETE(删)
|
|
6
|
+
* - 不负责:字段/schema 完整性(FMAP/OPENAPI-LINT 管)、动作型接口(/login /calculate 不要求 CRUD)
|
|
7
|
+
*
|
|
8
|
+
* 被谁调用:gate_engine(crud_completeness executor)
|
|
9
|
+
* 调用谁:resolveCrossValidationArtifact(产物定位,复用 executors_trace)
|
|
10
|
+
*
|
|
11
|
+
* 数据流:evidence_required[0]=openapi.yaml → 解析 paths → 资源型 CRUD 完整性 → CheckResult(含 metric)
|
|
12
|
+
* 持久化:无
|
|
13
|
+
*
|
|
14
|
+
* 背景:堵 SmartCare「20 GET + 20 POST + 0 PUT/DELETE」——资源型接口只查+增、不能改删的偏差。
|
|
15
|
+
*/
|
|
16
|
+
import { gateExecutors } from "../gate_executors.js";
|
|
17
|
+
import { existsSync, readFileSync } from "node:fs";
|
|
18
|
+
import { join } from "node:path";
|
|
19
|
+
/** 解析 openapi.yaml paths 段 → Map<path, Set<method>>。
|
|
20
|
+
* 格式:`paths:` 下,` /path:`(2 空格)+ ` method:`(4 空格)。 */
|
|
21
|
+
function parseOpenapiPaths(content) {
|
|
22
|
+
const paths = new Map();
|
|
23
|
+
const lines = content.split("\n");
|
|
24
|
+
let curPath = null;
|
|
25
|
+
let inPaths = false;
|
|
26
|
+
for (const raw of lines) {
|
|
27
|
+
if (/^paths:\s*$/.test(raw)) {
|
|
28
|
+
inPaths = true;
|
|
29
|
+
curPath = null;
|
|
30
|
+
continue;
|
|
31
|
+
}
|
|
32
|
+
if (!inPaths)
|
|
33
|
+
continue;
|
|
34
|
+
const line = raw.replace(/\s+$/, "");
|
|
35
|
+
// 退出 paths 区:遇顶层键(无缩进,如 components:/servers:)
|
|
36
|
+
if (line.length > 0 && !line.startsWith(" ") && !line.startsWith("#")) {
|
|
37
|
+
if (/^(components|servers|security|tags|externalDocs|info|openapi):/.test(line)) {
|
|
38
|
+
inPaths = false;
|
|
39
|
+
continue;
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
// 路径行: /xxx:(2 空格缩进,以 / 开头)
|
|
43
|
+
const pathMatch = line.match(/^ (\/[^:]+):\s*$/);
|
|
44
|
+
if (pathMatch) {
|
|
45
|
+
curPath = pathMatch[1];
|
|
46
|
+
paths.set(curPath, new Set());
|
|
47
|
+
continue;
|
|
48
|
+
}
|
|
49
|
+
if (curPath === null)
|
|
50
|
+
continue;
|
|
51
|
+
// 方法行: get:/post:/put:/patch:/delete:(4 空格缩进)
|
|
52
|
+
const methodMatch = line.match(/^ (get|post|put|patch|delete):/);
|
|
53
|
+
if (methodMatch)
|
|
54
|
+
paths.get(curPath).add(methodMatch[1]);
|
|
55
|
+
}
|
|
56
|
+
return paths;
|
|
57
|
+
}
|
|
58
|
+
/** 校验资源型接口 CRUD 完整性。资源型 = 集合路径(无 {id})有 GET(列表)+ POST(创建)。
|
|
59
|
+
* 完整 = 该资源有 PUT/PATCH(改)+ DELETE(删)(在集合路径或 {id} 路径均可)。 */
|
|
60
|
+
function checkCrud(paths) {
|
|
61
|
+
const problems = [];
|
|
62
|
+
let resourceCount = 0;
|
|
63
|
+
let completeCount = 0;
|
|
64
|
+
for (const [col, methods] of paths) {
|
|
65
|
+
if (/\{[^}]+\}/.test(col))
|
|
66
|
+
continue; // 只看集合路径,{id} 路径单独查
|
|
67
|
+
if (!methods.has("get") || !methods.has("post"))
|
|
68
|
+
continue; // 动作型(无列表+创建)跳过
|
|
69
|
+
resourceCount++;
|
|
70
|
+
const idMethods = paths.get(col + "/{id}");
|
|
71
|
+
const hasPut = methods.has("put") || methods.has("patch") || !!idMethods?.has("put") || !!idMethods?.has("patch");
|
|
72
|
+
const hasDelete = methods.has("delete") || !!idMethods?.has("delete");
|
|
73
|
+
if (hasPut && hasDelete) {
|
|
74
|
+
completeCount++;
|
|
75
|
+
}
|
|
76
|
+
else {
|
|
77
|
+
const missing = [];
|
|
78
|
+
if (!hasPut)
|
|
79
|
+
missing.push("PUT/PATCH(改)");
|
|
80
|
+
if (!hasDelete)
|
|
81
|
+
missing.push("DELETE(删)");
|
|
82
|
+
problems.push(`${col}(GET列表+POST创建)缺 ${missing.join(" + ")}`);
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
return { resourceCount, completeCount, problems };
|
|
86
|
+
}
|
|
87
|
+
/** 注册 CRUD 完整性执行器。
|
|
88
|
+
* 配置:evidence_required[0]=openapi.yaml 相对项目根路径(默认 docs/api/openapi.yaml)。 */
|
|
89
|
+
export function registerCrudExecutor() {
|
|
90
|
+
gateExecutors.register("crud_completeness", async (check, ctx) => {
|
|
91
|
+
try {
|
|
92
|
+
const rel = check.evidence_required?.[0] ?? "docs/api/openapi.yaml";
|
|
93
|
+
const abs = join(ctx.projectRoot, rel);
|
|
94
|
+
if (!existsSync(abs)) {
|
|
95
|
+
// 无 API 产物(scope≠api)→ 跳过,不阻断
|
|
96
|
+
return {
|
|
97
|
+
check_id: check.id, executed_by: "code", passed: true, skipped: true,
|
|
98
|
+
evidence: `openapi.yaml 不存在(${rel}),无 API scope,跳过 CRUD 完整性校验`,
|
|
99
|
+
};
|
|
100
|
+
}
|
|
101
|
+
const content = readFileSync(abs, "utf-8");
|
|
102
|
+
const paths = parseOpenapiPaths(content);
|
|
103
|
+
const { resourceCount, completeCount, problems } = checkCrud(paths);
|
|
104
|
+
if (resourceCount === 0) {
|
|
105
|
+
return {
|
|
106
|
+
check_id: check.id, executed_by: "code", passed: true,
|
|
107
|
+
evidence: "无资源型接口(全动作型),跳过 CRUD 完整性",
|
|
108
|
+
metric: { passed: 0, total: 0, deviation_rate: 0 },
|
|
109
|
+
};
|
|
110
|
+
}
|
|
111
|
+
const deviationRate = (resourceCount - completeCount) / resourceCount;
|
|
112
|
+
const passed = problems.length === 0;
|
|
113
|
+
return {
|
|
114
|
+
check_id: check.id, executed_by: "code", passed,
|
|
115
|
+
metric: { passed: completeCount, total: resourceCount, deviation_rate: deviationRate },
|
|
116
|
+
evidence: passed
|
|
117
|
+
? `CRUD 完整:${completeCount}/${resourceCount} 资源型接口均有 PUT/PATCH + DELETE`
|
|
118
|
+
: `CRUD 不完整:${completeCount}/${resourceCount} 资源型齐全;缺操作 ${problems.length} 项:${problems.slice(0, 5).join(";")}${problems.length > 5 ? " ..." : ""}`,
|
|
119
|
+
error: passed ? undefined : `资源型接口缺改/删操作(契约粒度偏差 ${(deviationRate * 100).toFixed(1)}%):${problems.slice(0, 3).join(";")}`,
|
|
120
|
+
};
|
|
121
|
+
}
|
|
122
|
+
catch (err) {
|
|
123
|
+
return {
|
|
124
|
+
check_id: check.id, executed_by: "code", passed: false,
|
|
125
|
+
error: `crud_completeness 执行异常(fail-closed):${err instanceof Error ? err.message : String(err)}`,
|
|
126
|
+
};
|
|
127
|
+
}
|
|
128
|
+
});
|
|
129
|
+
}
|
|
130
|
+
//# sourceMappingURL=executors_crud.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"executors_crud.js","sourceRoot":"","sources":["../../../src/gate/executors/executors_crud.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"executors_deviation_summary.d.ts","sourceRoot":"","sources":["../../../src/gate/executors/executors_deviation_summary.ts"],"names":[],"mappings":"AAaA,wBAAgB,gCAAgC,IAAI,IAAI,CA0CvD"}
|