Files
mcn-short-video/.workbuddy/test-cases/2026-08-31_俊希全流程.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

255 lines
26 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.
# 测试用例:俊希全流程(获取账号数据 → 提取账号设定 → AI 选题写脚本)
> **用例编号**:TC-20260831-01
> **用例名称**:达人「俊希」完整链路测试——从获取账号数据(有就刷新)→ 提取账号设定 → AI 参考最新视频选题 → 写脚本
> **测试账号**:俊希(MCN 账号,亲子 Vlog 方向)
> **执行场景**:**首次执行**(俊希不在达人账号表、产出目录无账号设定/视频表格 → 走首次获取;已存在数据时走「有就刷新」分支)
> **测试日期**:2026-08-31
> **预估耗时**:约 60~90 分钟(含 MCP 解析等待 3-5 分钟/条)
---
## 一、测试目标与链路总览
验证 mcn-dou-analysis 技能(功能一→二→三→六)与 MCN 工作台 AI 写脚本、脚本创作技能 S1-S11 的**端到端贯通**,覆盖:
| # | 环节 | 所属技能/功能 | 产出物 |
|---|------|--------------|--------|
| 1 | 账号表登记 | 功能一 Step 1.0 | `达人账号表.xlsx` 新增俊希行(账号ID 70014) |
| 2 | 获取账号信息(有就刷新) | 功能一 | 账号表 15 列补齐 + 更新时间 |
| 3 | 获取视频列表 | 功能二 | `短视频表格.xlsx`(13 列,≥60 条) |
| 4 | 筛选 TOP 视频 | 功能三 Step 3 | top 视频清单(最近三个月 + ≤15min + 点赞+分享降序,TOPn) |
| 5 | MCP 视频解析 | 功能三 Step 4 | 每条视频 content + analysis |
| 6 | 保存解析结果 | 功能三 Step 5 | `视频分析/{标题}_标签1_标签2/` content.json + analysis.json |
| 7 | 生成人设卡(12 段) | 功能三 Step 6 | `俊希账号设定.md` |
| 8 | 自动生成账号设定卡 | 功能六(Step 7 自动联动) | `俊希账号设定卡.svg` |
| 9 | AI 参考最新视频选题 | MCN 工作台「AI写脚本」→ AI 选题 | 3 个选题方向 |
| 10 | AI 写脚本(S1-S11 完整流程) | 脚本创作技能 | `脚本1/` 系列产物 + S9 完整脚本 |
| 11 | 收尾验证 | 全链路 | 文件齐全 + grep 一致性 + git 提交 |
**数据流**:`达人账号表.xlsx` → 浏览器抓取(browser-harness)→ `短视频表格.xlsx` → 筛选 → MCP 解析(upload → wait → detail)→ JSON 落盘 → 账号设定 md → 设定卡 SVG → 工作台 /api/ai/topics 选题 → 创作任务(automations)→ 脚本落盘。
---
## 二、前置检查清单
| # | 检查项 | 判定标准 | 本用例实际状态 |
|---|--------|---------|---------------|
| P1 | 达人账号表是否含「俊希」 | 有 → 走「有就刷新」分支;无 → Step 1.0 登记 | **无**(仅小咪橘座 70010 / 旧梦留声机 70013)→ 首次登记 70014 |
| P2 | 产出目录 `MCNSkill项目/俊希/` 现有内容 | 有账号设定/视频表格 → 刷新覆盖;无 → 全新创建 | **仅 `提示词01/` 子目录**(分镜技能产出,与本次链路不冲突),无账号分析产出 → 全新 |
| P3 | browser-harness 是否可用(功能一/二红线) | 可执行文件存在(Win `~/.local/bin/browser-harness.exe` / mac `~/.local/bin/browser-harness`)或 `where`/`command -v` 有输出 | 执行前检测,未装则按红线提醒/安装 |
| P4 | MCP 服务(myai-mcp-production)可用 | 当前会话 MCP 工具列表含 `upload_douyin_video`/`short_video_detail` 或 `~/.workbuddy/mcp.json` 含该服务配置 | 执行前检测,未装按 MCP 规范提醒 |
| P5 | MCN 工作台服务(端口 8899) | `http://localhost:8899` 可访问 | **运行中(200)**;未启动则先启动(`node server.js`,自动避让端口) |
| P6 | 浏览器 9223 调试实例 | `http://localhost:9223/json` 可访问(界面模拟点击测试用) | **运行中**;未启动则按浏览器操作规范启动调试 Chrome |
| P7 | 输出路径权威配置 | 读 `references/路径配置.md` | 开发机 → 桌面 `MCNSkill项目/`,`俊希/` 账号层直挂 |
## 二·补、前置数据检查与清理判定(本次实测 2026-08-31)
> 测试前先判断**项目文件夹**与**数据库**是否已有俊希数据,决定是否需要清除,避免测试污染/误判。
### 检查结果(本次实测)
| 数据源 | 检查项 | 实测结果 | 是否需清除 |
|-------|-------|---------|-----------|
| 项目文件夹(桌面 `MCNSkill项目/俊希/`) | 账号设定/视频表格/脚本 | **仅 `提示词01/`**(分镜产出,属短视频分镜提示词技能) | **否**(本链路产出全新创建;提示词01 保留) |
| 达人账号表.xlsx | 俊希行 | **无** | 否(首次登记 70014) |
| 工作台 mcn-plugin.db(`…\mcn-workshop\`,自有副本) | hot_accounts 俊希 | **有**(id=3,含完整账号信息 + content 账号设定文本、douyin_id=JJX0827、sec_uid、278.7万粉、source_dir=`D:\dshworkspace\账号解析\俊希` 为**旧路径残留**,目录已不存在) | **否**(见下判定) |
| 同上 | account_videos 俊希 | **有 108 条**(source_dir=`D:\dshworkspace\抖音账号分析\俊希` 旧路径) | 否 |
| 同上 | account_persona 俊希 | **无**(5 行均为 1627-1630 测试占位,无 account_id=3) | 否 |
| 同上 | rewrite_log 俊希 | **有 3 条**(2026-08-19 AI 写脚本记录,id=12/15/16,topic 含完整选题) | 否 |
| dsh 原库(`~/.dsh/mcn-plugin.db`) | 俊希数据 | 与工作台副本一致(hot_accounts/videos/rewrite_log + account_video_source 2 条) | **否(.dsh 单向只读红线,绝不写)** |
| 旧目录 `D:\dshworkspace\账号解析\俊希`、`抖音账号分析\俊希` | 文件 | **已不存在**(数据库 source_dir 为历史残留) | 无需处理 |
### 清理判定逻辑(结论)
1. **文件层面**:桌面 `MCNSkill项目/俊希/` 无本链路产出 → **无需清除**,全新创建;已有产出时(有就刷新)→ 覆盖更新 `短视频表格.xlsx`、新增/更新设定与脚本,**不删除旧产出**(保留可追溯)
2. **数据库层面(工作台 mcn-plugin.db 自有副本)**:俊希有历史数据但**不影响本测试**——关键判定 `account_persona` 无俊希 → 工作台 `confirmAiScript` 的 hasPersona=false → 弹窗走「先进行账号设定分析」分支,**首次场景成立**(hot_accounts.content 的旧设定文本不会被界面读取,界面只读 account_persona)。因此**无需清除**;若追求「完全干净」需用户明确授权后选择性清除(hot_accounts id=3 及其 videos/rewrite_log 行),且只动工作台自有副本
3. **dsh 原库**:**红线只读,绝不写**(清理不适用)
4. **工作台副本与 dsh 原库的数据同步**:工作台读自有副本(`mcn-workshop/mcn-plugin.db`),与 `~/.dsh/mcn-plugin.db` 隔离;测试新增数据(rewrite_log 第 4 条等)只落工作台副本,不影响 dsh 原库
### 清除操作(如用户要求执行,需先备份)
```bash
# 仅工作台自有副本;先 cp 备份 mcn-plugin.db 再操作
# 清除俊希:DELETE FROM rewrite_log WHERE account_id=3; DELETE FROM account_videos WHERE account_id=3; DELETE FROM hot_accounts WHERE id=3;
# 注意:达人账号表/桌面产出/dsh 原库一律不动
```
---
## 三、详细测试步骤
### TC-01 账号表登记(前置)
| 项 | 内容 |
|---|------|
| 操作 | 打开 `达人账号表.xlsx`(15 列:账号ID/达人昵称/抖音号/抖音ID/抖音地址/粉丝数/解析状态/人设卡/更新时间/获赞数/关注数/作品数/IP属地/简介/备注),新增「俊希」行 |
| 预期 | 账号ID 自增 = **70014**;抖音号/抖音ID(sec_uid)/抖音地址存**文本格式**(防科学计数法);其余字段(粉丝数/解析状态/更新时间等)留空待补;表中仅新增俊希一行,不改动已有行 |
| 验证点 | ① 表格结构仍 15 列;② 70014 行号正确;③ 抖音号列显示完整无 `E+` 变形 |
| 通过标准 | 俊希已登记且格式合规;已有 2 行(小咪橘座/旧梦留声机)数据未受影响 |
### TC-02 获取账号信息(功能一,有就刷新分支)
| 项 | 内容 |
|---|------|
| 操作 | ① 检查表中俊希「更新时间」:**首次无更新时间** → 直接抓取(无需提示刷新);**若已有且近 1 个月内** → 提示用户判断是否仍需刷新,用户确认后再抓;② 检测 browser-harness(P3);③ 读 `浏览器搜索抖音账号操作规范.md` 全文;④ browser-harness 打开抖音网页版 → 适度访问(50% 概率先浏览首页 3~8 秒)→ 搜索「俊希」→ 进达人主页提取 昵称/抖音号/抖音ID(sec_uid)/抖音地址/粉丝数/获赞数/关注数/作品数/IP属地/简介 |
| 预期 | 主页信息完整提取;**sec_uid 失效处理**:若用三方提供的抖音地址访问报「用户不存在」,改搜索昵称/抖音号重新定位,回填正确 sec_uid 与抖音地址 |
| 验证点 | ① 15 列字段逐项有值(无数据的列留空不编造);② 抖音地址为 `https://www.douyin.com/user/{sec_uid}` 完整格式;③ 粉丝数/获赞数等为网页实时数值;④ 「更新时间」回填 `YYYY-MM-DD HH:MM` |
| 通过标准 | 账号表俊希行 15 列信息登记完毕;数据来源为浏览器优先(非 MCP 内部库;若兜底用 MCP 须在备注注明) |
### TC-03 获取视频列表(功能二)
| 项 | 内容 |
|---|------|
| 操作 | 进入俊希主页 → 滚动加载视频列表(每次间隔随机 1~3 秒,`.route-sc` 容器)→ **≥60 条即停止**(或滚动到底加载不出也停,两条件先到者为准)→ 保存为 `MCNSkill项目/俊希/短视频表格.xlsx`(13 列标准格式) |
| 预期 | Excel 13 列:序号/视频ID/视频标题/视频地址/点赞数/点赞(显示)/评论数/分享数/收藏数/播放量/视频时长/发布时间/标签;行数 ≥60 |
| 验证点 | ① 表头与 13 列标准完全一致;② 行数 ≥60;③ 视频地址可访问(抽查 3 条);④ 点赞/分享/时长/发布时间为数值且单位正确 |
| 通过标准 | `短视频表格.xlsx` 落盘且数据完整;**若表已存在(有就刷新)** → 重新抓取覆盖旧表,验证新表行数/时间范围更新 |
### TC-04 筛选 TOP 视频(功能三 Step 3)
| 项 | 内容 |
|---|------|
| 操作 | 用 `scripts/excel_tool.py select-top6 短视频表格.xlsx --output top6.json` 筛选:① 发布时间在最近三个月内;② 时长 ≤15 分钟;③ 按 点赞数+分享数 降序;④ 取前 N 条 |
| 预期 | N 按 SKILL.md「视频筛选标准」唯一权威参数:**上限 6,实际满足条件不足 6 条时按实际条数取(TOPn = 实际解析条数)**;top6.json 列出候选视频(含标题/链接/双率) |
| 验证点 | ① 筛选后条数 n 明确(n ≤ 6);② 排序依据 = 点赞(列5)+分享(列8) 降序,可人工抽查核对;③ 无 >15 分钟、超三个月视频混入 |
| 通过标准 | top6.json 生成,n 与后续「账号内容基因·TOPn」板块数一致(**n=解析条数,不写死 6**) |
### TC-05 MCP 视频解析(功能三 Step 4)
| 项 | 内容 |
|---|------|
| 操作 | 对每条入选视频:`upload_douyin_video`(传视频 URL `https://www.douyin.com/video/{id}`)→ 返回 detailId → **等待 3-5 分钟**(`sleep 180` 后批量查询)→ `short_video_detail` 查询 |
| 预期 | 每条视频返回 content(分镜头表:镜头/景别/时长/画面/表情/字幕口播)+ analysis(结构化 JSON:赛道/核心人设/差异化壁垒/情绪设计/通用框架等) |
| 验证点 | ① detailId 均成功返回;② content 已出;③ 部分视频 content 已出但 analysis 未完成 → 稍后重试(2-3 分钟);④ 返回「解析中」→ 等 2-3 分钟再查;⑤ **解析失败/无法解析 → 按视频补充规则取下一位(点赞+分享降序)补齐至 n 条** |
| 通过标准 | n 条视频全部拿到 content + analysis,无缺失(或已按补充规则补足) |
### TC-06 保存解析结果(功能三 Step 5)
| 项 | 内容 |
|---|------|
| 操作 | 用 `scripts/json_tool.py`:`create-content --detail-id {id} --title "标题" --output-dir "视频分析/文件夹"` + `create-analysis`;文件夹命名 `视频标题(去特殊符号)_标签1_标签2`(去掉账号名标签和 #);最后 `verify-folders --base-dir "视频分析"` 批量验证 |
| 预期 | 每个视频独立文件夹,含 `content.json` + `analysis.json`(JSON 格式,非 Markdown);目录结构符合 `解析结果格式规范.md` |
| 验证点 | ① json 可被 `json_tool.py inspect` 正常读取;② analysis 为简化格式(自动修复未转义双引号);③ 文件夹命名规则合规 |
| 通过标准 | 全部 n 条视频 JSON 落盘,verify-folders 无缺失 |
### TC-07 生成人设卡(功能三 Step 6)
| 项 | 内容 |
|---|------|
| 操作 | 综合**两个技能库**生成:① 脚本创作技能源技能 references(结构骨架:`创作流程/4_账号设定解析和确认.md` + `3_对标视频账号拆解.md` + `知识库/01_账号设定/` + `08_对话风格/`);② 女娲造人术 `subskills/nuwa-skill-main/`(深度分析)。产出 `俊希账号设定.md`,统一 **12 段结构** |
| 预期 | 12 段齐全:账号核心定位 → 账号内容基因(**板块数 = n 条解析 = TOPn**)→ 类型库(按账号类型适配,亲子 Vlog)→ 情绪结构 → 视听风格 → 内容打法 → 内容规则 → 系列内容规划 → 差异化壁垒 → 红线清单 → 当前需解决的问题 → 设定分析说明;聚焦内容创作,不含商业化变现路径 |
| 验证点 | ① 12 段标题逐一存在;② 赛道键归一(亲子赛道在 29 枚举内);③ 内容基因板块数 = 解析条数 n;④ 人设卡内容有账号级「如果…则…」内容规则(事前约束,非事后验收) |
| 通过标准 | `俊希账号设定.md` 落盘于 `MCNSkill项目/俊希/`,12 段完整、TOPn 与解析条数一致 |
### TC-08 自动生成账号设定卡(功能六联动)
| 项 | 内容 |
|---|------|
| 操作 | 设定 md 落盘后**无需用户开口自动触发**功能六:读设定 → 读模板样例 → 模块映射 → SVG 手绘 → 产出 `俊希账号设定卡.svg`(同目录) |
| 预期 | SVG 长图(680×~1716),模块名统一为「叙事结构」「内容标签」「**内容基因·TOPn**」(n=实际解析条数);底色按账号调性选色系(亲子 Vlog 偏明快 → 浅色系或按俊希既有风格定),**同一账号固定色系**;背景上直接书写的文字随背景深浅提亮 |
| 验证点 | ① 卡片 TOPn 与设定 md 内容基因板块数一致(**n 不写死 6**);② 双向联动一致性:交付前 **grep 校验**两文件关键术语一致(模块名「叙事结构」「内容标签」「内容基因·TOPn」等),零残留后再交付;③ 卡片内容与设定 md 内容级一致 |
| 通过标准 | `俊希账号设定卡.svg` 生成;grep 校验通过(模块名/TOPn 两文件一致) |
### TC-09 工作台 AI 参考最新视频选题(**界面模拟点击**)
> **本环节用可执行脚本模拟真实点击测试**,脚本:`mcn-workshop/cdp-test-junxi.mjs`
> 用法:`node cdp-test-junxi.mjs`(安全模式:验证到选题生成,不触发任务);`node cdp-test-junxi.mjs --confirm`(继续确认执行,真实触发创作任务)
> 机制:连接浏览器 9223 调试实例 → 新开标签页打开 `#/accounts` → `Runtime.evaluate` 模拟点击 → 轮询弹窗/AI 选题 → 自动关闭标签页(不干扰用户页面)。脚本复用 cdp-verify-*.mjs 的 CDP 模式。
**两条「AI写脚本」入口差异(重要)**:
| 入口 | 位置 | 行为 | 本用例用途 |
|------|------|------|-----------|
| 账号列表「AI写脚本」 | `#/accounts` 每行(`[data-create]`) | `confirmAiScript` → 弹窗:手输选题 **或 点 AI 按钮结合人设生成选题**(`POST /api/ai/topics`,基于账号设定+最新视频提炼 3 个方向) | **主链路**(AI参考最新视频选题) |
| 视频列表「AI写脚本」 | `#/rewrites` 每行(`[data-rewrite]`) | `confirmRun` 改写脚本:「基于视频《Y》改写全新 S9 故事脚本(不复刻原视频)」 | 次链路(基于单条视频改写,可选回归) |
| 项 | 内容 |
|---|------|
| 操作(脚本自动执行) | ① 脚本新开标签页打开 `#/accounts` → 定位俊希行「AI写脚本」按钮(`[data-create='俊希']`)→ **模拟点击**;② 轮询等待弹窗出现(`.modal-mask:not([hidden])` 含 `#aiTopicGen`,排除 index.html 隐藏的 `#settingsModal` 干扰);③ 读取弹窗标题/文案 → 验证分支;④ **模拟点击 `AI` 按钮**(#aiTopicGen)→ `POST /api/ai/topics` → 轮询选题输入框(最长 100s,Dify 约 50s)→ 读取 3 个选题方向;⑤ 安全模式点「取消」关闭弹窗;`--confirm` 模式点「确认执行」触发任务 |
| 预期 | 弹窗标题「AI写脚本」;文案分支 = **「先进行账号设定分析,再生成完整脚本」**(account_persona 无俊希 → hasPersona=false → 首次场景);AI 选题返回 **3 个贴合俊希亲子 Vlog 人设的方向**(参考最新视频内容提炼,如职场探班/闺蜜聚会/病号特权等暖萌治愈向);toast「✅ 已生成 3 个选题方向」 |
| 验证点 | ① 弹窗结构齐全(#aiTopicInput/#aiTopicGen/[data-ok]);② 文案分支正确;③ 选题数量 ≥3 且与俊希人设相关(非泛泛);④ 选题可编辑;⑤ 脚本 Step1-4 全 PASS |
| 通过标准 | 脚本输出 `Step1 定位俊希按钮: PASS / Step2 弹窗结构: PASS / Step3-4 AI 选题: PASS`(**已实测通过 2026-08-31**:选题=突击妈妈公司送便当/替妈妈筹备周末闺蜜聚会/打工人妈妈病号特权日) |
### TC-10 AI 写脚本(S1-S11 完整流程)
| 项 | 内容 |
|---|------|
| 操作 | ① 选定一个选题方向(保留在输入框)→ 点「确认执行」(TC-09 脚本 `--confirm` 模式自动完成)→ `executeTask()` `POST /api/run` 写入 `~/.workbuddy/workbuddy.db` automations(once+now,cwds=`D:\AgentSkill\mcn-workshop`)→ WorkBuddy 自动执行创建会话(左侧会话栏 mcn-workshop 空间可见);② 轮询 `GET /api/run/status?id=`(5s 间隔,30min 上限)观察任务状态 running → done |
| 预期 | 创作会话按脚本创作技能执行 **S1-S11 完整流程**(三态创作默认自动模式=静默执行、只落最终交付物):S1 理解需求 → S2 检索对标 → S3 确定选题 → S4 素材库 → S5 极致事件 → S6 情绪规划 → S7 结构搭建 → S8 大纲 → S9 脚本(分镜)→ S10 可选细粒度分镜 → S11 诊断复盘;prompt 带「选题方向:{topic}」 |
| 验证点 | ① 任务状态流转正常(IN_PROGRESS → DONE/COMPLETED);② 脚本落盘 `MCNSkill项目/俊希/脚本1/`(产物链:05_故事选题 → 06_短视频框架 → 07_短视频大纲 → 09_短视频脚本,禁跳步);③ S9 脚本质量门禁:开场钩子绝对时长 3-7 秒(硬上限 10 秒,不看占比);④ 数字账取证(禁心算);⑤ 画面标注 5 字段【景别|环境|光线|场景|场景元素】;⑥ 人物标注格式统一;⑦ 交付物只含输出模板字段(验收口径=执行约束,不在正文自证) |
| 通过标准 | 脚本全流程完成落盘;S9 脚本完整可拍;工作台任务状态 done;按钮恢复 |
### TC-11 收尾验证
| 项 | 内容 |
|---|------|
| 操作 | 全链路产物盘点 + 一致性校验 + git 提交 |
| 预期 | ① 文件齐全:账号表俊希行 / 短视频表格.xlsx / top 解析 JSON / 俊希账号设定.md / 俊希账号设定卡.svg / 脚本1/ 产物;② grep 校验:设定 md ↔ 卡片 SVG 关键术语一致,无「TOP6」残留于俊希产出(除非实际解析 6 条);③ 达人账号表 15 列仅按用户要求增改;④ 源技能与 .dsh 副本同步状态无意外差异 |
| 验证点 | 逐项核对(见「四、数据校验标准」);git:源仓库 mcnskills push + dsh_MCNProject(若有技能变更)push,跟踪引用正常 |
| 通过标准 | 所有验收项 ✅;无未授权修改 |
---
## 四、数据校验标准(逐项核对)
| 校验对象 | 标准 |
|---------|------|
| 达人账号表.xlsx | 15 列结构不变;俊希行 70014;抖音号/抖音ID/抖音地址文本格式;更新时间 `YYYY-MM-DD HH:MM`;仅用户要求增改 |
| 短视频表格.xlsx | 13 列表头一致;≥60 条;点赞/分享/时长/发布时间数值正确 |
| top6.json | n ≤ 6;最近三个月 + ≤15min + 点赞+分享降序;n=后续 TOPn |
| 解析 JSON | 每视频文件夹 content.json + analysis.json;JSON 可读;文件夹名 `标题_标签1_标签2` |
| 俊希账号设定.md | 12 段齐全;内容基因板块数 = n(TOPn);赛道归 29 枚举;账号级内容规则 |
| 俊希账号设定卡.svg | 模块名「叙事结构」「内容标签」「内容基因·TOPn」;n=实际解析条数;同账号固定色系 |
| 一致性 grep | `叙事结构|内容标签|内容基因·TOP` 在 md 与 SVG 中一致;俊希产出无「TOP6」残留(n≠6 时) |
| 脚本产物 | 脚本1/ 目录;产物链 05→06→07→09 顺序;S9 开场钩子 3-7s;数字账取证;5 字段画面标注 |
| 版本标签(若有技能变更) | 源 SKILL.md `updated_at`/`last_change` 更新;dsh 副本 `deployed_at` 同步 |
---
## 五、异常分支与处理预案
| 异常 | 处理 |
|-----|------|
| browser-harness 未安装(P3 不通过) | 按红线提醒用户(可跳过:改用三方 API/MCP 兜底数据源)→ 同意则 `uv tool install --python 3.12 --upgrade --force browser-harness` → `browser-harness doctor` 验三要素(工具/daemon/Chrome) |
| MCP 未安装/不可用(P4 不通过) | 按 MCP 规范「首次提问」轻量提醒(可跳过、不打断创作);同意则部署预检(Node/Python → npm 缓存权限仅 macOS 查 → npm 源)→ 写入 mcp.json + 引导 Trust |
| sec_uid 失效(主页「用户不存在」) | 改用抖音搜索昵称/抖音号重新定位主页,回填正确 sec_uid 与抖音地址 |
| 账号表已有俊希(非首次) | 走「有就刷新」:检查更新时间近 1 个月 → 提示用户判断是否刷新;用户确认后重新抓取覆盖 |
| 视频解析中/analysis 未出 | content 已出 analysis 未出 → 稍后重试;「解析中」→ 等 2-3 分钟再查 |
| 解析失败/无法解析 | 按视频补充规则取下一位(点赞+分享降序)补齐至 n 条 |
| 弹登录窗口 | 暂停操作,提示用户登录后继续 |
| 工作台任务长时间 running(>30min) | 检查 automations 状态与 cwds 配置;必要时人工介入会话 |
| 设定 md 与卡片 TOPn 不一致 | 以实际解析条数为准修正两文件(改设定→卡片重生成;改卡片→设定同步),grep 复验 |
---
## 六、验收汇总表(执行后填写)
| 环节 | 用例 | 结果(✅/❌/⚠️) | 备注 |
|-----|------|----------------|------|
| 账号表登记 | TC-01 | ✅ | 俊希 70014 已登记,15 列结构不变,已有行未受影响(09-01 复核) |
| 获取账号信息 | TC-02 | ✅ | 15 列补齐:JJX0827/sec_uid/地址/粉丝281.9w/获赞3658.9w/作品136/IP广西,更新时间 2026-08-31 18:05(浏览器实时抓取) |
| 获取视频列表 | TC-03 | ✅ | `短视频表格.xlsx` 13 列 136 行(≥60) |
| 筛选 TOP | TC-04 | ✅ | top6.json 6 条(n=6,最近三个月+≤15min+点赞+分享降序) |
| MCP 解析 | TC-05 | ✅ | 6 条全部 ACCEPTED(33021/29596/15729/21514/20164/33022),09-01 凌晨调度器拾取并行执行 |
| 保存解析 | TC-06 | ✅ | 6/6 目录各含 content.json+analysis.json,JSON 全部可读(verify 通过) |
| 人设卡 12 段 | TC-07 | ✅ | `俊希账号设定.md` 12 段齐全,内容基因板块数=6(TOP6) |
| 设定卡自动生成 | TC-08 | ✅ | `俊希账号设定卡.svg` 生成;grep 一致性通过(叙事结构/内容标签/内容基因·TOP6 两文件一致) |
| AI 选题 | TC-09 | ✅ | **界面模拟点击实测 PASS**(cdp-test-junxi.mjs --port 8900):定位/弹窗/选题 3 方向全 PASS(穷鬼大餐/手绘拼音菜单/菜场散心) |
| AI 写脚本 | TC-10 | ✅ | 09-01 实测:--confirm 触发 → automations 写入(+5s 调度)→ 调度器拾取 → 会话 cd064941 完成 → `脚本01/09_脚本正文.md` + 创作回顾 HTML。S9 质量门禁:6 场 420s 数字账一致、5 字段画面标注、人物标注统一、开场钩子 3-7s 达标 |
| 收尾验证 | TC-11 | ✅ | 全链路产物 12 项齐全;账号表仅按需增改 3 行;调度机制修复(next_run_at+并发锁)验证通过 |
| **整体结论** | | **✅ 通过** | 09-01 全链路复测:修复后调度链路完整跑通(含并行解析 6 条 + 创作会话) |
---
## 附:本次执行的环境事实(2026-08-31 调研记录)
- 达人账号表当前仅 2 行:小咪橘座(70010,已解析/已生成)、旧梦留声机(70013,已生成)→ 俊希首次登记为 70014
- `MCNSkill项目/俊希/` 现有仅 `提示词01/` 子目录(分镜产出,属短视频分镜提示词技能),无账号分析产出
- **工作台 mcn-plugin.db 俊希历史数据**:hot_accounts id=3(完整账号信息 + content 设定文本,source_dir=`D:\dshworkspace\账号解析\俊希` **旧路径已不存在**)、account_videos 108 条(source_dir=`D:\dshworkspace\抖音账号分析\俊希` 旧路径)、rewrite_log 3 条(2026-08-19,海鲜大餐主题);**account_persona 无俊希** → hasPersona=false → 弹窗走「先进行账号设定分析」分支,首次场景成立,无需清除
- dsh 原库(~/.dsh/mcn-plugin.db)俊希数据与副本一致(.dsh 只读红线不写)
- **界面模拟点击测试脚本**:`mcn-workshop/cdp-test-junxi.mjs`(2026-08-31 实测通过:账号列表定位俊希 PASS / AI写脚本弹窗结构 PASS / AI 选题 3 个方向 PASS);注意 `.modal` 选择器会被 index.html 隐藏的 `#settingsModal` 干扰,须限定 `:not([hidden])` 且含 `#aiTopicGen`
- MCP 解析单条视频需等待 3-5 分钟;已解析过的视频可直接查询
- 工作台 #/reviews「AI脚本诊断」复盘按钮明确按 **mcn-script-review(脚本复盘)技能**执行(本用例主链路不含复盘,如需回归可追加)
- 产出根目录:开发机 → 桌面 `MCNSkill项目/{达人昵称}/`(`references/路径配置.md` 权威)