soloforge 1.3.4 → 1.3.5
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 +12 -5
- package/dist/adapters/claude_code/tools.d.ts.map +1 -1
- package/dist/adapters/claude_code/tools.js +80 -44
- package/dist/adapters/claude_code/tools.js.map +1 -1
- package/dist/adapters/shared/workflow_template.js +1 -1
- package/dist/bin/soloforge.d.ts.map +1 -1
- package/dist/bin/soloforge.js +83 -1
- package/dist/bin/soloforge.js.map +1 -1
- package/dist/engine/backend_implementation_contract.d.ts +1 -1
- package/dist/engine/backend_implementation_contract.d.ts.map +1 -1
- package/dist/engine/backend_implementation_contract.js +22 -0
- package/dist/engine/backend_implementation_contract.js.map +1 -1
- package/dist/engine/brainstorm_contract.d.ts +1 -1
- package/dist/engine/brainstorm_contract.js +1 -1
- package/dist/engine/code_maintainability_observability_contract.d.ts +1 -1
- package/dist/engine/code_maintainability_observability_contract.d.ts.map +1 -1
- package/dist/engine/code_maintainability_observability_contract.js +241 -3
- package/dist/engine/code_maintainability_observability_contract.js.map +1 -1
- package/dist/engine/contract_registry.js +1 -1
- package/dist/engine/diagnostic_registry.d.ts +1 -0
- package/dist/engine/diagnostic_registry.d.ts.map +1 -1
- package/dist/engine/diagnostic_registry.js +6 -0
- package/dist/engine/diagnostic_registry.js.map +1 -1
- package/dist/engine/dual_layer_mechanism_registry.js +1 -1
- package/dist/engine/extension_scenario_registry.js +4 -4
- package/dist/engine/extension_scenario_registry.js.map +1 -1
- package/dist/engine/foundation_scenario_runners.d.ts.map +1 -1
- package/dist/engine/foundation_scenario_runners.js +4 -2
- package/dist/engine/foundation_scenario_runners.js.map +1 -1
- package/dist/engine/historical_issue_mechanization_matrix.d.ts +28 -0
- package/dist/engine/historical_issue_mechanization_matrix.d.ts.map +1 -0
- package/dist/engine/historical_issue_mechanization_matrix.js +134 -0
- package/dist/engine/historical_issue_mechanization_matrix.js.map +1 -0
- package/dist/engine/implementation_roadmap_registry.d.ts.map +1 -1
- package/dist/engine/implementation_roadmap_registry.js +70 -13
- package/dist/engine/implementation_roadmap_registry.js.map +1 -1
- package/dist/engine/intent_expander.d.ts.map +1 -1
- package/dist/engine/intent_expander.js +151 -1
- package/dist/engine/intent_expander.js.map +1 -1
- package/dist/engine/next_action_planner.d.ts.map +1 -1
- package/dist/engine/next_action_planner.js +72 -4
- package/dist/engine/next_action_planner.js.map +1 -1
- package/dist/engine/project_knowledge_contract.d.ts +58 -0
- package/dist/engine/project_knowledge_contract.d.ts.map +1 -0
- package/dist/engine/project_knowledge_contract.js +298 -0
- package/dist/engine/project_knowledge_contract.js.map +1 -0
- package/dist/engine/project_knowledge_system_regression_matrix.d.ts +27 -0
- package/dist/engine/project_knowledge_system_regression_matrix.d.ts.map +1 -0
- package/dist/engine/project_knowledge_system_regression_matrix.js +295 -0
- package/dist/engine/project_knowledge_system_regression_matrix.js.map +1 -0
- package/dist/engine/release_issue_scenario_registry.d.ts.map +1 -1
- package/dist/engine/release_issue_scenario_registry.js +297 -102
- package/dist/engine/release_issue_scenario_registry.js.map +1 -1
- package/dist/engine/release_readiness_gate.d.ts +1 -0
- package/dist/engine/release_readiness_gate.d.ts.map +1 -1
- package/dist/engine/release_readiness_gate.js +384 -5
- package/dist/engine/release_readiness_gate.js.map +1 -1
- package/dist/engine/technology_decision.js +5 -5
- package/dist/engine/technology_decision.js.map +1 -1
- package/dist/engine/template_asset_contract_registry.d.ts.map +1 -1
- package/dist/engine/template_asset_contract_registry.js +6 -5
- package/dist/engine/template_asset_contract_registry.js.map +1 -1
- package/dist/engine/verifier.js +1 -1
- package/dist/engine/verifier.js.map +1 -1
- package/dist/engine/workflow_navigation_contract.d.ts +10 -0
- package/dist/engine/workflow_navigation_contract.d.ts.map +1 -1
- package/dist/knowledge/loader.d.ts +3 -1
- package/dist/knowledge/loader.d.ts.map +1 -1
- package/dist/knowledge/loader.js +2 -2
- package/dist/knowledge/loader.js.map +1 -1
- package/dist/types.d.ts +19 -0
- package/dist/types.d.ts.map +1 -1
- package/package.json +1 -1
- package/templates/knowledge/acceptance_templates//351/200/232/347/224/250/350/264/250/351/207/217/351/252/214/346/224/266/346/270/205/345/215/225.md +1 -1
- package/templates/knowledge/acceptance_templates//351/207/215/346/236/204/346/226/271/346/241/210/346/250/241/347/211/210.md +1 -1
- package/templates/knowledge/domain//346/224/257/344/273/230/350/247/204/345/210/231.md +1 -1
- package/templates/knowledge/procedures//346/225/260/346/215/256/345/272/223/350/277/201/347/247/273/346/265/201/347/250/213.md +1 -1
- package/templates/knowledge/procedures//351/203/250/347/275/262/345/217/221/345/270/203/346/265/201/347/250/213.md +1 -1
- package/templates/knowledge/procedures//351/207/215/346/236/204/346/265/201/346/260/264/347/272/277.md +1 -1
- package/templates/knowledge/review_rules//344/272/244/344/273/230/345/256/214/345/244/207/346/200/247/345/256/241/346/237/245/350/247/204/345/210/231.md +1 -1
- package/templates/knowledge/review_rules//350/264/250/351/207/217/345/256/241/346/237/245/350/247/204/345/210/231.md +3 -3
- package/templates/knowledge/rules//344/273/243/347/240/201/346/263/250/351/207/212/344/270/216/346/227/245/345/277/227/345/245/221/347/272/246/350/247/204/345/210/231.md +32 -3
- package/templates/knowledge/rules//346/240/270/345/277/203/344/275/223/351/252/214/345/216/237/345/210/231.md +1 -1
- package/templates/knowledge/rules//346/240/270/345/277/203/345/267/245/347/250/213/346/211/247/350/241/214/345/216/237/345/210/231.md +2 -2
- package/templates/knowledge/rules//346/274/224/350/277/233/345/233/236/345/275/222/351/227/250/346/216/247/350/247/204/345/210/231.md +1 -1
- package/templates/patterns/Git/346/223/215/344/275/234/350/247/204/350/214/203.md +1 -1
- package/templates/scaffolds/react/Form.tsx.hbs +11 -3
- package/templates/scaffolds/react/List.tsx.hbs +11 -3
- package/templates/scaffolds/react/Page.tsx.hbs +1 -1
- package/templates/scaffolds/react/types.ts.hbs +4 -1
- package/templates/scaffolds/spring-boot/Controller.java.hbs +18 -4
- package/templates/scaffolds/spring-boot/DTO.java.hbs +4 -1
- package/templates/scaffolds/spring-boot/Entity.java.hbs +8 -3
- package/templates/scaffolds/spring-boot/Mapper.java.hbs +4 -1
- package/templates/scaffolds/spring-boot/ServiceImpl.java.hbs +34 -10
- package/templates/scaffolds/spring-boot/ServiceTest.java.hbs +0 -1
|
@@ -109,7 +109,7 @@ export function validateWorkflowRuleSources(rootDir) {
|
|
|
109
109
|
};
|
|
110
110
|
}
|
|
111
111
|
/** 当前嵌入的权威规则校验和 — 由 `npm run update-workflow-checksum` 更新。 */
|
|
112
|
-
const EMBEDDED_CHECKSUM = "
|
|
112
|
+
const EMBEDDED_CHECKSUM = "557e7282efda3e13";
|
|
113
113
|
function getEmbeddedChecksum() {
|
|
114
114
|
return EMBEDDED_CHECKSUM;
|
|
115
115
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"soloforge.d.ts","sourceRoot":"","sources":["../../src/bin/soloforge.ts"],"names":[],"mappings":";
|
|
1
|
+
{"version":3,"file":"soloforge.d.ts","sourceRoot":"","sources":["../../src/bin/soloforge.ts"],"names":[],"mappings":";AA4zBA,OAAO,EAAE,0BAA0B,EAAE,MAAM,gDAAgD,CAAC"}
|
package/dist/bin/soloforge.js
CHANGED
|
@@ -84,6 +84,9 @@ async function main() {
|
|
|
84
84
|
case "audit-template-visibility":
|
|
85
85
|
await cmdAuditTemplateVisibility();
|
|
86
86
|
break;
|
|
87
|
+
case "audit-project-knowledge":
|
|
88
|
+
await cmdAuditProjectKnowledge();
|
|
89
|
+
break;
|
|
87
90
|
case "sync-templates":
|
|
88
91
|
await cmdSyncTemplates();
|
|
89
92
|
break;
|
|
@@ -165,6 +168,7 @@ async function main() {
|
|
|
165
168
|
validate-mechanisms 验证双层机制承载模型完整性(模板层 + 机制层)
|
|
166
169
|
audit-template-mechanisms 扫描模板与机制注册表交叉校验(--json 输出完整报告,--changed-only 仅检查变更文件)
|
|
167
170
|
audit-design-artifacts 审计架构/数据库/API 设计产物包(只读,--json 输出报告)
|
|
171
|
+
audit-project-knowledge 审计用户项目 .soloforge/knowledge 自定义规则承载与消费
|
|
168
172
|
upgrade-design-artifacts 生成存量设计资产升级计划(默认 dry-run,--apply --confirm 仅建立已归档迁移基线)
|
|
169
173
|
validate-release 验证发布门禁(契约、场景矩阵、消费 trace、双层机制、回归基线)
|
|
170
174
|
validate-batch1 [历史] 仅基础契约验证,不代表正式发布通过
|
|
@@ -936,6 +940,20 @@ async function cmdValidate() {
|
|
|
936
940
|
finally {
|
|
937
941
|
await index.close();
|
|
938
942
|
}
|
|
943
|
+
const { auditProjectKnowledge } = await import("../engine/project_knowledge_contract.js");
|
|
944
|
+
const pkReport = auditProjectKnowledge(projectPath, config);
|
|
945
|
+
if (pkReport.hard_fail_count > 0) {
|
|
946
|
+
userInfo(`❌ 项目知识承载: ${pkReport.hard_fail_count} hard_fail`);
|
|
947
|
+
for (const asset of pkReport.assets) {
|
|
948
|
+
for (const finding of asset.findings.filter((f) => f.severity === "hard_fail")) {
|
|
949
|
+
userInfo(` - ${asset.rel_path}: [${finding.code}] ${finding.message_zh}`);
|
|
950
|
+
}
|
|
951
|
+
}
|
|
952
|
+
hasHardFail = true;
|
|
953
|
+
}
|
|
954
|
+
else {
|
|
955
|
+
userInfo(`✅ 项目知识承载: ${pkReport.total} 条,${pkReport.injectable} 条可注入,${pkReport.index_only} 条仅索引,0 hard_fail`);
|
|
956
|
+
}
|
|
939
957
|
}
|
|
940
958
|
// 扩展清单校验 (problem-39: validateExtensionManifest)
|
|
941
959
|
try {
|
|
@@ -1992,7 +2010,7 @@ async function cmdValidateNewIssue() {
|
|
|
1992
2010
|
// label 精确匹配
|
|
1993
2011
|
if (p.label.toLowerCase() === lower)
|
|
1994
2012
|
matched = true;
|
|
1995
|
-
// label 前缀匹配: "
|
|
2013
|
+
// label 前缀匹配: "问题四十二" 匹配 "问题四十二" 等
|
|
1996
2014
|
if (p.label.toLowerCase().startsWith(lower + "("))
|
|
1997
2015
|
matched = true;
|
|
1998
2016
|
// 完整 title 的包含匹配(title 是长描述,子串匹配合理)
|
|
@@ -2208,8 +2226,10 @@ async function cmdNext() {
|
|
|
2208
2226
|
confidence: plan.confidence,
|
|
2209
2227
|
stage_evidence: plan.stage_evidence,
|
|
2210
2228
|
blocking_reasons: plan.blocking_reasons,
|
|
2229
|
+
warnings: plan.warnings,
|
|
2211
2230
|
recommended_commands: plan.recommended_commands,
|
|
2212
2231
|
recommended_prompt: plan.recommended_prompt_zh,
|
|
2232
|
+
project_knowledge_context: plan.project_knowledge_context,
|
|
2213
2233
|
disallowed_next_actions: plan.disallowed_actions.map((da) => ({
|
|
2214
2234
|
rule_id: da.rule_id,
|
|
2215
2235
|
blocked_actions: da.blocked_actions,
|
|
@@ -2245,6 +2265,22 @@ async function cmdNext() {
|
|
|
2245
2265
|
userInfo(` - ${ev}`);
|
|
2246
2266
|
}
|
|
2247
2267
|
}
|
|
2268
|
+
if (plan.warnings.length > 0) {
|
|
2269
|
+
userInfo(`\n提示:`);
|
|
2270
|
+
for (const warning of plan.warnings) {
|
|
2271
|
+
userInfo(` - [${warning.code}] ${warning.message_zh}`);
|
|
2272
|
+
}
|
|
2273
|
+
}
|
|
2274
|
+
if (plan.project_knowledge_context && plan.project_knowledge_context.total > 0) {
|
|
2275
|
+
userInfo(`\n项目规则上下文:`);
|
|
2276
|
+
userInfo(` 项目知识: ${plan.project_knowledge_context.total} 条,hard_fail: ${plan.project_knowledge_context.hard_fail_count}`);
|
|
2277
|
+
if (plan.project_knowledge_context.selected.length > 0) {
|
|
2278
|
+
userInfo(" 下一步会优先参考:");
|
|
2279
|
+
for (const item of plan.project_knowledge_context.selected) {
|
|
2280
|
+
userInfo(` - ${item.name} (${item.rel_path}, ${item.consumption})`);
|
|
2281
|
+
}
|
|
2282
|
+
}
|
|
2283
|
+
}
|
|
2248
2284
|
// 陈旧任务
|
|
2249
2285
|
if (plan.stale_task?.is_stale) {
|
|
2250
2286
|
userInfo(`\n⚠️ 检测到陈旧任务: ${plan.stale_task.reason_zh}`);
|
|
@@ -2563,6 +2599,7 @@ async function cmdAuditTemplateVisibility() {
|
|
|
2563
2599
|
const isJson = args.includes("--json");
|
|
2564
2600
|
const result = {
|
|
2565
2601
|
total_assets: report.total_assets,
|
|
2602
|
+
registered_contracts: coverageReport.total_contracts,
|
|
2566
2603
|
contract_covered: coverageReport.contract_covered,
|
|
2567
2604
|
uncovered_assets: coverageReport.uncovered,
|
|
2568
2605
|
user_visible_count: userVisibleCount,
|
|
@@ -2574,6 +2611,8 @@ async function cmdAuditTemplateVisibility() {
|
|
|
2574
2611
|
missing_consumer: report.missing_consumer,
|
|
2575
2612
|
missing_owner: report.missing_owner,
|
|
2576
2613
|
unregistered: report.unregistered_assets,
|
|
2614
|
+
consumption_evidence_verified: coverageReport.consumption_evidence_verified,
|
|
2615
|
+
consumption_evidence_failures: coverageReport.consumption_evidence_failures,
|
|
2577
2616
|
};
|
|
2578
2617
|
if (isJson) {
|
|
2579
2618
|
userJson(JSON.stringify(result, null, 2));
|
|
@@ -2581,6 +2620,7 @@ async function cmdAuditTemplateVisibility() {
|
|
|
2581
2620
|
else {
|
|
2582
2621
|
userInfo("═══ 模板资产可见性审计报告 ═══");
|
|
2583
2622
|
userInfo(`总资产数: ${report.total_assets}`);
|
|
2623
|
+
userInfo(`注册合同数: ${coverageReport.total_contracts}(包含非文件运行时资产)`);
|
|
2584
2624
|
userInfo(`合同覆盖: ${coverageReport.contract_covered}`);
|
|
2585
2625
|
userInfo(`未覆盖: ${coverageReport.uncovered}`);
|
|
2586
2626
|
userInfo(`用户可见: ${userVisibleCount}`);
|
|
@@ -2591,6 +2631,48 @@ async function cmdAuditTemplateVisibility() {
|
|
|
2591
2631
|
userInfo(`缺消费者: ${report.missing_consumer}`);
|
|
2592
2632
|
userInfo(`缺 owner: ${report.missing_owner}`);
|
|
2593
2633
|
userInfo(`未注册: ${report.unregistered_assets}`);
|
|
2634
|
+
userInfo(`消费证据验证: ${coverageReport.consumption_evidence_verified ? "通过" : "失败"}`);
|
|
2635
|
+
for (const failure of coverageReport.consumption_evidence_failures) {
|
|
2636
|
+
userInfo(` - ${failure}`);
|
|
2637
|
+
}
|
|
2638
|
+
}
|
|
2639
|
+
}
|
|
2640
|
+
async function cmdAuditProjectKnowledge() {
|
|
2641
|
+
const projectPathArg = getArgValue("--project-path");
|
|
2642
|
+
const projectPath = projectPathArg ? path.resolve(projectPathArg) : (process.env.SOLOFORGE_PROJECT ?? process.cwd());
|
|
2643
|
+
const { auditProjectKnowledge } = await import("../engine/project_knowledge_contract.js");
|
|
2644
|
+
const { userInfo, userJson } = await import("../engine/logger.js");
|
|
2645
|
+
const isJson = args.includes("--json");
|
|
2646
|
+
const { config } = await resolveProjectConfig(projectPath, { quiet: isJson });
|
|
2647
|
+
const report = auditProjectKnowledge(projectPath, config);
|
|
2648
|
+
if (isJson) {
|
|
2649
|
+
userJson(JSON.stringify(report, null, 2));
|
|
2650
|
+
return;
|
|
2651
|
+
}
|
|
2652
|
+
userInfo(`用户项目知识审计: ${projectPath}`);
|
|
2653
|
+
userInfo(` 总数: ${report.total}`);
|
|
2654
|
+
userInfo(` 用户自建: ${report.user_authored}`);
|
|
2655
|
+
userInfo(` 内置同步: ${report.builtin_synced}`);
|
|
2656
|
+
userInfo(` 用户修改内置: ${report.user_modified_builtin}`);
|
|
2657
|
+
userInfo(` 冲突: ${report.conflict}`);
|
|
2658
|
+
userInfo(` hard_rule: ${report.hard_rule}`);
|
|
2659
|
+
userInfo(` injectable: ${report.injectable}`);
|
|
2660
|
+
userInfo(` index_only: ${report.index_only}`);
|
|
2661
|
+
userInfo(` hard_fail: ${report.hard_fail_count}`);
|
|
2662
|
+
userInfo(` warning: ${report.warning_count}`);
|
|
2663
|
+
for (const asset of report.assets) {
|
|
2664
|
+
if (asset.findings.length === 0)
|
|
2665
|
+
continue;
|
|
2666
|
+
userInfo(` - ${asset.rel_path} (${asset.identity}/${asset.consumption})`);
|
|
2667
|
+
for (const finding of asset.findings) {
|
|
2668
|
+
const mark = finding.severity === "hard_fail" ? "❌" : finding.severity === "warning" ? "⚠️" : "ℹ️";
|
|
2669
|
+
userInfo(` ${mark} [${finding.code}] ${finding.message_zh}`);
|
|
2670
|
+
}
|
|
2671
|
+
}
|
|
2672
|
+
if (report.recommended_next_steps.length > 0) {
|
|
2673
|
+
userInfo(" 下一步:");
|
|
2674
|
+
for (const step of report.recommended_next_steps)
|
|
2675
|
+
userInfo(` - ${step}`);
|
|
2594
2676
|
}
|
|
2595
2677
|
}
|
|
2596
2678
|
//# sourceMappingURL=soloforge.js.map
|