Establish .doc/{status,audit,remediation,archive} structure with README
maps, migrate 15 root audit/remediation docs, and add redirect stubs.
Co-authored-by: Cursor <cursoragent@cursor.com>
15 KiB
15 KiB
项目全面审计总结报告
SUPERSEDED — 历史初审快照。Live 状态见 remediation-gap-matrix.md 与 .doc/ops/CURRENT.md。
审计日期: 2026-09-12
审计人: 代码审计
项目: Chat-Agent-System (项目工作流与对话智能体系统)
分支: dev
状态: 架构完整,核心功能 70% 完成,存在 12 个已识别缺陷
一、项目总体评估
1.1 系统架构评分
| 维度 | 评分 | 评语 |
|---|---|---|
| 架构设计 | 8/10 | 三工作流治理顶层决策清晰,状态机完备,符合业务需求 |
| 功能完整度 | 5/10 | 核心框架 70%,关键模块(上下文快照、终止)0%,多个 bug 待修 |
| 代码质量 | 6/10 | 单元测试覆盖 OK,缺失 E2E;对话-服务耦合需解 |
| 数据一致性 | 4/10 | 项目生命周期转换不完整,禁用文档无显式标记 |
| 安全性 | 5/10 | 权限框架存在,执行不一致;token 处理存在漏洞 |
| 运维成熟度 | 6/10 | DB 迁移和测试隔离需完善 |
综合评分: 5.7/10 → 需立即整改
1.2 关键指标
| 指标 | 值 | 说明 |
|---|---|---|
| 工作流定义总数 | 92 | 其中 88 个为测试/过期定义,三项正式 |
| 项目实例数 | 79 | active 32, completed 47 |
| 已确认缺陷 | 12 | 3 critical, 4 high, 5 medium |
| 单元测试覆盖率 | 85% | 主要包:projectinstance, coordinator, workflowdef |
| E2E 覆盖率 | 0% | 待补充 |
| 代码行数 | ~15k | Go backend + ~8k web frontend |
二、缺陷分布与风险等级
2.1 严重缺陷(Critical)- 立即修复
┌─────────────────────────────────────────────────────────┐
│ BUG-01: 完成后项目生命周期未更新 [CRITICAL] │
│ 风险: 项目永久锁死,用户无法配置下一流程 │
│ 优先级: 🔴 P0 (2h) │
├─────────────────────────────────────────────────────────┤
│ BUG-02: 推进强制批准文档 [CRITICAL] │
│ 风险: 违反业务规则,数据不一致 │
│ 优先级: 🔴 P0 (1h) │
├─────────────────────────────────────────────────────────┤
│ BUG-04: 对话推进调用旧服务 [CRITICAL] │
│ 风险: 绕过新权限检查,双轨运行 │
│ 优先级: 🔴 P0 (2h) │
└─────────────────────────────────────────────────────────┘
2.2 高优先级缺陷(High)- 本周修复
BUG-03: 禁用文档无显式 skipped_disabled 标记
BUG-05: 禁用文档拒绝逻辑不一致
BUG-06: 激活 token 安全问题
BUG-07: 项目完成后下一流程配置缺失
2.3 中低优先级缺陷(Medium/Low)- 下周处理
BUG-08: 测试数据库隔离不完全
BUG-09: 版本冲突时前端自动重试
BUG-10: 项目设置无审计视图
BUG-11: 旧 API 未正式下线
BUG-12: 前端名称不一致
三、未完成功能模块
3.1 缺失模块清单
| 模块 | 完成度 | 影响 | 优先级 |
|---|---|---|---|
| ProjectContextSnapshot | 0% | Phase 3 必需,两智能工作流血缘依赖 | 🔴 P1 |
| WorkflowTermination | 10% | 实例可永久锁死 | 🔴 P1 |
| DocumentAccessDecider | 50% | 拒绝逻辑分散,安全隐患 | 🔴 P1 |
| E2E Tests (PG+PI) | 0% | 验收标准 7.5 要求 | 🔴 P1 |
| 项目生命周期完整转换 | 40% | 完成后无法切换 | 🔴 P1 |
3.2 代码现状与缺陷位置
问题集中地:
internal/projectinstance/stage_store.go:71-158- 推进事务问题internal/coordinator/engine.go:672-811- 对话推进耦合internal/projectinstance/service.go:119-135- 生命周期不完整internal/projectinstance/stage_access.go:15-71- 拒绝逻辑不一致web/src/components/workflow/ProjectWorkflowSwitcher.tsx- 前端名称&自动重试
四、数据一致性风险分析
4.1 开发库现状快照
发现问题:
┌────────────────────────────────────────────┐
│ workflow_definitions 92 个 │
│ ├─ 正式三项 3 个 ✅ │
│ ├─ 过期/历史定义 1 个 ❌ │
│ └─ 测试污染 88 个 ❌❌❌ │
│ │
│ project_workflow_instances 79 个 │
│ ├─ active 32 个 │
│ ├─ completed 47 个 │
│ └─ 问题: completed 项目 lifecycle 仍为 │
│ active (47 个不一致) ❌ │
│ │
│ projects.lifecycle_status 分布 │
│ ├─ active 97 个 │
│ ├─ planning 51 个 │
│ └─ completed 0 个 (不支持) │
│ │
│ 隔离问题: │
│ 集成测试未设置 TEST_DATABASE_URL │
│ → 默认连接本地 agent_system_dev │
│ → 88 个定义污染 ❌❌ │
└────────────────────────────────────────────┘
风险评估:
- 数据污染: 🔴 严重 - 无法清洁复现
- 生命周期不一致: 🔴 严重 - 47 个实例数据已破损
- 隔离缺失: 🟠 高 - CI/CD 不可信
五、安全性审计结论
5.1 权限检查
| 检查项 | 状态 | 说明 |
|---|---|---|
| 激活权限 | ✅ | 仅创建者可激活 |
| 推进权限 | ✅ | 仅创建者可推进 |
| 文档职责 | ✅ | 三权互斥、必填 |
| 禁用文档拒绝 | ❌ | 不一致,存在旁路 |
| Token 安全 | ❌ | 明文/重复消费风险 |
| 跨项目访问 | ⚠️ | 框架存在但执行不一 |
5.2 威胁模型
高风险场景:
-
禁用文档旁路(CVSS 6.5)
- 通过 SSE 或 Agent tool 绕过禁用检查
- 修改方案: Task A5
DocumentAccessDecider
-
Token 重放(CVSS 7.2)
- 激活 token 明文保存,可多次使用
- 修改方案: Task A6 token hash + one-time
-
对话权限绕过(CVSS 7.8)
- 对话推进绕过实例权限检查
- 修改方案: Task A4 统一服务调用
六、性能与扩展性评估
| 方面 | 评估 | 建议 |
|---|---|---|
| 查询性能 | 单项查询 <100ms,列表查询 <500ms | 应补充 N+1 和批量查询测试 |
| 并发处理 | 无明显 race condition 检测到 | 应补充压力测试 |
| 大文档处理 | 上下文快照未实现 | 建议流式检索和分页 |
| 缓存策略 | 定义缓存 OK,实例缓存缺失 | 应补充 Redis 集成 |
七、测试覆盖现状
7.1 单元测试
✅ PASS 套件:
- projectinstance: 45 tests, avg 0.1s/test
- coordinator: 32 tests, avg 0.01s/test
- workflowdef: 28 tests, avg 0.05s/test
- server: 15 tests, avg 0.2s/test
总计: 120+ 单元测试
❌ 缺失:
- ProjectLifecycleAfterCompletion
- DisabledDocumentPersistence
- AdvanceStageDoesNotModifyApproval
- DialogueAdvanceStageUsesNewService
- ActivationTokenSecurity
- TerminationWorkflow (全部)
- ProjectContextSnapshot (全部)
7.2 集成测试
✅ 可运行:
- workflow_governance_pg_test.go
- phase5_fault_injection_pg_test.go
❌ 问题:
- 未设置 TEST_DATABASE_URL 时连接开发库
- 测试定义发布后无清理
- 并发测试不完整
7.3 E2E 测试
❌ 完全缺失:
- 真实 PostgreSQL 端到端验证
- PI Agent 集成测试
- 三工作流完整链路
- 项目生命周期转换
需补充:
- setupE2ETestDB()
- TestE2E_BizdevWorkflow_Complete
- TestE2E_ProductManagerWorkflow_Standalone
- TestE2E_TestEngineerWorkflow_WithoutSRS
- TestE2E_ProjectTransitionToNextWorkflow
八、架构建议
8.1 保留并强化
- ✅ 三工作流隔离模型 - 业务模型清晰
- ✅ 实例冻结快照 - 运行权威保证
- ✅ 激活/推进事务 - 数据一致性基础
- ✅ 通知和对话耦合 - 用户体验友好
8.2 改进点
- 🔧 禁用文档持久化 - 明确
skipped_disabled状态 - 🔧 权限决策集中化 -
DocumentAccessDecider统一拒绝逻辑 - 🔧 生命周期完整转换 - 完成/终止时更新项目状态
- 🔧 项目上下文快照 - 支持多来源血缘追溯
8.3 新增模块
- 📦 项目上下文快照服务 - 两智能工作流共用
- 📦 受控终止 API - 异常恢复能力
- 📦 审计日志完整化 - 故障排查与合规
九、整改时间与资源规划
9.1 时间估算
Phase A (关键缺陷) : 15h
│
├─ Task A1-A2 : 3h
├─ Task A3 : 3h
├─ Task A4-A5 : 6h
└─ Task A6 : 3h
Phase B (新功能) : 26h
│
├─ Task B1 (终止) : 6h
├─ Task B2 (E2E) : 8h
└─ Task B3 (快照) : 12h
Phase C (完善) : 20h
│
├─ UI/文档/迁移 : 10h
├─ 集成验证 : 6h
└─ 发布准备 : 4h
总计: ~61 小时
= 2.5 天(单人全职)
= 5 天(双人并行)
9.2 资源配置建议
推荐配置: 2 人团队
├─ 开发 A (后端):
│ └─ Phase A (15h) + Phase B 部分 (8h)
│
├─ 开发 B (全栈):
│ └─ Phase B 部分 (18h) + Phase C (20h)
│
└─ QA (并行):
└─ E2E 测试框架、验收检查
里程碑:
Day 1 (8h): Phase A 完成,单测 PASS
Day 2 (8h): Phase B 进行中,E2E 框架启动
Day 3 (8h): Phase B 完成,真实链路验证
Day 4 (8h): Phase C 完善,发布准备
Day 5 (5h): 最终验收,合并主分支
十、验收标准清单
10.1 功能验收(来自 .doc/2026-09-12-three-workflows-strict-governance-remediation.md:417-459)
7.1 目录和定义
- 任意用户在项目选择页都只能看到 3 个工作流 ✅ (已实施)
- 正式名称精确为"商务对接流程 / 智能产品经理流程 / 智能测试工程师流程" ✅
- 定义快照精确为 7 / 1 / 1 ⚠️ (main.v2.json 缺 2 个)
- 三个正式定义均没有流程级上游依赖 ✅
7.2 选择和冻结
- 只有项目创建者可保存、激活和推进 ✅
- live 实例存在时,UI、API 和对话三个入口均不能切换 ✅
- 工作流完成或受控终止后,创建者可以配置下一实例 ❌ (BUG-01/B1)
- 两个浏览器同时配置时只有一个成功 ⚠️ (需完整测试)
7.3 文档开关和三权
- 启用文档缺任一职责、职责重复、责任人非 active 项目成员时不能激活 ✅
- 禁用文档没有职责行、没有受控文档、没有运行按钮 ⚠️ (BUG-03)
- 对禁用文档的编制、提交、审核、批准请求全部稳定返回
DOC_TASK_DISABLED❌ (BUG-05) - 再启用只允许发生在 planning;激活后不能原地改变 ✅
7.4 阶段门禁和提醒
- 当前阶段 N 个启用文档中任一未批准,创建者按钮和对话推进均被阻断 ✅
- 全部批准后只产生一次首提醒;24 小时未处理才产生一次升级提醒 ✅
- readiness 后文档被驳回或标 stale 时,旧推进请求失效 ⚠️ (需验证)
- 推进事务不会修改任何文档审批状态 ❌ (BUG-02)
- 最后一阶段确认后实例为 completed,项目立即可配置下一流程 ❌ (BUG-01)
7.5 安全、恢复和真实链路
- 跨项目、非成员、非职责人、已退出成员全部有服务端负例 ✅
- API、SSE、异步任务、断线恢复、搜索、导出、RAG、Agent tool 的判定一致 ❌ (BUG-05)
- 服务重启后能恢复 live 实例、当前阶段、禁用状态、职责和 pending 推进请求 ✅
- 使用真实 PostgreSQL 和真实 PI Agent 分别跑完商务 7 文档、产品 1 文档、测试 1 文档链路 ❌ (BUG-MISSING-04)
- 项目从未运行产品经理流程且不存在 SRS 时,测试工程师仍可依据项目对话、文档和材料成功生成唯一测试方案 ❌ (BUG-MISSING-01)
十一、建议行动计划
11.1 立即行动(今天)
1. 确认 BUG-02 现状 (grep "UPDATE.*approved")
2. 启动 Task A1 修复(项目完成后生命周期)
3. 启动 Task A4 修复(对话推进新服务)
4. 启动数据库 00025 迁移设计(禁用文档标记)
11.2 本周行动
Day 1:
✓ Phase A 关键缺陷修复(15h)
✓ 单测全部 PASS
Day 2-3:
✓ Task B1 受控终止 API(6h)
✓ Task B2 E2E 测试框架(8h)
✓ 商务流程完整链路验证
Day 4-5:
✓ Task B3 项目上下文快照(12h)
✓ Phase C 完善与发布(20h)
✓ 最终验收清单确认
11.3 后续维护
生产上线前:
□ 性能基准测试
□ 压力测试
□ 灾难恢复演练
生产上线后:
□ 审计日志监控
□ 每周数据一致性检查
□ 用户反馈收集与迭代
十二、结语
12.1 总体判定
项目状态: 🟠 中等风险 → 需立即整改
原因:
- 架构设计合理,业务需求清晰
- 核心框架 70% 已实现,技术选型无问题
- 关键性缺陷 3 个(项目生命周期、推进状态、对话服务)必须本周修复
- 新功能 3 个(快照、终止、E2E)需并行开发
- 数据污染(88 个测试定义)影响可信度
12.2 风险缓解
| 风险 | 缓解措施 | 优先级 |
|---|---|---|
| 项目永久锁死 | 立即修复 BUG-01 | 🔴 P0 |
| 数据不一致 | 运行数据清理脚本 + DB 迁移 | 🔴 P0 |
| 安全隐患 | Task A4-A6 权限统一 | 🟠 P1 |
| E2E 缺失 | Task B2 补充完整链路 | 🟠 P1 |
12.3 建议
- 立即启动 Phase A(5 天内完成关键缺陷修复)
- 并行启动 Phase B(E2E 测试框架必须本周启动)
- 建立自动化验收流程(CI 应包含验收标准检查)
- 定期数据库审计(周期性检查一致性)
审计完毕
下一步: 技术评审确认整改计划,进入实施阶段
相关文档:
.doc/2026-09-12-comprehensive-audit-and-remediation-plan.md- 详细缺陷说明与整改方案.doc/2026-09-12-remediation-tasks-and-acceptance-checklist.md- 可执行的任务拆分
生成于 2026-09-12 14:50 UTC