soloforge 1.3.3 → 1.3.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/README.md +9 -0
- package/dist/adapters/claude_code/server.js +1 -1
- package/dist/adapters/claude_code/server.js.map +1 -1
- package/dist/adapters/claude_code/tools.d.ts.map +1 -1
- package/dist/adapters/claude_code/tools.js +109 -25
- package/dist/adapters/claude_code/tools.js.map +1 -1
- package/dist/adapters/shared/workflow_template.js +2 -2
- package/dist/adapters/shared/workflow_template.js.map +1 -1
- package/dist/bin/soloforge.js +65 -0
- package/dist/bin/soloforge.js.map +1 -1
- package/dist/engine/asset_manifest.d.ts.map +1 -1
- package/dist/engine/asset_manifest.js +11 -0
- package/dist/engine/asset_manifest.js.map +1 -1
- package/dist/engine/code_maintainability_observability_contract.d.ts +74 -0
- package/dist/engine/code_maintainability_observability_contract.d.ts.map +1 -0
- package/dist/engine/code_maintainability_observability_contract.js +473 -0
- package/dist/engine/code_maintainability_observability_contract.js.map +1 -0
- package/dist/engine/config_write_boundary.d.ts +29 -0
- package/dist/engine/config_write_boundary.d.ts.map +1 -0
- package/dist/engine/config_write_boundary.js +69 -0
- package/dist/engine/config_write_boundary.js.map +1 -0
- package/dist/engine/consumable_asset_registry.d.ts.map +1 -1
- package/dist/engine/consumable_asset_registry.js +49 -1
- package/dist/engine/consumable_asset_registry.js.map +1 -1
- package/dist/engine/diagnostic_registry.d.ts +12 -0
- package/dist/engine/diagnostic_registry.d.ts.map +1 -1
- package/dist/engine/diagnostic_registry.js +62 -0
- package/dist/engine/diagnostic_registry.js.map +1 -1
- package/dist/engine/dual_layer_mechanism_registry.d.ts.map +1 -1
- package/dist/engine/dual_layer_mechanism_registry.js +194 -1
- package/dist/engine/dual_layer_mechanism_registry.js.map +1 -1
- package/dist/engine/explicit_asset_registry.d.ts.map +1 -1
- package/dist/engine/explicit_asset_registry.js +134 -0
- package/dist/engine/explicit_asset_registry.js.map +1 -1
- package/dist/engine/implementation_roadmap_registry.d.ts.map +1 -1
- package/dist/engine/implementation_roadmap_registry.js +45 -1
- package/dist/engine/implementation_roadmap_registry.js.map +1 -1
- package/dist/engine/knowledge_governance_gate.d.ts +38 -0
- package/dist/engine/knowledge_governance_gate.d.ts.map +1 -0
- package/dist/engine/knowledge_governance_gate.js +123 -0
- package/dist/engine/knowledge_governance_gate.js.map +1 -0
- package/dist/engine/log_governance.d.ts +25 -0
- package/dist/engine/log_governance.d.ts.map +1 -0
- package/dist/engine/log_governance.js +76 -0
- package/dist/engine/log_governance.js.map +1 -0
- package/dist/engine/mechanism_contract_registry.d.ts +1 -0
- package/dist/engine/mechanism_contract_registry.d.ts.map +1 -1
- package/dist/engine/mechanism_contract_registry.js +104 -0
- package/dist/engine/mechanism_contract_registry.js.map +1 -1
- package/dist/engine/mechanism_health_check.d.ts +23 -0
- package/dist/engine/mechanism_health_check.d.ts.map +1 -0
- package/dist/engine/mechanism_health_check.js +140 -0
- package/dist/engine/mechanism_health_check.js.map +1 -0
- package/dist/engine/observability.js +1 -1
- package/dist/engine/observability.js.map +1 -1
- package/dist/engine/release_issue_scenario_registry.d.ts.map +1 -1
- package/dist/engine/release_issue_scenario_registry.js +216 -0
- package/dist/engine/release_issue_scenario_registry.js.map +1 -1
- package/dist/engine/release_readiness_gate.d.ts +3 -0
- package/dist/engine/release_readiness_gate.d.ts.map +1 -1
- package/dist/engine/release_readiness_gate.js +260 -8
- package/dist/engine/release_readiness_gate.js.map +1 -1
- package/dist/engine/team_awareness.js +6 -6
- package/dist/engine/team_awareness.js.map +1 -1
- package/dist/types.d.ts +4 -0
- package/dist/types.d.ts.map +1 -1
- package/package.json +1 -1
- package/templates/knowledge/acceptance_templates//344/273/243/347/240/201/346/263/250/351/207/212/344/270/216/346/227/245/345/277/227/351/252/214/346/224/266/346/250/241/346/235/277.md +78 -0
- package/templates/knowledge/review//344/273/243/347/240/201/345/217/257/347/273/264/346/212/244/346/200/247/344/270/216/345/217/257/350/247/202/346/265/213/346/200/247/345/256/241/346/237/245.md +81 -0
- 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 +121 -0
- package/templates/knowledge/rules//346/225/217/346/204/237/344/277/241/346/201/257/346/227/245/345/277/227/350/247/204/345/210/231.md +69 -0
- package/templates/knowledge/rules//346/227/245/345/277/227/346/262/273/347/220/206/350/247/204/345/210/231.md +49 -0
- package/templates/knowledge/rules//346/234/272/345/210/266/350/207/252/346/262/273/347/220/206/350/247/204/345/210/231.md +48 -0
- package/templates/knowledge/rules//347/237/245/350/257/206/346/262/273/347/220/206/350/247/204/345/210/231.md +50 -0
- package/templates/knowledge/rules//351/205/215/347/275/256/350/220/275/347/233/230/350/276/271/347/225/214/350/247/204/345/210/231.md +47 -0
package/README.md
CHANGED
|
@@ -8,6 +8,15 @@ AI 编程助手的项目工作流配置器。SoloForge 帮你把 Claude Code、C
|
|
|
8
8
|
- 你希望每个项目都有稳定的 AI 工作流规则,而不是每次从零解释。
|
|
9
9
|
- 你希望 AI 修改代码前先理解项目边界,生成产物时不要误改源码。
|
|
10
10
|
- 你希望配置可以自动推断,但不要在低置信度时乱写项目配置。
|
|
11
|
+
- 你希望 AI 写业务代码时能遵守必要注释、结构化日志、敏感信息脱敏和交付复验要求。
|
|
12
|
+
|
|
13
|
+
## 核心能力
|
|
14
|
+
|
|
15
|
+
- **下一步导航**: `soloforge next` 会根据当前阶段、阻断项和已有证据提示下一步,而不是只报告状态。
|
|
16
|
+
- **设计产物包审计**: 架构、数据库、API、OpenAPI、SQL/migration 和一致性报告按统一合同审计,避免文档之间漂移。
|
|
17
|
+
- **工程实现契约**: 编码阶段会约束 OOD/SOLID、Controller 入参出参、参数校验、事务、幂等、权限、日志和错误处理等实现细节。
|
|
18
|
+
- **注释与日志治理**: 关键业务规则、状态变更、支付/权限/安全路径、异常处理和迁移脚本需要可定位日志或必要注释;敏感信息不得进入日志。
|
|
19
|
+
- **长期机制化门禁**: SoloForge 自身发布前会检查机制消费链路、知识治理、配置落盘边界、日志治理和诊断码集中注册,防止只靠文档或测试自证。
|
|
11
20
|
|
|
12
21
|
## 最短成功路径
|
|
13
22
|
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"server.js","sourceRoot":"","sources":["../../../src/adapters/claude_code/server.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AACpE,OAAO,EAAE,oBAAoB,EAAE,MAAM,2CAA2C,CAAC;AACjF,OAAO,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAI3C,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACvC,OAAO,EAAE,KAAK,EAAE,YAAY,EAAE,MAAM,wBAAwB,CAAC;AAC7D,MAAM,UAAU,GAAW,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,IAAI,GAAG,CAAC,uBAAuB,EAAE,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC;AAmBxH;;;;;GAKG;AACH,MAAM,CAAC,KAAK,UAAU,WAAW,CAAC,IAAgB;IAC9C,KAAK,CAAC,QAAQ,EAAE,oBAAoB,CAAC,CAAC;IACxC,MAAM,EAAE,MAAM,EAAE,cAAc,EAAE,WAAW,EAAE,GAAG,IAAI,CAAC;IAErD,MAAM,MAAM,GAAG,IAAI,SAAS,CAAC;QAC3B,IAAI,EAAE,WAAW;QACjB,OAAO,EAAE,UAAU;KACpB,CAAC,CAAC;IAEH,MAAM,aAAa,CAAC,MAAM,EAAE,EAAE,MAAM,EAAE,cAAc,EAAE,WAAW,EAAE,CAAC,CAAC;IAErE,MAAM,SAAS,GAAG,IAAI,oBAAoB,EAAE,CAAC;IAC7C,MAAM,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;IAEhC,IAAI,YAAY,GAAG,KAAK,CAAC;IACzB,4BAA4B;IAC5B,MAAM,QAAQ,GAAG,KAAK,IAAI,EAAE;QAC1B,IAAI,YAAY;YAAE,OAAO;QACzB,YAAY,GAAG,IAAI,CAAC;QACpB,IAAI,CAAC;YACH,IAAI,cAAc;gBAAE,MAAM,cAAc,CAAC,KAAK,EAAE,CAAC;YACjD,MAAM,SAAS,CAAC,KAAK,EAAE,EAAE,CAAC;QAC5B,CAAC;QAAC,OAAO,CAAC,EAAE,CAAC;YACX,
|
|
1
|
+
{"version":3,"file":"server.js","sourceRoot":"","sources":["../../../src/adapters/claude_code/server.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AACpE,OAAO,EAAE,oBAAoB,EAAE,MAAM,2CAA2C,CAAC;AACjF,OAAO,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAI3C,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACvC,OAAO,EAAE,KAAK,EAAE,YAAY,EAAE,MAAM,wBAAwB,CAAC;AAC7D,MAAM,UAAU,GAAW,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,IAAI,GAAG,CAAC,uBAAuB,EAAE,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC;AAmBxH;;;;;GAKG;AACH,MAAM,CAAC,KAAK,UAAU,WAAW,CAAC,IAAgB;IAC9C,KAAK,CAAC,QAAQ,EAAE,oBAAoB,CAAC,CAAC;IACxC,MAAM,EAAE,MAAM,EAAE,cAAc,EAAE,WAAW,EAAE,GAAG,IAAI,CAAC;IAErD,MAAM,MAAM,GAAG,IAAI,SAAS,CAAC;QAC3B,IAAI,EAAE,WAAW;QACjB,OAAO,EAAE,UAAU;KACpB,CAAC,CAAC;IAEH,MAAM,aAAa,CAAC,MAAM,EAAE,EAAE,MAAM,EAAE,cAAc,EAAE,WAAW,EAAE,CAAC,CAAC;IAErE,MAAM,SAAS,GAAG,IAAI,oBAAoB,EAAE,CAAC;IAC7C,MAAM,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;IAEhC,IAAI,YAAY,GAAG,KAAK,CAAC;IACzB,4BAA4B;IAC5B,MAAM,QAAQ,GAAG,KAAK,IAAI,EAAE;QAC1B,IAAI,YAAY;YAAE,OAAO;QACzB,YAAY,GAAG,IAAI,CAAC;QACpB,IAAI,CAAC;YACH,IAAI,cAAc;gBAAE,MAAM,cAAc,CAAC,KAAK,EAAE,CAAC;YACjD,MAAM,SAAS,CAAC,KAAK,EAAE,EAAE,CAAC;QAC5B,CAAC;QAAC,OAAO,CAAC,EAAE,CAAC;YACX,KAAK,CAAC,QAAQ,EAAE,QAAQ,EAAE,CAAC,CAAC,CAAC;QAC/B,CAAC;QACD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC,CAAC;IAEF,OAAO,CAAC,EAAE,CAAC,SAAS,EAAE,QAAQ,CAAC,CAAC;IAChC,OAAO,CAAC,EAAE,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC;IAC/B,8BAA8B;IAC9B,OAAO,CAAC,EAAE,CAAC,SAAS,EAAE,GAAG,EAAE;QACzB,QAAQ,EAAE,CAAC;IACb,CAAC,CAAC,CAAC;IAEH,sCAAsC;IACtC,OAAO,CAAC,EAAE,CAAC,mBAAmB,EAAE,CAAC,GAAG,EAAE,EAAE;QACtC,YAAY,CAAC,QAAQ,EAAE,QAAQ,EAAE,GAAG,CAAC,CAAC;QACtC,yBAAyB;QACzB,OAAO,CAAC,QAAQ,GAAG,CAAC,CAAC;QACrB,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC,CAAC,CAAC;IACH,4BAA4B;IAC5B,OAAO,CAAC,EAAE,CAAC,oBAAoB,EAAE,CAAC,MAAM,EAAE,EAAE;QAC1C,YAAY,CAAC,QAAQ,EAAE,kBAAkB,EAAE,MAAM,CAAC,CAAC;QACnD,OAAO,CAAC,QAAQ,GAAG,CAAC,CAAC;QACrB,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC,CAAC,CAAC;AACL,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tools.d.ts","sourceRoot":"","sources":["../../../src/adapters/claude_code/tools.ts"],"names":[],"mappings":"AAKA,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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"}
|
|
@@ -6,6 +6,7 @@ import crypto from "node:crypto";
|
|
|
6
6
|
import { verifyArtifact } from "../../engine/artifact_contract_registry.js";
|
|
7
7
|
import { verifyRouteDecisionContract } from "../../engine/route_decision_contract_verifier.js";
|
|
8
8
|
import { findToolInvocationContractByName, createToolTrace, validateToolInvocation, hasWriteSideEffect, } from "../../engine/tool_invocation_contract_registry.js";
|
|
9
|
+
import { TOOL_DIAGNOSTIC_CODES } from "../../engine/diagnostic_registry.js";
|
|
9
10
|
function createLazy(loader) {
|
|
10
11
|
let mod = { loaded: null, promise: null };
|
|
11
12
|
return () => {
|
|
@@ -38,7 +39,6 @@ const lazyDebugger = createLazy(() => import("../../engine/debugger.js"));
|
|
|
38
39
|
const lazyObservability = createLazy(() => import("../../engine/observability.js"));
|
|
39
40
|
const lazyGovernance = createLazy(() => import("../../engine/governance_report.js"));
|
|
40
41
|
const lazyMigration = createLazy(() => import("../../engine/migration_guard.js"));
|
|
41
|
-
const lazyPlanGate = createLazy(() => import("../../engine/plan_proposal_gate.js"));
|
|
42
42
|
const lazyTestGen = createLazy(() => import("../../engine/test_generator.js"));
|
|
43
43
|
const lazyTestQuality = createLazy(() => import("../../engine/test_quality.js"));
|
|
44
44
|
const lazyDepScan = createLazy(() => import("../../engine/dependency_scanner.js"));
|
|
@@ -59,7 +59,6 @@ const lazyCapState = createLazy(() => import("../../engine/capability_state_stor
|
|
|
59
59
|
const lazyMainPath = createLazy(() => import("../../engine/main_path_integration_contract.js"));
|
|
60
60
|
const lazyDualLayer = createLazy(() => import("../../engine/dual_layer_mechanism_registry.js"));
|
|
61
61
|
const lazyInputMaterial = createLazy(() => import("../../engine/input_material_contract_registry.js"));
|
|
62
|
-
const lazyConfigCmd = createLazy(() => import("../../bin/config_commands.js"));
|
|
63
62
|
const lazyConfigPrecedence = createLazy(() => import("../../engine/config_precedence_contract.js"));
|
|
64
63
|
const lazyEnforcementGuard = createLazy(() => import("../../engine/enforcement_guard.js"));
|
|
65
64
|
const lazyWorkspaceLease = createLazy(() => import("../../engine/workspace_lease.js"));
|
|
@@ -67,8 +66,6 @@ const lazyDeliveryReadiness = createLazy(() => import("../../engine/delivery_rea
|
|
|
67
66
|
const lazyVerificationContract = createLazy(() => import("../../engine/verification_contract.js"));
|
|
68
67
|
const lazyFailureReport = createLazy(() => import("../../engine/failure_report.js"));
|
|
69
68
|
const lazyDegradation = createLazy(() => import("../../engine/degradation.js"));
|
|
70
|
-
const lazyRetentionPolicy = createLazy(() => import("../../engine/retention_policy.js"));
|
|
71
|
-
const lazyDiagnosticRegistry = createLazy(() => import("../../engine/diagnostic_registry.js"));
|
|
72
69
|
const lazyArchitectureDesign = createLazy(() => import("../../engine/architecture_design_contract.js"));
|
|
73
70
|
const lazyExistingSystemAnalysis = createLazy(() => import("../../engine/existing_system_analysis.js"));
|
|
74
71
|
const lazyCodingReadiness = createLazy(() => import("../../engine/coding_readiness_gate.js"));
|
|
@@ -81,11 +78,11 @@ const lazyBrainstormContract = createLazy(() => import("../../engine/brainstorm_
|
|
|
81
78
|
const lazyArchitectureWorkshop = createLazy(() => import("../../engine/architecture_decision_workshop.js"));
|
|
82
79
|
const lazyDesignArtifactPack = createLazy(() => import("../../engine/design_artifact_pack.js"));
|
|
83
80
|
const lazyStandardAssetContract = createLazy(() => import("../../engine/standard_asset_contract.js"));
|
|
84
|
-
const lazyTemplateVisibility = createLazy(() => import("../../engine/template_asset_visibility.js"));
|
|
85
81
|
const lazyDecisionWorkshop = createLazy(() => import("../../engine/decision_workshop.js"));
|
|
86
82
|
const lazyNavigation = createLazy(() => import("../../engine/next_action_planner.js"));
|
|
87
83
|
const lazyOodSolid = createLazy(() => import("../../engine/ood_solid_contract.js"));
|
|
88
84
|
const lazyBackendImplementation = createLazy(() => import("../../engine/backend_implementation_contract.js"));
|
|
85
|
+
const lazyCodeObservability = createLazy(() => import("../../engine/code_maintainability_observability_contract.js"));
|
|
89
86
|
// ── Zod Schema 定义 ──
|
|
90
87
|
const ClassifySchema = {
|
|
91
88
|
intent: z.string().describe("开发者意图描述"),
|
|
@@ -100,6 +97,7 @@ const ExpandSchema = {
|
|
|
100
97
|
design_artifact_pack: z.unknown().optional().describe("设计产物包路径映射或已复验状态"),
|
|
101
98
|
ood_solid_summary: z.unknown().optional().describe("复杂编码任务的 OOD/SOLID 设计摘要"),
|
|
102
99
|
backend_implementation_work_package: z.unknown().optional().describe("后端接口实现的工程工作包"),
|
|
100
|
+
code_observability_work_package: z.unknown().optional().describe("代码可维护性与可观测性工作包"),
|
|
103
101
|
};
|
|
104
102
|
const VerifySchema = {
|
|
105
103
|
task_id: z.string().describe("任务 ID"),
|
|
@@ -240,7 +238,7 @@ export function checkWriteToolPlanGate(params) {
|
|
|
240
238
|
if (!params.ctx || !params.ctx.plan_proposal_gate) {
|
|
241
239
|
return {
|
|
242
240
|
allowed: false,
|
|
243
|
-
diagnostic_code:
|
|
241
|
+
diagnostic_code: TOOL_DIAGNOSTIC_CODES.planGate,
|
|
244
242
|
violation_type: "guard_blocked",
|
|
245
243
|
reason: `工具 ${params.toolName} 执行前缺少 Plan Proposal Gate`,
|
|
246
244
|
};
|
|
@@ -787,7 +785,7 @@ export async function assessCepForRepairReverify(params) {
|
|
|
787
785
|
*/
|
|
788
786
|
export async function assessCepForUserFeedback(params) {
|
|
789
787
|
const cepModule = await import("../../engine/core_experience_principle.js");
|
|
790
|
-
|
|
788
|
+
const cep = cepModule.evaluateUserVisibleOutput({
|
|
791
789
|
has_conclusion_first: params.has_conclusion_first,
|
|
792
790
|
has_clear_summary: params.has_clear_summary,
|
|
793
791
|
has_actionable_next_step: params.has_actionable_next_step,
|
|
@@ -795,6 +793,22 @@ export async function assessCepForUserFeedback(params) {
|
|
|
795
793
|
hides_critical_failure: params.hides_critical_failure,
|
|
796
794
|
chinese_semantic_first: params.chinese_semantic_first,
|
|
797
795
|
});
|
|
796
|
+
const logGov = await import("../../engine/log_governance.js");
|
|
797
|
+
const logReport = logGov.evaluateFeedbackOutputQuality({
|
|
798
|
+
output: [
|
|
799
|
+
params.has_conclusion_first ? "结论优先" : "缺少结论",
|
|
800
|
+
params.has_clear_summary ? "摘要清晰" : "摘要不足",
|
|
801
|
+
params.has_actionable_next_step ? "下一步明确" : "下一步缺失",
|
|
802
|
+
].join(";"),
|
|
803
|
+
critical_failure_hidden: params.hides_critical_failure,
|
|
804
|
+
});
|
|
805
|
+
return {
|
|
806
|
+
passed: cep.passed && logReport.passed,
|
|
807
|
+
issues_zh: [
|
|
808
|
+
...cep.issues_zh,
|
|
809
|
+
...logReport.findings.map((f) => f.message_zh),
|
|
810
|
+
],
|
|
811
|
+
};
|
|
798
812
|
}
|
|
799
813
|
/**
|
|
800
814
|
* 注册所有 MCP 工具到服务器实例。
|
|
@@ -982,7 +996,7 @@ export async function registerTools(server, deps) {
|
|
|
982
996
|
content: [{ type: "text", text: JSON.stringify({
|
|
983
997
|
error: planViolation.reason,
|
|
984
998
|
violation: planViolation,
|
|
985
|
-
diagnostic_code: pgResult.diagnostic_code ??
|
|
999
|
+
diagnostic_code: pgResult.diagnostic_code ?? TOOL_DIAGNOSTIC_CODES.planGate,
|
|
986
1000
|
recovery: planViolation.recovery,
|
|
987
1001
|
}) }],
|
|
988
1002
|
isError: true,
|
|
@@ -1008,7 +1022,7 @@ export async function registerTools(server, deps) {
|
|
|
1008
1022
|
content: [{ type: "text", text: JSON.stringify({
|
|
1009
1023
|
error: planViolation.reason,
|
|
1010
1024
|
violation: planViolation,
|
|
1011
|
-
diagnostic_code:
|
|
1025
|
+
diagnostic_code: TOOL_DIAGNOSTIC_CODES.planGate,
|
|
1012
1026
|
recovery: planViolation.recovery,
|
|
1013
1027
|
}) }],
|
|
1014
1028
|
isError: true,
|
|
@@ -1037,7 +1051,7 @@ export async function registerTools(server, deps) {
|
|
|
1037
1051
|
content: [{ type: "text", text: JSON.stringify({
|
|
1038
1052
|
error: instrViolation.reason,
|
|
1039
1053
|
violation: instrViolation,
|
|
1040
|
-
diagnostic_code: instrResult.diagnostic_code ??
|
|
1054
|
+
diagnostic_code: instrResult.diagnostic_code ?? TOOL_DIAGNOSTIC_CODES.instructionContract,
|
|
1041
1055
|
recovery: instrViolation.recovery,
|
|
1042
1056
|
}) }],
|
|
1043
1057
|
isError: true,
|
|
@@ -1330,8 +1344,11 @@ export async function registerTools(server, deps) {
|
|
|
1330
1344
|
if (args.backend_implementation_work_package) {
|
|
1331
1345
|
ctx.backend_implementation_work_package = args.backend_implementation_work_package;
|
|
1332
1346
|
}
|
|
1347
|
+
if (args.code_observability_work_package) {
|
|
1348
|
+
ctx.code_observability_work_package = args.code_observability_work_package;
|
|
1349
|
+
}
|
|
1333
1350
|
if (args.architecture_decision_workshop || args.decision_workshop || args.design_artifact_pack
|
|
1334
|
-
|| args.ood_solid_summary || args.backend_implementation_work_package) {
|
|
1351
|
+
|| args.ood_solid_summary || args.backend_implementation_work_package || args.code_observability_work_package) {
|
|
1335
1352
|
await taskContext.save(ctx);
|
|
1336
1353
|
}
|
|
1337
1354
|
// 状态守卫:classifying/expanding/clarifying → expanding
|
|
@@ -1722,7 +1739,7 @@ export async function registerTools(server, deps) {
|
|
|
1722
1739
|
result: {
|
|
1723
1740
|
error: oodGate.reason_zh,
|
|
1724
1741
|
status: "awaiting_ood_design",
|
|
1725
|
-
diagnostic_code:
|
|
1742
|
+
diagnostic_code: TOOL_DIAGNOSTIC_CODES.oodMissingSummary,
|
|
1726
1743
|
ood_solid_summary: oodGate.required_summary,
|
|
1727
1744
|
recovery: "请确认对象职责、接口边界、依赖方向、变化点和 SOLID 风险后重新调用 sf_expand",
|
|
1728
1745
|
},
|
|
@@ -1747,13 +1764,39 @@ export async function registerTools(server, deps) {
|
|
|
1747
1764
|
result: {
|
|
1748
1765
|
error: backendGate.reason_zh,
|
|
1749
1766
|
status: "awaiting_backend_contract",
|
|
1750
|
-
diagnostic_code:
|
|
1767
|
+
diagnostic_code: TOOL_DIAGNOSTIC_CODES.backendMissingSummary,
|
|
1751
1768
|
backend_implementation_work_package: backendGate.work_package,
|
|
1752
1769
|
recovery: "请补齐 DTO/校验、事务一致性、安全审计、契约对齐与测试证据后重新调用 sf_expand",
|
|
1753
1770
|
},
|
|
1754
1771
|
};
|
|
1755
1772
|
}
|
|
1756
1773
|
}
|
|
1774
|
+
// 问题六十八: 业务编码必须确认代码可维护性与可观测性约束。
|
|
1775
|
+
{
|
|
1776
|
+
const obsModule = await lazyCodeObservability();
|
|
1777
|
+
const obsGate = obsModule.evaluateCodeObservabilityGate({
|
|
1778
|
+
task_id: args.task_id,
|
|
1779
|
+
intent: ctx.intent,
|
|
1780
|
+
route: expansionRoute,
|
|
1781
|
+
changed_files: ctx.execution?.changed_files,
|
|
1782
|
+
work_package: ctx.code_observability_work_package,
|
|
1783
|
+
});
|
|
1784
|
+
if (obsGate.applicable) {
|
|
1785
|
+
ctx.code_observability_work_package = obsGate.work_package;
|
|
1786
|
+
await taskContext.save(ctx);
|
|
1787
|
+
}
|
|
1788
|
+
if (!obsGate.allowed) {
|
|
1789
|
+
return {
|
|
1790
|
+
result: {
|
|
1791
|
+
error: obsGate.reason_zh,
|
|
1792
|
+
status: "awaiting_code_observability_contract",
|
|
1793
|
+
diagnostic_code: TOOL_DIAGNOSTIC_CODES.codeObservabilityWorkPackage,
|
|
1794
|
+
code_observability_work_package: obsGate.work_package,
|
|
1795
|
+
recovery: "请确认必要注释、结构化日志、敏感信息脱敏和项目 logger 使用后重新调用 sf_expand",
|
|
1796
|
+
},
|
|
1797
|
+
};
|
|
1798
|
+
}
|
|
1799
|
+
}
|
|
1757
1800
|
// Input Material Contract: 处理 hard-blocking 结果
|
|
1758
1801
|
// Privacy Gate: 隐私/敏感信息策略阻断
|
|
1759
1802
|
const isBlocked = expansion.prompt.startsWith("## 阻塞:输入材料禁止读取")
|
|
@@ -1986,7 +2029,7 @@ export async function registerTools(server, deps) {
|
|
|
1986
2029
|
result: {
|
|
1987
2030
|
error: oodGate.reason_zh,
|
|
1988
2031
|
status: "blocked",
|
|
1989
|
-
diagnostic_code:
|
|
2032
|
+
diagnostic_code: TOOL_DIAGNOSTIC_CODES.oodMissingSummary,
|
|
1990
2033
|
ood_solid_summary: oodGate.required_summary,
|
|
1991
2034
|
recovery: "完成 OOD/SOLID 摘要后重新执行 sf_expand 与 sf_verify",
|
|
1992
2035
|
},
|
|
@@ -2005,7 +2048,7 @@ export async function registerTools(server, deps) {
|
|
|
2005
2048
|
result: {
|
|
2006
2049
|
error: backendGate.reason_zh,
|
|
2007
2050
|
status: "blocked",
|
|
2008
|
-
diagnostic_code:
|
|
2051
|
+
diagnostic_code: TOOL_DIAGNOSTIC_CODES.backendMissingSummary,
|
|
2009
2052
|
backend_implementation_work_package: backendGate.work_package,
|
|
2010
2053
|
recovery: "完成后端工程工作包后重新执行 sf_expand 与 sf_verify",
|
|
2011
2054
|
},
|
|
@@ -2038,7 +2081,7 @@ export async function registerTools(server, deps) {
|
|
|
2038
2081
|
result: {
|
|
2039
2082
|
error: "OOD/SOLID 代码复验发现阻断项,需修复后重验",
|
|
2040
2083
|
status: "blocked",
|
|
2041
|
-
diagnostic_code:
|
|
2084
|
+
diagnostic_code: TOOL_DIAGNOSTIC_CODES.oodDeliveryBlock,
|
|
2042
2085
|
ood_solid_findings: solidFindings,
|
|
2043
2086
|
},
|
|
2044
2087
|
};
|
|
@@ -2048,11 +2091,30 @@ export async function registerTools(server, deps) {
|
|
|
2048
2091
|
result: {
|
|
2049
2092
|
error: "后端实现工程复验发现阻断项,需修复后重验",
|
|
2050
2093
|
status: "blocked",
|
|
2051
|
-
diagnostic_code:
|
|
2094
|
+
diagnostic_code: TOOL_DIAGNOSTIC_CODES.backendDeliveryBlock,
|
|
2052
2095
|
backend_implementation_findings: backendFindings,
|
|
2053
2096
|
},
|
|
2054
2097
|
};
|
|
2055
2098
|
}
|
|
2099
|
+
// 问题六十八: 代码可维护性与可观测性契约
|
|
2100
|
+
const codeObsModule = await lazyCodeObservability();
|
|
2101
|
+
const obsFindings = codeObsModule.verifyChangedFilesObservability({
|
|
2102
|
+
changed_files: implementationFiles,
|
|
2103
|
+
file_contents: implementationContents,
|
|
2104
|
+
intent: ctx.intent,
|
|
2105
|
+
});
|
|
2106
|
+
ctx.code_observability_findings = obsFindings;
|
|
2107
|
+
await taskContext.save(ctx);
|
|
2108
|
+
if (codeObsModule.hasBlockingObservabilityFindings(obsFindings)) {
|
|
2109
|
+
return {
|
|
2110
|
+
result: {
|
|
2111
|
+
error: "代码可维护性/可观测性复验发现阻断项,需修复后重验",
|
|
2112
|
+
status: "blocked",
|
|
2113
|
+
diagnostic_code: TOOL_DIAGNOSTIC_CODES.codeObservabilityFinding,
|
|
2114
|
+
code_observability_findings: obsFindings,
|
|
2115
|
+
},
|
|
2116
|
+
};
|
|
2117
|
+
}
|
|
2056
2118
|
}
|
|
2057
2119
|
// 问题六十二: 设计产物验证必须读取用户项目真实文件,不接受占位合同自证通过。
|
|
2058
2120
|
const verifyWorkflowIntent = ctx.route_decision?.workflow_intent ?? ctx.classification?.route_decision?.workflow_intent;
|
|
@@ -2143,7 +2205,7 @@ export async function registerTools(server, deps) {
|
|
|
2143
2205
|
result: {
|
|
2144
2206
|
error: `文件 ${changedFile} 模板契约验证未通过,进入修复重验闭环`,
|
|
2145
2207
|
status: "blocked",
|
|
2146
|
-
diagnostic_code:
|
|
2208
|
+
diagnostic_code: TOOL_DIAGNOSTIC_CODES.contractDraft,
|
|
2147
2209
|
template_contract_id: perFileContract.asset_id,
|
|
2148
2210
|
missing_fields: contractResult.missing_fields,
|
|
2149
2211
|
messages: contractResult.messages,
|
|
@@ -2434,8 +2496,8 @@ export async function registerTools(server, deps) {
|
|
|
2434
2496
|
if (args.plan_id !== currentPlan.plan_id) {
|
|
2435
2497
|
return {
|
|
2436
2498
|
result: {
|
|
2437
|
-
error: `plan_id 不匹配: 请求 "${args.plan_id}",当前任务计划 "${currentPlan.plan_id}" [
|
|
2438
|
-
diagnostic_code:
|
|
2499
|
+
error: `plan_id 不匹配: 请求 "${args.plan_id}",当前任务计划 "${currentPlan.plan_id}" [${TOOL_DIAGNOSTIC_CODES.verifyPlanMismatch}]`,
|
|
2500
|
+
diagnostic_code: TOOL_DIAGNOSTIC_CODES.verifyPlanMismatch,
|
|
2439
2501
|
},
|
|
2440
2502
|
};
|
|
2441
2503
|
}
|
|
@@ -2842,11 +2904,18 @@ export async function registerTools(server, deps) {
|
|
|
2842
2904
|
|| ctx.backend_implementation_work_package
|
|
2843
2905
|
? backendModule.reviewBackendImplementationFiles(contractContents)
|
|
2844
2906
|
: [];
|
|
2845
|
-
|
|
2907
|
+
// 问题六十八: 代码可维护性与可观测性审查
|
|
2908
|
+
const obsModule = await lazyCodeObservability();
|
|
2909
|
+
const obsFindings = obsModule.requiresCodeObservabilityContract(ctx.intent, ctx.expansion?.workflow_trace?.route, args.changed_files)
|
|
2910
|
+
|| ctx.code_observability_work_package
|
|
2911
|
+
? obsModule.reviewCodeObservability(contractContents)
|
|
2912
|
+
: [];
|
|
2913
|
+
if (solidFindings.length > 0 || backendFindings.length > 0 || obsFindings.length > 0) {
|
|
2846
2914
|
const updatedCtx = await taskContext.load(args.task_id);
|
|
2847
2915
|
if (updatedCtx) {
|
|
2848
2916
|
updatedCtx.ood_solid_findings = solidFindings;
|
|
2849
2917
|
updatedCtx.backend_implementation_findings = backendFindings;
|
|
2918
|
+
updatedCtx.code_observability_findings = obsFindings;
|
|
2850
2919
|
await taskContext.save(updatedCtx);
|
|
2851
2920
|
}
|
|
2852
2921
|
}
|
|
@@ -2860,7 +2929,9 @@ export async function registerTools(server, deps) {
|
|
|
2860
2929
|
reviewExtras.ood_solid_findings = solidFindings;
|
|
2861
2930
|
if (backendFindings.length > 0)
|
|
2862
2931
|
reviewExtras.backend_implementation_findings = backendFindings;
|
|
2863
|
-
if (
|
|
2932
|
+
if (obsFindings.length > 0)
|
|
2933
|
+
reviewExtras.code_observability_findings = obsFindings;
|
|
2934
|
+
if (oodModule.hasBlockingSolidFindings(solidFindings) || backendModule.hasBlockingBackendFindings(backendFindings) || obsModule.hasBlockingObservabilityFindings(obsFindings)) {
|
|
2864
2935
|
reviewExtras.delivery_blocked = true;
|
|
2865
2936
|
reviewExtras.diagnostic_code = "SF-IMPLEMENTATION-CONTRACT-REVIEW-BLOCKED";
|
|
2866
2937
|
}
|
|
@@ -3008,7 +3079,7 @@ export async function registerTools(server, deps) {
|
|
|
3008
3079
|
return {
|
|
3009
3080
|
result: {
|
|
3010
3081
|
error: "存在未清零的模板契约修复指令,需完成修复重验后才能交付",
|
|
3011
|
-
diagnostic_code:
|
|
3082
|
+
diagnostic_code: TOOL_DIAGNOSTIC_CODES.contractDraft,
|
|
3012
3083
|
repair_directive: ctx.repair_reverify_directive,
|
|
3013
3084
|
recovery: "修复文档缺口后重新执行 sf_verify,验证通过后 repair_reverify_directive 自动清零",
|
|
3014
3085
|
recovery_next_tools: ["sf_learn", "sf_verify", "sf_status"],
|
|
@@ -3022,7 +3093,7 @@ export async function registerTools(server, deps) {
|
|
|
3022
3093
|
return {
|
|
3023
3094
|
result: {
|
|
3024
3095
|
error: "OOD/SOLID 契约仍存在硬失败,不得交付",
|
|
3025
|
-
diagnostic_code:
|
|
3096
|
+
diagnostic_code: TOOL_DIAGNOSTIC_CODES.oodDeliveryBlock,
|
|
3026
3097
|
findings: ctx.ood_solid_findings,
|
|
3027
3098
|
recovery: "按 finding 修复职责或依赖边界,并重新执行 sf_review 与 sf_verify",
|
|
3028
3099
|
},
|
|
@@ -3033,12 +3104,25 @@ export async function registerTools(server, deps) {
|
|
|
3033
3104
|
return {
|
|
3034
3105
|
result: {
|
|
3035
3106
|
error: "后端实现工程契约仍存在硬失败,不得交付",
|
|
3036
|
-
diagnostic_code:
|
|
3107
|
+
diagnostic_code: TOOL_DIAGNOSTIC_CODES.backendDeliveryBlock,
|
|
3037
3108
|
findings: ctx.backend_implementation_findings,
|
|
3038
3109
|
recovery: "按 finding 修复后端边界、安全或一致性问题,并重新执行 sf_review 与 sf_verify",
|
|
3039
3110
|
},
|
|
3040
3111
|
};
|
|
3041
3112
|
}
|
|
3113
|
+
// 问题六十八: 代码可维护性与可观测性 P0 阻断交付。
|
|
3114
|
+
const obsModule = await lazyCodeObservability();
|
|
3115
|
+
const obsDeliveryBlock = obsModule.evaluateDeliveryBlock(ctx.code_observability_findings ?? []);
|
|
3116
|
+
if (obsDeliveryBlock.blocked) {
|
|
3117
|
+
return {
|
|
3118
|
+
result: {
|
|
3119
|
+
error: `代码可维护性/可观测性存在阻断: ${obsDeliveryBlock.reason_zh}`,
|
|
3120
|
+
diagnostic_code: TOOL_DIAGNOSTIC_CODES.codeObservabilityFinding,
|
|
3121
|
+
findings: obsDeliveryBlock.blocking_findings,
|
|
3122
|
+
recovery: "按 finding 修复敏感信息泄漏、缺失日志或吞异常问题,并重新执行 sf_review 与 sf_verify",
|
|
3123
|
+
},
|
|
3124
|
+
};
|
|
3125
|
+
}
|
|
3042
3126
|
// 产物状态门控: deliver 需要产物状态为 accepted 且有证据
|
|
3043
3127
|
if (ctx.artifact_output) {
|
|
3044
3128
|
const status = ctx.artifact_output.status;
|