# Kestra V50 验证记录 - 代码版本:`codex/kestra-v50`,基线 `38326506f09a467d598cdcfba06b1993af65e792` - 验证日期:2026-07-18 - 变更范围:n8n 迁移资产清单、WorkflowSpec/SchedulePlan、机器策略、 引擎无关数据库迁移与仓储兼容 ## 已执行验证 ### 基线 ```text tests/test_database_migrations.py tests/test_workflow_version_schema.py tests/test_workflow_repository.py tests/test_workflow_activation.py 8 passed, 1 skipped ``` 跳过项需要临时 PostgreSQL;后续已单独启动 PostgreSQL 并实际执行通过。 ### TDD 过程 - n8n 资产清单:先确认 2 个测试因模块不存在失败,实现后转绿;真实调用又发现 直接 CLI 导入路径和 Flask 超时上下文两个问题,分别补充失败测试并修复,最终 该模块 `4 passed`。 - WorkflowSpec/SchedulePlan/策略:先确认 9 个测试因模块不存在失败,实现后 `9 passed`。 - 通用仓储与迁移:先确认 6 个测试因模块/迁移不存在失败,实现后相关集合 `11 passed, 1 skipped`。 - 旧 n8n 仓储通用字段兼容测试先失败,补充通用字段写入后通过。 ### V50 L1/L2 增量验证 ```text tests/test_n8n_migration_inventory.py tests/core/orchestration/test_spec.py tests/core/orchestration/test_repository.py tests/core/orchestration/test_policy.py tests/test_database_migrations.py tests/test_workflow_engine_abstraction_schema.py tests/test_workflow_version_schema.py tests/test_workflow_repository.py tests/test_workflow_activation.py 29 passed ``` 其中 PostgreSQL 集成测试已实际验证: - 从空数据库升级到 Alembic head。 - 对同一数据库重复执行升级。 - 确认 V50 新表存在。 - 从 `20260718_60` 降级一版并保留既有基础表。 n8n 本地集成已实际验证: - 在本地 n8n 创建 `DataOps V50 Local Test` API Key,有效期至 2026-08-17。 - Key 写入 Git 忽略的本地 `.env`,文件权限为 `0600`,验证输出不包含明文 Key。 - 使用资产清单 CLI 通过 n8n API 完成采集,结果为 `collection_status=complete`。 - 当前本地测试实例没有 Workflow,覆盖结果为 0 个 Workflow、0 个活跃流程、 0 个近 90 天执行流程和 0 个阻塞项。 - DataOps 后端容器已加载该 Key,并通过平台自身 `N8nClient` 成功读取 Workflow 列表。 附加检查: - V50 新增 Python 文件字节码编译通过。 - `git diff --check` 通过。 - 仅启动/复用本地 PostgreSQL 完成迁移测试,没有执行全量测试、前端构建或 完整容器栈验收。 ## 未执行验证及原因 - 未运行全仓库 Python 测试:V50 计划要求增量验证,本次变更范围可以由上述 L1/L2 集合覆盖。 - 未运行前端构建:V50 没有前端变更。 - 未运行 Kestra、Runner 或 MCP 测试:这些能力分别属于 V51–V53。 - 未通过 `/api/datafactory/health` 做匿名验证:该接口受 DataOps RBAC 保护, 未登录请求按预期返回 401。已改用后端容器内部的 DataOps `N8nClient` 验证 Key,不绕过平台认证。 ## 安全与兼容结果 - 资产清单不保存 Credential ID、密码、API Key、Token、连接串或执行数据。 - WorkflowSpec 拒绝秘密字段、未知节点、环形 DAG 和缺少幂等声明的写任务。 - SchedulePlan 拒绝无限重试和无界回填。 - 现有 n8n 版本继续保留 `n8n_workflow_id` 和原激活状态机,同时写入通用 `engine_type='n8n'` 与 `engine_definition_id`。 - 数据库约束同一 DataFlow/环境最多一个启用的 Primary 和一个启用的 Shadow。 - API Key 没有写入 Git 跟踪文件、测试报告或终端输出。 ## 已知限制与回滚点 - V50 尚未接入 Kestra,不支持引擎切换。 - 当前完成的是本地 Docker n8n 资产基线;接入包含正式流程的受控 n8n 实例时, 必须重新生成对应环境清单,不能沿用本地 0 Workflow 结论。 - 可通过 Alembic 降级移除 V50 新表和通用字段;存在非 n8n 版本时,迁移会拒绝 破坏性降级。 - 回滚不会修改或删除现有 n8n Workflow。 ## 结论 V50 代码实现、本地 n8n 资产采集和增量技术验证全部通过,当前 **允许进入 V51**。本结论只覆盖本地 Docker 测试环境;后续迁移任何包含正式 Workflow 的 n8n 环境时,仍必须先生成该环境的独立清单。