Files
mcn-short-video/.workbuddy/memory/2026-09-03.md
T

184 lines
34 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 2026-09-03 工作日志
## 后台自动化任务全量清空(~/.workbuddy/workbuddy.db automations 表)
- **背景**:用户询问「后台在执行什么任务,没用的任务是否可以清空」
- **盘点结论**(只读查询 workbuddy.db):
- 运行状态表 automation_runtime_state 58 条全部 `running=0`——**当前无任何任务在执行/排队**
- automations 表 66 条全部为 once 一次性历史任务(65 ACTIVE + 1 PAUSED),created 08-27~09-02,无 recurring
- 57 条已跑完(ACCEPTED/成功),1 条被 user_cancel 中断(导入指令·周小闹 PENDING_REVIEW),8 条从未运行(08-31 旧重复任务,已被 09-01 uuid 新版取代)
- **执行**:经用户确认「全部清空 66 条」,逐条 automation_update mode=delete(软删机制,置 deleted_at)
- **验证**:非软删有效任务 0 / 软删 66 / running=0;automation_runs 58 条运行历史保留(产物与会话回溯不受影响)
- **要点**:删除任务定义不影响 automation_runs 历史与已生成产物;工具删除为软删(deleted_at),表行物理保留
## 清理规则固化进技能(09-03,用户定红线:只清过期/错误失败任务)
- **背景**:用户问「WorkBuddy 不会自动清除过期任务吗」→ 答不会(实测:66 条积压 08-27~09-02 全保留,跑完仍 ACTIVE,调度器只扫未来时间不再触发但也不自动删)→ 用户要求「加入 skill,部署到用户环境也能执行,只能清理过期或者错误失败任务」
- **新增**:`references/接口调用/自动化任务清理规范.md`(源 V1.0)——触发场景(🧹后台任务清理,不创作)、判定标准(🟢过期已完成 once/🔴错误失败/PENDING_REVIEW/last_error/⚪从未运行死任务;**禁清** recurring/未来时间/running=1/QUEUED/IN_PROGRESS/deleted_at 非空)、执行步骤(只读 SQL 盘点→归档→列清单确认→**走宿主 automation_update 删除禁直改库**→复核)、实测事实(宿主不自动清理/删除不影响产物/工具删除幂等软删)
- **SKILL.md 挂载**:触发条件区新增 🧹后台任务清理 场景 + frontmatter updated_at→2026-09-03、last_change 追加
- **同步三处**:源 `D:\AgentSkill\mcn-video-script\project\短视频脚本创作\V1.0\`(=WorkBuddy 用户技能目录软链 `C:\Users\maidou\.workbuddy\skills\短视频脚本创作`→V1.0,md5 一致同一文件)+ dsh 副本 `C:\Users\maidou\.dsh\skills\short-video-script\`(独立副本,需手动同步,updated_at/deployed_at→09-03);Lite1.0 默认不动(08-26 同步策略)
- **重要事实(09-03 实测)**:`C:\Users\maidou\.workbuddy\skills\短视频脚本创作` 是 → `/d/AgentSkill/mcn-video-script/project/短视频脚本创作/V1.0` 的符号链接——改源技能即改 WorkBuddy 用户技能,dsh 副本才是唯一需手动同步的独立副本
## mcn-data-insight 复制进短视频创作技能 subskills(09-03)
- 用户指令:把 `D:\AgentSkill\mcn-data-insight` 复制到 `project/短视频脚本创作/V1.0/subskills/mcn-data-insight`,**去掉 git**
- 源结构:SKILL.md(实为 third-party-skills-index 索引,19K)+ references/规则/ + `.workbuddy/`(内含 memory 工作日志 / scripts 3个 py / **skills 13 个第三方子技能 4.2M**:douyin-account-diagnosis、douyin-ai-feed、douyin-content-surge、douyin-daily-hot、douyin-hot-trend、douyin-prohibited-word、douyin-search、douyin-top-account、douyin-weekly-surge、douyin-works-crawler、multi-copywrite-alchemy、nuwa-skill、playlet-douyin-feed)
- 执行:整目录 cp -r → 删副本 .git → 37M→4.3M;无嵌套 .git;`ls .workbuddy/skills/` 13 子技能齐全
- 注意点(未处理,待用户定夺):该 SKILL.md 目录树描述为平铺(douyin-*/ 在根),实际子技能全在 `.workbuddy/skills/` 下——复制保持原样,未改引用;是否要在父 SKILL.md 注册该 subskill 未做
## mcn-data-insight .workbuddy 重组(09-03 续,R6)
- 用户指令:`.workbuddy` 中的 scripts 放上级、skills 迁上级并改名 **subskills**
- 执行:`mv .workbuddy/scripts scripts` + `mv .workbuddy/skills subskills`;`.workbuddy/` 仅剩 memory(原项目历史日志,用户约定「历史日志保留原路径不变」→ 未改其内部路径)
- 引用同步:Python 批量替换 21 个文件(负向后顾保护 `~/.workbuddy/` 用户级路径):
- `.workbuddy/scripts/`→`scripts/`(root SKILL.md setup 命令、抖音数据规则.md、13 子技能 py 报错提示/SKILL.md/README)
- `.workbuddy/skills/`→`subskills/`(douyin-search SKILL.md 命令示例、抖音数据规则.md 存放路径节)
- douyin-account-diagnosis 两个 README「放入 .workbuddy/skills/」语义为用户级安装 → 改 `~/.workbuddy/skills/`
- root SKILL.md:技能清单 目录列加 `subskills/` 前缀 ×10、结构树按新布局重写(新增 scripts/ + subskills/13 子技能清单)、更新记录追加 2026-09-03 行
- 保留未动:SKILL.md 安全审计状态表 + L77「存档于 .workbuddy/security-audit-*.md」+ 更新记录历史行(报告文件本就不随包分发,属原项目历史存档,待用户定夺是否清理)
- 验证:非 memory 范围 0 残留裸 `.workbuddy/scripts|skills`;修改过的 py py_compile 全过
- 结构定稿:`mcn-data-insight/{SKILL.md, references/规则/, scripts/(3py), subskills/(13子技能), .workbuddy/memory/}`
- 待用户决定:①.dsh 副本是否同步该新子技能(dsh short-video-script 结构待确认)②memory 是否移出 .workbuddy ③安全审计表/历史存档行是否清理 ④子技能 douyin-account-diagnosis 内同名嵌套目录是否平铺
## 全技能树相对路径审计与规则固化(R7/R8,09-03 上午)
- 范围:短视频脚本创作 V1.0 全树(主技能+references/references-add/scripts+全部 subskills 及嵌套)相对路径全面审计
- 扫描结论:Windows/Unix 绝对路径命中几乎全为「环境判别锚点(D:/AgentSkill 是否存在/.dsh)/路径配置表/示例路径」按设计保留;browser-harness/envs/(conda venv)有 .gitignore `**/browser-harness/envs/` 兜底不随分发,豁免
- 真实修复:①V1.0/SKILL.md 七节「失误与规避记录.md」越级引用 `../../../` 改语义说明(技能包外文件、仅开发机;源+dsh short-video-script 两处)②mcn-dou-analysis/subskills/nuwa-skill-main 断链(README 多语言/COMMUNITY/CONTRIBUTING + fidelity-scorecard + sun-yuchen LICENSE)→ 官方 GitHub URL,源+dsh 副本同步(同 mcn-data-insight/nuwa-skill 上轮修法)
- 自有内容 md 断链复验 = 0(剩余仅第三方参考包 seedance 黑神话项目/openstreetmap 内部示例,豁免)
- **Task #78 规则固化**:新建 `references/规则/路径引用规范.md`(P0:相对路径铁律+允许项~占位/__file__/URL+禁令盘符/Unix/越级+豁免仅开发机工具·路径配置·示例·历史日志+自检方法),模板同步 V1.0+4 自有 subskills(mcn-data-insight/dou-analysis/video-prompt/script-review 各 references/规则/)+dsh 4 副本(short-video-script/dou-analysis/storyboard-prompt/script-review);5 源 SKILL.md+dsh SKILL.md 各挂 🔴 引用行(dou-analysis 表格锚点插入须放标题后非表头间——dsh 初插错位已修)
- 规则文档示例链接用 code 包裹防断链校验误报(某文件.md 占位)
- 提交:V1.0 20 项(14M+6??:含之前遗留 frontmatter/后台清理触发条款+自动化任务清理规范.md)
## R9 mcn-data-insight 收尾(09-03 上午)
- 用户 4 点决定:①删 `.workbuddy/memory` ②清理 SKILL.md 历史存档行(安全审计表/存档说明/更新记录历史) ③去 douyin-account-diagnosis 同名嵌套 ④**dsh 部署**;追加决定:nuwa-skill **整体删除**、multi-copywrite-alchemy **移至桌面**(理由「这里应该都是数据获取技能」)
- **★git rm 沙箱坑(重要,2 次踩)**:`git rm -r` 删百级文件在本沙箱被 SIGTERM 反复中断 → 结果=只删磁盘不写索引(全变 ` D` 未暂存)+ 留 index.lock + 中断时范围失控半删除(曾把整个 subskills 树删掉)。修法:`rm -f .git/index.lock` 清锁 → `git checkout HEAD -- <路径>` 从 HEAD 恢复误删 → **纯 `rm -rf` 删磁盘 + `git add -A -- <精确路径>` 暂存**(不经 git rm)。规律:git rm 触大范围删除必被杀;rm+add 分离安全
- 删除构成(157 文件):`.workbuddy/memory` 9 + 内层嵌套 10 + nuwa-skill 133(git 跟踪数;186 含非跟踪)+ multi-copywrite-alchemy 5;nuwa/multi HEAD 零残留
- SKILL.md 大清理:frontmatter/简介改「**抖音数据获取技能集**(Third-party Skills 百宝箱)」,技能清单**补全 11 行**(douyin-search/top-account/playlet 原缺列表,文件数=git ls-files 实测),删 multi(#5)/nuwa(#8) 两详情节+15 分身表,目录树 11 子技能,安全审计表整表删,更新记录精简为一行 09-03,详情节编号 1-8 连续重排(内容含两处双 `---` 修复);抖音数据规则.md 同步 13→11
- **技能定位定稿:mcn-data-insight = 纯数据获取技能集(11 个红狐系子技能)**;nuwa-skill 已删——注意 mcn-dou-analysis/subskills/nuwa-skill-main 是**另一份**(账号分析方法论组件,保留勿混)
- 提交 `eaecdd4`(159 files, -41007 行)已 push origin(f4f6938..eaecdd4)
- dsh 部署完成:`C:\Users\maidou\.dsh\skills\mcn-data-insight\` 新建(与源 diff=0、79 文件,无 .workbuddy)→ commit `2c3cf98`;**pycache 误入库**(scripts/__pycache__ 2 pyc)→ 清理 commit `9cee86a` + `.dsh/.gitignore` 追加 `__pycache__/`、`*.pyc`(V1.0 源仓库本就忽略,磁盘 pycache 已删)。dsh 2 commit 本地未 push(2h 节奏)
- 桌面迁移:`C:\Users\maidou\Desktop\multi-copywrite-alchemy\`(5 文件:SKILL.md + references×4)
## git 收尾(09-03 上午补录)
- dsh 仓库:未提交变更 = R1-R8 期间同步的规则(short-video-script 09-03 后台清理触发/frontmatter、script-review v1.3、4 处路径引用规范.md、自动化任务清理规范.md、nuwa-skill-main 3 处 URL 修复)→ commit `9a90e19`(12 files +367/-14)已 push origin(bc810f1..9a90e19,含 2c3cf98/9cee86a 共 3 commit)
- 源仓库 2 commit(本地未 push,2h 节奏):
- `116b7a2` 记忆维护(2026-09-03.md 追加 + MEMORY.md 压缩 22746→10416 字节)
- `d57b830` 历史遗留落地:**发现根 `dist/` 5 文件 = 用户早前移到 `project/短视频对话题分析/dist/` 的参考产物**(100% rename 识别,screenshot 存档不可再生)→ 纳入跟踪而非删除;case_1 案例目录 28 文件确认删除(磁盘早已删)
- 坑:`git add -A -- <中文路径>` pathspec 不匹配(bash 传参编码)→ 改全量 `git add -A`(先确认工作树只剩目标变更);rename detection 会把「删根 dist + 新位置 untracked」自动配对成 rename,commit message 需按 rename 语义写
## 达人账号表移出 mcn-dou-analysis 技能包(09-03 上午)
- 用户问「技能包内为何有达人账号表,不需要就删除」→ 查明:表是技能工作流登记台账(SKILL.md 红线 L42 15 列 + 功能一/二/六 7 处引用),但**内置副本=08-26 过期数据**(仅小咪橘座/旧梦留声机 2 账号),权威台账在**桌面 MCNSkill项目/达人账号表.xlsx**(含俊希 JJX0827/281.9万粉 08-31 更新、3 账号、数据更新)——技能包副本从未再更新
- 处理(用户指示本地文件放桌面 MCNSkill项目):删除技能包内置 xlsx(零数据损失,桌面份更全)+ SKILL.md 红线行/Step 1.0 + feature/01 两处改为「达人账号表=**外部数据文件不入技能包**(存放于产出根目录同层,表缺失按 15 列现场新建)」;feature/02/06 逻辑引用保留原文
- 提交 `5ccaaef`(源仓库,本地未 push)
- 待办:dsh 副本 skills/mcn-dou-analysis SKILL.md 同 7 处引用且无表文件——同步说明段需用户授权
- **dsh 侧澄清(用户确认)**:`D:/dshworkspace/达人账号表.xlsx`(08-26 17:28)= dsh 环境遗留死数据,**内容重复 2 遍(损坏导出)+ 停更 + 无俊希**,用户确认「dsh 数据已经没更新了」→ 不作权威、不维护、不同步 dsh 副本 SKILL.md。红线说明修正为「权威台账=桌面 MCNSkill项目 份(①③环境)」→ 提交 `aaafeec`
## 目录改名 R13:mcn-video-script → mcn-short-video(移交用户手动,09-03 上午)
- 用户要求本地目录与远程 git 名统一(origin 早已是 `mcn-short-video`)
- 已完成前置:3 处硬编码路径引用更新并提交 `7d6048c`(build-create-prompts.cjs L75、submit-review-tasks.cjs L30 数据库路径;mcn-dou-analysis SKILL.md L82 源技能路径);软链 `短视频脚本创作` 已删待重建
- **改名被占用阻塞(Device or resource busy 反复)**:根因=多进程持句柄/cwd——pwd 实证 Bash 工具自身 cwd 曾停在目标目录内;Bash cwd 切出后仍 busy → node 4444 等工作台服务 + WorkBuddy.exe 多进程仍持句柄(netstat/wmic/PowerShell 通道均无法取进程命令行取证,wmic 已不可用、PS 通道空输出)
- **结论:用户手动执行改名**(需完全退出 WorkBuddy 释放句柄后资源管理器重命名)
- 改名后收尾待办:①重建软链 `ln -s "/d/AgentSkill/mcn-short-video/project/短视频脚本创作/V1.0" "/c/Users/maidou/.workbuddy/skills/短视频脚本创作"`;②push `7d6048c`(当时唯一未 push commit);③grep 残留 `mcn-video-script` 引用(memory 日志除外)
- **09-03 11:12 用户决定搁置改名** → 软链已重建(指向当前 mcn-video-script 路径,技能恢复可用);7d6048c 预改名引用已 `git revert` 回退(`09bc9be`,3 处路径恢复 mcn-video-script 全树零残留);日志补录 `3de1c0f`
## 工作台任务模型跟随用户 AUTO(09-03 11:17 实证定稿)
- **问题**:用户问工作台任务能否跟随 WorkBuddy 模型选择(如 AUTO)——R11 已知 /api/run model_id 钉死 deepseek-v4-flash
- **机制实证**:①调度器 `modelId: row.model_id ?? void 0` + `setSessionModel` —— **model_id 有值必强制指定会话模型**(这就是全跑 flash 根因);无值(NULL)不强制走宿主默认;②用户 UI 模型选择是**会话级**的(sessions.model 列),最近 6 条手动会话全 `'auto'`(AUTO=系统按复杂度自动路由,小写存储);③66 条历史任务 65 flash+1 pro 无 auto/null 案例;④models.json 空、settings 无 model 键(非全局设置)
- **方案 A 落地(用户选 A)**:server.js /api/run L569 model_id `'deepseek-v4-flash'`→`'auto'`(加 09-03 注释含回退说明:若调度不认 auto 改留 NULL)
- **端到端实证通过**:提交测试任务「模型跟随auto验证」→ automations.model_id='auto' → 调度拾取创建会话 `98f73483` **model='auto'**(对比旧任务会话 model=deepseek-v4-flash)→ run ACCEPTED result_success=1、session completed。**调度 API 接受 'auto' 字符串且等效 UI 选 AUTO**
- 提交 `cf359f4`(源仓库本地未 push)。测试任务/会话已留在左侧会话栏(可忽略)
- 遗留:若日后想任务级精细选模型(flash/pro/auto)→ 方案 C 前端弹窗下拉+后端透传,未做
- 服务启动坑(重踩):Bash 工具 `&` 后台进程随命令结束被回收(8900 连接被拒)→ 必须 Bash `run_in_background=true` 启动长驻服务;curl 需 `--noproxy "*"`(全局 socks 代理 127.0.0.1:10800 拦截 localhost 报 upstream connect failed)
## 升级:动态跟随用户模型选择(09-03 11:22 定稿,替代固定 auto)
- 用户追问「能否真正做到用户在 UI 选什么模型任务就用什么」→ **能**。修正认知:WorkBuddy 模型无全局设置(models.json 空/settings 无 model 键),是**会话级**(sessions.model);且此刻用户最新活跃手动会话 model='deepseek-v4-flash'+thought='high'(非 auto——auto 是 09-02 旧会话)
- **实现**:/api/run 提交任务前动态读 `最近活跃手动会话(is_background_automation=0 AND model非空)的 model` 写入 model_id;无手动会话兜底 'auto'。用户在 UI 切 auto/flash/pro → 任务随之
- **端到端实证通过**:测试任务「模型动态跟随验证2」→ model_id='deepseek-v4-flash'(=当时最新手动会话 model,读取匹配)→ 会话 model=flash → run ACCEPTED result_success=1、session completed
- 提交 `cea7d11`(源仓库本地未 push)。cf359f4(固定 auto)+ cea7d11(动态跟随)两次演进均留史
- 待 push 累计:7d6048c/09bc9be/3de1c0f/cf359f4/cea7d11(5 commit,2h 节奏);左侧会话栏留 2 个验证任务(auto验证/动态跟随验证2,可忽略或清理)
## 榜单落盘规范 + 三方数据分层(commit 4c18e7e)
- 目录结构实证落定:桌面 `MCNSkill项目\` 顶层分「业务账号/三方数据」——账号产出直挂账号文件夹,三方数据统一下 `三方数据\{数据源}\`(当前数据源=红狐数据 → `三方数据\红狐数据\抖音榜单\` 已建);文件名**不加数据源前缀**(保 `抖音周榜_` 开头兼容 dsh RANKING_DIR 正则 `^抖音周榜_`)
- 规范固化点(5 处文档已同步):①主 SKILL.md「榜单数据落盘规范」落盘目标表+数据源分层说明;②抖音数据规则.md §2.1(含②dsh 列 D:/dshworkspace/抖音榜单/)+§2.2 示例目录指代+§2.4 幂等铁律;③三子技能 SKILL.md(douyin-daily-hot/content-surge/weekly-surge 落盘路径)
- ai-feed 历史 output 缓存 6 文件(08-07~09 json+html)git rm --cached 解跟踪;.gitignore 现含 subskills/*/output/ + subskills/*/*.json + 抖音榜单/ + *.log
- 待 push 累计:7 个本地 commit(d34ea02..4c18e7e),2h 节奏
## 榜单数据迁移 + 工作台读取路径改造(commit 5bd9dc0)
- 数据迁移:D:/dshworkspace/抖音榜单 27 个周榜 json(9赛道×3期 08-10/17/24)→ 桌面 `MCNSkill项目\三方数据\红狐数据\抖音榜单\`(mv 完成,源目录已空)
- 工作台 dsh-data.js RANKING_DIR 改为运行时判定:MCN_RANKING_DIR env 优先 > `.dsh` 部署(__dirname 含 .dsh)回退 `D:/dshworkspace/抖音榜单` > ①③ 开发机/用户环境 = 桌面 `MCNSkill项目\三方数据\红狐数据\抖音榜单`(os.homedir 真实桌面解析,候选 Desktop/OneDrive Desktop/OneDrive 桌面,fs.existsSync 探测)
- 服务重启(旧 PID 39616 Stop-Process → run_in_background 新启 DIi3hG)→ ranking 接口实测 450 条(9×3×TOP50)读取正常;前端无硬编码路径(全走 /api/dsh/ranking 只改后端即可)
## 赛道规则五次调整:剔除颜值造型(commit cdbbe48)
- 周榜保留赛道 7→6:生活vlog/小剧场/亲子/美食/情感/旅行;颜值造型移入排除 21(09-03 用户指令)
- 同步三处权威白名单:fetch_filtered_data.py KEEP_CATEGORIES+docstring(6/21)、抖音数据规则 §1 表+JSON+演进记录(五次调整)、douyin-top-account SKILL.md 周榜循环注释
- 缓存目录仍含颜值造型历史文件(3期)未删——按新规则后续不再获取,旧文件是否清理待用户确认
## 赛道规则六次调整:剔除情感 + 缓存数据清理(R20)
- 周榜保留赛道 6→5:生活vlog/小剧场/亲子/美食/旅行;情感移入排除 22(09-03 用户连续指令「颜值造型 去掉」「情感 去掉」)
- 同步三处权威白名单(同五次调整三处):fetch_filtered_data.py KEEP_CATEGORIES+docstring(5/22+六次调整注释)、抖音数据规则 §1 表/JSON/演进记录、douyin-top-account SKILL.md 周榜循环(5 赛道)
- **缓存目录数据清理(用户指令「去掉的赛道 现有数据也要删除」)**:删除全部已剔除赛道历史文件 12 个(颜值造型 3 + 情感 3 + 二次元 3 + 化妆美容 3),目录现仅保留 5 赛道×3 期 = 15 文件
- 验证:py_compile OK + 断言(保留=5 赛道,颜值造型/情感不在)+ ranking 接口实测 categories=5(美食/生活vlog/旅行/小剧场/亲子)dates=3 total=250 读取正常
- 教训:用户「情感 去掉」紧接「颜值造型 去掉」=连续精简指令,需完整执行不可只当上一条确认
## 工作台「账号周榜」入口 →「热点数据」多榜 tab 页
- 用户指令:「账号周榜入口改为热点数据,里面用 tab 区分数据列表,和首页一样」
- 改动:app.js 首页入口卡片 title 账号周榜→热点数据(desc 多榜切换)、CRUMB_TITLES.ranking + router titles.ranking→热点数据;data-pages.js renderRanking 重构为多 tab 页——RANK_TABS 四 tab(week 账号周榜/hot 视频热榜/likes 点赞榜/fans 涨粉榜,与首页 rank-preview 一致),week 显示完整周榜列表(筛选/排序/分页/关注,原逻辑保留),其余 tab 显示「建设中」占位(与首页行为一致,后端 RANKING_DIR 目前仅周榜 json,后续数据落盘即可接入)
- 验证:node --check 两文件通过;服务 8900 存活、新 js 已生效(grep 热点数据=3/1);带 ?v= 打开 #/ranking 页面
- 纯前端静态改动,server.js 未变无需重启服务
## git push 收尾 + docs 热点数据命名同步
- 两仓库 fetch 无分叉后 push:源 mcn-short-video d34ea02..a122760(13 commits,含榜单迁移/模型跟随/五调六调/热点数据页);dsh dsh_MCNProject 9a90e19..8fb747e(赛道五/六次调整)
- docs 遗留项:`mcn-work-shop/docs/AI会话任务输入输出对照.md` L21 入口 7 由「周榜(#/ranking / 首页)」改「热点数据(#/ranking 账号周榜 tab / 首页 rank-preview)」(commit e25168d,待下轮 push)
- 全工作台 md 复查「周榜|热点数据」仅此 1 处入口名引用,tab 内「账号周榜」名保留合理
## 补齐 douyin-rise-ranking(抖音涨粉榜)第 12 子技能(09-03 午后)
- **背景**:三榜 tab 对应技能确认(红狐官方链接 skillCode 映射:视频热榜 WqCrqrqr=douyin-daily-hot、点赞榜 M4zkHt29=douyin-content-surge、涨粉榜 EZTwMSse=**douyin-rise-ranking 本地缺失**)→ 官方仓库全套下载 `.workbuddy/tmp-rise/`(SKILL.md 304 行/README×2/core_workflow 284 行/dy-rank-api 98 行/gzh_growth_fetcher.py 841 行)
- **审计结论(安全 ✅)**:API Key 仅 env REDFOX_API_KEY 读取(env>shell 配置>提示,无硬编码);唯一写文件=自动写 `~/.workbuddy/cache/dy_rise_ranking_data.json`(单 key 覆盖多赛道=设计缺陷);无 subprocess/eval;命名 `gzh_growth_fetcher.py`+注释「供gen_gzh_html.py直接读取」=公众号技能复制改名残留
- **本地化 4 要点(落位 `subskills/douyin-rise-ranking/`,6 文件)**:①脚本改名 `douyin_rise_fans.py`(docstring/argparse 同步)②**去官方自动写盘缓存**:删 DATA_CACHE_FILE 常量/--from_cache 参数与分支/写盘块 → 纯 stdout(对齐本地「脚本零写文件,落盘归执行层」模式)③core_workflow.md:缓存描述→主 SKILL.md 落盘规范引用、查看更多改「读本地已落盘 JSON 的 account_list 21-50」、删「禁止子任务执行」声明(与 subskills 子技能定位冲突)、参数表去 --from_cache ④SKILL.md 重写为 daily-hot 精简式(触发词/安全约束含 `抖音涨粉榜_{赛道}_{日期}.json` 落盘/日周月时间判断/27 赛道/表格模板+涨粉分析三段式+订阅提示),README.md 重写(旧版残留 COZE_REDF0X 错键+CONFIG.json 已清),README.en.md/dy-rank-api.md 原样保留
- **真实冒烟通过**:`--rank_type week --category 美食 --raw --top_n 3` → status success、rank_date 2026-08-24(时间范围 24-30)、🥇书亦烧仙草 874.1万 7.2% +59.0万、三段式分析完整、account_list 50 条全字段、纯 stdout 未落盘
- **主 SKILL.md 4 处同步**:技能清单加第 12 行(文件数 6)、落盘规范表「4 涨粉榜」状态 ❌预留→✅已实现、目录树 11→12 + douyin-rise-ranking 行、更新记录追加一行
- **dsh 同步**:`C:\Users\maidou\.dsh\skills\mcn-data-insight\` cp 主 SKILL.md + douyin-rise-ranking 目录,diff=0,subskills 11→12
- **Edit 工具坑(重踩)**:同文件并行 Edit 有竞争(目录树改动未落盘,返回 success 却丢失)→ 同文件编辑必须串行/完成后 grep 复核;CRLF 文件多行 Edit 的 old_string 不匹配 → 行级 Python 替换脚本处理(归一化行尾);v1 脚本 R1 pattern 想当然漏中间三行 → 教训:pattern 逐字符抄 Read 输出,复杂删除改行级状态机
## 工作台删除「涨粉榜」tab(09-03 13:15,用户选「只删工作台 tab」)
- 用户指令「删除涨粉榜功能」→ 范围确认:**技能 douyin-rise-ranking 保留**,仅删工作台热点数据页/首页的涨粉榜 tab(三榜变两榜)
- 改动 2 文件(纯静态,无需重启服务):`mcn-work-shop/public/app.js` 首页 rank-tabs 删 fans 按钮行(L329)+ 注释「3 个新榜」→「2 个」;`data-pages.js` RANK_TABS 删 `['fans','涨粉榜'],` + L507 注释去涨粉榜
- 首页 tab 点击 handler 为通用逻辑(week=列表/其余占位)无 fans 特判,删按钮即自动收敛;cdp-verify-*.mjs 里的 `fans` 是**周榜表格粉丝列**(rk-num nth-child(5))非涨粉榜 tab,保留未动;docs/AI会话任务输入输出对照.md 仅提入口未列 tab 无需改
- 验证:node --check 两文件通过 + 服务 8900 伺服 js `grep -c 涨粉榜`=0;CDP 9224/9223 无调试浏览器未做视觉验证
- 已 push 源仓库 0cd2c45..09dc431(fetch 无分叉,跟踪引用正常未丢失);dsh 仓库无工作台副本无需提交
## 热点数据三榜接入:视频热榜/点赞榜 周粒度真实数据(09-03 傍晚)
- **任务链**:①写周粒度抓取器 `mcn-data-insight/scripts/fetch_week_ranks.py`(fetch_week_ranks.py,--board hot|likes|both + --date 周标号 + --force;服务端周窗口一次调用=likesRank 传周一~周日 / hotContentRank 传周日单参官方七日口径,**禁止逐日累加**)②落盘 2026-08-24 完整周:hot 28 赛道 1396 条 + likes 28 赛道 1400 条 → 桌面 `三方数据\红狐数据\抖音榜单\抖音周榜_{视频热榜|点赞榜}_{赛道}_{周一}.json` ③后端 board-aware:dsh-data.js parseRankFile/listRankFiles/rankingMeta(board)/getRanking(board)(DEF_KEY 随榜 week=comprehensiveScore/hot=likeCount/likes=add_digg_count;作品榜条目不查账号表 inDb 恒 false)+ server.js `/api/dsh/ranking` 透传 board(默认 week 兼容)
- **前端改造(本段)**:`data-pages.js renderRanking` 重写为 board 驱动三榜渲染——每榜独立 state(日期/赛道/排序/翻页切 tab 保留)、COLS 列模板(week=账号表 10 列含关注功能列;hot=排名/作品标题(链 workUrl)/作者/赛道/点赞/评论/分享/收藏/发布时间;likes=同构但 add_digg/add_collect/add_comment/add_share + create_time_str)、SORT_NUM 排序字段集合、defKey 回显默认降序箭头、meta 每榜独立缓存;`app.js` 首页 rank-preview 同步三榜——_PREVIEW_COLS 三模板 + setRankBoard 切榜重拉 meta、rk-video grid(8 列)CSS;style.css 加 .rk-tl 标题截断 + .table.table-rank.rank-video 列宽规则
- **验证**:node --check 三文件通过;node 直调 getRanking 三榜真实数据(hot 1396/likes 1400/week 250、美食筛选=50 条单赛道);重启 8900 服务(旧 36532 → 新 29172,cdp 冒烟 9224 无调试浏览器);curl 静态资源 200;内联渲染模板喂真实条目无异常
- **文档同步**:mcn-data-insight 主 SKILL.md 落盘规范表「2 视频热榜/3 点赞榜」❌预留→✅已实现 + 补 fetch_week_ranks.py 说明段;douyin-daily-hot/douyin-content-surge SKILL.md 补「日粒度归档走自身命名,周粒度由 fetch_week_ranks.py 落盘」边界;dsh 副本 mcn-data-insight cp 同步 4 文件(主 SKILL.md + fetch_week_ranks.py + 2 子技能 SKILL.md)
## ★热点数据三榜修正:全品类单文件+三子目录(09-03 晚间,用户纠正全赛道误读)
- **用户纠正(重要)**:「全赛道获取所有数据」= **不传 type 一次调用拿全品类**,非按 28 赛道循环;批评「整这种浪费钱的操作前先问问」。教训三层固化:①抓取器 docstring + SKILL.md 成本铁律「多赛道/多日/多窗口付费调用前必须先向用户确认次数与范围」②本日志 ③失误复盘见上
- **API 实测结论(固化防再探测)**:likesRank 无 type=50 条全品类周榜(source 抖音每日热门作品榜-GitHub,周一~周日);hotContentRank **source 必须「抖音每日点赞飙升榜」生产名**(写「抖音七日点赞飙升榜-GitHub」返回空),无 type=50 条(startTime=周日七日口径);**单次上限 TOP50**(limit=100/page=2/offset=50 全被忽略)
- **新落盘契约**:`抖音榜单/` 三子目录 `账号周榜/`(抖音周榜_{赛道}_{周一}×多期,douyin-top-account 落盘)、`视频热榜/`(抖音周榜_视频热榜_{周一}.json 全品类单文件/期)、`点赞榜/`(抖音周榜_点赞榜_{周一}.json);旧 28 赛道 56 文件归档 `_archive_旧28赛道结构_20260903/`;顶层 category="全部",赛道在 list[].category
- **后端改造**:dsh-data.js RANK_SUB 子目录映射 + rankFilePath(dir,name) + parseRankFileIn/listRankFiles(子目录优先+根目录旧平铺回退)/collectCategories(week=文件名赛道;hot/likes=条目 category 并集)/getRanking 赛道过滤(week 文件名级、hot/likes 条目级);工作台实际读取桌面目录(源技能 __dirname 无 .dsh → 桌面 71→15+2 文件;D:/dshworkspace/抖音榜单 为空是 dsh 部署形态)
- **验证**:node --check ✓;node 直调 week 250/3期/5赛道 + hot 50/12赛道 + likes 50/14赛道;筛亲子 hot=2/likes=3;服务重启(29172→3912)curl 三榜 API 全通;前端赛道下拉动态(meta.categories)无需改动
## 工作台赛道白名单过滤(09-03 15:05,用户要求「只留所需赛道」)
- **需求**:热点数据页赛道筛选下拉与列表(含「全部」)只保留所需赛道数据
- **口径**:与账号周榜 douyin-top-account 保留 5 赛道一致;**账号榜 type=生活vlog / 作品榜条目 category=生活记录**(两套枚举),白名单取并集 RANK_KEEP=['生活记录','生活vlog','小剧场','亲子','美食','旅行'](dsh-data.js)
- **实现**:collectCategories 白名单∩实际出现(按 RANK_KEEP 顺序);getRanking hot/likes 条目无条件白名单过滤(「全部」也只留白名单)+ 请求赛道过滤;week 不受影响
- **验证**(服务 5500):week 下拉 5 赛道/250 条不变;hot 下拉[生活记录,小剧场,亲子,美食]全部 29 条;likes 下拉[生活记录,小剧场,亲子,旅行]全部 28 条;当期 0 条赛道(hot 旅行/likes 美食)不进下拉
## 热点数据 UI:入口改名 + tab/筛选同行(09-03 15:10)
- 入口卡(首页 data-card)title「账号周榜」→「热点数据」,desc→「账号周榜 · 视频热榜 · 点赞榜」;CRUMB_TITLES ranking 同步改「热点数据」(原与 page-title 不一致)
- data-pages.js renderRanking:tabs 并入 toolbar 一行(返回|标题|三榜tab|右侧赛道下拉+◀日期▶),删独立 tabs() 输出 3 处;错误/空态也带 tab 可切换
- CSS:.page-toolbar .rank-tabs 行内化(border-bottom none、margin 0、center)
- index.html 静态引用加 ?v=20260903 版本参数(防缓存旧 js/css;今后改动记得 bump)
- 服务无需重启(静态),curl 资源全 200
## R24 三榜 tab 悬停气泡「近7日数据」(09-03 追加)
- 用户要求:视频热榜/点赞榜 tab「后面加个信息图标 hover 提示近7日数据」→ 澄清后改为**不加图标,纯悬停提示**
- **最终方案(用户定)**:tab 上直接 hover 停留约 2 秒浮现「近7日数据」气泡。实现=纯 CSS:button 加 `data-tip="近7日数据"`,`:hover::after { content: attr(data-tip); opacity:1; transition-delay:2s; }`,基础态 transition 无 delay → **进入延迟 2s、移开立即淡出**(关键:delay 只写在 hover 规则里)
- 覆盖两处同构 tabs:data-pages.js renderRanking RANK_TABS(第三字段 tip,动态拼 data-tip)+ app.js 首页 rank-preview(静态 button 直写)
- 回滚了先做的 info 图标版(ICON_PATHS 'info'、.rank-tab-info span)——用户不要图标,避免死代码已删净
- index.html 版本参数 bump 至 ?v=20260903c;git 75e1846(连同 acb4c3e 一起 push,052550e..75e1846)
## R24 更正:tab 信息图标版定稿 + 首页统计条/入口改名(09-03 续)
- **R24 更正**:上文「悬停气泡」为方向误解,用户原意=**tab 文字后加 ⓘ 信息图标,鼠标指上去(title)显示「近7日数据」**。定稿=span.rank-tab-info{svgIcon('info',13) title=近7日数据}(RANK_TABS 第三字段 tip,hot/likes 有、week 无);CSS .rank-tab-info opacity .5/hover .9,跟随文字色无底色。commit 8719ae5(含首页统计条「热门账号」→「关注账号」,前端 app.js L311 静态占位+L357 动态 items 两处,L111 移植来源注释不改)
- **脚本诊断入口改名**(用户:「AI脚本诊断功能入口改为脚本诊断」)commit 56a3ea5:首页功能卡 title/CRUMB_TITLES reviews/路由 titles reviews/reviews 页 page-title 四处 AI脚本诊断→脚本诊断;**首页统计条保留 AI脚本诊断**(与「AI脚本评分」并列保 AI 前缀齐整,如需同改一句话跟进)
- **教训(同文件多 Edit 并行互相覆盖)**:同文件不同位置多个 Edit 并行提交只部分生效(L306/L706 落空一次、早前 L357 同坑)→ **同文件修改必须一次一个 Edit 串行,改完 grep 逐处核对**;git add/commit 链命令在 escalated 重跑时首跑常显示 nothing to commit 属假象(实际已提交),以 git log 为准
- index.html 版本参数已至 ?v=20260903e