soloforge 1.3.0 → 1.3.2
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 +15 -2
- package/dist/adapters/claude_code/claude_md.d.ts.map +1 -1
- package/dist/adapters/claude_code/claude_md.js +4 -0
- package/dist/adapters/claude_code/claude_md.js.map +1 -1
- package/dist/adapters/claude_code/tools.d.ts +36 -9
- package/dist/adapters/claude_code/tools.d.ts.map +1 -1
- package/dist/adapters/claude_code/tools.js +828 -19
- package/dist/adapters/claude_code/tools.js.map +1 -1
- package/dist/adapters/shared/workflow_template.d.ts +26 -0
- package/dist/adapters/shared/workflow_template.d.ts.map +1 -1
- package/dist/adapters/shared/workflow_template.js +139 -40
- package/dist/adapters/shared/workflow_template.js.map +1 -1
- package/dist/bin/soloforge.d.ts.map +1 -1
- package/dist/bin/soloforge.js +220 -45
- package/dist/bin/soloforge.js.map +1 -1
- package/dist/engine/architecture_decision_workshop.d.ts +58 -0
- package/dist/engine/architecture_decision_workshop.d.ts.map +1 -0
- package/dist/engine/architecture_decision_workshop.js +118 -0
- package/dist/engine/architecture_decision_workshop.js.map +1 -0
- package/dist/engine/asset_manifest.d.ts +7 -1
- package/dist/engine/asset_manifest.d.ts.map +1 -1
- package/dist/engine/asset_manifest.js +36 -15
- package/dist/engine/asset_manifest.js.map +1 -1
- package/dist/engine/consumable_asset_registry.d.ts.map +1 -1
- package/dist/engine/consumable_asset_registry.js +90 -1
- package/dist/engine/consumable_asset_registry.js.map +1 -1
- package/dist/engine/consumption_trace_store.d.ts +8 -8
- package/dist/engine/consumption_trace_store.d.ts.map +1 -1
- package/dist/engine/consumption_trace_store.js +11 -7
- package/dist/engine/consumption_trace_store.js.map +1 -1
- package/dist/engine/decision_workshop.d.ts +160 -0
- package/dist/engine/decision_workshop.d.ts.map +1 -0
- package/dist/engine/decision_workshop.js +279 -0
- package/dist/engine/decision_workshop.js.map +1 -0
- package/dist/engine/design_artifact_pack.d.ts +44 -0
- package/dist/engine/design_artifact_pack.d.ts.map +1 -0
- package/dist/engine/design_artifact_pack.js +167 -0
- package/dist/engine/design_artifact_pack.js.map +1 -0
- package/dist/engine/dual_layer_mechanism_registry.d.ts.map +1 -1
- package/dist/engine/dual_layer_mechanism_registry.js +294 -0
- package/dist/engine/dual_layer_mechanism_registry.js.map +1 -1
- package/dist/engine/evidence_grounding_contract.d.ts +137 -0
- package/dist/engine/evidence_grounding_contract.d.ts.map +1 -0
- package/dist/engine/evidence_grounding_contract.js +410 -0
- package/dist/engine/evidence_grounding_contract.js.map +1 -0
- package/dist/engine/explicit_asset_registry.d.ts +30 -0
- package/dist/engine/explicit_asset_registry.d.ts.map +1 -0
- package/dist/engine/explicit_asset_registry.js +3508 -0
- package/dist/engine/explicit_asset_registry.js.map +1 -0
- package/dist/engine/implementation_roadmap_registry.d.ts +2 -2
- package/dist/engine/implementation_roadmap_registry.d.ts.map +1 -1
- package/dist/engine/implementation_roadmap_registry.js +163 -6
- package/dist/engine/implementation_roadmap_registry.js.map +1 -1
- package/dist/engine/instruction_contract.d.ts +8 -1
- package/dist/engine/instruction_contract.d.ts.map +1 -1
- package/dist/engine/instruction_contract.js +63 -1
- package/dist/engine/instruction_contract.js.map +1 -1
- package/dist/engine/intent_expander.d.ts.map +1 -1
- package/dist/engine/intent_expander.js +60 -2
- package/dist/engine/intent_expander.js.map +1 -1
- package/dist/engine/intent_router.d.ts +1 -1
- package/dist/engine/intent_router.d.ts.map +1 -1
- package/dist/engine/intent_router.js +2 -1
- package/dist/engine/intent_router.js.map +1 -1
- package/dist/engine/knowledge_injection_boundary.d.ts +3 -0
- package/dist/engine/knowledge_injection_boundary.d.ts.map +1 -1
- package/dist/engine/knowledge_injection_boundary.js +48 -5
- package/dist/engine/knowledge_injection_boundary.js.map +1 -1
- package/dist/engine/mechanism_contract_registry.d.ts +1 -1
- package/dist/engine/mechanism_contract_registry.d.ts.map +1 -1
- package/dist/engine/mechanism_contract_registry.js +138 -0
- package/dist/engine/mechanism_contract_registry.js.map +1 -1
- package/dist/engine/observed_consumption.d.ts +54 -0
- package/dist/engine/observed_consumption.d.ts.map +1 -0
- package/dist/engine/observed_consumption.js +377 -0
- package/dist/engine/observed_consumption.js.map +1 -0
- package/dist/engine/platform_context.d.ts.map +1 -1
- package/dist/engine/platform_context.js +6 -2
- package/dist/engine/platform_context.js.map +1 -1
- package/dist/engine/release_gate_scenario_registry.d.ts +16 -1
- package/dist/engine/release_gate_scenario_registry.d.ts.map +1 -1
- package/dist/engine/release_gate_scenario_registry.js +205 -2
- package/dist/engine/release_gate_scenario_registry.js.map +1 -1
- package/dist/engine/release_issue_scenario_registry.d.ts +64 -0
- package/dist/engine/release_issue_scenario_registry.d.ts.map +1 -0
- package/dist/engine/release_issue_scenario_registry.js +1349 -0
- package/dist/engine/release_issue_scenario_registry.js.map +1 -0
- package/dist/engine/release_readiness_gate.d.ts +8 -0
- package/dist/engine/release_readiness_gate.d.ts.map +1 -1
- package/dist/engine/release_readiness_gate.js +1144 -6
- package/dist/engine/release_readiness_gate.js.map +1 -1
- package/dist/engine/release_tool_harness.d.ts +71 -0
- package/dist/engine/release_tool_harness.d.ts.map +1 -0
- package/dist/engine/release_tool_harness.js +161 -0
- package/dist/engine/release_tool_harness.js.map +1 -0
- package/dist/engine/scaffolder.d.ts.map +1 -1
- package/dist/engine/scaffolder.js +144 -7
- package/dist/engine/scaffolder.js.map +1 -1
- package/dist/engine/standard_asset_contract.d.ts +75 -0
- package/dist/engine/standard_asset_contract.d.ts.map +1 -0
- package/dist/engine/standard_asset_contract.js +388 -0
- package/dist/engine/standard_asset_contract.js.map +1 -0
- package/dist/engine/standard_asset_coverage.d.ts +45 -0
- package/dist/engine/standard_asset_coverage.d.ts.map +1 -0
- package/dist/engine/standard_asset_coverage.js +220 -0
- package/dist/engine/standard_asset_coverage.js.map +1 -0
- package/dist/engine/task_context.d.ts +9 -2
- package/dist/engine/task_context.d.ts.map +1 -1
- package/dist/engine/task_context.js +49 -12
- package/dist/engine/task_context.js.map +1 -1
- package/dist/engine/template_asset_contract_registry.d.ts +162 -0
- package/dist/engine/template_asset_contract_registry.d.ts.map +1 -0
- package/dist/engine/template_asset_contract_registry.js +598 -0
- package/dist/engine/template_asset_contract_registry.js.map +1 -0
- package/dist/engine/template_asset_visibility.d.ts +109 -0
- package/dist/engine/template_asset_visibility.d.ts.map +1 -0
- package/dist/engine/template_asset_visibility.js +321 -0
- package/dist/engine/template_asset_visibility.js.map +1 -0
- package/dist/engine/template_init_sync.d.ts +68 -0
- package/dist/engine/template_init_sync.d.ts.map +1 -0
- package/dist/engine/template_init_sync.js +218 -0
- package/dist/engine/template_init_sync.js.map +1 -0
- package/dist/engine/template_manifest_io.d.ts +10 -0
- package/dist/engine/template_manifest_io.d.ts.map +1 -1
- package/dist/engine/template_manifest_io.js +63 -30
- package/dist/engine/template_manifest_io.js.map +1 -1
- package/dist/engine/template_mechanism_auditor.d.ts +3 -1
- package/dist/engine/template_mechanism_auditor.d.ts.map +1 -1
- package/dist/engine/template_mechanism_auditor.js +27 -24
- package/dist/engine/template_mechanism_auditor.js.map +1 -1
- package/dist/engine/tool_invocation_contract_registry.d.ts.map +1 -1
- package/dist/engine/tool_invocation_contract_registry.js +11 -1
- package/dist/engine/tool_invocation_contract_registry.js.map +1 -1
- package/dist/engine/verifier.d.ts.map +1 -1
- package/dist/engine/verifier.js +3 -40
- package/dist/engine/verifier.js.map +1 -1
- package/dist/engine/workflow_contract_registry.d.ts.map +1 -1
- package/dist/engine/workflow_contract_registry.js +4 -3
- package/dist/engine/workflow_contract_registry.js.map +1 -1
- package/dist/knowledge/index_manager.d.ts +20 -0
- package/dist/knowledge/index_manager.d.ts.map +1 -1
- package/dist/knowledge/index_manager.js +234 -3
- package/dist/knowledge/index_manager.js.map +1 -1
- package/dist/types.d.ts +47 -0
- package/dist/types.d.ts.map +1 -1
- package/package.json +5 -4
- package/templates/knowledge/acceptance_templates/API/346/216/245/345/217/243/350/247/204/346/240/274/346/226/207/346/241/243/346/250/241/347/211/210.md +74 -0
- package/templates/knowledge/acceptance_templates//346/225/260/346/215/256/345/272/223/350/256/276/350/256/241/346/226/207/346/241/243/346/250/241/347/211/210.md +59 -0
- package/templates/knowledge/acceptance_templates//346/236/266/346/236/204/350/256/276/350/256/241/346/250/241/347/211/210.md +27 -7
- package/templates/knowledge/acceptance_templates//350/256/276/350/256/241/344/270/200/350/207/264/346/200/247/351/252/214/346/224/266/346/212/245/345/221/212/346/250/241/347/211/210.md +47 -0
- package/templates/knowledge/procedures//346/236/266/346/236/204/345/206/263/347/255/226/347/240/224/350/256/250/345/267/245/344/275/234/346/265/201.md +51 -0
- package/templates/knowledge/procedures//346/236/266/346/236/204/350/256/276/350/256/241/345/267/245/344/275/234/346/265/201.md +16 -7
- package/templates/knowledge/procedures//350/256/276/350/256/241/344/272/247/347/211/251/347/224/237/346/210/220/344/270/216/345/244/215/351/252/214/345/267/245/344/275/234/346/265/201.md +45 -0
- package/templates/knowledge/rules//345/267/245/344/275/234/346/265/201/346/250/241/346/235/277/345/214/205/350/247/204/345/210/231.md +10 -0
- package/templates/knowledge/rules//346/211/251/345/261/225/347/224/237/345/221/275/345/221/250/346/234/237/350/247/204/345/210/231.md +10 -0
- package/templates/knowledge/rules//346/226/275/345/267/245/346/214/207/344/273/244/345/245/221/347/272/246/350/247/204/345/210/231.md +33 -4
- package/templates/knowledge/rules//346/236/266/346/236/204/345/206/263/347/255/226/347/240/224/350/256/250/350/247/204/345/210/231.md +49 -0
- package/templates/knowledge/rules//346/240/207/345/207/206/350/265/204/344/272/247/350/246/206/347/233/226/350/247/204/345/210/231.md +29 -0
- package/templates/knowledge/rules//346/250/241/346/235/277/350/265/204/344/272/247/345/217/257/350/247/201/346/200/247/350/247/204/345/210/231.md +27 -0
- package/templates/knowledge/rules//347/224/250/346/210/267/345/217/215/351/246/210/345/245/221/347/272/246/350/247/204/345/210/231.md +62 -1
- package/templates/knowledge/rules//350/256/276/350/256/241/344/272/247/347/211/251/345/214/205/350/247/204/345/210/231.md +55 -0
- package/templates/knowledge/rules//350/257/201/346/215/256/351/251/261/345/212/250/344/270/216/345/217/215/345/271/273/350/247/211/350/247/204/345/210/231.md +75 -0
- package/templates/knowledge/rules//350/267/250/345/271/263/345/217/260/350/267/257/345/276/204/345/256/211/345/205/250/350/247/204/345/210/231.md +10 -0
- package/templates/knowledge/rules//351/200/232/347/224/250/345/206/263/347/255/226/347/240/224/350/256/250/350/247/204/345/210/231.md +30 -0
- package/templates/knowledge/rules//351/252/214/346/224/266/346/250/241/346/235/277/350/276/223/345/207/272/345/245/221/347/272/246/350/247/204/345/210/231.md +50 -0
|
@@ -0,0 +1,167 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* 设计产物包真实复验。
|
|
3
|
+
*
|
|
4
|
+
* 本模块读取用户项目中的真实设计资产,检查权威文件存在性、
|
|
5
|
+
* API 字段级合同、SQL 显著不可执行语法和跨文档关键冲突。
|
|
6
|
+
*/
|
|
7
|
+
import fs from "node:fs";
|
|
8
|
+
import path from "node:path";
|
|
9
|
+
import { createHash } from "node:crypto";
|
|
10
|
+
import YAML from "yaml";
|
|
11
|
+
export function defaultDesignArtifactPaths() {
|
|
12
|
+
return {
|
|
13
|
+
decision_record: "docs/architecture/00-架构决策记录.md",
|
|
14
|
+
architecture_document: "docs/architecture/01-架构设计文档.md",
|
|
15
|
+
database_document: "docs/architecture/02-数据库设计文档.md",
|
|
16
|
+
api_document: "docs/architecture/03-API接口规格文档.md",
|
|
17
|
+
consistency_report: "docs/architecture/99-设计一致性验收报告.md",
|
|
18
|
+
openapi: "docs/api/openapi.yaml",
|
|
19
|
+
sql_roots: ["db/migrations", "db/schema"],
|
|
20
|
+
};
|
|
21
|
+
}
|
|
22
|
+
export function createDesignArtifactPack(taskId, paths = {}) {
|
|
23
|
+
return {
|
|
24
|
+
task_id: taskId,
|
|
25
|
+
standard_version: "design-artifact-pack/v1",
|
|
26
|
+
status: "draft",
|
|
27
|
+
paths: { ...defaultDesignArtifactPaths(), ...paths },
|
|
28
|
+
baseline_hashes: {},
|
|
29
|
+
findings: [],
|
|
30
|
+
};
|
|
31
|
+
}
|
|
32
|
+
function readText(rootDir, relativePath) {
|
|
33
|
+
const absolutePath = path.join(rootDir, relativePath);
|
|
34
|
+
return fs.existsSync(absolutePath) ? fs.readFileSync(absolutePath, "utf-8") : undefined;
|
|
35
|
+
}
|
|
36
|
+
function addMissing(findings, relativePath) {
|
|
37
|
+
findings.push({ code: "DESIGN_ARTIFACT_MISSING", severity: "hard_fail", file: relativePath, message_zh: `缺少设计产物: ${relativePath}` });
|
|
38
|
+
}
|
|
39
|
+
function collectSqlFiles(rootDir, roots) {
|
|
40
|
+
const results = [];
|
|
41
|
+
for (const relativeRoot of roots) {
|
|
42
|
+
const absoluteRoot = path.join(rootDir, relativeRoot);
|
|
43
|
+
if (!fs.existsSync(absoluteRoot))
|
|
44
|
+
continue;
|
|
45
|
+
const stack = [absoluteRoot];
|
|
46
|
+
while (stack.length > 0) {
|
|
47
|
+
const current = stack.pop();
|
|
48
|
+
for (const entry of fs.readdirSync(current, { withFileTypes: true })) {
|
|
49
|
+
const absolutePath = path.join(current, entry.name);
|
|
50
|
+
if (entry.isDirectory())
|
|
51
|
+
stack.push(absolutePath);
|
|
52
|
+
else if (entry.name.endsWith(".sql"))
|
|
53
|
+
results.push(path.relative(rootDir, absolutePath));
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
return results;
|
|
58
|
+
}
|
|
59
|
+
function verifyApiFieldContract(content, file, findings) {
|
|
60
|
+
const endpointCount = (content.match(/(?:^|\n)#{2,5}\s+.*(?:GET|POST|PUT|PATCH|DELETE)\s+\/|(?:^|\n)\s*(?:GET|POST|PUT|PATCH|DELETE)\s+\/\S+/g) ?? []).length;
|
|
61
|
+
const requestTables = (content.match(/请求(?:体|参数| Body)?.{0,20}\n\s*\|/g) ?? []).length;
|
|
62
|
+
const responseTables = (content.match(/响应(?:体|字段| Body)?.{0,20}\n\s*\|/g) ?? []).length;
|
|
63
|
+
if (endpointCount === 0) {
|
|
64
|
+
findings.push({ code: "API_ENDPOINTS_NOT_IDENTIFIED", severity: "hard_fail", file, message_zh: "API 规格未识别到 endpoint 定义,无法验证字段级契约" });
|
|
65
|
+
return;
|
|
66
|
+
}
|
|
67
|
+
if (requestTables < endpointCount || responseTables < endpointCount) {
|
|
68
|
+
findings.push({
|
|
69
|
+
code: "API_FIELD_TABLE_INCOMPLETE",
|
|
70
|
+
severity: "hard_fail",
|
|
71
|
+
file,
|
|
72
|
+
message_zh: `API 规格存在 ${endpointCount} 个 endpoint,但字段表不足(请求 ${requestTables},响应 ${responseTables});每个接口必须具备请求与响应字段说明表`,
|
|
73
|
+
});
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
function extractApiOperations(content) {
|
|
77
|
+
const matches = content.matchAll(/\b(GET|POST|PUT|PATCH|DELETE)\s+(\/api\/\S+)/gi);
|
|
78
|
+
return [...matches].map((match) => ({
|
|
79
|
+
method: match[1].toLowerCase(),
|
|
80
|
+
path: match[2].replace(/[,。),;`]+$/, ""),
|
|
81
|
+
}));
|
|
82
|
+
}
|
|
83
|
+
function verifyOpenApiCoverage(apiContent, openapiContent, file, findings) {
|
|
84
|
+
let parsed;
|
|
85
|
+
try {
|
|
86
|
+
parsed = YAML.parse(openapiContent);
|
|
87
|
+
}
|
|
88
|
+
catch {
|
|
89
|
+
findings.push({ code: "OPENAPI_PARSE_FAILED", severity: "hard_fail", file, message_zh: "OpenAPI YAML 无法解析,不得作为接口字段权威资产" });
|
|
90
|
+
return;
|
|
91
|
+
}
|
|
92
|
+
const paths = parsed?.paths ?? {};
|
|
93
|
+
const operations = extractApiOperations(apiContent);
|
|
94
|
+
if (operations.length === 0 || Object.keys(paths).length === 0) {
|
|
95
|
+
findings.push({ code: "OPENAPI_OPERATIONS_MISSING", severity: "hard_fail", file, message_zh: "API 文档或 OpenAPI 未提供可对账的 endpoint 操作" });
|
|
96
|
+
return;
|
|
97
|
+
}
|
|
98
|
+
for (const operation of operations) {
|
|
99
|
+
if (!paths[operation.path]?.[operation.method]) {
|
|
100
|
+
findings.push({
|
|
101
|
+
code: "OPENAPI_MARKDOWN_DRIFT",
|
|
102
|
+
severity: "hard_fail",
|
|
103
|
+
file,
|
|
104
|
+
message_zh: `API 文档中的 ${operation.method.toUpperCase()} ${operation.path} 未在 OpenAPI 中定义同名操作`,
|
|
105
|
+
});
|
|
106
|
+
}
|
|
107
|
+
}
|
|
108
|
+
}
|
|
109
|
+
export function verifyDesignArtifactPack(rootDir, contract) {
|
|
110
|
+
const findings = [];
|
|
111
|
+
const checkedFiles = [];
|
|
112
|
+
const hashes = {};
|
|
113
|
+
const requiredDocuments = [
|
|
114
|
+
contract.paths.decision_record,
|
|
115
|
+
contract.paths.architecture_document,
|
|
116
|
+
contract.paths.database_document,
|
|
117
|
+
contract.paths.api_document,
|
|
118
|
+
contract.paths.consistency_report,
|
|
119
|
+
contract.paths.openapi,
|
|
120
|
+
];
|
|
121
|
+
const contents = new Map();
|
|
122
|
+
for (const relativePath of requiredDocuments) {
|
|
123
|
+
const text = readText(rootDir, relativePath);
|
|
124
|
+
if (text === undefined) {
|
|
125
|
+
addMissing(findings, relativePath);
|
|
126
|
+
}
|
|
127
|
+
else {
|
|
128
|
+
contents.set(relativePath, text);
|
|
129
|
+
checkedFiles.push(relativePath);
|
|
130
|
+
hashes[relativePath] = createHash("sha256").update(text).digest("hex");
|
|
131
|
+
}
|
|
132
|
+
}
|
|
133
|
+
const apiContent = contents.get(contract.paths.api_document);
|
|
134
|
+
if (apiContent) {
|
|
135
|
+
verifyApiFieldContract(apiContent, contract.paths.api_document, findings);
|
|
136
|
+
const openapiContent = contents.get(contract.paths.openapi);
|
|
137
|
+
if (openapiContent) {
|
|
138
|
+
verifyOpenApiCoverage(apiContent, openapiContent, contract.paths.openapi, findings);
|
|
139
|
+
}
|
|
140
|
+
}
|
|
141
|
+
const dbContent = contents.get(contract.paths.database_document) ?? "";
|
|
142
|
+
const sqlFiles = collectSqlFiles(rootDir, contract.paths.sql_roots);
|
|
143
|
+
if (sqlFiles.length === 0) {
|
|
144
|
+
findings.push({ code: "SQL_AUTHORITY_MISSING", severity: "hard_fail", message_zh: "缺少可执行 SQL/migration 权威资产,数据库 Markdown 不得单独作为物理结构结论" });
|
|
145
|
+
}
|
|
146
|
+
for (const sqlFile of sqlFiles) {
|
|
147
|
+
const sql = readText(rootDir, sqlFile) ?? "";
|
|
148
|
+
checkedFiles.push(sqlFile);
|
|
149
|
+
hashes[sqlFile] = createHash("sha256").update(sql).digest("hex");
|
|
150
|
+
if (/CONSTRAINT\s+\S+\s+UNIQUE\s*\([^)]*\)\s+WHERE\b/i.test(sql)) {
|
|
151
|
+
findings.push({ code: "POSTGRES_PARTIAL_UNIQUE_INVALID", severity: "hard_fail", file: sqlFile, message_zh: "检测到 PostgreSQL 不支持的 CONSTRAINT UNIQUE ... WHERE 语法,应使用部分唯一索引并重新真实验证" });
|
|
152
|
+
}
|
|
153
|
+
}
|
|
154
|
+
if (/PostgreSQL/i.test(dbContent) && /CONSTRAINT\s+\S+\s+UNIQUE\s*\([^)]*\)\s+WHERE\b/i.test(dbContent)) {
|
|
155
|
+
findings.push({ code: "POSTGRES_PARTIAL_UNIQUE_INVALID", severity: "hard_fail", file: contract.paths.database_document, message_zh: "数据库设计文档包含 PostgreSQL 不可执行的条件唯一约束语法" });
|
|
156
|
+
}
|
|
157
|
+
const architectureContent = contents.get(contract.paths.architecture_document) ?? "";
|
|
158
|
+
if (/"code"\s*:\s*200/.test(architectureContent) && /"code"\s*:\s*0/.test(apiContent ?? "")) {
|
|
159
|
+
findings.push({ code: "CROSS_DOC_RESPONSE_CODE_CONFLICT", severity: "hard_fail", message_zh: "架构文档与 API 规格的统一响应业务码定义冲突" });
|
|
160
|
+
}
|
|
161
|
+
if (/\balert\b|告警/i.test(apiContent ?? "") && !/\balert\b|告警/i.test(dbContent)) {
|
|
162
|
+
findings.push({ code: "CROSS_DOC_ENTITY_MISSING", severity: "hard_fail", message_zh: "API 规格引用告警实体,但数据库设计未定义对应实体或映射" });
|
|
163
|
+
}
|
|
164
|
+
const passed = findings.every((finding) => finding.severity !== "hard_fail");
|
|
165
|
+
return { passed, status: passed ? "implementation_ready" : "verification_failed", findings, checked_files: checkedFiles, hashes };
|
|
166
|
+
}
|
|
167
|
+
//# sourceMappingURL=design_artifact_pack.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"design_artifact_pack.js","sourceRoot":"","sources":["../../src/engine/design_artifact_pack.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"dual_layer_mechanism_registry.d.ts","sourceRoot":"","sources":["../../src/engine/dual_layer_mechanism_registry.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAIH,OAAO,KAAK,EACV,iBAAiB,EAEjB,wBAAwB,EACxB,0BAA0B,EAE3B,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"dual_layer_mechanism_registry.d.ts","sourceRoot":"","sources":["../../src/engine/dual_layer_mechanism_registry.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAIH,OAAO,KAAK,EACV,iBAAiB,EAEjB,wBAAwB,EACxB,0BAA0B,EAE3B,MAAM,aAAa,CAAC;AAqxDrB,eAAO,MAAM,iBAAiB,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAOpD,CAAC;AAEF,4BAA4B;AAC5B,wBAAgB,kBAAkB,CAAC,EAAE,EAAE,MAAM,GAAG,MAAM,CAErD;AAED,qBAAqB;AACrB,wBAAgB,2BAA2B,IAAI,GAAG,CAAC,MAAM,CAAC,CAEzD;AAID;;;GAGG;AACH,wBAAgB,sBAAsB,IAAI,iBAAiB,EAAE,CAE5D;AAED;;;;GAIG;AACH,wBAAgB,yBAAyB,CAAC,EAAE,EAAE,MAAM,GAAG,iBAAiB,GAAG,SAAS,CAEnF;AAED;;;;GAIG;AACH,wBAAgB,uBAAuB,CAAC,QAAQ,EAAE,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG,iBAAiB,EAAE,CAEhG;AAED;;;;GAIG;AACH,wBAAgB,qBAAqB,CAAC,MAAM,EAAE,wBAAwB,GAAG,iBAAiB,EAAE,CAE3F;AAID,MAAM,WAAW,qBAAqB;IACpC,YAAY,EAAE,MAAM,CAAC;IACrB,kBAAkB,EAAE,OAAO,CAAC;IAC5B,cAAc,EAAE,OAAO,CAAC;IACxB,YAAY,EAAE,OAAO,CAAC;IACtB,SAAS,EAAE,OAAO,CAAC;IACnB,cAAc,EAAE,OAAO,CAAC;IACxB,WAAW,EAAE,OAAO,CAAC;IACrB,OAAO,EAAE,MAAM,EAAE,CAAC;CACnB;AAED;;;;;GAKG;AACH,wBAAgB,0BAA0B,CAAC,GAAG,EAAE,iBAAiB,GAAG,qBAAqB,CA4BxF;AAYD;;;;;;GAMG;AACH,wBAAgB,0BAA0B,CACxC,IAAI,GAAE,iBAAiB,EAAgD,EACvE,OAAO,GAAE,MAAsB,EAC/B,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GACjC,0BAA0B,EAAE,CA8O9B"}
|
|
@@ -986,6 +986,244 @@ const MECHANISM_CONTRACTS = [
|
|
|
986
986
|
},
|
|
987
987
|
status: "dual_layer_enforced",
|
|
988
988
|
},
|
|
989
|
+
// ── 发布问题: 通用决策研讨机制(问题六十一) ──
|
|
990
|
+
// 架构决策研讨作为内置子包保留,mc-architecture-decision-workshop 不代表整个问题六十一
|
|
991
|
+
{
|
|
992
|
+
mechanism_id: "mc-decision-workshop",
|
|
993
|
+
mechanism_name: "通用决策研讨机制",
|
|
994
|
+
owner_issue_id: "问题六十一",
|
|
995
|
+
priority: "P0",
|
|
996
|
+
template_layer: {
|
|
997
|
+
required: true,
|
|
998
|
+
assets: [
|
|
999
|
+
{ path: "templates/knowledge/rules/通用决策研讨规则.md", asset_kind: "knowledge_rule", consumption_mode: "required" },
|
|
1000
|
+
],
|
|
1001
|
+
injected_routes: ["multi_stage_plan", "single_artifact"],
|
|
1002
|
+
injected_workflows: ["architecture_design", "technology_selection", "data_migration", "security_policy", "deployment", "refactor"],
|
|
1003
|
+
target_hosts: ["claude_code"],
|
|
1004
|
+
language_policy: "zh_first",
|
|
1005
|
+
},
|
|
1006
|
+
enforcement_layer: {
|
|
1007
|
+
required: true,
|
|
1008
|
+
enforcers: ["src/engine/decision_workshop.ts", "src/adapters/claude_code/tools.ts"],
|
|
1009
|
+
registries: ["mechanism_contract_registry"],
|
|
1010
|
+
entrypoints: ["requiresDecisionWorkshop", "createDecisionWorkshop", "evaluateDecisionWorkshop", "applyDecisionWorkshopGate"],
|
|
1011
|
+
state_effects: ["decision_workshop → allow/block execution"],
|
|
1012
|
+
hard_fail_conditions: ["必须域未确认", "现有系统证据缺失", "用户确认引用缺失"],
|
|
1013
|
+
degradation_behavior: "返回待讨论域和待确认清单",
|
|
1014
|
+
},
|
|
1015
|
+
evidence_layer: {
|
|
1016
|
+
outputs: ["DecisionWorkshopContract", "DecisionWorkshopGateResult"],
|
|
1017
|
+
reports: ["DecisionRecord"],
|
|
1018
|
+
diagnostic_codes: ["SF-DECISION-WORKSHOP-REQUIRED"],
|
|
1019
|
+
task_context_facts: ["decision_workshop"],
|
|
1020
|
+
},
|
|
1021
|
+
verification_layer: {
|
|
1022
|
+
tests: ["tests/engine/decision_workshop.test.ts"],
|
|
1023
|
+
runtime_checks: ["all_required_domains_confirmed"],
|
|
1024
|
+
regression_cases: ["tech_selection_blocks_without_confirmation", "low_risk_skips_workshop"],
|
|
1025
|
+
drift_checks: ["workshop_matches_task_intent"],
|
|
1026
|
+
},
|
|
1027
|
+
status: "dual_layer_enforced",
|
|
1028
|
+
},
|
|
1029
|
+
// ── 发布问题: 架构决策研讨与确认门(问题六十一内置子包) ──
|
|
1030
|
+
{
|
|
1031
|
+
mechanism_id: "mc-architecture-decision-workshop",
|
|
1032
|
+
mechanism_name: "架构决策研讨与确认门",
|
|
1033
|
+
owner_issue_id: "问题六十一",
|
|
1034
|
+
priority: "P0",
|
|
1035
|
+
template_layer: {
|
|
1036
|
+
required: true,
|
|
1037
|
+
assets: [
|
|
1038
|
+
{ path: "templates/knowledge/rules/架构决策研讨规则.md", asset_kind: "knowledge_rule", consumption_mode: "required" },
|
|
1039
|
+
{ path: "templates/knowledge/procedures/架构决策研讨工作流.md", asset_kind: "pipeline_procedure", consumption_mode: "required" },
|
|
1040
|
+
],
|
|
1041
|
+
injected_routes: ["multi_stage_plan"],
|
|
1042
|
+
injected_workflows: ["architecture_design"],
|
|
1043
|
+
target_hosts: ["claude_code"],
|
|
1044
|
+
language_policy: "zh_first",
|
|
1045
|
+
},
|
|
1046
|
+
enforcement_layer: {
|
|
1047
|
+
required: true,
|
|
1048
|
+
enforcers: ["src/engine/architecture_decision_workshop.ts", "src/adapters/claude_code/tools.ts"],
|
|
1049
|
+
registries: ["mechanism_contract_registry"],
|
|
1050
|
+
entrypoints: ["evaluateArchitectureDecisionWorkshop", "checkArchitectureDecisionWorkshopGate"],
|
|
1051
|
+
state_effects: ["architecture_decision_workshop → allow/block formal design generation"],
|
|
1052
|
+
hard_fail_conditions: ["六域决策未确认", "现有系统证据缺失", "输出范围未确认"],
|
|
1053
|
+
degradation_behavior: "返回待讨论域和待确认清单",
|
|
1054
|
+
},
|
|
1055
|
+
evidence_layer: {
|
|
1056
|
+
outputs: ["ArchitectureDecisionWorkshopContract", "ArchitectureWorkshopGateResult"],
|
|
1057
|
+
reports: ["ArchitectureDecisionRecord"],
|
|
1058
|
+
diagnostic_codes: ["SF-ARCH-WORKSHOP-REQUIRED"],
|
|
1059
|
+
task_context_facts: ["architecture_decision_workshop"],
|
|
1060
|
+
},
|
|
1061
|
+
verification_layer: {
|
|
1062
|
+
tests: ["tests/engine/architecture_decision_workshop.test.ts", "tests/adapters/architecture_design_workshop_mainpath.test.ts"],
|
|
1063
|
+
runtime_checks: ["six_domains_confirmed"],
|
|
1064
|
+
regression_cases: ["missing_confirmation_blocks_design", "low_risk_skips_workshop"],
|
|
1065
|
+
drift_checks: ["workshop_matches_architecture_output"],
|
|
1066
|
+
},
|
|
1067
|
+
status: "dual_layer_enforced",
|
|
1068
|
+
},
|
|
1069
|
+
// ── 发布问题: 标准资产覆盖机制(问题六十二) ──
|
|
1070
|
+
// mc-design-artifact-pack 仅作为首批 P0 子机制保留
|
|
1071
|
+
{
|
|
1072
|
+
mechanism_id: "mc-standard-asset-coverage",
|
|
1073
|
+
mechanism_name: "标准资产覆盖审计",
|
|
1074
|
+
owner_issue_id: "问题六十二",
|
|
1075
|
+
priority: "P0",
|
|
1076
|
+
template_layer: {
|
|
1077
|
+
required: true,
|
|
1078
|
+
assets: [
|
|
1079
|
+
{ path: "templates/knowledge/rules/标准资产覆盖规则.md", asset_kind: "knowledge_rule", consumption_mode: "required" },
|
|
1080
|
+
],
|
|
1081
|
+
injected_routes: ["validate", "multi_stage_plan"],
|
|
1082
|
+
injected_workflows: ["all"],
|
|
1083
|
+
target_hosts: ["claude_code"],
|
|
1084
|
+
language_policy: "zh_first",
|
|
1085
|
+
},
|
|
1086
|
+
enforcement_layer: {
|
|
1087
|
+
required: true,
|
|
1088
|
+
enforcers: ["src/engine/standard_asset_coverage.ts"],
|
|
1089
|
+
registries: ["mechanism_contract_registry", "consumable_asset_registry"],
|
|
1090
|
+
entrypoints: ["auditStandardAssetCoverage"],
|
|
1091
|
+
state_effects: ["coverage_report → 覆盖完整性"],
|
|
1092
|
+
hard_fail_conditions: ["P0 资产缺少标准承载路径", "P0 资产未注册", "P0 资产缺少 owner"],
|
|
1093
|
+
degradation_behavior: "覆盖缺口时阻断发布",
|
|
1094
|
+
},
|
|
1095
|
+
evidence_layer: {
|
|
1096
|
+
outputs: ["StandardAssetCoverageReport", "StandardAssetCoverageEntry"],
|
|
1097
|
+
reports: [],
|
|
1098
|
+
diagnostic_codes: ["SF-COVERAGE-0001"],
|
|
1099
|
+
task_context_facts: ["standard_asset_coverage"],
|
|
1100
|
+
},
|
|
1101
|
+
verification_layer: {
|
|
1102
|
+
tests: ["tests/engine/standard_asset_coverage.test.ts"],
|
|
1103
|
+
runtime_checks: ["all_p0_types_covered"],
|
|
1104
|
+
regression_cases: ["missing_bearer_blocks", "unregistered_asset_blocks"],
|
|
1105
|
+
drift_checks: ["coverage_matches_registry"],
|
|
1106
|
+
},
|
|
1107
|
+
status: "dual_layer_enforced",
|
|
1108
|
+
},
|
|
1109
|
+
// ── 发布问题: 设计产物包与存量复验门(问题六十二子机制) ──
|
|
1110
|
+
{
|
|
1111
|
+
mechanism_id: "mc-design-artifact-pack",
|
|
1112
|
+
mechanism_name: "设计产物包与存量复验门",
|
|
1113
|
+
owner_issue_id: "问题六十二",
|
|
1114
|
+
priority: "P0",
|
|
1115
|
+
template_layer: {
|
|
1116
|
+
required: true,
|
|
1117
|
+
assets: [
|
|
1118
|
+
{ path: "templates/knowledge/rules/设计产物包规则.md", asset_kind: "knowledge_rule", consumption_mode: "required" },
|
|
1119
|
+
{ path: "templates/knowledge/procedures/设计产物生成与复验工作流.md", asset_kind: "pipeline_procedure", consumption_mode: "required" },
|
|
1120
|
+
],
|
|
1121
|
+
injected_routes: ["multi_stage_plan", "single_artifact"],
|
|
1122
|
+
injected_workflows: ["architecture_design"],
|
|
1123
|
+
target_hosts: ["claude_code"],
|
|
1124
|
+
language_policy: "zh_first",
|
|
1125
|
+
},
|
|
1126
|
+
enforcement_layer: {
|
|
1127
|
+
required: true,
|
|
1128
|
+
enforcers: ["src/engine/design_artifact_pack.ts", "src/adapters/claude_code/tools.ts"],
|
|
1129
|
+
registries: ["mechanism_contract_registry"],
|
|
1130
|
+
entrypoints: ["verifyDesignArtifactPack"],
|
|
1131
|
+
state_effects: ["design_artifact_pack → implementation_ready/block delivery"],
|
|
1132
|
+
hard_fail_conditions: ["字段级 API 缺失", "SQL 无效", "跨产物冲突", "旧文档未复验"],
|
|
1133
|
+
degradation_behavior: "复验失败时阻断编码与交付并请求修复",
|
|
1134
|
+
},
|
|
1135
|
+
evidence_layer: {
|
|
1136
|
+
outputs: ["DesignArtifactPackContract", "DesignArtifactVerificationResult"],
|
|
1137
|
+
reports: ["DesignConsistencyReport"],
|
|
1138
|
+
diagnostic_codes: ["SF-DESIGN-PACK-VERIFY-FAILED", "SF-DESIGN-PACK-NOT-READY"],
|
|
1139
|
+
task_context_facts: ["design_artifact_pack"],
|
|
1140
|
+
},
|
|
1141
|
+
verification_layer: {
|
|
1142
|
+
tests: ["tests/engine/design_artifact_pack.test.ts", "tests/adapters/architecture_design_workshop_mainpath.test.ts"],
|
|
1143
|
+
runtime_checks: ["real_design_files_verified"],
|
|
1144
|
+
regression_cases: ["api_fields_required", "postgres_invalid_sql_blocks", "cross_document_conflict_blocks"],
|
|
1145
|
+
drift_checks: ["openapi_sql_markdown_consistency"],
|
|
1146
|
+
},
|
|
1147
|
+
status: "dual_layer_enforced",
|
|
1148
|
+
},
|
|
1149
|
+
// ── 发布问题: 标准资产契约化 ──
|
|
1150
|
+
{
|
|
1151
|
+
mechanism_id: "mc-standard-asset-contract",
|
|
1152
|
+
mechanism_name: "标准资产契约化",
|
|
1153
|
+
owner_issue_id: "问题六十三",
|
|
1154
|
+
priority: "P0",
|
|
1155
|
+
template_layer: {
|
|
1156
|
+
required: true,
|
|
1157
|
+
assets: [
|
|
1158
|
+
{ path: "templates/knowledge/rules/验收模板输出契约规则.md", asset_kind: "knowledge_rule", consumption_mode: "required" },
|
|
1159
|
+
],
|
|
1160
|
+
injected_routes: ["multi_stage_plan", "single_artifact"],
|
|
1161
|
+
injected_workflows: ["architecture_design"],
|
|
1162
|
+
target_hosts: ["claude_code"],
|
|
1163
|
+
language_policy: "zh_first",
|
|
1164
|
+
},
|
|
1165
|
+
enforcement_layer: {
|
|
1166
|
+
required: true,
|
|
1167
|
+
enforcers: ["src/engine/standard_asset_contract.ts"],
|
|
1168
|
+
registries: ["mechanism_contract_registry"],
|
|
1169
|
+
entrypoints: ["verifyStandardAssetContract"],
|
|
1170
|
+
state_effects: ["template_verified → 允许下游消费"],
|
|
1171
|
+
hard_fail_conditions: ["P0 模板缺契约字段", "验收失败未进入 repair_reverify"],
|
|
1172
|
+
degradation_behavior: "验收失败时阻断编码与交付并请求修复",
|
|
1173
|
+
},
|
|
1174
|
+
evidence_layer: {
|
|
1175
|
+
outputs: ["StandardAssetContract", "ContractVerificationResult"],
|
|
1176
|
+
reports: [],
|
|
1177
|
+
diagnostic_codes: ["SF-CONTRACT-0001", "SF-CONTRACT-0002", "SF-CONTRACT-0003"],
|
|
1178
|
+
task_context_facts: ["template_verified"],
|
|
1179
|
+
},
|
|
1180
|
+
verification_layer: {
|
|
1181
|
+
tests: ["tests/engine/standard_asset_contract.test.ts"],
|
|
1182
|
+
runtime_checks: ["contract_fields_complete"],
|
|
1183
|
+
regression_cases: ["api_field_table_missing_blocks", "draft_not_used_for_implementation"],
|
|
1184
|
+
drift_checks: ["contract_matches_template_content"],
|
|
1185
|
+
},
|
|
1186
|
+
status: "dual_layer_enforced",
|
|
1187
|
+
},
|
|
1188
|
+
// ── 发布问题: 模板资产可见性与注入边界 ──
|
|
1189
|
+
{
|
|
1190
|
+
mechanism_id: "mc-template-asset-visibility",
|
|
1191
|
+
mechanism_name: "模板资产可见性与注入边界",
|
|
1192
|
+
owner_issue_id: "问题六十四",
|
|
1193
|
+
priority: "P0",
|
|
1194
|
+
template_layer: {
|
|
1195
|
+
required: true,
|
|
1196
|
+
assets: [
|
|
1197
|
+
{ path: "templates/knowledge/rules/模板资产可见性规则.md", asset_kind: "knowledge_rule", consumption_mode: "required" },
|
|
1198
|
+
],
|
|
1199
|
+
injected_routes: ["init", "sync-templates", "validate", "multi_stage_plan"],
|
|
1200
|
+
injected_workflows: ["all"],
|
|
1201
|
+
target_hosts: ["claude_code", "codex", "trae"],
|
|
1202
|
+
language_policy: "zh_first",
|
|
1203
|
+
},
|
|
1204
|
+
enforcement_layer: {
|
|
1205
|
+
required: true,
|
|
1206
|
+
enforcers: ["src/engine/template_asset_visibility.ts"],
|
|
1207
|
+
registries: ["mechanism_contract_registry", "consumable_asset_registry"],
|
|
1208
|
+
entrypoints: ["filterAssetsForUserProject", "checkAssetVisibilityGate"],
|
|
1209
|
+
state_effects: ["internal 资产不同步到用户项目", "scaffold 不进入知识索引"],
|
|
1210
|
+
hard_fail_conditions: ["内部资产泄漏到用户项目", "可见性冲突未解决"],
|
|
1211
|
+
degradation_behavior: "冲突资产隔离并请求用户确认",
|
|
1212
|
+
},
|
|
1213
|
+
evidence_layer: {
|
|
1214
|
+
outputs: ["AssetVisibilityReport", "VisibilityConflictResult"],
|
|
1215
|
+
reports: [],
|
|
1216
|
+
diagnostic_codes: ["SF-ASSET-0001", "SF-ASSET-0002", "SF-ASSET-0003"],
|
|
1217
|
+
task_context_facts: ["asset_visibility"],
|
|
1218
|
+
},
|
|
1219
|
+
verification_layer: {
|
|
1220
|
+
tests: ["tests/engine/template_asset_visibility.test.ts"],
|
|
1221
|
+
runtime_checks: ["all_assets_have_visibility_metadata"],
|
|
1222
|
+
regression_cases: ["internal_not_synced", "scaffold_not_indexed", "fallback_respects_gate"],
|
|
1223
|
+
drift_checks: ["visibility_field_matches_content"],
|
|
1224
|
+
},
|
|
1225
|
+
status: "dual_layer_enforced",
|
|
1226
|
+
},
|
|
989
1227
|
// ── 20. 现有系统分析 ──
|
|
990
1228
|
{
|
|
991
1229
|
mechanism_id: "mc-existing-system-analysis",
|
|
@@ -1495,6 +1733,45 @@ const MECHANISM_CONTRACTS = [
|
|
|
1495
1733
|
},
|
|
1496
1734
|
status: "dual_layer_enforced",
|
|
1497
1735
|
},
|
|
1736
|
+
// ── 37. 证据驱动与反幻觉契约 ──
|
|
1737
|
+
{
|
|
1738
|
+
mechanism_id: "mc-evidence-grounding",
|
|
1739
|
+
mechanism_name: "证据驱动与反幻觉契约",
|
|
1740
|
+
owner_issue_id: "问题六十",
|
|
1741
|
+
priority: "P0",
|
|
1742
|
+
template_layer: {
|
|
1743
|
+
required: true,
|
|
1744
|
+
assets: [
|
|
1745
|
+
{ path: "templates/knowledge/rules/证据驱动与反幻觉规则.md", asset_kind: "knowledge_rule", consumption_mode: "required" },
|
|
1746
|
+
],
|
|
1747
|
+
injected_routes: ["code_execution", "multi_stage_plan"],
|
|
1748
|
+
injected_workflows: ["sf_expand", "sf_verify", "sf_deliver"],
|
|
1749
|
+
target_hosts: ["claude_code"],
|
|
1750
|
+
language_policy: "zh_first",
|
|
1751
|
+
},
|
|
1752
|
+
enforcement_layer: {
|
|
1753
|
+
required: true,
|
|
1754
|
+
enforcers: ["src/engine/evidence_grounding_contract.ts", "src/engine/instruction_contract.ts"],
|
|
1755
|
+
registries: ["dual_layer_mechanism_registry", "mechanism_contract_registry", "consumable_asset_registry"],
|
|
1756
|
+
entrypoints: ["createEvidenceGroundingSystem", "assessTaskRisk"],
|
|
1757
|
+
state_effects: ["evidence_matrix", "unsupported_claims", "conflict_resolutions"],
|
|
1758
|
+
hard_fail_conditions: ["无证据声称项目事实", "generated_inference单独支撑事实", "forbidden evidence被注入", "tests/scenario/gate自证"],
|
|
1759
|
+
degradation_behavior: "降级为 advisory,标注为通用建议,不阻断低风险任务",
|
|
1760
|
+
},
|
|
1761
|
+
evidence_layer: {
|
|
1762
|
+
outputs: ["EvidenceMatrix", "EvidenceGateResult"],
|
|
1763
|
+
reports: ["evidence_advisory", "unsupported_claims"],
|
|
1764
|
+
diagnostic_codes: ["SF-EVIDENCE-6000", "SF-EVIDENCE-6001", "SF-EVIDENCE-6002"],
|
|
1765
|
+
task_context_facts: ["evidence_matrix", "unsupported_claims", "conflict_resolutions"],
|
|
1766
|
+
},
|
|
1767
|
+
verification_layer: {
|
|
1768
|
+
tests: ["tests/engine/evidence_grounding_contract.test.ts"],
|
|
1769
|
+
runtime_checks: ["validate-release 证据驱动检查"],
|
|
1770
|
+
regression_cases: ["无证据声称项目事实 → blocked", "generated_inference 单独支撑 → blocked", "validation_plan 冒充结果 → blocked"],
|
|
1771
|
+
drift_checks: ["adapter prompt 包含证据驱动规则"],
|
|
1772
|
+
},
|
|
1773
|
+
status: "dual_layer_enforced",
|
|
1774
|
+
},
|
|
1498
1775
|
];
|
|
1499
1776
|
// ── 已废弃机制 ID 别名映射 ──
|
|
1500
1777
|
// 旧 ID → 正式 ID。旧 ID 在 MC 中标记为 deprecated,模板/知识资产必须指向正式 ID。
|
|
@@ -1504,6 +1781,7 @@ export const MECHANISM_ALIASES = {
|
|
|
1504
1781
|
"mc-workspace-resumer": "mc-task-context-lifecycle",
|
|
1505
1782
|
"mc-delivery": "mc-delivery-gate",
|
|
1506
1783
|
"mc-metric-contract": "mc-metric-governance",
|
|
1784
|
+
"evidence-grounding": "mc-evidence-grounding",
|
|
1507
1785
|
};
|
|
1508
1786
|
/** 将机制 ID 解析为正式 ID(处理别名) */
|
|
1509
1787
|
export function resolveMechanismId(id) {
|
|
@@ -1605,6 +1883,22 @@ export function validateMechanismLayerMaps(maps = MECHANISM_CONTRACTS.map(contra
|
|
|
1605
1883
|
const knownMechanismIds = new Set(listMechanismContracts().map((c) => c.id));
|
|
1606
1884
|
const knownCapabilityIds = new Set(getAllCapabilities().map((c) => c.id));
|
|
1607
1885
|
for (const m of maps) {
|
|
1886
|
+
// P0/P1 实验性机制必须被标记为未达 dual_layer_enforced
|
|
1887
|
+
if (m.status === "experimental_dual_layer" && (m.priority === "P0" || m.priority === "P1")) {
|
|
1888
|
+
findings.push({
|
|
1889
|
+
severity: "hard_fail",
|
|
1890
|
+
mechanism_id: m.mechanism_id,
|
|
1891
|
+
finding_type: "p0_not_dual_layer",
|
|
1892
|
+
message: `P0/P1 机制 ${m.mechanism_id} 必须为 dual_layer_enforced,当前: ${m.status}`,
|
|
1893
|
+
});
|
|
1894
|
+
seenIds.add(m.mechanism_id);
|
|
1895
|
+
continue;
|
|
1896
|
+
}
|
|
1897
|
+
// 非 P0/P1 实验性机制跳过深度验证
|
|
1898
|
+
if (m.status === "experimental_dual_layer") {
|
|
1899
|
+
seenIds.add(m.mechanism_id);
|
|
1900
|
+
continue;
|
|
1901
|
+
}
|
|
1608
1902
|
// 重复 ID
|
|
1609
1903
|
if (seenIds.has(m.mechanism_id)) {
|
|
1610
1904
|
findings.push({
|