Files
mcn-short-video/P1修复方案_V1.0_20260914.md
T
maogeigei f77735b206 工作台:目录改名 mcn-workshop + 任务进度可见 + 会话归属配置化
1. 目录 mcn-work-shop -> mcn-workshop(空间分组名取会话 cwd 的目录名,只改字符串无效,必须真改名)
2. 全仓替换 mcn-work-shop -> mcn-workshop:37 文件 121 处;历史日志按沿革句规矩保留当时目录名
3. 任务进度可见:/api/run/status 产出 已运行时长/工具调用/最近动作/停滞判定(读会话日志尾部),前端新增右下角常驻面板,四处任务入口接入
4. 会话归属目录配置化:新增 config.sessionCwd(留空=工作台自身目录),现指向 D://AI技能//mcn-workshop,使任务显示为命名分组而非「未分组任务」
5. 修前端轮询静默缺陷:连续 3 次查询失败即提示服务断开(原逻辑静默空转到 15 分钟超时,用户零感知)
2026-10-08 13:09:06 +08:00

22 KiB
Raw Blame History

P1 修复方案 · 短视频工作台 V1.0

依据:技能审计报告_V1.0_20260914.md(P0=0 / P1=8 / P2=7) 范围:仅 8 条 P1。本文件是方案,未动用任何技能文件(遵守「方案与执行分离」P0) 生效前提:用户确认后方可执行;执行时按 创作流程规范.md §七「逐条读取→逐条修改→逐条验证」,禁止批量读改


〇、修复原则(先定规矩,避免越修越乱)

原则 含义 反例(本方案禁止的做法)
改源头,不打补丁 概念的身份/来源/去向写在产生它的环节正文;下游只引用 在 S7 里加"注:S6 模板A/B 其实不是场次结构表字段"的括注
单源化 同一规则只允许一个权威定义处,其余位置改为指向 在 SKILL.md 与规范里各写一遍八类35项门禁条件
删历史叙述 规则正文里"何时改的、以前什么样、已下线"一律删;护栏只留"禁止做什么" 保留"09-10 起 dsh 已废弃"
不动白名单 ①工作台 API 命名空间 /api/dsh/*(与 dsh 部署环境无关)②第三方原样分发包(browser-harness / lieflat-charts / mcn-video-prompt·参考skills / nuwa-skill-main)③各文件文末「变更记录」区 把 /api/dsh/accounts 当 dsh 残留删掉

一、总览

# P1 问题 改文件数 改处数 风险 是否需你裁决
1 S6→S7 模板骨架断链 1 2 低 否
2 契约表漏 2 个 AI 入口 2 5 低 否
3 八类35项强制 ↔ S11 可选 门禁冲突 3 4 中(P0 条款) ✅ 需确认口径
4 钩子家族术语 4 叫法 2 8 低 否
5 规范内旧技能名 + 乱码 1 2 低 否
6 S5 输出声明漏字段 1 1 低 否
7 dou-analysis 侧 dsh 死分支 5+1 重写 6 中(接口语义) ✅ 需选 A/B
8 「dsh 已下线」历史叙述未清 7 8 低 否

去重后共涉及 15 个文件、36 处。 建议分 3 批(见第五节),批内可并行、批间串行验证。


二、逐条方案

P1-1 | S6→S7 模板骨架断链

现象

  • references/创作流程/7_生成短视频大纲.md:31:「选择模板后,从 S6 场次结构表中取对应的模板骨架(三段式参考 S6 模板A,五段式参考 S6 模板B)」
  • references/创作流程/6_生成短视频框架.md:280:「以下模板A/B仅供知识参考,非执行指令…S6 不选择模板」

根因:一句话里塞了两个来源——"S6 场次结构表"是 S6 的输出实例(8 列 × 实际场次),不含模板骨架;真正的骨架是 S6 文件末尾的模板A/模板B 两张空表。前半个主语写错了,导致下游按"场次结构表里找模板"执行必空手。

最佳方案:只修措辞,不搬迁内容。(理由:模板A/B 是填表骨架,与 知识库/03_框架节奏/01_标准爆款结构模板.md 的方法论描述不是同一层东西——搬过去反而制造新的重复定义,违背检查点 15。)

位置 现状 改为
7_生成短视频大纲.md:31 > 选择模板后,从 S6 场次结构表中取对应的模板骨架(三段式参考 S6 模板A,五段式参考 S6 模板B),在此基础上展开分段结构。 > 选择模板后,按其场次骨架展开分段结构——三段式骨架 = 6_生成短视频框架.md 的「模板A:三段式通用框架」,五段式骨架 = 同文件「模板B:五段式爆款框架」(骨架定义在 S6 文件末尾参考区,S6 自身不选模板)。
7_生成短视频大纲.md:20 ### 第一步:结构模板选择(从 S6 移入) ### 第一步:结构模板选择(删变更动作叙述)

验证:grep -n "从 S6 场次结构表中取" references/ 应零输出;人工通读改后一句,确认指向的是文件内的模板A/B 小节而非场次结构表。

影响面:S7 是自动/共创/开发三模式共用的执行文件,改动纯措辞,不改变产出结构。Lite1.0 无此文件,不涉及。


P1-2 | 契约表漏登记 2 个 AI 入口

现象

  • mcn-workshop/docs/AI会话任务输入输出对照.md:入口表只有 1–9 行(9 为 clarify,非任务);L127 声明「前缀常量 = CREATE/EXTRACT/STORYBOARD/REVIEW + ACCOUNT」;检查清单第 1 项同样只列 5 个。
  • 实际 mcn-workshop/public/data-pages.js 还有两个入口:
入口 触发点 前缀常量 skills label 代码位置
功能四:账号数据分析 账号详情「数据分析」tab 空态按钮 [data-analyze] SKILL_HINT_ANALYZE ['mcn-dou-analysis'] 分析指令 data-pages.js:1303-1312
功能五:视频解析 / 刷新 视频详情「解析/刷新」 SKILL_HINT_VIDEO_PARSE(刷新时追加 VIDEO_REFRESH_OVERRIDE) ['mcn-dou-analysis'] 解析指令 data-pages.js:1719-1733

根因:09-02 定契约时只覆盖了当时已固化的 5 类入口;09-03/09-04 新增的功能四、功能五入口没有回填契约表 → SKILL.md 第 7 条(P0「新增/修改任何入口时先读此表」)的护栏自身漏口。

最佳方案:补登记 + 加一道"表与代码对齐"的自检动作。

# 位置 改动
1 对照.md 入口表 新增 10、11 两行,字段同现有格式:10 | 账号详情(#/account/:id)数据分析 tab 空态 | 账号数据分析 | 分析指令 | ['mcn-dou-analysis'] | SKILL_HINT_ANALYZE | 功能四;近4个月数据逐条拆解+汇总分析;带 connectorIds(缺存量解析时现场 MCP 解析) | data-pages.js ~L1303 ;11 | 视频详情(#/video/:id)解析/刷新 | 解析视频 / 重新解析 | 解析指令 | ['mcn-dou-analysis'] | SKILL_HINT_VIDEO_PARSE(刷新追加覆盖语义段) | 功能五;MCP 内容解析产 content+analysis;刷新必须整段覆盖不许判断"是否需更新" | data-pages.js ~L1719
2 对照.md:127 关键细节 常量清单补全为 SKILL_HINT_CREATE/EXTRACT/STORYBOARD/REVIEW/ANALYZE/VIDEO_PARSE/ACCOUNT,并注明权威来源 = data-pages.js / app.js 顶部实际声明(行号会漂,故不给行号,只给文件)
3 对照.md:137 检查清单第 1 项 前缀对应关系补 分析=ANALYZE、视频解析=VIDEO_PARSE
4 对照.md 新增入口检查清单 追加第 8 项:[ ] 表码对齐:本次新增/改动的入口已回填本表入口表行(含 skills / 前缀常量 / 代码位置),并核对 server.js BROWSER_HINT 正则不被误命中
5 SKILL.md:81 (SKILL_HINT_CREATE/EXTRACT/STORYBOARD/REVIEW/ACCOUNT,分别对应 创作/提炼/分镜/复盘/账号抓取) → (SKILL_HINT_CREATE/EXTRACT/STORYBOARD/REVIEW/ANALYZE/VIDEO_PARSE/ACCOUNT,分别对应 创作/提炼/分镜/复盘/账号数据分析/视频解析/账号抓取;完整清单以 mcn-workshop/docs/AI会话任务输入输出对照.md 为准)

验证:

  1. grep -c "SKILL_HINT_" mcn-workshop/public/data-pages.js mcn-workshop/public/app.js 得到的常量名集合 = 对照表清单,一一对应无缺;
  2. 逐个入口 grep skills: 与表内 skills 列一致。

风险:低。纯文档补登记,不改代码逻辑。


P1-3 | 八类35项「交付前强制」↔ S11「可选」门禁冲突 ✅需你裁决

现象

  • references/创作流程规范.md:97(P0):「无论何种模式,脚本交付(Gate-6 / 自动模式生成创作回顾)前必须完成八类35项自检;其中前3秒钩子、人设一致性、设定承接、教程完整链为一票否决项——不过禁止生成创作回顾/交付」
  • SKILL.md:296-298:「步骤 11:脚本检查和诊断 🔶 可选步骤…S11 是可选质检,由用户决定是否执行」
  • references/创作流程/11_脚本检查和诊断.md:20-22:八类35项扫描被放在 S11 第〇步执行

根因:清单的执行环节被放在 S11(一个可选步骤)里,但门禁强度由规范按"交付前强制"定义。执行承载者与约束强度错位 → 用户不点 S11,交付闸门就形同不存在;而按规范,不过是不许交付的。两条都是"权威"(SKILL.md 是红线层,规范是跨步骤通用机制层),互相打脸。

最佳方案:按"闸门 / 报告"拆开,各归其位,只留一处定义。

判据来自规范自己的 L183:「验收口径 = 执行约束,不是输出内容…诊断与取证过程归 S11,不进入 S9/S10 交付物」——即执行可以前置,输出仍归 S11。

# 位置 改动
1 创作流程规范.md:97(权威定义处,只此一处写全) 明确执行环节与输出边界:脚本交付前必须完成八类35项自检——**执行环节 = S9 脚本产出后静默执行**(结果不进 S9 交付物,沙盒内自用;不过则按一票否决项处理,禁止进入 Gate-5/交付);S11 诊断(可选)复用该结果并追加四维度评分与专项深诊。自动模式返工上限 2 轮…
2 SKILL.md 步骤 9 段(L272-280) 在「用户确认:Gate-5」前补一句:> 🔴 交付前强制自检:S9 脚本产出后必须静默执行八类35项自检(一票否决项不过禁止进入 Gate-5;结果不写入交付物,判定标准见知识库 09_脚本诊断/脚本质量自动检查清单_八类35项.md)
3 SKILL.md 步骤 11 段(L296-298) 保留 🔶 可选,但把「可选」限定到报告层:🔶 S11 = **可选增强**:八类35项自检已由 S9 收尾强制完成,S11 在此基础上做四维度评分、故事成立性与最终审核报告;由用户决定是否执行。
4 11_脚本检查和诊断.md:20-22 第〇步加注:> 该扫描属交付前强制闸门(S9 收尾已执行一次);S11 执行时**复用 S9 结果**,仅当脚本在 S11 期间被修改才重跑

验证:三处表述互不重复定义、只指向规范;grep -n "八类35项" SKILL.md references/创作流程规范.md references/创作流程/11_*.md → 门禁条件只出现在规范 L97 一处,其余两处为引用。

⚠️ 需你确认的点:S9 静默自检 + S11 报告可选的拆分,是否符合你的原意?另一条可选口径是把 S11 整体改为强制(则与自动模式"只落最终交付物"的轻量设计冲突,不推荐)。


P1-4 | 钩子家族术语 4 叫法

权威:references/规则/概念分层与源头表述规范.md §三——「对外使用的统一总称只保留一处(开场钩子);细分概念各用职责名(开场方式=开场内容策略、「本场钩子」=留人机制);改名必须一次覆盖全链路」。

现状残留(S5 模板字段已是正确的「开场钩子」,其余为旧词):

位置 现状 改为
SKILL.md:223 选题方案(含切入角度/爆款逻辑/**钩子预设**/共鸣切入点) 选题方案(含切入角度/爆款逻辑/**开场钩子**/共鸣切入点;字段完整清单以 5_生成短视频选题.md 输出模板为准)
5_生成短视频选题.md:187 **4.3 开篇钩子预设(选题吸引力前置判断):** **4.3 开场钩子预设(选题吸引力前置判断):**
5_生成短视频选题.md:166 → 全部通过 → 进入钩子预设 → 全部通过 → 进入开场钩子预设
5_生成短视频选题.md:229 - 每个方案预设的钩子策略 - 每个方案预设的开场钩子(开场方式 1-2 种)
5_生成短视频选题.md:255 - 每个选题预设至少 1 种开篇钩子策略 - 每个选题预设至少 1 种开场方式(写入「开场钩子」字段)
5_生成短视频选题.md:265 …和钩子预设要求 …和开场钩子要求
5_生成短视频选题.md:294 每个方案须预设至少 1 种开篇钩子策略。 每个方案须预设至少 1 种开场方式(写入「开场钩子」字段)。
5_生成短视频选题.md:411 | 已预设 ≥ 1 种钩子策略 | ✅/❌ | | 已选定 ≥ 1 种开场方式(已写入开场钩子字段) | ✅/❌ |

注意:5_生成短视频选题.md:192「S6 用「本场钩子」五类留人机制」与 S6 场次表列名「本场钩子」是正确用法,不动。

验证:grep -rn "开篇钩子\|钩子预设\|钩子策略" SKILL.md references/ mcn-workshop/ → 仅允许命中 references-add/变更日志.md(历史归档)。


P1-5 | 规范内旧技能名 + 乱码

位置 现状 改为 说明
references/创作流程规范.md:406 …(两目录合并检索,相对于技能根目录 \脚本创作技能/`)。` …(两目录合并检索,相对于技能根目录 \短视频工作台/`)。` 09-03 已更名;且该处旧名与 SKILL.md:381 记载的旧名(「短视频脚本创作技能」)都不是同一个,属二次走形,统一用现名最稳
references/创作流程规范.md:408 > 知识库更新后,AI 直接读��最新文件内容,步骤文件无需同步修改。 > 知识库更新后,AI 直接读取最新文件内容,步骤文件无需同步修改。 单字符乱码(U+FFFD),按语义补「取」

验证:grep -rn "脚本创作技能" references/ SKILL.md 帮助文档.md → 零输出(变更日志豁免);grep -n "�" references/创作流程规范.md → 零输出。


P1-6 | S5 输出声明漏字段

现象:5_生成短视频选题.md:227 写「每个含:主题 / 切入角度 / 爆款逻辑 / 差异化 / 人设匹配度 / 目标体感」——漏「共鸣切入点」「开场钩子」「故事前提」,且「差异化」与模板字段名「差异化特征」也不一致;而模板(L309-321,9 字段)与规范 L431 都要求全字段。

最佳方案:不重复罗列(避免与模板二次漂移),改为指向模板 + 列全一次。

位置 改为
5_生成短视频选题.md:227 - 5 个选题方案(**字段完整清单以上方「选题方案输出模板」为准**:主题 / 切入角度 / 爆款逻辑 / 差异化特征 / 人设匹配度 / 目标体感 / 共鸣切入点 / 开场钩子 / 故事前提〔剧情/悬念/反转类必填〕)

验证:人工比对 L227 字段与 L309-321 模板字段一一对应(9/9)。


P1-7 | dou-analysis 侧 dsh 死分支 ✅需你选 A/B

现象(dsh 环境 09-10 已整套下线,~/.dsh 与 D:\dshworkspace 均不存在)

位置 内容
mcn-dou-analysis/SKILL.md:160 「可选写库:① 环境有 MCN 插件接口(dsh)时补录 account_video_source 并提取选题;② 工作台环境…POST /api/import/account」
references/feature/05_解析视频.md:55 「若当前环境有 MCN 插件接口(/mcn/api/video/source/backfill,可用 pwsh 调用,基地址 $env:DSH_WEB_URL 或 3081/3080)…接口不可用时跳过」
references/接口调用/本地接口调用规范.md(整份 23 行) 基地址判定 = $env:DSH_WEB_URL → 3080/3081;接口清单 = /mcn/api/account/videos、/mcn/api/external/import、/mcn/api/account/update
references/铁律避坑规则/账号设定执行避坑.md:12, 25 规则 3 用 GET /mcn/api/account/videos 探测连通;规则 6 记载该规范的沉淀来源

根因:09-10 的卸载只覆盖了主技能层与路径判定层(路径配置.md、SKILL.md 数据边界),dou-analysis 的写库接口层漏了——而它是被"功能三/五执行"实际读取的活文件。

方案 A(推荐)|改写为工作台接口规范——保留沉淀价值,接口跟着平台走

# 位置 动作
1 references/接口调用/本地接口调用规范.md 重写为《工作台接口调用规范》:① 基地址 — 从 mcn-workshop/config.json 的 port 读(默认 8900,server.js 支持 argv 覆盖),禁写死端口;② 写库接口 — POST /api/import/account,body {"account":"{达人昵称}"},落库映射见 dou-analysis SKILL.md:160;③ 保留「大文本用 Python urllib + json.dumps(ensure_ascii=False) 直连,禁 PowerShell ConvertTo-Json」这条铁律;④ 接口清单不另抄一份,指向 mcn-workshop/docs/AI会话任务输入输出对照.md + server.js 路由为权威
2 references/铁律避坑规则/账号设定执行避坑.md:12 探测方法改为「用 GET http://127.0.0.1:<工作台端口>/api/dsh/stats 探连通,不用写接口探测」
3 references/铁律避坑规则/账号设定执行避坑.md:25 沉淀描述改为「新建 references/接口调用/本地接口调用规范.md,记录工作台接口基地址判定、写库接口与请求构造方式」
4 feature/05_解析视频.md:55 整句改为「解析结果对应「原视频解析」数据:落盘后调用工作台 POST /api/import/account(body {"account":"{达人昵称}"})把 content.json 补录进 account_video_source 并提取选题(topic);工作台未启动时跳过(不影响本地保存)。」
5 mcn-dou-analysis/SKILL.md:160 删「① 环境有 MCN 插件接口(dsh)…;②」序号与前半句,保留工作台单一分支述为「可选写库(工作台环境):…」

方案 B | 整体下线该规范文件:删除 本地接口调用规范.md,同步清理 3 处引用(账号设定执行避坑.md:12/25、SKILL.md:160),接口调用一律改为指向工作台契约文档。优点:文件更少;缺点:丢掉"大文本禁 ConvertTo-Json"这条用血换来的铁律。

我的判断:选 A。这条铁律与平台无关,是通用工程约束,值得留在技能里。

验证:grep -rn "/mcn/api\|DSH_WEB_URL\|3080\|3081" subskills/mcn-dou-analysis/ → 零输出;重写后人工确认新基地址来自 config.json 而非写死。

⚠️ 需你选 A 还是 B。


P1-8 | 「dsh 已下线」历史叙述未清

判据:09-10 已确立的处置原则——① 规则/prompt 正文里的历史叙述全删;② 陈述"不存在的事物"删;③ 禁止性护栏精简保留(去掉日期与下线经过,只留"禁止做什么");④ 文末「变更记录」区保留。

# 位置 现状 改为
1 SKILL.md:78 (**dsh 侧已整套下线(09-10):\~/.dsh/mcn-plugin.db` 与 `D:\dshworkspace` 均不存在**,工作台 DB 为唯一读写副本)` (工作台 DB 为唯一读写副本)
2 mcn-dou-analysis/SKILL.md:42 …**权威台账 = 数据目录的桌面 \MCNSkill项目/达人账号表.xlsx`(开发机与用户环境同构);dsh 侧已整套下线(09-10:`D:\dshworkspace` 不存在),其遗留表不再作为任何来源**。` …**权威台账 = 数据目录的桌面 \MCNSkill项目/达人账号表.xlsx`(开发机与用户环境同构)**。`
3 mcn-dou-analysis/references/路径配置.md:15 > **09-10 起 dsh 部署环境已废弃**(…)——不再有 dsh 分支与 \D:\dshworkspace\解析任务\` 产出路径。历史条目见文末「变更记录」。` 整行删除
4 mcn-dou-analysis/references/路径配置.md:28 - ⚠️ **不存在 dsh 分支**:dsh 侧已整套下线(09-10),不要再按 \.dsh` 路径段或 `D:\dshworkspace` 做任何分支判断` - ⚠️ 禁止按 \.dsh` 路径段或 `D:\dshworkspace` 做分支判断`(护栏精简保留)
5 mcn-dou-analysis/references/路径配置.md:56 …**两者同构**,均无 dsh 分支) …**两者同构**)
6 mcn-dou-analysis/references/feature/06_生成账号设定卡片.md:50 (**无 dsh 分支**,以 … 为唯一权威) (以 … 为唯一权威)
7 mcn-dou-analysis/references/浏览器搜索抖音账号操作规范.md:175 …(主技能 \短视频工作台/subskills/browser-harness/`;09-10 起无 dsh 部署环境;如缺失可从…)` …(主技能 \短视频工作台/subskills/browser-harness/`;如缺失可从…)`
8 mcn-data-insight:references/规则/抖音数据规则.md:61、scripts/fetch_week_ranks.py:53、subskills/douyin-*/SKILL.md 数处 同类「无 dsh 分支」括注 / docstring 注脚 同类处置:正文括注删;代码 docstring 只留定稿日期或删(按 09-10 原则②)

验证(一次扫净):

grep -rn "dsh 侧\|dsh 部署环境\|dsh 环境\|无 dsh 分支\|不存在 dsh" SKILL.md references/ references-add/ subskills/ --include=*.md --include=*.py --include=*.js

预期:仅 references-add/变更日志.md 与各文件「变更记录」区命中(历史归档豁免)。

⚠️ 白名单提醒:工作台 API 命名空间 /api/dsh/*(/api/dsh/accounts、/api/dsh/stats、/api/dsh/ranking…)与 dsh-data.js、isDshDeploy(后者已删)不是 dsh 部署环境残留,不可动。


三、执行顺序(依赖关系)

批次 A(口径统一,先做——后两批都要引用改后的口径)
  P1-1 → P1-6 → P1-4 → P1-5 → P1-3(需你确认口径)
批次 B(dsh 收尾,独立可并行)
  P1-7(需你选 A/B) → P1-8
批次 C(契约补登记,可与 A/B 并行)
  P1-2

每处改完立即验证;同一文件的多处修改必须串行(09-10 曾在并行 Edit 同文件时发生写竞态导致丢改)。

四、收尾沉淀(修复完成时一并做)

动作 落点
记录本轮 4 类失误(断链/契约漏登记/门禁错位/术语改名未覆盖) 失误与规避记录.md 追加条目
登记本次修复 references-add/变更日志.md
更新 frontmatter V1.0/SKILL.md 的 updated_at + last_change
审计结论回填 技能审计报告_V1.0_20260914.md 各条标「已修」+ 验证命令输出

五、等你拍板的三件事

  1. P1-3 口径:接受「S9 静默自检(强制闸门)+ S11 报告(可选)」这个拆法吗?
  2. P1-7 选型:接口规范重写为工作台版(A,推荐),还是整体下线(B)?
  3. 执行授权:确认后我按批次 A → B/C 逐条改、逐条验;还是你想先只做批次 A 看效果?