Skip to content

fix(seeder): 统一数据初始化幂等性,使用 DB 标记替代文件标记#348

Open
xingyipeng wants to merge 1 commit intodataelement:mainfrom
xingyipeng:fix/seeder-idempotency
Open

fix(seeder): 统一数据初始化幂等性,使用 DB 标记替代文件标记#348
xingyipeng wants to merge 1 commit intodataelement:mainfrom
xingyipeng:fix/seeder-idempotency

Conversation

@xingyipeng
Copy link
Copy Markdown
Contributor

问题

  • agent_seeder 使用 .seeded 文件标记判断是否已初始化,换环境或连接远程数据库时标记丢失导致重复创建默认 Agent
  • template_seeder / tool_seeder / skill_seeder 每次启动都会重建被用户手动删除的数据,不尊重用户操作

修复方案

4 个 Seeder 统一使用 system_settings 表的 DB 标记,替代文件标记:

Seeder DB 标记 key
内置工具 builtin_tools_seeded
Atlassian 配置 atlassian_rovo_config_seeded
Agent 模板 builtin_templates_seeded
内置技能 builtin_skills_seeded
默认 Agent default_agents_seeded

幂等三重检查逻辑

  1. 检查 DB 标记 → 存在则跳过(即使数据被删也不重建,尊重用户操作)
  2. 检查 DB 数据 → 已有数据则补写标记并跳过(兼容旧版本/远程数据库已有数据的场景)
  3. 首次创建 → 创建数据并写入 DB 标记

其他改进

  • seed_atlassian_rovo_config() 同步加入 DB 标记保护
  • push_default_skills_to_existing_agents() 在技能未变化时跳过文件系统扫描,减少无意义 I/O
  • ALEMBIC_GUIDELINES.md 补充数据初始化(Seeder)规范章节,约束团队后续开发

测试方式

  1. 启动服务 → 确认 system_settings 表中写入了 5 个 *_seeded 标记
  2. 手动删除某条数据(如 DELETE FROM agent_templates WHERE is_builtin = true)→ 重启 → 确认不会重建
  3. 手动删除对应标记(如 DELETE FROM system_settings WHERE key = 'builtin_templates_seeded')→ 重启 → 确认会重新创建
  4. 连接已有数据的远程数据库 → 启动 → 确认自动补写标记,不重复创建

问题:
- agent_seeder 使用 .seeded 文件标记判断是否已初始化,换环境/连远程 DB 时标记丢失导致重复创建
- template/tool/skill seeder 每次启动都会重建被用户删除的数据

修复:
- 4 个 seeder 统一使用 system_settings 表的 DB 标记(跟随数据库,跨环境有效)
- 幂等三重检查:DB 标记 → DB 数据存在性 → 首次创建
- 用户删除数据后不再重建(标记存在即跳过)
- seed_atlassian_rovo_config 同步加入 DB 标记保护
- push_default_skills_to_existing_agents 在技能未变化时跳过文件扫描
- 更新 ALEMBIC_GUIDELINES.md 补充数据初始化规范

涉及的 DB 标记 key:
- builtin_tools_seeded
- builtin_templates_seeded
- builtin_skills_seeded
- default_agents_seeded
- atlassian_rovo_config_seeded
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant