soloforge 1.3.1 → 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 (118) hide show
  1. package/README.md +6 -3
  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 +10 -10
  6. package/dist/adapters/claude_code/tools.d.ts.map +1 -1
  7. package/dist/adapters/claude_code/tools.js +317 -18
  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 -46
  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 +85 -53
  15. package/dist/bin/soloforge.js.map +1 -1
  16. package/dist/engine/asset_manifest.d.ts +7 -1
  17. package/dist/engine/asset_manifest.d.ts.map +1 -1
  18. package/dist/engine/asset_manifest.js +28 -18
  19. package/dist/engine/asset_manifest.js.map +1 -1
  20. package/dist/engine/consumable_asset_registry.d.ts.map +1 -1
  21. package/dist/engine/consumable_asset_registry.js +26 -0
  22. package/dist/engine/consumable_asset_registry.js.map +1 -1
  23. package/dist/engine/consumption_trace_store.d.ts +8 -8
  24. package/dist/engine/consumption_trace_store.d.ts.map +1 -1
  25. package/dist/engine/consumption_trace_store.js +11 -7
  26. package/dist/engine/consumption_trace_store.js.map +1 -1
  27. package/dist/engine/decision_workshop.d.ts +160 -0
  28. package/dist/engine/decision_workshop.d.ts.map +1 -0
  29. package/dist/engine/decision_workshop.js +279 -0
  30. package/dist/engine/decision_workshop.js.map +1 -0
  31. package/dist/engine/dual_layer_mechanism_registry.d.ts.map +1 -1
  32. package/dist/engine/dual_layer_mechanism_registry.js +176 -2
  33. package/dist/engine/dual_layer_mechanism_registry.js.map +1 -1
  34. package/dist/engine/explicit_asset_registry.d.ts +30 -0
  35. package/dist/engine/explicit_asset_registry.d.ts.map +1 -0
  36. package/dist/engine/explicit_asset_registry.js +3508 -0
  37. package/dist/engine/explicit_asset_registry.js.map +1 -0
  38. package/dist/engine/implementation_roadmap_registry.d.ts +2 -2
  39. package/dist/engine/implementation_roadmap_registry.d.ts.map +1 -1
  40. package/dist/engine/implementation_roadmap_registry.js +44 -16
  41. package/dist/engine/implementation_roadmap_registry.js.map +1 -1
  42. package/dist/engine/intent_expander.d.ts.map +1 -1
  43. package/dist/engine/intent_expander.js +46 -2
  44. package/dist/engine/intent_expander.js.map +1 -1
  45. package/dist/engine/intent_router.d.ts +1 -1
  46. package/dist/engine/intent_router.d.ts.map +1 -1
  47. package/dist/engine/intent_router.js +2 -1
  48. package/dist/engine/intent_router.js.map +1 -1
  49. package/dist/engine/knowledge_injection_boundary.d.ts +3 -0
  50. package/dist/engine/knowledge_injection_boundary.d.ts.map +1 -1
  51. package/dist/engine/knowledge_injection_boundary.js +48 -5
  52. package/dist/engine/knowledge_injection_boundary.js.map +1 -1
  53. package/dist/engine/mechanism_contract_registry.d.ts +1 -1
  54. package/dist/engine/mechanism_contract_registry.d.ts.map +1 -1
  55. package/dist/engine/mechanism_contract_registry.js +74 -2
  56. package/dist/engine/mechanism_contract_registry.js.map +1 -1
  57. package/dist/engine/observed_consumption.d.ts +54 -0
  58. package/dist/engine/observed_consumption.d.ts.map +1 -0
  59. package/dist/engine/observed_consumption.js +377 -0
  60. package/dist/engine/observed_consumption.js.map +1 -0
  61. package/dist/engine/release_issue_scenario_registry.d.ts +64 -0
  62. package/dist/engine/release_issue_scenario_registry.d.ts.map +1 -0
  63. package/dist/engine/release_issue_scenario_registry.js +1349 -0
  64. package/dist/engine/release_issue_scenario_registry.js.map +1 -0
  65. package/dist/engine/release_readiness_gate.d.ts +1 -1
  66. package/dist/engine/release_readiness_gate.d.ts.map +1 -1
  67. package/dist/engine/release_readiness_gate.js +574 -46
  68. package/dist/engine/release_readiness_gate.js.map +1 -1
  69. package/dist/engine/release_tool_harness.d.ts +71 -0
  70. package/dist/engine/release_tool_harness.d.ts.map +1 -0
  71. package/dist/engine/release_tool_harness.js +161 -0
  72. package/dist/engine/release_tool_harness.js.map +1 -0
  73. package/dist/engine/scaffolder.d.ts.map +1 -1
  74. package/dist/engine/scaffolder.js +144 -7
  75. package/dist/engine/scaffolder.js.map +1 -1
  76. package/dist/engine/standard_asset_contract.d.ts +75 -0
  77. package/dist/engine/standard_asset_contract.d.ts.map +1 -0
  78. package/dist/engine/standard_asset_contract.js +388 -0
  79. package/dist/engine/standard_asset_contract.js.map +1 -0
  80. package/dist/engine/standard_asset_coverage.d.ts +45 -0
  81. package/dist/engine/standard_asset_coverage.d.ts.map +1 -0
  82. package/dist/engine/standard_asset_coverage.js +220 -0
  83. package/dist/engine/standard_asset_coverage.js.map +1 -0
  84. package/dist/engine/template_asset_contract_registry.d.ts +162 -0
  85. package/dist/engine/template_asset_contract_registry.d.ts.map +1 -0
  86. package/dist/engine/template_asset_contract_registry.js +598 -0
  87. package/dist/engine/template_asset_contract_registry.js.map +1 -0
  88. package/dist/engine/template_asset_visibility.d.ts +109 -0
  89. package/dist/engine/template_asset_visibility.d.ts.map +1 -0
  90. package/dist/engine/template_asset_visibility.js +321 -0
  91. package/dist/engine/template_asset_visibility.js.map +1 -0
  92. package/dist/engine/template_init_sync.d.ts +68 -0
  93. package/dist/engine/template_init_sync.d.ts.map +1 -0
  94. package/dist/engine/template_init_sync.js +218 -0
  95. package/dist/engine/template_init_sync.js.map +1 -0
  96. package/dist/engine/template_manifest_io.d.ts +10 -0
  97. package/dist/engine/template_manifest_io.d.ts.map +1 -1
  98. package/dist/engine/template_manifest_io.js +63 -30
  99. package/dist/engine/template_manifest_io.js.map +1 -1
  100. package/dist/engine/template_mechanism_auditor.d.ts +3 -1
  101. package/dist/engine/template_mechanism_auditor.d.ts.map +1 -1
  102. package/dist/engine/template_mechanism_auditor.js +27 -24
  103. package/dist/engine/template_mechanism_auditor.js.map +1 -1
  104. package/dist/engine/tool_invocation_contract_registry.d.ts.map +1 -1
  105. package/dist/engine/tool_invocation_contract_registry.js +11 -1
  106. package/dist/engine/tool_invocation_contract_registry.js.map +1 -1
  107. package/dist/knowledge/index_manager.d.ts +20 -0
  108. package/dist/knowledge/index_manager.d.ts.map +1 -1
  109. package/dist/knowledge/index_manager.js +234 -3
  110. package/dist/knowledge/index_manager.js.map +1 -1
  111. package/dist/types.d.ts +36 -1
  112. package/dist/types.d.ts.map +1 -1
  113. package/package.json +2 -2
  114. 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
  115. 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
  116. 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
  117. 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
  118. 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,598 @@
1
+ /**
2
+ * 全模板资产权威合同注册表 — 214 资产单一权威元数据体系。
3
+ *
4
+ * 合同由显式资产注册表 (explicit_asset_registry.ts) 驱动,
5
+ * 每个资产逐一注册,新增文件必须新增条目,否则 validate-release hard_fail。
6
+ * DRAFT_CATEGORY_DEFAULTS 仅用于生成待审草稿/诊断建议,不作为发布态合同。
7
+ */
8
+ import fs from "node:fs";
9
+ import path from "node:path";
10
+ import { debug } from "./logger.js";
11
+ import { EXPLICIT_ASSET_REGISTRY } from "./explicit_asset_registry.js";
12
+ /**
13
+ * 诊断用草稿默认值 — 用于为新资产生成待审合同建议,不作为发布态合同。
14
+ * 新增模板文件应先通过此生成草稿,审阅后写入 explicit_asset_registry.ts。
15
+ */
16
+ export const DRAFT_CATEGORY_DEFAULTS = [
17
+ {
18
+ prefix: "templates/knowledge/acceptance_templates/",
19
+ defaults: {
20
+ asset_kind: "acceptance_template",
21
+ owner_mechanism_id: "mc-standard-asset-contract",
22
+ asset_visibility: "user_project",
23
+ sync_to_user_project: true,
24
+ sync_target: "project_knowledge",
25
+ runtime_visibility: "index_only",
26
+ evidence_role: "template_guidance",
27
+ user_visible: true,
28
+ applicable_routes: ["artifact_generation", "operation"],
29
+ applicable_tech_stack: [],
30
+ lifecycle_status: "active",
31
+ consume_category: "copy_only",
32
+ mainline_consumer: "",
33
+ validation_entrypoint: "template_mechanism_auditor",
34
+ },
35
+ },
36
+ {
37
+ prefix: "templates/knowledge/checklists/",
38
+ defaults: {
39
+ asset_kind: "checklist",
40
+ owner_mechanism_id: "mc-verifier",
41
+ asset_visibility: "user_project",
42
+ sync_to_user_project: true,
43
+ sync_target: "project_knowledge",
44
+ runtime_visibility: "index_only",
45
+ evidence_role: "template_guidance",
46
+ user_visible: true,
47
+ applicable_routes: ["verification_only", "operation"],
48
+ applicable_tech_stack: [],
49
+ lifecycle_status: "active",
50
+ consume_category: "copy_only",
51
+ mainline_consumer: "knowledge_manager.addKnowledge",
52
+ validation_entrypoint: "template_mechanism_auditor",
53
+ },
54
+ },
55
+ {
56
+ prefix: "templates/knowledge/domain/",
57
+ defaults: {
58
+ asset_kind: "domain",
59
+ owner_mechanism_id: "mc-knowledge-injection-boundary",
60
+ asset_visibility: "user_project",
61
+ sync_to_user_project: true,
62
+ sync_target: "project_knowledge",
63
+ runtime_visibility: "index_only",
64
+ evidence_role: "template_guidance",
65
+ user_visible: true,
66
+ applicable_routes: ["operation"],
67
+ applicable_tech_stack: [],
68
+ lifecycle_status: "active",
69
+ consume_category: "copy_only",
70
+ mainline_consumer: "",
71
+ validation_entrypoint: "template_mechanism_auditor",
72
+ },
73
+ },
74
+ {
75
+ prefix: "templates/knowledge/patterns/core/",
76
+ defaults: {
77
+ asset_kind: "pattern_core",
78
+ owner_mechanism_id: "mc-core-engineering-principles",
79
+ asset_visibility: "soloforge_internal",
80
+ sync_to_user_project: false,
81
+ sync_target: "none",
82
+ runtime_visibility: "internal_only",
83
+ evidence_role: "template_guidance",
84
+ user_visible: false,
85
+ applicable_routes: [],
86
+ applicable_tech_stack: [],
87
+ lifecycle_status: "internal_only",
88
+ consume_category: "internal_runtime",
89
+ mainline_consumer: "knowledge_config_loader.loadKnowledgeConfig",
90
+ validation_entrypoint: "validate-release",
91
+ },
92
+ },
93
+ {
94
+ prefix: "templates/knowledge/procedures/",
95
+ defaults: {
96
+ asset_kind: "pipeline_procedure",
97
+ owner_mechanism_id: "mc-workflow-contract",
98
+ asset_visibility: "user_project",
99
+ sync_to_user_project: true,
100
+ sync_target: "project_knowledge",
101
+ runtime_visibility: "index_only",
102
+ evidence_role: "template_guidance",
103
+ user_visible: true,
104
+ applicable_routes: ["operation", "multi_stage_plan"],
105
+ applicable_tech_stack: [],
106
+ lifecycle_status: "active",
107
+ consume_category: "copy_only",
108
+ mainline_consumer: "",
109
+ validation_entrypoint: "template_mechanism_auditor",
110
+ },
111
+ },
112
+ {
113
+ prefix: "templates/knowledge/product_profiles/",
114
+ defaults: {
115
+ asset_kind: "product_profile",
116
+ owner_mechanism_id: "mc-zero-config-init",
117
+ asset_visibility: "user_project",
118
+ sync_to_user_project: true,
119
+ sync_target: "project_knowledge",
120
+ runtime_visibility: "index_only",
121
+ evidence_role: "classification",
122
+ user_visible: true,
123
+ applicable_routes: ["operation"],
124
+ applicable_tech_stack: [],
125
+ lifecycle_status: "active",
126
+ consume_category: "copy_only",
127
+ mainline_consumer: "knowledge_manager.addKnowledge",
128
+ validation_entrypoint: "template_mechanism_auditor",
129
+ },
130
+ },
131
+ {
132
+ prefix: "templates/knowledge/review_rules/",
133
+ defaults: {
134
+ asset_kind: "review_rule",
135
+ owner_mechanism_id: "mc-standard-asset-contract",
136
+ asset_visibility: "user_project",
137
+ sync_to_user_project: true,
138
+ sync_target: "project_knowledge",
139
+ runtime_visibility: "index_only",
140
+ evidence_role: "template_guidance",
141
+ user_visible: true,
142
+ applicable_routes: ["operation"],
143
+ applicable_tech_stack: [],
144
+ lifecycle_status: "active",
145
+ consume_category: "copy_only",
146
+ mainline_consumer: "",
147
+ validation_entrypoint: "template_mechanism_auditor",
148
+ },
149
+ },
150
+ {
151
+ prefix: "templates/knowledge/rules/",
152
+ defaults: {
153
+ asset_kind: "knowledge_rule",
154
+ owner_mechanism_id: "mc-workflow-contract",
155
+ asset_visibility: "user_project",
156
+ sync_to_user_project: true,
157
+ sync_target: "project_knowledge",
158
+ runtime_visibility: "index_only",
159
+ evidence_role: "template_guidance",
160
+ user_visible: true,
161
+ applicable_routes: ["operation"],
162
+ applicable_tech_stack: [],
163
+ lifecycle_status: "active",
164
+ consume_category: "copy_only",
165
+ mainline_consumer: "",
166
+ validation_entrypoint: "template_mechanism_auditor",
167
+ },
168
+ },
169
+ {
170
+ prefix: "templates/knowledge/templates/",
171
+ defaults: {
172
+ asset_kind: "knowledge_template",
173
+ owner_mechanism_id: "mc-standard-asset-contract",
174
+ asset_visibility: "user_project",
175
+ sync_to_user_project: true,
176
+ sync_target: "project_knowledge",
177
+ runtime_visibility: "index_only",
178
+ evidence_role: "template_guidance",
179
+ user_visible: true,
180
+ applicable_routes: ["operation"],
181
+ applicable_tech_stack: [],
182
+ lifecycle_status: "active",
183
+ consume_category: "copy_only",
184
+ mainline_consumer: "knowledge_manager.addKnowledge",
185
+ validation_entrypoint: "template_mechanism_auditor",
186
+ },
187
+ },
188
+ {
189
+ prefix: "templates/patterns/",
190
+ defaults: {
191
+ asset_kind: "global_pattern",
192
+ owner_mechanism_id: "mc-core-engineering-principles",
193
+ asset_visibility: "global_pattern",
194
+ sync_to_user_project: false,
195
+ sync_target: "global_patterns",
196
+ runtime_visibility: "index_only",
197
+ evidence_role: "template_guidance",
198
+ user_visible: true,
199
+ applicable_routes: ["operation"],
200
+ applicable_tech_stack: [],
201
+ lifecycle_status: "active",
202
+ consume_category: "copy_only",
203
+ mainline_consumer: "soloforge.copyGlobalPatterns",
204
+ validation_entrypoint: "validate-release",
205
+ },
206
+ },
207
+ {
208
+ prefix: "templates/scaffolds/",
209
+ defaults: {
210
+ asset_kind: "scaffold",
211
+ owner_mechanism_id: "mc-zero-config-init",
212
+ asset_visibility: "scaffold_only",
213
+ sync_to_user_project: false,
214
+ sync_target: "none",
215
+ runtime_visibility: "scaffold_only",
216
+ evidence_role: "template_guidance",
217
+ user_visible: false,
218
+ applicable_routes: ["scaffold"],
219
+ applicable_tech_stack: [],
220
+ lifecycle_status: "active",
221
+ consume_category: "scaffold_only",
222
+ mainline_consumer: "scaffolder.generateScaffold",
223
+ validation_entrypoint: "validate-release",
224
+ },
225
+ },
226
+ {
227
+ prefix: "src/adapters/shared/workflow_template.ts",
228
+ defaults: {
229
+ asset_kind: "adapter_workflow",
230
+ owner_mechanism_id: "mc-workflow-contract",
231
+ asset_visibility: "soloforge_internal",
232
+ sync_to_user_project: false,
233
+ sync_target: "none",
234
+ runtime_visibility: "internal_only",
235
+ evidence_role: "template_guidance",
236
+ user_visible: false,
237
+ applicable_routes: ["operation", "multi_stage_plan", "verification_only"],
238
+ applicable_tech_stack: [],
239
+ lifecycle_status: "active",
240
+ consume_category: "internal_runtime",
241
+ mainline_consumer: "claude_md.generateClaudeMd",
242
+ validation_entrypoint: "validate-release",
243
+ },
244
+ },
245
+ ];
246
+ // ── 可验证消费证据 — 每类资产对应真实生产消费链 ──
247
+ const CONSUMPTION_EVIDENCE_MAP = {
248
+ acceptance_template: {
249
+ asset_kind: "acceptance_template",
250
+ selected_by_entrypoint: "queryKnowledgeForRoute",
251
+ selection_rule_or_matcher: "output_artifact.kind + template name matching",
252
+ production_consumer_file: "src/engine/intent_expander.ts",
253
+ production_consumer_export: "queryKnowledgeForRoute",
254
+ validation_entrypoint: "template_mechanism_auditor",
255
+ runtime_test_or_scenario_ref: "tests/engine/intent_expander.test.ts",
256
+ },
257
+ checklist: {
258
+ asset_kind: "checklist",
259
+ selected_by_entrypoint: "addKnowledge",
260
+ selection_rule_or_matcher: "type=checklist → checklist directory",
261
+ production_consumer_file: "src/engine/knowledge_manager.ts",
262
+ production_consumer_export: "addKnowledge",
263
+ validation_entrypoint: "template_mechanism_auditor",
264
+ runtime_test_or_scenario_ref: "tests/engine/knowledge_manager.test.ts",
265
+ },
266
+ domain: {
267
+ asset_kind: "domain",
268
+ selected_by_entrypoint: "addKnowledge",
269
+ selection_rule_or_matcher: "type=domain → domain directory",
270
+ production_consumer_file: "src/engine/knowledge_manager.ts",
271
+ production_consumer_export: "addKnowledge",
272
+ validation_entrypoint: "template_mechanism_auditor",
273
+ runtime_test_or_scenario_ref: "tests/engine/knowledge_manager.test.ts",
274
+ },
275
+ knowledge_rule: {
276
+ asset_kind: "knowledge_rule",
277
+ selected_by_entrypoint: "consumeForRouter",
278
+ selection_rule_or_matcher: "routes + primary_triggers from frontmatter",
279
+ production_consumer_file: "src/engine/knowledge_asset_consumer.ts",
280
+ production_consumer_export: "consumeForRouter",
281
+ validation_entrypoint: "template_mechanism_auditor",
282
+ runtime_test_or_scenario_ref: "tests/engine/knowledge_asset_consumer.test.ts",
283
+ },
284
+ pipeline_procedure: {
285
+ asset_kind: "pipeline_procedure",
286
+ selected_by_entrypoint: "loadBuiltinByPipeline",
287
+ selection_rule_or_matcher: "pipeline_hint → fileName mapping",
288
+ production_consumer_file: "src/engine/intent_expander.ts",
289
+ production_consumer_export: "loadBuiltinByPipeline",
290
+ validation_entrypoint: "template_mechanism_auditor",
291
+ runtime_test_or_scenario_ref: "tests/engine/intent_expander.test.ts",
292
+ },
293
+ review_rule: {
294
+ asset_kind: "review_rule",
295
+ selected_by_entrypoint: "classifyFindingsByTrust",
296
+ selection_rule_or_matcher: "knowledgeIndex.query({ type: 'review_rule' })",
297
+ production_consumer_file: "src/engine/code_reviewer.ts",
298
+ production_consumer_export: "classifyFindingsByTrust",
299
+ validation_entrypoint: "template_mechanism_auditor",
300
+ runtime_test_or_scenario_ref: "tests/engine/code_reviewer.test.ts",
301
+ },
302
+ pattern_core: {
303
+ asset_kind: "pattern_core",
304
+ selected_by_entrypoint: "loadKnowledgeConfig",
305
+ selection_rule_or_matcher: "direct path reference (e.g. patterns/core/决策网关.md)",
306
+ production_consumer_file: "src/engine/knowledge_config_loader.ts",
307
+ production_consumer_export: "loadKnowledgeConfig",
308
+ validation_entrypoint: "validate-release",
309
+ runtime_test_or_scenario_ref: "tests/engine/knowledge_config_loader.test.ts",
310
+ },
311
+ product_profile: {
312
+ asset_kind: "product_profile",
313
+ selected_by_entrypoint: "addKnowledge",
314
+ selection_rule_or_matcher: "type=product_profile → product_profiles directory",
315
+ production_consumer_file: "src/engine/knowledge_manager.ts",
316
+ production_consumer_export: "addKnowledge",
317
+ validation_entrypoint: "template_mechanism_auditor",
318
+ runtime_test_or_scenario_ref: "tests/engine/knowledge_manager.test.ts",
319
+ },
320
+ knowledge_template: {
321
+ asset_kind: "knowledge_template",
322
+ selected_by_entrypoint: "addKnowledge",
323
+ selection_rule_or_matcher: "type=knowledge_template → templates directory",
324
+ production_consumer_file: "src/engine/knowledge_manager.ts",
325
+ production_consumer_export: "addKnowledge",
326
+ validation_entrypoint: "template_mechanism_auditor",
327
+ runtime_test_or_scenario_ref: "tests/engine/knowledge_manager.test.ts",
328
+ },
329
+ global_pattern: {
330
+ asset_kind: "global_pattern",
331
+ selected_by_entrypoint: "copyGlobalPatterns",
332
+ selection_rule_or_matcher: "*.md in templates/patterns/ → ~/.soloforge/patterns/",
333
+ production_consumer_file: "src/bin/soloforge.ts",
334
+ production_consumer_export: "copyGlobalPatterns",
335
+ validation_entrypoint: "validate-release",
336
+ runtime_test_or_scenario_ref: "tests/engine/template_asset_contract_registry.test.ts",
337
+ },
338
+ scaffold: {
339
+ asset_kind: "scaffold",
340
+ selected_by_entrypoint: "generateScaffold",
341
+ selection_rule_or_matcher: "tech_stack.framework → templateSet → *.hbs files",
342
+ production_consumer_file: "src/engine/scaffolder.ts",
343
+ production_consumer_export: "generateScaffold",
344
+ validation_entrypoint: "validate-release",
345
+ runtime_test_or_scenario_ref: "tests/engine/scaffolder.test.ts",
346
+ },
347
+ adapter_workflow: {
348
+ asset_kind: "adapter_workflow",
349
+ selected_by_entrypoint: "generateClaudeMd",
350
+ selection_rule_or_matcher: "adapter init → generateWorkflowRules → inject into CLAUDE.md",
351
+ production_consumer_file: "src/adapters/claude_code/claude_md.ts",
352
+ production_consumer_export: "generateClaudeMd",
353
+ validation_entrypoint: "validate-release",
354
+ runtime_test_or_scenario_ref: "tests/adapters/claude_md.test.ts",
355
+ },
356
+ };
357
+ /**
358
+ * 获取指定资产类型的真实消费证据。
359
+ */
360
+ export function getConsumptionEvidence(assetKind) {
361
+ return CONSUMPTION_EVIDENCE_MAP[assetKind];
362
+ }
363
+ /**
364
+ * 验证消费证据中声明的生产消费者文件是否真实存在于源码中。
365
+ */
366
+ export function verifyConsumptionEvidence(rootDir) {
367
+ const results = [];
368
+ const srcDir = path.join(rootDir, "src");
369
+ const testsDir = path.join(rootDir, "tests");
370
+ for (const [kind, evidence] of Object.entries(CONSUMPTION_EVIDENCE_MAP)) {
371
+ const consumerPath = path.join(srcDir, evidence.production_consumer_file.replace("src/", ""));
372
+ const consumerExists = fs.existsSync(consumerPath);
373
+ let exportFound = false;
374
+ if (consumerExists) {
375
+ const content = fs.readFileSync(consumerPath, "utf-8");
376
+ exportFound = content.includes(evidence.production_consumer_export) ||
377
+ content.includes(`function ${evidence.production_consumer_export}`) ||
378
+ content.includes(`${evidence.production_consumer_export}(`);
379
+ }
380
+ const testPath = path.join(testsDir, evidence.runtime_test_or_scenario_ref.replace("tests/", ""));
381
+ const testExists = fs.existsSync(testPath);
382
+ results.push({
383
+ asset_kind: kind,
384
+ evidence,
385
+ consumer_exists: consumerExists,
386
+ consumer_export_found: exportFound,
387
+ test_exists: testExists,
388
+ });
389
+ }
390
+ return results;
391
+ }
392
+ function generateAssetId(relPath) {
393
+ return relPath.replace(/\//g, "-").replace(/\.(md|yaml|yml|hbs|json)$/, "");
394
+ }
395
+ /**
396
+ * 构建全模板资产权威合同列表 — 由显式注册表驱动。
397
+ * 只为 EXPLICIT_ASSET_REGISTRY 中注册的资产生成合同,未注册文件不计入。
398
+ */
399
+ export function buildTemplateAssetContracts(rootDir) {
400
+ const contracts = [];
401
+ for (const [relPath, entry] of Object.entries(EXPLICIT_ASSET_REGISTRY)) {
402
+ const absPath = path.join(rootDir, relPath);
403
+ // 注册但文件不存在 → 仍生成合同(由 auditContractCoverage 报告文件缺失)
404
+ contracts.push({
405
+ asset_id: generateAssetId(relPath),
406
+ path: relPath,
407
+ asset_kind: entry.asset_kind,
408
+ contract_version: "1.0.0",
409
+ owner_mechanism_id: entry.owner_mechanism_id,
410
+ asset_visibility: entry.asset_visibility,
411
+ sync_to_user_project: entry.sync_to_user_project,
412
+ sync_target: entry.sync_target,
413
+ runtime_visibility: entry.runtime_visibility,
414
+ evidence_role: entry.evidence_role,
415
+ user_visible: entry.user_visible,
416
+ applicable_routes: [...entry.applicable_routes],
417
+ applicable_tech_stack: [...entry.applicable_tech_stack],
418
+ lifecycle_status: entry.lifecycle_status,
419
+ consume_category: entry.consume_category,
420
+ mainline_consumer: entry.mainline_consumer,
421
+ validation_entrypoint: entry.validation_entrypoint,
422
+ applicable_languages: entry.applicable_languages ? [...entry.applicable_languages] : undefined,
423
+ applicable_frameworks: entry.applicable_frameworks ? [...entry.applicable_frameworks] : undefined,
424
+ applicable_file_patterns: entry.applicable_file_patterns ? [...entry.applicable_file_patterns] : undefined,
425
+ excluded_file_patterns: entry.excluded_file_patterns ? [...entry.excluded_file_patterns] : undefined,
426
+ verification_strategy: entry.verification_strategy,
427
+ failure_severity: entry.failure_severity,
428
+ required_template_vars: entry.required_template_vars ? [...entry.required_template_vars] : undefined,
429
+ });
430
+ }
431
+ debug("权威合同", "构建完成,共 %d 条合同(显式注册表驱动)", contracts.length);
432
+ return contracts;
433
+ }
434
+ // ── 缓存 ──
435
+ let _cachedContracts = null;
436
+ /**
437
+ * 列出全模板资产权威合同(带缓存)。
438
+ */
439
+ export function listTemplateAssetContracts() {
440
+ if (_cachedContracts)
441
+ return _cachedContracts;
442
+ const rootDir = path.resolve(new URL(import.meta.url).pathname, "..", "..", "..");
443
+ _cachedContracts = buildTemplateAssetContracts(rootDir);
444
+ return _cachedContracts;
445
+ }
446
+ /**
447
+ * 清除缓存(测试用)。
448
+ */
449
+ export function clearContractCache() {
450
+ _cachedContracts = null;
451
+ }
452
+ /**
453
+ * 按路径查询合同。
454
+ */
455
+ export function getContractByPath(relPath) {
456
+ return listTemplateAssetContracts().find((c) => c.path === relPath);
457
+ }
458
+ /**
459
+ * 合同决策 — 返回 allowed/denied/unregistered。
460
+ * allowed: 注册且允许访问
461
+ * denied: 注册但禁止(内部/脚手架资产)
462
+ * unregistered: 未在显式注册表中注册 → fail-closed
463
+ */
464
+ export function getContractDecision(relPath) {
465
+ const normalized = relPath.replace(/\\/g, "/");
466
+ const contract = getContractByPath(normalized);
467
+ if (!contract) {
468
+ return { decision: "unregistered" };
469
+ }
470
+ if (contract.asset_visibility === "soloforge_internal" || contract.asset_visibility === "scaffold_only") {
471
+ return { decision: "denied", contract };
472
+ }
473
+ if (contract.runtime_visibility === "internal_only") {
474
+ return { decision: "denied", contract };
475
+ }
476
+ return { decision: "allowed", contract };
477
+ }
478
+ /**
479
+ * 按可见性筛选。
480
+ */
481
+ export function getContractsByVisibility(visibility) {
482
+ return listTemplateAssetContracts().filter((c) => c.asset_visibility === visibility);
483
+ }
484
+ /**
485
+ * 获取应同步到用户项目的资产路径列表。
486
+ */
487
+ export function getSyncableAssetPaths() {
488
+ return listTemplateAssetContracts()
489
+ .filter((c) => c.sync_to_user_project)
490
+ .map((c) => c.path);
491
+ }
492
+ /**
493
+ * 获取内部资产路径集合。
494
+ */
495
+ export function getInternalAssetPaths() {
496
+ return new Set(listTemplateAssetContracts()
497
+ .filter((c) => c.asset_visibility === "soloforge_internal" || c.asset_visibility === "scaffold_only")
498
+ .map((c) => c.path));
499
+ }
500
+ /**
501
+ * 生成合同覆盖统计,验证真实消费证据,检测未注册文件。
502
+ */
503
+ export function auditContractCoverage(rootDir) {
504
+ const contracts = buildTemplateAssetContracts(rootDir);
505
+ const report = {
506
+ total_templates: 0,
507
+ total_contracts: contracts.length,
508
+ contract_covered: 0,
509
+ uncovered: 0,
510
+ unregistered_files: [],
511
+ missing_from_registry: 0,
512
+ visibility_unknown: 0,
513
+ consumer_missing: 0,
514
+ validation_missing: 0,
515
+ owner_missing: 0,
516
+ internal_count: 0,
517
+ user_visible_count: 0,
518
+ consume_category_breakdown: { mainline: 0, audit_only: 0, internal_runtime: 0, scaffold_only: 0, copy_only: 0 },
519
+ consumption_evidence_verified: true,
520
+ consumption_evidence_failures: [],
521
+ };
522
+ // 检测文件系统中存在但未注册的文件
523
+ const templatesDir = path.join(rootDir, "templates");
524
+ const registeredPaths = new Set(contracts.map((c) => c.path));
525
+ if (fs.existsSync(templatesDir)) {
526
+ const fsFiles = walkTemplates(templatesDir);
527
+ for (const absPath of fsFiles) {
528
+ const relPath = path.relative(rootDir, absPath).replace(/\\/g, "/");
529
+ report.total_templates++;
530
+ if (!registeredPaths.has(relPath)) {
531
+ report.unregistered_files.push(relPath);
532
+ report.missing_from_registry++;
533
+ }
534
+ }
535
+ }
536
+ // 验证消费证据
537
+ const evidenceResults = verifyConsumptionEvidence(rootDir);
538
+ for (const r of evidenceResults) {
539
+ if (!r.consumer_exists) {
540
+ report.consumption_evidence_failures.push(`${r.asset_kind}: consumer file ${r.evidence.production_consumer_file} not found`);
541
+ report.consumption_evidence_verified = false;
542
+ }
543
+ if (!r.consumer_export_found) {
544
+ report.consumption_evidence_failures.push(`${r.asset_kind}: export ${r.evidence.production_consumer_export} not found in ${r.evidence.production_consumer_file}`);
545
+ report.consumption_evidence_verified = false;
546
+ }
547
+ if (!r.test_exists) {
548
+ report.consumption_evidence_failures.push(`${r.asset_kind}: test file ${r.evidence.runtime_test_or_scenario_ref} not found`);
549
+ }
550
+ }
551
+ for (const c of contracts) {
552
+ const needsMainlineConsumer = c.consume_category === "mainline";
553
+ const hasGaps = (needsMainlineConsumer && !c.mainline_consumer) || !c.validation_entrypoint || !c.owner_mechanism_id;
554
+ if (hasGaps) {
555
+ report.uncovered++;
556
+ if (!c.mainline_consumer)
557
+ report.consumer_missing++;
558
+ if (!c.validation_entrypoint)
559
+ report.validation_missing++;
560
+ if (!c.owner_mechanism_id)
561
+ report.owner_missing++;
562
+ }
563
+ else {
564
+ report.contract_covered++;
565
+ }
566
+ if (c.asset_visibility === "soloforge_internal" || c.asset_visibility === "scaffold_only") {
567
+ report.internal_count++;
568
+ }
569
+ else {
570
+ report.user_visible_count++;
571
+ }
572
+ if (c.asset_visibility !== "user_project" && c.asset_visibility !== "soloforge_internal" &&
573
+ c.asset_visibility !== "scaffold_only" && c.asset_visibility !== "global_pattern") {
574
+ report.visibility_unknown++;
575
+ }
576
+ report.consume_category_breakdown[c.consume_category] = (report.consume_category_breakdown[c.consume_category] ?? 0) + 1;
577
+ }
578
+ return report;
579
+ }
580
+ // ── 工具函数 ──
581
+ function walkTemplates(dir) {
582
+ const results = [];
583
+ const stack = [dir];
584
+ while (stack.length > 0) {
585
+ const current = stack.pop();
586
+ for (const entry of fs.readdirSync(current, { withFileTypes: true })) {
587
+ const absPath = path.join(current, entry.name);
588
+ if (entry.isDirectory()) {
589
+ stack.push(absPath);
590
+ }
591
+ else if (/\.(md|yaml|yml|hbs|json)$/.test(entry.name)) {
592
+ results.push(absPath);
593
+ }
594
+ }
595
+ }
596
+ return results;
597
+ }
598
+ //# sourceMappingURL=template_asset_contract_registry.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"template_asset_contract_registry.js","sourceRoot":"","sources":["../../src/engine/template_asset_contract_registry.ts"],"names":[],"mappings":"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"}