- skill: 素材库分块定义(00~11)、05_极致事件知识库 4 篇、08_对话风格总纲、mcn-video-prompt 提示词质量门禁与外部语料检索流程 - workbench: mcn-work-shop 新增 cli-backend.js(本地 CLI 接入)、工作台视觉交互规范;移除旧 UI 规范 - docs: 根目录极致事件/素材卡/审计方案报告与热门短视频清单入库 - memory: 补 09-14~09-29 日志与自动化任务记忆 - chore: .gitignore 排除 tools/、.tmp-chrome-*/、_k_test.cjs
156 lines
26 KiB
Markdown
156 lines
26 KiB
Markdown
# 2026-09-10
|
||
|
||
## 打开工作台 + 仓库路径迁移发现
|
||
- 启动 MCN工作台:`D:\AI技能\mcn-short-video\project\短视频脚本创作\V1.0\mcn-work-shop\server.js 8900` → http://127.0.0.1:8900 返回 200,正常。
|
||
- **★仓库本地路径已变更**:`D:\AgentSkill\mcn-video-script` → `D:\AI技能\mcn-short-video`(`D:\AgentSkill` 已不存在)。
|
||
- **技能软链失效并已修复**:`C:\Users\maidou\.workbuddy\skills\短视频工作台` 原 junction → 失效旧路径 `D:\AgentSkill\mcn-video-script\project\短视频脚本创作\V1.0`(文件系统残留、目标不存在)。
|
||
- 修法:node `fs.unlinkSync` 删旧链 → PowerShell `New-Item -ItemType Junction -Path <link> -Target "D:\AI技能\mcn-short-video\project\短视频脚本创作\V1.0"`。
|
||
- 验证:isSymbolicLink=true、children=7、SKILL.md 存在。
|
||
- **待办(未执行,等用户确认)**:仓库内 30+ 文件仍写死 `D:\AgentSkill\...` 旧路径(含 V1.0/SKILL.md、references-add/路径配置.md、V1.0/references/规则/路径引用规范.md、Lite1.0、各 subskills、mcn-work-shop/server.js、browser-harness venv 配置等),需做全量路径迁移(注意豁免三类:禁止性规则示例行、变更记录历史行、references-add/路径配置.md)。
|
||
|
||
## 路径治本:环境判定锚点重构为「仓库特征判定」+ 全树写死路径清理
|
||
- **先分类再动手**:全树扫描命中 77 处 `AgentSkill`,分三类——A 环境判定锚点 37 处(规范明确豁免)、B 真实读写路径 8 处(真违规)、C 历史/审计文本 8 处(豁免)。用户确认方案后执行。
|
||
- **新判据(v2 · 两步)**:① 技能路径含 `.dsh` 路径段 → dsh 部署环境;② 不含 `.dsh` → `git -C {技能目录} rev-parse --show-toplevel` 返回仓库根 = 开发机,失败 = 用户环境(无 git 兜底向上找 `.git`)。**必须 `.dsh` 先判**(`~/.dsh` 自身是 git 仓库)。产出根目录三环境结果不变。
|
||
- **实测验证**:从软链 `C:\Users\maidou\.workbuddy\skills\短视频工作台` 执行 `git rev-parse --show-toplevel` → `D:/AI技能/mcn-short-video`,正确识别开发机。
|
||
- **改动 21 文件**:规范层(`references/规则/路径引用规范.md` + 4 份 subskills 副本 + 4 份 `路径配置.md` + README);判定节(dou-analysis / mcn-video-prompt 的 SKILL.md 与 references(-add));MCP 规范 2 份;Lite1.0(SKILL.md + 路径配置 + README)。
|
||
- **B 类修复**:`server.js` 新增 `BROWSER_LOCK_FILE = path.join(ROOT,'.browser-lock')` / `SESSION_CWD = ROOT`;`SESSION_CWD_PATTERN` 由 `'%mcn-workshop%'` 放宽为 `'%mcn-work%'`(兼容历史+新建会话);2 个 `.cjs` prompt 内 DB 路径改用既有 `DB` 常量;`V1.0/SKILL.md` 运行时 `cwds` 改 `<工作台目录>`。
|
||
- **★Lite1.0 结构事实**:`Lite1.0/` 下**无 `subskills/`**(实测),未内置 mcn-dou-analysis。原 SKILL.md 依赖段落既写死 `D:\AgentSkill\mcn-dou-analysis` 又未同步 09-02 结构变更 → 改为「未内置 + 需用请改用 V1.0,或先同步进 subskills 后按相对路径调用」。
|
||
- **BROWSER_LOCK 契约同步**:dou-analysis `references/浏览器搜索抖音账号操作规范.md` 5.6 节 8 处盘符硬编码 → 相对 `.browser-lock`(会话 cwd 即工作台目录)。
|
||
- **残留核对**:`AgentSkill` 仅剩 13 处,全为豁免三类;`mcn-video-script` 1 处、`MCNVideo AI` 3 处均属历史文本。当前规则行零残留。
|
||
- **验证**:3 个 JS `--check` 通过;工作台重启后 8900 单实例监听、HTTP 200。
|
||
- **沉淀**:V1.0 SKILL.md frontmatter(updated_at 09-10 + last_change)、`references-add/变更日志.md`、`失误与规避记录.md #017`。
|
||
- **★B 类违规的实锤后果(取证)**:`D:\AI技能\mcn-workshop\` 下发现 3 个 **0 字节**垃圾文件,文件名是**被剥掉反斜杠的完整路径**:
|
||
- `AgentSkillmcn-video-scriptproject短视频脚本创作V1.0mcn-work-shopmcn-plugin.db`(09-01 16:24)← 对应 `build-create-prompts.cjs` / `submit-review-tasks.cjs` prompt 里写死的 DB 绝对路径
|
||
- `AgentSkillmcn-workshopmcn-plugin.db`(09-01 18:31)← 对应旧 `cwd` + `mcn-plugin.db`
|
||
- `mcn-plugin.db`(09-01 12:26)
|
||
真实 DB 为 `mcn-work-shop/mcn-plugin.db`(4.2 MB,09-07 16:29)。→ 证明写死路径曾导致 AI 会话**落库写偏**(0 字节文件),与失误记录 #015「0 字节误建文件」同类。**未删除,待用户确认**。
|
||
- **未处理/待确认**:① `D:\AI技能\mcn-workshop\` 3 个 0 字节垃圾文件是否清理(该目录还有 `outputs/` 09-01~09-04 产物,勿整体删);② `D:\AgentSkill` 整目录已不存在,用户级 MEMORY.md 里 `ThirdPartySkills` / `AgentPlatform` 两个仓库的本地路径也一并失效(maxdepth 3 未搜到迁移后位置)。
|
||
|
||
## dsh 部署环境废弃:三环境 → 两环境(判定简化为一步)
|
||
- **触发**:用户纠正「第一步 技能路径含 .dsh 路径段 ② dsh 部署环境 —— 没有这个环境了」。实测:`~/.dsh/skills/` 不存在、`~/.dsh/mcn-plugin.db` 不存在、`~/.dsh` 仅剩 profiles/、`D:\dshworkspace` 整个目录不存在。
|
||
- **判据 v3(一步)**:删 `.dsh` 路径段判定步骤,仅保留 `git -C {技能目录} rev-parse --show-toplevel` = 仓库根=开发机 / 失败=用户环境(无 git 兜底向上找 .git)。三环境 → 两环境。产出结果不变(两环境本就同构桌面 MCNSkill项目/)。
|
||
- **改动范围(20+ 文件,续 v2)**:
|
||
- 判定层:4 份 路径配置.md(V1.0/Lite1.0 + dou-analysis + video-prompt)
|
||
- SKILL 层:V1.0/Lite1.0/dou-analysis/video-prompt/data-insight 的 SKILL.md
|
||
- 标准库:5 份 路径引用规范.md(三种机器→两种机器)+ 创作流程规范 + 11_脚本检查和诊断 + 4_账号设定解析和确认 + MCP_工具调用规范 + 自动化任务清理规范
|
||
- 数据源层:fetch_week_ranks.py(删 .dsh 分支代码)、dsh-data.js(删 isDshDeploy 分支)、data-pages.js、douyin-{rise-ranking,weekly-surge,content-surge,daily-hot}/SKILL.md、抖音数据规则.md
|
||
- 账号分析层:账号数据分析方法 + feature/01,03,04,06 + 铁律避坑规则/账号信息获取执行避坑 + 浏览器搜索抖音账号操作规范(159/175)
|
||
- README:references-add/README + dou-analysis/video-prompt 的 references(-add)/README
|
||
- **清理「dsh 原库」过时描述**:dou-analysis SKILL.md 52 行 + 铁律避坑 32/34 行 + feature/01 16 行 + dsh-data.js 13 行注释(dsh 原库已下线,工作台 DB 唯一读写副本)。
|
||
- **残留核对**:全树扫描 .dsh/dshworkspace/dsh 部署/dsh 环境/dsh_MCNProject/②dsh/③用户环境 —— 当前有效规则零残留,剩余全为豁免(变更记录历史行 +「09-10 起 dsh 环境已废弃」说明 + 路径引用规范用户级路径示例 {主目录}/.dsh/...)。
|
||
- **验证**:dsh-data.js `--check` OK;fetch_week_ranks.py `py_compile` OK;工作台重启 HTTP 200。
|
||
- **沉淀**:变更日志新增 09-10 dsh 废弃条目;V1.0 SKILL.md frontmatter last_change 更新。
|
||
- **踩坑**:并行 Edit 同一文件(浏览器搜索抖音账号操作规范.md 159/175 行)发生写竞态,175 行修改丢失 → 串行补做。教训同 #016「同文件多处修改必须串行」。
|
||
|
||
## 工作台配置收敛:端口/DB/目录单源化(config.json + load-config.js)
|
||
- **触发**:用户问「这些设定能否用配置,所有文件和脚本都引用,避免有调整时到处修改」。确认:只收敛代码层 + config.json 放 mcn-work-shop 内。
|
||
- **新增**:`mcn-work-shop/config.json`(port/dbName/outputRoot/businessDataDir/extraRoots)+ `mcn-work-shop/load-config.js`(读取唯一入口 + 默认值唯一来源)。
|
||
- **改动**:
|
||
- `server.js`:`CFG = loadConfig()`;`PORT_BASE = argv[2] || CFG.port`(argv 仍优先);`DEFAULT_ROOT` 用 `CFG.outputRoot`;DB 用 `CFG.dbName`;`saveConfig` 合并写盘保留其它字段;错误提示 dbName 动态化。
|
||
- `dsh-data.js`:删本地 loadCfg,`DSH_DB` / 榜单目录改 CFG。
|
||
- 4 个辅助 .cjs(build-create-prompts / submit-review-tasks / poll-create-tasks / poll-review-tasks):DB / API 端口 / prompt 内 dbName 字面量 → CFG 动态。
|
||
- `public/data-pages.js`:新增 `const BASE = location.origin`,SKILL_HINT_VIDEO_PARSE / SKILL_HINT_ANALYZE / saveHintOf 里 3 处 `http://localhost:8900` 改 BASE(前端读不到 server 端 config.json,用 location.origin 让回调端口自动跟随当前访问地址)。
|
||
- `start.bat`:端口用 `for /f` + load-config 读 config.json,不再写死 8900。
|
||
- **★踩坑(重要)**:`load-config.cjs` 用 `.cjs` 扩展名时 `require('./load-config')` 无扩展名解析 MODULE_NOT_FOUND(Node 不把 .cjs 当无扩展 require 目标)→ 改名 `load-config.js`(无 package.json,默认 CommonJS)即自动生效。**node --check 只查语法不执行 require,此坑运行时才暴露**。
|
||
- **验证**:8 文件 `--check` 全通过;`loadConfig()` 正确读回全字段;工作台重启 HTTP 200(端口/产出根均从 config 读)。
|
||
- **沉淀**:变更日志新增配置收敛条目;V1.0 SKILL.md frontmatter last_change 更新。
|
||
|
||
## 配置收敛后功能验证 + start.bat 修复
|
||
- **实测功能正常**:重启后逐个探测依赖 config 的接口——`/api/roots` 返回 `defaultRoot=C:\Users\maidou\Desktop\MCNSkill项目`(CFG.outputRoot 生效)、`/api/dsh/stats`(accounts 7 / analyses 12 / rewrites 27 / reviews 11,CFG.dbName 生效)、`/api/dsh/accounts`、`/api/dsh/rewrites`、`/api/dsh/ranking`(250 条榜单,CFG.businessDataDir 生效)全部 200 且数据正确。前端 index.html 引用 5 个静态资源(echarts/app.js/help-guide.js/data-pages.js/style.css)**5/5 可用**;`/data-pages.js` 200、含 `const BASE = location.origin`、无 `localhost:8900` 残留。**★静态资源是根映射 `/data-pages.js`,不是 `/public/data-pages.js`(后者 404,曾误判为故障)**。
|
||
- **★start.bat 既有 bug(非本次引入,顺手修复)**:写死的 managed node 路径 `...\versions\22.22.2\node.exe` **已不存在**(实际 `22.22.2-3`)→ 原逻辑静默回退系统 node。改为 `for /d` 遍历 `%USERPROFILE%\.workbuddy\binaries\node\versions\*` 自动探测,版本升级免改脚本。
|
||
- **★bat 内嵌 JS 的坑**:`for /f ... in (`node -e "console.log(require('./load-config')...)"`)` 被 cmd 解析截断报错(引号/括号/单引号嵌套)→ 端口读到的是**兜底值而非真实值**(表面 8900 看着对,实则没读 config)。改为独立脚本 `get-port.js`(`console.log(require('./load-config').loadConfig().port)`),bat 只执行简单命令 `"%NODE_EXE%" get-port.js`。
|
||
- **实证方法**:临时把 config.json port 改 8905 → start.bat 输出 `PORT=8905`(证明真读 config,非兜底)→ 改回 8900。区分技巧:测试脚本里把兜底值写成 `FALLBACK8900`,输出 8900 才说明是真读。
|
||
- **踩坑(工具层)**:用 node `-e` 生成 .bat 时,路径里的 `\n`(如 `\binaries\node`)**被 JS 当换行转义**,生成坏 bat 报「命令语法不正确」。生成 bat 要用 Write 工具写后,再用 node 把 LF 统一转 CRLF(`t.replace(/\r?\n/g,'\r\n')`)——cmd 对 LF 换行解析异常。
|
||
|
||
## 工作台 UI 规范文档梳理
|
||
- **产出**:`mcn-work-shop/docs/工作台UI规范.md`(新建)。全部从 style.css(824 行)/app.js/data-pages.js/index.html **提取现状基线**,非凭空制定。
|
||
- **结构**:技术基线 → 设计语言 → 设计 token → 布局框架 → 页面路由(8 个) → 组件规范(12 类) → 关键交互约定 → 已知坑(9 条) → 迭代流程 → 文件索引。
|
||
- **★关键事实(后续 UI 迭代直接查文档,此处留索引)**:
|
||
- 色彩:10 个 `:root` 变量(bg/panel/border/text/dim/primary/primary-soft/accent/danger/shadow)+ 扩展色(表头 #f6f8fa、链接 #4a90e2、主色 hover #2a5fd0、文件类型色 md紫/json红/xlsx绿/txt灰)
|
||
- 圆角阶梯 6/8/10/12/14px;z-index:顶栏 10 / 弹窗遮罩 100 / Toast 200(表头 sticky 为 1)
|
||
- **滚动铁律**:`html,body{overflow:hidden}` + `main#view{height:calc(100vh - 55px)}`——**55px 是实测值**(padding20+行高34+边框1),写 54px 底部溢出 1px 触发第二层滚动条
|
||
- **榜单表格必须 `table-layout:fixed`**:auto 布局下 100% 表格富余空间按比例摊薄,**min-width 压不住**
|
||
- **榜单三 tab 行高必须统一**:表格 td 固定 42px(功能列 btn-sm 撑高,其他 tab 本仅 34.7px)、首页预览行 min-height 40px,否则切换整表跳动
|
||
- **两套同名 `.tabs/.tab` 并存**:顶栏胶囊式(L38-45,active 蓝底白字)vs 数据页下划线式(L520-523,active 蓝字+蓝下划线,**后者覆盖前者**)→ 新增页须确认拿到哪套
|
||
- `.modal-mask[hidden]` 必须显式 `display:none`(`.modal-mask` 是 flex,会覆盖 HTML hidden 属性→弹窗关不掉)
|
||
- 数值列:右对齐 + `font-variant-numeric: tabular-nums`(不加会导致翻页时数字左右跳)
|
||
- 图标:`.ic{vertical-align:-0.18em}`(去掉会与文字基线错开);`svgIcon()` Lucide 24×24 stroke2 + `ICON_COLORS` 功能色映射
|
||
- 字段对齐用 **grid 列轨道共享**(R44/R45:每行独立 flex 会被内容长短顶偏;超宽字段如「账号定位」要移出共享网格,否则把轨道撑成等宽 232.5px 大片留白)
|
||
- 静态资源**根映射** `/data-pages.js`(`/public/xxx` 一律 404,曾误判为故障)
|
||
|
||
## 榜单更新「周不全」问题诊断(未修复,待用户确认)
|
||
- **用户现象**:点「更新榜单」后,周榜数据期不全(相关周缺)。
|
||
- **★真相:本次更新本身是成功的**——会话 `624d7a3e`(标题「更新榜单数据」,cwd=mcn-work-shop)实际执行 8 次 API、落盘 8 个 JSON:视频热榜/点赞榜各 08-31(2 次,`fetch_week_ranks.py --board both`)、账号日榜 09-08(1 次,`fetch_rank.py --period day`)、账号周榜 5 赛道各 08-31(5 次)。无缓存跳过、无失败。
|
||
- **根因(设计缺口,非执行失败)**:`SKILL_HINT_RANKING` 的语义是**只抓「最新一期」+ 幂等跳过已存在**,**没有任何回溯补齐缺失期次的逻辑** → 历史缺口永远补不上。
|
||
- **实测期次现状(`/api/dsh/ranking` 返回的 dates)**:
|
||
| board | 日期列表 | 说明 |
|
||
|---|---|---|
|
||
| week 账号周榜 | 08-31/08-24/08-17/08-10 | 4 周完整(历史累积) |
|
||
| hot 视频热榜 | 08-31/08-24 | **缺 08-10、08-17**(09-03 才上线该榜) |
|
||
| likes 点赞榜 | 08-31/08-24 | **缺 08-10、08-17** |
|
||
| day 账号日榜 | 09-08/09-02 | **缺 09-03~09-07 共 5 天**(期间没点更新) |
|
||
→ 用户切 tab 时看到 week 有 4 周而 hot/likes 只有 2 周,即"没有所有相关周"。
|
||
- **脚本能力是够的(没用上)**:`fetch_week_ranks.py` 有 `--date`(周标号周一)与 `--force`;`fetch_rank.py` 有 `--date`(目标日期)。完全可指定历史期次补齐,但 prompt 里没要求。
|
||
- **补齐成本估算**:hot 2 周 + likes 2 周 + day 5 天 = **9 次红狐 API**(按次计费,需用户确认)。
|
||
- **附带发现(非 bug,设计如此,易被误认为数据少)**:`dsh-data.js` 的 `RANK_KEEP=[生活记录,生活vlog,小剧场,亲子,美食,旅行]`,`board!=='week'`(即 day/hot/likes)在**条目层**做白名单过滤→文件 50 条被筛成:hot 28、likes 24、**day 仅 10**。日榜只剩 10 条最反直觉。修改口径需动 `dsh-data.js:490-495`。
|
||
- **★★最终结论(红狐官方规则,账号周榜无问题)**:用户追问「为什么没有 9 月 7 号周榜」。实测 `fetch_rank.py --period week --date 2026-09-07` → **API 报错 code=3203**,红狐返回原文:
|
||
> 查询结果为空…常见原因:①日期未到更新时间——**日榜每日 20:00 后可查昨日、周榜每周一 20:00 后可查上周**、月榜每月 1 号后可查上月;②周榜应传该周周一…
|
||
→ **账号周榜(week)最新可用期就是上一周**,09-07 周要等 **09-14(下周一)20:00** 后才出榜。所以 09-10 时最新一期为 08-31 是**正确的**,此前会话「本周未走完」的解释**结论正确**(措辞可更精确为"红狐周榜周一 20:00 后才出上周完整榜")。
|
||
- **热榜/点赞榜是另一套 API,口径不同(可滚动)**:`fetch_week_ranks.py --date 2026-09-07` 实测**能返回完整 50 条**(dateStart=09-07/dateEnd=09-13,首条发布 09-07 22:59)。因其为作品榜滚动聚合,未结束的周也有数据;但这是**本周至今的滚动值**,明天再取会变。
|
||
- **默认统一取上一周是刻意对齐(非 bug)**:四个榜若 hot/likes 取本周、week 取上周,会出现**同期不同期号**(热榜 09-07 / 账号榜 08-31)造成困惑。故 `last_full_week()` 与 `_get_smart_offset()=1` 统一回退一期,是与账号榜(受 API 硬限制)对齐的结果。
|
||
- **结论:功能本身没问题**,是红狐数据规则所致。若用户坚持要热榜"本周滚动值",需接受与账号榜不同期,可单独加(用 `--date <本周一>`)。
|
||
- 用 `fetch_week_ranks.py --board hot --date 2026-09-07`(输出到临时目录 `D:/tmp/ranktest-0907`)→ **成功返回完整 50 条**(72.3KB,dateStart=2026-09-07 / dateEnd=2026-09-13,首条发布时间 2026-09-07 22:59:51)。
|
||
- 即**红狐 API 对「进行中的本周」照样返回完整 50 条**,不是"没出榜"。
|
||
- 真正原因:**脚本默认策略主动回退一期**——`fetch_week_ranks.py` 的 `last_full_week()`(本周一 −7 天)与 `fetch_rank.py` 的 `_get_date_range(offset=1)`(注释明写"默认 1(上一期)")。两者都支持抓本周:`fetch_week_ranks.py --date <本周一>`;`fetch_rank.py` 关键词映射里 `("本周", 0, ...)` 即 offset=0,或 `--date 2026-09-07`。
|
||
- **待用户决策**:是否把默认口径从「上一完整周」改为「本周」。注意本周数据是**滚动的**(每天都在变,今天抓的 09-07 周榜明天会更新),原设计选上一完整周可能是为归档稳定性。可选:①本周优先(新,滚动)②保留上周为归档 + 额外抓本周标「进行中」③保持现状由用户手动 `--date` 补。
|
||
- **赛道筛选正常**(用户已确认不是问题):`RANK_KEEP` 白名单过滤符合设计,勿动。
|
||
|
||
## 榜单期号显示改为区间(已实施)
|
||
- **诉求**:用户理解 08-31 已是最新周后,要求**改展示方式**——期号 `2026-08-31` 易被误读成"仅 8/31 单日",实际覆盖 08-31~09-06。
|
||
- **改动**:
|
||
- `dsh-data.js`:新增 `collectRanges(board, files)`(读落盘文件的 `dateStart/dateEnd`,按 date 去重取首个文件)→ `rankingMeta` 与 `getRanking` 均返回 `ranges: {date:{start,end}}`(empty 也补 `ranges:{}`)。**不前端推算周日**,用文件真实区间更准(日榜 start=end)。
|
||
- `app.js`:新增全局 `fmtRankPeriod(date, ranges)`(定义在 `fmtSize` 后,data-pages.js 可直接用——同全局脚本作用域);`_rankPreview` 加 `ranges`,首页预览日期标签改用它。
|
||
- `data-pages.js`:`mkState` 加 `ranges`、`loadMeta` 存 `s.ranges`、榜单页 toolbar 日期改 `fmtRankPeriod` 并加 `rank-period` 类。
|
||
- `style.css`:`.rank-date-label` min-width 62→**104px**(容纳"08-31 ~ 09-06",防切期抖动);新增 `.rank-period{min-width:104px;text-align:center;display:inline-block;white-space:nowrap}`。
|
||
- **显示结果**:周榜「08-31 ~ 09-06」、日榜「09-08」(单日不显区间)、缺 ranges 时兜底原期号。
|
||
- **格式微调(同日)**:用户偏好斜杠 → `mm` 增加 `.replace(/-/g,'/')`,最终显示**「08/31 ~ 09/06」/ 日榜「09/08」**。app.js、style.css 版本号 → `20260910b`。
|
||
|
||
## 复盘诊断页两个问题定位(未修,待确认)
|
||
- **问题①:叙事逻辑 60 分标黄,但问题清单全绿**(真 bug,且连带一个)。
|
||
- **根因=落库字段契约不匹配**:`submit-review-tasks.cjs` 的 prompt 只写 `issues_json=问题清单 JSON`,**未规定 schema** → 模型自由发挥。
|
||
- 实测 `script_review.id=13`(total=60,用户所看)原始 issue:
|
||
`{"sev":"high","dim":"叙事逻辑","loc":"场8…","issue":"时间线矛盾…","fix":"改成…","step":"S7…"}`
|
||
- 前端 `data-pages.js:2046/2108/2201` 读的是 `{severity:'高'/'中', issue, suggestion}`:
|
||
- `sev` vs `severity` → 读不到 → **兜底绿色**(故全绿)
|
||
- `"high"` vs `'高'` → 取值语言也不同
|
||
- `fix` vs `suggestion` → **修改建议同样读不到、没显示**(连带 bug,用户尚未提及)
|
||
- 数据佐证:6 条记录里 id=13/11/9/8 的 severity 全空,仅 id=12("低")、id=10("中"2/"低"6) 有中文值 → **模型输出不稳定**,schema 必须固化。
|
||
- 评分条颜色是另一套:`diagScoreColor = v>=75?'#3a9e6d':v>=60?'#d99a2b':'#d9534f'`(60→黄),与 severity 无关,故出现"60分黄+问题全绿"的矛盾观感。
|
||
- **问题②:分镜提示词没有生成按钮**(非 bug,设计限制)。
|
||
- 该脚本 `rewrite_log.id=38` 的 **video_id=null(原创选题)**。
|
||
- `data-pages.js:2290-2295`:`vid>0` 才渲染「生成分镜」按钮;否则显示"该脚本为原创选题(无关联视频),暂不支持分镜提示词"。
|
||
- 后端 `dsh-data.js:302` 查询 `storyboard_log WHERE video_id=?` —— **只按 video_id**,原创选题查不到。
|
||
- 若要支持:`storyboard_log` 本身有 `rewrite_id` 字段,需改后端查询支持 rewriteId + 前端入口放开 + 生成 prompt 改落 rewrite_id。
|
||
- **修复方向(待用户定)**:①在 `submit-review-tasks.cjs`(及复盘弹窗 prompt)固化 issues_json schema(建议沿用技能规范中文「高/中/低」+ 字段名 severity/issue/suggestion/dim/loc/step);②前端加字段容错(同时兼容 sev/fix/英文值),让已有脏数据也能正确显色与显示建议。
|
||
|
||
### ★已按上述方案实施并推送(commit 0165144)
|
||
- **问题①前端兼容**(`data-pages.js`,`diagScoreColor` 之后):新增 `normIssue()`(pick 优先级 severity>sev>level>严重度;正则映射 高/high/h/p0/严重→高、中/mid/medium/m/p1→中、其余→低;issue/desc/text、suggestion/fix/suggest、dim/dimension、loc/position 多字段兜底)+ `issueLevelColor()` + `issueRowHtml()`(渲染 严重度[色]+[维度]+问题+→建议)。三处 `issues.map(...)`(原 2046/2108/2201)统一替换为 `issues.map(issueRowHtml)`。`.issue-row` 加 `flex-wrap: wrap` 防长文本挤压。
|
||
- **问题①prompt 固化**:`submit-review-tasks.cjs` 的 `issues_json` 项改为带完整示例与禁用说明(禁止英文取值、禁止 sev/level 字段名);`data-pages.js` 新增模块级常量 `REVIEW_ISSUE_RULE`,拼进**两组** fireReview prompt(2012/2014 与 2191/2193,共 4 处,已用 replace_all)。
|
||
- **问题②原创选题分镜**:`dsh-data.js listStoryboards(videoId, rewriteId)` —— rewriteId>0 且 videoId 不>0 时按 `rewrite_id` 查;`server.js` 改为 `listStoryboards(qInt('videoId',0), qInt('rewriteId',0))`;前端新增 `sbQueryOf/fetchSb`,`storyboards` 改 `let`,`patchSide` 中 vid<=0 时按 `c.id` 重查(切版本正确);生成入口去掉 `vid>0` 限制;`fireGenSb` 补落库指令(video_id / rewrite_id / script_text / status='done',表在会话 cwd 下 mcn-plugin.db)。
|
||
- **验证**:4 文件 `--check` 通过;归一化 6 组用例全对(`{sev:'high'}`→高/红、`{severity:'中'}`→中/黄、空→低兜底);重启 HTTP 200;`/api/dsh/storyboards?rewriteId=38` 返回 0 条(原创选题暂无分镜,接口已通)。版本号 → style.css `20260910c`、data-pages.js `20260910d`。
|
||
- **同步**:commit `0165144`(58 文件 +895/−263),push 到 origin/main(`a69f930..0165144`)。未跟踪且未纳入:`flova_chat_raw.txt`、`flova短剧创作界面分析_20260907.md`、`mcn-work-shop/.workbuddy/`、`tools/`(非本次改动或运行产物)。
|
||
- **验证**:3 文件 `--check` 通过;四榜 API 均返回 ranges(week 4 期/hot·likes 2 期/day 2 期,区间正确);版本号 bump style.css+app.js→`20260910a`、data-pages.js→`20260910c`;重启 HTTP 200。
|
||
|
||
## 清理「dsh 已废弃」类废话(用户指出)
|
||
- **触发**:用户指出 `SKILL_HINT_RANKING` 里「09-10 起 dsh 环境已废弃,无 dsh 分支)」属于废话——环境都没了,prompt/规则里再讲"何时废弃、曾有几个环境"对当前执行毫无价值。
|
||
- **★分类处置原则(可复用)**:
|
||
1. **prompt / 规则正文里的历史叙述 → 全删**(模型与执行者只需要"现在怎么做")
|
||
2. **代码注释里描述变更动作**(如"09-10 去掉 dsh 分支:…")→ 删,只留定稿日期
|
||
3. **"无 dsh 分支"这类陈述不存在的东西** → 删(陈述一个不存在的事物=噪音)
|
||
4. **文末「变更记录」历史区 / 变更日志.md → 保留**(append-only 归档,是正常文档元数据,不是噪音)
|
||
5. **禁止性护栏**(如"不要再按 .dsh 路径段做分支判断")→ **精简保留**:去掉日期与"已下線"经过叙述,只留"禁止做什么"
|
||
- **改动 16 个文件约 18 处**:data-pages.js(prompt)、dsh-data.js(注释)、3 份 路径配置.md(V1.0/Lite1.0/video-prompt,删变更公告+"无 dsh 分支"+护栏精简)、V1.0+Lite1.0 的 references-add/README.md、mcn-video-prompt 的 SKILL.md + references/README.md + references-add/README.md、mcn-dou-analysis SKILL.md + references-add/README.md(2)、douyin-weekly-surge SKILL.md、MCP_工具调用规范.md、mcn-data-insight SKILL.md、创作流程规范.md。
|
||
- **验证**:dsh-data.js / data-pages.js `--check` 通过;版本号 bump 至 `?v=20260910b`;工作台重启后接口全 200(榜单日期新增 2026-08-31 一期,读取正常);`/data-pages.js` 字符数 145080→145053(正好少 27 = 删掉那句)。
|
||
- **注意**:data-pages.js 里剩余 44 处 `dsh` 全是 `/api/dsh/*` 接口路径与代码标识符(工作台 API 命名空间,与"dsh 部署环境"无关),**不可动**。
|
||
|