R76-R77: 修复解析入库aweme_id关联失败+告警机制—①server.js匹配同构规范化(normKey无空格紧凑+补全角问号,根因:文件夹名吞空格vs库标题留空格)②import加unmatched告警+video_id双键(匹配不到跳过不插脏)③解析prompt加入库自查(返回体unmatched含本视频即报失败)④全功能落库排查库内健康(双null=0/孤儿=0)

This commit is contained in:
maogeigei committed 2026-09-04 18:43:41 +08:00
1 parent d7c00a53b8
commit 383532719d
4 files changed
+48 -17

No files matched your search

+15
View File
@@ -232,3 +232,18 @@
- **宿主注册机制结论(可复用)**:宿主**无限深度递归扫描 SKILL.md**(任意嵌套目录含 SKILL.md 即注册,命名空间=父路径段拼接)→ 技能树内所有 SKILL.md 必须都是"有效技能"或不存在;无效占位/重定向文件会导致坏变体注册(browser-harness 3 变体根因)
- **#110 dsh storyboard-prompt 同步 R73(完成)**:先三方比对——dsh(679行) vs 源HEAD(680行) 仅 **4 处 dsh 特化**(frontmatter name=storyboard-prompt/deployment=dsh+deployed_at=2026-08-31、产出路径段兜底 `DSHSkill项目/` 正文+目录树注释),证实 dsh 为 R73 前同步态非全量镜像 → **同步法=以源工作区文件为底覆盖 + 重放 4 处特化**(禁整包覆盖,会吞特化);F1 细则 md5 与源一致、dsh 侧 3 词库引用目标存在、备份 .bak-r73 清理
- **★dsh 同步可复用方法**:源↔dsh 有特化差异时禁止直接 cp 覆盖——先 diff 三方(dsh/源HEAD/源工作区)确认特化清单 → cp 源工作区 → 逐条重放特化 → diff 复验"差异=特化集" → 引用目标存在性验证
## R76 视频解析入库 aweme_id 匹配修复(18:32-18:50,用户报"解析了看不到")
- **现象**:平凡的胡德禄《小主人...臭猫昏迷》(aweme 7674245412476081913, video id=58) 解析任务成功(detailId=33367, content+analysis 齐备落盘)但工作台视频详情页 3 tab 全空
- **排查链**:宿主 automations 找到任务 automation-1788516378186(18:06-18:31, result_success=1, runs_json 完整)→ 工作台库 source id=116 已入库但 **aweme_id=null** → 前端 dsh-data.js 取数 `WHERE video_id=? OR (aweme_id IS NOT NULL AND aweme_id=?)`(要求 NOT NULL)→ 查不到
- **根因(双规范化不对称)**:server.js importAccountIntoDb 的 matchAweme 用 normTitle(folder) 匹配 account_videos.video_title——但①文件夹命名规则「标题去特殊符号」把词间空格也吞了("小主人: 终于"→"小主人终于"),normTitle 只删标点保留空格("小主人 终于")→ 两侧永不相等;②全角问号「?」不在 normTitle 删标点集合(title 尾部残留 ? 干扰)→ 精确/包含匹配双失效 → aweme_id=null 脏入库(09-01 曾修标点缺全角问题,但空格不对称与 ? 漏删残留至今)
- **修复(server.js,治本)**:新增 `normKey = normTitle(s).replace(/\s+/g,'')`(无空格紧凑形态),xlsxByNorm/dbByNorm 键与 matchAweme 比较统一用 normKey;normTitle 标点集合补全角「?」。语法过 + 本地模拟唯一候选命中 7674245412476081913 ✓
- **重跑验证**:重启 8900(k9DZfI)→ POST /api/import/account(import 开头自动清 aweme_id/video_id 双 null 脏记录)→ source 命中 aweme_id、content 4787B + analysis 29887B(S1-S40 全 40 场次)、脏记录 0、前端查询语句模拟命中 ✓
- **教训沉淀**:凡"产物落盘成功但页面查不到"→ 先查库中记录关联键(aweme_id/video_id)是否为 null;文件夹名与库标题匹配必须同构规范化(无空格紧凑 + 全角标点全集),两侧规则各改一处即失效
## R77 import 告警 + prompt 自查 + 全功能落库排查(18:39-19:00,用户确认实施)
- **#111 import unmatched 告警(server.js)**:importAccountIntoDb 视频分析循环重构——awemeId 命中后反查 account_videos.id 一并填 video_id(双键关联,前端 video_id/aweme_id 皆可命中,历史 video_id 多为 null 仅靠 aweme_id 兜底);**awemeId 匹配不到 → 记 stats.unmatched + unmatched_folders 并跳过插入**(不再制造双 null 脏记录、避免"入库假成功",补 xlsx/视频列表后重跑即恢复);stats 初始化加 unmatched:0/unmatched_folders:[];路由直接返回 res 自动带出
- **#112 解析 prompt 自查(data-pages.js SKILL_HINT_VIDEO_PARSE ⑤步)**:入库后强制自查——检查返回体 unmatched/unmatched_folders 含本次视频文件夹 → 明确汇报「入库关联失败」禁止报成功;再查询库中该视频确能查到 source 记录方为成功。该常量为唯一解析入口(解析/刷新共用,行 1549 组装)覆盖全入口;技能侧 F5 文档无入库步骤(入库只在工作台 prompt 层)无需同步
- **#113 全功能落库排查结论(库内健康)**:双 null 脏记录 source/analysis=0;analysis 12/12 有 aweme_id(选题 JOIN 正常);rewrite_log 26/26 全关联;account_videos 626/626 有 aweme;孤儿 source 0。dry-run 31 个产出文件夹 21 匹配;10 个 unmatched 全属**历史遗留且已入库无害**——王微斯 4 个(早期 folder 标题截断'关于我想你这件事'=标题首句+标签,非完整标题规则,但对应视频 source/analysis 09-03 早已入库);小咪橘座 6 个(账号未登记 hot_accounts→无映射源,且 folder 名带'人'字标题错乱,账号级缺失非匹配缺陷)
- **验证**:服务重启(s4hdzW);平凡胡德禄重跑 import → video_source=1 unmatched=0 ✓(#111 生效);data-pages.js bump ?v=20260904u→v
- **待办**:本批改动未 commit(R76+R77 与 R64-R70 已 push 过、R76/R77 新改动待提交)