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.
Files changed (165) hide show
  1. package/README.md +15 -2
  2. package/dist/adapters/claude_code/claude_md.d.ts.map +1 -1
  3. package/dist/adapters/claude_code/claude_md.js +4 -0
  4. package/dist/adapters/claude_code/claude_md.js.map +1 -1
  5. package/dist/adapters/claude_code/tools.d.ts +36 -9
  6. package/dist/adapters/claude_code/tools.d.ts.map +1 -1
  7. package/dist/adapters/claude_code/tools.js +828 -19
  8. package/dist/adapters/claude_code/tools.js.map +1 -1
  9. package/dist/adapters/shared/workflow_template.d.ts +26 -0
  10. package/dist/adapters/shared/workflow_template.d.ts.map +1 -1
  11. package/dist/adapters/shared/workflow_template.js +139 -40
  12. package/dist/adapters/shared/workflow_template.js.map +1 -1
  13. package/dist/bin/soloforge.d.ts.map +1 -1
  14. package/dist/bin/soloforge.js +220 -45
  15. package/dist/bin/soloforge.js.map +1 -1
  16. package/dist/engine/architecture_decision_workshop.d.ts +58 -0
  17. package/dist/engine/architecture_decision_workshop.d.ts.map +1 -0
  18. package/dist/engine/architecture_decision_workshop.js +118 -0
  19. package/dist/engine/architecture_decision_workshop.js.map +1 -0
  20. package/dist/engine/asset_manifest.d.ts +7 -1
  21. package/dist/engine/asset_manifest.d.ts.map +1 -1
  22. package/dist/engine/asset_manifest.js +36 -15
  23. package/dist/engine/asset_manifest.js.map +1 -1
  24. package/dist/engine/consumable_asset_registry.d.ts.map +1 -1
  25. package/dist/engine/consumable_asset_registry.js +90 -1
  26. package/dist/engine/consumable_asset_registry.js.map +1 -1
  27. package/dist/engine/consumption_trace_store.d.ts +8 -8
  28. package/dist/engine/consumption_trace_store.d.ts.map +1 -1
  29. package/dist/engine/consumption_trace_store.js +11 -7
  30. package/dist/engine/consumption_trace_store.js.map +1 -1
  31. package/dist/engine/decision_workshop.d.ts +160 -0
  32. package/dist/engine/decision_workshop.d.ts.map +1 -0
  33. package/dist/engine/decision_workshop.js +279 -0
  34. package/dist/engine/decision_workshop.js.map +1 -0
  35. package/dist/engine/design_artifact_pack.d.ts +44 -0
  36. package/dist/engine/design_artifact_pack.d.ts.map +1 -0
  37. package/dist/engine/design_artifact_pack.js +167 -0
  38. package/dist/engine/design_artifact_pack.js.map +1 -0
  39. package/dist/engine/dual_layer_mechanism_registry.d.ts.map +1 -1
  40. package/dist/engine/dual_layer_mechanism_registry.js +294 -0
  41. package/dist/engine/dual_layer_mechanism_registry.js.map +1 -1
  42. package/dist/engine/evidence_grounding_contract.d.ts +137 -0
  43. package/dist/engine/evidence_grounding_contract.d.ts.map +1 -0
  44. package/dist/engine/evidence_grounding_contract.js +410 -0
  45. package/dist/engine/evidence_grounding_contract.js.map +1 -0
  46. package/dist/engine/explicit_asset_registry.d.ts +30 -0
  47. package/dist/engine/explicit_asset_registry.d.ts.map +1 -0
  48. package/dist/engine/explicit_asset_registry.js +3508 -0
  49. package/dist/engine/explicit_asset_registry.js.map +1 -0
  50. package/dist/engine/implementation_roadmap_registry.d.ts +2 -2
  51. package/dist/engine/implementation_roadmap_registry.d.ts.map +1 -1
  52. package/dist/engine/implementation_roadmap_registry.js +163 -6
  53. package/dist/engine/implementation_roadmap_registry.js.map +1 -1
  54. package/dist/engine/instruction_contract.d.ts +8 -1
  55. package/dist/engine/instruction_contract.d.ts.map +1 -1
  56. package/dist/engine/instruction_contract.js +63 -1
  57. package/dist/engine/instruction_contract.js.map +1 -1
  58. package/dist/engine/intent_expander.d.ts.map +1 -1
  59. package/dist/engine/intent_expander.js +60 -2
  60. package/dist/engine/intent_expander.js.map +1 -1
  61. package/dist/engine/intent_router.d.ts +1 -1
  62. package/dist/engine/intent_router.d.ts.map +1 -1
  63. package/dist/engine/intent_router.js +2 -1
  64. package/dist/engine/intent_router.js.map +1 -1
  65. package/dist/engine/knowledge_injection_boundary.d.ts +3 -0
  66. package/dist/engine/knowledge_injection_boundary.d.ts.map +1 -1
  67. package/dist/engine/knowledge_injection_boundary.js +48 -5
  68. package/dist/engine/knowledge_injection_boundary.js.map +1 -1
  69. package/dist/engine/mechanism_contract_registry.d.ts +1 -1
  70. package/dist/engine/mechanism_contract_registry.d.ts.map +1 -1
  71. package/dist/engine/mechanism_contract_registry.js +138 -0
  72. package/dist/engine/mechanism_contract_registry.js.map +1 -1
  73. package/dist/engine/observed_consumption.d.ts +54 -0
  74. package/dist/engine/observed_consumption.d.ts.map +1 -0
  75. package/dist/engine/observed_consumption.js +377 -0
  76. package/dist/engine/observed_consumption.js.map +1 -0
  77. package/dist/engine/platform_context.d.ts.map +1 -1
  78. package/dist/engine/platform_context.js +6 -2
  79. package/dist/engine/platform_context.js.map +1 -1
  80. package/dist/engine/release_gate_scenario_registry.d.ts +16 -1
  81. package/dist/engine/release_gate_scenario_registry.d.ts.map +1 -1
  82. package/dist/engine/release_gate_scenario_registry.js +205 -2
  83. package/dist/engine/release_gate_scenario_registry.js.map +1 -1
  84. package/dist/engine/release_issue_scenario_registry.d.ts +64 -0
  85. package/dist/engine/release_issue_scenario_registry.d.ts.map +1 -0
  86. package/dist/engine/release_issue_scenario_registry.js +1349 -0
  87. package/dist/engine/release_issue_scenario_registry.js.map +1 -0
  88. package/dist/engine/release_readiness_gate.d.ts +8 -0
  89. package/dist/engine/release_readiness_gate.d.ts.map +1 -1
  90. package/dist/engine/release_readiness_gate.js +1144 -6
  91. package/dist/engine/release_readiness_gate.js.map +1 -1
  92. package/dist/engine/release_tool_harness.d.ts +71 -0
  93. package/dist/engine/release_tool_harness.d.ts.map +1 -0
  94. package/dist/engine/release_tool_harness.js +161 -0
  95. package/dist/engine/release_tool_harness.js.map +1 -0
  96. package/dist/engine/scaffolder.d.ts.map +1 -1
  97. package/dist/engine/scaffolder.js +144 -7
  98. package/dist/engine/scaffolder.js.map +1 -1
  99. package/dist/engine/standard_asset_contract.d.ts +75 -0
  100. package/dist/engine/standard_asset_contract.d.ts.map +1 -0
  101. package/dist/engine/standard_asset_contract.js +388 -0
  102. package/dist/engine/standard_asset_contract.js.map +1 -0
  103. package/dist/engine/standard_asset_coverage.d.ts +45 -0
  104. package/dist/engine/standard_asset_coverage.d.ts.map +1 -0
  105. package/dist/engine/standard_asset_coverage.js +220 -0
  106. package/dist/engine/standard_asset_coverage.js.map +1 -0
  107. package/dist/engine/task_context.d.ts +9 -2
  108. package/dist/engine/task_context.d.ts.map +1 -1
  109. package/dist/engine/task_context.js +49 -12
  110. package/dist/engine/task_context.js.map +1 -1
  111. package/dist/engine/template_asset_contract_registry.d.ts +162 -0
  112. package/dist/engine/template_asset_contract_registry.d.ts.map +1 -0
  113. package/dist/engine/template_asset_contract_registry.js +598 -0
  114. package/dist/engine/template_asset_contract_registry.js.map +1 -0
  115. package/dist/engine/template_asset_visibility.d.ts +109 -0
  116. package/dist/engine/template_asset_visibility.d.ts.map +1 -0
  117. package/dist/engine/template_asset_visibility.js +321 -0
  118. package/dist/engine/template_asset_visibility.js.map +1 -0
  119. package/dist/engine/template_init_sync.d.ts +68 -0
  120. package/dist/engine/template_init_sync.d.ts.map +1 -0
  121. package/dist/engine/template_init_sync.js +218 -0
  122. package/dist/engine/template_init_sync.js.map +1 -0
  123. package/dist/engine/template_manifest_io.d.ts +10 -0
  124. package/dist/engine/template_manifest_io.d.ts.map +1 -1
  125. package/dist/engine/template_manifest_io.js +63 -30
  126. package/dist/engine/template_manifest_io.js.map +1 -1
  127. package/dist/engine/template_mechanism_auditor.d.ts +3 -1
  128. package/dist/engine/template_mechanism_auditor.d.ts.map +1 -1
  129. package/dist/engine/template_mechanism_auditor.js +27 -24
  130. package/dist/engine/template_mechanism_auditor.js.map +1 -1
  131. package/dist/engine/tool_invocation_contract_registry.d.ts.map +1 -1
  132. package/dist/engine/tool_invocation_contract_registry.js +11 -1
  133. package/dist/engine/tool_invocation_contract_registry.js.map +1 -1
  134. package/dist/engine/verifier.d.ts.map +1 -1
  135. package/dist/engine/verifier.js +3 -40
  136. package/dist/engine/verifier.js.map +1 -1
  137. package/dist/engine/workflow_contract_registry.d.ts.map +1 -1
  138. package/dist/engine/workflow_contract_registry.js +4 -3
  139. package/dist/engine/workflow_contract_registry.js.map +1 -1
  140. package/dist/knowledge/index_manager.d.ts +20 -0
  141. package/dist/knowledge/index_manager.d.ts.map +1 -1
  142. package/dist/knowledge/index_manager.js +234 -3
  143. package/dist/knowledge/index_manager.js.map +1 -1
  144. package/dist/types.d.ts +47 -0
  145. package/dist/types.d.ts.map +1 -1
  146. package/package.json +5 -4
  147. 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
  148. 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
  149. 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
  150. 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
  151. 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
  152. 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
  153. 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
  154. 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
  155. 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
  156. 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
  157. 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
  158. 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
  159. 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
  160. 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
  161. 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
  162. 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
  163. 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
  164. 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
  165. 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;AAy/CrB,eAAO,MAAM,iBAAiB,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAMpD,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,CA4N9B"}
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({