[0.26.1] - 2026-09-04
代码评审修复版:只修 bug,零功能变更。三原则不变——省 token / 简洁易上手 / 绝不动记忆本身。
修复
- 自动同步在真实嵌入器下静默失效(严重):
sync_agent此前硬编码HashingEmbedder()的嵌入器指纹,用户配置了 OpenAI 嵌入器时,接收端会以embedder_mismatch拒收差分包——不报错、只跳过,是最难察觉的一类故障。现与 CLI 手动同步(sync / fetch)同一约定,改用capabilities.best_embedder() - 跨设备补列把字符串默认值压成空串(严重):
schema.reconcile对所有字符串默认值生成DEFAULT '',使edges.kind补列后不是'semantic',与_migrate_columns的回填行为不一致,跨设备同步后边类型统计/注入出现偏差。现按 SQL 规则转义单引号后写入真值 store._SCHEMA的nodes表补上kind列,不再每次建库都先建 11 列再ALTER补齐dss.apply_delta去掉事务外那次重复的embedder_id落库,对账拒绝的包不再留下半套元数据cli的--db默认值判断对齐default_db_path()(旧判断比对的是早已不存在的"membridge.db",等于永远为真)cli去掉workbench_block的重复导入
测试
- 新增
tests/test_schema.py:reconcile补列默认值守卫 + 未登记字段必须拒绝(登记表即白名单) - 全量 124/143:与 v0.26.0 基线 122/141 逐例比对,新增 2 例全绿、零回归;19 例失败为沙箱缺 rclone / schtasks 被安全策略拦截的环境限制,改动前后完全一致
备注
- 评审提出的「reconcile SQL 注入」经核实不成立:字段名必须先命中本地
MIGRATIONS登记表才会执行ALTER,登记表本身就是白名单,远程清单无法注入任意 SQL。已补注释与回归测试把这一约束固化下来,避免后人误改 - 评审提出的「测试覆盖不足」亦不准确:仓库已有 13 个测试模块(含
test_sync_agent/test_transport/test_v015_container),本次只是补上 schema 对账这一块