soloforge 1.4.12 → 1.4.13

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.
@@ -1 +1 @@
1
- {"version":3,"file":"tools.d.ts","sourceRoot":"","sources":["../../../src/adapters/claude_code/tools.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"tools.d.ts","sourceRoot":"","sources":["../../../src/adapters/claude_code/tools.ts"],"names":[],"mappings":"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"}
@@ -528,7 +528,7 @@ export async function checkLocalAcceptanceGate(params) {
528
528
  const HIGH_IMPACT_KEYWORDS = /架构|技术选型|数据库|框架|多端|跨模块|高影响|高风险|migration|技术路线|选型|rework/i;
529
529
  const UNCERTAINTY_KEYWORDS = /不确定|方案选择|多选项|权衡|脑暴|brainstorm|多方案|选型|比较/i;
530
530
  const DETAIL_INTENSIVE_KEYWORDS = /多步骤|复杂|跨模块|高风险|多端|分布式|微服务/i;
531
- const LOW_RISK_ROUTES = new Set(["skip_chat", "direct_answer", "operation", "planning", "review", "source_extraction"]);
531
+ const LOW_RISK_ROUTES = new Set(["skip_chat", "direct_answer", "operation", "planning", "review", "source_extraction", "acceptance"]);
532
532
  /** 技术选型/架构/数据库/框架/高影响决策 → 需 decision sovereignty gate */
533
533
  export function requiresDecisionSovereignty(ctx, route) {
534
534
  if (!ctx)
@@ -1835,226 +1835,231 @@ export async function registerTools(server, deps) {
1835
1835
  }
1836
1836
  }
1837
1837
  }
1838
- // ── S4 gates: 独立于 hasInstructionContract,由 requires* 触发判定 ──
1839
- // 问题十六: 技术选型决策主权 gate 高影响技术决策缺证据时 blocked
1840
- {
1841
- const decisionGate = await checkDecisionSovereigntyGate({ ctx, route: expansionRoute });
1842
- if (!decisionGate.allowed) {
1843
- return {
1844
- result: {
1845
- error: decisionGate.reason_zh,
1846
- status: "blocked",
1847
- expected_schema: decisionGate.expected_schema,
1848
- recovery: decisionGate.requires_human_gate ? "请提供技术决策确认证据(human_gate_evidence)" : "技术选型决策校验失败,请按照 expected_schema 格式提供 technology_decision_contract",
1849
- },
1850
- };
1851
- }
1852
- }
1853
- // 问题二十六: 细节纪律 gate — 复杂任务缺关键细节时 blocked
1854
- {
1855
- const detailGate = await checkDetailDisciplineGate({ ctx, route: expansionRoute });
1856
- if (!detailGate.allowed) {
1857
- return {
1858
- result: {
1859
- error: detailGate.reason_zh,
1860
- missing_details: detailGate.missing_details,
1861
- status: "blocked",
1862
- recovery: "多步骤/复杂任务缺 detail_discipline_contract,请提供后重新 sf_expand",
1863
- },
1864
- };
1838
+ // ── S4 gates: 轻量路径(acceptance/review/read_only)整体跳过 ──
1839
+ const isLightweightRoute = expansionRoute === "acceptance" || expansionRoute === "review"
1840
+ || expansionRoute === "direct_answer" || expansionRoute === "analysis";
1841
+ if (!isLightweightRoute) {
1842
+ // ── S4 gates: 独立于 hasInstructionContract,由 requires* 触发判定 ──
1843
+ // 问题十六: 技术选型决策主权 gate — 高影响技术决策缺证据时 blocked
1844
+ {
1845
+ const decisionGate = await checkDecisionSovereigntyGate({ ctx, route: expansionRoute });
1846
+ if (!decisionGate.allowed) {
1847
+ return {
1848
+ result: {
1849
+ error: decisionGate.reason_zh,
1850
+ status: "blocked",
1851
+ expected_schema: decisionGate.expected_schema,
1852
+ recovery: decisionGate.requires_human_gate ? "请提供技术决策确认证据(human_gate_evidence)" : "技术选型决策校验失败,请按照 expected_schema 格式提供 technology_decision_contract",
1853
+ },
1854
+ };
1855
+ }
1865
1856
  }
1866
- }
1867
- // 问题二十七: 第一性原理 gate — 高影响任务缺推理时 blocked
1868
- {
1869
- const fpGate = await checkFirstPrinciplesGate({ ctx, route: expansionRoute });
1870
- if (!fpGate.allowed) {
1871
- return {
1872
- result: {
1873
- error: fpGate.reason_zh,
1874
- failures: fpGate.failures,
1875
- expected_schema: fpGate.expected_schema,
1876
- status: "blocked",
1877
- recovery: "高影响任务缺 first_principles_frame,请按照 expected_schema 格式提供后重新 sf_expand",
1878
- },
1879
- };
1857
+ // 问题二十六: 细节纪律 gate — 复杂任务缺关键细节时 blocked
1858
+ {
1859
+ const detailGate = await checkDetailDisciplineGate({ ctx, route: expansionRoute });
1860
+ if (!detailGate.allowed) {
1861
+ return {
1862
+ result: {
1863
+ error: detailGate.reason_zh,
1864
+ missing_details: detailGate.missing_details,
1865
+ status: "blocked",
1866
+ recovery: "多步骤/复杂任务缺 detail_discipline_contract,请提供后重新 sf_expand",
1867
+ },
1868
+ };
1869
+ }
1880
1870
  }
1881
- }
1882
- // 问题四十二(brainstorm): 脑暴契约 gate — 不确定项缺方案探索时 blocked
1883
- {
1884
- const brainstormGate = await checkBrainstormGate({ ctx, route: expansionRoute });
1885
- if (!brainstormGate.allowed) {
1886
- return {
1887
- result: {
1888
- error: brainstormGate.reason_zh,
1889
- violations: brainstormGate.violations,
1890
- expected_schema: brainstormGate.expected_schema,
1891
- status: "blocked",
1892
- recovery: "不确定项/方案选择缺 brainstorm_session,请按照 expected_schema 格式提供后重新 sf_expand",
1893
- },
1894
- };
1871
+ // 问题二十七: 第一性原理 gate — 高影响任务缺推理时 blocked
1872
+ {
1873
+ const fpGate = await checkFirstPrinciplesGate({ ctx, route: expansionRoute });
1874
+ if (!fpGate.allowed) {
1875
+ return {
1876
+ result: {
1877
+ error: fpGate.reason_zh,
1878
+ failures: fpGate.failures,
1879
+ expected_schema: fpGate.expected_schema,
1880
+ status: "blocked",
1881
+ recovery: "高影响任务缺 first_principles_frame,请按照 expected_schema 格式提供后重新 sf_expand",
1882
+ },
1883
+ };
1884
+ }
1895
1885
  }
1896
- }
1897
- // 问题六十六/六十七/六十八: 编码前工程约束必须聚合返回。
1898
- // 不能让 OOD 或后端工程门禁抢先返回,遮蔽用户项目的注释/日志契约。
1899
- {
1900
- const preImplementationBlocks = [];
1901
- const preImplementationPayload = {};
1902
- const artifactDesignIntent = expansionRoute === "artifact_generation"
1903
- || ["architecture_design", "database_design", "api_design", "detailed_design"].includes(String(workflowIntent))
1904
- || /(?:架构|数据库|API|接口|OpenAPI).{0,12}(?:设计|规格|文档)|(?:设计|规格|文档).{0,12}(?:API|接口|OpenAPI)/i.test(ctx.intent);
1905
- const isImplementationRoute = !artifactDesignIntent && (expansionRoute === "code_change"
1906
- || String(workflowIntent) === "backend_api_implementation"
1907
- || String(workflowIntent) === "frontend_business_logic"
1908
- || /编码|实现|开发|controller|service|component/i.test(ctx.intent));
1909
- const traceabilityModule = await lazyTraceability();
1910
- const traceReport = isImplementationRoute
1911
- ? traceabilityModule.auditDesignImplementationTraceability(projectPath)
1912
- : {
1913
- passed: true,
1914
- matrix_exists: false,
1915
- findings: [],
1916
- checked_files: [],
1917
- matrix_path: traceabilityModule.DEFAULT_DESIGN_IMPLEMENTATION_TRACEABILITY_PATH,
1918
- };
1919
- if (isImplementationRoute && !traceReport.passed) {
1920
- ctx.traceability_binding = {
1921
- requirement_ids: [],
1922
- prototype_ids: [],
1923
- architecture_ids: [],
1924
- detail_design_ids: [],
1925
- phase_ids: [],
1926
- slice_ids: [],
1927
- acceptance_ids: [],
1928
- status: "needs_backfill",
1929
- findings: traceReport.findings.map((finding) => `${finding.code}: ${finding.message_zh}`),
1930
- };
1931
- await taskContext.save(ctx);
1932
- return {
1933
- result: {
1934
- error: "需求/原型/设计/切片/验收追踪链路未闭合,不得进入编码实现",
1935
- status: "blocked",
1936
- diagnostic_code: TOOL_DIAGNOSTIC_CODES.traceabilityMissing,
1937
- traceability_findings: traceReport.findings,
1938
- checked_files: traceReport.checked_files,
1939
- matrix_path: traceReport.matrix_path,
1940
- template_path: traceabilityModule.DESIGN_IMPLEMENTATION_TRACEABILITY_TEMPLATE_PATH,
1941
- recovery_command: traceabilityModule.DESIGN_IMPLEMENTATION_TRACEABILITY_RECOVERY_COMMAND,
1942
- recovery: `${traceabilityModule.DESIGN_IMPLEMENTATION_TRACEABILITY_RECOVERY_GUIDANCE}。不得取消任务后直接写代码,不得改用 Bash 绕过追踪矩阵。`,
1943
- },
1944
- };
1886
+ // 问题四十二(brainstorm): 脑暴契约 gate — 不确定项缺方案探索时 blocked
1887
+ {
1888
+ const brainstormGate = await checkBrainstormGate({ ctx, route: expansionRoute });
1889
+ if (!brainstormGate.allowed) {
1890
+ return {
1891
+ result: {
1892
+ error: brainstormGate.reason_zh,
1893
+ violations: brainstormGate.violations,
1894
+ expected_schema: brainstormGate.expected_schema,
1895
+ status: "blocked",
1896
+ recovery: "不确定项/方案选择缺 brainstorm_session,请按照 expected_schema 格式提供后重新 sf_expand",
1897
+ },
1898
+ };
1899
+ }
1945
1900
  }
1946
- const traceBindingIds = traceabilityModule.extractTraceabilityBindingIds(ctx);
1947
- if (traceReport.matrix_exists && isImplementationRoute) {
1948
- const missingPrefixes = ["PHASE", "SLICE", "DD", "AC"].filter((prefix) => !traceBindingIds.some((id) => id.startsWith(`${prefix}-`)));
1949
- if (missingPrefixes.length > 0) {
1901
+ // 问题六十六/六十七/六十八: 编码前工程约束必须聚合返回。
1902
+ // 不能让 OOD 或后端工程门禁抢先返回,遮蔽用户项目的注释/日志契约。
1903
+ {
1904
+ const preImplementationBlocks = [];
1905
+ const preImplementationPayload = {};
1906
+ const artifactDesignIntent = expansionRoute === "artifact_generation"
1907
+ || ["architecture_design", "database_design", "api_design", "detailed_design"].includes(String(workflowIntent))
1908
+ || /(?:架构|数据库|API|接口|OpenAPI).{0,12}(?:设计|规格|文档)|(?:设计|规格|文档).{0,12}(?:API|接口|OpenAPI)/i.test(ctx.intent);
1909
+ const isImplementationRoute = !artifactDesignIntent && (expansionRoute === "code_change"
1910
+ || String(workflowIntent) === "backend_api_implementation"
1911
+ || String(workflowIntent) === "frontend_business_logic"
1912
+ || /编码|实现|开发|controller|service|component/i.test(ctx.intent));
1913
+ const traceabilityModule = await lazyTraceability();
1914
+ const traceReport = isImplementationRoute
1915
+ ? traceabilityModule.auditDesignImplementationTraceability(projectPath)
1916
+ : {
1917
+ passed: true,
1918
+ matrix_exists: false,
1919
+ findings: [],
1920
+ checked_files: [],
1921
+ matrix_path: traceabilityModule.DEFAULT_DESIGN_IMPLEMENTATION_TRACEABILITY_PATH,
1922
+ };
1923
+ if (isImplementationRoute && !traceReport.passed) {
1950
1924
  ctx.traceability_binding = {
1951
- requirement_ids: traceBindingIds.filter((id) => id.startsWith("REQ-")),
1952
- prototype_ids: traceBindingIds.filter((id) => id.startsWith("PROTO-")),
1953
- architecture_ids: traceBindingIds.filter((id) => id.startsWith("ARCH-")),
1954
- detail_design_ids: traceBindingIds.filter((id) => id.startsWith("DD-")),
1955
- phase_ids: traceBindingIds.filter((id) => id.startsWith("PHASE-")),
1956
- slice_ids: traceBindingIds.filter((id) => id.startsWith("SLICE-")),
1957
- acceptance_ids: traceBindingIds.filter((id) => id.startsWith("AC-")),
1958
- status: "missing",
1959
- findings: missingPrefixes.map((prefix) => `编码前缺少 ${prefix}-* 绑定`),
1925
+ requirement_ids: [],
1926
+ prototype_ids: [],
1927
+ architecture_ids: [],
1928
+ detail_design_ids: [],
1929
+ phase_ids: [],
1930
+ slice_ids: [],
1931
+ acceptance_ids: [],
1932
+ status: "needs_backfill",
1933
+ findings: traceReport.findings.map((finding) => `${finding.code}: ${finding.message_zh}`),
1960
1934
  };
1961
1935
  await taskContext.save(ctx);
1962
1936
  return {
1963
1937
  result: {
1964
- error: "编码任务必须先绑定阶段、切片、详细设计和验收 ID",
1965
- status: "awaiting_traceability_binding",
1966
- diagnostic_code: TOOL_DIAGNOSTIC_CODES.traceabilityBindingMissing,
1967
- missing_prefixes: missingPrefixes,
1938
+ error: "需求/原型/设计/切片/验收追踪链路未闭合,不得进入编码实现",
1939
+ status: "blocked",
1940
+ diagnostic_code: TOOL_DIAGNOSTIC_CODES.traceabilityMissing,
1941
+ traceability_findings: traceReport.findings,
1942
+ checked_files: traceReport.checked_files,
1968
1943
  matrix_path: traceReport.matrix_path,
1969
1944
  template_path: traceabilityModule.DESIGN_IMPLEMENTATION_TRACEABILITY_TEMPLATE_PATH,
1970
- recovery_command: "sf_expand",
1971
- recovery: "在任务上下文或指令中明确本次实现对应的 PHASE-*、SLICE-*、DD-*、AC-*,再重新调用 sf_expand;不得脱离已确认设计直接编码,不得取消任务后改用 Bash/Edit/Write 直接实现",
1945
+ recovery_command: traceabilityModule.DESIGN_IMPLEMENTATION_TRACEABILITY_RECOVERY_COMMAND,
1946
+ recovery: `${traceabilityModule.DESIGN_IMPLEMENTATION_TRACEABILITY_RECOVERY_GUIDANCE}。不得取消任务后直接写代码,不得改用 Bash 绕过追踪矩阵。`,
1972
1947
  },
1973
1948
  };
1974
1949
  }
1975
- ctx.traceability_binding = {
1976
- requirement_ids: traceBindingIds.filter((id) => id.startsWith("REQ-")),
1977
- prototype_ids: traceBindingIds.filter((id) => id.startsWith("PROTO-")),
1978
- architecture_ids: traceBindingIds.filter((id) => id.startsWith("ARCH-")),
1979
- detail_design_ids: traceBindingIds.filter((id) => id.startsWith("DD-")),
1980
- phase_ids: traceBindingIds.filter((id) => id.startsWith("PHASE-")),
1981
- slice_ids: traceBindingIds.filter((id) => id.startsWith("SLICE-")),
1982
- acceptance_ids: traceBindingIds.filter((id) => id.startsWith("AC-")),
1983
- status: "bound",
1984
- findings: [],
1985
- };
1986
- preImplementationPayload.traceability_binding = ctx.traceability_binding;
1987
- }
1988
- const oodModule = await lazyOodSolid();
1989
- const oodGate = oodModule.evaluateOodDesignGate({
1990
- task_id: args.task_id,
1991
- intent: ctx.intent,
1992
- route: expansionRoute,
1993
- summary: ctx.ood_solid_summary,
1994
- });
1995
- if (oodGate.applicable) {
1996
- ctx.ood_solid_summary = oodGate.required_summary;
1997
- preImplementationPayload.ood_solid_summary = oodGate.required_summary;
1998
- }
1999
- if (!oodGate.allowed) {
2000
- preImplementationBlocks.push({
2001
- code: TOOL_DIAGNOSTIC_CODES.oodMissingSummary,
2002
- reason_zh: oodGate.reason_zh,
2003
- });
2004
- }
2005
- const backendModule = await lazyBackendImplementation();
2006
- const backendGate = backendModule.evaluateBackendImplementationGate({
2007
- task_id: args.task_id,
2008
- intent: ctx.intent,
2009
- route: expansionRoute,
2010
- work_package: ctx.backend_implementation_work_package,
2011
- });
2012
- if (backendGate.applicable) {
2013
- ctx.backend_implementation_work_package = backendGate.work_package;
2014
- preImplementationPayload.backend_implementation_work_package = backendGate.work_package;
2015
- }
2016
- if (!backendGate.allowed) {
2017
- preImplementationBlocks.push({
2018
- code: TOOL_DIAGNOSTIC_CODES.backendMissingSummary,
2019
- reason_zh: backendGate.reason_zh,
1950
+ const traceBindingIds = traceabilityModule.extractTraceabilityBindingIds(ctx);
1951
+ if (traceReport.matrix_exists && isImplementationRoute) {
1952
+ const missingPrefixes = ["PHASE", "SLICE", "DD", "AC"].filter((prefix) => !traceBindingIds.some((id) => id.startsWith(`${prefix}-`)));
1953
+ if (missingPrefixes.length > 0) {
1954
+ ctx.traceability_binding = {
1955
+ requirement_ids: traceBindingIds.filter((id) => id.startsWith("REQ-")),
1956
+ prototype_ids: traceBindingIds.filter((id) => id.startsWith("PROTO-")),
1957
+ architecture_ids: traceBindingIds.filter((id) => id.startsWith("ARCH-")),
1958
+ detail_design_ids: traceBindingIds.filter((id) => id.startsWith("DD-")),
1959
+ phase_ids: traceBindingIds.filter((id) => id.startsWith("PHASE-")),
1960
+ slice_ids: traceBindingIds.filter((id) => id.startsWith("SLICE-")),
1961
+ acceptance_ids: traceBindingIds.filter((id) => id.startsWith("AC-")),
1962
+ status: "missing",
1963
+ findings: missingPrefixes.map((prefix) => `编码前缺少 ${prefix}-* 绑定`),
1964
+ };
1965
+ await taskContext.save(ctx);
1966
+ return {
1967
+ result: {
1968
+ error: "编码任务必须先绑定阶段、切片、详细设计和验收 ID",
1969
+ status: "awaiting_traceability_binding",
1970
+ diagnostic_code: TOOL_DIAGNOSTIC_CODES.traceabilityBindingMissing,
1971
+ missing_prefixes: missingPrefixes,
1972
+ matrix_path: traceReport.matrix_path,
1973
+ template_path: traceabilityModule.DESIGN_IMPLEMENTATION_TRACEABILITY_TEMPLATE_PATH,
1974
+ recovery_command: "sf_expand",
1975
+ recovery: "在任务上下文或指令中明确本次实现对应的 PHASE-*、SLICE-*、DD-*、AC-*,再重新调用 sf_expand;不得脱离已确认设计直接编码,不得取消任务后改用 Bash/Edit/Write 直接实现",
1976
+ },
1977
+ };
1978
+ }
1979
+ ctx.traceability_binding = {
1980
+ requirement_ids: traceBindingIds.filter((id) => id.startsWith("REQ-")),
1981
+ prototype_ids: traceBindingIds.filter((id) => id.startsWith("PROTO-")),
1982
+ architecture_ids: traceBindingIds.filter((id) => id.startsWith("ARCH-")),
1983
+ detail_design_ids: traceBindingIds.filter((id) => id.startsWith("DD-")),
1984
+ phase_ids: traceBindingIds.filter((id) => id.startsWith("PHASE-")),
1985
+ slice_ids: traceBindingIds.filter((id) => id.startsWith("SLICE-")),
1986
+ acceptance_ids: traceBindingIds.filter((id) => id.startsWith("AC-")),
1987
+ status: "bound",
1988
+ findings: [],
1989
+ };
1990
+ preImplementationPayload.traceability_binding = ctx.traceability_binding;
1991
+ }
1992
+ const oodModule = await lazyOodSolid();
1993
+ const oodGate = oodModule.evaluateOodDesignGate({
1994
+ task_id: args.task_id,
1995
+ intent: ctx.intent,
1996
+ route: expansionRoute,
1997
+ summary: ctx.ood_solid_summary,
2020
1998
  });
2021
- }
2022
- if (ctx.classification.task_type !== "scaffold") {
2023
- const obsModule = await lazyCodeObservability();
2024
- const obsGate = obsModule.evaluateCodeObservabilityGate({
1999
+ if (oodGate.applicable) {
2000
+ ctx.ood_solid_summary = oodGate.required_summary;
2001
+ preImplementationPayload.ood_solid_summary = oodGate.required_summary;
2002
+ }
2003
+ if (!oodGate.allowed) {
2004
+ preImplementationBlocks.push({
2005
+ code: TOOL_DIAGNOSTIC_CODES.oodMissingSummary,
2006
+ reason_zh: oodGate.reason_zh,
2007
+ });
2008
+ }
2009
+ const backendModule = await lazyBackendImplementation();
2010
+ const backendGate = backendModule.evaluateBackendImplementationGate({
2025
2011
  task_id: args.task_id,
2026
2012
  intent: ctx.intent,
2027
2013
  route: expansionRoute,
2028
- changed_files: ctx.execution?.changed_files,
2029
- work_package: ctx.code_observability_work_package,
2014
+ work_package: ctx.backend_implementation_work_package,
2030
2015
  });
2031
- if (obsGate.applicable) {
2032
- ctx.code_observability_work_package = obsGate.work_package;
2033
- preImplementationPayload.code_observability_work_package = obsGate.work_package;
2016
+ if (backendGate.applicable) {
2017
+ ctx.backend_implementation_work_package = backendGate.work_package;
2018
+ preImplementationPayload.backend_implementation_work_package = backendGate.work_package;
2034
2019
  }
2035
- if (!obsGate.allowed) {
2020
+ if (!backendGate.allowed) {
2036
2021
  preImplementationBlocks.push({
2037
- code: TOOL_DIAGNOSTIC_CODES.codeObservabilityWorkPackage,
2038
- reason_zh: obsGate.reason_zh,
2022
+ code: TOOL_DIAGNOSTIC_CODES.backendMissingSummary,
2023
+ reason_zh: backendGate.reason_zh,
2039
2024
  });
2040
2025
  }
2026
+ if (ctx.classification.task_type !== "scaffold") {
2027
+ const obsModule = await lazyCodeObservability();
2028
+ const obsGate = obsModule.evaluateCodeObservabilityGate({
2029
+ task_id: args.task_id,
2030
+ intent: ctx.intent,
2031
+ route: expansionRoute,
2032
+ changed_files: ctx.execution?.changed_files,
2033
+ work_package: ctx.code_observability_work_package,
2034
+ });
2035
+ if (obsGate.applicable) {
2036
+ ctx.code_observability_work_package = obsGate.work_package;
2037
+ preImplementationPayload.code_observability_work_package = obsGate.work_package;
2038
+ }
2039
+ if (!obsGate.allowed) {
2040
+ preImplementationBlocks.push({
2041
+ code: TOOL_DIAGNOSTIC_CODES.codeObservabilityWorkPackage,
2042
+ reason_zh: obsGate.reason_zh,
2043
+ });
2044
+ }
2045
+ }
2046
+ if (Object.keys(preImplementationPayload).length > 0) {
2047
+ await taskContext.save(ctx);
2048
+ }
2049
+ if (preImplementationBlocks.length > 0) {
2050
+ return {
2051
+ result: {
2052
+ error: "编码前工程契约未全部确认,不得开始实现",
2053
+ status: "awaiting_implementation_contracts",
2054
+ diagnostic_codes: preImplementationBlocks.map((b) => b.code),
2055
+ blocking_findings: preImplementationBlocks,
2056
+ ...preImplementationPayload,
2057
+ recovery: "请同时确认 OOD/SOLID、后端工程边界、代码注释与日志契约后重新调用 sf_expand",
2058
+ },
2059
+ };
2060
+ }
2041
2061
  }
2042
- if (Object.keys(preImplementationPayload).length > 0) {
2043
- await taskContext.save(ctx);
2044
- }
2045
- if (preImplementationBlocks.length > 0) {
2046
- return {
2047
- result: {
2048
- error: "编码前工程契约未全部确认,不得开始实现",
2049
- status: "awaiting_implementation_contracts",
2050
- diagnostic_codes: preImplementationBlocks.map((b) => b.code),
2051
- blocking_findings: preImplementationBlocks,
2052
- ...preImplementationPayload,
2053
- recovery: "请同时确认 OOD/SOLID、后端工程边界、代码注释与日志契约后重新调用 sf_expand",
2054
- },
2055
- };
2056
- }
2057
- }
2062
+ } // end if (!isLightweightRoute) 轻量路径跳过 S4 gates + 编码前工程约束
2058
2063
  // Input Material Contract: 处理 hard-blocking 结果
2059
2064
  // Privacy Gate: 隐私/敏感信息策略阻断
2060
2065
  const isBlocked = expansion.prompt.startsWith("## 阻塞:输入材料禁止读取")
@@ -2205,44 +2210,9 @@ export async function registerTools(server, deps) {
2205
2210
  if (!decisionContract.passed) {
2206
2211
  advisories.decision_contract_advisory = decisionContract.advisory;
2207
2212
  }
2208
- // 设置 plan_proposal_gate — sf_expand 成功后必须设置,否则 sf_verify 等写工具会被阻断
2209
- {
2210
- const { evaluatePlanProposalGate, inferPlanGateTaskType } = await import("../../engine/plan_proposal_gate.js");
2211
- const routeForGate = expansion.workflow_trace?.route ?? expansionRoute ?? "code_change";
2212
- const taskTypeForGate = inferPlanGateTaskType(ctx.intent);
2213
- // 轻量路径(acceptance/review/read_only)自动通过
2214
- const isLightweight = routeForGate === "acceptance" || routeForGate === "review"
2215
- || routeForGate === "direct_answer" || routeForGate === "analysis";
2216
- if (isLightweight) {
2217
- await taskContext.setPlanProposalGate(args.task_id, {
2218
- passed: true,
2219
- plan_gate_status: "passed",
2220
- required_level: "brief_plan",
2221
- reason_zh: "轻量路径自动通过",
2222
- violations: [],
2223
- evidence_refs: [],
2224
- blocked_actions: [],
2225
- });
2226
- }
2227
- else {
2228
- const gateResult = evaluatePlanProposalGate({
2229
- task_id: args.task_id,
2230
- task_type: taskTypeForGate,
2231
- user_intent: ctx.intent,
2232
- plan_level: "execution_plan",
2233
- plan_summary_zh: ctx.intent.slice(0, 200),
2234
- proposed_steps: [expansionRoute ?? "execute"],
2235
- verification_plan: (expansion.acceptance?.automated ?? []).map((a) => a.description ?? String(a)),
2236
- risks: [],
2237
- evidence_refs: expansion.matched_knowledge ?? [],
2238
- });
2239
- await taskContext.setPlanProposalGate(args.task_id, gateResult);
2240
- }
2241
- }
2242
2213
  // 存储膨胀结果
2243
2214
  try {
2244
2215
  await taskContext.setExpansion(args.task_id, expansion);
2245
- // 存储产物记录
2246
2216
  if (expansion.output_artifact_record) {
2247
2217
  await taskContext.setArtifact(args.task_id, expansion.output_artifact_record);
2248
2218
  }
@@ -2277,6 +2247,46 @@ export async function registerTools(server, deps) {
2277
2247
  }
2278
2248
  throw updateErr;
2279
2249
  }
2250
+ // 设置 plan_proposal_gate — 必须在 setExpansion/setArtifact/updateStatus 之后
2251
+ // 这些操作各自 load-save 会覆盖之前的写入,所以 plan_proposal_gate 必须最后设置
2252
+ {
2253
+ const { evaluatePlanProposalGate, inferPlanGateTaskType } = await import("../../engine/plan_proposal_gate.js");
2254
+ const routeForGate = expansion.workflow_trace?.route ?? expansionRoute ?? "code_change";
2255
+ const taskTypeForGate = inferPlanGateTaskType(ctx.intent);
2256
+ const isLightweight = routeForGate === "acceptance" || routeForGate === "review"
2257
+ || routeForGate === "direct_answer" || routeForGate === "analysis";
2258
+ try {
2259
+ if (isLightweight) {
2260
+ await taskContext.setPlanProposalGate(args.task_id, {
2261
+ passed: true,
2262
+ plan_gate_status: "passed",
2263
+ required_level: "brief_plan",
2264
+ reason_zh: "轻量路径自动通过",
2265
+ violations: [],
2266
+ evidence_refs: [],
2267
+ blocked_actions: [],
2268
+ });
2269
+ }
2270
+ else {
2271
+ const gateResult = evaluatePlanProposalGate({
2272
+ task_id: args.task_id,
2273
+ task_type: taskTypeForGate,
2274
+ user_intent: ctx.intent,
2275
+ plan_level: "execution_plan",
2276
+ plan_summary_zh: ctx.intent.slice(0, 200),
2277
+ proposed_steps: [expansionRoute ?? "execute"],
2278
+ verification_plan: (expansion.acceptance?.automated ?? []).map((a) => a.description ?? String(a)),
2279
+ risks: [],
2280
+ evidence_refs: expansion.matched_knowledge ?? [],
2281
+ });
2282
+ await taskContext.setPlanProposalGate(args.task_id, gateResult);
2283
+ }
2284
+ }
2285
+ catch (gateErr) {
2286
+ // gate 设置失败不阻断主流程,后续写工具会重新检查
2287
+ console.error(`[sf_expand] plan_proposal_gate 设置失败: ${gateErr.message}`);
2288
+ }
2289
+ }
2280
2290
  const expandPayload = Object.keys(advisories).length > 0
2281
2291
  ? { ...expansion, advisories }
2282
2292
  : expansion;