oh-my-muse/muse-cloud/muse-module-system
lili 4dadc7bae3 fix(framework): DefaultDBFieldHandler 无登录用户时 creator/updater 兜底 system,根治 scheduled 写 null 违约
问题: AI runtime 异步链(dispatcher/executor/recorder/projection)在 scheduled 线程 insert/update muse_ai_* 时 creator/updater 写 null 触发 NOT NULL 违约 → recordRequested insert 即回滚抛 → job 卡 running/queued、AI 执行恒失败(runtime_call 0 行)。

根因: BaseDO creator/updater 带 @TableField(jdbcType=VARCHAR),fill 字段即使 null 也被 MyBatis 强制入 SQL 列;DefaultDBFieldHandler 仅当登录用户存在才回填,scheduled worker 无登录上下文 → 写 null → 违约。insert+update 同病。上一版 5d0f17a 误判 insert 靠 default 兜底,只补了 updateById,被 e2e(runtime_call 0 行)证伪。

修正: insertFill/updateFill 无登录用户时 creator/updater 兜底 SYSTEM_OPERATOR("system"),一处根治所有模块 scheduled/async 写;回退 5d0f17a 局部 setUpdater(已被统一覆盖)。OAuth2TokenServiceImplTest 的 assertPojoEquals 补 creator/updater 忽略(token 创建无登录,DB 兜底 system 与内存返回对象不一致;auto-fill 字段本不应参与内存 vs DB 对比,与同测试既有忽略一致)。

验证: 框架+AI 回归 92/0;全量 381 测试类中 D 仅触发 OAuth2 2 断言(已修),余 Pay(Redis NOAUTH)/Knowledge(mock NPE)/P1r(meta 文件)为预存/环境失败、与 D 无关;e2e task3 executor 完整跑通——runtime_call 落库(creator/updater=system)、job/generation/call 全写回终态、无违约、P-C contextAssembly 固化进 source_summary。

注: 剩余 AI_NEW_API_UNAVAILABLE(infra.env 未配 MUSE_AI_NEW_API_*,adapter 走 Unavailable 兜底) + P-A 检索 0 chunks(KB 状态 disabled/draft 非 active) 为环境/数据 gap,非代码。

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-24 04:28:33 -07:00
..