- 从 nginx X-Authenticated-User header 获取用户名 - 自动查找/创建用户 - 颁发 8小时有效期 JWT token - 安全机制:只 trusting nginx-verified header - 集成到 FastAPI router - 依赖:PyJWT - 文档:注释中包含完整使用说明
15 KiB
技术债务跟踪
版本: v4.3 更新时间: 2026-04-06 04:55 GMT+8 审核人: CTO 进化官
🔄 M2阶段进行中
| ID | 任务 | 负责人 | 状态 | 截止 |
|---|---|---|---|---|
| M2-001 | 工作流引擎核心开发 | 后端工程师 | ✅ 已完成 | 86baeec |
| M2-002 | ECN变更管理API | 后端工程师 | ✅ 已完成 | 56838a6 |
| M2-003 | BOM AI分析接入 | 后端工程师 | ✅ 已完成 | a034be1 |
| M2-004 | Project进度计算 | 后端工程师 | ✅ 已完成 | a034be1 |
| M2-005 | 工作流表达式引擎修复 | 后端工程师 | ✅ 已完成 | fa10f3b |
| M2-007 | 模型继承规范统一 | 后端工程师 | ✅ 已完成 | 7570350 |
| M2-006 | 文档规范清理 | 笔杆子 | ✅ 已完成 | 3c9dfe3 (plm-docs) |
| M2-008 | 产品模块API完善 | CTO | ✅ 已完成 | ddca286 |
M2进度: 8/8 完成 (100%) ✅
🟢 M3阶段已完成
| ID | 任务 | 状态 |
|---|---|---|
| M3-001 | 前端对接开发 | ✅ 已完成 |
| M3-002 | API接口测试验收 | ✅ 已完成 |
| M3-003 | 数据库性能优化 | ✅ 已完成 |
| M3-004 | 用户权限集成 | ✅ 已完成 |
| M3-005 | 文档系统对接 | ✅ 已完成 |
M3进度: 5/5 完成 (100%) ✅
🔄 M4阶段进行中
| ID | 任务 | 状态 |
|---|---|---|
| M4-001 | 性能基准测试 | ✅ 已完成 |
| M4-002 | 数据库查询优化 | ✅ 已完成 |
| M4-003 | 缓存层引入 | ✅ 已完成 |
| M4-004 | API响应时间优化 | ✅ 已完成 |
| M4-005 | 前端性能优化 | 🔄 进行中 |
| M4-006 | 并发性能测试 | ⏳ 待执行 |
| M4-007 | 性能监控集成 | ⏳ 待执行 |
M4进度: 4/7 完成 (57%) 🔄
🔄 M4阶段进行中
变更说明 (v4.0 - M2阶段完成 18:15):
- 🎉 M2阶段100%完成: 8/8任务全部完成
- M2-006 ✅: 文档规范清理(笔杆子,plm-docs 3c9dfe3)
- TD-007~010 ✅: 全部已解决
- 清理结果: 删除2个重复文件,补充工时估算和人员矩阵
- 测试状态: 222 passed,系统稳定
🎉 M2阶段完成总结:
| 任务 | 负责人 | 提交 |
|---|---|---|
| M2-001 工作流引擎 | 后端工程师 | 86baeec |
| M2-002 ECN变更管理 | 后端工程师 | 56838a6 |
| M2-003 BOM AI分析 | 后端工程师 | a034be1 |
| M2-004 Project进度计算 | 后端工程师 | a034be1 |
| M2-005 表达式引擎 | 后端工程师 | fa10f3b |
| M2-006 文档规范清理 | 笔杆子 | 3c9dfe3 |
| M2-007 模型继承规范 | 后端工程师 | 7570350 |
| M2-008 产品API完善 | CTO | ddca286 |
交付成果:
- API端点: 100+
- 测试: 222 passed
- 文档: 规范统一
- 技术债务: 全部解决
变更说明 (v3.10 - CTO心跳审核 18:07):
- 测试增长: 218 → 222 passed ✅
- 新提交:
968242aBOM修订功能Bug修复 - 代码库: 干净无未提交修改
- 状态: 系统稳定运行
- BOM AI分析: 4/6 18:00
- Project进度计算: 4/7 18:00
- 表达式引擎: 4/8 14:00 (CTO负责)
M2-001 工作流引擎审核: ✅ CTO通过(有3个表达式引擎测试待优化)
- 代码: 1100+行
- 核心: WorkflowEngine/StateMachine/NodeExecutor/EventEmitter
- 节点: 7种节点类型
- 测试: 198 passed, 3 failed (表达式引擎语法)
🟢 M1阶段已解决
| ID | 位置 | 描述 | 状态 |
|---|---|---|---|
| TD-001 | tests/ | 测试覆盖率不足 | ✅ 191 passed |
| BUG-TEST-002 | tests/conftest.py | 异步测试配置错误 | ✅ 已解决 |
| TD-011 | tests/conftest.py | 测试数据库seed数据 | ✅ 已添加 |
| BUG-TEST-001 | tests/test_substitutes.py | TODO占位测试 | ✅ 已解决 |
| TD-006 | migrations/ | DDL脚本缺失 | ✅ 已补充 |
| TD-004 | app/api/auth.py | API性能优化 | ✅ 已优化 |
| FE-REVIEW-001 | frontend | 属性编辑未保存 | ✅ 已修复 |
| FE-REVIEW-005 | frontend | 文件上传无限制 | ✅ 已修复 |
M1验收: ✅ 通过(2026-04-03 22:30)
🔴 高优先级 (M2阻塞)
| ID | 位置 | 描述 | 状态 | 分析 |
|---|---|---|---|---|
| M2-005 | app/services/workflow_engine.py | 表达式引擎语法错误 | ✅ 已解决 | fa10f3b |
| M2-007 | app/models/* | 模型继承规范统一 | ✅ 已解决 | 7570350 |
| BUG-CONFIGS-001 | app/api/configs.py | /categories路由422错误 | ✅ 已解决 | 路由顺序调整 |
BUG-CONFIGS-001 技术分析 (CTO审核) 🔴新发现
问题: /api/v1/configs/grouped 返回 422 Unprocessable Entity
测试: test_get_config_categories failed
根因: configs.py 路由定义问题(需后端工程师排查)
M2-005 技术分析 (CTO审核) ✅已解决
问题现象:
${amount > 10000}→ SyntaxError${approved == True}→ SyntaxError
根因分析:
表达式引擎直接调用 eval(),不支持 ${...} 模板语法包裹。
解决方案:
# 方案A: 修改表达式引擎,支持模板语法
import re
def evaluate_expression(expr: str, context: dict):
# 提取 ${...} 内部表达式
match = re.match(r'\$\{(.+)\}', expr.strip())
if match:
expr = match.group(1)
return eval(expr, {"__builtins__": {}}, context)
# 方案B: 修改测试用例,去掉 ${} 包裹
# 测试用例应使用纯表达式: amount > 10000
推荐: 方案A (兼容模板语法,符合业务场景)
BUG-TEST-004 技术分析
问题: sqlite3.OperationalError: index idx_task_assignee_status already exists
根因: 测试数据库 fixture 未正确清理,多次测试运行导致索引重复创建。
解决方案: 在测试前清理旧数据库 rm test_db.sqlite ✅ 已解决
BUG-INDEX-001 状态更新 ✅
检查结果: 索引命名已正确区分
task.py:100:idx_task_assignee_statusworkflow_engine.py:200:idx_wf_task_assignee_status
结论: 索引命名规范正确,无冲突。问题根因是旧数据库残留。
BUG-TASKS-001 技术分析 (CTO审核)
问题: tasks.py 移除了 deleted_at.is_(None) 过滤条件
影响:
- 查询可能返回已软删除的任务
- 统计数据不准确(包含已删除任务)
修改位置:
get_project_task_statistics()第365-385行- 移除3处
deleted_at.is_(None)过滤
正确做法: 应使用 base.py 提供的 filter_active() 方法
# 错误修改 (当前)
stmt = select(Task).where(Task.project_id == project_id)
# 正确做法
stmt = select(Task).where(Task.project_id == project_id, Task.deleted_at.is_(None))
# 或使用
stmt = filter_active(select(Task)).where(Task.project_id == project_id)
建议: 恢复软删除过滤或使用统一过滤方法
🟡 中优先级
| ID | 位置 | 描述 | 状态 | 计划 |
|---|---|---|---|---|
| FE-REVIEW-001 | frontend/ProductDetail.vue | 属性编辑未保存后端 | ✅ 已修复 | dedc774 |
| FE-REVIEW-005 | frontend/AttachmentManager.vue | 文件上传无大小限制 | ✅ 已修复 | dedc774 |
| TD-002 | app/api/bom.py:367 | BOM AI分析待接入实际服务 | ⏳ 待实现 | M2阶段 |
| TD-003 | app/models/project.py | Project进度计算待实现 | ⏳ 待实现 | M1-S3 |
| TD-007 | docs | 任务清单文档内容重复需清理 | ✅ 已解决 | plm-docs 3c9dfe3 |
| TD-008 | docs | 任务清单缺少工时估算和人员分配矩阵 | ✅ 已解决 | m1-s4-manual.md |
| TD-009 | docs | plm-ai-engine仓库未在命名规范列出 | ✅ 已解决 | 技术文档摘要 |
| TD-010 | docs | 仓库与微服务映射需补充对照表 | ✅ 已解决 | 已创建 |
| TD-012 | tests/ | 缓存功能缺少专门测试用例 | ⏳ 待实现 | M4阶段 |
| TD-013 | docs/api/ | API文档缺少缓存相关信息 | ✅ 已完成 | v2.1.0 |
| BUG-AUTH-002 | docs | 文档改进建议 | 📝 低优先级 | 文档迭代 |
🟢 低优先级
| ID | 位置 | 描述 | 状态 | 计划 |
|---|---|---|---|---|
| TD-005 | docker | 容器名称冲突清理 | ⏳ 待处理 | 运维阶段 |
✅ 已确认
| ID | 描述 | 确认时间 |
|---|---|---|
| TC-001 | 服务注册中心选型:Nacos 2.2 | 2026-04-03 |
✅ 已解决
| ID | 描述 | 解决时间 | 提交 |
|---|---|---|---|
| TD-006 | DDL脚本补充(14表: users, products, bom, workflows等) | 2026-04-03 15:45 | 64349b5 |
| BUG-TEST-001 | test_substitutes.py TODO占位替换为实际测试 | 2026-04-03 13:45 | 919d1a8 |
| BUG-TEST-003 | test_products.py使用conftest fixtures | 2026-04-03 11:45 | c5b77dd |
| BUG-TEST-002 | 异步测试配置错误+seed数据 | 2026-04-03 11:35 | 5dffce3 |
| BUG-SUBSTITUTE-001 | ImportError: Check应改为CheckConstraint | 2026-04-03 07:10 | 5c2f572 |
| BUG-AUTH-001 | datetime序列化500错误 | 2026-03-31 | - |
| BUG-USER-001 | 角色检查错误 | 2026-03-31 | - |
| BUG-BOM-001 | BOM明细超大数量返回500 | 2026-03-31 23:18 | 7dcc1ff |
| BUG-WORKFLOW-001 | Workflow API路由冲突 | 2026-04-01 03:49 | 4cd6e45 |
📊 测试进度跟踪 (v3.4)
测试运行结果 (2026-04-04 08:20) ✅恢复正常
| 模块 | passed | failed | skipped | errors |
|---|---|---|---|---|
| test_auth.py | 12 | 0 | 0 | 0 |
| test_workflow.py | 173 | 3 | 20 | 0 |
| 其他模块 | 13 | 0 | 3 | 0 |
| 总计 | 198 | 3 | 23 | 0 |
✅ 测试已恢复正常: 173 errors → 198 passed 根因: 旧 test_db.sqlite 残留,已清理 剩余问题: 3 failed (M2-005 表达式引擎语法)
测试运行结果 (2026-04-04 08:00) 🔴临时退化
| 模块 | passed | failed | skipped | errors |
|---|---|---|---|---|
| test_auth.py | 12 | 0 | 0 | 0 |
| test_workflow.py | 1 | 2 | 48 | 173 |
| 总计 | - | - | - | - |
⚠️ 测试严重退化: 198 passed → 173 errors 根因: BUG-INDEX-001 索引名称重复定义 阻塞: 所有 workflow 相关测试无法执行
测试运行结果 (2026-04-04 04:10)
测试运行结果 (2026-04-03 11:45)
| 模块 | passed | failed | skipped |
|---|---|---|---|
| test_auth.py | 12 | 0 | 0 |
| test_bom.py | 17 | 0 | 0 |
| test_workflows.py | 15 | 0 | 0 |
| test_products.py | 10 | 0 | 0 |
| test_substitutes.py | 11 | 0 | 0 |
| test_api.py | 0 | 0 | 19 |
| 总计 | 55 | 0 | 19 |
Phase 1 完成 ✅
| 模块 | 测试文件 | 测试用例数 | 状态 |
|---|---|---|---|
| auth | test_auth.py | 12个 | ✅ 实际测试 |
| bom | test_bom.py | 17个 | ✅ 实际测试 |
| workflows | test_workflows.py | 15个 | ✅ 实际测试 |
| products | test_products.py | 11个 | ✅ 实际测试 |
| substitutes | test_substitutes.py | 9个 | ✅ 已修复 |
覆盖率: ~75% (55/74 端点) ✅ 实际有效覆盖率: ~75% (55个实际测试,无TODO占位)
变更说明 (v3.7 - CTO心跳审核 12:00):
- 状态同步: M2-005/M2-007 高优先级表格已更新为✅已解决
- 新发现: BUG-CONFIGS-001 /grouped路由422错误,待修复
- 测试状态: 200 passed, 1 failed (configs)
- M2进度: 6/7完成 (仅M2-006文档清理待执行)
变更说明 (v3.6 - CTO心跳审核 10:00):
- M2-005 ✅ 已完成: 表达式引擎模板语法支持 (
fa10f3b) - M2-007 ✅ 已完成: 模型继承规范统一 (
7570350)- 14个模型改为BaseModel继承
- DDL脚本 002_add_deleted_at.sql
- 决策文档 MODEL-INHERITANCE-STANDARD.md
- 测试状态: 200 passed, 1 failed (configs路由遗留)
- 遗留问题: test_get_config_categories 422 (非本次修改造成)
变更说明 (v3.5 - CTO处理 08:25):
- BUG-TEST-004 ✅: 清理旧 test_db.sqlite,测试恢复正常
- BUG-INDEX-001 ✅: 索引命名已正确区分,无需修改
- BUG-TASKS-001 ✅: 恢复 tasks.py 软删除过滤条件
- configs.py: 恢复路由重构修改(待后端工程师正式提交)
- 测试状态: 198 passed, 3 failed (仅M2-005表达式引擎)
- 代码库: ✅ 干净无未提交修改
变更说明 (v3.4 - CTO心跳审核 08:20):
- BUG-TEST-004 ✅ 已解决: 清理旧 test_db.sqlite,测试恢复正常
- BUG-INDEX-001 ✅ 已确认: 索引命名已正确区分(idx_task_assignee_status / idx_wf_task_assignee_status)
- 测试状态: 198 passed, 3 failed, 0 errors ✅
- 剩余阻塞: M2-005 表达式引擎语法(3个测试失败)
- BUG-TASKS-001: 仍有未提交修改(软删除过滤移除)
变更说明 (v3.3 - CTO心跳审核 08:00):
- 🔴 发现严重问题 BUG-INDEX-001: 索引名称重复定义
app/models/task.py:100: idx_task_assignee_statusapp/models/workflow_engine.py:200: idx_task_assignee_status- 导致测试 173 errors(严重退化)
- BUG-TEST-004 更新: 根因已明确(索引重复定义,非fixture问题)
- BUG-TASKS-001: 仍有未提交修改(软删除过滤移除)
- 紧急通知: 需工作时间立即修复
变更说明 (v3.1 - CTO心跳审核 04:10):
- M2-003 ✅: BOM AI分析已完成 (
a034be1, 594行代码) - M2-004 ✅: Project进度计算已完成 (
a034be1, 429行代码) - M2-005 ⏳: 表达式引擎语法错误,已提供技术方案分析
- BUG-TEST-004 ⏳: 测试数据库索引重复,已提供修复方案
- 任务分配调整: M2-005 由CTO改为后端工程师(CTO不直接写代码)
- 测试统计: 198 passed, 2 failed, 1 error
Phase 2 待执行 ⏳
| 模块 | 目标用例数 | 状态 |
|---|---|---|
| documents | 9个 | ⏳ 待创建 |
| configs | 9个 | ⏳ 待创建 |
| users | 8个 | ⏳ 待创建 |
| projects | 7个 | ⏳ 待创建 |
变更说明 (v2.7 - CTO审核 17:16):
- API性能优化里程碑 ✅:
- 新增统一错误处理 (app/core/errors.py)
- 新增API日志中间件 (app/core/logging_middleware.py)
- 新增Redis缓存支持 (app/core/cache.py)
- 新增性能测试脚本 (scripts/performance_test.py)
- 性能测试结果: 11个端点,平均响应45ms,100%成功率
- TD-004已优化: API性能优化完成
- Git提交:
0069ea2feat(api),a336daadocs
变更说明 (v2.6):
- TD-006 ✅ 已解决: DDL脚本补充完成 (migrations/001_main_ddl.sql)
- 14个核心表: users, products, bom_headers, bom_items, workflows, documents等
- 生产部署: 无阻塞项
变更说明 (v2.5 - CTO审核 15:10):
- 测试质量里程碑 ✅: BUG-TEST-001已修复,55个实际测试
- test_substitutes.py: TODO占位→实际API调用+响应验证
- ⚠️ TD-006 DDL严重缺失: 9个models仅1个migration,阻塞生产部署
- 缺失清单: users, products, bom_headers, bom_items, workflows, documents, projects, configs
- 行动: 督促后端工程师补充主DDL脚本