
BrunoGaoSZandClaude Sonnet 4.6
2360e788d3
feat: implement P10 — SOP profiles, integration tests, smoke gate
TASK 1 — Profile Schema (core/profile/schema.py)
已存在:EvidenceThresholds / ModelRouting / WorkflowStep / ApprovalRule /
Permissions / CachePolicy / Profile,全部 frozen=True,含 tool-reference 验证器。
TASK 2 — 三个行业 SOP Profile YAML
- profiles/presales/profile.yaml 企业预售方案生成
- profiles/security_analysis/profile.yaml 安全事件分析(host_isolation 需审批)
- profiles/knowledge_qa/profile.yaml 知识问答(严格模式,阈值全 0.90)
TASK 3 — loader / registry / 测试
- core/profile/loader.py + registry.py(线程安全单例 + 热更新)
- tests/unit/test_profiles.py(19 个用例)
- tests/unit/test_scorer.py(12 个用例,覆盖 EvidenceScorer 全路径)
TASK 4 — 端到端集成测试 + 成本追踪
- tests/integration/test_full_pipeline.py 7 个 mock-based 测试
- tests/integration/test_cost_tracking.py 3 个成本测试
- scripts/smoke_test.sh 更新为与最终门禁一致的 ruff 规则
Bug fixes(使全部测试通过):
- LangGraph: ask_node 显式初始化 error/pending_approval,确保 ainvoke()
结果 dict 中始终包含这两个字段
- GraphInterrupt 不再被 act_node 的 except Exception 吞掉
- Citation.model_dump(mode="json") 修复 Decimal JSON 序列化问题
- act_node 直接调用 audit_logger.write_tool_call(集成测试 mock executor 时仍可审计)
- 修复 mypy 错误:config.py 重复字段、encryptor __init__ 返回值、
registry 属性声明、sanitizer.py 类型注解
- 修复 47 处 ruff lint(F401/F841/E501/I001)
- 添加 pytest-timeout>=2.3.0 依赖
最终门禁全部通过:
ruff E,F,I 0 errors | mypy 0 errors
143 unit tests, 80.38% coverage | 11 integration tests
Co-Authored-By: Claude Sonnet 4.6 <[email protected]>
2026-02-27 09:21:43 +01:00
..
2026-02-26 06:56:12 +01:00
2026-02-26 06:56:12 +01:00
2026-02-27 09:21:43 +01:00
2026-02-27 09:21:43 +01:00
2026-02-26 06:56:12 +01:00
2026-02-26 07:44:14 +01:00
2026-02-26 06:56:12 +01:00