soloforge 1.4.2 → 1.4.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/adapters/claude_code/tools.d.ts.map +1 -1
- package/dist/adapters/claude_code/tools.js +122 -3
- package/dist/adapters/claude_code/tools.js.map +1 -1
- package/dist/bin/soloforge.d.ts.map +1 -1
- package/dist/bin/soloforge.js +126 -62
- package/dist/bin/soloforge.js.map +1 -1
- package/dist/engine/asset_manifest.js +1 -1
- 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 +1 -0
- package/dist/engine/consumable_asset_registry.js.map +1 -1
- package/dist/engine/control_plane_contract.d.ts.map +1 -1
- package/dist/engine/control_plane_contract.js +1 -0
- package/dist/engine/control_plane_contract.js.map +1 -1
- package/dist/engine/decision_workshop.d.ts +8 -0
- package/dist/engine/decision_workshop.d.ts.map +1 -1
- package/dist/engine/decision_workshop.js +116 -6
- package/dist/engine/decision_workshop.js.map +1 -1
- package/dist/engine/design_artifact_pack.d.ts +4 -0
- package/dist/engine/design_artifact_pack.d.ts.map +1 -1
- package/dist/engine/design_artifact_pack.js +22 -0
- package/dist/engine/design_artifact_pack.js.map +1 -1
- package/dist/engine/diagnostic_registry.d.ts +4 -0
- package/dist/engine/diagnostic_registry.d.ts.map +1 -1
- package/dist/engine/diagnostic_registry.js +24 -0
- package/dist/engine/diagnostic_registry.js.map +1 -1
- package/dist/engine/explicit_asset_registry.d.ts.map +1 -1
- package/dist/engine/explicit_asset_registry.js +16 -0
- package/dist/engine/explicit_asset_registry.js.map +1 -1
- package/dist/engine/historical_issue_mechanization_matrix.js +8 -8
- package/dist/engine/historical_issue_mechanization_matrix.js.map +1 -1
- package/dist/engine/implementation_roadmap_registry.d.ts.map +1 -1
- package/dist/engine/implementation_roadmap_registry.js +16 -2
- package/dist/engine/implementation_roadmap_registry.js.map +1 -1
- package/dist/engine/next_action_planner.d.ts +9 -4
- package/dist/engine/next_action_planner.d.ts.map +1 -1
- package/dist/engine/next_action_planner.js +33 -0
- package/dist/engine/next_action_planner.js.map +1 -1
- package/dist/engine/release_issue_scenario_registry.d.ts.map +1 -1
- package/dist/engine/release_issue_scenario_registry.js +21 -7
- package/dist/engine/release_issue_scenario_registry.js.map +1 -1
- package/dist/engine/release_readiness_gate.d.ts.map +1 -1
- package/dist/engine/release_readiness_gate.js +86 -6
- package/dist/engine/release_readiness_gate.js.map +1 -1
- package/dist/engine/traceability.d.ts +42 -0
- package/dist/engine/traceability.d.ts.map +1 -1
- package/dist/engine/traceability.js +250 -0
- package/dist/engine/traceability.js.map +1 -1
- package/dist/types.d.ts +11 -0
- package/dist/types.d.ts.map +1 -1
- package/package.json +1 -1
- package/templates/knowledge/acceptance_templates//351/234/200/346/261/202/345/216/237/345/236/213/350/256/276/350/256/241/345/256/236/347/216/260/350/277/275/350/270/252/347/237/251/351/230/265/346/250/241/347/211/210.md +98 -0
- package/templates/knowledge/procedures//345/205/250/347/224/237/345/221/275/345/221/250/346/234/237/345/267/245/344/275/234/346/265/201/345/257/274/350/210/252.md +13 -0
- package/templates/knowledge/rules//345/267/245/344/275/234/346/265/201/345/257/274/350/210/252/345/245/221/347/272/246/350/247/204/345/210/231.md +12 -0
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tools.d.ts","sourceRoot":"","sources":["../../../src/adapters/claude_code/tools.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AACzE,OAAO,KAAK,EAAE,aAAa,EAAkB,WAAW,EAAE,MAAM,gBAAgB,CAAC;AACjF,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,kCAAkC,CAAC;AAE9E,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,6BAA6B,CAAC;AAG9D,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,8BAA8B,CAAC;AAEvE,OAAO,EAOL,KAAK,UAAU,EAKhB,MAAM,mDAAmD,CAAC;
|
|
1
|
+
{"version":3,"file":"tools.d.ts","sourceRoot":"","sources":["../../../src/adapters/claude_code/tools.ts"],"names":[],"mappings":"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"}
|
|
@@ -85,6 +85,7 @@ const lazyNavigation = createLazy(() => import("../../engine/next_action_planner
|
|
|
85
85
|
const lazyOodSolid = createLazy(() => import("../../engine/ood_solid_contract.js"));
|
|
86
86
|
const lazyBackendImplementation = createLazy(() => import("../../engine/backend_implementation_contract.js"));
|
|
87
87
|
const lazyCodeObservability = createLazy(() => import("../../engine/code_maintainability_observability_contract.js"));
|
|
88
|
+
const lazyTraceability = createLazy(() => import("../../engine/traceability.js"));
|
|
88
89
|
const ARCHITECTURE_CONTEXT_PATTERN = /架构|architecture|系统设计|技术方案|现有系统|差距分析|gap.?analysis/i;
|
|
89
90
|
function stripPathLikeReferences(text) {
|
|
90
91
|
return text.replace(/(^|[\s"'((])(?:~\/|\.{1,2}\/|\/|[A-Za-z0-9_.-]+\/)[^\s"',。;,;::))]+/g, "$1 ");
|
|
@@ -1429,8 +1430,9 @@ export async function registerTools(server, deps) {
|
|
|
1429
1430
|
}
|
|
1430
1431
|
if (existingArchitectureWorkshop.value)
|
|
1431
1432
|
ctx.architecture_decision_workshop = existingArchitectureWorkshop.value;
|
|
1432
|
-
if (existingDecisionWorkshop.value)
|
|
1433
|
-
ctx.decision_workshop = existingDecisionWorkshop.value;
|
|
1433
|
+
if (existingDecisionWorkshop.value) {
|
|
1434
|
+
ctx.decision_workshop = (await lazyDecisionWorkshop()).normalizeDecisionWorkshopContract(existingDecisionWorkshop.value, args.task_id) ?? existingDecisionWorkshop.value;
|
|
1435
|
+
}
|
|
1434
1436
|
if (args.architecture_decision_workshop) {
|
|
1435
1437
|
const parsed = parseContractObject(args.architecture_decision_workshop, "architecture_decision_workshop");
|
|
1436
1438
|
if (parsed.error)
|
|
@@ -1441,7 +1443,7 @@ export async function registerTools(server, deps) {
|
|
|
1441
1443
|
const parsed = parseContractObject(args.decision_workshop, "decision_workshop");
|
|
1442
1444
|
if (parsed.error)
|
|
1443
1445
|
return { result: { error: parsed.error, status: "invalid_input" } };
|
|
1444
|
-
ctx.decision_workshop = parsed.value;
|
|
1446
|
+
ctx.decision_workshop = (await lazyDecisionWorkshop()).normalizeDecisionWorkshopContract(parsed.value, args.task_id) ?? parsed.value;
|
|
1445
1447
|
}
|
|
1446
1448
|
if (args.design_artifact_pack) {
|
|
1447
1449
|
ctx.design_artifact_pack = args.design_artifact_pack;
|
|
@@ -1834,6 +1836,89 @@ export async function registerTools(server, deps) {
|
|
|
1834
1836
|
{
|
|
1835
1837
|
const preImplementationBlocks = [];
|
|
1836
1838
|
const preImplementationPayload = {};
|
|
1839
|
+
const artifactDesignIntent = expansionRoute === "artifact_generation"
|
|
1840
|
+
|| ["architecture_design", "database_design", "api_design", "detailed_design"].includes(String(workflowIntent))
|
|
1841
|
+
|| /(?:架构|数据库|API|接口|OpenAPI).{0,12}(?:设计|规格|文档)|(?:设计|规格|文档).{0,12}(?:API|接口|OpenAPI)/i.test(ctx.intent);
|
|
1842
|
+
const isImplementationRoute = !artifactDesignIntent && (expansionRoute === "code_change"
|
|
1843
|
+
|| String(workflowIntent) === "backend_api_implementation"
|
|
1844
|
+
|| String(workflowIntent) === "frontend_business_logic"
|
|
1845
|
+
|| /编码|实现|开发|controller|service|component/i.test(ctx.intent));
|
|
1846
|
+
const traceabilityModule = await lazyTraceability();
|
|
1847
|
+
const traceReport = isImplementationRoute
|
|
1848
|
+
? traceabilityModule.auditDesignImplementationTraceability(projectPath)
|
|
1849
|
+
: {
|
|
1850
|
+
passed: true,
|
|
1851
|
+
matrix_exists: false,
|
|
1852
|
+
findings: [],
|
|
1853
|
+
checked_files: [],
|
|
1854
|
+
matrix_path: traceabilityModule.DEFAULT_DESIGN_IMPLEMENTATION_TRACEABILITY_PATH,
|
|
1855
|
+
};
|
|
1856
|
+
if (isImplementationRoute && !traceReport.passed) {
|
|
1857
|
+
ctx.traceability_binding = {
|
|
1858
|
+
requirement_ids: [],
|
|
1859
|
+
prototype_ids: [],
|
|
1860
|
+
architecture_ids: [],
|
|
1861
|
+
detail_design_ids: [],
|
|
1862
|
+
slice_ids: [],
|
|
1863
|
+
acceptance_ids: [],
|
|
1864
|
+
status: "needs_backfill",
|
|
1865
|
+
findings: traceReport.findings.map((finding) => `${finding.code}: ${finding.message_zh}`),
|
|
1866
|
+
};
|
|
1867
|
+
await taskContext.save(ctx);
|
|
1868
|
+
return {
|
|
1869
|
+
result: {
|
|
1870
|
+
error: "需求/原型/设计/切片/验收追踪链路未闭合,不得进入编码实现",
|
|
1871
|
+
status: "blocked",
|
|
1872
|
+
diagnostic_code: TOOL_DIAGNOSTIC_CODES.traceabilityMissing,
|
|
1873
|
+
traceability_findings: traceReport.findings,
|
|
1874
|
+
checked_files: traceReport.checked_files,
|
|
1875
|
+
matrix_path: traceReport.matrix_path,
|
|
1876
|
+
template_path: traceabilityModule.DESIGN_IMPLEMENTATION_TRACEABILITY_TEMPLATE_PATH,
|
|
1877
|
+
recovery_command: traceabilityModule.DESIGN_IMPLEMENTATION_TRACEABILITY_RECOVERY_COMMAND,
|
|
1878
|
+
recovery: `${traceabilityModule.DESIGN_IMPLEMENTATION_TRACEABILITY_RECOVERY_GUIDANCE}。不得取消任务后直接写代码,不得改用 Bash 绕过追踪矩阵。`,
|
|
1879
|
+
},
|
|
1880
|
+
};
|
|
1881
|
+
}
|
|
1882
|
+
const traceBindingIds = traceabilityModule.extractTraceabilityBindingIds(ctx);
|
|
1883
|
+
if (traceReport.matrix_exists && isImplementationRoute) {
|
|
1884
|
+
const missingPrefixes = ["SLICE", "DD", "AC"].filter((prefix) => !traceBindingIds.some((id) => id.startsWith(`${prefix}-`)));
|
|
1885
|
+
if (missingPrefixes.length > 0) {
|
|
1886
|
+
ctx.traceability_binding = {
|
|
1887
|
+
requirement_ids: traceBindingIds.filter((id) => id.startsWith("REQ-")),
|
|
1888
|
+
prototype_ids: traceBindingIds.filter((id) => id.startsWith("PROTO-")),
|
|
1889
|
+
architecture_ids: traceBindingIds.filter((id) => id.startsWith("ARCH-")),
|
|
1890
|
+
detail_design_ids: traceBindingIds.filter((id) => id.startsWith("DD-")),
|
|
1891
|
+
slice_ids: traceBindingIds.filter((id) => id.startsWith("SLICE-")),
|
|
1892
|
+
acceptance_ids: traceBindingIds.filter((id) => id.startsWith("AC-")),
|
|
1893
|
+
status: "missing",
|
|
1894
|
+
findings: missingPrefixes.map((prefix) => `编码前缺少 ${prefix}-* 绑定`),
|
|
1895
|
+
};
|
|
1896
|
+
await taskContext.save(ctx);
|
|
1897
|
+
return {
|
|
1898
|
+
result: {
|
|
1899
|
+
error: "编码任务必须先绑定切片、详细设计和验收 ID",
|
|
1900
|
+
status: "awaiting_traceability_binding",
|
|
1901
|
+
diagnostic_code: TOOL_DIAGNOSTIC_CODES.traceabilityBindingMissing,
|
|
1902
|
+
missing_prefixes: missingPrefixes,
|
|
1903
|
+
matrix_path: traceReport.matrix_path,
|
|
1904
|
+
template_path: traceabilityModule.DESIGN_IMPLEMENTATION_TRACEABILITY_TEMPLATE_PATH,
|
|
1905
|
+
recovery_command: "sf_expand",
|
|
1906
|
+
recovery: "在任务上下文或指令中明确本次实现对应的 SLICE-*、DD-*、AC-*,再重新调用 sf_expand;不得脱离已确认设计直接编码,不得取消任务后改用 Bash/Edit/Write 直接实现",
|
|
1907
|
+
},
|
|
1908
|
+
};
|
|
1909
|
+
}
|
|
1910
|
+
ctx.traceability_binding = {
|
|
1911
|
+
requirement_ids: traceBindingIds.filter((id) => id.startsWith("REQ-")),
|
|
1912
|
+
prototype_ids: traceBindingIds.filter((id) => id.startsWith("PROTO-")),
|
|
1913
|
+
architecture_ids: traceBindingIds.filter((id) => id.startsWith("ARCH-")),
|
|
1914
|
+
detail_design_ids: traceBindingIds.filter((id) => id.startsWith("DD-")),
|
|
1915
|
+
slice_ids: traceBindingIds.filter((id) => id.startsWith("SLICE-")),
|
|
1916
|
+
acceptance_ids: traceBindingIds.filter((id) => id.startsWith("AC-")),
|
|
1917
|
+
status: "bound",
|
|
1918
|
+
findings: [],
|
|
1919
|
+
};
|
|
1920
|
+
preImplementationPayload.traceability_binding = ctx.traceability_binding;
|
|
1921
|
+
}
|
|
1837
1922
|
const oodModule = await lazyOodSolid();
|
|
1838
1923
|
const oodGate = oodModule.evaluateOodDesignGate({
|
|
1839
1924
|
task_id: args.task_id,
|
|
@@ -2122,6 +2207,30 @@ export async function registerTools(server, deps) {
|
|
|
2122
2207
|
// 文件缺失会由验证命令或现有产物检查报告。
|
|
2123
2208
|
}
|
|
2124
2209
|
}
|
|
2210
|
+
const traceabilityModule = await lazyTraceability();
|
|
2211
|
+
const traceVerification = traceabilityModule.verifyChangedFilesAgainstDesignTraceability(projectPath, implementationFiles, ctx);
|
|
2212
|
+
if (!traceVerification.passed) {
|
|
2213
|
+
ctx.traceability_binding = {
|
|
2214
|
+
requirement_ids: traceVerification.binding_ids.filter((id) => id.startsWith("REQ-")),
|
|
2215
|
+
prototype_ids: traceVerification.binding_ids.filter((id) => id.startsWith("PROTO-")),
|
|
2216
|
+
architecture_ids: traceVerification.binding_ids.filter((id) => id.startsWith("ARCH-")),
|
|
2217
|
+
detail_design_ids: traceVerification.binding_ids.filter((id) => id.startsWith("DD-")),
|
|
2218
|
+
slice_ids: traceVerification.binding_ids.filter((id) => id.startsWith("SLICE-")),
|
|
2219
|
+
acceptance_ids: traceVerification.binding_ids.filter((id) => id.startsWith("AC-")),
|
|
2220
|
+
status: "missing",
|
|
2221
|
+
findings: traceVerification.findings.map((finding) => `${finding.code}: ${finding.message_zh}`),
|
|
2222
|
+
};
|
|
2223
|
+
await taskContext.save(ctx);
|
|
2224
|
+
return {
|
|
2225
|
+
result: {
|
|
2226
|
+
error: "编码变更未绑定需求/原型/设计/切片/验收追踪链路,需修复后重验",
|
|
2227
|
+
status: "blocked",
|
|
2228
|
+
diagnostic_code: TOOL_DIAGNOSTIC_CODES.traceabilityVerifyFailed,
|
|
2229
|
+
traceability_findings: traceVerification.findings,
|
|
2230
|
+
recovery: "补齐追踪矩阵并在任务中绑定 SLICE-*、DD-*、AC-* 后重新执行 sf_verify",
|
|
2231
|
+
},
|
|
2232
|
+
};
|
|
2233
|
+
}
|
|
2125
2234
|
const oodModule = await lazyOodSolid();
|
|
2126
2235
|
const oodGate = oodModule.evaluateOodDesignGate({
|
|
2127
2236
|
task_id: args.task_id,
|
|
@@ -3302,6 +3411,16 @@ export async function registerTools(server, deps) {
|
|
|
3302
3411
|
},
|
|
3303
3412
|
};
|
|
3304
3413
|
}
|
|
3414
|
+
if (ctx.traceability_binding && ctx.traceability_binding.status !== "bound") {
|
|
3415
|
+
return {
|
|
3416
|
+
result: {
|
|
3417
|
+
error: "追踪绑定未闭合,不得交付编码结果",
|
|
3418
|
+
diagnostic_code: TOOL_DIAGNOSTIC_CODES.traceabilityDeliveryBlocked,
|
|
3419
|
+
traceability_binding: ctx.traceability_binding,
|
|
3420
|
+
recovery: "补齐需求/原型/设计/切片/验收追踪矩阵并重新 sf_expand → sf_verify,通过后再 sf_deliver",
|
|
3421
|
+
},
|
|
3422
|
+
};
|
|
3423
|
+
}
|
|
3305
3424
|
// 交付 lease 互斥检查
|
|
3306
3425
|
const leaseModule = await lazyWorkspaceLease();
|
|
3307
3426
|
const deliverLease = leaseModule.acquireLease(args.task_id, "delivery", [projectPath]);
|