派发任务报错no such table: tasks。我们打开数据库——表就在那里28列整整齐齐。文件存在表存在路径也对。为什么脚本说没有这张表因为脚本读的是另一份配置文件。事故现场AI任务系统要派发一个任务send_task.py 小密 小平 DEV-20260821-001 高 制作主页页面报错task_id唯一性校验失败no such table: tasks我们第一反应数据库坏了打开工作区数据库F:\AI\workspace\claw-sync\tasks.db task_id TEXT PRIMARY KEY from_agent TEXT to_agent TEXT ...28列完整表就在那里。数据文件 28KB修改时间今天。表存在脚本却说没有这张表。排查数据库连接的是哪个文件第一步确认脚本连的数据库路径。配置中心维护了一份路径配置// app\paths.jsonweb_server保存基础设置时自动生成{workspace:F:\\AI\\workspace,tasks_db:F:\\AI\\workspace\\claw-sync\\tasks.db}路径正确——tasks_db指向那个 28 列的表。脚本为什么没读到根因同名的配置文件有两份检查脚本加载配置的逻辑发现它按候选顺序找 paths.jsonforcandin[/vol1/1000/paths.json,# ① Linux服务器路径os.path.join(_here,..,..,paths.json),# ② 安装目录\paths.jsonos.path.join(_here,..,paths.json)]:# ③ app\paths.jsonifos.path.exists(cand):returnjson.load(open(cand))问题出在候选 ②安装目录下还有一份paths.json——是安装脚本写进去的【默认配置】// 安装目录\paths.json安装脚本写默认值{workspace:F:\\AI\\ai-team-collab\\workspace,// ← 安装目录下的默认工作区scripts:F:\\AI\\ai-team-collab\\app\\scripts// 没有 tasks_db 字段}这份默认配置是安装时生成的永远有效。用户后来在配置中心把工作区改成了F:\AI\workspace——写进了app\paths.json——但安装目录那份没删、没更新。脚本按顺序找先找到安装目录那份旧默认——workspace 指向不存在的目录——tasks_db字段缺失——回退到workspace\claw-sync\tasks.db——F:\AI\ai-team-collab\workspace\claw-sync\tasks.db——这个目录不存在。SQLite 的经典行为连接一个不存在的数据库文件自动创建一个空的。空库没有tasks表——于是no such table: tasks表存在但脚本连的是另一个空库。代码级一个不该存在的兜底其实SQLite没有做错什么。错的是我们的路径解析想要读的: app\paths.json用户配置——含tasks_db 实际读到: 安装目录\paths.json安装默认——无tasks_db——旧值两份文件同名、同格式、同字段大部分——只有一份是对的。脚本选择了先找到的那份而先找到的恰好是错的。这也解释了为什么重启了、删了残留目录、更新了脚本都没用——脚本一直在读另一份配置文件你改的那份它根本没看。解决明确优先级平台感知修复分两层第一层加载顺序平台感知ifos.nament:# Windows配置中心维护的 app\paths.json 优先cands[app\paths.json,安装目录\paths.json,/vol1/1000/paths.json]else:# Linux服务器配置优先cands[/vol1/1000/paths.json,安装目录\paths.json,app\paths.json]第二层消灭多余的同名文件安装脚本不再向安装目录写默认 paths.json——路径配置只允许一个来源配置中心。一份配置、一个来源、一套优先级——不给自己留读错的机会。同名文件是定时炸弹——你永远不知道脚本会拆开哪一封。多份配置不可怕可怕的是它们同名、同格式、不同内容——而且优先级没有定义清楚。系统没有读错系统只是读了它找到的第一份——是你没告诉它哪一份才对。